Skip to content

Commit

Permalink
Convert to namespace types
Browse files Browse the repository at this point in the history
  • Loading branch information
mj12albert committed Sep 5, 2024
1 parent 30245d0 commit 4293925
Show file tree
Hide file tree
Showing 27 changed files with 495 additions and 579 deletions.
4 changes: 2 additions & 2 deletions packages/mui-base/src/Slider/Control/SliderControl.test.tsx
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
import * as React from 'react';
import * as Slider from '@base_ui/react/Slider';
import { SliderProvider, type SliderProviderValue } from '@base_ui/react/Slider';
import { createRenderer, describeConformance } from '#test-utils';
import { SliderProvider } from '../Root/SliderProvider';

const NOOP = () => {};

describe('<Slider.Control />', () => {
const { render } = createRenderer();

const testProviderValue: SliderProviderValue = {
const testProviderValue: SliderProvider.Value = {
active: -1,
areValuesEqual: () => true,
axis: 'horizontal',
Expand Down
11 changes: 7 additions & 4 deletions packages/mui-base/src/Slider/Control/SliderControl.tsx
Original file line number Diff line number Diff line change
@@ -1,14 +1,15 @@
'use client';
import * as React from 'react';
import PropTypes from 'prop-types';
import type { BaseUIComponentProps } from '../../utils/types';
import { useComponentRenderer } from '../../utils/useComponentRenderer';
import { useSliderContext } from '../Root/SliderProvider';
import { sliderStyleHookMapping } from '../Root/styleHooks';
import { SliderControlProps } from './SliderControl.types';
import type { SliderRoot } from '../Root/SliderRoot';
import { useSliderControl } from './useSliderControl';

const SliderControl = React.forwardRef(function SliderControl(
props: SliderControlProps,
export const SliderControl = React.forwardRef(function SliderControl(
props: SliderControl.Props,
forwardedRef: React.ForwardedRef<HTMLDivElement>,
) {
const { render: renderProp, className, ...otherProps } = props;
Expand Down Expand Up @@ -80,4 +81,6 @@ SliderControl.propTypes /* remove-proptypes */ = {
render: PropTypes.oneOfType([PropTypes.element, PropTypes.func]),
} as any;

export { SliderControl };
export namespace SliderControl {
export interface Props extends BaseUIComponentProps<'span', SliderRoot.OwnerState> {}
}
34 changes: 0 additions & 34 deletions packages/mui-base/src/Slider/Control/SliderControl.types.ts

This file was deleted.

43 changes: 39 additions & 4 deletions packages/mui-base/src/Slider/Control/useSliderControl.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,15 @@
import * as React from 'react';
import { mergeReactProps } from '../../utils/mergeReactProps';
import { ownerDocument } from '../../utils/owner';
import type { GenericHTMLProps } from '../../utils/types';
import { useForkRef } from '../../utils/useForkRef';
import { useEventCallback } from '../../utils/useEventCallback';
import { focusThumb, trackFinger, validateMinimumDistance } from '../Root/useSliderRoot';
import { UseSliderControlParameters, UseSliderControlReturnValue } from './SliderControl.types';
import {
focusThumb,
trackFinger,
type useSliderRoot,
validateMinimumDistance,
} from '../Root/useSliderRoot';
import { useFieldControlValidation } from '../../Field/Control/useFieldControlValidation';

const INTENTIONAL_DRAG_COUNT_THRESHOLD = 2;
Expand All @@ -19,8 +24,8 @@ const INTENTIONAL_DRAG_COUNT_THRESHOLD = 2;
* - [useSliderControl API](https://mui.com/base-ui/react-slider/hooks-api/#use-slider-control)
*/
export function useSliderControl(
parameters: UseSliderControlParameters,
): UseSliderControlReturnValue {
parameters: useSliderControl.Parameters,
): useSliderControl.ReturnValue {
const {
areValuesEqual,
disabled,
Expand Down Expand Up @@ -291,3 +296,33 @@ export function useSliderControl(
[getRootProps],
);
}

export namespace useSliderControl {
export interface Parameters
extends Pick<
useSliderRoot.ReturnValue,
| 'areValuesEqual'
| 'disabled'
| 'dragging'
| 'getFingerNewValue'
| 'handleValueChange'
| 'minStepsBetweenValues'
| 'onValueCommitted'
| 'percentageValues'
| 'registerSliderControl'
| 'setActive'
| 'setDragging'
| 'setValueState'
| 'step'
| 'subitems'
> {
/**
* The ref attached to the control area of the Slider.
*/
rootRef?: React.Ref<Element>;
}

export interface ReturnValue {
getRootProps: (externalProps?: GenericHTMLProps) => GenericHTMLProps;
}
}
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
import * as React from 'react';
import * as Slider from '@base_ui/react/Slider';
import { SliderProvider, type SliderProviderValue } from '@base_ui/react/Slider';
import { createRenderer, describeConformance } from '#test-utils';
import { SliderProvider } from '../Root/SliderProvider';

const NOOP = () => {};

describe('<Slider.Indicator />', () => {
const { render } = createRenderer();

const testProviderValue: SliderProviderValue = {
const testProviderValue: SliderProvider.Value = {
active: -1,
areValuesEqual: () => true,
axis: 'horizontal',
Expand Down
13 changes: 8 additions & 5 deletions packages/mui-base/src/Slider/Indicator/SliderIndicator.tsx
Original file line number Diff line number Diff line change
@@ -1,15 +1,16 @@
'use client';
import * as React from 'react';
import PropTypes from 'prop-types';
import type { BaseUIComponentProps } from '../../utils/types';
import { useComponentRenderer } from '../../utils/useComponentRenderer';
import { useSliderContext } from '../Root/SliderProvider';
import { sliderStyleHookMapping } from '../Root/styleHooks';
import { SliderIndicatorProps } from './SliderIndicator.types';
import type { SliderRoot } from '../Root/SliderRoot';
import { useSliderIndicator } from './useSliderIndicator';

const SliderIndicator = React.forwardRef(function SliderIndicator(
props: SliderIndicatorProps,
forwardedRef: React.ForwardedRef<HTMLSpanElement>,
export const SliderIndicator = React.forwardRef(function SliderIndicator(
props: SliderIndicator.Props,
forwardedRef: React.ForwardedRef<HTMLElement>,
) {
const { render, className, ...otherProps } = props;

Expand Down Expand Up @@ -56,4 +57,6 @@ SliderIndicator.propTypes /* remove-proptypes */ = {
render: PropTypes.oneOfType([PropTypes.element, PropTypes.func]),
} as any;

export { SliderIndicator };
export namespace SliderIndicator {
export interface Props extends BaseUIComponentProps<'span', SliderRoot.OwnerState> {}
}
16 changes: 0 additions & 16 deletions packages/mui-base/src/Slider/Indicator/SliderIndicator.types.ts

This file was deleted.

24 changes: 16 additions & 8 deletions packages/mui-base/src/Slider/Indicator/useSliderIndicator.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,8 @@
'use client';
import * as React from 'react';
import { mergeReactProps } from '../../utils/mergeReactProps';
import {
UseSliderIndicatorParameters,
UseSliderIndicatorReturnValue,
} from './SliderIndicator.types';
import type { GenericHTMLProps } from '../../utils/types';
import type { useSliderRoot } from '../Root/useSliderRoot';

const axisProps = {
horizontal: {
Expand All @@ -30,9 +28,9 @@ const axisProps = {
*
* - [useSliderIndicator API](https://mui.com/base-ui/react-slider/hooks-api/#use-slider-indicator)
*/
function useSliderIndicator(
parameters: UseSliderIndicatorParameters,
): UseSliderIndicatorReturnValue {
export function useSliderIndicator(
parameters: useSliderIndicator.Parameters,
): useSliderIndicator.ReturnValue {
const { axis, direction, orientation, percentageValues } = parameters;

const isRange = percentageValues.length > 1;
Expand Down Expand Up @@ -83,4 +81,14 @@ function useSliderIndicator(
);
}

export { useSliderIndicator };
export namespace useSliderIndicator {
export interface Parameters
extends Pick<
useSliderRoot.ReturnValue,
'axis' | 'direction' | 'disabled' | 'orientation' | 'percentageValues'
> {}

export interface ReturnValue {
getRootProps: (externalProps?: GenericHTMLProps) => GenericHTMLProps;
}
}
4 changes: 2 additions & 2 deletions packages/mui-base/src/Slider/Output/SliderOutput.test.tsx
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
import * as React from 'react';
import { expect } from 'chai';
import * as Slider from '@base_ui/react/Slider';
import { SliderProvider, type SliderProviderValue } from '@base_ui/react/Slider';
import { createRenderer, describeConformance } from '#test-utils';
import { SliderProvider } from '../Root/SliderProvider';

const NOOP = () => {};

describe('<Slider.Output />', () => {
const { render } = createRenderer();

const testProviderValue: SliderProviderValue = {
const testProviderValue: SliderProvider.Value = {
active: -1,
areValuesEqual: () => true,
axis: 'horizontal',
Expand Down
11 changes: 7 additions & 4 deletions packages/mui-base/src/Slider/Output/SliderOutput.tsx
Original file line number Diff line number Diff line change
@@ -1,14 +1,15 @@
'use client';
import * as React from 'react';
import PropTypes from 'prop-types';
import type { BaseUIComponentProps } from '../../utils/types';
import { useComponentRenderer } from '../../utils/useComponentRenderer';
import { useSliderContext } from '../Root/SliderProvider';
import { sliderStyleHookMapping } from '../Root/styleHooks';
import { SliderOutputProps } from './SliderOutput.types';
import type { SliderRoot } from '../Root/SliderRoot';
import { useSliderOutput } from './useSliderOutput';

const SliderOutput = React.forwardRef(function SliderOutput(
props: SliderOutputProps,
export const SliderOutput = React.forwardRef(function SliderOutput(
props: SliderOutput.Props,
forwardedRef: React.ForwardedRef<HTMLOutputElement>,
) {
const { render, className, ...otherProps } = props;
Expand Down Expand Up @@ -54,4 +55,6 @@ SliderOutput.propTypes /* remove-proptypes */ = {
render: PropTypes.oneOfType([PropTypes.element, PropTypes.func]),
} as any;

export { SliderOutput };
export namespace SliderOutput {
export interface Props extends BaseUIComponentProps<'output', SliderRoot.OwnerState> {}
}
14 changes: 0 additions & 14 deletions packages/mui-base/src/Slider/Output/SliderOutput.types.ts

This file was deleted.

18 changes: 15 additions & 3 deletions packages/mui-base/src/Slider/Output/useSliderOutput.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
'use client';
import * as React from 'react';
import { mergeReactProps } from '../../utils/mergeReactProps';
import { UseSliderOutputParameters, UseSliderOutputReturnValue } from './SliderOutput.types';
import type { useSliderRoot } from '../Root/useSliderRoot';
/**
*
* Demos:
Expand All @@ -12,7 +12,9 @@ import { UseSliderOutputParameters, UseSliderOutputReturnValue } from './SliderO
*
* - [useSliderOutput API](https://mui.com/base-ui/react-slider/hooks-api/#use-slider-output)
*/
function useSliderOutput(parameters: UseSliderOutputParameters): UseSliderOutputReturnValue {
export function useSliderOutput(
parameters: useSliderOutput.Parameters,
): useSliderOutput.ReturnValue {
const { 'aria-live': ariaLive = 'off', subitems } = parameters;

const outputFor = Array.from(subitems.values()).reduce((acc, item) => {
Expand All @@ -39,4 +41,14 @@ function useSliderOutput(parameters: UseSliderOutputParameters): UseSliderOutput
);
}

export { useSliderOutput };
export namespace useSliderOutput {
export interface Parameters extends Pick<useSliderRoot.ReturnValue, 'subitems'> {
'aria-live'?: React.AriaAttributes['aria-live'];
}

export interface ReturnValue {
getRootProps: (
externalProps?: React.ComponentPropsWithRef<'output'>,
) => React.ComponentPropsWithRef<'output'>;
}
}
30 changes: 20 additions & 10 deletions packages/mui-base/src/Slider/Root/SliderProvider.tsx
Original file line number Diff line number Diff line change
@@ -1,15 +1,10 @@
'use client';
import * as React from 'react';
import PropTypes from 'prop-types';
import { CompoundComponentContext } from '../../useCompound';
import { SliderContextValue, SliderProviderValue } from './SliderRoot.types';
import { CompoundComponentContext, CompoundComponentContextValue } from '../../useCompound';
import type { SliderRoot } from './SliderRoot';

export interface SliderProviderProps {
value: SliderProviderValue;
children: React.ReactNode;
}

export const SliderContext = React.createContext<SliderContextValue | undefined>(undefined);
export const SliderContext = React.createContext<SliderRoot.Context | undefined>(undefined);

if (process.env.NODE_ENV !== 'production') {
SliderContext.displayName = 'SliderContext';
Expand All @@ -28,7 +23,7 @@ export function useSliderContext() {
*
* @ignore - do not document.
*/
function SliderProvider(props: SliderProviderProps) {
export function SliderProvider(props: SliderProvider.Props) {
const { value: valueProp, children } = props;

const { compoundComponentContextValue, ...contextValue } = valueProp;
Expand Down Expand Up @@ -99,4 +94,19 @@ SliderProvider.propTypes /* remove-proptypes */ = {
}).isRequired,
} as any;

export { SliderProvider };
interface SliderThumbMetadata {
inputId: string;
ref: React.RefObject<HTMLElement>;
inputRef: React.RefObject<HTMLInputElement>;
}

export namespace SliderProvider {
export interface Props {
value: Value;
children: React.ReactNode;
}

export interface Value extends SliderRoot.Context {
compoundComponentContextValue: CompoundComponentContextValue<any, SliderThumbMetadata>;
}
}
Loading

0 comments on commit 4293925

Please sign in to comment.