@sth87/shadcn-design-system 0.1.0 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/components/Checkbox/Checkbox.cjs +1 -1
- package/dist/cjs/components/Checkbox/Checkbox.cjs.map +1 -1
- package/dist/cjs/components/Input/Input.cjs +1 -1
- package/dist/cjs/components/Input/Input.cjs.map +1 -1
- package/dist/cjs/components/Rate/Rate.cjs +1 -1
- package/dist/cjs/components/Rate/Rate.cjs.map +1 -1
- package/dist/cjs/components/Sheet/Sheet.cjs +1 -1
- package/dist/cjs/components/Sheet/Sheet.cjs.map +1 -1
- package/dist/cjs/components/Slider/Slider.cjs +1 -1
- package/dist/cjs/components/Slider/Slider.cjs.map +1 -1
- package/dist/cjs/components/Stepper/Stepper.cjs +1 -1
- package/dist/cjs/components/Stepper/Stepper.cjs.map +1 -1
- package/dist/cjs/components/Stepper/StepperWrapper.cjs +1 -1
- package/dist/cjs/components/Stepper/StepperWrapper.cjs.map +1 -1
- package/dist/cjs/components/Switch/Switch.cjs +1 -1
- package/dist/cjs/components/Switch/Switch.cjs.map +1 -1
- package/dist/cjs/components/Table/data-table-column-header.cjs +1 -1
- package/dist/cjs/components/Table/data-table-column-header.cjs.map +1 -1
- package/dist/cjs/components/Tabs/classes.cjs +1 -1
- package/dist/cjs/components/Tabs/classes.cjs.map +1 -1
- package/dist/cjs/components/TimeGridView.cjs +1 -1
- package/dist/cjs/components/TimeGridView.cjs.map +1 -1
- package/dist/cjs/components/Toast/Toast.cjs +1 -1
- package/dist/cjs/components/Toast/Toast.cjs.map +1 -1
- package/dist/cjs/components/Tooltip/Tooltip.cjs +1 -1
- package/dist/cjs/components/Tooltip/Tooltip.cjs.map +1 -1
- package/dist/cjs/components/WheelColumn.cjs +1 -1
- package/dist/cjs/components/WheelColumn.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/calendar.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/calendar.cjs.map +1 -1
- package/dist/cjs/styles/index.css +1 -1
- package/dist/esm/components/Checkbox/Checkbox.js +20 -20
- package/dist/esm/components/Checkbox/Checkbox.js.map +1 -1
- package/dist/esm/components/Input/Input.js +43 -43
- package/dist/esm/components/Input/Input.js.map +1 -1
- package/dist/esm/components/Rate/Rate.js +15 -15
- package/dist/esm/components/Rate/Rate.js.map +1 -1
- package/dist/esm/components/Sheet/Sheet.js +25 -25
- package/dist/esm/components/Sheet/Sheet.js.map +1 -1
- package/dist/esm/components/Slider/Slider.js +139 -139
- package/dist/esm/components/Slider/Slider.js.map +1 -1
- package/dist/esm/components/Stepper/Stepper.js +52 -52
- package/dist/esm/components/Stepper/Stepper.js.map +1 -1
- package/dist/esm/components/Stepper/StepperWrapper.js +25 -25
- package/dist/esm/components/Stepper/StepperWrapper.js.map +1 -1
- package/dist/esm/components/Switch/Switch.js +19 -19
- package/dist/esm/components/Switch/Switch.js.map +1 -1
- package/dist/esm/components/Table/data-table-column-header.js +22 -22
- package/dist/esm/components/Table/data-table-column-header.js.map +1 -1
- package/dist/esm/components/Tabs/classes.js +128 -128
- package/dist/esm/components/Tabs/classes.js.map +1 -1
- package/dist/esm/components/TimeGridView.js +27 -27
- package/dist/esm/components/TimeGridView.js.map +1 -1
- package/dist/esm/components/Toast/Toast.js +26 -26
- package/dist/esm/components/Toast/Toast.js.map +1 -1
- package/dist/esm/components/Tooltip/Tooltip.js +42 -42
- package/dist/esm/components/Tooltip/Tooltip.js.map +1 -1
- package/dist/esm/components/WheelColumn.js +9 -9
- package/dist/esm/components/WheelColumn.js.map +1 -1
- package/dist/esm/packages/ui/src/components/calendar.js +73 -73
- package/dist/esm/packages/ui/src/components/calendar.js.map +1 -1
- package/dist/esm/styles/index.css +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Stepper.js","sources":["../../../../src/components/Stepper/Stepper.tsx"],"sourcesContent":["\"use client\";\n\nimport { cn, Slot, useComposedRefs } from \"@dsui/ui/index\";\nimport { Check } from \"lucide-react\";\nimport * as React from \"react\";\n\nconst ROOT_NAME = \"Stepper\";\nconst LIST_NAME = \"StepperList\";\nconst ITEM_NAME = \"StepperItem\";\nconst TRIGGER_NAME = \"StepperTrigger\";\nconst INDICATOR_NAME = \"StepperIndicator\";\nconst SEPARATOR_NAME = \"StepperSeparator\";\nconst TITLE_NAME = \"StepperTitle\";\nconst DESCRIPTION_NAME = \"StepperDescription\";\nconst CONTENT_NAME = \"StepperContent\";\nconst PREV_NAME = \"StepperPrev\";\nconst NEXT_NAME = \"StepperNext\";\n\nconst ENTRY_FOCUS = \"stepperFocusGroup.onEntryFocus\";\nconst EVENT_OPTIONS = { bubbles: false, cancelable: true };\nconst ARROW_KEYS = [\"ArrowUp\", \"ArrowDown\", \"ArrowLeft\", \"ArrowRight\"];\n\nconst stepperColorClasses: Record<\n StepperColor,\n {\n indicator: {\n active: string;\n completed: string;\n inactive: string;\n };\n separator: {\n active: string;\n completed: string;\n inactive: string;\n };\n }\n> = {\n primary: {\n indicator: {\n active:\n \"ds:border-primary ds:bg-primary ds:text-primary-foreground ds:data-[variant=dot]:bg-primary/30 ds:data-[variant=dot]:border-primary/0\",\n completed:\n \"ds:border-primary ds:bg-primary ds:text-primary-foreground ds:data-[variant=dot]:bg-primary/30 ds:data-[variant=dot]:border-primary/0\",\n inactive:\n \"ds:border-muted ds:bg-background ds:text-muted-foreground ds:data-[variant=dot]:bg-muted/30 ds:data-[variant=dot]:border-muted/0\",\n },\n separator: {\n active: \"ds:bg-primary\",\n completed: \"ds:bg-primary\",\n inactive: \"ds:bg-border\",\n },\n },\n secondary: {\n indicator: {\n active:\n \"ds:border-secondary ds:bg-secondary ds:text-secondary-foreground ds:data-[variant=dot]:bg-secondary/30 ds:data-[variant=dot]:border-secondary/0\",\n completed:\n \"ds:border-secondary ds:bg-secondary ds:text-secondary-foreground ds:data-[variant=dot]:bg-secondary/30 ds:data-[variant=dot]:border-secondary/0\",\n inactive:\n \"ds:border-muted ds:bg-background ds:text-muted-foreground ds:data-[variant=dot]:bg-muted/30 ds:data-[variant=dot]:border-muted/0\",\n },\n separator: {\n active: \"ds:bg-secondary\",\n completed: \"ds:bg-secondary\",\n inactive: \"ds:bg-border\",\n },\n },\n accent: {\n indicator: {\n active:\n \"ds:border-accent ds:bg-accent ds:text-accent-foreground ds:data-[variant=dot]:bg-accent/30 ds:data-[variant=dot]:border-accent/0\",\n completed:\n \"ds:border-accent ds:bg-accent ds:text-accent-foreground ds:data-[variant=dot]:bg-accent/30 ds:data-[variant=dot]:border-accent/0\",\n inactive:\n \"ds:border-muted ds:bg-background ds:text-muted-foreground ds:data-[variant=dot]:bg-muted/30 ds:data-[variant=dot]:border-muted/0\",\n },\n separator: {\n active: \"ds:bg-accent\",\n completed: \"ds:bg-accent\",\n inactive: \"ds:bg-border\",\n },\n },\n destructive: {\n indicator: {\n active:\n \"ds:border-destructive ds:bg-destructive ds:text-destructive-foreground ds:data-[variant=dot]:bg-destructive/30 ds:data-[variant=dot]:border-destructive/0\",\n completed:\n \"ds:border-destructive ds:bg-destructive ds:text-destructive-foreground ds:data-[variant=dot]:bg-destructive/30 ds:data-[variant=dot]:border-destructive/0\",\n inactive:\n \"ds:border-muted ds:bg-background ds:text-muted-foreground ds:data-[variant=dot]:bg-muted/30 ds:data-[variant=dot]:border-muted/0\",\n },\n separator: {\n active: \"ds:bg-destructive\",\n completed: \"ds:bg-destructive\",\n inactive: \"ds:bg-border\",\n },\n },\n muted: {\n indicator: {\n active:\n \"ds:border-muted ds:bg-muted ds:text-muted-foreground ds:data-[variant=dot]:bg-muted/30 ds:data-[variant=dot]:border-muted/0\",\n completed:\n \"ds:border-muted ds:bg-muted ds:text-muted-foreground ds:data-[variant=dot]:bg-muted/30 ds:data-[variant=dot]:border-muted/0\",\n inactive:\n \"ds:border-muted ds:bg-background ds:text-muted-foreground ds:data-[variant=dot]:bg-muted/30 ds:data-[variant=dot]:border-muted/0\",\n },\n separator: {\n active: \"ds:bg-muted\",\n completed: \"ds:bg-muted\",\n inactive: \"ds:bg-border\",\n },\n },\n success: {\n indicator: {\n active:\n \"ds:border-success ds:bg-success ds:text-success-foreground ds:data-[variant=dot]:bg-success/30 ds:data-[variant=dot]:border-success/0\",\n completed:\n \"ds:border-success ds:bg-success ds:text-success-foreground ds:data-[variant=dot]:bg-success/30 ds:data-[variant=dot]:border-success/0\",\n inactive:\n \"ds:border-muted ds:bg-background ds:text-muted-foreground ds:data-[variant=dot]:bg-muted/30 ds:data-[variant=dot]:border-muted/0\",\n },\n separator: {\n active: \"ds:bg-success\",\n completed: \"ds:bg-success\",\n inactive: \"ds:bg-border\",\n },\n },\n error: {\n indicator: {\n active:\n \"ds:border-error ds:bg-error ds:text-error-foreground ds:data-[variant=dot]:bg-error/30 ds:data-[variant=dot]:border-error/0\",\n completed:\n \"ds:border-error ds:bg-error ds:text-error-foreground ds:data-[variant=dot]:bg-error/30 ds:data-[variant=dot]:border-error/0\",\n inactive:\n \"ds:border-muted ds:bg-background ds:text-muted-foreground ds:data-[variant=dot]:bg-muted/30 ds:data-[variant=dot]:border-muted/0\",\n },\n separator: {\n active: \"ds:bg-error\",\n completed: \"ds:bg-error\",\n inactive: \"ds:bg-border\",\n },\n },\n warning: {\n indicator: {\n active:\n \"ds:border-warning ds:bg-warning ds:text-warning-foreground ds:data-[variant=dot]:bg-warning/30 ds:data-[variant=dot]:border-warning/0\",\n completed:\n \"ds:border-warning ds:bg-warning ds:text-warning-foreground ds:data-[variant=dot]:bg-warning/30 ds:data-[variant=dot]:border-warning/0\",\n inactive:\n \"ds:border-muted ds:bg-background ds:text-muted-foreground ds:data-[variant=dot]:bg-muted/30 ds:data-[variant=dot]:border-muted/0\",\n },\n separator: {\n active: \"ds:bg-warning\",\n completed: \"ds:bg-warning\",\n inactive: \"ds:bg-border\",\n },\n },\n};\n\nfunction getIndicatorColorClass(\n color: StepperColor | undefined,\n customColor: string | undefined,\n dataState: DataState\n): string {\n if (customColor) {\n return \"\";\n }\n\n if (!color) {\n // Default primary color\n return stepperColorClasses.primary.indicator[dataState];\n }\n\n return stepperColorClasses[color].indicator[dataState];\n}\n\nfunction getSeparatorColorClass(\n color: StepperColor | undefined,\n customColor: string | undefined,\n dataState: DataState\n): string {\n if (customColor) {\n return \"\";\n }\n\n if (!color) {\n // Default primary color\n return stepperColorClasses.primary.separator[dataState];\n }\n\n return stepperColorClasses[color].separator[dataState];\n}\n\nfunction getCustomColorStyle(\n customColor: string | undefined,\n dataState: DataState,\n isIndicator: boolean\n): React.CSSProperties | undefined {\n if (!customColor) return undefined;\n\n if (isIndicator) {\n if (dataState === \"active\" || dataState === \"completed\") {\n return {\n borderColor: customColor,\n backgroundColor: customColor,\n color: \"white\",\n };\n }\n return {\n borderColor: \"hsl(var(--muted))\",\n backgroundColor: \"hsl(var(--background))\",\n color: \"hsl(var(--muted-foreground))\",\n };\n } else {\n // separator\n if (dataState === \"active\" || dataState === \"completed\") {\n return {\n backgroundColor: customColor,\n };\n }\n return {\n backgroundColor: \"hsl(var(--border))\",\n };\n }\n}\n\ntype Direction = \"ltr\" | \"rtl\";\ntype Orientation = \"horizontal\" | \"vertical\";\ntype NavigationDirection = \"next\" | \"prev\";\ntype ActivationMode = \"automatic\" | \"manual\";\ntype DataState = \"inactive\" | \"active\" | \"completed\";\ntype StepperColor =\n | \"primary\"\n | \"secondary\"\n | \"accent\"\n | \"destructive\"\n | \"muted\"\n | \"success\"\n | \"error\"\n | \"warning\";\ntype StepperVariant = \"normal\" | \"dot\";\ntype LabelPosition = \"top\" | \"bottom\" | \"left\" | \"right\";\n\ninterface DivProps extends React.ComponentProps<\"div\"> {\n asChild?: boolean;\n}\ninterface ButtonProps extends React.ComponentProps<\"button\"> {\n asChild?: boolean;\n}\n\ntype ListElement = React.ComponentRef<typeof StepperList>;\ntype TriggerElement = React.ComponentRef<typeof StepperTrigger>;\n\nfunction getId(\n id: string,\n variant: \"trigger\" | \"content\" | \"title\" | \"description\",\n value: string\n) {\n return `${id}-${variant}-${value}`;\n}\n\ntype FocusIntent = \"first\" | \"last\" | \"prev\" | \"next\";\n\nconst MAP_KEY_TO_FOCUS_INTENT: Record<string, FocusIntent> = {\n ArrowLeft: \"prev\",\n ArrowUp: \"prev\",\n ArrowRight: \"next\",\n ArrowDown: \"next\",\n PageUp: \"first\",\n Home: \"first\",\n PageDown: \"last\",\n End: \"last\",\n};\n\nfunction getDirectionAwareKey(key: string, dir?: Direction) {\n if (dir !== \"rtl\") return key;\n return key === \"ArrowLeft\"\n ? \"ArrowRight\"\n : key === \"ArrowRight\"\n ? \"ArrowLeft\"\n : key;\n}\n\nfunction getFocusIntent(\n event: React.KeyboardEvent<TriggerElement>,\n dir?: Direction,\n orientation?: Orientation\n) {\n const key = getDirectionAwareKey(event.key, dir);\n if (orientation === \"horizontal\" && [\"ArrowUp\", \"ArrowDown\"].includes(key))\n return undefined;\n if (orientation === \"vertical\" && [\"ArrowLeft\", \"ArrowRight\"].includes(key))\n return undefined;\n return MAP_KEY_TO_FOCUS_INTENT[key];\n}\n\nfunction focusFirst(\n candidates: React.RefObject<TriggerElement | null>[],\n preventScroll = false\n) {\n const PREVIOUSLY_FOCUSED_ELEMENT = document.activeElement;\n for (const candidateRef of candidates) {\n const candidate = candidateRef.current;\n if (!candidate) continue;\n if (candidate === PREVIOUSLY_FOCUSED_ELEMENT) return;\n candidate.focus({ preventScroll });\n if (document.activeElement !== PREVIOUSLY_FOCUSED_ELEMENT) return;\n }\n}\n\nfunction wrapArray<T>(array: T[], startIndex: number) {\n return array.map<T>(\n (_, index) => array[(startIndex + index) % array.length] as T\n );\n}\n\nconst useIsomorphicLayoutEffect =\n typeof window === \"undefined\" ? React.useEffect : React.useLayoutEffect;\n\nfunction useAsRef<T>(props: T) {\n const ref = React.useRef<T>(props);\n\n useIsomorphicLayoutEffect(() => {\n ref.current = props;\n });\n\n return ref;\n}\n\nfunction useLazyRef<T>(fn: () => T) {\n const ref = React.useRef<T | null>(null);\n\n if (ref.current === null) {\n ref.current = fn();\n }\n\n return ref as React.RefObject<T>;\n}\n\nfunction getDataState(\n value: string | undefined,\n itemValue: string,\n stepState: StepState | undefined,\n steps: Map<string, StepState>,\n variant: \"item\" | \"separator\" = \"item\"\n): DataState {\n const stepKeys = Array.from(steps.keys());\n const currentIndex = stepKeys.indexOf(itemValue);\n\n if (stepState?.completed) return \"completed\";\n\n if (value === itemValue) {\n return variant === \"separator\" ? \"inactive\" : \"active\";\n }\n\n if (value) {\n const activeIndex = stepKeys.indexOf(value);\n\n if (activeIndex > currentIndex) return \"completed\";\n }\n\n return \"inactive\";\n}\n\nconst DirectionContext = React.createContext<Direction | undefined>(undefined);\n\nfunction useDirection(dirProp?: Direction): Direction {\n const contextDir = React.useContext(DirectionContext);\n return dirProp ?? contextDir ?? \"ltr\";\n}\n\ninterface StepState {\n value: string;\n completed: boolean;\n disabled: boolean;\n}\n\ninterface StoreState {\n steps: Map<string, StepState>;\n value: string;\n}\n\ninterface Store {\n subscribe: (callback: () => void) => () => void;\n getState: () => StoreState;\n setState: <K extends keyof StoreState>(key: K, value: StoreState[K]) => void;\n setStateWithValidation: (\n value: string,\n direction: NavigationDirection\n ) => Promise<boolean>;\n hasValidation: () => boolean;\n notify: () => void;\n addStep: (value: string, completed: boolean, disabled: boolean) => void;\n removeStep: (value: string) => void;\n setStep: (value: string, completed: boolean, disabled: boolean) => void;\n}\n\nconst StoreContext = React.createContext<Store | null>(null);\n\nfunction useStoreContext(consumerName: string) {\n const context = React.useContext(StoreContext);\n if (!context) {\n throw new Error(`\\`${consumerName}\\` must be used within \\`${ROOT_NAME}\\``);\n }\n return context;\n}\n\nfunction useStore<T>(selector: (state: StoreState) => T): T {\n const store = useStoreContext(\"useStore\");\n\n const getSnapshot = React.useCallback(\n () => selector(store.getState()),\n [store, selector]\n );\n\n return React.useSyncExternalStore(store.subscribe, getSnapshot, getSnapshot);\n}\n\ninterface ItemData {\n id: string;\n ref: React.RefObject<TriggerElement | null>;\n value: string;\n active: boolean;\n disabled: boolean;\n}\n\ninterface StepperContextValue {\n id: string;\n dir: Direction;\n orientation: Orientation;\n activationMode: ActivationMode;\n disabled: boolean;\n nonInteractive: boolean;\n loop: boolean;\n color?: StepperColor;\n customColor?: string;\n variant?: StepperVariant;\n labelPosition?: LabelPosition;\n}\n\nconst StepperContext = React.createContext<StepperContextValue | null>(null);\n\nfunction useStepperContext(consumerName: string) {\n const context = React.useContext(StepperContext);\n if (!context) {\n throw new Error(`\\`${consumerName}\\` must be used within \\`${ROOT_NAME}\\``);\n }\n return context;\n}\n\ninterface StepperRootProps extends DivProps {\n value?: string;\n defaultValue?: string;\n onValueChange?: (value: string) => void;\n onValueComplete?: (value: string, completed: boolean) => void;\n onValueAdd?: (value: string) => void;\n onValueRemove?: (value: string) => void;\n onValidate?: (\n value: string,\n direction: NavigationDirection\n ) => boolean | Promise<boolean>;\n activationMode?: ActivationMode;\n dir?: Direction;\n orientation?: Orientation;\n disabled?: boolean;\n loop?: boolean;\n nonInteractive?: boolean;\n color?: StepperColor;\n customColor?: string;\n variant?: StepperVariant;\n labelPosition?: LabelPosition;\n}\n\nfunction StepperRoot(props: StepperRootProps) {\n const {\n value,\n defaultValue,\n onValueChange,\n onValueComplete,\n onValueAdd,\n onValueRemove,\n onValidate,\n id: idProp,\n dir: dirProp,\n orientation = \"horizontal\",\n activationMode = \"automatic\",\n asChild,\n disabled = false,\n nonInteractive = false,\n loop = false,\n color,\n customColor,\n variant = \"normal\",\n labelPosition = \"right\",\n className,\n ...rootProps\n } = props;\n\n const listenersRef = useLazyRef(() => new Set<() => void>());\n const stateRef = useLazyRef<StoreState>(() => ({\n steps: new Map(),\n value: value ?? defaultValue ?? \"\",\n }));\n const propsRef = useAsRef({\n onValueChange,\n onValueComplete,\n onValueAdd,\n onValueRemove,\n onValidate,\n });\n\n const store: Store = React.useMemo(() => {\n return {\n subscribe: (cb) => {\n listenersRef.current.add(cb);\n return () => listenersRef.current.delete(cb);\n },\n getState: () => stateRef.current,\n setState: (key, value) => {\n if (Object.is(stateRef.current[key], value)) return;\n\n if (key === \"value\" && typeof value === \"string\") {\n stateRef.current.value = value;\n propsRef.current.onValueChange?.(value);\n } else {\n stateRef.current[key] = value;\n }\n\n store.notify();\n },\n setStateWithValidation: async (value, direction) => {\n if (!propsRef.current.onValidate) {\n store.setState(\"value\", value);\n return true;\n }\n\n try {\n const isValid = await propsRef.current.onValidate(value, direction);\n if (isValid) {\n store.setState(\"value\", value);\n }\n return isValid;\n } catch {\n return false;\n }\n },\n hasValidation: () => !!propsRef.current.onValidate,\n addStep: (value, completed, disabled) => {\n const newStep: StepState = { value, completed, disabled };\n stateRef.current.steps.set(value, newStep);\n propsRef.current.onValueAdd?.(value);\n store.notify();\n },\n removeStep: (value) => {\n stateRef.current.steps.delete(value);\n propsRef.current.onValueRemove?.(value);\n store.notify();\n },\n setStep: (value, completed, disabled) => {\n const step = stateRef.current.steps.get(value);\n if (step) {\n const updatedStep: StepState = { ...step, completed, disabled };\n stateRef.current.steps.set(value, updatedStep);\n\n if (completed !== step.completed) {\n propsRef.current.onValueComplete?.(value, completed);\n }\n\n store.notify();\n }\n },\n notify: () => {\n for (const cb of listenersRef.current) {\n cb();\n }\n },\n };\n }, [listenersRef, stateRef, propsRef]);\n\n useIsomorphicLayoutEffect(() => {\n if (value !== undefined) {\n store.setState(\"value\", value);\n }\n }, [value, store]);\n\n const dir = useDirection(dirProp);\n\n const id = React.useId();\n\n const rootId = idProp ?? id;\n\n const contextValue = React.useMemo<StepperContextValue>(\n () => ({\n id: rootId,\n dir,\n orientation,\n activationMode,\n disabled,\n nonInteractive,\n loop,\n color,\n customColor,\n variant,\n labelPosition,\n }),\n [\n rootId,\n dir,\n orientation,\n activationMode,\n disabled,\n nonInteractive,\n loop,\n color,\n customColor,\n variant,\n labelPosition,\n ]\n );\n\n const RootPrimitive = asChild ? Slot : \"div\";\n\n return (\n <StoreContext.Provider value={store}>\n <StepperContext.Provider value={contextValue}>\n <RootPrimitive\n id={rootId}\n data-disabled={disabled ? \"\" : undefined}\n data-orientation={orientation}\n data-slot=\"stepper\"\n dir={dir}\n {...rootProps}\n className={cn(\n \"ds:flex ds:gap-6\",\n orientation === \"horizontal\" ? \"ds:w-full ds:flex-col\" : \"ds:flex-row\",\n className\n )}\n />\n </StepperContext.Provider>\n </StoreContext.Provider>\n );\n}\n\ninterface FocusContextValue {\n tabStopId: string | null;\n onItemFocus: (tabStopId: string) => void;\n onItemShiftTab: () => void;\n onFocusableItemAdd: () => void;\n onFocusableItemRemove: () => void;\n onItemRegister: (item: ItemData) => void;\n onItemUnregister: (id: string) => void;\n getItems: () => ItemData[];\n}\n\nconst FocusContext = React.createContext<FocusContextValue | null>(null);\n\nfunction useFocusContext(consumerName: string) {\n const context = React.useContext(FocusContext);\n if (!context) {\n throw new Error(\n `\\`${consumerName}\\` must be used within \\`FocusProvider\\``\n );\n }\n return context;\n}\n\ninterface StepperListProps extends DivProps {\n asChild?: boolean;\n}\n\nfunction StepperList(props: StepperListProps) {\n const { className, children, asChild, ref, ...listProps } = props;\n\n const context = useStepperContext(LIST_NAME);\n const orientation = context.orientation;\n const currentValue = useStore((state) => state.value);\n\n const [tabStopId, setTabStopId] = React.useState<string | null>(null);\n const [isTabbingBackOut, setIsTabbingBackOut] = React.useState(false);\n const [focusableItemCount, setFocusableItemCount] = React.useState(0);\n const isClickFocusRef = React.useRef(false);\n const itemsRef = React.useRef<Map<string, ItemData>>(new Map());\n const listRef = React.useRef<ListElement>(null);\n const composedRef = useComposedRefs(ref, listRef);\n\n const onItemFocus = React.useCallback((tabStopId: string) => {\n setTabStopId(tabStopId);\n }, []);\n\n const onItemShiftTab = React.useCallback(() => {\n setIsTabbingBackOut(true);\n }, []);\n\n const onFocusableItemAdd = React.useCallback(() => {\n setFocusableItemCount((prevCount) => prevCount + 1);\n }, []);\n\n const onFocusableItemRemove = React.useCallback(() => {\n setFocusableItemCount((prevCount) => prevCount - 1);\n }, []);\n\n const onItemRegister = React.useCallback((item: ItemData) => {\n itemsRef.current.set(item.id, item);\n }, []);\n\n const onItemUnregister = React.useCallback((id: string) => {\n itemsRef.current.delete(id);\n }, []);\n\n const getItems = React.useCallback(() => {\n return Array.from(itemsRef.current.values())\n .filter((item) => item.ref.current)\n .sort((a, b) => {\n const elementA = a.ref.current;\n const elementB = b.ref.current;\n if (!elementA || !elementB) return 0;\n const position = elementA.compareDocumentPosition(elementB);\n if (position & Node.DOCUMENT_POSITION_FOLLOWING) {\n return -1;\n }\n if (position & Node.DOCUMENT_POSITION_PRECEDING) {\n return 1;\n }\n return 0;\n });\n }, []);\n\n const onBlur = React.useCallback(\n (event: React.FocusEvent<ListElement>) => {\n listProps.onBlur?.(event);\n if (event.defaultPrevented) return;\n\n setIsTabbingBackOut(false);\n },\n [listProps.onBlur]\n );\n\n const onFocus = React.useCallback(\n (event: React.FocusEvent<ListElement>) => {\n listProps.onFocus?.(event);\n if (event.defaultPrevented) return;\n\n const isKeyboardFocus = !isClickFocusRef.current;\n if (\n event.target === event.currentTarget &&\n isKeyboardFocus &&\n !isTabbingBackOut\n ) {\n const entryFocusEvent = new CustomEvent(ENTRY_FOCUS, EVENT_OPTIONS);\n event.currentTarget.dispatchEvent(entryFocusEvent);\n\n if (!entryFocusEvent.defaultPrevented) {\n const items = Array.from(itemsRef.current.values()).filter(\n (item) => !item.disabled\n );\n const selectedItem = currentValue\n ? items.find((item) => item.value === currentValue)\n : undefined;\n const activeItem = items.find((item) => item.active);\n const currentItem = items.find((item) => item.id === tabStopId);\n\n const candidateItems = [\n selectedItem,\n activeItem,\n currentItem,\n ...items,\n ].filter(Boolean) as ItemData[];\n const candidateRefs = candidateItems.map((item) => item.ref);\n focusFirst(candidateRefs, false);\n }\n }\n isClickFocusRef.current = false;\n },\n [listProps.onFocus, isTabbingBackOut, currentValue, tabStopId]\n );\n\n const onMouseDown = React.useCallback(\n (event: React.MouseEvent<ListElement>) => {\n listProps.onMouseDown?.(event);\n\n if (event.defaultPrevented) return;\n\n isClickFocusRef.current = true;\n },\n [listProps.onMouseDown]\n );\n\n const focusContextValue = React.useMemo<FocusContextValue>(\n () => ({\n tabStopId,\n onItemFocus,\n onItemShiftTab,\n onFocusableItemAdd,\n onFocusableItemRemove,\n onItemRegister,\n onItemUnregister,\n getItems,\n }),\n [\n tabStopId,\n onItemFocus,\n onItemShiftTab,\n onFocusableItemAdd,\n onFocusableItemRemove,\n onItemRegister,\n onItemUnregister,\n getItems,\n ]\n );\n\n const ListPrimitive = asChild ? Slot : \"div\";\n\n return (\n <FocusContext.Provider value={focusContextValue}>\n <ListPrimitive\n role=\"tablist\"\n aria-orientation={orientation}\n data-orientation={orientation}\n data-slot=\"stepper-list\"\n dir={context.dir}\n tabIndex={isTabbingBackOut || focusableItemCount === 0 ? -1 : 0}\n {...listProps}\n ref={composedRef}\n className={cn(\n \"ds:flex ds:outline-none\",\n orientation === \"horizontal\"\n ? \"ds:flex-row ds:items-center\"\n : \"ds:flex-col ds:items-start\",\n className\n )}\n onBlur={onBlur}\n onFocus={onFocus}\n onMouseDown={onMouseDown}\n >\n {children}\n </ListPrimitive>\n </FocusContext.Provider>\n );\n}\n\ninterface StepperItemContextValue {\n value: string;\n stepState: StepState | undefined;\n}\n\nconst StepperItemContext = React.createContext<StepperItemContextValue | null>(\n null\n);\n\nfunction useStepperItemContext(consumerName: string) {\n const context = React.useContext(StepperItemContext);\n if (!context) {\n throw new Error(`\\`${consumerName}\\` must be used within \\`${ITEM_NAME}\\``);\n }\n return context;\n}\n\ninterface StepperItemProps extends DivProps {\n value: string;\n completed?: boolean;\n disabled?: boolean;\n}\n\nfunction StepperItem(props: StepperItemProps) {\n const {\n value: itemValue,\n completed = false,\n disabled = false,\n asChild,\n className,\n children,\n ref,\n ...itemProps\n } = props;\n\n const context = useStepperContext(ITEM_NAME);\n const store = useStoreContext(ITEM_NAME);\n const orientation = context.orientation;\n const labelPosition = context.labelPosition ?? \"right\";\n const value = useStore((state) => state.value);\n\n useIsomorphicLayoutEffect(() => {\n store.addStep(itemValue, completed, disabled);\n\n return () => {\n store.removeStep(itemValue);\n };\n }, [itemValue, completed, disabled]);\n\n useIsomorphicLayoutEffect(() => {\n store.setStep(itemValue, completed, disabled);\n }, [itemValue, completed, disabled]);\n\n const stepState = useStore((state) => state.steps.get(itemValue));\n const steps = useStore((state) => state.steps);\n const dataState = getDataState(value, itemValue, stepState, steps);\n\n const stepKeys = Array.from(steps.keys());\n const stepIndex = stepKeys.indexOf(itemValue);\n const isFirstStep = stepIndex === 0;\n const isLastStep = stepIndex === stepKeys.length - 1;\n\n const itemContextValue = React.useMemo<StepperItemContextValue>(\n () => ({\n value: itemValue,\n stepState,\n }),\n [itemValue, stepState]\n );\n\n // Determine item layout based on orientation and labelPosition\n const getItemClasses = () => {\n const baseClasses = \"ds:relative ds:flex\";\n\n if (orientation === \"horizontal\") {\n // Horizontal stepper\n if (labelPosition === \"top\" || labelPosition === \"bottom\") {\n // When labels are above/below, use flex-col to stack indicator row and label\n // Each item takes equal space\n return `${baseClasses} flex-col items-center flex-1 gap-2`;\n }\n // Default: labels left/right - flex-row\n return `${baseClasses} flex-row items-center not-last:flex-1`;\n } else {\n // Vertical stepper - always flex-col for vertical orientation\n return `${baseClasses} flex-col`;\n }\n };\n\n // Reorganize children for top/bottom label positions\n const processedChildren = React.useMemo(() => {\n if (\n orientation === \"horizontal\" &&\n (labelPosition === \"top\" || labelPosition === \"bottom\")\n ) {\n const childArray = React.Children.toArray(children);\n let trigger: React.ReactNode = null;\n let indicator: React.ReactNode = null;\n let separator: React.ReactNode = null;\n const others: React.ReactNode[] = [];\n\n childArray.forEach((child) => {\n if (React.isValidElement(child)) {\n const slot = (child.props as { \"data-slot\"?: string })[\"data-slot\"];\n if (slot === \"stepper-trigger\" || child.type === StepperTrigger) {\n trigger = child;\n // Extract indicator from trigger's children if it exists\n const triggerChildren = React.Children.toArray(\n (child as React.ReactElement<{ children?: React.ReactNode }>)\n .props.children\n );\n triggerChildren.forEach((triggerChild) => {\n if (React.isValidElement(triggerChild)) {\n const triggerChildSlot = (\n triggerChild.props as { \"data-slot\"?: string }\n )[\"data-slot\"];\n if (\n triggerChildSlot === \"stepper-indicator\" ||\n triggerChild.type === StepperIndicator\n ) {\n indicator = triggerChild;\n }\n }\n });\n } else if (\n slot === \"stepper-separator\" ||\n child.type === StepperSeparator\n ) {\n separator = child;\n } else {\n others.push(child);\n }\n } else {\n others.push(child);\n }\n });\n\n // New structure: indicator row (with indicator + separator) then trigger\n // For proper centering, we need separators on both sides\n\n // Get the state for left separator (connects to previous step)\n // Left separator should be active if current step or any previous step is active\n const prevStepIndex = stepIndex - 1;\n const prevStepValue = prevStepIndex >= 0 ? stepKeys[prevStepIndex] : null;\n const leftSeparatorState = prevStepValue\n ? getDataState(\n value,\n prevStepValue,\n steps.get(prevStepValue),\n steps,\n \"separator\"\n )\n : \"inactive\";\n\n // Create left separator (even if separator element doesn't exist)\n let leftSeparator: React.ReactNode = null;\n if (!isFirstStep) {\n const color = context.color;\n const customColor = context.customColor;\n\n leftSeparator = (\n <div\n key=\"left-separator\"\n className={cn(\n \"ds:h-px ds:flex-1 ds:transition-colors\",\n getSeparatorColorClass(color, customColor, leftSeparatorState)\n )}\n style={getCustomColorStyle(customColor, leftSeparatorState, false)}\n aria-hidden=\"true\"\n />\n );\n }\n\n const indicatorRow = (\n <div\n className=\"ds:flex ds:w-full ds:items-center ds:justify-center\"\n key=\"indicator-row\"\n >\n {/* Left separator - connects to previous step */}\n {leftSeparator}\n {/* Spacer if first step */}\n {isFirstStep && (\n <div className=\"ds:h-px ds:flex-1 ds:bg-transparent\" aria-hidden=\"true\" />\n )}\n {indicator}\n {/* Right separator - connects to next step */}\n {!isLastStep && separator}\n {/* Spacer for last step to maintain centering */}\n {isLastStep && (\n <div className=\"ds:h-px ds:flex-1 ds:bg-transparent\" aria-hidden=\"true\" />\n )}\n </div>\n );\n\n if (labelPosition === \"top\") {\n return [trigger, indicatorRow, ...others];\n } else {\n return [indicatorRow, trigger, ...others];\n }\n }\n\n return children;\n }, [\n children,\n orientation,\n labelPosition,\n isFirstStep,\n isLastStep,\n stepIndex,\n stepKeys,\n steps,\n value,\n context.color,\n context.customColor,\n ]);\n\n const ItemPrimitive = asChild ? Slot : \"div\";\n\n return (\n <StepperItemContext.Provider value={itemContextValue}>\n <ItemPrimitive\n data-disabled={stepState?.disabled ? \"\" : undefined}\n data-orientation={orientation}\n data-state={dataState}\n data-slot=\"stepper-item\"\n data-label-position={labelPosition}\n dir={context.dir}\n {...itemProps}\n ref={ref}\n className={cn(getItemClasses(), className)}\n >\n {processedChildren}\n </ItemPrimitive>\n </StepperItemContext.Provider>\n );\n}\n\nfunction StepperTrigger(props: ButtonProps) {\n const { asChild, disabled, className, ref, ...triggerProps } = props;\n\n const context = useStepperContext(TRIGGER_NAME);\n const itemContext = useStepperItemContext(TRIGGER_NAME);\n const store = useStoreContext(TRIGGER_NAME);\n const focusContext = useFocusContext(TRIGGER_NAME);\n const value = useStore((state) => state.value);\n const itemValue = itemContext.value;\n const stepState = useStore((state) => state.steps.get(itemValue));\n const activationMode = context.activationMode;\n const orientation = context.orientation;\n const loop = context.loop;\n const labelPosition = context.labelPosition ?? \"right\";\n\n const steps = useStore((state) => state.steps);\n const stepIndex = Array.from(steps.keys()).indexOf(itemValue);\n\n const stepPosition = stepIndex + 1;\n const stepCount = steps.size;\n\n const triggerId = getId(context.id, \"trigger\", itemValue);\n const contentId = getId(context.id, \"content\", itemValue);\n const titleId = getId(context.id, \"title\", itemValue);\n const descriptionId = getId(context.id, \"description\", itemValue);\n\n const isDisabled = context.disabled || stepState?.disabled || disabled;\n const isActive = value === itemValue;\n const isTabStop = focusContext.tabStopId === triggerId;\n const dataState = getDataState(value, itemValue, stepState, steps);\n\n const triggerRef = React.useRef<TriggerElement>(null);\n const composedRef = useComposedRefs(ref, triggerRef);\n const isArrowKeyPressedRef = React.useRef(false);\n const isMouseClickRef = React.useRef(false);\n\n React.useEffect(() => {\n function onKeyDown(event: KeyboardEvent) {\n if (ARROW_KEYS.includes(event.key)) {\n isArrowKeyPressedRef.current = true;\n }\n }\n function onKeyUp() {\n isArrowKeyPressedRef.current = false;\n }\n document.addEventListener(\"keydown\", onKeyDown);\n document.addEventListener(\"keyup\", onKeyUp);\n return () => {\n document.removeEventListener(\"keydown\", onKeyDown);\n document.removeEventListener(\"keyup\", onKeyUp);\n };\n }, []);\n\n useIsomorphicLayoutEffect(() => {\n focusContext.onItemRegister({\n id: triggerId,\n ref: triggerRef,\n value: itemValue,\n active: isTabStop,\n disabled: !!isDisabled,\n });\n\n if (!isDisabled) {\n focusContext.onFocusableItemAdd();\n }\n\n return () => {\n focusContext.onItemUnregister(triggerId);\n if (!isDisabled) {\n focusContext.onFocusableItemRemove();\n }\n };\n }, [focusContext, triggerId, itemValue, isTabStop, isDisabled]);\n\n const onClick = React.useCallback(\n async (event: React.MouseEvent<TriggerElement>) => {\n triggerProps.onClick?.(event);\n if (event.defaultPrevented) return;\n\n if (!isDisabled && !context.nonInteractive) {\n const currentStepIndex = Array.from(steps.keys()).indexOf(value ?? \"\");\n const targetStepIndex = Array.from(steps.keys()).indexOf(itemValue);\n const direction = targetStepIndex > currentStepIndex ? \"next\" : \"prev\";\n\n await store.setStateWithValidation(itemValue, direction);\n }\n },\n [\n isDisabled,\n context.nonInteractive,\n store,\n itemValue,\n value,\n steps,\n triggerProps.onClick,\n ]\n );\n\n const onFocus = React.useCallback(\n async (event: React.FocusEvent<TriggerElement>) => {\n triggerProps.onFocus?.(event);\n if (event.defaultPrevented) return;\n\n focusContext.onItemFocus(triggerId);\n\n const isKeyboardFocus = !isMouseClickRef.current;\n\n if (\n !isActive &&\n !isDisabled &&\n activationMode !== \"manual\" &&\n !context.nonInteractive &&\n isKeyboardFocus\n ) {\n const currentStepIndex = Array.from(steps.keys()).indexOf(value || \"\");\n const targetStepIndex = Array.from(steps.keys()).indexOf(itemValue);\n const direction = targetStepIndex > currentStepIndex ? \"next\" : \"prev\";\n\n await store.setStateWithValidation(itemValue, direction);\n }\n\n isMouseClickRef.current = false;\n },\n [\n focusContext,\n triggerId,\n activationMode,\n isActive,\n isDisabled,\n context.nonInteractive,\n store,\n itemValue,\n value,\n steps,\n triggerProps.onFocus,\n ]\n );\n\n const onKeyDown = React.useCallback(\n async (event: React.KeyboardEvent<TriggerElement>) => {\n triggerProps.onKeyDown?.(event);\n if (event.defaultPrevented) return;\n\n if (event.key === \"Enter\" && context.nonInteractive) {\n event.preventDefault();\n return;\n }\n\n if (\n (event.key === \"Enter\" || event.key === \" \") &&\n activationMode === \"manual\" &&\n !context.nonInteractive\n ) {\n event.preventDefault();\n if (!isDisabled && triggerRef.current) {\n triggerRef.current.click();\n }\n return;\n }\n\n if (event.key === \"Tab\" && event.shiftKey) {\n focusContext.onItemShiftTab();\n return;\n }\n\n if (event.target !== event.currentTarget) return;\n\n const focusIntent = getFocusIntent(event, context.dir, orientation);\n\n if (focusIntent !== undefined) {\n if (event.metaKey || event.ctrlKey || event.altKey || event.shiftKey)\n return;\n event.preventDefault();\n\n const items = focusContext.getItems().filter((item) => !item.disabled);\n let candidateRefs = items.map((item) => item.ref);\n\n if (focusIntent === \"last\") {\n candidateRefs.reverse();\n } else if (focusIntent === \"prev\" || focusIntent === \"next\") {\n if (focusIntent === \"prev\") candidateRefs.reverse();\n const currentIndex = candidateRefs.findIndex(\n (ref) => ref.current === event.currentTarget\n );\n candidateRefs = loop\n ? wrapArray(candidateRefs, currentIndex + 1)\n : candidateRefs.slice(currentIndex + 1);\n }\n\n if (store.hasValidation() && candidateRefs.length > 0) {\n const nextRef = candidateRefs[0];\n const nextElement = nextRef?.current;\n const nextItem = items.find(\n (item) => item.ref.current === nextElement\n );\n\n if (nextItem && nextItem.value !== itemValue) {\n const currentStepIndex = Array.from(steps.keys()).indexOf(\n value || \"\"\n );\n const targetStepIndex = Array.from(steps.keys()).indexOf(\n nextItem.value\n );\n const direction: NavigationDirection =\n targetStepIndex > currentStepIndex ? \"next\" : \"prev\";\n\n if (direction === \"next\") {\n const isValid = await store.setStateWithValidation(\n nextItem.value,\n direction\n );\n if (!isValid) return;\n } else {\n store.setState(\"value\", nextItem.value);\n }\n\n queueMicrotask(() => nextElement?.focus());\n return;\n }\n }\n\n queueMicrotask(() => focusFirst(candidateRefs));\n }\n },\n [\n focusContext,\n context.nonInteractive,\n context.dir,\n activationMode,\n orientation,\n loop,\n isDisabled,\n triggerProps.onKeyDown,\n store,\n itemValue,\n value,\n steps,\n ]\n );\n\n const onMouseDown = React.useCallback(\n (event: React.MouseEvent<TriggerElement>) => {\n triggerProps.onMouseDown?.(event);\n if (event.defaultPrevented) return;\n\n isMouseClickRef.current = true;\n\n if (isDisabled) {\n event.preventDefault();\n } else {\n focusContext.onItemFocus(triggerId);\n }\n },\n [focusContext, triggerId, isDisabled, triggerProps.onMouseDown]\n );\n\n // Determine flex direction based on labelPosition\n const getFlexDirection = () => {\n if (\n orientation === \"horizontal\" &&\n (labelPosition === \"top\" || labelPosition === \"bottom\")\n ) {\n // For horizontal with top/bottom labels, trigger only contains text\n // Indicator and separator will be siblings at item level\n return labelPosition === \"top\" ? \"flex-col-reverse\" : \"flex-col\";\n }\n\n if (labelPosition === \"top\") return \"flex-col-reverse\";\n if (labelPosition === \"bottom\") return \"flex-col\";\n if (labelPosition === \"left\") return \"flex-row-reverse\";\n return \"flex-row\"; // default is right\n };\n\n const shouldWrapIndicator =\n orientation === \"horizontal\" &&\n (labelPosition === \"top\" || labelPosition === \"bottom\");\n\n // Filter out Indicator from children when shouldWrapIndicator is true\n const processedChildren = React.useMemo(() => {\n if (!shouldWrapIndicator) return triggerProps.children;\n\n const childArray = React.Children.toArray(triggerProps.children);\n return childArray.filter((child) => {\n if (React.isValidElement(child)) {\n const slot = (child.props as { \"data-slot\"?: string })[\"data-slot\"];\n return !(\n slot === \"stepper-indicator\" || child.type === StepperIndicator\n );\n }\n return true;\n });\n }, [shouldWrapIndicator, triggerProps.children]);\n\n const TriggerPrimitive = asChild ? Slot : \"button\";\n\n return (\n <TriggerPrimitive\n id={triggerId}\n role=\"tab\"\n type=\"button\"\n aria-controls={contentId}\n aria-current={isActive ? \"step\" : undefined}\n aria-describedby={`${titleId} ${descriptionId}`}\n aria-posinset={stepPosition}\n aria-selected={isActive}\n aria-setsize={stepCount}\n data-disabled={isDisabled ? \"\" : undefined}\n data-state={dataState}\n data-slot=\"stepper-trigger\"\n data-wrap-indicator={shouldWrapIndicator ? \"\" : undefined}\n disabled={isDisabled}\n tabIndex={isTabStop ? 0 : -1}\n {...triggerProps}\n ref={composedRef}\n className={cn(\n \"ds:inline-flex ds:items-center ds:justify-center ds:gap-3 ds:rounded-md ds:text-left ds:outline-none ds:transition-all ds:focus-visible:border-ring ds:focus-visible:ring-[3px] ds:focus-visible:ring-ring/50 ds:disabled:pointer-events-none ds:disabled:opacity-50 ds:aria-invalid:border-destructive ds:aria-invalid:ring-destructive/20 ds:dark:aria-invalid:ring-destructive/40 ds:[&_svg:not([class*='size-'])]:size-4 ds:[&_svg]:pointer-events-none ds:[&_svg]:shrink-0\",\n \"ds:not-has-data-[slot=description]:rounded-full ds:not-has-data-[slot=title]:rounded-full\",\n shouldWrapIndicator ? \"\" : getFlexDirection(),\n className\n )}\n onClick={onClick}\n onFocus={onFocus}\n onKeyDown={onKeyDown}\n onMouseDown={onMouseDown}\n >\n {processedChildren}\n </TriggerPrimitive>\n );\n}\n\ninterface StepperIndicatorProps extends Omit<DivProps, \"children\"> {\n children?: React.ReactNode | ((dataState: DataState) => React.ReactNode);\n color?: StepperColor;\n customColor?: string;\n variant?: StepperVariant;\n}\n\nfunction StepperIndicator(props: StepperIndicatorProps) {\n const {\n className,\n children,\n asChild,\n ref,\n color: colorProp,\n customColor: customColorProp,\n variant: variantProp,\n ...indicatorProps\n } = props;\n const context = useStepperContext(INDICATOR_NAME);\n const itemContext = useStepperItemContext(INDICATOR_NAME);\n const value = useStore((state) => state.value);\n const itemValue = itemContext.value;\n const stepState = useStore((state) => state.steps.get(itemValue));\n const steps = useStore((state) => state.steps);\n\n const stepPosition = Array.from(steps.keys()).indexOf(itemValue) + 1;\n\n const dataState = getDataState(value, itemValue, stepState, steps);\n\n const color = colorProp ?? context.color;\n const customColor = customColorProp ?? context.customColor;\n const variant = variantProp ?? context.variant ?? \"normal\";\n\n const colorClass = getIndicatorColorClass(color, customColor, dataState);\n const customStyle = getCustomColorStyle(customColor, dataState, true);\n\n const IndicatorPrimitive = asChild ? Slot : \"div\";\n\n const isDot = variant === \"dot\";\n\n return (\n <IndicatorPrimitive\n data-state={dataState}\n data-variant={variant}\n data-slot=\"stepper-indicator\"\n dir={context.dir}\n {...indicatorProps}\n ref={ref}\n style={{ ...indicatorProps.style, ...customStyle }}\n className={cn(\n \"ds:flex ds:shrink-0 ds:items-center ds:justify-center ds:rounded-full ds:border-2 ds:font-medium ds:text-sm ds:transition-colors\",\n isDot ? \"ds:size-7 ds:data-[variant=dot]:size-2\" : \"ds:size-7\",\n colorClass,\n className\n )}\n >\n {!isDot &&\n (typeof children === \"function\" ? (\n children(dataState)\n ) : children ? (\n children\n ) : dataState === \"completed\" ? (\n <Check className=\"ds:size-4\" />\n ) : (\n stepPosition\n ))}\n </IndicatorPrimitive>\n );\n}\n\ninterface StepperSeparatorProps extends DivProps {\n forceMount?: boolean;\n color?: StepperColor;\n customColor?: string;\n}\n\nfunction StepperSeparator(props: StepperSeparatorProps) {\n const {\n className,\n asChild,\n forceMount = false,\n ref,\n color: colorProp,\n customColor: customColorProp,\n ...separatorProps\n } = props;\n\n const context = useStepperContext(SEPARATOR_NAME);\n const itemContext = useStepperItemContext(SEPARATOR_NAME);\n const value = useStore((state) => state.value);\n const orientation = context.orientation;\n const labelPosition = context.labelPosition ?? \"right\";\n\n const steps = useStore((state) => state.steps);\n const stepIndex = Array.from(steps.keys()).indexOf(itemContext.value);\n\n const isLastStep = stepIndex === steps.size - 1;\n\n if (isLastStep && !forceMount) {\n return null;\n }\n\n const dataState = getDataState(\n value,\n itemContext.value,\n itemContext.stepState,\n steps,\n \"separator\"\n );\n\n const color = colorProp ?? context.color;\n const customColor = customColorProp ?? context.customColor;\n\n const colorClass = getSeparatorColorClass(color, customColor, dataState);\n const customStyle = getCustomColorStyle(customColor, dataState, false);\n\n const SeparatorPrimitive = asChild ? Slot : \"div\";\n\n // Determine separator positioning based on orientation and labelPosition\n const getSeparatorClasses = () => {\n if (orientation === \"horizontal\") {\n // Horizontal stepper\n if (labelPosition === \"top\" || labelPosition === \"bottom\") {\n // When labels are above/below, separator is at item level alongside indicator\n // It should be a horizontal line that takes remaining space\n return \"h-px flex-1\";\n }\n // Default: labels left/right - normal flex behavior\n return \"h-px flex-1\";\n } else {\n // Vertical stepper\n if (labelPosition === \"top\" || labelPosition === \"bottom\") {\n // When labels are above/below in vertical mode, separator connects vertically\n return \"w-px absolute left-1/2 -translate-x-1/2 top-full h-full -z-10\";\n } else if (labelPosition === \"left\") {\n // Label on left, separator on the right side\n return \"w-px absolute right-0 top-full h-full -z-10 translate-x-1/2\";\n } else {\n // Label on right (default), separator on the left side\n return \"w-px absolute left-0 top-full h-full -z-10 -translate-x-1/2\";\n }\n }\n };\n\n return (\n <SeparatorPrimitive\n role=\"separator\"\n aria-hidden=\"true\"\n aria-orientation={orientation}\n data-orientation={orientation}\n data-state={dataState}\n data-slot=\"stepper-separator\"\n dir={context.dir}\n {...separatorProps}\n ref={ref}\n style={{ ...separatorProps.style, ...customStyle }}\n className={cn(\n \"ds:transition-colors\",\n getSeparatorClasses(),\n colorClass,\n className\n )}\n />\n );\n}\n\ninterface StepperTitleProps extends React.ComponentProps<\"span\"> {\n asChild?: boolean;\n}\n\nfunction StepperTitle(props: StepperTitleProps) {\n const { className, asChild, ref, ...titleProps } = props;\n\n const context = useStepperContext(TITLE_NAME);\n const itemContext = useStepperItemContext(TITLE_NAME);\n\n const titleId = getId(context.id, \"title\", itemContext.value);\n\n const TitlePrimitive = asChild ? Slot : \"span\";\n\n return (\n <TitlePrimitive\n id={titleId}\n data-slot=\"title\"\n dir={context.dir}\n {...titleProps}\n ref={ref}\n className={cn(\"ds:font-medium ds:text-sm\", className)}\n />\n );\n}\n\ninterface StepperDescriptionProps extends React.ComponentProps<\"span\"> {\n asChild?: boolean;\n}\n\nfunction StepperDescription(props: StepperDescriptionProps) {\n const { className, asChild, ref, ...descriptionProps } = props;\n const context = useStepperContext(DESCRIPTION_NAME);\n const itemContext = useStepperItemContext(DESCRIPTION_NAME);\n\n const descriptionId = getId(context.id, \"description\", itemContext.value);\n\n const DescriptionPrimitive = asChild ? Slot : \"span\";\n\n return (\n <DescriptionPrimitive\n id={descriptionId}\n data-slot=\"description\"\n dir={context.dir}\n {...descriptionProps}\n ref={ref}\n className={cn(\"ds:text-muted-foreground ds:text-xs\", className)}\n />\n );\n}\n\ninterface StepperContentProps extends DivProps {\n value: string;\n forceMount?: boolean;\n}\n\nfunction StepperContent(props: StepperContentProps) {\n const {\n value: valueProp,\n asChild,\n forceMount = false,\n ref,\n className,\n ...contentProps\n } = props;\n\n const context = useStepperContext(CONTENT_NAME);\n const value = useStore((state) => state.value);\n\n const contentId = getId(context.id, \"content\", valueProp);\n const triggerId = getId(context.id, \"trigger\", valueProp);\n\n if (valueProp !== value && !forceMount) return null;\n\n const ContentPrimitive = asChild ? Slot : \"div\";\n\n return (\n <ContentPrimitive\n id={contentId}\n role=\"tabpanel\"\n aria-labelledby={triggerId}\n data-slot=\"stepper-content\"\n dir={context.dir}\n {...contentProps}\n ref={ref}\n className={cn(\"ds:flex-1 ds:outline-none\", className)}\n />\n );\n}\n\nfunction StepperPrev(props: ButtonProps) {\n const { asChild, disabled, ...prevProps } = props;\n\n const store = useStoreContext(PREV_NAME);\n const value = useStore((state) => state.value);\n const steps = useStore((state) => state.steps);\n\n const stepKeys = Array.from(steps.keys());\n const currentIndex = value ? stepKeys.indexOf(value) : -1;\n const isDisabled = disabled || currentIndex <= 0;\n\n const onClick = React.useCallback(\n async (event: React.MouseEvent<HTMLButtonElement>) => {\n prevProps.onClick?.(event);\n if (event.defaultPrevented || isDisabled) return;\n\n const prevIndex = Math.max(currentIndex - 1, 0);\n const prevStepValue = stepKeys[prevIndex];\n\n if (prevStepValue) {\n store.setState(\"value\", prevStepValue);\n }\n },\n [prevProps.onClick, isDisabled, currentIndex, stepKeys, store]\n );\n\n const PrevPrimitive = asChild ? Slot : \"button\";\n\n return (\n <PrevPrimitive\n type=\"button\"\n data-slot=\"stepper-prev\"\n disabled={isDisabled}\n {...prevProps}\n onClick={onClick}\n />\n );\n}\n\nfunction StepperNext(props: ButtonProps) {\n const { asChild, disabled, ...nextProps } = props;\n\n const store = useStoreContext(NEXT_NAME);\n const value = useStore((state) => state.value);\n const steps = useStore((state) => state.steps);\n\n const stepKeys = Array.from(steps.keys());\n const currentIndex = value ? stepKeys.indexOf(value) : -1;\n const isDisabled = disabled || currentIndex >= stepKeys.length - 1;\n\n const onClick = React.useCallback(\n async (event: React.MouseEvent<HTMLButtonElement>) => {\n nextProps.onClick?.(event);\n if (event.defaultPrevented || isDisabled) return;\n\n const nextIndex = Math.min(currentIndex + 1, stepKeys.length - 1);\n const nextStepValue = stepKeys[nextIndex];\n\n if (nextStepValue) {\n await store.setStateWithValidation(nextStepValue, \"next\");\n }\n },\n [nextProps.onClick, isDisabled, currentIndex, stepKeys, store]\n );\n\n const NextPrimitive = asChild ? Slot : \"button\";\n\n return (\n <NextPrimitive\n type=\"button\"\n data-slot=\"stepper-next\"\n disabled={isDisabled}\n {...nextProps}\n onClick={onClick}\n />\n );\n}\n\nexport {\n StepperRoot,\n StepperList,\n StepperItem,\n StepperTrigger,\n StepperIndicator,\n StepperSeparator,\n StepperTitle,\n StepperDescription,\n StepperContent,\n StepperPrev,\n StepperNext,\n //\n useStore as useStepper,\n //\n type StepperRootProps as StepperProps,\n};\n"],"names":["ROOT_NAME","LIST_NAME","ITEM_NAME","TRIGGER_NAME","INDICATOR_NAME","SEPARATOR_NAME","TITLE_NAME","DESCRIPTION_NAME","CONTENT_NAME","PREV_NAME","NEXT_NAME","ENTRY_FOCUS","EVENT_OPTIONS","ARROW_KEYS","stepperColorClasses","getIndicatorColorClass","color","customColor","dataState","getSeparatorColorClass","getCustomColorStyle","isIndicator","getId","id","variant","value","MAP_KEY_TO_FOCUS_INTENT","getDirectionAwareKey","key","dir","getFocusIntent","event","orientation","focusFirst","candidates","preventScroll","PREVIOUSLY_FOCUSED_ELEMENT","candidateRef","candidate","wrapArray","array","startIndex","_","index","useIsomorphicLayoutEffect","React","useAsRef","props","ref","useLazyRef","fn","getDataState","itemValue","stepState","steps","stepKeys","currentIndex","DirectionContext","useDirection","dirProp","contextDir","StoreContext","useStoreContext","consumerName","context","useStore","selector","store","getSnapshot","StepperContext","useStepperContext","StepperRoot","defaultValue","onValueChange","onValueComplete","onValueAdd","onValueRemove","onValidate","idProp","activationMode","asChild","disabled","nonInteractive","loop","labelPosition","className","rootProps","listenersRef","stateRef","propsRef","cb","direction","isValid","completed","newStep","step","updatedStep","rootId","contextValue","RootPrimitive","Slot","jsx","cn","FocusContext","useFocusContext","StepperList","children","listProps","currentValue","state","tabStopId","setTabStopId","isTabbingBackOut","setIsTabbingBackOut","focusableItemCount","setFocusableItemCount","isClickFocusRef","itemsRef","listRef","composedRef","useComposedRefs","onItemFocus","onItemShiftTab","onFocusableItemAdd","prevCount","onFocusableItemRemove","onItemRegister","item","onItemUnregister","getItems","a","b","elementA","elementB","position","onBlur","onFocus","isKeyboardFocus","entryFocusEvent","items","selectedItem","activeItem","currentItem","candidateRefs","onMouseDown","focusContextValue","ListPrimitive","StepperItemContext","useStepperItemContext","StepperItem","itemProps","stepIndex","isFirstStep","isLastStep","itemContextValue","getItemClasses","baseClasses","processedChildren","childArray","trigger","indicator","separator","others","child","slot","StepperTrigger","triggerChild","StepperIndicator","StepperSeparator","prevStepIndex","prevStepValue","leftSeparatorState","leftSeparator","indicatorRow","jsxs","ItemPrimitive","triggerProps","itemContext","focusContext","stepPosition","stepCount","triggerId","contentId","titleId","descriptionId","isDisabled","isActive","isTabStop","triggerRef","isArrowKeyPressedRef","isMouseClickRef","onKeyDown","onKeyUp","onClick","currentStepIndex","focusIntent","nextElement","nextItem","getFlexDirection","shouldWrapIndicator","colorProp","customColorProp","variantProp","indicatorProps","colorClass","customStyle","IndicatorPrimitive","isDot","Check","forceMount","separatorProps","SeparatorPrimitive","getSeparatorClasses","StepperTitle","titleProps","StepperDescription","descriptionProps","StepperContent","valueProp","contentProps","StepperPrev","prevProps","prevIndex","StepperNext","nextProps","nextIndex","nextStepValue"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Stepper.js","sources":["../../../../src/components/Stepper/Stepper.tsx"],"sourcesContent":["\"use client\";\n\nimport { cn, Slot, useComposedRefs } from \"@dsui/ui/index\";\nimport { Check } from \"lucide-react\";\nimport * as React from \"react\";\n\nconst ROOT_NAME = \"Stepper\";\nconst LIST_NAME = \"StepperList\";\nconst ITEM_NAME = \"StepperItem\";\nconst TRIGGER_NAME = \"StepperTrigger\";\nconst INDICATOR_NAME = \"StepperIndicator\";\nconst SEPARATOR_NAME = \"StepperSeparator\";\nconst TITLE_NAME = \"StepperTitle\";\nconst DESCRIPTION_NAME = \"StepperDescription\";\nconst CONTENT_NAME = \"StepperContent\";\nconst PREV_NAME = \"StepperPrev\";\nconst NEXT_NAME = \"StepperNext\";\n\nconst ENTRY_FOCUS = \"stepperFocusGroup.onEntryFocus\";\nconst EVENT_OPTIONS = { bubbles: false, cancelable: true };\nconst ARROW_KEYS = [\"ArrowUp\", \"ArrowDown\", \"ArrowLeft\", \"ArrowRight\"];\n\nconst stepperColorClasses: Record<\n StepperColor,\n {\n indicator: {\n active: string;\n completed: string;\n inactive: string;\n };\n separator: {\n active: string;\n completed: string;\n inactive: string;\n };\n }\n> = {\n primary: {\n indicator: {\n active:\n \"ds:border-primary ds:bg-primary ds:text-primary-foreground ds:data-[variant=dot]:bg-primary/30 ds:data-[variant=dot]:border-primary/0\",\n completed:\n \"ds:border-primary ds:bg-primary ds:text-primary-foreground ds:data-[variant=dot]:bg-primary/30 ds:data-[variant=dot]:border-primary/0\",\n inactive:\n \"ds:border-muted ds:bg-background ds:text-muted-foreground ds:data-[variant=dot]:bg-muted/30 ds:data-[variant=dot]:border-muted/0\",\n },\n separator: {\n active: \"ds:bg-primary\",\n completed: \"ds:bg-primary\",\n inactive: \"ds:bg-border\",\n },\n },\n secondary: {\n indicator: {\n active:\n \"ds:border-secondary ds:bg-secondary ds:text-secondary-foreground ds:data-[variant=dot]:bg-secondary/30 ds:data-[variant=dot]:border-secondary/0\",\n completed:\n \"ds:border-secondary ds:bg-secondary ds:text-secondary-foreground ds:data-[variant=dot]:bg-secondary/30 ds:data-[variant=dot]:border-secondary/0\",\n inactive:\n \"ds:border-muted ds:bg-background ds:text-muted-foreground ds:data-[variant=dot]:bg-muted/30 ds:data-[variant=dot]:border-muted/0\",\n },\n separator: {\n active: \"ds:bg-secondary\",\n completed: \"ds:bg-secondary\",\n inactive: \"ds:bg-border\",\n },\n },\n accent: {\n indicator: {\n active:\n \"ds:border-accent ds:bg-accent ds:text-accent-foreground ds:data-[variant=dot]:bg-accent/30 ds:data-[variant=dot]:border-accent/0\",\n completed:\n \"ds:border-accent ds:bg-accent ds:text-accent-foreground ds:data-[variant=dot]:bg-accent/30 ds:data-[variant=dot]:border-accent/0\",\n inactive:\n \"ds:border-muted ds:bg-background ds:text-muted-foreground ds:data-[variant=dot]:bg-muted/30 ds:data-[variant=dot]:border-muted/0\",\n },\n separator: {\n active: \"ds:bg-accent\",\n completed: \"ds:bg-accent\",\n inactive: \"ds:bg-border\",\n },\n },\n destructive: {\n indicator: {\n active:\n \"ds:border-destructive ds:bg-destructive ds:text-destructive-foreground ds:data-[variant=dot]:bg-destructive/30 ds:data-[variant=dot]:border-destructive/0\",\n completed:\n \"ds:border-destructive ds:bg-destructive ds:text-destructive-foreground ds:data-[variant=dot]:bg-destructive/30 ds:data-[variant=dot]:border-destructive/0\",\n inactive:\n \"ds:border-muted ds:bg-background ds:text-muted-foreground ds:data-[variant=dot]:bg-muted/30 ds:data-[variant=dot]:border-muted/0\",\n },\n separator: {\n active: \"ds:bg-destructive\",\n completed: \"ds:bg-destructive\",\n inactive: \"ds:bg-border\",\n },\n },\n muted: {\n indicator: {\n active:\n \"ds:border-muted ds:bg-muted ds:text-muted-foreground ds:data-[variant=dot]:bg-muted/30 ds:data-[variant=dot]:border-muted/0\",\n completed:\n \"ds:border-muted ds:bg-muted ds:text-muted-foreground ds:data-[variant=dot]:bg-muted/30 ds:data-[variant=dot]:border-muted/0\",\n inactive:\n \"ds:border-muted ds:bg-background ds:text-muted-foreground ds:data-[variant=dot]:bg-muted/30 ds:data-[variant=dot]:border-muted/0\",\n },\n separator: {\n active: \"ds:bg-muted\",\n completed: \"ds:bg-muted\",\n inactive: \"ds:bg-border\",\n },\n },\n success: {\n indicator: {\n active:\n \"ds:border-success ds:bg-success ds:text-success-foreground ds:data-[variant=dot]:bg-success/30 ds:data-[variant=dot]:border-success/0\",\n completed:\n \"ds:border-success ds:bg-success ds:text-success-foreground ds:data-[variant=dot]:bg-success/30 ds:data-[variant=dot]:border-success/0\",\n inactive:\n \"ds:border-muted ds:bg-background ds:text-muted-foreground ds:data-[variant=dot]:bg-muted/30 ds:data-[variant=dot]:border-muted/0\",\n },\n separator: {\n active: \"ds:bg-success\",\n completed: \"ds:bg-success\",\n inactive: \"ds:bg-border\",\n },\n },\n error: {\n indicator: {\n active:\n \"ds:border-error ds:bg-error ds:text-error-foreground ds:data-[variant=dot]:bg-error/30 ds:data-[variant=dot]:border-error/0\",\n completed:\n \"ds:border-error ds:bg-error ds:text-error-foreground ds:data-[variant=dot]:bg-error/30 ds:data-[variant=dot]:border-error/0\",\n inactive:\n \"ds:border-muted ds:bg-background ds:text-muted-foreground ds:data-[variant=dot]:bg-muted/30 ds:data-[variant=dot]:border-muted/0\",\n },\n separator: {\n active: \"ds:bg-error\",\n completed: \"ds:bg-error\",\n inactive: \"ds:bg-border\",\n },\n },\n warning: {\n indicator: {\n active:\n \"ds:border-warning ds:bg-warning ds:text-warning-foreground ds:data-[variant=dot]:bg-warning/30 ds:data-[variant=dot]:border-warning/0\",\n completed:\n \"ds:border-warning ds:bg-warning ds:text-warning-foreground ds:data-[variant=dot]:bg-warning/30 ds:data-[variant=dot]:border-warning/0\",\n inactive:\n \"ds:border-muted ds:bg-background ds:text-muted-foreground ds:data-[variant=dot]:bg-muted/30 ds:data-[variant=dot]:border-muted/0\",\n },\n separator: {\n active: \"ds:bg-warning\",\n completed: \"ds:bg-warning\",\n inactive: \"ds:bg-border\",\n },\n },\n};\n\nfunction getIndicatorColorClass(\n color: StepperColor | undefined,\n customColor: string | undefined,\n dataState: DataState\n): string {\n if (customColor) {\n return \"\";\n }\n\n if (!color) {\n // Default primary color\n return stepperColorClasses.primary.indicator[dataState];\n }\n\n return stepperColorClasses[color].indicator[dataState];\n}\n\nfunction getSeparatorColorClass(\n color: StepperColor | undefined,\n customColor: string | undefined,\n dataState: DataState\n): string {\n if (customColor) {\n return \"\";\n }\n\n if (!color) {\n // Default primary color\n return stepperColorClasses.primary.separator[dataState];\n }\n\n return stepperColorClasses[color].separator[dataState];\n}\n\nfunction getCustomColorStyle(\n customColor: string | undefined,\n dataState: DataState,\n isIndicator: boolean\n): React.CSSProperties | undefined {\n if (!customColor) return undefined;\n\n if (isIndicator) {\n if (dataState === \"active\" || dataState === \"completed\") {\n return {\n borderColor: customColor,\n backgroundColor: customColor,\n color: \"white\",\n };\n }\n return {\n borderColor: \"hsl(var(--muted))\",\n backgroundColor: \"hsl(var(--background))\",\n color: \"hsl(var(--muted-foreground))\",\n };\n } else {\n // separator\n if (dataState === \"active\" || dataState === \"completed\") {\n return {\n backgroundColor: customColor,\n };\n }\n return {\n backgroundColor: \"hsl(var(--border))\",\n };\n }\n}\n\ntype Direction = \"ltr\" | \"rtl\";\ntype Orientation = \"horizontal\" | \"vertical\";\ntype NavigationDirection = \"next\" | \"prev\";\ntype ActivationMode = \"automatic\" | \"manual\";\ntype DataState = \"inactive\" | \"active\" | \"completed\";\ntype StepperColor =\n | \"primary\"\n | \"secondary\"\n | \"accent\"\n | \"destructive\"\n | \"muted\"\n | \"success\"\n | \"error\"\n | \"warning\";\ntype StepperVariant = \"normal\" | \"dot\";\ntype LabelPosition = \"top\" | \"bottom\" | \"left\" | \"right\";\n\ninterface DivProps extends React.ComponentProps<\"div\"> {\n asChild?: boolean;\n}\ninterface ButtonProps extends React.ComponentProps<\"button\"> {\n asChild?: boolean;\n}\n\ntype ListElement = React.ComponentRef<typeof StepperList>;\ntype TriggerElement = React.ComponentRef<typeof StepperTrigger>;\n\nfunction getId(\n id: string,\n variant: \"trigger\" | \"content\" | \"title\" | \"description\",\n value: string\n) {\n return `${id}-${variant}-${value}`;\n}\n\ntype FocusIntent = \"first\" | \"last\" | \"prev\" | \"next\";\n\nconst MAP_KEY_TO_FOCUS_INTENT: Record<string, FocusIntent> = {\n ArrowLeft: \"prev\",\n ArrowUp: \"prev\",\n ArrowRight: \"next\",\n ArrowDown: \"next\",\n PageUp: \"first\",\n Home: \"first\",\n PageDown: \"last\",\n End: \"last\",\n};\n\nfunction getDirectionAwareKey(key: string, dir?: Direction) {\n if (dir !== \"rtl\") return key;\n return key === \"ArrowLeft\"\n ? \"ArrowRight\"\n : key === \"ArrowRight\"\n ? \"ArrowLeft\"\n : key;\n}\n\nfunction getFocusIntent(\n event: React.KeyboardEvent<TriggerElement>,\n dir?: Direction,\n orientation?: Orientation\n) {\n const key = getDirectionAwareKey(event.key, dir);\n if (orientation === \"horizontal\" && [\"ArrowUp\", \"ArrowDown\"].includes(key))\n return undefined;\n if (orientation === \"vertical\" && [\"ArrowLeft\", \"ArrowRight\"].includes(key))\n return undefined;\n return MAP_KEY_TO_FOCUS_INTENT[key];\n}\n\nfunction focusFirst(\n candidates: React.RefObject<TriggerElement | null>[],\n preventScroll = false\n) {\n const PREVIOUSLY_FOCUSED_ELEMENT = document.activeElement;\n for (const candidateRef of candidates) {\n const candidate = candidateRef.current;\n if (!candidate) continue;\n if (candidate === PREVIOUSLY_FOCUSED_ELEMENT) return;\n candidate.focus({ preventScroll });\n if (document.activeElement !== PREVIOUSLY_FOCUSED_ELEMENT) return;\n }\n}\n\nfunction wrapArray<T>(array: T[], startIndex: number) {\n return array.map<T>(\n (_, index) => array[(startIndex + index) % array.length] as T\n );\n}\n\nconst useIsomorphicLayoutEffect =\n typeof window === \"undefined\" ? React.useEffect : React.useLayoutEffect;\n\nfunction useAsRef<T>(props: T) {\n const ref = React.useRef<T>(props);\n\n useIsomorphicLayoutEffect(() => {\n ref.current = props;\n });\n\n return ref;\n}\n\nfunction useLazyRef<T>(fn: () => T) {\n const ref = React.useRef<T | null>(null);\n\n if (ref.current === null) {\n ref.current = fn();\n }\n\n return ref as React.RefObject<T>;\n}\n\nfunction getDataState(\n value: string | undefined,\n itemValue: string,\n stepState: StepState | undefined,\n steps: Map<string, StepState>,\n variant: \"item\" | \"separator\" = \"item\"\n): DataState {\n const stepKeys = Array.from(steps.keys());\n const currentIndex = stepKeys.indexOf(itemValue);\n\n if (stepState?.completed) return \"completed\";\n\n if (value === itemValue) {\n return variant === \"separator\" ? \"inactive\" : \"active\";\n }\n\n if (value) {\n const activeIndex = stepKeys.indexOf(value);\n\n if (activeIndex > currentIndex) return \"completed\";\n }\n\n return \"inactive\";\n}\n\nconst DirectionContext = React.createContext<Direction | undefined>(undefined);\n\nfunction useDirection(dirProp?: Direction): Direction {\n const contextDir = React.useContext(DirectionContext);\n return dirProp ?? contextDir ?? \"ltr\";\n}\n\ninterface StepState {\n value: string;\n completed: boolean;\n disabled: boolean;\n}\n\ninterface StoreState {\n steps: Map<string, StepState>;\n value: string;\n}\n\ninterface Store {\n subscribe: (callback: () => void) => () => void;\n getState: () => StoreState;\n setState: <K extends keyof StoreState>(key: K, value: StoreState[K]) => void;\n setStateWithValidation: (\n value: string,\n direction: NavigationDirection\n ) => Promise<boolean>;\n hasValidation: () => boolean;\n notify: () => void;\n addStep: (value: string, completed: boolean, disabled: boolean) => void;\n removeStep: (value: string) => void;\n setStep: (value: string, completed: boolean, disabled: boolean) => void;\n}\n\nconst StoreContext = React.createContext<Store | null>(null);\n\nfunction useStoreContext(consumerName: string) {\n const context = React.useContext(StoreContext);\n if (!context) {\n throw new Error(`\\`${consumerName}\\` must be used within \\`${ROOT_NAME}\\``);\n }\n return context;\n}\n\nfunction useStore<T>(selector: (state: StoreState) => T): T {\n const store = useStoreContext(\"useStore\");\n\n const getSnapshot = React.useCallback(\n () => selector(store.getState()),\n [store, selector]\n );\n\n return React.useSyncExternalStore(store.subscribe, getSnapshot, getSnapshot);\n}\n\ninterface ItemData {\n id: string;\n ref: React.RefObject<TriggerElement | null>;\n value: string;\n active: boolean;\n disabled: boolean;\n}\n\ninterface StepperContextValue {\n id: string;\n dir: Direction;\n orientation: Orientation;\n activationMode: ActivationMode;\n disabled: boolean;\n nonInteractive: boolean;\n loop: boolean;\n color?: StepperColor;\n customColor?: string;\n variant?: StepperVariant;\n labelPosition?: LabelPosition;\n}\n\nconst StepperContext = React.createContext<StepperContextValue | null>(null);\n\nfunction useStepperContext(consumerName: string) {\n const context = React.useContext(StepperContext);\n if (!context) {\n throw new Error(`\\`${consumerName}\\` must be used within \\`${ROOT_NAME}\\``);\n }\n return context;\n}\n\ninterface StepperRootProps extends DivProps {\n value?: string;\n defaultValue?: string;\n onValueChange?: (value: string) => void;\n onValueComplete?: (value: string, completed: boolean) => void;\n onValueAdd?: (value: string) => void;\n onValueRemove?: (value: string) => void;\n onValidate?: (\n value: string,\n direction: NavigationDirection\n ) => boolean | Promise<boolean>;\n activationMode?: ActivationMode;\n dir?: Direction;\n orientation?: Orientation;\n disabled?: boolean;\n loop?: boolean;\n nonInteractive?: boolean;\n color?: StepperColor;\n customColor?: string;\n variant?: StepperVariant;\n labelPosition?: LabelPosition;\n}\n\nfunction StepperRoot(props: StepperRootProps) {\n const {\n value,\n defaultValue,\n onValueChange,\n onValueComplete,\n onValueAdd,\n onValueRemove,\n onValidate,\n id: idProp,\n dir: dirProp,\n orientation = \"horizontal\",\n activationMode = \"automatic\",\n asChild,\n disabled = false,\n nonInteractive = false,\n loop = false,\n color,\n customColor,\n variant = \"normal\",\n labelPosition = \"right\",\n className,\n ...rootProps\n } = props;\n\n const listenersRef = useLazyRef(() => new Set<() => void>());\n const stateRef = useLazyRef<StoreState>(() => ({\n steps: new Map(),\n value: value ?? defaultValue ?? \"\",\n }));\n const propsRef = useAsRef({\n onValueChange,\n onValueComplete,\n onValueAdd,\n onValueRemove,\n onValidate,\n });\n\n const store: Store = React.useMemo(() => {\n return {\n subscribe: (cb) => {\n listenersRef.current.add(cb);\n return () => listenersRef.current.delete(cb);\n },\n getState: () => stateRef.current,\n setState: (key, value) => {\n if (Object.is(stateRef.current[key], value)) return;\n\n if (key === \"value\" && typeof value === \"string\") {\n stateRef.current.value = value;\n propsRef.current.onValueChange?.(value);\n } else {\n stateRef.current[key] = value;\n }\n\n store.notify();\n },\n setStateWithValidation: async (value, direction) => {\n if (!propsRef.current.onValidate) {\n store.setState(\"value\", value);\n return true;\n }\n\n try {\n const isValid = await propsRef.current.onValidate(value, direction);\n if (isValid) {\n store.setState(\"value\", value);\n }\n return isValid;\n } catch {\n return false;\n }\n },\n hasValidation: () => !!propsRef.current.onValidate,\n addStep: (value, completed, disabled) => {\n const newStep: StepState = { value, completed, disabled };\n stateRef.current.steps.set(value, newStep);\n propsRef.current.onValueAdd?.(value);\n store.notify();\n },\n removeStep: (value) => {\n stateRef.current.steps.delete(value);\n propsRef.current.onValueRemove?.(value);\n store.notify();\n },\n setStep: (value, completed, disabled) => {\n const step = stateRef.current.steps.get(value);\n if (step) {\n const updatedStep: StepState = { ...step, completed, disabled };\n stateRef.current.steps.set(value, updatedStep);\n\n if (completed !== step.completed) {\n propsRef.current.onValueComplete?.(value, completed);\n }\n\n store.notify();\n }\n },\n notify: () => {\n for (const cb of listenersRef.current) {\n cb();\n }\n },\n };\n }, [listenersRef, stateRef, propsRef]);\n\n useIsomorphicLayoutEffect(() => {\n if (value !== undefined) {\n store.setState(\"value\", value);\n }\n }, [value, store]);\n\n const dir = useDirection(dirProp);\n\n const id = React.useId();\n\n const rootId = idProp ?? id;\n\n const contextValue = React.useMemo<StepperContextValue>(\n () => ({\n id: rootId,\n dir,\n orientation,\n activationMode,\n disabled,\n nonInteractive,\n loop,\n color,\n customColor,\n variant,\n labelPosition,\n }),\n [\n rootId,\n dir,\n orientation,\n activationMode,\n disabled,\n nonInteractive,\n loop,\n color,\n customColor,\n variant,\n labelPosition,\n ]\n );\n\n const RootPrimitive = asChild ? Slot : \"div\";\n\n return (\n <StoreContext.Provider value={store}>\n <StepperContext.Provider value={contextValue}>\n <RootPrimitive\n id={rootId}\n data-disabled={disabled ? \"\" : undefined}\n data-orientation={orientation}\n data-slot=\"stepper\"\n dir={dir}\n {...rootProps}\n className={cn(\n \"ds:flex ds:gap-6\",\n orientation === \"horizontal\" ? \"ds:w-full ds:flex-col\" : \"ds:flex-row\",\n className\n )}\n />\n </StepperContext.Provider>\n </StoreContext.Provider>\n );\n}\n\ninterface FocusContextValue {\n tabStopId: string | null;\n onItemFocus: (tabStopId: string) => void;\n onItemShiftTab: () => void;\n onFocusableItemAdd: () => void;\n onFocusableItemRemove: () => void;\n onItemRegister: (item: ItemData) => void;\n onItemUnregister: (id: string) => void;\n getItems: () => ItemData[];\n}\n\nconst FocusContext = React.createContext<FocusContextValue | null>(null);\n\nfunction useFocusContext(consumerName: string) {\n const context = React.useContext(FocusContext);\n if (!context) {\n throw new Error(\n `\\`${consumerName}\\` must be used within \\`FocusProvider\\``\n );\n }\n return context;\n}\n\ninterface StepperListProps extends DivProps {\n asChild?: boolean;\n}\n\nfunction StepperList(props: StepperListProps) {\n const { className, children, asChild, ref, ...listProps } = props;\n\n const context = useStepperContext(LIST_NAME);\n const orientation = context.orientation;\n const currentValue = useStore((state) => state.value);\n\n const [tabStopId, setTabStopId] = React.useState<string | null>(null);\n const [isTabbingBackOut, setIsTabbingBackOut] = React.useState(false);\n const [focusableItemCount, setFocusableItemCount] = React.useState(0);\n const isClickFocusRef = React.useRef(false);\n const itemsRef = React.useRef<Map<string, ItemData>>(new Map());\n const listRef = React.useRef<ListElement>(null);\n const composedRef = useComposedRefs(ref, listRef);\n\n const onItemFocus = React.useCallback((tabStopId: string) => {\n setTabStopId(tabStopId);\n }, []);\n\n const onItemShiftTab = React.useCallback(() => {\n setIsTabbingBackOut(true);\n }, []);\n\n const onFocusableItemAdd = React.useCallback(() => {\n setFocusableItemCount((prevCount) => prevCount + 1);\n }, []);\n\n const onFocusableItemRemove = React.useCallback(() => {\n setFocusableItemCount((prevCount) => prevCount - 1);\n }, []);\n\n const onItemRegister = React.useCallback((item: ItemData) => {\n itemsRef.current.set(item.id, item);\n }, []);\n\n const onItemUnregister = React.useCallback((id: string) => {\n itemsRef.current.delete(id);\n }, []);\n\n const getItems = React.useCallback(() => {\n return Array.from(itemsRef.current.values())\n .filter((item) => item.ref.current)\n .sort((a, b) => {\n const elementA = a.ref.current;\n const elementB = b.ref.current;\n if (!elementA || !elementB) return 0;\n const position = elementA.compareDocumentPosition(elementB);\n if (position & Node.DOCUMENT_POSITION_FOLLOWING) {\n return -1;\n }\n if (position & Node.DOCUMENT_POSITION_PRECEDING) {\n return 1;\n }\n return 0;\n });\n }, []);\n\n const onBlur = React.useCallback(\n (event: React.FocusEvent<ListElement>) => {\n listProps.onBlur?.(event);\n if (event.defaultPrevented) return;\n\n setIsTabbingBackOut(false);\n },\n [listProps.onBlur]\n );\n\n const onFocus = React.useCallback(\n (event: React.FocusEvent<ListElement>) => {\n listProps.onFocus?.(event);\n if (event.defaultPrevented) return;\n\n const isKeyboardFocus = !isClickFocusRef.current;\n if (\n event.target === event.currentTarget &&\n isKeyboardFocus &&\n !isTabbingBackOut\n ) {\n const entryFocusEvent = new CustomEvent(ENTRY_FOCUS, EVENT_OPTIONS);\n event.currentTarget.dispatchEvent(entryFocusEvent);\n\n if (!entryFocusEvent.defaultPrevented) {\n const items = Array.from(itemsRef.current.values()).filter(\n (item) => !item.disabled\n );\n const selectedItem = currentValue\n ? items.find((item) => item.value === currentValue)\n : undefined;\n const activeItem = items.find((item) => item.active);\n const currentItem = items.find((item) => item.id === tabStopId);\n\n const candidateItems = [\n selectedItem,\n activeItem,\n currentItem,\n ...items,\n ].filter(Boolean) as ItemData[];\n const candidateRefs = candidateItems.map((item) => item.ref);\n focusFirst(candidateRefs, false);\n }\n }\n isClickFocusRef.current = false;\n },\n [listProps.onFocus, isTabbingBackOut, currentValue, tabStopId]\n );\n\n const onMouseDown = React.useCallback(\n (event: React.MouseEvent<ListElement>) => {\n listProps.onMouseDown?.(event);\n\n if (event.defaultPrevented) return;\n\n isClickFocusRef.current = true;\n },\n [listProps.onMouseDown]\n );\n\n const focusContextValue = React.useMemo<FocusContextValue>(\n () => ({\n tabStopId,\n onItemFocus,\n onItemShiftTab,\n onFocusableItemAdd,\n onFocusableItemRemove,\n onItemRegister,\n onItemUnregister,\n getItems,\n }),\n [\n tabStopId,\n onItemFocus,\n onItemShiftTab,\n onFocusableItemAdd,\n onFocusableItemRemove,\n onItemRegister,\n onItemUnregister,\n getItems,\n ]\n );\n\n const ListPrimitive = asChild ? Slot : \"div\";\n\n return (\n <FocusContext.Provider value={focusContextValue}>\n <ListPrimitive\n role=\"tablist\"\n aria-orientation={orientation}\n data-orientation={orientation}\n data-slot=\"stepper-list\"\n dir={context.dir}\n tabIndex={isTabbingBackOut || focusableItemCount === 0 ? -1 : 0}\n {...listProps}\n ref={composedRef}\n className={cn(\n \"ds:flex ds:outline-none\",\n orientation === \"horizontal\"\n ? \"ds:flex-row ds:items-center\"\n : \"ds:flex-col ds:items-start\",\n className\n )}\n onBlur={onBlur}\n onFocus={onFocus}\n onMouseDown={onMouseDown}\n >\n {children}\n </ListPrimitive>\n </FocusContext.Provider>\n );\n}\n\ninterface StepperItemContextValue {\n value: string;\n stepState: StepState | undefined;\n}\n\nconst StepperItemContext = React.createContext<StepperItemContextValue | null>(\n null\n);\n\nfunction useStepperItemContext(consumerName: string) {\n const context = React.useContext(StepperItemContext);\n if (!context) {\n throw new Error(`\\`${consumerName}\\` must be used within \\`${ITEM_NAME}\\``);\n }\n return context;\n}\n\ninterface StepperItemProps extends DivProps {\n value: string;\n completed?: boolean;\n disabled?: boolean;\n}\n\nfunction StepperItem(props: StepperItemProps) {\n const {\n value: itemValue,\n completed = false,\n disabled = false,\n asChild,\n className,\n children,\n ref,\n ...itemProps\n } = props;\n\n const context = useStepperContext(ITEM_NAME);\n const store = useStoreContext(ITEM_NAME);\n const orientation = context.orientation;\n const labelPosition = context.labelPosition ?? \"right\";\n const value = useStore((state) => state.value);\n\n useIsomorphicLayoutEffect(() => {\n store.addStep(itemValue, completed, disabled);\n\n return () => {\n store.removeStep(itemValue);\n };\n }, [itemValue, completed, disabled]);\n\n useIsomorphicLayoutEffect(() => {\n store.setStep(itemValue, completed, disabled);\n }, [itemValue, completed, disabled]);\n\n const stepState = useStore((state) => state.steps.get(itemValue));\n const steps = useStore((state) => state.steps);\n const dataState = getDataState(value, itemValue, stepState, steps);\n\n const stepKeys = Array.from(steps.keys());\n const stepIndex = stepKeys.indexOf(itemValue);\n const isFirstStep = stepIndex === 0;\n const isLastStep = stepIndex === stepKeys.length - 1;\n\n const itemContextValue = React.useMemo<StepperItemContextValue>(\n () => ({\n value: itemValue,\n stepState,\n }),\n [itemValue, stepState]\n );\n\n // Determine item layout based on orientation and labelPosition\n const getItemClasses = () => {\n const baseClasses = \"ds:relative ds:flex\";\n\n if (orientation === \"horizontal\") {\n // Horizontal stepper\n if (labelPosition === \"top\" || labelPosition === \"bottom\") {\n // When labels are above/below, use flex-col to stack indicator row and label\n // Each item takes equal space\n return `${baseClasses} ds:flex-col ds:items-center ds:flex-1 ds:gap-2`;\n }\n // Default: labels left/right - flex-row\n return `${baseClasses} ds:flex-row ds:items-center ds:not-last:flex-1`;\n } else {\n // Vertical stepper - always flex-col for vertical orientation\n return `${baseClasses} ds:flex-col`;\n }\n };\n\n // Reorganize children for top/bottom label positions\n const processedChildren = React.useMemo(() => {\n if (\n orientation === \"horizontal\" &&\n (labelPosition === \"top\" || labelPosition === \"bottom\")\n ) {\n const childArray = React.Children.toArray(children);\n let trigger: React.ReactNode = null;\n let indicator: React.ReactNode = null;\n let separator: React.ReactNode = null;\n const others: React.ReactNode[] = [];\n\n childArray.forEach((child) => {\n if (React.isValidElement(child)) {\n const slot = (child.props as { \"data-slot\"?: string })[\"data-slot\"];\n if (slot === \"stepper-trigger\" || child.type === StepperTrigger) {\n trigger = child;\n // Extract indicator from trigger's children if it exists\n const triggerChildren = React.Children.toArray(\n (child as React.ReactElement<{ children?: React.ReactNode }>)\n .props.children\n );\n triggerChildren.forEach((triggerChild) => {\n if (React.isValidElement(triggerChild)) {\n const triggerChildSlot = (\n triggerChild.props as { \"data-slot\"?: string }\n )[\"data-slot\"];\n if (\n triggerChildSlot === \"stepper-indicator\" ||\n triggerChild.type === StepperIndicator\n ) {\n indicator = triggerChild;\n }\n }\n });\n } else if (\n slot === \"stepper-separator\" ||\n child.type === StepperSeparator\n ) {\n separator = child;\n } else {\n others.push(child);\n }\n } else {\n others.push(child);\n }\n });\n\n // New structure: indicator row (with indicator + separator) then trigger\n // For proper centering, we need separators on both sides\n\n // Get the state for left separator (connects to previous step)\n // Left separator should be active if current step or any previous step is active\n const prevStepIndex = stepIndex - 1;\n const prevStepValue = prevStepIndex >= 0 ? stepKeys[prevStepIndex] : null;\n const leftSeparatorState = prevStepValue\n ? getDataState(\n value,\n prevStepValue,\n steps.get(prevStepValue),\n steps,\n \"separator\"\n )\n : \"inactive\";\n\n // Create left separator (even if separator element doesn't exist)\n let leftSeparator: React.ReactNode = null;\n if (!isFirstStep) {\n const color = context.color;\n const customColor = context.customColor;\n\n leftSeparator = (\n <div\n key=\"left-separator\"\n className={cn(\n \"ds:h-px ds:flex-1 ds:transition-colors\",\n getSeparatorColorClass(color, customColor, leftSeparatorState)\n )}\n style={getCustomColorStyle(customColor, leftSeparatorState, false)}\n aria-hidden=\"true\"\n />\n );\n }\n\n const indicatorRow = (\n <div\n className=\"ds:flex ds:w-full ds:items-center ds:justify-center\"\n key=\"indicator-row\"\n >\n {/* Left separator - connects to previous step */}\n {leftSeparator}\n {/* Spacer if first step */}\n {isFirstStep && (\n <div className=\"ds:h-px ds:flex-1 ds:bg-transparent\" aria-hidden=\"true\" />\n )}\n {indicator}\n {/* Right separator - connects to next step */}\n {!isLastStep && separator}\n {/* Spacer for last step to maintain centering */}\n {isLastStep && (\n <div className=\"ds:h-px ds:flex-1 ds:bg-transparent\" aria-hidden=\"true\" />\n )}\n </div>\n );\n\n if (labelPosition === \"top\") {\n return [trigger, indicatorRow, ...others];\n } else {\n return [indicatorRow, trigger, ...others];\n }\n }\n\n return children;\n }, [\n children,\n orientation,\n labelPosition,\n isFirstStep,\n isLastStep,\n stepIndex,\n stepKeys,\n steps,\n value,\n context.color,\n context.customColor,\n ]);\n\n const ItemPrimitive = asChild ? Slot : \"div\";\n\n return (\n <StepperItemContext.Provider value={itemContextValue}>\n <ItemPrimitive\n data-disabled={stepState?.disabled ? \"\" : undefined}\n data-orientation={orientation}\n data-state={dataState}\n data-slot=\"stepper-item\"\n data-label-position={labelPosition}\n dir={context.dir}\n {...itemProps}\n ref={ref}\n className={cn(getItemClasses(), className)}\n >\n {processedChildren}\n </ItemPrimitive>\n </StepperItemContext.Provider>\n );\n}\n\nfunction StepperTrigger(props: ButtonProps) {\n const { asChild, disabled, className, ref, ...triggerProps } = props;\n\n const context = useStepperContext(TRIGGER_NAME);\n const itemContext = useStepperItemContext(TRIGGER_NAME);\n const store = useStoreContext(TRIGGER_NAME);\n const focusContext = useFocusContext(TRIGGER_NAME);\n const value = useStore((state) => state.value);\n const itemValue = itemContext.value;\n const stepState = useStore((state) => state.steps.get(itemValue));\n const activationMode = context.activationMode;\n const orientation = context.orientation;\n const loop = context.loop;\n const labelPosition = context.labelPosition ?? \"right\";\n\n const steps = useStore((state) => state.steps);\n const stepIndex = Array.from(steps.keys()).indexOf(itemValue);\n\n const stepPosition = stepIndex + 1;\n const stepCount = steps.size;\n\n const triggerId = getId(context.id, \"trigger\", itemValue);\n const contentId = getId(context.id, \"content\", itemValue);\n const titleId = getId(context.id, \"title\", itemValue);\n const descriptionId = getId(context.id, \"description\", itemValue);\n\n const isDisabled = context.disabled || stepState?.disabled || disabled;\n const isActive = value === itemValue;\n const isTabStop = focusContext.tabStopId === triggerId;\n const dataState = getDataState(value, itemValue, stepState, steps);\n\n const triggerRef = React.useRef<TriggerElement>(null);\n const composedRef = useComposedRefs(ref, triggerRef);\n const isArrowKeyPressedRef = React.useRef(false);\n const isMouseClickRef = React.useRef(false);\n\n React.useEffect(() => {\n function onKeyDown(event: KeyboardEvent) {\n if (ARROW_KEYS.includes(event.key)) {\n isArrowKeyPressedRef.current = true;\n }\n }\n function onKeyUp() {\n isArrowKeyPressedRef.current = false;\n }\n document.addEventListener(\"keydown\", onKeyDown);\n document.addEventListener(\"keyup\", onKeyUp);\n return () => {\n document.removeEventListener(\"keydown\", onKeyDown);\n document.removeEventListener(\"keyup\", onKeyUp);\n };\n }, []);\n\n useIsomorphicLayoutEffect(() => {\n focusContext.onItemRegister({\n id: triggerId,\n ref: triggerRef,\n value: itemValue,\n active: isTabStop,\n disabled: !!isDisabled,\n });\n\n if (!isDisabled) {\n focusContext.onFocusableItemAdd();\n }\n\n return () => {\n focusContext.onItemUnregister(triggerId);\n if (!isDisabled) {\n focusContext.onFocusableItemRemove();\n }\n };\n }, [focusContext, triggerId, itemValue, isTabStop, isDisabled]);\n\n const onClick = React.useCallback(\n async (event: React.MouseEvent<TriggerElement>) => {\n triggerProps.onClick?.(event);\n if (event.defaultPrevented) return;\n\n if (!isDisabled && !context.nonInteractive) {\n const currentStepIndex = Array.from(steps.keys()).indexOf(value ?? \"\");\n const targetStepIndex = Array.from(steps.keys()).indexOf(itemValue);\n const direction = targetStepIndex > currentStepIndex ? \"next\" : \"prev\";\n\n await store.setStateWithValidation(itemValue, direction);\n }\n },\n [\n isDisabled,\n context.nonInteractive,\n store,\n itemValue,\n value,\n steps,\n triggerProps.onClick,\n ]\n );\n\n const onFocus = React.useCallback(\n async (event: React.FocusEvent<TriggerElement>) => {\n triggerProps.onFocus?.(event);\n if (event.defaultPrevented) return;\n\n focusContext.onItemFocus(triggerId);\n\n const isKeyboardFocus = !isMouseClickRef.current;\n\n if (\n !isActive &&\n !isDisabled &&\n activationMode !== \"manual\" &&\n !context.nonInteractive &&\n isKeyboardFocus\n ) {\n const currentStepIndex = Array.from(steps.keys()).indexOf(value || \"\");\n const targetStepIndex = Array.from(steps.keys()).indexOf(itemValue);\n const direction = targetStepIndex > currentStepIndex ? \"next\" : \"prev\";\n\n await store.setStateWithValidation(itemValue, direction);\n }\n\n isMouseClickRef.current = false;\n },\n [\n focusContext,\n triggerId,\n activationMode,\n isActive,\n isDisabled,\n context.nonInteractive,\n store,\n itemValue,\n value,\n steps,\n triggerProps.onFocus,\n ]\n );\n\n const onKeyDown = React.useCallback(\n async (event: React.KeyboardEvent<TriggerElement>) => {\n triggerProps.onKeyDown?.(event);\n if (event.defaultPrevented) return;\n\n if (event.key === \"Enter\" && context.nonInteractive) {\n event.preventDefault();\n return;\n }\n\n if (\n (event.key === \"Enter\" || event.key === \" \") &&\n activationMode === \"manual\" &&\n !context.nonInteractive\n ) {\n event.preventDefault();\n if (!isDisabled && triggerRef.current) {\n triggerRef.current.click();\n }\n return;\n }\n\n if (event.key === \"Tab\" && event.shiftKey) {\n focusContext.onItemShiftTab();\n return;\n }\n\n if (event.target !== event.currentTarget) return;\n\n const focusIntent = getFocusIntent(event, context.dir, orientation);\n\n if (focusIntent !== undefined) {\n if (event.metaKey || event.ctrlKey || event.altKey || event.shiftKey)\n return;\n event.preventDefault();\n\n const items = focusContext.getItems().filter((item) => !item.disabled);\n let candidateRefs = items.map((item) => item.ref);\n\n if (focusIntent === \"last\") {\n candidateRefs.reverse();\n } else if (focusIntent === \"prev\" || focusIntent === \"next\") {\n if (focusIntent === \"prev\") candidateRefs.reverse();\n const currentIndex = candidateRefs.findIndex(\n (ref) => ref.current === event.currentTarget\n );\n candidateRefs = loop\n ? wrapArray(candidateRefs, currentIndex + 1)\n : candidateRefs.slice(currentIndex + 1);\n }\n\n if (store.hasValidation() && candidateRefs.length > 0) {\n const nextRef = candidateRefs[0];\n const nextElement = nextRef?.current;\n const nextItem = items.find(\n (item) => item.ref.current === nextElement\n );\n\n if (nextItem && nextItem.value !== itemValue) {\n const currentStepIndex = Array.from(steps.keys()).indexOf(\n value || \"\"\n );\n const targetStepIndex = Array.from(steps.keys()).indexOf(\n nextItem.value\n );\n const direction: NavigationDirection =\n targetStepIndex > currentStepIndex ? \"next\" : \"prev\";\n\n if (direction === \"next\") {\n const isValid = await store.setStateWithValidation(\n nextItem.value,\n direction\n );\n if (!isValid) return;\n } else {\n store.setState(\"value\", nextItem.value);\n }\n\n queueMicrotask(() => nextElement?.focus());\n return;\n }\n }\n\n queueMicrotask(() => focusFirst(candidateRefs));\n }\n },\n [\n focusContext,\n context.nonInteractive,\n context.dir,\n activationMode,\n orientation,\n loop,\n isDisabled,\n triggerProps.onKeyDown,\n store,\n itemValue,\n value,\n steps,\n ]\n );\n\n const onMouseDown = React.useCallback(\n (event: React.MouseEvent<TriggerElement>) => {\n triggerProps.onMouseDown?.(event);\n if (event.defaultPrevented) return;\n\n isMouseClickRef.current = true;\n\n if (isDisabled) {\n event.preventDefault();\n } else {\n focusContext.onItemFocus(triggerId);\n }\n },\n [focusContext, triggerId, isDisabled, triggerProps.onMouseDown]\n );\n\n // Determine flex direction based on labelPosition\n const getFlexDirection = () => {\n if (\n orientation === \"horizontal\" &&\n (labelPosition === \"top\" || labelPosition === \"bottom\")\n ) {\n // For horizontal with top/bottom labels, trigger only contains text\n // Indicator and separator will be siblings at item level\n return labelPosition === \"top\" ? \"ds:flex-col-reverse\" : \"ds:flex-col\";\n }\n\n if (labelPosition === \"top\") return \"ds:flex-col-reverse\";\n if (labelPosition === \"bottom\") return \"ds:flex-col\";\n if (labelPosition === \"left\") return \"ds:flex-row-reverse\";\n return \"ds:flex-row\"; // default is right\n };\n\n const shouldWrapIndicator =\n orientation === \"horizontal\" &&\n (labelPosition === \"top\" || labelPosition === \"bottom\");\n\n // Filter out Indicator from children when shouldWrapIndicator is true\n const processedChildren = React.useMemo(() => {\n if (!shouldWrapIndicator) return triggerProps.children;\n\n const childArray = React.Children.toArray(triggerProps.children);\n return childArray.filter((child) => {\n if (React.isValidElement(child)) {\n const slot = (child.props as { \"data-slot\"?: string })[\"data-slot\"];\n return !(\n slot === \"stepper-indicator\" || child.type === StepperIndicator\n );\n }\n return true;\n });\n }, [shouldWrapIndicator, triggerProps.children]);\n\n const TriggerPrimitive = asChild ? Slot : \"button\";\n\n return (\n <TriggerPrimitive\n id={triggerId}\n role=\"tab\"\n type=\"button\"\n aria-controls={contentId}\n aria-current={isActive ? \"step\" : undefined}\n aria-describedby={`${titleId} ${descriptionId}`}\n aria-posinset={stepPosition}\n aria-selected={isActive}\n aria-setsize={stepCount}\n data-disabled={isDisabled ? \"\" : undefined}\n data-state={dataState}\n data-slot=\"stepper-trigger\"\n data-wrap-indicator={shouldWrapIndicator ? \"\" : undefined}\n disabled={isDisabled}\n tabIndex={isTabStop ? 0 : -1}\n {...triggerProps}\n ref={composedRef}\n className={cn(\n \"ds:inline-flex ds:items-center ds:justify-center ds:gap-3 ds:rounded-md ds:text-left ds:outline-none ds:transition-all ds:focus-visible:border-ring ds:focus-visible:ring-[3px] ds:focus-visible:ring-ring/50 ds:disabled:pointer-events-none ds:disabled:opacity-50 ds:aria-invalid:border-destructive ds:aria-invalid:ring-destructive/20 ds:dark:aria-invalid:ring-destructive/40 ds:[&_svg:not([class*='size-'])]:size-4 ds:[&_svg]:pointer-events-none ds:[&_svg]:shrink-0\",\n \"ds:not-has-data-[slot=description]:rounded-full ds:not-has-data-[slot=title]:rounded-full\",\n shouldWrapIndicator ? \"\" : getFlexDirection(),\n className\n )}\n onClick={onClick}\n onFocus={onFocus}\n onKeyDown={onKeyDown}\n onMouseDown={onMouseDown}\n >\n {processedChildren}\n </TriggerPrimitive>\n );\n}\n\ninterface StepperIndicatorProps extends Omit<DivProps, \"children\"> {\n children?: React.ReactNode | ((dataState: DataState) => React.ReactNode);\n color?: StepperColor;\n customColor?: string;\n variant?: StepperVariant;\n}\n\nfunction StepperIndicator(props: StepperIndicatorProps) {\n const {\n className,\n children,\n asChild,\n ref,\n color: colorProp,\n customColor: customColorProp,\n variant: variantProp,\n ...indicatorProps\n } = props;\n const context = useStepperContext(INDICATOR_NAME);\n const itemContext = useStepperItemContext(INDICATOR_NAME);\n const value = useStore((state) => state.value);\n const itemValue = itemContext.value;\n const stepState = useStore((state) => state.steps.get(itemValue));\n const steps = useStore((state) => state.steps);\n\n const stepPosition = Array.from(steps.keys()).indexOf(itemValue) + 1;\n\n const dataState = getDataState(value, itemValue, stepState, steps);\n\n const color = colorProp ?? context.color;\n const customColor = customColorProp ?? context.customColor;\n const variant = variantProp ?? context.variant ?? \"normal\";\n\n const colorClass = getIndicatorColorClass(color, customColor, dataState);\n const customStyle = getCustomColorStyle(customColor, dataState, true);\n\n const IndicatorPrimitive = asChild ? Slot : \"div\";\n\n const isDot = variant === \"dot\";\n\n return (\n <IndicatorPrimitive\n data-state={dataState}\n data-variant={variant}\n data-slot=\"stepper-indicator\"\n dir={context.dir}\n {...indicatorProps}\n ref={ref}\n style={{ ...indicatorProps.style, ...customStyle }}\n className={cn(\n \"ds:flex ds:shrink-0 ds:items-center ds:justify-center ds:rounded-full ds:border-2 ds:font-medium ds:text-sm ds:transition-colors\",\n isDot ? \"ds:size-7 ds:data-[variant=dot]:size-2\" : \"ds:size-7\",\n colorClass,\n className\n )}\n >\n {!isDot &&\n (typeof children === \"function\" ? (\n children(dataState)\n ) : children ? (\n children\n ) : dataState === \"completed\" ? (\n <Check className=\"ds:size-4\" />\n ) : (\n stepPosition\n ))}\n </IndicatorPrimitive>\n );\n}\n\ninterface StepperSeparatorProps extends DivProps {\n forceMount?: boolean;\n color?: StepperColor;\n customColor?: string;\n}\n\nfunction StepperSeparator(props: StepperSeparatorProps) {\n const {\n className,\n asChild,\n forceMount = false,\n ref,\n color: colorProp,\n customColor: customColorProp,\n ...separatorProps\n } = props;\n\n const context = useStepperContext(SEPARATOR_NAME);\n const itemContext = useStepperItemContext(SEPARATOR_NAME);\n const value = useStore((state) => state.value);\n const orientation = context.orientation;\n const labelPosition = context.labelPosition ?? \"right\";\n\n const steps = useStore((state) => state.steps);\n const stepIndex = Array.from(steps.keys()).indexOf(itemContext.value);\n\n const isLastStep = stepIndex === steps.size - 1;\n\n if (isLastStep && !forceMount) {\n return null;\n }\n\n const dataState = getDataState(\n value,\n itemContext.value,\n itemContext.stepState,\n steps,\n \"separator\"\n );\n\n const color = colorProp ?? context.color;\n const customColor = customColorProp ?? context.customColor;\n\n const colorClass = getSeparatorColorClass(color, customColor, dataState);\n const customStyle = getCustomColorStyle(customColor, dataState, false);\n\n const SeparatorPrimitive = asChild ? Slot : \"div\";\n\n // Determine separator positioning based on orientation and labelPosition\n const getSeparatorClasses = () => {\n if (orientation === \"horizontal\") {\n // Horizontal stepper\n if (labelPosition === \"top\" || labelPosition === \"bottom\") {\n // When labels are above/below, separator is at item level alongside indicator\n // It should be a horizontal line that takes remaining space\n return \"ds:h-px ds:flex-1\";\n }\n // Default: labels left/right - normal flex behavior\n return \"ds:h-px ds:flex-1\";\n } else {\n // Vertical stepper\n if (labelPosition === \"top\" || labelPosition === \"bottom\") {\n // When labels are above/below in vertical mode, separator connects vertically\n return \"ds:w-px ds:absolute ds:left-1/2 ds:-translate-x-1/2 ds:top-full ds:h-full ds:-z-10\";\n } else if (labelPosition === \"left\") {\n // Label on left, separator on the right side\n return \"ds:w-px ds:absolute ds:right-0 ds:top-full ds:h-full ds:-z-10 ds:translate-x-1/2\";\n } else {\n // Label on right (default), separator on the left side\n return \"ds:w-px ds:absolute ds:left-0 ds:top-full ds:h-full ds:-z-10 ds:-translate-x-1/2\";\n }\n }\n };\n\n return (\n <SeparatorPrimitive\n role=\"separator\"\n aria-hidden=\"true\"\n aria-orientation={orientation}\n data-orientation={orientation}\n data-state={dataState}\n data-slot=\"stepper-separator\"\n dir={context.dir}\n {...separatorProps}\n ref={ref}\n style={{ ...separatorProps.style, ...customStyle }}\n className={cn(\n \"ds:transition-colors\",\n getSeparatorClasses(),\n colorClass,\n className\n )}\n />\n );\n}\n\ninterface StepperTitleProps extends React.ComponentProps<\"span\"> {\n asChild?: boolean;\n}\n\nfunction StepperTitle(props: StepperTitleProps) {\n const { className, asChild, ref, ...titleProps } = props;\n\n const context = useStepperContext(TITLE_NAME);\n const itemContext = useStepperItemContext(TITLE_NAME);\n\n const titleId = getId(context.id, \"title\", itemContext.value);\n\n const TitlePrimitive = asChild ? Slot : \"span\";\n\n return (\n <TitlePrimitive\n id={titleId}\n data-slot=\"title\"\n dir={context.dir}\n {...titleProps}\n ref={ref}\n className={cn(\"ds:font-medium ds:text-sm\", className)}\n />\n );\n}\n\ninterface StepperDescriptionProps extends React.ComponentProps<\"span\"> {\n asChild?: boolean;\n}\n\nfunction StepperDescription(props: StepperDescriptionProps) {\n const { className, asChild, ref, ...descriptionProps } = props;\n const context = useStepperContext(DESCRIPTION_NAME);\n const itemContext = useStepperItemContext(DESCRIPTION_NAME);\n\n const descriptionId = getId(context.id, \"description\", itemContext.value);\n\n const DescriptionPrimitive = asChild ? Slot : \"span\";\n\n return (\n <DescriptionPrimitive\n id={descriptionId}\n data-slot=\"description\"\n dir={context.dir}\n {...descriptionProps}\n ref={ref}\n className={cn(\"ds:text-muted-foreground ds:text-xs\", className)}\n />\n );\n}\n\ninterface StepperContentProps extends DivProps {\n value: string;\n forceMount?: boolean;\n}\n\nfunction StepperContent(props: StepperContentProps) {\n const {\n value: valueProp,\n asChild,\n forceMount = false,\n ref,\n className,\n ...contentProps\n } = props;\n\n const context = useStepperContext(CONTENT_NAME);\n const value = useStore((state) => state.value);\n\n const contentId = getId(context.id, \"content\", valueProp);\n const triggerId = getId(context.id, \"trigger\", valueProp);\n\n if (valueProp !== value && !forceMount) return null;\n\n const ContentPrimitive = asChild ? Slot : \"div\";\n\n return (\n <ContentPrimitive\n id={contentId}\n role=\"tabpanel\"\n aria-labelledby={triggerId}\n data-slot=\"stepper-content\"\n dir={context.dir}\n {...contentProps}\n ref={ref}\n className={cn(\"ds:flex-1 ds:outline-none\", className)}\n />\n );\n}\n\nfunction StepperPrev(props: ButtonProps) {\n const { asChild, disabled, ...prevProps } = props;\n\n const store = useStoreContext(PREV_NAME);\n const value = useStore((state) => state.value);\n const steps = useStore((state) => state.steps);\n\n const stepKeys = Array.from(steps.keys());\n const currentIndex = value ? stepKeys.indexOf(value) : -1;\n const isDisabled = disabled || currentIndex <= 0;\n\n const onClick = React.useCallback(\n async (event: React.MouseEvent<HTMLButtonElement>) => {\n prevProps.onClick?.(event);\n if (event.defaultPrevented || isDisabled) return;\n\n const prevIndex = Math.max(currentIndex - 1, 0);\n const prevStepValue = stepKeys[prevIndex];\n\n if (prevStepValue) {\n store.setState(\"value\", prevStepValue);\n }\n },\n [prevProps.onClick, isDisabled, currentIndex, stepKeys, store]\n );\n\n const PrevPrimitive = asChild ? Slot : \"button\";\n\n return (\n <PrevPrimitive\n type=\"button\"\n data-slot=\"stepper-prev\"\n disabled={isDisabled}\n {...prevProps}\n onClick={onClick}\n />\n );\n}\n\nfunction StepperNext(props: ButtonProps) {\n const { asChild, disabled, ...nextProps } = props;\n\n const store = useStoreContext(NEXT_NAME);\n const value = useStore((state) => state.value);\n const steps = useStore((state) => state.steps);\n\n const stepKeys = Array.from(steps.keys());\n const currentIndex = value ? stepKeys.indexOf(value) : -1;\n const isDisabled = disabled || currentIndex >= stepKeys.length - 1;\n\n const onClick = React.useCallback(\n async (event: React.MouseEvent<HTMLButtonElement>) => {\n nextProps.onClick?.(event);\n if (event.defaultPrevented || isDisabled) return;\n\n const nextIndex = Math.min(currentIndex + 1, stepKeys.length - 1);\n const nextStepValue = stepKeys[nextIndex];\n\n if (nextStepValue) {\n await store.setStateWithValidation(nextStepValue, \"next\");\n }\n },\n [nextProps.onClick, isDisabled, currentIndex, stepKeys, store]\n );\n\n const NextPrimitive = asChild ? Slot : \"button\";\n\n return (\n <NextPrimitive\n type=\"button\"\n data-slot=\"stepper-next\"\n disabled={isDisabled}\n {...nextProps}\n onClick={onClick}\n />\n );\n}\n\nexport {\n StepperRoot,\n StepperList,\n StepperItem,\n StepperTrigger,\n StepperIndicator,\n StepperSeparator,\n StepperTitle,\n StepperDescription,\n StepperContent,\n StepperPrev,\n StepperNext,\n //\n useStore as useStepper,\n //\n type StepperRootProps as StepperProps,\n};\n"],"names":["ROOT_NAME","LIST_NAME","ITEM_NAME","TRIGGER_NAME","INDICATOR_NAME","SEPARATOR_NAME","TITLE_NAME","DESCRIPTION_NAME","CONTENT_NAME","PREV_NAME","NEXT_NAME","ENTRY_FOCUS","EVENT_OPTIONS","ARROW_KEYS","stepperColorClasses","getIndicatorColorClass","color","customColor","dataState","getSeparatorColorClass","getCustomColorStyle","isIndicator","getId","id","variant","value","MAP_KEY_TO_FOCUS_INTENT","getDirectionAwareKey","key","dir","getFocusIntent","event","orientation","focusFirst","candidates","preventScroll","PREVIOUSLY_FOCUSED_ELEMENT","candidateRef","candidate","wrapArray","array","startIndex","_","index","useIsomorphicLayoutEffect","React","useAsRef","props","ref","useLazyRef","fn","getDataState","itemValue","stepState","steps","stepKeys","currentIndex","DirectionContext","useDirection","dirProp","contextDir","StoreContext","useStoreContext","consumerName","context","useStore","selector","store","getSnapshot","StepperContext","useStepperContext","StepperRoot","defaultValue","onValueChange","onValueComplete","onValueAdd","onValueRemove","onValidate","idProp","activationMode","asChild","disabled","nonInteractive","loop","labelPosition","className","rootProps","listenersRef","stateRef","propsRef","cb","direction","isValid","completed","newStep","step","updatedStep","rootId","contextValue","RootPrimitive","Slot","jsx","cn","FocusContext","useFocusContext","StepperList","children","listProps","currentValue","state","tabStopId","setTabStopId","isTabbingBackOut","setIsTabbingBackOut","focusableItemCount","setFocusableItemCount","isClickFocusRef","itemsRef","listRef","composedRef","useComposedRefs","onItemFocus","onItemShiftTab","onFocusableItemAdd","prevCount","onFocusableItemRemove","onItemRegister","item","onItemUnregister","getItems","a","b","elementA","elementB","position","onBlur","onFocus","isKeyboardFocus","entryFocusEvent","items","selectedItem","activeItem","currentItem","candidateRefs","onMouseDown","focusContextValue","ListPrimitive","StepperItemContext","useStepperItemContext","StepperItem","itemProps","stepIndex","isFirstStep","isLastStep","itemContextValue","getItemClasses","baseClasses","processedChildren","childArray","trigger","indicator","separator","others","child","slot","StepperTrigger","triggerChild","StepperIndicator","StepperSeparator","prevStepIndex","prevStepValue","leftSeparatorState","leftSeparator","indicatorRow","jsxs","ItemPrimitive","triggerProps","itemContext","focusContext","stepPosition","stepCount","triggerId","contentId","titleId","descriptionId","isDisabled","isActive","isTabStop","triggerRef","isArrowKeyPressedRef","isMouseClickRef","onKeyDown","onKeyUp","onClick","currentStepIndex","focusIntent","nextElement","nextItem","getFlexDirection","shouldWrapIndicator","colorProp","customColorProp","variantProp","indicatorProps","colorClass","customStyle","IndicatorPrimitive","isDot","Check","forceMount","separatorProps","SeparatorPrimitive","getSeparatorClasses","StepperTitle","titleProps","StepperDescription","descriptionProps","StepperContent","valueProp","contentProps","StepperPrev","prevProps","prevIndex","StepperNext","nextProps","nextIndex","nextStepValue"],"mappings":"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"}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { jsxs as p, jsx as o } from "react/jsx-runtime";
|
|
2
2
|
import "react";
|
|
3
|
-
import { StepperRoot as
|
|
3
|
+
import { StepperRoot as f, StepperList as S, StepperItem as g, StepperTrigger as v, StepperIndicator as x, StepperTitle as z, StepperDescription as y, StepperSeparator as C, StepperContent as N } from "./Stepper.js";
|
|
4
4
|
import "@radix-ui/react-slot";
|
|
5
5
|
import "../../packages/ui/src/components/button.js";
|
|
6
6
|
import "../../packages/ui/src/components/button-group.js";
|
|
7
7
|
import "../../packages/ui/src/components/input.js";
|
|
8
8
|
import "../../packages/ui/src/components/textarea.js";
|
|
9
9
|
import "@radix-ui/react-label";
|
|
10
|
-
import { cn as
|
|
10
|
+
import { cn as m } from "../../packages/ui/src/lib/utils.js";
|
|
11
11
|
import "../../packages/ui/src/components/select.js";
|
|
12
12
|
import "../../packages/ui/src/components/combobox.js";
|
|
13
13
|
import "@radix-ui/react-tooltip";
|
|
@@ -35,46 +35,46 @@ import "../../packages/ui/src/components/tabs.js";
|
|
|
35
35
|
import "../../packages/ui/src/components/toggle.js";
|
|
36
36
|
function pt({
|
|
37
37
|
steps: r,
|
|
38
|
-
children:
|
|
39
|
-
color:
|
|
40
|
-
customColor:
|
|
41
|
-
variant:
|
|
38
|
+
children: n,
|
|
39
|
+
color: l,
|
|
40
|
+
customColor: a,
|
|
41
|
+
variant: s = "normal",
|
|
42
42
|
labelPosition: e = "right",
|
|
43
|
-
...
|
|
43
|
+
...d
|
|
44
44
|
}) {
|
|
45
|
-
const
|
|
45
|
+
const c = r && r.some((t) => t.content), h = (t, i) => {
|
|
46
46
|
if (t >= i - 1) return "";
|
|
47
|
-
const { orientation:
|
|
48
|
-
return
|
|
47
|
+
const { orientation: u = "horizontal" } = d;
|
|
48
|
+
return u === "vertical" ? e === "top" || e === "bottom" ? "ds:-order-1 ds:-z-10 ds:absolute ds:inset-y-0 ds:top-7 ds:left-1/2 ds:-translate-x-1/2 ds:h-full" : e === "left" ? "ds:-order-1 ds:-z-10 ds:absolute ds:inset-y-0 ds:top-7 ds:right-0 ds:translate-x-1/2 ds:h-full" : "ds:-order-1 ds:-z-10 ds:absolute ds:inset-y-0 ds:top-7 ds:left-3.5 ds:-translate-x-1/2 ds:h-full" : "";
|
|
49
49
|
};
|
|
50
50
|
return /* @__PURE__ */ p(
|
|
51
|
-
|
|
51
|
+
f,
|
|
52
52
|
{
|
|
53
|
-
...
|
|
54
|
-
color:
|
|
55
|
-
customColor:
|
|
56
|
-
variant:
|
|
53
|
+
...d,
|
|
54
|
+
color: l,
|
|
55
|
+
customColor: a,
|
|
56
|
+
variant: s,
|
|
57
57
|
labelPosition: e,
|
|
58
58
|
children: [
|
|
59
|
-
r && r.length > 0 && /* @__PURE__ */ o(
|
|
60
|
-
|
|
59
|
+
r && r.length > 0 && /* @__PURE__ */ o(S, { children: r.map((t, i) => /* @__PURE__ */ p(
|
|
60
|
+
g,
|
|
61
61
|
{
|
|
62
62
|
value: t.value,
|
|
63
63
|
completed: t.completed,
|
|
64
64
|
disabled: t.disabled,
|
|
65
65
|
children: [
|
|
66
66
|
/* @__PURE__ */ p(
|
|
67
|
-
|
|
67
|
+
v,
|
|
68
68
|
{
|
|
69
|
-
className:
|
|
70
|
-
"ds:not-last:pb-6": i < r.length - 1 &&
|
|
69
|
+
className: m({
|
|
70
|
+
"ds:not-last:pb-6": i < r.length - 1 && d.orientation === "vertical"
|
|
71
71
|
}),
|
|
72
72
|
children: [
|
|
73
|
-
/* @__PURE__ */ o(
|
|
73
|
+
/* @__PURE__ */ o(x, {}),
|
|
74
74
|
/* @__PURE__ */ p(
|
|
75
75
|
"div",
|
|
76
76
|
{
|
|
77
|
-
className:
|
|
77
|
+
className: m("ds:flex ds:flex-col ds:gap-1", {
|
|
78
78
|
"ds:text-center": e === "top" || e === "bottom",
|
|
79
79
|
"ds:text-left": e === "right",
|
|
80
80
|
"ds:text-right": e === "left"
|
|
@@ -91,16 +91,16 @@ function pt({
|
|
|
91
91
|
i < r.length - 1 && /* @__PURE__ */ o(
|
|
92
92
|
C,
|
|
93
93
|
{
|
|
94
|
-
className:
|
|
94
|
+
className: h(i, r.length)
|
|
95
95
|
}
|
|
96
96
|
)
|
|
97
97
|
]
|
|
98
98
|
},
|
|
99
99
|
t.value
|
|
100
100
|
)) }),
|
|
101
|
-
|
|
101
|
+
c ? r?.map(
|
|
102
102
|
(t) => t.content && /* @__PURE__ */ o(N, { value: t.value, children: t.content }, t.value)
|
|
103
|
-
) :
|
|
103
|
+
) : n
|
|
104
104
|
]
|
|
105
105
|
}
|
|
106
106
|
);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StepperWrapper.js","sources":["../../../../src/components/Stepper/StepperWrapper.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport {\n StepperContent,\n StepperDescription,\n StepperIndicator,\n StepperItem,\n StepperList,\n StepperRoot,\n StepperSeparator,\n StepperTitle,\n StepperTrigger,\n type StepperProps,\n} from \"./Stepper\";\nimport { cn } from \"@dsui/ui/index\";\n\ntype StepperColor =\n | \"primary\"\n | \"secondary\"\n | \"accent\"\n | \"destructive\"\n | \"muted\"\n | \"success\"\n | \"error\"\n | \"warning\";\ntype StepperVariant = \"normal\" | \"dot\";\ntype LabelPosition = \"top\" | \"bottom\" | \"left\" | \"right\";\n\ninterface Step {\n value: string;\n title: string;\n description?: string;\n completed?: boolean;\n disabled?: boolean;\n content?: React.ReactNode;\n}\n\ninterface StepperWrapperProps extends StepperProps {\n steps?: Step[];\n children?: React.ReactNode;\n color?: StepperColor;\n customColor?: string;\n variant?: StepperVariant;\n labelPosition?: LabelPosition;\n}\n\nfunction StepperWrapper({\n steps,\n children,\n color,\n customColor,\n variant = \"normal\",\n labelPosition = \"right\",\n ...props\n}: StepperWrapperProps) {\n const hasStepContent = steps && steps.some((step) => step.content);\n\n // Determine separator classes based on orientation and labelPosition\n const getSeparatorClasses = (index: number, totalSteps: number) => {\n if (index >= totalSteps - 1) return \"\";\n\n const { orientation = \"horizontal\" } = props;\n\n if (orientation === \"vertical\") {\n // Vertical stepper - separator positioning\n if (labelPosition === \"top\" || labelPosition === \"bottom\") {\n return \"
|
|
1
|
+
{"version":3,"file":"StepperWrapper.js","sources":["../../../../src/components/Stepper/StepperWrapper.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport {\n StepperContent,\n StepperDescription,\n StepperIndicator,\n StepperItem,\n StepperList,\n StepperRoot,\n StepperSeparator,\n StepperTitle,\n StepperTrigger,\n type StepperProps,\n} from \"./Stepper\";\nimport { cn } from \"@dsui/ui/index\";\n\ntype StepperColor =\n | \"primary\"\n | \"secondary\"\n | \"accent\"\n | \"destructive\"\n | \"muted\"\n | \"success\"\n | \"error\"\n | \"warning\";\ntype StepperVariant = \"normal\" | \"dot\";\ntype LabelPosition = \"top\" | \"bottom\" | \"left\" | \"right\";\n\ninterface Step {\n value: string;\n title: string;\n description?: string;\n completed?: boolean;\n disabled?: boolean;\n content?: React.ReactNode;\n}\n\ninterface StepperWrapperProps extends StepperProps {\n steps?: Step[];\n children?: React.ReactNode;\n color?: StepperColor;\n customColor?: string;\n variant?: StepperVariant;\n labelPosition?: LabelPosition;\n}\n\nfunction StepperWrapper({\n steps,\n children,\n color,\n customColor,\n variant = \"normal\",\n labelPosition = \"right\",\n ...props\n}: StepperWrapperProps) {\n const hasStepContent = steps && steps.some((step) => step.content);\n\n // Determine separator classes based on orientation and labelPosition\n const getSeparatorClasses = (index: number, totalSteps: number) => {\n if (index >= totalSteps - 1) return \"\";\n\n const { orientation = \"horizontal\" } = props;\n\n if (orientation === \"vertical\") {\n // Vertical stepper - separator positioning\n if (labelPosition === \"top\" || labelPosition === \"bottom\") {\n return \"ds:-order-1 ds:-z-10 ds:absolute ds:inset-y-0 ds:top-7 ds:left-1/2 ds:-translate-x-1/2 ds:h-full\";\n } else if (labelPosition === \"left\") {\n return \"ds:-order-1 ds:-z-10 ds:absolute ds:inset-y-0 ds:top-7 ds:right-0 ds:translate-x-1/2 ds:h-full\";\n } else {\n // right (default)\n return \"ds:-order-1 ds:-z-10 ds:absolute ds:inset-y-0 ds:top-7 ds:left-3.5 ds:-translate-x-1/2 ds:h-full\";\n }\n }\n\n // Horizontal stepper - separator is handled by the Separator component itself\n return \"\";\n };\n\n return (\n <StepperRoot\n {...props}\n color={color}\n customColor={customColor}\n variant={variant}\n labelPosition={labelPosition}\n >\n {steps && steps.length > 0 && (\n <StepperList>\n {steps.map((step, index) => (\n <StepperItem\n key={step.value}\n value={step.value}\n completed={step.completed}\n disabled={step.disabled}\n >\n <StepperTrigger\n className={cn({\n \"ds:not-last:pb-6\":\n index < steps.length - 1 &&\n props.orientation === \"vertical\",\n })}\n >\n <StepperIndicator />\n <div\n className={cn(\"ds:flex ds:flex-col ds:gap-1\", {\n \"ds:text-center\":\n labelPosition === \"top\" || labelPosition === \"bottom\",\n \"ds:text-left\": labelPosition === \"right\",\n \"ds:text-right\": labelPosition === \"left\",\n })}\n >\n <StepperTitle>{step.title}</StepperTitle>\n {step.description && (\n <StepperDescription>{step.description}</StepperDescription>\n )}\n </div>\n </StepperTrigger>\n {index < steps.length - 1 && (\n <StepperSeparator\n className={getSeparatorClasses(index, steps.length)}\n />\n )}\n </StepperItem>\n ))}\n </StepperList>\n )}\n {hasStepContent\n ? steps?.map(\n (step) =>\n step.content && (\n <StepperContent key={step.value} value={step.value}>\n {step.content}\n </StepperContent>\n )\n )\n : children}\n </StepperRoot>\n );\n}\n\nexport { StepperWrapper };\nexport type { StepperWrapperProps, Step };\n"],"names":["StepperWrapper","steps","children","color","customColor","variant","labelPosition","props","hasStepContent","step","getSeparatorClasses","index","totalSteps","orientation","jsxs","StepperRoot","jsx","StepperList","StepperItem","StepperTrigger","cn","StepperIndicator","StepperTitle","StepperDescription","StepperSeparator","StepperContent"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+CA,SAASA,GAAe;AAAA,EACtB,OAAAC;AAAA,EACA,UAAAC;AAAA,EACA,OAAAC;AAAA,EACA,aAAAC;AAAA,EACA,SAAAC,IAAU;AAAA,EACV,eAAAC,IAAgB;AAAA,EAChB,GAAGC;AACL,GAAwB;AACtB,QAAMC,IAAiBP,KAASA,EAAM,KAAK,CAACQ,MAASA,EAAK,OAAO,GAG3DC,IAAsB,CAACC,GAAeC,MAAuB;AACjE,QAAID,KAASC,IAAa,EAAG,QAAO;AAEpC,UAAM,EAAE,aAAAC,IAAc,aAAA,IAAiBN;AAEvC,WAAIM,MAAgB,aAEdP,MAAkB,SAASA,MAAkB,WACxC,qGACEA,MAAkB,SACpB,mGAGA,qGAKJ;AAAA,EACT;AAEA,SACE,gBAAAQ;AAAA,IAACC;AAAA,IAAA;AAAA,MACE,GAAGR;AAAA,MACJ,OAAAJ;AAAA,MACA,aAAAC;AAAA,MACA,SAAAC;AAAA,MACA,eAAAC;AAAA,MAEC,UAAA;AAAA,QAAAL,KAASA,EAAM,SAAS,KACvB,gBAAAe,EAACC,KACE,UAAAhB,EAAM,IAAI,CAACQ,GAAME,MAChB,gBAAAG;AAAA,UAACI;AAAA,UAAA;AAAA,YAEC,OAAOT,EAAK;AAAA,YACZ,WAAWA,EAAK;AAAA,YAChB,UAAUA,EAAK;AAAA,YAEf,UAAA;AAAA,cAAA,gBAAAK;AAAA,gBAACK;AAAA,gBAAA;AAAA,kBACC,WAAWC,EAAG;AAAA,oBACZ,oBACET,IAAQV,EAAM,SAAS,KACvBM,EAAM,gBAAgB;AAAA,kBAAA,CACzB;AAAA,kBAED,UAAA;AAAA,oBAAA,gBAAAS,EAACK,GAAA,EAAiB;AAAA,oBAClB,gBAAAP;AAAA,sBAAC;AAAA,sBAAA;AAAA,wBACC,WAAWM,EAAG,gCAAgC;AAAA,0BAC5C,kBACEd,MAAkB,SAASA,MAAkB;AAAA,0BAC/C,gBAAgBA,MAAkB;AAAA,0BAClC,iBAAiBA,MAAkB;AAAA,wBAAA,CACpC;AAAA,wBAED,UAAA;AAAA,0BAAA,gBAAAU,EAACM,GAAA,EAAc,YAAK,MAAA,CAAM;AAAA,0BACzBb,EAAK,eACJ,gBAAAO,EAACO,GAAA,EAAoB,YAAK,YAAA,CAAY;AAAA,wBAAA;AAAA,sBAAA;AAAA,oBAAA;AAAA,kBAE1C;AAAA,gBAAA;AAAA,cAAA;AAAA,cAEDZ,IAAQV,EAAM,SAAS,KACtB,gBAAAe;AAAA,gBAACQ;AAAA,gBAAA;AAAA,kBACC,WAAWd,EAAoBC,GAAOV,EAAM,MAAM;AAAA,gBAAA;AAAA,cAAA;AAAA,YACpD;AAAA,UAAA;AAAA,UA9BGQ,EAAK;AAAA,QAAA,CAiCb,GACH;AAAA,QAEDD,IACGP,GAAO;AAAA,UACL,CAACQ,MACCA,EAAK,WACH,gBAAAO,EAACS,GAAA,EAAgC,OAAOhB,EAAK,OAC1C,UAAAA,EAAK,QAAA,GADaA,EAAK,KAE1B;AAAA,QAAA,IAGNP;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGV;"}
|