{"version":3,"sources":["../../src/stepper/Stepper.tsx","../../src/stepper/useStepper.ts","../../src/stepper/StepperButton.tsx","../../src/stepper/StepperInput.tsx","../../src/stepper/index.ts"],"sourcesContent":["import { useFormFieldControl } from '@spark-ui/components/form-field'\nimport { createContext, type PropsWithChildren, RefObject, useContext, useRef } from 'react'\n\nimport { InputGroup } from '../input'\nimport type { StepperProps, UseStepperReturn } from './types'\nimport { useStepper } from './useStepper'\n\nconst StepperContext = createContext<\n  (Omit<UseStepperReturn, 'groupProps'> & { inputRef: RefObject<HTMLInputElement | null> }) | null\n>(null)\n\nexport const Stepper = ({\n  children,\n  formatOptions,\n  minValue,\n  maxValue,\n  ref: forwardedRef,\n  ...stepperProps\n}: PropsWithChildren<StepperProps>) => {\n  const inputRef = useRef<HTMLInputElement>(null)\n\n  const {\n    groupProps,\n    inputProps: _inputProps,\n    incrementButtonProps: _incrementButtonProps,\n    decrementButtonProps: _decrementButtonProps,\n  } = useStepper({\n    ...{\n      ...stepperProps,\n      /**\n       * To enable the possibility to init the stepper with empty (undefined) value,\n       * we need to force the empty value to NaN.\n       * Cf. https://github.com/adobe/react-spectrum/issues/5524\n       */\n      ...('value' in stepperProps && { value: stepperProps.value ?? NaN }),\n      onChange: stepperProps.onValueChange,\n    },\n    formatOptions,\n    minValue,\n    maxValue,\n    inputRef,\n  })\n\n  const formFieldControlProps = useFormFieldControl()\n  const isWrappedInFormField = !!formFieldControlProps.id\n\n  const incrementButtonProps = {\n    ..._incrementButtonProps,\n    ...(isWrappedInFormField && { 'aria-controls': formFieldControlProps.id }),\n  }\n\n  const decrementButtonProps = {\n    ..._decrementButtonProps,\n    ...(isWrappedInFormField && { 'aria-controls': formFieldControlProps.id }),\n  }\n\n  const inputProps = {\n    ..._inputProps,\n    ...(isWrappedInFormField && {\n      id: formFieldControlProps.id,\n      required: formFieldControlProps.isRequired,\n      'aria-invalid': formFieldControlProps.isInvalid ? true : undefined,\n    }),\n  }\n\n  const { onValueChange: _, ...remainingStepperProps } = stepperProps\n\n  return (\n    <StepperContext.Provider\n      value={{ incrementButtonProps, decrementButtonProps, inputProps, inputRef }}\n    >\n      <InputGroup\n        {...remainingStepperProps}\n        {...groupProps}\n        data-spark-component=\"stepper\"\n        ref={forwardedRef}\n      >\n        {children}\n      </InputGroup>\n    </StepperContext.Provider>\n  )\n}\n\nStepper.displayName = 'Stepper'\n\nexport const useStepperContext = () => {\n  const context = useContext(StepperContext)\n\n  if (!context) {\n    throw Error('useStepperContext must be used within a Stepper provider')\n  }\n\n  return context\n}\n","import { useNumberField } from '@react-aria/numberfield'\nimport { useNumberFieldState } from '@react-stately/numberfield'\n\nimport type { UseStepperArgs, UseStepperReturn } from './types'\n\nexport const useStepper = ({\n  inputRef,\n  locale = 'fr',\n  ...rest\n}: UseStepperArgs): UseStepperReturn => {\n  const state = useNumberFieldState({\n    ...rest,\n    isDisabled: rest.disabled,\n    isReadOnly: rest.readOnly,\n    isRequired: rest.required,\n    locale,\n  })\n\n  const { groupProps, inputProps, incrementButtonProps, decrementButtonProps } = useNumberField(\n    {\n      isWheelDisabled: false,\n      ...rest,\n      isDisabled: rest.disabled,\n      isReadOnly: rest.readOnly,\n      isRequired: rest.required,\n    },\n    state,\n    inputRef\n  )\n\n  return {\n    groupProps,\n    inputProps,\n    incrementButtonProps,\n    decrementButtonProps,\n  }\n}\n","import { useButton } from '@react-aria/button'\nimport { Minus } from '@spark-ui/icons/Minus'\nimport { Plus } from '@spark-ui/icons/Plus'\nimport { type PropsWithChildren, useRef } from 'react'\n\nimport { Icon } from '../icon'\nimport { IconButton } from '../icon-button'\nimport { InputGroup } from '../input'\nimport { useStepperContext } from './Stepper'\nimport type { StepperButtonProps } from './types'\n\nconst IncrementButton = ({\n  children,\n  design = 'ghost',\n  intent = 'neutral',\n  className,\n  ref: forwardedRef,\n  ...rest\n}: PropsWithChildren<StepperButtonProps>) => {\n  const innerRef = useRef<HTMLButtonElement>(null)\n  const ref = forwardedRef && typeof forwardedRef !== 'function' ? forwardedRef : innerRef\n\n  const { incrementButtonProps } = useStepperContext()\n  const { buttonProps } = useButton({ ...incrementButtonProps, ...rest }, ref)\n\n  return (\n    <InputGroup.TrailingAddon asChild data-spark-component=\"stepper-increment-button\">\n      <IconButton\n        ref={ref}\n        design={design}\n        intent={intent}\n        className={className}\n        aria-label={buttonProps['aria-label'] as string}\n        {...buttonProps}\n        disabled={rest.disabled || buttonProps.disabled}\n      >\n        {children || (\n          <Icon>\n            <Plus />\n          </Icon>\n        )}\n      </IconButton>\n    </InputGroup.TrailingAddon>\n  )\n}\n\nconst DecrementButton = ({\n  children,\n  design = 'ghost',\n  intent = 'neutral',\n  className,\n  ref: forwardedRef,\n  ...rest\n}: PropsWithChildren<StepperButtonProps>) => {\n  const innerRef = useRef<HTMLButtonElement>(null)\n  const ref = forwardedRef && typeof forwardedRef !== 'function' ? forwardedRef : innerRef\n\n  const { decrementButtonProps } = useStepperContext()\n  const { buttonProps } = useButton({ ...decrementButtonProps, ...rest }, ref)\n\n  return (\n    <InputGroup.LeadingAddon asChild data-spark-component=\"stepper-decrement-button\">\n      <IconButton\n        ref={ref}\n        design={design}\n        intent={intent}\n        className={className}\n        aria-label={buttonProps['aria-label'] as string}\n        {...buttonProps}\n        disabled={rest.disabled || buttonProps.disabled}\n      >\n        {children || (\n          <Icon>\n            <Minus />\n          </Icon>\n        )}\n      </IconButton>\n    </InputGroup.LeadingAddon>\n  )\n}\n\nexport const StepperIncrementButton = Object.assign(IncrementButton, {\n  id: 'TrailingAddon',\n})\n\nexport const StepperDecrementButton = Object.assign(DecrementButton, {\n  id: 'LeadingAddon',\n})\n\nIncrementButton.displayName = 'Stepper.DecrementButton'\nDecrementButton.displayName = 'Stepper.DecrementButton'\n","import { useMergeRefs } from '@spark-ui/hooks/use-merge-refs'\n\nimport { Input as SparkInput } from '../input'\nimport { useStepperContext } from './Stepper'\nimport type { StepperInputProps } from './types'\n\nconst Input = ({ ref: forwardedRef, ...props }: StepperInputProps) => {\n  const { inputRef, inputProps } = useStepperContext()\n  const ref = useMergeRefs(forwardedRef, inputRef)\n  const { className = '', ...remainingProps } = props\n\n  return (\n    <SparkInput\n      ref={ref}\n      {...remainingProps}\n      {...inputProps}\n      className={`min-w-sz-56 text-center ${className}`}\n    />\n  )\n}\n\nexport const StepperInput = Object.assign(Input, {\n  id: 'Input',\n})\n\nInput.displayName = 'Stepper.Input'\n","import { Stepper as Root } from './Stepper'\nimport {\n  StepperDecrementButton as DecrementButton,\n  StepperIncrementButton as IncrementButton,\n} from './StepperButton'\nimport { StepperInput as Input } from './StepperInput'\n\nexport const Stepper: typeof Root & {\n  IncrementButton: typeof IncrementButton\n  DecrementButton: typeof DecrementButton\n  Input: typeof Input\n} = Object.assign(Root, { IncrementButton, DecrementButton, Input })\n\nStepper.displayName = 'Stepper'\nIncrementButton.displayName = 'Stepper.IncrementButton'\nDecrementButton.displayName = 'Stepper.DecrementButton'\nInput.displayName = 'Stepper.Input'\n\nexport type { StepperProps, StepperButtonProps, StepperInputProps } from './types'\n"],"mappings":"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","names":["useRef","jsx","useRef","jsx","Input","Stepper"]}