@sth87/shadcn-design-system 0.1.0 → 0.1.1

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.
Files changed (59) hide show
  1. package/dist/cjs/components/Checkbox/Checkbox.cjs +1 -1
  2. package/dist/cjs/components/Checkbox/Checkbox.cjs.map +1 -1
  3. package/dist/cjs/components/Input/Input.cjs +1 -1
  4. package/dist/cjs/components/Input/Input.cjs.map +1 -1
  5. package/dist/cjs/components/Rate/Rate.cjs +1 -1
  6. package/dist/cjs/components/Rate/Rate.cjs.map +1 -1
  7. package/dist/cjs/components/Sheet/Sheet.cjs +1 -1
  8. package/dist/cjs/components/Sheet/Sheet.cjs.map +1 -1
  9. package/dist/cjs/components/Slider/Slider.cjs +1 -1
  10. package/dist/cjs/components/Slider/Slider.cjs.map +1 -1
  11. package/dist/cjs/components/Stepper/Stepper.cjs +1 -1
  12. package/dist/cjs/components/Stepper/Stepper.cjs.map +1 -1
  13. package/dist/cjs/components/Stepper/StepperWrapper.cjs +1 -1
  14. package/dist/cjs/components/Stepper/StepperWrapper.cjs.map +1 -1
  15. package/dist/cjs/components/Switch/Switch.cjs +1 -1
  16. package/dist/cjs/components/Switch/Switch.cjs.map +1 -1
  17. package/dist/cjs/components/Table/data-table-column-header.cjs +1 -1
  18. package/dist/cjs/components/Table/data-table-column-header.cjs.map +1 -1
  19. package/dist/cjs/components/Tabs/classes.cjs +1 -1
  20. package/dist/cjs/components/Tabs/classes.cjs.map +1 -1
  21. package/dist/cjs/components/TimeGridView.cjs +1 -1
  22. package/dist/cjs/components/TimeGridView.cjs.map +1 -1
  23. package/dist/cjs/components/Toast/Toast.cjs +1 -1
  24. package/dist/cjs/components/Toast/Toast.cjs.map +1 -1
  25. package/dist/cjs/components/WheelColumn.cjs +1 -1
  26. package/dist/cjs/components/WheelColumn.cjs.map +1 -1
  27. package/dist/cjs/packages/ui/src/components/calendar.cjs +1 -1
  28. package/dist/cjs/packages/ui/src/components/calendar.cjs.map +1 -1
  29. package/dist/cjs/styles/index.css +1 -1
  30. package/dist/esm/components/Checkbox/Checkbox.js +20 -20
  31. package/dist/esm/components/Checkbox/Checkbox.js.map +1 -1
  32. package/dist/esm/components/Input/Input.js +43 -43
  33. package/dist/esm/components/Input/Input.js.map +1 -1
  34. package/dist/esm/components/Rate/Rate.js +15 -15
  35. package/dist/esm/components/Rate/Rate.js.map +1 -1
  36. package/dist/esm/components/Sheet/Sheet.js +25 -25
  37. package/dist/esm/components/Sheet/Sheet.js.map +1 -1
  38. package/dist/esm/components/Slider/Slider.js +139 -139
  39. package/dist/esm/components/Slider/Slider.js.map +1 -1
  40. package/dist/esm/components/Stepper/Stepper.js +52 -52
  41. package/dist/esm/components/Stepper/Stepper.js.map +1 -1
  42. package/dist/esm/components/Stepper/StepperWrapper.js +25 -25
  43. package/dist/esm/components/Stepper/StepperWrapper.js.map +1 -1
  44. package/dist/esm/components/Switch/Switch.js +19 -19
  45. package/dist/esm/components/Switch/Switch.js.map +1 -1
  46. package/dist/esm/components/Table/data-table-column-header.js +22 -22
  47. package/dist/esm/components/Table/data-table-column-header.js.map +1 -1
  48. package/dist/esm/components/Tabs/classes.js +128 -128
  49. package/dist/esm/components/Tabs/classes.js.map +1 -1
  50. package/dist/esm/components/TimeGridView.js +27 -27
  51. package/dist/esm/components/TimeGridView.js.map +1 -1
  52. package/dist/esm/components/Toast/Toast.js +26 -26
  53. package/dist/esm/components/Toast/Toast.js.map +1 -1
  54. package/dist/esm/components/WheelColumn.js +9 -9
  55. package/dist/esm/components/WheelColumn.js.map +1 -1
  56. package/dist/esm/packages/ui/src/components/calendar.js +73 -73
  57. package/dist/esm/packages/ui/src/components/calendar.js.map +1 -1
  58. package/dist/esm/styles/index.css +1 -1
  59. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"Slider.cjs","sources":["../../../../src/components/Slider/Slider.tsx"],"sourcesContent":["import React, { useMemo } from \"react\";\nimport * as SliderPrimitive from \"@radix-ui/react-slider\";\nimport { cn } from \"@dsui/ui/lib/utils\";\nimport { motion, useMotionValue, useSpring, useTransform } from \"motion/react\";\nimport NumberFlow from \"@number-flow/react\";\nimport type { BasicColor } from \"@/types/variables\";\nimport { Badge } from \"../Badge\";\n\ntype LabelAnimation = \"number-flow\" | \"spec\" | \"none\";\ntype LabelDisplay = false | \"hover\" | \"always\";\ntype SliderColor = BasicColor | \"muted\" | \"accent\";\ntype SliderSize = \"sm\" | \"md\" | \"lg\";\ntype LabelPosition = \"top\" | \"bottom\" | \"left\" | \"right\";\n\nexport type SliderProps = Omit<\n React.ComponentPropsWithoutRef<typeof SliderPrimitive.Root>,\n \"color\" | \"defaultValue\" | \"value\" | \"min\" | \"max\"\n> & {\n color?: SliderColor;\n size?: SliderSize;\n showLabel?: LabelDisplay;\n labelArrow?: boolean;\n labelAnimation?: LabelAnimation;\n labelFormatter?: (value: number) => string;\n labelPosition?: LabelPosition;\n labelColor?: string;\n labelTextColor?: string;\n labelArrowColor?: string;\n sliderColor?: string;\n thumbBorderColor?: string;\n defaultValue?: number[];\n value?: number[];\n min?: number;\n max?: number;\n};\n\n// Color mapping configuration\nconst COLOR_CONFIG: Record<\n SliderColor,\n {\n range: string;\n thumb: string;\n labelBg: string;\n labelText: string;\n }\n> = {\n primary: {\n range: \"bg-primary\",\n thumb: \"border-primary/50\",\n labelBg: \"bg-primary\",\n labelText: \"text-primary-foreground\",\n },\n secondary: {\n range: \"bg-secondary\",\n thumb: \"border-secondary/50\",\n labelBg: \"bg-secondary\",\n labelText: \"text-secondary-foreground\",\n },\n success: {\n range: \"bg-success\",\n thumb: \"border-success/50\",\n labelBg: \"bg-success\",\n labelText: \"text-success-foreground\",\n },\n warning: {\n range: \"bg-warning\",\n thumb: \"border-warning/50\",\n labelBg: \"bg-warning\",\n labelText: \"text-warning-foreground\",\n },\n error: {\n range: \"bg-error\",\n thumb: \"border-error/50\",\n labelBg: \"bg-error\",\n labelText: \"text-error-foreground\",\n },\n glass: {\n range: \"bg-white/30 backdrop-blur-sm\",\n thumb: \"border-white/30 backdrop-blur-sm\",\n labelBg: \"bg-white/15\",\n labelText: \"text-foreground\",\n },\n muted: {\n range: \"bg-muted-foreground\",\n thumb: \"border-muted-foreground/50\",\n labelBg: \"bg-muted\",\n labelText: \"text-muted-foreground\",\n },\n accent: {\n range: \"bg-accent\",\n thumb: \"border-accent/50\",\n labelBg: \"bg-accent\",\n labelText: \"text-accent-foreground\",\n },\n};\n\n// Size configuration\nconst SIZE_CONFIG: Record<\n SliderSize,\n {\n track: string;\n thumb: string;\n }\n> = {\n sm: {\n track: \"data-[orientation=horizontal]:h-1 data-[orientation=vertical]:w-1\",\n thumb: \"size-3\",\n },\n md: {\n track:\n \"data-[orientation=horizontal]:h-1.5 data-[orientation=vertical]:w-1.5\",\n thumb: \"size-4\",\n },\n lg: {\n track: \"data-[orientation=horizontal]:h-2 data-[orientation=vertical]:w-2\",\n thumb: \"size-5\",\n },\n};\n\n// Helper to get arrow direction based on orientation and position\nconst getArrowDirection = (\n orientation: \"horizontal\" | \"vertical\",\n position: LabelPosition\n): \"top\" | \"bottom\" | \"left\" | \"right\" => {\n if (orientation === \"horizontal\") {\n if (position === \"bottom\") return \"bottom\";\n if (position === \"left\") return \"left\";\n if (position === \"right\") return \"right\";\n return \"top\";\n }\n // vertical\n if (position === \"right\") return \"right\";\n if (position === \"top\") return \"top\";\n if (position === \"bottom\") return \"bottom\";\n return \"left\";\n};\n\n// Helper to get arrow color class\nconst getArrowColorClass = (\n color: SliderColor,\n direction: \"top\" | \"bottom\" | \"left\" | \"right\"\n): string => {\n // Generate full border class (e.g., \"border-t-primary\")\n const prefix =\n direction === \"top\"\n ? \"t\"\n : direction === \"bottom\"\n ? \"b\"\n : direction === \"left\"\n ? \"l\"\n : \"r\";\n const colorMap: Record<SliderColor, string> = {\n primary: `border-${prefix}-primary`,\n secondary: `border-${prefix}-secondary`,\n success: `border-${prefix}-success`,\n warning: `border-${prefix}-warning`,\n error: `border-${prefix}-error`,\n glass: `border-${prefix}-white/15`,\n muted: `border-${prefix}-muted`,\n accent: `border-${prefix}-accent`,\n };\n\n return colorMap[color];\n};\n\n// Helper to get label position classes\nconst getLabelPositionClasses = (\n orientation: \"horizontal\" | \"vertical\",\n position: LabelPosition\n): { badge: string; arrow: string } => {\n const positions: Record<string, { badge: string; arrow: string }> = {\n \"horizontal-top\": {\n badge: \"left-1/2 -translate-x-1/2 bottom-full -translate-y-1/2\",\n arrow:\n \"top-full left-1/2 -translate-x-1/2 border-t-[6px] border-l-[6px] border-r-[6px] border-b-0 border-l-transparent border-r-transparent\",\n },\n \"horizontal-bottom\": {\n badge: \"left-1/2 -translate-x-1/2 top-full translate-y-1/2\",\n arrow:\n \"bottom-full left-1/2 -translate-x-1/2 border-b-[6px] border-l-[6px] border-r-[6px] border-t-0 border-l-transparent border-r-transparent\",\n },\n \"horizontal-left\": {\n badge: \"top-1/2 -translate-y-1/2 right-full -translate-x-1/2\",\n arrow:\n \"left-full top-1/2 -translate-y-1/2 border-l-[6px] border-t-[6px] border-b-[6px] border-r-0 border-t-transparent border-b-transparent\",\n },\n \"horizontal-right\": {\n badge: \"top-1/2 -translate-y-1/2 left-full translate-x-1/2\",\n arrow:\n \"right-full top-1/2 -translate-y-1/2 border-r-[6px] border-t-[6px] border-b-[6px] border-l-0 border-t-transparent border-b-transparent\",\n },\n \"vertical-left\": {\n badge: \"top-1/2 -translate-y-1/2 right-full -translate-x-1/2\",\n arrow:\n \"left-full top-1/2 -translate-y-1/2 border-l-[6px] border-t-[6px] border-b-[6px] border-r-0 border-t-transparent border-b-transparent\",\n },\n \"vertical-right\": {\n badge: \"top-1/2 -translate-y-1/2 left-full translate-x-1/2\",\n arrow:\n \"right-full top-1/2 -translate-y-1/2 border-r-[6px] border-t-[6px] border-b-[6px] border-l-0 border-t-transparent border-b-transparent\",\n },\n \"vertical-top\": {\n badge: \"left-1/2 -translate-x-1/2 bottom-full -translate-y-1/2\",\n arrow:\n \"top-full left-1/2 -translate-x-1/2 border-t-[6px] border-l-[6px] border-r-[6px] border-b-0 border-l-transparent border-r-transparent\",\n },\n \"vertical-bottom\": {\n badge: \"left-1/2 -translate-x-1/2 top-full translate-y-1/2\",\n arrow:\n \"bottom-full left-1/2 -translate-x-1/2 border-b-[6px] border-l-[6px] border-r-[6px] border-t-0 border-l-transparent border-r-transparent\",\n },\n };\n\n return positions[`${orientation}-${position}`];\n};\n\n// Helper to get spec label position classes\nconst getSpecLabelPositionClass = (\n orientation: \"horizontal\" | \"vertical\",\n position: LabelPosition\n): string => {\n const positions: Record<string, string> = {\n \"horizontal-top\":\n \"data-[orientation=horizontal]:bottom-full data-[orientation=horizontal]:left-1/2 data-[orientation=horizontal]:-translate-x-1/2 data-[orientation=horizontal]:-translate-y-1/2\",\n \"horizontal-bottom\":\n \"data-[orientation=horizontal]:top-full data-[orientation=horizontal]:left-1/2 data-[orientation=horizontal]:-translate-x-1/2 data-[orientation=horizontal]:translate-y-1/2\",\n \"horizontal-left\":\n \"data-[orientation=horizontal]:top-1/2 data-[orientation=horizontal]:right-full data-[orientation=horizontal]:-translate-y-1/2 data-[orientation=horizontal]:-translate-x-1/2\",\n \"horizontal-right\":\n \"data-[orientation=horizontal]:top-1/2 data-[orientation=horizontal]:left-full data-[orientation=horizontal]:-translate-y-1/2 data-[orientation=horizontal]:translate-x-1/2\",\n \"vertical-left\":\n \"data-[orientation=vertical]:right-full data-[orientation=vertical]:top-1/2 data-[orientation=vertical]:-translate-x-1/2 data-[orientation=vertical]:-translate-y-1/2\",\n \"vertical-right\":\n \"data-[orientation=vertical]:left-full data-[orientation=vertical]:top-1/2 data-[orientation=vertical]:translate-x-1/2 data-[orientation=vertical]:-translate-y-1/2\",\n \"vertical-top\":\n \"data-[orientation=vertical]:bottom-full data-[orientation=vertical]:left-1/2 data-[orientation=vertical]:-translate-x-1/2 data-[orientation=vertical]:-translate-y-1/2\",\n \"vertical-bottom\":\n \"data-[orientation=vertical]:top-full data-[orientation=vertical]:left-1/2 data-[orientation=vertical]:-translate-x-1/2 data-[orientation=vertical]:translate-y-1/2\",\n };\n\n return positions[`${orientation}-${position}`];\n};\n\nconst Slider = React.forwardRef<HTMLSpanElement, SliderProps>(\n (\n {\n className,\n color = \"primary\",\n size = \"md\",\n showLabel = false,\n labelArrow = false,\n labelAnimation = \"none\",\n labelFormatter = (value) => `${value}`,\n labelPosition = \"top\",\n labelColor,\n labelTextColor,\n labelArrowColor,\n sliderColor,\n thumbBorderColor,\n defaultValue,\n value,\n min = 0,\n max = 100,\n ...props\n },\n ref\n ) => {\n const _values = React.useMemo(\n () =>\n Array.isArray(value)\n ? value\n : Array.isArray(defaultValue)\n ? defaultValue\n : [min, max],\n [value, defaultValue, min, max]\n );\n\n // State for hover detection\n const [isHovered, setIsHovered] = React.useState(false);\n React.useEffect(() => {\n if (value !== undefined && !Array.isArray(value)) {\n console.error(\n \"[Slider] value prop must be an array of numbers, e.g., [50] or [25, 75]\"\n );\n }\n if (defaultValue !== undefined && !Array.isArray(defaultValue)) {\n console.error(\n \"[Slider] defaultValue prop must be an array of numbers, e.g., [50] or [25, 75]\"\n );\n }\n }, [value, defaultValue]);\n\n const orientation = props.orientation || \"horizontal\";\n\n // For spec animation - track thumb position and velocity\n const thumbPosition = useMotionValue(0);\n const thumbVelocity = useMotionValue(0);\n const prevThumbPosition = React.useRef(0);\n\n // Spring physics for label following effect - more dramatic\n const springConfig = { stiffness: 150, damping: 15, mass: 1 };\n const labelOffset = useSpring(0, springConfig);\n const labelRotate = useSpring(0, springConfig);\n\n // Track value changes to calculate velocity\n React.useEffect(() => {\n if (labelAnimation === \"spec\" && _values.length > 0) {\n const currentPos = _values[0];\n const velocity = currentPos - prevThumbPosition.current;\n\n // Cap velocity to prevent large jumps (e.g., on click or initial load)\n const maxVelocity = 5; // Maximum velocity threshold\n const cappedVelocity = Math.max(\n -maxVelocity,\n Math.min(maxVelocity, velocity)\n );\n\n // Update velocity and position\n thumbVelocity.set(cappedVelocity);\n thumbPosition.set(currentPos);\n\n // Calculate offset and rotation based on capped velocity\n // Negative velocity (moving left) -> positive offset (label lags behind to the right)\n const offsetAmount = -cappedVelocity * 12;\n const rotateAmount = -cappedVelocity * 20;\n\n labelOffset.set(offsetAmount);\n labelRotate.set(rotateAmount);\n\n // Reset to center when stopped\n setTimeout(() => {\n labelOffset.set(0);\n labelRotate.set(0);\n }, 100);\n\n prevThumbPosition.current = currentPos;\n }\n }, [\n _values,\n labelAnimation,\n thumbVelocity,\n thumbPosition,\n labelOffset,\n labelRotate,\n ]);\n\n // Memoized computed values\n const sliderColorClass = useMemo(() => {\n if (sliderColor || thumbBorderColor) {\n return {\n range: sliderColor || \"bg-primary\",\n thumb: thumbBorderColor || \"border-primary/50\",\n };\n }\n const config = COLOR_CONFIG[color];\n return {\n range: config.range,\n thumb: config.thumb,\n };\n }, [color, sliderColor, thumbBorderColor]);\n\n const sliderSizeClass = useMemo(() => SIZE_CONFIG[size], [size]);\n\n const labelColorClass = useMemo(() => {\n if (labelColor || labelTextColor) {\n return cn(labelColor, labelTextColor);\n }\n\n const config = COLOR_CONFIG[color];\n const direction = getArrowDirection(orientation, labelPosition);\n const arrowColor = getArrowColorClass(color, direction);\n\n if (color === \"glass\") {\n return `${config.labelBg} ${config.labelText} backdrop-blur-sm shadow-lg [&>div.arrow]:${arrowColor}`;\n }\n\n return `${config.labelBg} ${config.labelText} [&>div.arrow]:${arrowColor}`;\n }, [color, labelPosition, orientation, labelColor, labelTextColor]);\n\n const arrowColorClass = useMemo(() => {\n if (labelArrowColor) return labelArrowColor;\n const direction = getArrowDirection(orientation, labelPosition);\n return getArrowColorClass(color, direction);\n }, [color, labelPosition, orientation, labelArrowColor]);\n\n const labelVisibilityClass = useMemo(() => {\n if (showLabel === \"hover\") return \"scale-0 group-hover:scale-100\";\n if (showLabel === \"always\") return \"scale-100\";\n return \"hidden\";\n }, [showLabel]);\n\n const labelPositionClass = useMemo(\n () => getLabelPositionClasses(orientation, labelPosition),\n [labelPosition, orientation]\n );\n\n const labelPositionClassSpec = useMemo(\n () => getSpecLabelPositionClass(orientation, labelPosition),\n [labelPosition, orientation]\n );\n\n // Render label based on animation type\n const renderLabel = React.useCallback(\n (index: number) => {\n if (labelAnimation === \"spec\") {\n return (\n <motion.div\n className={cn(\n \"ds:pointer-events-none ds:absolute ds:z-50 ds:flex ds:flex-col ds:items-center ds:justify-center ds:rounded-md ds:px-3 ds:py-1.5 ds:text-xs ds:shadow-xl\",\n labelPositionClassSpec,\n labelColor && labelColor,\n labelTextColor && labelTextColor,\n !labelColor && !labelTextColor && labelColorClass\n )}\n data-orientation={orientation}\n initial={\n showLabel === \"always\"\n ? { opacity: 1, y: -5, scale: 1 }\n : { opacity: 0, y: 20, scale: 0 }\n }\n animate={\n (isHovered && showLabel === \"hover\") || showLabel === \"always\"\n ? {\n opacity: 1,\n y: -5,\n scale: 1,\n }\n : {\n opacity: 0,\n y: 20,\n scale: 0,\n }\n }\n transition={{\n type: \"tween\",\n duration: 0.2,\n ease: \"easeOut\",\n }}\n style={{\n x: labelOffset,\n rotate: labelRotate,\n whiteSpace: \"nowrap\",\n }}\n >\n <div className=\"ds:relative ds:z-1\">\n <NumberFlow\n value={_values[index]}\n format={{ notation: \"standard\" }}\n isolate\n />\n </div>\n {labelArrow && (\n <div\n className={cn(\n \"ds:arrow ds:absolute ds:border-transparent\",\n labelPositionClass.arrow,\n arrowColorClass\n )}\n />\n )}\n </motion.div>\n );\n }\n\n // Standard or number-flow animation\n return (\n <Badge\n size=\"lg\"\n color={\n labelColor || labelTextColor\n ? \"custom\"\n : color === \"glass\"\n ? \"custom\"\n : color === \"muted\"\n ? \"muted\"\n : color === \"accent\"\n ? \"accent\"\n : color\n }\n variant=\"solid\"\n className={cn(\n \"ds:transition-transform ds:absolute ds:px-3 ds:rounded-md\",\n labelPositionClass.badge,\n labelVisibilityClass,\n labelColor && labelColor,\n labelTextColor && labelTextColor,\n !labelColor &&\n !labelTextColor &&\n color === \"glass\" &&\n \"ds:bg-white/15 ds:text-foreground ds:backdrop-blur-sm ds:shadow-lg ds:[&>div.arrow]:border-t-white/15\"\n )}\n >\n {labelAnimation === \"number-flow\" ? (\n <NumberFlow\n value={_values[index]}\n format={{ notation: \"standard\" }}\n isolate\n />\n ) : (\n <span>{labelFormatter(_values[index])}</span>\n )}\n {labelArrow && (\n <div\n className={cn(\n \"ds:arrow ds:absolute ds:border-transparent\",\n labelPositionClass.arrow,\n arrowColorClass\n )}\n />\n )}\n </Badge>\n );\n },\n [\n labelAnimation,\n labelPositionClassSpec,\n labelColor,\n labelTextColor,\n labelColorClass,\n orientation,\n showLabel,\n labelOffset,\n labelRotate,\n labelFormatter,\n _values,\n color,\n labelPositionClass,\n labelVisibilityClass,\n labelArrow,\n arrowColorClass,\n isHovered,\n ]\n );\n\n // Render without label - use custom slider with color\n if (!showLabel) {\n return (\n <SliderPrimitive.Root\n ref={ref}\n data-slot=\"slider\"\n defaultValue={defaultValue}\n value={value}\n min={min}\n max={max}\n className={cn(\n \"ds:relative ds:flex ds:w-full ds:touch-none ds:items-center ds:select-none ds:data-disabled:opacity-50 ds:data-[orientation=vertical]:h-full ds:data-[orientation=vertical]:min-h-44 ds:data-[orientation=vertical]:w-auto ds:data-[orientation=vertical]:flex-col\",\n className\n )}\n {...props}\n >\n <SliderPrimitive.Track\n data-slot=\"slider-track\"\n className={cn(\n \"ds:bg-muted ds:relative ds:grow ds:overflow-hidden ds:rounded-full ds:data-[orientation=horizontal]:w-full ds:data-[orientation=vertical]:h-full\",\n sliderSizeClass.track\n )}\n >\n <SliderPrimitive.Range\n data-slot=\"slider-range\"\n className={cn(\n \"ds:absolute ds:data-[orientation=horizontal]:h-full ds:data-[orientation=vertical]:w-full\",\n sliderColorClass.range\n )}\n />\n </SliderPrimitive.Track>\n {Array.from({ length: _values.length }, (_, index) => (\n <SliderPrimitive.Thumb\n key={index}\n data-slot=\"slider-thumb\"\n className={cn(\n \"ds:block ds:shrink-0 ds:rounded-full ds:border ds:bg-white ds:shadow-sm ds:transition-[color,box-shadow] ds:hover:ring-4 ds:focus-visible:ring-4 ds:focus-visible:outline-hidden ds:disabled:pointer-events-none ds:disabled:opacity-50 ds:ring-ring/50\",\n sliderColorClass.thumb,\n sliderSizeClass.thumb\n )}\n />\n ))}\n </SliderPrimitive.Root>\n );\n }\n\n // Render with label (standard, number-flow, or spec animation)\n return (\n <SliderPrimitive.Root\n ref={ref}\n data-slot=\"slider\"\n defaultValue={defaultValue}\n value={value}\n min={min}\n max={max}\n className={cn(\n \"ds:relative ds:flex ds:w-full ds:touch-none ds:items-center ds:select-none ds:data-disabled:opacity-50 ds:data-[orientation=vertical]:h-full ds:data-[orientation=vertical]:min-h-44 ds:data-[orientation=vertical]:w-auto ds:data-[orientation=vertical]:flex-col\",\n className\n )}\n {...props}\n >\n <SliderPrimitive.Track\n data-slot=\"slider-track\"\n className={cn(\n \"ds:bg-muted ds:relative ds:grow ds:overflow-hidden ds:rounded-full ds:data-[orientation=horizontal]:w-full ds:data-[orientation=vertical]:h-full\",\n sliderSizeClass.track\n )}\n >\n <SliderPrimitive.Range\n data-slot=\"slider-range\"\n className={cn(\n \"ds:absolute ds:data-[orientation=horizontal]:h-full ds:data-[orientation=vertical]:w-full\",\n sliderColorClass.range\n )}\n />\n </SliderPrimitive.Track>\n {Array.from({ length: _values.length }, (_, index) => (\n <SliderPrimitive.Thumb\n key={index}\n data-slot=\"slider-thumb\"\n className={cn(\n \"ds:group ds:block ds:shrink-0 ds:rounded-full ds:border ds:bg-white ds:shadow-sm ds:transition-[color,box-shadow] ds:hover:ring-4 ds:focus-visible:ring-4 ds:focus-visible:outline-hidden ds:disabled:pointer-events-none ds:disabled:opacity-50 ds:ring-ring/50\",\n sliderColorClass.thumb,\n sliderSizeClass.thumb\n )}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n >\n {renderLabel(index)}\n </SliderPrimitive.Thumb>\n ))}\n </SliderPrimitive.Root>\n );\n }\n);\n\nSlider.displayName = \"Slider\";\n\nexport default Slider;\n"],"names":["COLOR_CONFIG","SIZE_CONFIG","getArrowDirection","orientation","position","getArrowColorClass","color","direction","prefix","getLabelPositionClasses","getSpecLabelPositionClass","Slider","React","className","size","showLabel","labelArrow","labelAnimation","labelFormatter","value","labelPosition","labelColor","labelTextColor","labelArrowColor","sliderColor","thumbBorderColor","defaultValue","min","max","props","ref","_values","isHovered","setIsHovered","thumbPosition","useMotionValue","thumbVelocity","prevThumbPosition","springConfig","labelOffset","useSpring","labelRotate","currentPos","velocity","maxVelocity","cappedVelocity","offsetAmount","rotateAmount","sliderColorClass","useMemo","config","sliderSizeClass","labelColorClass","cn","arrowColor","arrowColorClass","labelVisibilityClass","labelPositionClass","labelPositionClassSpec","renderLabel","index","jsxs","motion","jsx","NumberFlow","Badge","SliderPrimitive","_"],"mappings":"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"}
1
+ {"version":3,"file":"Slider.cjs","sources":["../../../../src/components/Slider/Slider.tsx"],"sourcesContent":["import React, { useMemo } from \"react\";\nimport * as SliderPrimitive from \"@radix-ui/react-slider\";\nimport { cn } from \"@dsui/ui/lib/utils\";\nimport { motion, useMotionValue, useSpring, useTransform } from \"motion/react\";\nimport NumberFlow from \"@number-flow/react\";\nimport type { BasicColor } from \"@/types/variables\";\nimport { Badge } from \"../Badge\";\n\ntype LabelAnimation = \"number-flow\" | \"spec\" | \"none\";\ntype LabelDisplay = false | \"hover\" | \"always\";\ntype SliderColor = BasicColor | \"muted\" | \"accent\";\ntype SliderSize = \"sm\" | \"md\" | \"lg\";\ntype LabelPosition = \"top\" | \"bottom\" | \"left\" | \"right\";\n\nexport type SliderProps = Omit<\n React.ComponentPropsWithoutRef<typeof SliderPrimitive.Root>,\n \"color\" | \"defaultValue\" | \"value\" | \"min\" | \"max\"\n> & {\n color?: SliderColor;\n size?: SliderSize;\n showLabel?: LabelDisplay;\n labelArrow?: boolean;\n labelAnimation?: LabelAnimation;\n labelFormatter?: (value: number) => string;\n labelPosition?: LabelPosition;\n labelColor?: string;\n labelTextColor?: string;\n labelArrowColor?: string;\n sliderColor?: string;\n thumbBorderColor?: string;\n defaultValue?: number[];\n value?: number[];\n min?: number;\n max?: number;\n};\n\n// Color mapping configuration\nconst COLOR_CONFIG: Record<\n SliderColor,\n {\n range: string;\n thumb: string;\n labelBg: string;\n labelText: string;\n }\n> = {\n primary: {\n range: \"ds:bg-primary\",\n thumb: \"ds:border-primary/50\",\n labelBg: \"ds:bg-primary\",\n labelText: \"ds:text-primary-foreground\",\n },\n secondary: {\n range: \"ds:bg-secondary\",\n thumb: \"ds:border-secondary/50\",\n labelBg: \"ds:bg-secondary\",\n labelText: \"ds:text-secondary-foreground\",\n },\n success: {\n range: \"ds:bg-success\",\n thumb: \"ds:border-success/50\",\n labelBg: \"ds:bg-success\",\n labelText: \"ds:text-success-foreground\",\n },\n warning: {\n range: \"ds:bg-warning\",\n thumb: \"ds:border-warning/50\",\n labelBg: \"ds:bg-warning\",\n labelText: \"ds:text-warning-foreground\",\n },\n error: {\n range: \"ds:bg-error\",\n thumb: \"ds:border-error/50\",\n labelBg: \"ds:bg-error\",\n labelText: \"ds:text-error-foreground\",\n },\n glass: {\n range: \"ds:bg-white/30 backdrop-blur-sm\",\n thumb: \"ds:border-white/30 backdrop-blur-sm\",\n labelBg: \"ds:bg-white/15\",\n labelText: \"ds:text-foreground\",\n },\n muted: {\n range: \"ds:bg-muted-foreground\",\n thumb: \"ds:border-muted-foreground/50\",\n labelBg: \"ds:bg-muted\",\n labelText: \"ds:text-muted-foreground\",\n },\n accent: {\n range: \"ds:bg-accent\",\n thumb: \"ds:border-accent/50\",\n labelBg: \"ds:bg-accent\",\n labelText: \"ds:text-accent-foreground\",\n },\n};\n\n// Size configuration\nconst SIZE_CONFIG: Record<\n SliderSize,\n {\n track: string;\n thumb: string;\n }\n> = {\n sm: {\n track: \"ds:data-[orientation=horizontal]:h-1 ds:data-[orientation=vertical]:w-1\",\n thumb: \"ds:size-3\",\n },\n md: {\n track:\n \"ds:data-[orientation=horizontal]:h-1.5 ds:data-[orientation=vertical]:w-1.5\",\n thumb: \"ds:size-4\",\n },\n lg: {\n track: \"ds:data-[orientation=horizontal]:h-2 ds:data-[orientation=vertical]:w-2\",\n thumb: \"ds:size-5\",\n },\n};\n\n// Helper to get arrow direction based on orientation and position\nconst getArrowDirection = (\n orientation: \"horizontal\" | \"vertical\",\n position: LabelPosition\n): \"top\" | \"bottom\" | \"left\" | \"right\" => {\n if (orientation === \"horizontal\") {\n if (position === \"bottom\") return \"bottom\";\n if (position === \"left\") return \"left\";\n if (position === \"right\") return \"right\";\n return \"top\";\n }\n // vertical\n if (position === \"right\") return \"right\";\n if (position === \"top\") return \"top\";\n if (position === \"bottom\") return \"bottom\";\n return \"left\";\n};\n\n// Helper to get arrow color class\nconst getArrowColorClass = (\n color: SliderColor,\n direction: \"top\" | \"bottom\" | \"left\" | \"right\"\n): string => {\n // Generate full border class (e.g., \"border-t-primary\")\n const prefix =\n direction === \"top\"\n ? \"t\"\n : direction === \"bottom\"\n ? \"b\"\n : direction === \"left\"\n ? \"l\"\n : \"r\";\n const colorMap: Record<SliderColor, string> = {\n primary: `ds:border-${prefix}-primary`,\n secondary: `ds:border-${prefix}-secondary`,\n success: `ds:border-${prefix}-success`,\n warning: `ds:border-${prefix}-warning`,\n error: `ds:border-${prefix}-error`,\n glass: `ds:border-${prefix}-white/15`,\n muted: `ds:border-${prefix}-muted`,\n accent: `ds:border-${prefix}-accent`,\n };\n\n return colorMap[color];\n};\n\n// Helper to get label position classes\nconst getLabelPositionClasses = (\n orientation: \"horizontal\" | \"vertical\",\n position: LabelPosition\n): { badge: string; arrow: string } => {\n const positions: Record<string, { badge: string; arrow: string }> = {\n \"horizontal-top\": {\n badge: \"ds:left-1/2 ds:-translate-x-1/2 ds:bottom-full ds:-translate-y-1/2\",\n arrow:\n \"ds:top-full left-1/2 ds:-translate-x-1/2 ds:border-t-[6px] ds:border-l-[6px] ds:border-r-[6px] ds:border-b-0 ds:border-l-transparent ds:border-r-transparent\",\n },\n \"horizontal-bottom\": {\n badge: \"ds:left-1/2 ds:-translate-x-1/2 ds:top-full ds:translate-y-1/2\",\n arrow:\n \"ds:bottom-full left-1/2 ds:-translate-x-1/2 ds:border-b-[6px] ds:border-l-[6px] ds:border-r-[6px] ds:border-t-0 ds:border-l-transparent ds:border-r-transparent\",\n },\n \"horizontal-left\": {\n badge: \"ds:top-1/2 ds:-translate-y-1/2 ds:right-full ds:-translate-x-1/2\",\n arrow:\n \"ds:left-full ds:top-1/2 ds:-translate-y-1/2 ds:border-l-[6px] ds:border-t-[6px] ds:border-b-[6px] ds:border-r-0 ds:border-t-transparent ds:border-b-transparent\",\n },\n \"horizontal-right\": {\n badge: \"ds:top-1/2 ds:-translate-y-1/2 ds:left-full ds:translate-x-1/2\",\n arrow:\n \"ds:right-full ds:top-1/2 ds:-translate-y-1/2 ds:border-r-[6px] ds:border-t-[6px] ds:border-b-[6px] ds:border-l-0 ds:border-t-transparent ds:border-b-transparent\",\n },\n \"vertical-left\": {\n badge: \"ds:top-1/2 ds:-translate-y-1/2 ds:right-full ds:-translate-x-1/2\",\n arrow:\n \"ds:left-full ds:top-1/2 ds:-translate-y-1/2 ds:border-l-[6px] ds:border-t-[6px] ds:border-b-[6px] ds:border-r-0 ds:border-t-transparent ds:border-b-transparent\",\n },\n \"vertical-right\": {\n badge: \"ds:top-1/2 ds:-translate-y-1/2 ds:left-full ds:translate-x-1/2\",\n arrow:\n \"ds:right-full ds:top-1/2 ds:-translate-y-1/2 ds:border-r-[6px] ds:border-t-[6px] ds:border-b-[6px] ds:border-l-0 ds:border-t-transparent ds:border-b-transparent\",\n },\n \"vertical-top\": {\n badge: \"ds:left-1/2 ds:-translate-x-1/2 ds:bottom-full ds:-translate-y-1/2\",\n arrow:\n \"ds:top-full ds:left-1/2 ds:-translate-x-1/2 ds:border-t-[6px] ds:border-l-[6px] ds:border-r-[6px] ds:border-b-0 ds:border-l-transparent ds:border-r-transparent\",\n },\n \"vertical-bottom\": {\n badge: \"ds:left-1/2 ds:-translate-x-1/2 ds:top-full ds:translate-y-1/2\",\n arrow:\n \"ds:bottom-full ds:left-1/2 ds:-translate-x-1/2 ds:border-b-[6px] ds:border-l-[6px] ds:border-r-[6px] ds:border-t-0 ds:border-l-transparent ds:border-r-transparent\",\n },\n };\n\n return positions[`${orientation}-${position}`];\n};\n\n// Helper to get spec label position classes\nconst getSpecLabelPositionClass = (\n orientation: \"horizontal\" | \"vertical\",\n position: LabelPosition\n): string => {\n const positions: Record<string, string> = {\n \"horizontal-top\":\n \"ds:data-[orientation=horizontal]:bottom-full ds:data-[orientation=horizontal]:left-1/2 ds:data-[orientation=horizontal]:-translate-x-1/2 ds:data-[orientation=horizontal]:-translate-y-1/2\",\n \"horizontal-bottom\":\n \"ds:data-[orientation=horizontal]:top-full ds:data-[orientation=horizontal]:left-1/2 ds:data-[orientation=horizontal]:-translate-x-1/2 ds:data-[orientation=horizontal]:translate-y-1/2\",\n \"horizontal-left\":\n \"ds:data-[orientation=horizontal]:top-1/2 ds:data-[orientation=horizontal]:right-full ds:data-[orientation=horizontal]:-translate-y-1/2 ds:data-[orientation=horizontal]:-translate-x-1/2\",\n \"horizontal-right\":\n \"ds:data-[orientation=horizontal]:top-1/2 ds:data-[orientation=horizontal]:left-full ds:data-[orientation=horizontal]:-translate-y-1/2 ds:data-[orientation=horizontal]:translate-x-1/2\",\n \"vertical-left\":\n \"ds:data-[orientation=vertical]:right-full ds:data-[orientation=vertical]:top-1/2 ds:data-[orientation=vertical]:-translate-x-1/2 ds:data-[orientation=vertical]:-translate-y-1/2\",\n \"vertical-right\":\n \"ds:data-[orientation=vertical]:left-full ds:data-[orientation=vertical]:top-1/2 ds:data-[orientation=vertical]:translate-x-1/2 ds:data-[orientation=vertical]:-translate-y-1/2\",\n \"vertical-top\":\n \"ds:data-[orientation=vertical]:bottom-full ds:data-[orientation=vertical]:left-1/2 ds:data-[orientation=vertical]:-translate-x-1/2 ds:data-[orientation=vertical]:-translate-y-1/2\",\n \"vertical-bottom\":\n \"ds:data-[orientation=vertical]:top-full ds:data-[orientation=vertical]:left-1/2 ds:data-[orientation=vertical]:-translate-x-1/2 ds:data-[orientation=vertical]:translate-y-1/2\",\n };\n\n return positions[`${orientation}-${position}`];\n};\n\nconst Slider = React.forwardRef<HTMLSpanElement, SliderProps>(\n (\n {\n className,\n color = \"primary\",\n size = \"md\",\n showLabel = false,\n labelArrow = false,\n labelAnimation = \"none\",\n labelFormatter = (value) => `${value}`,\n labelPosition = \"top\",\n labelColor,\n labelTextColor,\n labelArrowColor,\n sliderColor,\n thumbBorderColor,\n defaultValue,\n value,\n min = 0,\n max = 100,\n ...props\n },\n ref\n ) => {\n const _values = React.useMemo(\n () =>\n Array.isArray(value)\n ? value\n : Array.isArray(defaultValue)\n ? defaultValue\n : [min, max],\n [value, defaultValue, min, max]\n );\n\n // State for hover detection\n const [isHovered, setIsHovered] = React.useState(false);\n React.useEffect(() => {\n if (value !== undefined && !Array.isArray(value)) {\n console.error(\n \"[Slider] value prop must be an array of numbers, e.g., [50] or [25, 75]\"\n );\n }\n if (defaultValue !== undefined && !Array.isArray(defaultValue)) {\n console.error(\n \"[Slider] defaultValue prop must be an array of numbers, e.g., [50] or [25, 75]\"\n );\n }\n }, [value, defaultValue]);\n\n const orientation = props.orientation || \"horizontal\";\n\n // For spec animation - track thumb position and velocity\n const thumbPosition = useMotionValue(0);\n const thumbVelocity = useMotionValue(0);\n const prevThumbPosition = React.useRef(0);\n\n // Spring physics for label following effect - more dramatic\n const springConfig = { stiffness: 150, damping: 15, mass: 1 };\n const labelOffset = useSpring(0, springConfig);\n const labelRotate = useSpring(0, springConfig);\n\n // Track value changes to calculate velocity\n React.useEffect(() => {\n if (labelAnimation === \"spec\" && _values.length > 0) {\n const currentPos = _values[0];\n const velocity = currentPos - prevThumbPosition.current;\n\n // Cap velocity to prevent large jumps (e.g., on click or initial load)\n const maxVelocity = 5; // Maximum velocity threshold\n const cappedVelocity = Math.max(\n -maxVelocity,\n Math.min(maxVelocity, velocity)\n );\n\n // Update velocity and position\n thumbVelocity.set(cappedVelocity);\n thumbPosition.set(currentPos);\n\n // Calculate offset and rotation based on capped velocity\n // Negative velocity (moving left) -> positive offset (label lags behind to the right)\n const offsetAmount = -cappedVelocity * 12;\n const rotateAmount = -cappedVelocity * 20;\n\n labelOffset.set(offsetAmount);\n labelRotate.set(rotateAmount);\n\n // Reset to center when stopped\n setTimeout(() => {\n labelOffset.set(0);\n labelRotate.set(0);\n }, 100);\n\n prevThumbPosition.current = currentPos;\n }\n }, [\n _values,\n labelAnimation,\n thumbVelocity,\n thumbPosition,\n labelOffset,\n labelRotate,\n ]);\n\n // Memoized computed values\n const sliderColorClass = useMemo(() => {\n if (sliderColor || thumbBorderColor) {\n return {\n range: sliderColor || \"ds:bg-primary\",\n thumb: thumbBorderColor || \"ds:border-primary/50\",\n };\n }\n const config = COLOR_CONFIG[color];\n return {\n range: config.range,\n thumb: config.thumb,\n };\n }, [color, sliderColor, thumbBorderColor]);\n\n const sliderSizeClass = useMemo(() => SIZE_CONFIG[size], [size]);\n\n const labelColorClass = useMemo(() => {\n if (labelColor || labelTextColor) {\n return cn(labelColor, labelTextColor);\n }\n\n const config = COLOR_CONFIG[color];\n const direction = getArrowDirection(orientation, labelPosition);\n const arrowColor = getArrowColorClass(color, direction);\n\n if (color === \"glass\") {\n return `${config.labelBg} ${config.labelText} ds:backdrop-blur-sm ds:shadow-lg ds:[&>div.arrow]:${arrowColor}`;\n }\n\n return `${config.labelBg} ${config.labelText} ds:[&>div.arrow]:${arrowColor}`;\n }, [color, labelPosition, orientation, labelColor, labelTextColor]);\n\n const arrowColorClass = useMemo(() => {\n if (labelArrowColor) return labelArrowColor;\n const direction = getArrowDirection(orientation, labelPosition);\n return getArrowColorClass(color, direction);\n }, [color, labelPosition, orientation, labelArrowColor]);\n\n const labelVisibilityClass = useMemo(() => {\n if (showLabel === \"hover\") return \"ds:scale-0 ds:group-hover:scale-100\";\n if (showLabel === \"always\") return \"ds:scale-100\";\n return \"ds:hidden\";\n }, [showLabel]);\n\n const labelPositionClass = useMemo(\n () => getLabelPositionClasses(orientation, labelPosition),\n [labelPosition, orientation]\n );\n\n const labelPositionClassSpec = useMemo(\n () => getSpecLabelPositionClass(orientation, labelPosition),\n [labelPosition, orientation]\n );\n\n // Render label based on animation type\n const renderLabel = React.useCallback(\n (index: number) => {\n if (labelAnimation === \"spec\") {\n return (\n <motion.div\n className={cn(\n \"ds:pointer-events-none ds:absolute ds:z-50 ds:flex ds:flex-col ds:items-center ds:justify-center ds:rounded-md ds:px-3 ds:py-1.5 ds:text-xs ds:shadow-xl\",\n labelPositionClassSpec,\n labelColor && labelColor,\n labelTextColor && labelTextColor,\n !labelColor && !labelTextColor && labelColorClass\n )}\n data-orientation={orientation}\n initial={\n showLabel === \"always\"\n ? { opacity: 1, y: -5, scale: 1 }\n : { opacity: 0, y: 20, scale: 0 }\n }\n animate={\n (isHovered && showLabel === \"hover\") || showLabel === \"always\"\n ? {\n opacity: 1,\n y: -5,\n scale: 1,\n }\n : {\n opacity: 0,\n y: 20,\n scale: 0,\n }\n }\n transition={{\n type: \"tween\",\n duration: 0.2,\n ease: \"easeOut\",\n }}\n style={{\n x: labelOffset,\n rotate: labelRotate,\n whiteSpace: \"nowrap\",\n }}\n >\n <div className=\"ds:relative ds:z-1\">\n <NumberFlow\n value={_values[index]}\n format={{ notation: \"standard\" }}\n isolate\n />\n </div>\n {labelArrow && (\n <div\n className={cn(\n \"ds:arrow ds:absolute ds:border-transparent\",\n labelPositionClass.arrow,\n arrowColorClass\n )}\n />\n )}\n </motion.div>\n );\n }\n\n // Standard or number-flow animation\n return (\n <Badge\n size=\"lg\"\n color={\n labelColor || labelTextColor\n ? \"custom\"\n : color === \"glass\"\n ? \"custom\"\n : color === \"muted\"\n ? \"muted\"\n : color === \"accent\"\n ? \"accent\"\n : color\n }\n variant=\"solid\"\n className={cn(\n \"ds:transition-transform ds:absolute ds:px-3 ds:rounded-md\",\n labelPositionClass.badge,\n labelVisibilityClass,\n labelColor && labelColor,\n labelTextColor && labelTextColor,\n !labelColor &&\n !labelTextColor &&\n color === \"glass\" &&\n \"ds:bg-white/15 ds:text-foreground ds:backdrop-blur-sm ds:shadow-lg ds:[&>div.arrow]:border-t-white/15\"\n )}\n >\n {labelAnimation === \"number-flow\" ? (\n <NumberFlow\n value={_values[index]}\n format={{ notation: \"standard\" }}\n isolate\n />\n ) : (\n <span>{labelFormatter(_values[index])}</span>\n )}\n {labelArrow && (\n <div\n className={cn(\n \"ds:arrow ds:absolute ds:border-transparent\",\n labelPositionClass.arrow,\n arrowColorClass\n )}\n />\n )}\n </Badge>\n );\n },\n [\n labelAnimation,\n labelPositionClassSpec,\n labelColor,\n labelTextColor,\n labelColorClass,\n orientation,\n showLabel,\n labelOffset,\n labelRotate,\n labelFormatter,\n _values,\n color,\n labelPositionClass,\n labelVisibilityClass,\n labelArrow,\n arrowColorClass,\n isHovered,\n ]\n );\n\n // Render without label - use custom slider with color\n if (!showLabel) {\n return (\n <SliderPrimitive.Root\n ref={ref}\n data-slot=\"slider\"\n defaultValue={defaultValue}\n value={value}\n min={min}\n max={max}\n className={cn(\n \"ds:relative ds:flex ds:w-full ds:touch-none ds:items-center ds:select-none ds:data-disabled:opacity-50 ds:data-[orientation=vertical]:h-full ds:data-[orientation=vertical]:min-h-44 ds:data-[orientation=vertical]:w-auto ds:data-[orientation=vertical]:flex-col\",\n className\n )}\n {...props}\n >\n <SliderPrimitive.Track\n data-slot=\"slider-track\"\n className={cn(\n \"ds:bg-muted ds:relative ds:grow ds:overflow-hidden ds:rounded-full ds:data-[orientation=horizontal]:w-full ds:data-[orientation=vertical]:h-full\",\n sliderSizeClass.track\n )}\n >\n <SliderPrimitive.Range\n data-slot=\"slider-range\"\n className={cn(\n \"ds:absolute ds:data-[orientation=horizontal]:h-full ds:data-[orientation=vertical]:w-full\",\n sliderColorClass.range\n )}\n />\n </SliderPrimitive.Track>\n {Array.from({ length: _values.length }, (_, index) => (\n <SliderPrimitive.Thumb\n key={index}\n data-slot=\"slider-thumb\"\n className={cn(\n \"ds:block ds:shrink-0 ds:rounded-full ds:border ds:bg-white ds:shadow-sm ds:transition-[color,box-shadow] ds:hover:ring-4 ds:focus-visible:ring-4 ds:focus-visible:outline-hidden ds:disabled:pointer-events-none ds:disabled:opacity-50 ds:ring-ring/50\",\n sliderColorClass.thumb,\n sliderSizeClass.thumb\n )}\n />\n ))}\n </SliderPrimitive.Root>\n );\n }\n\n // Render with label (standard, number-flow, or spec animation)\n return (\n <SliderPrimitive.Root\n ref={ref}\n data-slot=\"slider\"\n defaultValue={defaultValue}\n value={value}\n min={min}\n max={max}\n className={cn(\n \"ds:relative ds:flex ds:w-full ds:touch-none ds:items-center ds:select-none ds:data-disabled:opacity-50 ds:data-[orientation=vertical]:h-full ds:data-[orientation=vertical]:min-h-44 ds:data-[orientation=vertical]:w-auto ds:data-[orientation=vertical]:flex-col\",\n className\n )}\n {...props}\n >\n <SliderPrimitive.Track\n data-slot=\"slider-track\"\n className={cn(\n \"ds:bg-muted ds:relative ds:grow ds:overflow-hidden ds:rounded-full ds:data-[orientation=horizontal]:w-full ds:data-[orientation=vertical]:h-full\",\n sliderSizeClass.track\n )}\n >\n <SliderPrimitive.Range\n data-slot=\"slider-range\"\n className={cn(\n \"ds:absolute ds:data-[orientation=horizontal]:h-full ds:data-[orientation=vertical]:w-full\",\n sliderColorClass.range\n )}\n />\n </SliderPrimitive.Track>\n {Array.from({ length: _values.length }, (_, index) => (\n <SliderPrimitive.Thumb\n key={index}\n data-slot=\"slider-thumb\"\n className={cn(\n \"ds:group ds:block ds:shrink-0 ds:rounded-full ds:border ds:bg-white ds:shadow-sm ds:transition-[color,box-shadow] ds:hover:ring-4 ds:focus-visible:ring-4 ds:focus-visible:outline-hidden ds:disabled:pointer-events-none ds:disabled:opacity-50 ds:ring-ring/50\",\n sliderColorClass.thumb,\n sliderSizeClass.thumb\n )}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n >\n {renderLabel(index)}\n </SliderPrimitive.Thumb>\n ))}\n </SliderPrimitive.Root>\n );\n }\n);\n\nSlider.displayName = \"Slider\";\n\nexport default Slider;\n"],"names":["COLOR_CONFIG","SIZE_CONFIG","getArrowDirection","orientation","position","getArrowColorClass","color","direction","prefix","getLabelPositionClasses","getSpecLabelPositionClass","Slider","React","className","size","showLabel","labelArrow","labelAnimation","labelFormatter","value","labelPosition","labelColor","labelTextColor","labelArrowColor","sliderColor","thumbBorderColor","defaultValue","min","max","props","ref","_values","isHovered","setIsHovered","thumbPosition","useMotionValue","thumbVelocity","prevThumbPosition","springConfig","labelOffset","useSpring","labelRotate","currentPos","velocity","maxVelocity","cappedVelocity","offsetAmount","rotateAmount","sliderColorClass","useMemo","config","sliderSizeClass","labelColorClass","cn","arrowColor","arrowColorClass","labelVisibilityClass","labelPositionClass","labelPositionClassSpec","renderLabel","index","jsxs","motion","jsx","NumberFlow","Badge","SliderPrimitive","_"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const k=require("react/jsx-runtime"),L=require("@radix-ui/react-slot");require("../../packages/ui/src/components/button.cjs");require("../../packages/ui/src/components/button-group.cjs");require("../../packages/ui/src/components/input.cjs");require("../../packages/ui/src/components/textarea.cjs");require("@radix-ui/react-label");const U=require("../../packages/ui/src/lib/utils.cjs");require("../../packages/ui/src/components/select.cjs");require("../../packages/ui/src/components/combobox.cjs");require("@radix-ui/react-tooltip");const Ae=require("react"),Ee=require("lucide-react");require("react-day-picker");require("../../packages/ui/src/components/popover.cjs");require("@radix-ui/react-separator");require("../../packages/ui/src/components/switch.cjs");require("vaul");require("@radix-ui/react-scroll-area");require("../../packages/ui/src/components/tree-view.cjs");require("@radix-ui/react-alert-dialog");require("@radix-ui/react-avatar");require("../../packages/ui/src/components/badge.cjs");require("../../packages/ui/src/components/checkbox.cjs");require("@radix-ui/react-collapsible");require("cmdk");require("@radix-ui/react-dialog");require("@radix-ui/react-dropdown-menu");require("../../packages/ui/src/components/input-otp.cjs");require("../../packages/ui/src/components/radio-group.cjs");require("../../packages/ui/src/components/sidebar.cjs");require("@radix-ui/react-slider");require("../../packages/ui/src/components/tabs.cjs");require("../../packages/ui/src/components/toggle.cjs");const ge=require("../../packages/ui/src/lib/compose-refs.cjs");function Re(t){const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(t){for(const s in t)if(s!=="default"){const c=Object.getOwnPropertyDescriptor(t,s);Object.defineProperty(e,s,c.get?c:{enumerable:!0,get:()=>t[s]})}}return e.default=t,Object.freeze(e)}const o=Re(Ae),xe="Stepper",Ne="StepperList",de="StepperItem",ne="StepperTrigger",pe="StepperIndicator",fe="StepperSeparator",me="StepperTitle",be="StepperDescription",Oe="StepperContent",Te="StepperPrev",Me="StepperNext",De="stepperFocusGroup.onEntryFocus",Ve={bubbles:!1,cancelable:!0},qe=["ArrowUp","ArrowDown","ArrowLeft","ArrowRight"],ae={primary:{indicator:{active:"ds:border-primary ds:bg-primary ds:text-primary-foreground ds:data-[variant=dot]:bg-primary/30 ds:data-[variant=dot]:border-primary/0",completed:"ds:border-primary ds:bg-primary ds:text-primary-foreground ds:data-[variant=dot]:bg-primary/30 ds:data-[variant=dot]:border-primary/0",inactive:"ds:border-muted ds:bg-background ds:text-muted-foreground ds:data-[variant=dot]:bg-muted/30 ds:data-[variant=dot]:border-muted/0"},separator:{active:"ds:bg-primary",completed:"ds:bg-primary",inactive:"ds:bg-border"}},secondary:{indicator:{active:"ds:border-secondary ds:bg-secondary ds:text-secondary-foreground ds:data-[variant=dot]:bg-secondary/30 ds:data-[variant=dot]:border-secondary/0",completed:"ds:border-secondary ds:bg-secondary ds:text-secondary-foreground ds:data-[variant=dot]:bg-secondary/30 ds:data-[variant=dot]:border-secondary/0",inactive:"ds:border-muted ds:bg-background ds:text-muted-foreground ds:data-[variant=dot]:bg-muted/30 ds:data-[variant=dot]:border-muted/0"},separator:{active:"ds:bg-secondary",completed:"ds:bg-secondary",inactive:"ds:bg-border"}},accent:{indicator:{active:"ds:border-accent ds:bg-accent ds:text-accent-foreground ds:data-[variant=dot]:bg-accent/30 ds:data-[variant=dot]:border-accent/0",completed:"ds:border-accent ds:bg-accent ds:text-accent-foreground ds:data-[variant=dot]:bg-accent/30 ds:data-[variant=dot]:border-accent/0",inactive:"ds:border-muted ds:bg-background ds:text-muted-foreground ds:data-[variant=dot]:bg-muted/30 ds:data-[variant=dot]:border-muted/0"},separator:{active:"ds:bg-accent",completed:"ds:bg-accent",inactive:"ds:bg-border"}},destructive:{indicator:{active:"ds:border-destructive ds:bg-destructive ds:text-destructive-foreground ds:data-[variant=dot]:bg-destructive/30 ds:data-[variant=dot]:border-destructive/0",completed:"ds:border-destructive ds:bg-destructive ds:text-destructive-foreground ds:data-[variant=dot]:bg-destructive/30 ds:data-[variant=dot]:border-destructive/0",inactive:"ds:border-muted ds:bg-background ds:text-muted-foreground ds:data-[variant=dot]:bg-muted/30 ds:data-[variant=dot]:border-muted/0"},separator:{active:"ds:bg-destructive",completed:"ds:bg-destructive",inactive:"ds:bg-border"}},muted:{indicator:{active:"ds:border-muted ds:bg-muted ds:text-muted-foreground ds:data-[variant=dot]:bg-muted/30 ds:data-[variant=dot]:border-muted/0",completed:"ds:border-muted ds:bg-muted ds:text-muted-foreground ds:data-[variant=dot]:bg-muted/30 ds:data-[variant=dot]:border-muted/0",inactive:"ds:border-muted ds:bg-background ds:text-muted-foreground ds:data-[variant=dot]:bg-muted/30 ds:data-[variant=dot]:border-muted/0"},separator:{active:"ds:bg-muted",completed:"ds:bg-muted",inactive:"ds:bg-border"}},success:{indicator:{active:"ds:border-success ds:bg-success ds:text-success-foreground ds:data-[variant=dot]:bg-success/30 ds:data-[variant=dot]:border-success/0",completed:"ds:border-success ds:bg-success ds:text-success-foreground ds:data-[variant=dot]:bg-success/30 ds:data-[variant=dot]:border-success/0",inactive:"ds:border-muted ds:bg-background ds:text-muted-foreground ds:data-[variant=dot]:bg-muted/30 ds:data-[variant=dot]:border-muted/0"},separator:{active:"ds:bg-success",completed:"ds:bg-success",inactive:"ds:bg-border"}},error:{indicator:{active:"ds:border-error ds:bg-error ds:text-error-foreground ds:data-[variant=dot]:bg-error/30 ds:data-[variant=dot]:border-error/0",completed:"ds:border-error ds:bg-error ds:text-error-foreground ds:data-[variant=dot]:bg-error/30 ds:data-[variant=dot]:border-error/0",inactive:"ds:border-muted ds:bg-background ds:text-muted-foreground ds:data-[variant=dot]:bg-muted/30 ds:data-[variant=dot]:border-muted/0"},separator:{active:"ds:bg-error",completed:"ds:bg-error",inactive:"ds:bg-border"}},warning:{indicator:{active:"ds:border-warning ds:bg-warning ds:text-warning-foreground ds:data-[variant=dot]:bg-warning/30 ds:data-[variant=dot]:border-warning/0",completed:"ds:border-warning ds:bg-warning ds:text-warning-foreground ds:data-[variant=dot]:bg-warning/30 ds:data-[variant=dot]:border-warning/0",inactive:"ds:border-muted ds:bg-background ds:text-muted-foreground ds:data-[variant=dot]:bg-muted/30 ds:data-[variant=dot]:border-muted/0"},separator:{active:"ds:bg-warning",completed:"ds:bg-warning",inactive:"ds:bg-border"}}};function Fe(t,e,s){return e?"":t?ae[t].indicator[s]:ae.primary.indicator[s]}function Se(t,e,s){return e?"":t?ae[t].separator[s]:ae.primary.separator[s]}function ce(t,e,s){if(t)return s?e==="active"||e==="completed"?{borderColor:t,backgroundColor:t,color:"white"}:{borderColor:"hsl(var(--muted))",backgroundColor:"hsl(var(--background))",color:"hsl(var(--muted-foreground))"}:e==="active"||e==="completed"?{backgroundColor:t}:{backgroundColor:"hsl(var(--border))"}}function H(t,e,s){return`${t}-${e}-${s}`}const _e={ArrowLeft:"prev",ArrowUp:"prev",ArrowRight:"next",ArrowDown:"next",PageUp:"first",Home:"first",PageDown:"last",End:"last"};function je(t,e){return e!=="rtl"?t:t==="ArrowLeft"?"ArrowRight":t==="ArrowRight"?"ArrowLeft":t}function Le(t,e,s){const c=je(t.key,e);if(!(s==="horizontal"&&["ArrowUp","ArrowDown"].includes(c))&&!(s==="vertical"&&["ArrowLeft","ArrowRight"].includes(c)))return _e[c]}function ye(t,e=!1){const s=document.activeElement;for(const c of t){const b=c.current;if(b&&(b===s||(b.focus({preventScroll:e}),document.activeElement!==s)))return}}function ze(t,e){return t.map((s,c)=>t[(e+c)%t.length])}const Q=typeof window>"u"?o.useEffect:o.useLayoutEffect;function Ke(t){const e=o.useRef(t);return Q(()=>{e.current=t}),e}function ve(t){const e=o.useRef(null);return e.current===null&&(e.current=t()),e}function Z(t,e,s,c,b="item"){const a=Array.from(c.keys()),i=a.indexOf(e);return s?.completed?"completed":t===e?b==="separator"?"inactive":"active":t&&a.indexOf(t)>i?"completed":"inactive"}const $e=o.createContext(void 0);function Ue(t){const e=o.useContext($e);return t??e??"ltr"}const Ce=o.createContext(null);function ee(t){const e=o.useContext(Ce);if(!e)throw new Error(`\`${t}\` must be used within \`${xe}\``);return e}function R(t){const e=ee("useStore"),s=o.useCallback(()=>t(e.getState()),[e,t]);return o.useSyncExternalStore(e.subscribe,s,s)}const Ie=o.createContext(null);function X(t){const e=o.useContext(Ie);if(!e)throw new Error(`\`${t}\` must be used within \`${xe}\``);return e}function We(t){const{value:e,defaultValue:s,onValueChange:c,onValueComplete:b,onValueAdd:a,onValueRemove:i,onValidate:m,id:l,dir:n,orientation:v="horizontal",activationMode:d="automatic",asChild:u,disabled:y=!1,nonInteractive:S=!1,loop:A=!1,color:g,customColor:x,variant:O="normal",labelPosition:T="right",className:V,...w}=t,D=ve(()=>new Set),I=ve(()=>({steps:new Map,value:e??s??""})),h=Ke({onValueChange:c,onValueComplete:b,onValueAdd:a,onValueRemove:i,onValidate:m}),p=o.useMemo(()=>({subscribe:r=>(D.current.add(r),()=>D.current.delete(r)),getState:()=>I.current,setState:(r,C)=>{Object.is(I.current[r],C)||(r==="value"&&typeof C=="string"?(I.current.value=C,h.current.onValueChange?.(C)):I.current[r]=C,p.notify())},setStateWithValidation:async(r,C)=>{if(!h.current.onValidate)return p.setState("value",r),!0;try{const N=await h.current.onValidate(r,C);return N&&p.setState("value",r),N}catch{return!1}},hasValidation:()=>!!h.current.onValidate,addStep:(r,C,N)=>{const E={value:r,completed:C,disabled:N};I.current.steps.set(r,E),h.current.onValueAdd?.(r),p.notify()},removeStep:r=>{I.current.steps.delete(r),h.current.onValueRemove?.(r),p.notify()},setStep:(r,C,N)=>{const E=I.current.steps.get(r);if(E){const P={...E,completed:C,disabled:N};I.current.steps.set(r,P),C!==E.completed&&h.current.onValueComplete?.(r,C),p.notify()}},notify:()=>{for(const r of D.current)r()}}),[D,I,h]);Q(()=>{e!==void 0&&p.setState("value",e)},[e,p]);const q=Ue(n),z=o.useId(),K=l??z,F=o.useMemo(()=>({id:K,dir:q,orientation:v,activationMode:d,disabled:y,nonInteractive:S,loop:A,color:g,customColor:x,variant:O,labelPosition:T}),[K,q,v,d,y,S,A,g,x,O,T]),G=u?L.Slot:"div";return k.jsx(Ce.Provider,{value:p,children:k.jsx(Ie.Provider,{value:F,children:k.jsx(G,{id:K,"data-disabled":y?"":void 0,"data-orientation":v,"data-slot":"stepper",dir:q,...w,className:U.cn("ds:flex ds:gap-6",v==="horizontal"?"ds:w-full ds:flex-col":"ds:flex-row",V)})})})}const he=o.createContext(null);function Be(t){const e=o.useContext(he);if(!e)throw new Error(`\`${t}\` must be used within \`FocusProvider\``);return e}function Ge(t){const{className:e,children:s,asChild:c,ref:b,...a}=t,i=X(Ne),m=i.orientation,l=R(r=>r.value),[n,v]=o.useState(null),[d,u]=o.useState(!1),[y,S]=o.useState(0),A=o.useRef(!1),g=o.useRef(new Map),x=o.useRef(null),O=ge.useComposedRefs(b,x),T=o.useCallback(r=>{v(r)},[]),V=o.useCallback(()=>{u(!0)},[]),w=o.useCallback(()=>{S(r=>r+1)},[]),D=o.useCallback(()=>{S(r=>r-1)},[]),I=o.useCallback(r=>{g.current.set(r.id,r)},[]),h=o.useCallback(r=>{g.current.delete(r)},[]),p=o.useCallback(()=>Array.from(g.current.values()).filter(r=>r.ref.current).sort((r,C)=>{const N=r.ref.current,E=C.ref.current;if(!N||!E)return 0;const P=N.compareDocumentPosition(E);return P&Node.DOCUMENT_POSITION_FOLLOWING?-1:P&Node.DOCUMENT_POSITION_PRECEDING?1:0}),[]),q=o.useCallback(r=>{a.onBlur?.(r),!r.defaultPrevented&&u(!1)},[a.onBlur]),z=o.useCallback(r=>{if(a.onFocus?.(r),r.defaultPrevented)return;const C=!A.current;if(r.target===r.currentTarget&&C&&!d){const N=new CustomEvent(De,Ve);if(r.currentTarget.dispatchEvent(N),!N.defaultPrevented){const E=Array.from(g.current.values()).filter(j=>!j.disabled),P=l?E.find(j=>j.value===l):void 0,W=E.find(j=>j.active),re=E.find(j=>j.id===n),oe=[P,W,re,...E].filter(Boolean).map(j=>j.ref);ye(oe,!1)}}A.current=!1},[a.onFocus,d,l,n]),K=o.useCallback(r=>{a.onMouseDown?.(r),!r.defaultPrevented&&(A.current=!0)},[a.onMouseDown]),F=o.useMemo(()=>({tabStopId:n,onItemFocus:T,onItemShiftTab:V,onFocusableItemAdd:w,onFocusableItemRemove:D,onItemRegister:I,onItemUnregister:h,getItems:p}),[n,T,V,w,D,I,h,p]),G=c?L.Slot:"div";return k.jsx(he.Provider,{value:F,children:k.jsx(G,{role:"tablist","aria-orientation":m,"data-orientation":m,"data-slot":"stepper-list",dir:i.dir,tabIndex:d||y===0?-1:0,...a,ref:O,className:U.cn("ds:flex ds:outline-none",m==="horizontal"?"ds:flex-row ds:items-center":"ds:flex-col ds:items-start",e),onBlur:q,onFocus:z,onMouseDown:K,children:s})})}const we=o.createContext(null);function te(t){const e=o.useContext(we);if(!e)throw new Error(`\`${t}\` must be used within \`${de}\``);return e}function Ye(t){const{value:e,completed:s=!1,disabled:c=!1,asChild:b,className:a,children:i,ref:m,...l}=t,n=X(de),v=ee(de),d=n.orientation,u=n.labelPosition??"right",y=R(p=>p.value);Q(()=>(v.addStep(e,s,c),()=>{v.removeStep(e)}),[e,s,c]),Q(()=>{v.setStep(e,s,c)},[e,s,c]);const S=R(p=>p.steps.get(e)),A=R(p=>p.steps),g=Z(y,e,S,A),x=Array.from(A.keys()),O=x.indexOf(e),T=O===0,V=O===x.length-1,w=o.useMemo(()=>({value:e,stepState:S}),[e,S]),D=()=>{const p="ds:relative ds:flex";return d==="horizontal"?u==="top"||u==="bottom"?`${p} flex-col items-center flex-1 gap-2`:`${p} flex-row items-center not-last:flex-1`:`${p} flex-col`},I=o.useMemo(()=>{if(d==="horizontal"&&(u==="top"||u==="bottom")){const p=o.Children.toArray(i);let q=null,z=null,K=null;const F=[];p.forEach(P=>{if(o.isValidElement(P)){const W=P.props["data-slot"];W==="stepper-trigger"||P.type===Pe?(q=P,o.Children.toArray(P.props.children).forEach($=>{o.isValidElement($)&&($.props["data-slot"]==="stepper-indicator"||$.type===ue)&&(z=$)})):W==="stepper-separator"||P.type===ke?K=P:F.push(P)}else F.push(P)});const G=O-1,r=G>=0?x[G]:null,C=r?Z(y,r,A.get(r),A,"separator"):"inactive";let N=null;if(!T){const P=n.color,W=n.customColor;N=k.jsx("div",{className:U.cn("ds:h-px ds:flex-1 ds:transition-colors",Se(P,W,C)),style:ce(W,C,!1),"aria-hidden":"true"},"left-separator")}const E=k.jsxs("div",{className:"ds:flex ds:w-full ds:items-center ds:justify-center",children:[N,T&&k.jsx("div",{className:"ds:h-px ds:flex-1 ds:bg-transparent","aria-hidden":"true"}),z,!V&&K,V&&k.jsx("div",{className:"ds:h-px ds:flex-1 ds:bg-transparent","aria-hidden":"true"})]},"indicator-row");return u==="top"?[q,E,...F]:[E,q,...F]}return i},[i,d,u,T,V,O,x,A,y,n.color,n.customColor]),h=b?L.Slot:"div";return k.jsx(we.Provider,{value:w,children:k.jsx(h,{"data-disabled":S?.disabled?"":void 0,"data-orientation":d,"data-state":g,"data-slot":"stepper-item","data-label-position":u,dir:n.dir,...l,ref:m,className:U.cn(D(),a),children:I})})}function Pe(t){const{asChild:e,disabled:s,className:c,ref:b,...a}=t,i=X(ne),m=te(ne),l=ee(ne),n=Be(ne),v=R(f=>f.value),d=m.value,u=R(f=>f.steps.get(d)),y=i.activationMode,S=i.orientation,A=i.loop,g=i.labelPosition??"right",x=R(f=>f.steps),T=Array.from(x.keys()).indexOf(d)+1,V=x.size,w=H(i.id,"trigger",d),D=H(i.id,"content",d),I=H(i.id,"title",d),h=H(i.id,"description",d),p=i.disabled||u?.disabled||s,q=v===d,z=n.tabStopId===w,K=Z(v,d,u,x),F=o.useRef(null),G=ge.useComposedRefs(b,F),r=o.useRef(!1),C=o.useRef(!1);o.useEffect(()=>{function f(Y){qe.includes(Y.key)&&(r.current=!0)}function M(){r.current=!1}return document.addEventListener("keydown",f),document.addEventListener("keyup",M),()=>{document.removeEventListener("keydown",f),document.removeEventListener("keyup",M)}},[]),Q(()=>(n.onItemRegister({id:w,ref:F,value:d,active:z,disabled:!!p}),p||n.onFocusableItemAdd(),()=>{n.onItemUnregister(w),p||n.onFocusableItemRemove()}),[n,w,d,z,p]);const N=o.useCallback(async f=>{if(a.onClick?.(f),!f.defaultPrevented&&!p&&!i.nonInteractive){const M=Array.from(x.keys()).indexOf(v??""),_=Array.from(x.keys()).indexOf(d)>M?"next":"prev";await l.setStateWithValidation(d,_)}},[p,i.nonInteractive,l,d,v,x,a.onClick]),E=o.useCallback(async f=>{if(a.onFocus?.(f),f.defaultPrevented)return;n.onItemFocus(w);const M=!C.current;if(!q&&!p&&y!=="manual"&&!i.nonInteractive&&M){const Y=Array.from(x.keys()).indexOf(v||""),B=Array.from(x.keys()).indexOf(d)>Y?"next":"prev";await l.setStateWithValidation(d,B)}C.current=!1},[n,w,y,q,p,i.nonInteractive,l,d,v,x,a.onFocus]),P=o.useCallback(async f=>{if(a.onKeyDown?.(f),f.defaultPrevented)return;if(f.key==="Enter"&&i.nonInteractive){f.preventDefault();return}if((f.key==="Enter"||f.key===" ")&&y==="manual"&&!i.nonInteractive){f.preventDefault(),!p&&F.current&&F.current.click();return}if(f.key==="Tab"&&f.shiftKey){n.onItemShiftTab();return}if(f.target!==f.currentTarget)return;const M=Le(f,i.dir,S);if(M!==void 0){if(f.metaKey||f.ctrlKey||f.altKey||f.shiftKey)return;f.preventDefault();const Y=n.getItems().filter(B=>!B.disabled);let _=Y.map(B=>B.ref);if(M==="last")_.reverse();else if(M==="prev"||M==="next"){M==="prev"&&_.reverse();const B=_.findIndex(se=>se.current===f.currentTarget);_=A?ze(_,B+1):_.slice(B+1)}if(l.hasValidation()&&_.length>0){const se=_[0]?.current,J=Y.find(ie=>ie.ref.current===se);if(J&&J.value!==d){const ie=Array.from(x.keys()).indexOf(v||""),le=Array.from(x.keys()).indexOf(J.value)>ie?"next":"prev";if(le==="next"){if(!await l.setStateWithValidation(J.value,le))return}else l.setState("value",J.value);queueMicrotask(()=>se?.focus());return}}queueMicrotask(()=>ye(_))}},[n,i.nonInteractive,i.dir,y,S,A,p,a.onKeyDown,l,d,v,x]),W=o.useCallback(f=>{a.onMouseDown?.(f),!f.defaultPrevented&&(C.current=!0,p?f.preventDefault():n.onItemFocus(w))},[n,w,p,a.onMouseDown]),re=()=>S==="horizontal"&&(g==="top"||g==="bottom")?g==="top"?"flex-col-reverse":"flex-col":g==="top"?"flex-col-reverse":g==="bottom"?"flex-col":g==="left"?"flex-row-reverse":"flex-row",$=S==="horizontal"&&(g==="top"||g==="bottom"),oe=o.useMemo(()=>$?o.Children.toArray(a.children).filter(M=>o.isValidElement(M)?!(M.props["data-slot"]==="stepper-indicator"||M.type===ue):!0):a.children,[$,a.children]),j=e?L.Slot:"button";return k.jsx(j,{id:w,role:"tab",type:"button","aria-controls":D,"aria-current":q?"step":void 0,"aria-describedby":`${I} ${h}`,"aria-posinset":T,"aria-selected":q,"aria-setsize":V,"data-disabled":p?"":void 0,"data-state":K,"data-slot":"stepper-trigger","data-wrap-indicator":$?"":void 0,disabled:p,tabIndex:z?0:-1,...a,ref:G,className:U.cn("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","ds:not-has-data-[slot=description]:rounded-full ds:not-has-data-[slot=title]:rounded-full",$?"":re(),c),onClick:N,onFocus:E,onKeyDown:P,onMouseDown:W,children:oe})}function ue(t){const{className:e,children:s,asChild:c,ref:b,color:a,customColor:i,variant:m,...l}=t,n=X(pe),v=te(pe),d=R(h=>h.value),u=v.value,y=R(h=>h.steps.get(u)),S=R(h=>h.steps),A=Array.from(S.keys()).indexOf(u)+1,g=Z(d,u,y,S),x=a??n.color,O=i??n.customColor,T=m??n.variant??"normal",V=Fe(x,O,g),w=ce(O,g,!0),D=c?L.Slot:"div",I=T==="dot";return k.jsx(D,{"data-state":g,"data-variant":T,"data-slot":"stepper-indicator",dir:n.dir,...l,ref:b,style:{...l.style,...w},className:U.cn("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",I?"ds:size-7 ds:data-[variant=dot]:size-2":"ds:size-7",V,e),children:!I&&(typeof s=="function"?s(g):s||(g==="completed"?k.jsx(Ee.Check,{className:"ds:size-4"}):A))})}function ke(t){const{className:e,asChild:s,forceMount:c=!1,ref:b,color:a,customColor:i,...m}=t,l=X(fe),n=te(fe),v=R(I=>I.value),d=l.orientation,u=l.labelPosition??"right",y=R(I=>I.steps);if(Array.from(y.keys()).indexOf(n.value)===y.size-1&&!c)return null;const g=Z(v,n.value,n.stepState,y,"separator"),x=a??l.color,O=i??l.customColor,T=Se(x,O,g),V=ce(O,g,!1),w=s?L.Slot:"div",D=()=>d==="horizontal"?"h-px flex-1":u==="top"||u==="bottom"?"w-px absolute left-1/2 -translate-x-1/2 top-full h-full -z-10":u==="left"?"w-px absolute right-0 top-full h-full -z-10 translate-x-1/2":"w-px absolute left-0 top-full h-full -z-10 -translate-x-1/2";return k.jsx(w,{role:"separator","aria-hidden":"true","aria-orientation":d,"data-orientation":d,"data-state":g,"data-slot":"stepper-separator",dir:l.dir,...m,ref:b,style:{...m.style,...V},className:U.cn("ds:transition-colors",D(),T,e)})}function He(t){const{className:e,asChild:s,ref:c,...b}=t,a=X(me),i=te(me),m=H(a.id,"title",i.value),l=s?L.Slot:"span";return k.jsx(l,{id:m,"data-slot":"title",dir:a.dir,...b,ref:c,className:U.cn("ds:font-medium ds:text-sm",e)})}function Xe(t){const{className:e,asChild:s,ref:c,...b}=t,a=X(be),i=te(be),m=H(a.id,"description",i.value),l=s?L.Slot:"span";return k.jsx(l,{id:m,"data-slot":"description",dir:a.dir,...b,ref:c,className:U.cn("ds:text-muted-foreground ds:text-xs",e)})}function Je(t){const{value:e,asChild:s,forceMount:c=!1,ref:b,className:a,...i}=t,m=X(Oe),l=R(u=>u.value),n=H(m.id,"content",e),v=H(m.id,"trigger",e);if(e!==l&&!c)return null;const d=s?L.Slot:"div";return k.jsx(d,{id:n,role:"tabpanel","aria-labelledby":v,"data-slot":"stepper-content",dir:m.dir,...i,ref:b,className:U.cn("ds:flex-1 ds:outline-none",a)})}function Qe(t){const{asChild:e,disabled:s,...c}=t,b=ee(Te),a=R(u=>u.value),i=R(u=>u.steps),m=Array.from(i.keys()),l=a?m.indexOf(a):-1,n=s||l<=0,v=o.useCallback(async u=>{if(c.onClick?.(u),u.defaultPrevented||n)return;const y=Math.max(l-1,0),S=m[y];S&&b.setState("value",S)},[c.onClick,n,l,m,b]),d=e?L.Slot:"button";return k.jsx(d,{type:"button","data-slot":"stepper-prev",disabled:n,...c,onClick:v})}function Ze(t){const{asChild:e,disabled:s,...c}=t,b=ee(Me),a=R(u=>u.value),i=R(u=>u.steps),m=Array.from(i.keys()),l=a?m.indexOf(a):-1,n=s||l>=m.length-1,v=o.useCallback(async u=>{if(c.onClick?.(u),u.defaultPrevented||n)return;const y=Math.min(l+1,m.length-1),S=m[y];S&&await b.setStateWithValidation(S,"next")},[c.onClick,n,l,m,b]),d=e?L.Slot:"button";return k.jsx(d,{type:"button","data-slot":"stepper-next",disabled:n,...c,onClick:v})}exports.StepperContent=Je;exports.StepperDescription=Xe;exports.StepperIndicator=ue;exports.StepperItem=Ye;exports.StepperList=Ge;exports.StepperNext=Ze;exports.StepperPrev=Qe;exports.StepperRoot=We;exports.StepperSeparator=ke;exports.StepperTitle=He;exports.StepperTrigger=Pe;exports.useStepper=R;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const k=require("react/jsx-runtime"),L=require("@radix-ui/react-slot");require("../../packages/ui/src/components/button.cjs");require("../../packages/ui/src/components/button-group.cjs");require("../../packages/ui/src/components/input.cjs");require("../../packages/ui/src/components/textarea.cjs");require("@radix-ui/react-label");const U=require("../../packages/ui/src/lib/utils.cjs");require("../../packages/ui/src/components/select.cjs");require("../../packages/ui/src/components/combobox.cjs");require("@radix-ui/react-tooltip");const Ae=require("react"),Ee=require("lucide-react");require("react-day-picker");require("../../packages/ui/src/components/popover.cjs");require("@radix-ui/react-separator");require("../../packages/ui/src/components/switch.cjs");require("vaul");require("@radix-ui/react-scroll-area");require("../../packages/ui/src/components/tree-view.cjs");require("@radix-ui/react-alert-dialog");require("@radix-ui/react-avatar");require("../../packages/ui/src/components/badge.cjs");require("../../packages/ui/src/components/checkbox.cjs");require("@radix-ui/react-collapsible");require("cmdk");require("@radix-ui/react-dialog");require("@radix-ui/react-dropdown-menu");require("../../packages/ui/src/components/input-otp.cjs");require("../../packages/ui/src/components/radio-group.cjs");require("../../packages/ui/src/components/sidebar.cjs");require("@radix-ui/react-slider");require("../../packages/ui/src/components/tabs.cjs");require("../../packages/ui/src/components/toggle.cjs");const ge=require("../../packages/ui/src/lib/compose-refs.cjs");function Re(t){const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(t){for(const s in t)if(s!=="default"){const c=Object.getOwnPropertyDescriptor(t,s);Object.defineProperty(e,s,c.get?c:{enumerable:!0,get:()=>t[s]})}}return e.default=t,Object.freeze(e)}const o=Re(Ae),xe="Stepper",Ne="StepperList",ie="StepperItem",ne="StepperTrigger",pe="StepperIndicator",fe="StepperSeparator",me="StepperTitle",be="StepperDescription",Oe="StepperContent",Te="StepperPrev",Me="StepperNext",De="stepperFocusGroup.onEntryFocus",Ve={bubbles:!1,cancelable:!0},qe=["ArrowUp","ArrowDown","ArrowLeft","ArrowRight"],ae={primary:{indicator:{active:"ds:border-primary ds:bg-primary ds:text-primary-foreground ds:data-[variant=dot]:bg-primary/30 ds:data-[variant=dot]:border-primary/0",completed:"ds:border-primary ds:bg-primary ds:text-primary-foreground ds:data-[variant=dot]:bg-primary/30 ds:data-[variant=dot]:border-primary/0",inactive:"ds:border-muted ds:bg-background ds:text-muted-foreground ds:data-[variant=dot]:bg-muted/30 ds:data-[variant=dot]:border-muted/0"},separator:{active:"ds:bg-primary",completed:"ds:bg-primary",inactive:"ds:bg-border"}},secondary:{indicator:{active:"ds:border-secondary ds:bg-secondary ds:text-secondary-foreground ds:data-[variant=dot]:bg-secondary/30 ds:data-[variant=dot]:border-secondary/0",completed:"ds:border-secondary ds:bg-secondary ds:text-secondary-foreground ds:data-[variant=dot]:bg-secondary/30 ds:data-[variant=dot]:border-secondary/0",inactive:"ds:border-muted ds:bg-background ds:text-muted-foreground ds:data-[variant=dot]:bg-muted/30 ds:data-[variant=dot]:border-muted/0"},separator:{active:"ds:bg-secondary",completed:"ds:bg-secondary",inactive:"ds:bg-border"}},accent:{indicator:{active:"ds:border-accent ds:bg-accent ds:text-accent-foreground ds:data-[variant=dot]:bg-accent/30 ds:data-[variant=dot]:border-accent/0",completed:"ds:border-accent ds:bg-accent ds:text-accent-foreground ds:data-[variant=dot]:bg-accent/30 ds:data-[variant=dot]:border-accent/0",inactive:"ds:border-muted ds:bg-background ds:text-muted-foreground ds:data-[variant=dot]:bg-muted/30 ds:data-[variant=dot]:border-muted/0"},separator:{active:"ds:bg-accent",completed:"ds:bg-accent",inactive:"ds:bg-border"}},destructive:{indicator:{active:"ds:border-destructive ds:bg-destructive ds:text-destructive-foreground ds:data-[variant=dot]:bg-destructive/30 ds:data-[variant=dot]:border-destructive/0",completed:"ds:border-destructive ds:bg-destructive ds:text-destructive-foreground ds:data-[variant=dot]:bg-destructive/30 ds:data-[variant=dot]:border-destructive/0",inactive:"ds:border-muted ds:bg-background ds:text-muted-foreground ds:data-[variant=dot]:bg-muted/30 ds:data-[variant=dot]:border-muted/0"},separator:{active:"ds:bg-destructive",completed:"ds:bg-destructive",inactive:"ds:bg-border"}},muted:{indicator:{active:"ds:border-muted ds:bg-muted ds:text-muted-foreground ds:data-[variant=dot]:bg-muted/30 ds:data-[variant=dot]:border-muted/0",completed:"ds:border-muted ds:bg-muted ds:text-muted-foreground ds:data-[variant=dot]:bg-muted/30 ds:data-[variant=dot]:border-muted/0",inactive:"ds:border-muted ds:bg-background ds:text-muted-foreground ds:data-[variant=dot]:bg-muted/30 ds:data-[variant=dot]:border-muted/0"},separator:{active:"ds:bg-muted",completed:"ds:bg-muted",inactive:"ds:bg-border"}},success:{indicator:{active:"ds:border-success ds:bg-success ds:text-success-foreground ds:data-[variant=dot]:bg-success/30 ds:data-[variant=dot]:border-success/0",completed:"ds:border-success ds:bg-success ds:text-success-foreground ds:data-[variant=dot]:bg-success/30 ds:data-[variant=dot]:border-success/0",inactive:"ds:border-muted ds:bg-background ds:text-muted-foreground ds:data-[variant=dot]:bg-muted/30 ds:data-[variant=dot]:border-muted/0"},separator:{active:"ds:bg-success",completed:"ds:bg-success",inactive:"ds:bg-border"}},error:{indicator:{active:"ds:border-error ds:bg-error ds:text-error-foreground ds:data-[variant=dot]:bg-error/30 ds:data-[variant=dot]:border-error/0",completed:"ds:border-error ds:bg-error ds:text-error-foreground ds:data-[variant=dot]:bg-error/30 ds:data-[variant=dot]:border-error/0",inactive:"ds:border-muted ds:bg-background ds:text-muted-foreground ds:data-[variant=dot]:bg-muted/30 ds:data-[variant=dot]:border-muted/0"},separator:{active:"ds:bg-error",completed:"ds:bg-error",inactive:"ds:bg-border"}},warning:{indicator:{active:"ds:border-warning ds:bg-warning ds:text-warning-foreground ds:data-[variant=dot]:bg-warning/30 ds:data-[variant=dot]:border-warning/0",completed:"ds:border-warning ds:bg-warning ds:text-warning-foreground ds:data-[variant=dot]:bg-warning/30 ds:data-[variant=dot]:border-warning/0",inactive:"ds:border-muted ds:bg-background ds:text-muted-foreground ds:data-[variant=dot]:bg-muted/30 ds:data-[variant=dot]:border-muted/0"},separator:{active:"ds:bg-warning",completed:"ds:bg-warning",inactive:"ds:bg-border"}}};function Fe(t,e,s){return e?"":t?ae[t].indicator[s]:ae.primary.indicator[s]}function Se(t,e,s){return e?"":t?ae[t].separator[s]:ae.primary.separator[s]}function ce(t,e,s){if(t)return s?e==="active"||e==="completed"?{borderColor:t,backgroundColor:t,color:"white"}:{borderColor:"hsl(var(--muted))",backgroundColor:"hsl(var(--background))",color:"hsl(var(--muted-foreground))"}:e==="active"||e==="completed"?{backgroundColor:t}:{backgroundColor:"hsl(var(--border))"}}function H(t,e,s){return`${t}-${e}-${s}`}const _e={ArrowLeft:"prev",ArrowUp:"prev",ArrowRight:"next",ArrowDown:"next",PageUp:"first",Home:"first",PageDown:"last",End:"last"};function je(t,e){return e!=="rtl"?t:t==="ArrowLeft"?"ArrowRight":t==="ArrowRight"?"ArrowLeft":t}function Le(t,e,s){const c=je(t.key,e);if(!(s==="horizontal"&&["ArrowUp","ArrowDown"].includes(c))&&!(s==="vertical"&&["ArrowLeft","ArrowRight"].includes(c)))return _e[c]}function ye(t,e=!1){const s=document.activeElement;for(const c of t){const b=c.current;if(b&&(b===s||(b.focus({preventScroll:e}),document.activeElement!==s)))return}}function ze(t,e){return t.map((s,c)=>t[(e+c)%t.length])}const Q=typeof window>"u"?o.useEffect:o.useLayoutEffect;function Ke(t){const e=o.useRef(t);return Q(()=>{e.current=t}),e}function ve(t){const e=o.useRef(null);return e.current===null&&(e.current=t()),e}function Z(t,e,s,c,b="item"){const a=Array.from(c.keys()),d=a.indexOf(e);return s?.completed?"completed":t===e?b==="separator"?"inactive":"active":t&&a.indexOf(t)>d?"completed":"inactive"}const $e=o.createContext(void 0);function Ue(t){const e=o.useContext($e);return t??e??"ltr"}const Ce=o.createContext(null);function ee(t){const e=o.useContext(Ce);if(!e)throw new Error(`\`${t}\` must be used within \`${xe}\``);return e}function R(t){const e=ee("useStore"),s=o.useCallback(()=>t(e.getState()),[e,t]);return o.useSyncExternalStore(e.subscribe,s,s)}const Ie=o.createContext(null);function X(t){const e=o.useContext(Ie);if(!e)throw new Error(`\`${t}\` must be used within \`${xe}\``);return e}function We(t){const{value:e,defaultValue:s,onValueChange:c,onValueComplete:b,onValueAdd:a,onValueRemove:d,onValidate:m,id:l,dir:n,orientation:v="horizontal",activationMode:i="automatic",asChild:u,disabled:y=!1,nonInteractive:S=!1,loop:A=!1,color:g,customColor:x,variant:O="normal",labelPosition:T="right",className:V,...w}=t,D=ve(()=>new Set),I=ve(()=>({steps:new Map,value:e??s??""})),h=Ke({onValueChange:c,onValueComplete:b,onValueAdd:a,onValueRemove:d,onValidate:m}),p=o.useMemo(()=>({subscribe:r=>(D.current.add(r),()=>D.current.delete(r)),getState:()=>I.current,setState:(r,C)=>{Object.is(I.current[r],C)||(r==="value"&&typeof C=="string"?(I.current.value=C,h.current.onValueChange?.(C)):I.current[r]=C,p.notify())},setStateWithValidation:async(r,C)=>{if(!h.current.onValidate)return p.setState("value",r),!0;try{const N=await h.current.onValidate(r,C);return N&&p.setState("value",r),N}catch{return!1}},hasValidation:()=>!!h.current.onValidate,addStep:(r,C,N)=>{const E={value:r,completed:C,disabled:N};I.current.steps.set(r,E),h.current.onValueAdd?.(r),p.notify()},removeStep:r=>{I.current.steps.delete(r),h.current.onValueRemove?.(r),p.notify()},setStep:(r,C,N)=>{const E=I.current.steps.get(r);if(E){const P={...E,completed:C,disabled:N};I.current.steps.set(r,P),C!==E.completed&&h.current.onValueComplete?.(r,C),p.notify()}},notify:()=>{for(const r of D.current)r()}}),[D,I,h]);Q(()=>{e!==void 0&&p.setState("value",e)},[e,p]);const q=Ue(n),z=o.useId(),K=l??z,F=o.useMemo(()=>({id:K,dir:q,orientation:v,activationMode:i,disabled:y,nonInteractive:S,loop:A,color:g,customColor:x,variant:O,labelPosition:T}),[K,q,v,i,y,S,A,g,x,O,T]),G=u?L.Slot:"div";return k.jsx(Ce.Provider,{value:p,children:k.jsx(Ie.Provider,{value:F,children:k.jsx(G,{id:K,"data-disabled":y?"":void 0,"data-orientation":v,"data-slot":"stepper",dir:q,...w,className:U.cn("ds:flex ds:gap-6",v==="horizontal"?"ds:w-full ds:flex-col":"ds:flex-row",V)})})})}const he=o.createContext(null);function Be(t){const e=o.useContext(he);if(!e)throw new Error(`\`${t}\` must be used within \`FocusProvider\``);return e}function Ge(t){const{className:e,children:s,asChild:c,ref:b,...a}=t,d=X(Ne),m=d.orientation,l=R(r=>r.value),[n,v]=o.useState(null),[i,u]=o.useState(!1),[y,S]=o.useState(0),A=o.useRef(!1),g=o.useRef(new Map),x=o.useRef(null),O=ge.useComposedRefs(b,x),T=o.useCallback(r=>{v(r)},[]),V=o.useCallback(()=>{u(!0)},[]),w=o.useCallback(()=>{S(r=>r+1)},[]),D=o.useCallback(()=>{S(r=>r-1)},[]),I=o.useCallback(r=>{g.current.set(r.id,r)},[]),h=o.useCallback(r=>{g.current.delete(r)},[]),p=o.useCallback(()=>Array.from(g.current.values()).filter(r=>r.ref.current).sort((r,C)=>{const N=r.ref.current,E=C.ref.current;if(!N||!E)return 0;const P=N.compareDocumentPosition(E);return P&Node.DOCUMENT_POSITION_FOLLOWING?-1:P&Node.DOCUMENT_POSITION_PRECEDING?1:0}),[]),q=o.useCallback(r=>{a.onBlur?.(r),!r.defaultPrevented&&u(!1)},[a.onBlur]),z=o.useCallback(r=>{if(a.onFocus?.(r),r.defaultPrevented)return;const C=!A.current;if(r.target===r.currentTarget&&C&&!i){const N=new CustomEvent(De,Ve);if(r.currentTarget.dispatchEvent(N),!N.defaultPrevented){const E=Array.from(g.current.values()).filter(j=>!j.disabled),P=l?E.find(j=>j.value===l):void 0,W=E.find(j=>j.active),re=E.find(j=>j.id===n),oe=[P,W,re,...E].filter(Boolean).map(j=>j.ref);ye(oe,!1)}}A.current=!1},[a.onFocus,i,l,n]),K=o.useCallback(r=>{a.onMouseDown?.(r),!r.defaultPrevented&&(A.current=!0)},[a.onMouseDown]),F=o.useMemo(()=>({tabStopId:n,onItemFocus:T,onItemShiftTab:V,onFocusableItemAdd:w,onFocusableItemRemove:D,onItemRegister:I,onItemUnregister:h,getItems:p}),[n,T,V,w,D,I,h,p]),G=c?L.Slot:"div";return k.jsx(he.Provider,{value:F,children:k.jsx(G,{role:"tablist","aria-orientation":m,"data-orientation":m,"data-slot":"stepper-list",dir:d.dir,tabIndex:i||y===0?-1:0,...a,ref:O,className:U.cn("ds:flex ds:outline-none",m==="horizontal"?"ds:flex-row ds:items-center":"ds:flex-col ds:items-start",e),onBlur:q,onFocus:z,onMouseDown:K,children:s})})}const we=o.createContext(null);function te(t){const e=o.useContext(we);if(!e)throw new Error(`\`${t}\` must be used within \`${ie}\``);return e}function Ye(t){const{value:e,completed:s=!1,disabled:c=!1,asChild:b,className:a,children:d,ref:m,...l}=t,n=X(ie),v=ee(ie),i=n.orientation,u=n.labelPosition??"right",y=R(p=>p.value);Q(()=>(v.addStep(e,s,c),()=>{v.removeStep(e)}),[e,s,c]),Q(()=>{v.setStep(e,s,c)},[e,s,c]);const S=R(p=>p.steps.get(e)),A=R(p=>p.steps),g=Z(y,e,S,A),x=Array.from(A.keys()),O=x.indexOf(e),T=O===0,V=O===x.length-1,w=o.useMemo(()=>({value:e,stepState:S}),[e,S]),D=()=>{const p="ds:relative ds:flex";return i==="horizontal"?u==="top"||u==="bottom"?`${p} ds:flex-col ds:items-center ds:flex-1 ds:gap-2`:`${p} ds:flex-row ds:items-center ds:not-last:flex-1`:`${p} ds:flex-col`},I=o.useMemo(()=>{if(i==="horizontal"&&(u==="top"||u==="bottom")){const p=o.Children.toArray(d);let q=null,z=null,K=null;const F=[];p.forEach(P=>{if(o.isValidElement(P)){const W=P.props["data-slot"];W==="stepper-trigger"||P.type===Pe?(q=P,o.Children.toArray(P.props.children).forEach($=>{o.isValidElement($)&&($.props["data-slot"]==="stepper-indicator"||$.type===ue)&&(z=$)})):W==="stepper-separator"||P.type===ke?K=P:F.push(P)}else F.push(P)});const G=O-1,r=G>=0?x[G]:null,C=r?Z(y,r,A.get(r),A,"separator"):"inactive";let N=null;if(!T){const P=n.color,W=n.customColor;N=k.jsx("div",{className:U.cn("ds:h-px ds:flex-1 ds:transition-colors",Se(P,W,C)),style:ce(W,C,!1),"aria-hidden":"true"},"left-separator")}const E=k.jsxs("div",{className:"ds:flex ds:w-full ds:items-center ds:justify-center",children:[N,T&&k.jsx("div",{className:"ds:h-px ds:flex-1 ds:bg-transparent","aria-hidden":"true"}),z,!V&&K,V&&k.jsx("div",{className:"ds:h-px ds:flex-1 ds:bg-transparent","aria-hidden":"true"})]},"indicator-row");return u==="top"?[q,E,...F]:[E,q,...F]}return d},[d,i,u,T,V,O,x,A,y,n.color,n.customColor]),h=b?L.Slot:"div";return k.jsx(we.Provider,{value:w,children:k.jsx(h,{"data-disabled":S?.disabled?"":void 0,"data-orientation":i,"data-state":g,"data-slot":"stepper-item","data-label-position":u,dir:n.dir,...l,ref:m,className:U.cn(D(),a),children:I})})}function Pe(t){const{asChild:e,disabled:s,className:c,ref:b,...a}=t,d=X(ne),m=te(ne),l=ee(ne),n=Be(ne),v=R(f=>f.value),i=m.value,u=R(f=>f.steps.get(i)),y=d.activationMode,S=d.orientation,A=d.loop,g=d.labelPosition??"right",x=R(f=>f.steps),T=Array.from(x.keys()).indexOf(i)+1,V=x.size,w=H(d.id,"trigger",i),D=H(d.id,"content",i),I=H(d.id,"title",i),h=H(d.id,"description",i),p=d.disabled||u?.disabled||s,q=v===i,z=n.tabStopId===w,K=Z(v,i,u,x),F=o.useRef(null),G=ge.useComposedRefs(b,F),r=o.useRef(!1),C=o.useRef(!1);o.useEffect(()=>{function f(Y){qe.includes(Y.key)&&(r.current=!0)}function M(){r.current=!1}return document.addEventListener("keydown",f),document.addEventListener("keyup",M),()=>{document.removeEventListener("keydown",f),document.removeEventListener("keyup",M)}},[]),Q(()=>(n.onItemRegister({id:w,ref:F,value:i,active:z,disabled:!!p}),p||n.onFocusableItemAdd(),()=>{n.onItemUnregister(w),p||n.onFocusableItemRemove()}),[n,w,i,z,p]);const N=o.useCallback(async f=>{if(a.onClick?.(f),!f.defaultPrevented&&!p&&!d.nonInteractive){const M=Array.from(x.keys()).indexOf(v??""),_=Array.from(x.keys()).indexOf(i)>M?"next":"prev";await l.setStateWithValidation(i,_)}},[p,d.nonInteractive,l,i,v,x,a.onClick]),E=o.useCallback(async f=>{if(a.onFocus?.(f),f.defaultPrevented)return;n.onItemFocus(w);const M=!C.current;if(!q&&!p&&y!=="manual"&&!d.nonInteractive&&M){const Y=Array.from(x.keys()).indexOf(v||""),B=Array.from(x.keys()).indexOf(i)>Y?"next":"prev";await l.setStateWithValidation(i,B)}C.current=!1},[n,w,y,q,p,d.nonInteractive,l,i,v,x,a.onFocus]),P=o.useCallback(async f=>{if(a.onKeyDown?.(f),f.defaultPrevented)return;if(f.key==="Enter"&&d.nonInteractive){f.preventDefault();return}if((f.key==="Enter"||f.key===" ")&&y==="manual"&&!d.nonInteractive){f.preventDefault(),!p&&F.current&&F.current.click();return}if(f.key==="Tab"&&f.shiftKey){n.onItemShiftTab();return}if(f.target!==f.currentTarget)return;const M=Le(f,d.dir,S);if(M!==void 0){if(f.metaKey||f.ctrlKey||f.altKey||f.shiftKey)return;f.preventDefault();const Y=n.getItems().filter(B=>!B.disabled);let _=Y.map(B=>B.ref);if(M==="last")_.reverse();else if(M==="prev"||M==="next"){M==="prev"&&_.reverse();const B=_.findIndex(se=>se.current===f.currentTarget);_=A?ze(_,B+1):_.slice(B+1)}if(l.hasValidation()&&_.length>0){const se=_[0]?.current,J=Y.find(de=>de.ref.current===se);if(J&&J.value!==i){const de=Array.from(x.keys()).indexOf(v||""),le=Array.from(x.keys()).indexOf(J.value)>de?"next":"prev";if(le==="next"){if(!await l.setStateWithValidation(J.value,le))return}else l.setState("value",J.value);queueMicrotask(()=>se?.focus());return}}queueMicrotask(()=>ye(_))}},[n,d.nonInteractive,d.dir,y,S,A,p,a.onKeyDown,l,i,v,x]),W=o.useCallback(f=>{a.onMouseDown?.(f),!f.defaultPrevented&&(C.current=!0,p?f.preventDefault():n.onItemFocus(w))},[n,w,p,a.onMouseDown]),re=()=>S==="horizontal"&&(g==="top"||g==="bottom")?g==="top"?"ds:flex-col-reverse":"ds:flex-col":g==="top"?"ds:flex-col-reverse":g==="bottom"?"ds:flex-col":g==="left"?"ds:flex-row-reverse":"ds:flex-row",$=S==="horizontal"&&(g==="top"||g==="bottom"),oe=o.useMemo(()=>$?o.Children.toArray(a.children).filter(M=>o.isValidElement(M)?!(M.props["data-slot"]==="stepper-indicator"||M.type===ue):!0):a.children,[$,a.children]),j=e?L.Slot:"button";return k.jsx(j,{id:w,role:"tab",type:"button","aria-controls":D,"aria-current":q?"step":void 0,"aria-describedby":`${I} ${h}`,"aria-posinset":T,"aria-selected":q,"aria-setsize":V,"data-disabled":p?"":void 0,"data-state":K,"data-slot":"stepper-trigger","data-wrap-indicator":$?"":void 0,disabled:p,tabIndex:z?0:-1,...a,ref:G,className:U.cn("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","ds:not-has-data-[slot=description]:rounded-full ds:not-has-data-[slot=title]:rounded-full",$?"":re(),c),onClick:N,onFocus:E,onKeyDown:P,onMouseDown:W,children:oe})}function ue(t){const{className:e,children:s,asChild:c,ref:b,color:a,customColor:d,variant:m,...l}=t,n=X(pe),v=te(pe),i=R(h=>h.value),u=v.value,y=R(h=>h.steps.get(u)),S=R(h=>h.steps),A=Array.from(S.keys()).indexOf(u)+1,g=Z(i,u,y,S),x=a??n.color,O=d??n.customColor,T=m??n.variant??"normal",V=Fe(x,O,g),w=ce(O,g,!0),D=c?L.Slot:"div",I=T==="dot";return k.jsx(D,{"data-state":g,"data-variant":T,"data-slot":"stepper-indicator",dir:n.dir,...l,ref:b,style:{...l.style,...w},className:U.cn("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",I?"ds:size-7 ds:data-[variant=dot]:size-2":"ds:size-7",V,e),children:!I&&(typeof s=="function"?s(g):s||(g==="completed"?k.jsx(Ee.Check,{className:"ds:size-4"}):A))})}function ke(t){const{className:e,asChild:s,forceMount:c=!1,ref:b,color:a,customColor:d,...m}=t,l=X(fe),n=te(fe),v=R(I=>I.value),i=l.orientation,u=l.labelPosition??"right",y=R(I=>I.steps);if(Array.from(y.keys()).indexOf(n.value)===y.size-1&&!c)return null;const g=Z(v,n.value,n.stepState,y,"separator"),x=a??l.color,O=d??l.customColor,T=Se(x,O,g),V=ce(O,g,!1),w=s?L.Slot:"div",D=()=>i==="horizontal"?"ds:h-px ds:flex-1":u==="top"||u==="bottom"?"ds:w-px ds:absolute ds:left-1/2 ds:-translate-x-1/2 ds:top-full ds:h-full ds:-z-10":u==="left"?"ds:w-px ds:absolute ds:right-0 ds:top-full ds:h-full ds:-z-10 ds:translate-x-1/2":"ds:w-px ds:absolute ds:left-0 ds:top-full ds:h-full ds:-z-10 ds:-translate-x-1/2";return k.jsx(w,{role:"separator","aria-hidden":"true","aria-orientation":i,"data-orientation":i,"data-state":g,"data-slot":"stepper-separator",dir:l.dir,...m,ref:b,style:{...m.style,...V},className:U.cn("ds:transition-colors",D(),T,e)})}function He(t){const{className:e,asChild:s,ref:c,...b}=t,a=X(me),d=te(me),m=H(a.id,"title",d.value),l=s?L.Slot:"span";return k.jsx(l,{id:m,"data-slot":"title",dir:a.dir,...b,ref:c,className:U.cn("ds:font-medium ds:text-sm",e)})}function Xe(t){const{className:e,asChild:s,ref:c,...b}=t,a=X(be),d=te(be),m=H(a.id,"description",d.value),l=s?L.Slot:"span";return k.jsx(l,{id:m,"data-slot":"description",dir:a.dir,...b,ref:c,className:U.cn("ds:text-muted-foreground ds:text-xs",e)})}function Je(t){const{value:e,asChild:s,forceMount:c=!1,ref:b,className:a,...d}=t,m=X(Oe),l=R(u=>u.value),n=H(m.id,"content",e),v=H(m.id,"trigger",e);if(e!==l&&!c)return null;const i=s?L.Slot:"div";return k.jsx(i,{id:n,role:"tabpanel","aria-labelledby":v,"data-slot":"stepper-content",dir:m.dir,...d,ref:b,className:U.cn("ds:flex-1 ds:outline-none",a)})}function Qe(t){const{asChild:e,disabled:s,...c}=t,b=ee(Te),a=R(u=>u.value),d=R(u=>u.steps),m=Array.from(d.keys()),l=a?m.indexOf(a):-1,n=s||l<=0,v=o.useCallback(async u=>{if(c.onClick?.(u),u.defaultPrevented||n)return;const y=Math.max(l-1,0),S=m[y];S&&b.setState("value",S)},[c.onClick,n,l,m,b]),i=e?L.Slot:"button";return k.jsx(i,{type:"button","data-slot":"stepper-prev",disabled:n,...c,onClick:v})}function Ze(t){const{asChild:e,disabled:s,...c}=t,b=ee(Me),a=R(u=>u.value),d=R(u=>u.steps),m=Array.from(d.keys()),l=a?m.indexOf(a):-1,n=s||l>=m.length-1,v=o.useCallback(async u=>{if(c.onClick?.(u),u.defaultPrevented||n)return;const y=Math.min(l+1,m.length-1),S=m[y];S&&await b.setStateWithValidation(S,"next")},[c.onClick,n,l,m,b]),i=e?L.Slot:"button";return k.jsx(i,{type:"button","data-slot":"stepper-next",disabled:n,...c,onClick:v})}exports.StepperContent=Je;exports.StepperDescription=Xe;exports.StepperIndicator=ue;exports.StepperItem=Ye;exports.StepperList=Ge;exports.StepperNext=Ze;exports.StepperPrev=Qe;exports.StepperRoot=We;exports.StepperSeparator=ke;exports.StepperTitle=He;exports.StepperTrigger=Pe;exports.useStepper=R;
2
2
  //# sourceMappingURL=Stepper.cjs.map