@brycks/core-front 0.3.5 → 0.5.0

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 (168) hide show
  1. package/dist/components/data/List/List.cjs +1 -1
  2. package/dist/components/data/List/List.cjs.map +1 -1
  3. package/dist/components/data/List/List.js +1 -1
  4. package/dist/components/data/List/List.js.map +1 -1
  5. package/dist/components/data/Table/Table.cjs +1 -1
  6. package/dist/components/data/Table/Table.cjs.map +1 -1
  7. package/dist/components/data/Table/Table.js +196 -166
  8. package/dist/components/data/Table/Table.js.map +1 -1
  9. package/dist/components/data/TreeView/TreeView.cjs +1 -1
  10. package/dist/components/data/TreeView/TreeView.cjs.map +1 -1
  11. package/dist/components/data/TreeView/TreeView.js +1 -1
  12. package/dist/components/data/TreeView/TreeView.js.map +1 -1
  13. package/dist/components/data.cjs +1 -1
  14. package/dist/components/data.js +23 -21
  15. package/dist/components/feedback/Alert/Alert.cjs +1 -1
  16. package/dist/components/feedback/Alert/Alert.cjs.map +1 -1
  17. package/dist/components/feedback/Alert/Alert.js +20 -19
  18. package/dist/components/feedback/Alert/Alert.js.map +1 -1
  19. package/dist/components/feedback/Banner/Banner.cjs +2 -0
  20. package/dist/components/feedback/Banner/Banner.cjs.map +1 -0
  21. package/dist/components/feedback/Banner/Banner.js +77 -0
  22. package/dist/components/feedback/Banner/Banner.js.map +1 -0
  23. package/dist/components/feedback/ConfirmDialog/ConfirmDialog.cjs +2 -0
  24. package/dist/components/feedback/ConfirmDialog/ConfirmDialog.cjs.map +1 -0
  25. package/dist/components/feedback/ConfirmDialog/ConfirmDialog.js +68 -0
  26. package/dist/components/feedback/ConfirmDialog/ConfirmDialog.js.map +1 -0
  27. package/dist/components/feedback/Drawer/Drawer.cjs +2 -2
  28. package/dist/components/feedback/Drawer/Drawer.cjs.map +1 -1
  29. package/dist/components/feedback/Drawer/Drawer.js +58 -57
  30. package/dist/components/feedback/Drawer/Drawer.js.map +1 -1
  31. package/dist/components/feedback/Modal/Modal.cjs +1 -1
  32. package/dist/components/feedback/Modal/Modal.cjs.map +1 -1
  33. package/dist/components/feedback/Modal/Modal.js +101 -91
  34. package/dist/components/feedback/Modal/Modal.js.map +1 -1
  35. package/dist/components/feedback/Popover/Popover.cjs +2 -2
  36. package/dist/components/feedback/Popover/Popover.cjs.map +1 -1
  37. package/dist/components/feedback/Popover/Popover.js +93 -85
  38. package/dist/components/feedback/Popover/Popover.js.map +1 -1
  39. package/dist/components/feedback/Toast/Toast.cjs +2 -2
  40. package/dist/components/feedback/Toast/Toast.cjs.map +1 -1
  41. package/dist/components/feedback/Toast/Toast.js +102 -93
  42. package/dist/components/feedback/Toast/Toast.js.map +1 -1
  43. package/dist/components/feedback.cjs +1 -1
  44. package/dist/components/feedback.js +17 -13
  45. package/dist/components/feedback.js.map +1 -1
  46. package/dist/components/form/Combobox/Combobox.cjs +2 -2
  47. package/dist/components/form/Combobox/Combobox.cjs.map +1 -1
  48. package/dist/components/form/Combobox/Combobox.js +187 -167
  49. package/dist/components/form/Combobox/Combobox.js.map +1 -1
  50. package/dist/components/form/DateInput/DateInput.cjs +1 -1
  51. package/dist/components/form/DateInput/DateInput.cjs.map +1 -1
  52. package/dist/components/form/DateInput/DateInput.js +2 -2
  53. package/dist/components/form/DateInput/DateInput.js.map +1 -1
  54. package/dist/components/form/DateRangePicker/DateRangePicker.cjs +1 -1
  55. package/dist/components/form/DateRangePicker/DateRangePicker.cjs.map +1 -1
  56. package/dist/components/form/DateRangePicker/DateRangePicker.js +34 -34
  57. package/dist/components/form/DateRangePicker/DateRangePicker.js.map +1 -1
  58. package/dist/components/form/DropZone/DropZone.cjs +1 -1
  59. package/dist/components/form/DropZone/DropZone.cjs.map +1 -1
  60. package/dist/components/form/DropZone/DropZone.js +10 -10
  61. package/dist/components/form/DropZone/DropZone.js.map +1 -1
  62. package/dist/components/form/FileInput/FileInput.cjs +1 -1
  63. package/dist/components/form/FileInput/FileInput.cjs.map +1 -1
  64. package/dist/components/form/FileInput/FileInput.js +1 -1
  65. package/dist/components/form/FileInput/FileInput.js.map +1 -1
  66. package/dist/components/form/FormCard/FormCard.cjs +1 -1
  67. package/dist/components/form/FormCard/FormCard.cjs.map +1 -1
  68. package/dist/components/form/FormCard/FormCard.js +9 -9
  69. package/dist/components/form/FormCard/FormCard.js.map +1 -1
  70. package/dist/components/form/FormField/FormField.cjs +1 -1
  71. package/dist/components/form/FormField/FormField.cjs.map +1 -1
  72. package/dist/components/form/FormField/FormField.js +67 -55
  73. package/dist/components/form/FormField/FormField.js.map +1 -1
  74. package/dist/components/form/MultiSelect/MultiSelect.cjs +1 -1
  75. package/dist/components/form/MultiSelect/MultiSelect.cjs.map +1 -1
  76. package/dist/components/form/MultiSelect/MultiSelect.js +2 -3
  77. package/dist/components/form/MultiSelect/MultiSelect.js.map +1 -1
  78. package/dist/components/form/Radio/Radio.cjs +1 -1
  79. package/dist/components/form/Radio/Radio.cjs.map +1 -1
  80. package/dist/components/form/Radio/Radio.js +20 -20
  81. package/dist/components/form/Radio/Radio.js.map +1 -1
  82. package/dist/components/form/SearchInput/SearchInput.cjs +2 -0
  83. package/dist/components/form/SearchInput/SearchInput.cjs.map +1 -0
  84. package/dist/components/form/SearchInput/SearchInput.js +68 -0
  85. package/dist/components/form/SearchInput/SearchInput.js.map +1 -0
  86. package/dist/components/form/TagInput/TagInput.cjs +1 -1
  87. package/dist/components/form/TagInput/TagInput.cjs.map +1 -1
  88. package/dist/components/form/TagInput/TagInput.js +104 -102
  89. package/dist/components/form/TagInput/TagInput.js.map +1 -1
  90. package/dist/components/form/TimePicker/TimePicker.cjs +1 -1
  91. package/dist/components/form/TimePicker/TimePicker.cjs.map +1 -1
  92. package/dist/components/form/TimePicker/TimePicker.js +29 -30
  93. package/dist/components/form/TimePicker/TimePicker.js.map +1 -1
  94. package/dist/components/form.cjs +1 -1
  95. package/dist/components/form.js +15 -13
  96. package/dist/components/form.js.map +1 -1
  97. package/dist/components/layout/Card/Card.cjs +1 -1
  98. package/dist/components/layout/Card/Card.cjs.map +1 -1
  99. package/dist/components/layout/Card/Card.js +7 -5
  100. package/dist/components/layout/Card/Card.js.map +1 -1
  101. package/dist/components/layout/Collapse/Collapse.cjs.map +1 -1
  102. package/dist/components/layout/Collapse/Collapse.js.map +1 -1
  103. package/dist/components/media/Image/Image.cjs +1 -1
  104. package/dist/components/media/Image/Image.cjs.map +1 -1
  105. package/dist/components/media/Image/Image.js +9 -9
  106. package/dist/components/media/Image/Image.js.map +1 -1
  107. package/dist/components/media/ImageThumbnail/ImageThumbnail.cjs +1 -1
  108. package/dist/components/media/ImageThumbnail/ImageThumbnail.cjs.map +1 -1
  109. package/dist/components/media/ImageThumbnail/ImageThumbnail.js +6 -6
  110. package/dist/components/media/ImageThumbnail/ImageThumbnail.js.map +1 -1
  111. package/dist/components/navigation/Accordion/Accordion.cjs +1 -1
  112. package/dist/components/navigation/Accordion/Accordion.cjs.map +1 -1
  113. package/dist/components/navigation/Accordion/Accordion.js +0 -1
  114. package/dist/components/navigation/Accordion/Accordion.js.map +1 -1
  115. package/dist/components/navigation/Menu/Menu.cjs +1 -1
  116. package/dist/components/navigation/Menu/Menu.cjs.map +1 -1
  117. package/dist/components/navigation/Menu/Menu.js +87 -86
  118. package/dist/components/navigation/Menu/Menu.js.map +1 -1
  119. package/dist/components/navigation/Pagination/Pagination.cjs +1 -1
  120. package/dist/components/navigation/Pagination/Pagination.cjs.map +1 -1
  121. package/dist/components/navigation/Pagination/Pagination.js +107 -99
  122. package/dist/components/navigation/Pagination/Pagination.js.map +1 -1
  123. package/dist/components/navigation/SegmentedControl/SegmentedControl.cjs +2 -0
  124. package/dist/components/navigation/SegmentedControl/SegmentedControl.cjs.map +1 -0
  125. package/dist/components/navigation/SegmentedControl/SegmentedControl.js +90 -0
  126. package/dist/components/navigation/SegmentedControl/SegmentedControl.js.map +1 -0
  127. package/dist/components/navigation.cjs +1 -1
  128. package/dist/components/navigation.js +25 -23
  129. package/dist/components/navigation.js.map +1 -1
  130. package/dist/components/utility/Avatar/Avatar.cjs +1 -1
  131. package/dist/components/utility/Avatar/Avatar.cjs.map +1 -1
  132. package/dist/components/utility/Avatar/Avatar.js +18 -18
  133. package/dist/components/utility/Avatar/Avatar.js.map +1 -1
  134. package/dist/components/utility/Badge/Badge.cjs +1 -1
  135. package/dist/components/utility/Badge/Badge.cjs.map +1 -1
  136. package/dist/components/utility/Badge/Badge.js +31 -23
  137. package/dist/components/utility/Badge/Badge.js.map +1 -1
  138. package/dist/components/utility/Kbd/Kbd.cjs +2 -0
  139. package/dist/components/utility/Kbd/Kbd.cjs.map +1 -0
  140. package/dist/components/utility/Kbd/Kbd.js +20 -0
  141. package/dist/components/utility/Kbd/Kbd.js.map +1 -0
  142. package/dist/components/utility/Logo/Logo.cjs +1 -1
  143. package/dist/components/utility/Logo/Logo.cjs.map +1 -1
  144. package/dist/components/utility/Logo/Logo.js +21 -21
  145. package/dist/components/utility/Logo/Logo.js.map +1 -1
  146. package/dist/components/utility.cjs +1 -1
  147. package/dist/components/utility.js +9 -7
  148. package/dist/components/utility.js.map +1 -1
  149. package/dist/data.d.ts +34 -1
  150. package/dist/design-system/themes/ThemeProvider.cjs +1 -1
  151. package/dist/design-system/themes/ThemeProvider.cjs.map +1 -1
  152. package/dist/design-system/themes/ThemeProvider.js +46 -46
  153. package/dist/design-system/themes/ThemeProvider.js.map +1 -1
  154. package/dist/design-system/tokens/zIndex.cjs +1 -1
  155. package/dist/design-system/tokens/zIndex.cjs.map +1 -1
  156. package/dist/design-system/tokens/zIndex.js +2 -0
  157. package/dist/design-system/tokens/zIndex.js.map +1 -1
  158. package/dist/feedback.d.ts +75 -2
  159. package/dist/form.d.ts +41 -0
  160. package/dist/index.cjs +1 -1
  161. package/dist/index.d.ts +213 -3
  162. package/dist/index.js +177 -165
  163. package/dist/index.js.map +1 -1
  164. package/dist/navigation.d.ts +58 -0
  165. package/dist/styles.css +1 -1
  166. package/dist/tokens.d.ts +2 -0
  167. package/dist/utility.d.ts +19 -0
  168. package/package.json +2 -1
@@ -1 +1 @@
1
- {"version":3,"file":"Combobox.js","sources":["../../../../src/components/form/Combobox/Combobox.tsx"],"sourcesContent":["/**\n * Combobox Component\n *\n * A searchable select/autocomplete component with keyboard navigation.\n * Combines the functionality of Input with dropdown selection.\n *\n * @module components/form/Combobox\n */\n\nimport {\n forwardRef,\n useState,\n useCallback,\n useRef,\n useEffect,\n useMemo,\n type CSSProperties,\n type ReactNode,\n type KeyboardEvent,\n type ChangeEvent,\n} from 'react'\nimport { createPortal } from 'react-dom'\nimport { cx } from '../../../utils/styles'\nimport { spacing, fontSizes, durations, easings } from '../../../design-system'\nimport {\n componentHeights,\n componentPaddingX,\n componentGap,\n iconSizes,\n} from '../../../design-system/primitives'\n\nexport type ComboboxSize = 'sm' | 'md' | 'lg'\n\nexport interface ComboboxOption {\n /** Unique identifier for the option */\n value: string\n /** Display label */\n label: string\n /** Optional description */\n description?: string\n /** Optional icon */\n icon?: ReactNode\n /** Whether the option is disabled */\n disabled?: boolean\n}\n\nexport interface ComboboxProps {\n /** Available options */\n options: ComboboxOption[]\n /** Currently selected value (controlled) */\n value?: string | null\n /** Default selected value (uncontrolled) */\n defaultValue?: string | null\n /** Callback when selection changes */\n onChange?: (value: string | null) => void\n /** Callback when input value changes */\n onInputChange?: (value: string) => void\n /** Placeholder text */\n placeholder?: string\n /** Component size */\n size?: ComboboxSize\n /** Whether the combobox is disabled */\n disabled?: boolean\n /** Whether the combobox is invalid */\n isInvalid?: boolean\n /** Whether the combobox is required */\n required?: boolean\n /** Whether to allow clearing the selection */\n clearable?: boolean\n /** Label for accessibility */\n 'aria-label'?: string\n /** ID of element that labels this combobox */\n 'aria-labelledby'?: string\n /** Custom filter function */\n filterFn?: (option: ComboboxOption, inputValue: string) => boolean\n /** Text to show when no options match */\n emptyText?: string\n /** Whether to allow creating new options */\n creatable?: boolean\n /** Callback when creating new option */\n onCreate?: (inputValue: string) => void\n /** Custom class name */\n className?: string\n /** Test ID */\n testId?: string\n}\n\nconst sizeConfig: Record<ComboboxSize, { height: number; fontSize: number; padding: number; iconSize: number }> = {\n sm: { height: componentHeights.sm, fontSize: fontSizes.base - 1, padding: componentPaddingX.sm, iconSize: iconSizes.sm },\n md: { height: componentHeights.md, fontSize: fontSizes.base, padding: componentPaddingX.md, iconSize: iconSizes.md },\n lg: { height: componentHeights.lg, fontSize: fontSizes.md, padding: componentPaddingX.lg, iconSize: iconSizes.lg },\n}\n\nconst defaultFilterFn = (option: ComboboxOption, inputValue: string): boolean => {\n const search = inputValue.toLowerCase()\n return (\n option.label.toLowerCase().includes(search) ||\n option.value.toLowerCase().includes(search) ||\n (option.description?.toLowerCase().includes(search) ?? false)\n )\n}\n\nfunction ChevronDownIcon() {\n return (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M4 6l4 4 4-4\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n )\n}\n\nfunction ClearIcon() {\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M4 4l6 6M10 4l-6 6\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n )\n}\n\nexport const Combobox = forwardRef<HTMLInputElement, ComboboxProps>(function Combobox(\n {\n options,\n value: controlledValue,\n defaultValue = null,\n onChange,\n onInputChange,\n placeholder = 'Select or search...',\n size = 'md',\n disabled = false,\n isInvalid = false,\n required = false,\n clearable = true,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledby,\n filterFn = defaultFilterFn,\n emptyText = 'No options found',\n creatable = false,\n onCreate,\n className,\n testId,\n },\n ref\n) {\n const [internalValue, setInternalValue] = useState(defaultValue)\n const [inputValue, setInputValue] = useState('')\n const [isOpen, setIsOpen] = useState(false)\n const [activeIndex, setActiveIndex] = useState(-1)\n const [isFocused, setIsFocused] = useState(false)\n\n const containerRef = useRef<HTMLDivElement>(null)\n const inputRef = useRef<HTMLInputElement>(null)\n const listRef = useRef<HTMLUListElement>(null)\n\n const value = controlledValue !== undefined ? controlledValue : internalValue\n const config = sizeConfig[size]\n\n // Get selected option\n const selectedOption = useMemo(\n () => options.find((opt) => opt.value === value),\n [options, value]\n )\n\n // Filter options based on input\n const filteredOptions = useMemo(() => {\n if (!inputValue) return options\n return options.filter((opt) => filterFn(opt, inputValue))\n }, [options, inputValue, filterFn])\n\n // Sync input with selected value\n useEffect(() => {\n if (!isOpen && selectedOption) {\n setInputValue(selectedOption.label)\n } else if (!isOpen && !value) {\n setInputValue('')\n }\n }, [isOpen, selectedOption, value])\n\n const handleSelect = useCallback(\n (optionValue: string | null) => {\n if (controlledValue === undefined) {\n setInternalValue(optionValue)\n }\n onChange?.(optionValue)\n setIsOpen(false)\n setActiveIndex(-1)\n inputRef.current?.focus()\n },\n [controlledValue, onChange]\n )\n\n const handleInputChange = useCallback(\n (e: ChangeEvent<HTMLInputElement>) => {\n const newValue = e.target.value\n setInputValue(newValue)\n onInputChange?.(newValue)\n if (!isOpen) setIsOpen(true)\n setActiveIndex(0)\n },\n [isOpen, onInputChange]\n )\n\n const handleClear = useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation()\n handleSelect(null)\n setInputValue('')\n inputRef.current?.focus()\n },\n [handleSelect]\n )\n\n const handleKeyDown = useCallback(\n (e: KeyboardEvent<HTMLInputElement>) => {\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault()\n if (!isOpen) {\n setIsOpen(true)\n setActiveIndex(0)\n } else {\n setActiveIndex((prev) => Math.min(prev + 1, filteredOptions.length - 1))\n }\n break\n case 'ArrowUp':\n e.preventDefault()\n if (isOpen) {\n setActiveIndex((prev) => Math.max(prev - 1, 0))\n }\n break\n case 'Enter':\n e.preventDefault()\n if (isOpen && activeIndex >= 0 && filteredOptions[activeIndex]) {\n if (!filteredOptions[activeIndex].disabled) {\n handleSelect(filteredOptions[activeIndex].value)\n }\n } else if (creatable && inputValue && filteredOptions.length === 0) {\n onCreate?.(inputValue)\n }\n break\n case 'Escape':\n e.preventDefault()\n setIsOpen(false)\n setActiveIndex(-1)\n if (selectedOption) {\n setInputValue(selectedOption.label)\n }\n break\n case 'Tab':\n if (isOpen) {\n setIsOpen(false)\n setActiveIndex(-1)\n }\n break\n }\n },\n [isOpen, activeIndex, filteredOptions, handleSelect, creatable, inputValue, onCreate, selectedOption]\n )\n\n // Close on outside click\n useEffect(() => {\n if (!isOpen) return\n\n const handleClick = (e: MouseEvent) => {\n if (!containerRef.current?.contains(e.target as Node)) {\n setIsOpen(false)\n setActiveIndex(-1)\n if (selectedOption) {\n setInputValue(selectedOption.label)\n }\n }\n }\n\n document.addEventListener('mousedown', handleClick)\n return () => document.removeEventListener('mousedown', handleClick)\n }, [isOpen, selectedOption])\n\n // Scroll active option into view\n useEffect(() => {\n if (!isOpen || activeIndex < 0) return\n const list = listRef.current\n const activeItem = list?.children[activeIndex] as HTMLElement | undefined\n activeItem?.scrollIntoView({ block: 'nearest' })\n }, [isOpen, activeIndex])\n\n // Calculate dropdown position\n const [dropdownPosition, setDropdownPosition] = useState({ top: 0, left: 0, width: 0 })\n\n useEffect(() => {\n if (!isOpen || !containerRef.current) return\n\n const updatePosition = () => {\n const rect = containerRef.current!.getBoundingClientRect()\n setDropdownPosition({\n top: rect.bottom + window.scrollY + spacing[1],\n left: rect.left + window.scrollX,\n width: rect.width,\n })\n }\n\n updatePosition()\n window.addEventListener('resize', updatePosition)\n window.addEventListener('scroll', updatePosition, true)\n\n return () => {\n window.removeEventListener('resize', updatePosition)\n window.removeEventListener('scroll', updatePosition, true)\n }\n }, [isOpen])\n\n const containerStyle: CSSProperties = {\n position: 'relative',\n display: 'inline-flex',\n width: '100%',\n }\n\n const inputWrapperStyle: CSSProperties = {\n position: 'relative',\n display: 'flex',\n alignItems: 'center',\n width: '100%',\n height: config.height,\n backgroundColor: disabled ? 'var(--brycks-background-muted)' : 'var(--brycks-background-default)',\n border: `1px solid ${\n isInvalid\n ? 'var(--brycks-error-default)'\n : isFocused\n ? 'var(--brycks-primary-default)'\n : 'var(--brycks-border-default)'\n }`,\n borderRadius: 'var(--brycks-radius-md)',\n transition: `all ${durations.fast}ms ${easings.easeOut}`,\n cursor: disabled ? 'not-allowed' : 'text',\n boxShadow: isFocused ? 'var(--brycks-focus-ring)' : undefined,\n }\n\n const inputStyle: CSSProperties = {\n flex: 1,\n height: '100%',\n padding: `0 ${config.padding}px`,\n paddingRight: spacing[10],\n fontSize: config.fontSize,\n color: disabled ? 'var(--brycks-foreground-disabled)' : 'var(--brycks-foreground-default)',\n backgroundColor: 'transparent',\n border: 'none',\n outline: 'none',\n cursor: disabled ? 'not-allowed' : 'text',\n }\n\n const iconsStyle: CSSProperties = {\n position: 'absolute',\n right: config.padding,\n display: 'flex',\n alignItems: 'center',\n gap: spacing[1],\n pointerEvents: 'none',\n }\n\n const clearButtonStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: spacing[5],\n height: spacing[5],\n color: 'var(--brycks-foreground-muted)',\n cursor: 'pointer',\n borderRadius: 'var(--brycks-radius-sm)',\n transition: `all ${durations.fast}ms ${easings.easeOut}`,\n pointerEvents: 'auto',\n }\n\n const chevronStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: 'var(--brycks-foreground-muted)',\n transform: isOpen ? 'rotate(180deg)' : 'rotate(0)',\n transition: `transform ${durations.fast}ms ${easings.easeOut}`,\n }\n\n const dropdownStyle: CSSProperties = {\n position: 'absolute',\n top: dropdownPosition.top,\n left: dropdownPosition.left,\n width: dropdownPosition.width,\n maxHeight: 300,\n overflowY: 'auto',\n backgroundColor: 'var(--brycks-background-elevated)',\n border: '1px solid var(--brycks-border-default)',\n borderRadius: 'var(--brycks-radius-lg)',\n boxShadow: 'var(--brycks-shadow-lg)',\n zIndex: 'var(--brycks-z-dropdown)' as unknown as number,\n padding: spacing[1],\n animation: `brycks-dropdown-in ${durations.quick}ms ${easings.easeOut}`,\n }\n\n const optionStyle = (isActive: boolean, isDisabled: boolean, isSelected: boolean): CSSProperties => ({\n display: 'flex',\n alignItems: 'center',\n gap: componentGap.md,\n padding: `${spacing[2]}px ${componentPaddingX.sm}px`,\n fontSize: config.fontSize,\n color: isDisabled\n ? 'var(--brycks-foreground-disabled)'\n : 'var(--brycks-foreground-default)',\n backgroundColor: isActive\n ? 'var(--brycks-background-muted)'\n : isSelected\n ? 'var(--brycks-primary-50)'\n : 'transparent',\n borderRadius: 'var(--brycks-radius-md)',\n cursor: isDisabled ? 'not-allowed' : 'pointer',\n transition: `background-color ${durations.fast}ms ${easings.easeOut}`,\n })\n\n const emptyStyle: CSSProperties = {\n padding: `${spacing[4]}px ${spacing[3]}px`,\n fontSize: config.fontSize,\n color: 'var(--brycks-foreground-muted)',\n textAlign: 'center',\n }\n\n return (\n <div\n ref={containerRef}\n className={cx('brycks-combobox', `brycks-combobox--${size}`, className)}\n style={containerStyle}\n data-testid={testId}\n >\n <div\n style={inputWrapperStyle}\n onClick={() => !disabled && inputRef.current?.focus()}\n >\n <input\n ref={(node) => {\n (inputRef as React.MutableRefObject<HTMLInputElement | null>).current = node\n if (typeof ref === 'function') ref(node)\n else if (ref) ref.current = node\n }}\n type=\"text\"\n role=\"combobox\"\n aria-expanded={isOpen}\n aria-haspopup=\"listbox\"\n aria-autocomplete=\"list\"\n aria-controls={isOpen ? 'combobox-listbox' : undefined}\n aria-activedescendant={isOpen && activeIndex >= 0 ? `combobox-option-${activeIndex}` : undefined}\n aria-invalid={isInvalid}\n aria-required={required}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledby}\n value={inputValue}\n placeholder={placeholder}\n disabled={disabled}\n style={inputStyle}\n onChange={handleInputChange}\n onKeyDown={handleKeyDown}\n onFocus={() => {\n setIsFocused(true)\n setIsOpen(true)\n }}\n onBlur={() => setIsFocused(false)}\n />\n <div style={iconsStyle}>\n {clearable && value && !disabled && (\n <button\n type=\"button\"\n aria-label=\"Clear selection\"\n style={clearButtonStyle}\n onClick={handleClear}\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor = 'var(--brycks-background-muted)'\n e.currentTarget.style.color = 'var(--brycks-foreground-default)'\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'transparent'\n e.currentTarget.style.color = 'var(--brycks-foreground-muted)'\n }}\n >\n <ClearIcon />\n </button>\n )}\n <span style={chevronStyle}>\n <ChevronDownIcon />\n </span>\n </div>\n </div>\n\n {isOpen &&\n createPortal(\n <>\n <style>\n {`\n @keyframes brycks-dropdown-in {\n from { opacity: 0; transform: translateY(-4px); }\n to { opacity: 1; transform: translateY(0); }\n }\n `}\n </style>\n <ul\n ref={listRef}\n id=\"combobox-listbox\"\n role=\"listbox\"\n aria-label={ariaLabel || 'Options'}\n style={dropdownStyle}\n >\n {filteredOptions.length > 0 ? (\n filteredOptions.map((option, index) => (\n <li\n key={option.value}\n id={`combobox-option-${index}`}\n role=\"option\"\n aria-selected={option.value === value}\n aria-disabled={option.disabled}\n style={optionStyle(index === activeIndex, !!option.disabled, option.value === value)}\n onClick={() => !option.disabled && handleSelect(option.value)}\n onMouseEnter={() => setActiveIndex(index)}\n >\n {option.icon && <span style={{ flexShrink: 0 }}>{option.icon}</span>}\n <div style={{ flex: 1, minWidth: 0 }}>\n <div style={{ fontWeight: option.value === value ? 500 : 400 }}>{option.label}</div>\n {option.description && (\n <div style={{ fontSize: fontSizes.sm, color: 'var(--brycks-foreground-muted)' }}>\n {option.description}\n </div>\n )}\n </div>\n {option.value === value && (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" style={{ flexShrink: 0 }}>\n <path\n d=\"M3 8l3 3 7-7\"\n stroke=\"var(--brycks-primary-default)\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n )}\n </li>\n ))\n ) : (\n <li style={emptyStyle}>\n {creatable && inputValue ? (\n <button\n type=\"button\"\n style={{\n ...optionStyle(true, false, false),\n width: '100%',\n border: 'none',\n cursor: 'pointer',\n }}\n onClick={() => onCreate?.(inputValue)}\n >\n Create \"{inputValue}\"\n </button>\n ) : (\n emptyText\n )}\n </li>\n )}\n </ul>\n </>,\n document.body\n )}\n </div>\n )\n})\n\nCombobox.displayName = 'Combobox'\n"],"names":["sizeConfig","componentHeights","fontSizes","componentPaddingX","iconSizes","defaultFilterFn","option","inputValue","search","ChevronDownIcon","jsx","ClearIcon","Combobox","forwardRef","options","controlledValue","defaultValue","onChange","onInputChange","placeholder","size","disabled","isInvalid","required","clearable","ariaLabel","ariaLabelledby","filterFn","emptyText","creatable","onCreate","className","testId","ref","internalValue","setInternalValue","useState","setInputValue","isOpen","setIsOpen","activeIndex","setActiveIndex","isFocused","setIsFocused","containerRef","useRef","inputRef","listRef","value","config","selectedOption","useMemo","opt","filteredOptions","useEffect","handleSelect","useCallback","optionValue","handleInputChange","newValue","handleClear","handleKeyDown","prev","handleClick","e","dropdownPosition","setDropdownPosition","updatePosition","rect","spacing","containerStyle","inputWrapperStyle","durations","easings","inputStyle","iconsStyle","clearButtonStyle","chevronStyle","dropdownStyle","optionStyle","isActive","isDisabled","isSelected","componentGap","emptyStyle","jsxs","cx","node","createPortal","Fragment","index"],"mappings":"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"}
1
+ {"version":3,"file":"Combobox.js","sources":["../../../../src/components/form/Combobox/Combobox.tsx"],"sourcesContent":["/**\n * Combobox Component\n *\n * A searchable select/autocomplete component with keyboard navigation.\n * Combines the functionality of Input with dropdown selection.\n *\n * @module components/form/Combobox\n */\n\nimport {\n forwardRef,\n useState,\n useCallback,\n useRef,\n useEffect,\n useMemo,\n type CSSProperties,\n type ReactNode,\n type KeyboardEvent,\n type ChangeEvent,\n} from 'react'\nimport { createPortal } from 'react-dom'\nimport { cx } from '../../../utils/styles'\nimport { useId } from '../../../hooks/useId'\nimport { spacing, fontSizes, durations, easings } from '../../../design-system'\nimport {\n componentHeights,\n componentPaddingX,\n componentGap,\n iconSizes,\n} from '../../../design-system/primitives'\n\nexport type ComboboxSize = 'sm' | 'md' | 'lg'\n\nexport interface ComboboxOption {\n /** Unique identifier for the option */\n value: string\n /** Display label */\n label: string\n /** Optional description */\n description?: string\n /** Optional icon */\n icon?: ReactNode\n /** Whether the option is disabled */\n disabled?: boolean\n}\n\nexport interface ComboboxProps {\n /** Available options */\n options: ComboboxOption[]\n /** Currently selected value (controlled) */\n value?: string | null\n /** Default selected value (uncontrolled) */\n defaultValue?: string | null\n /** Callback when selection changes */\n onChange?: (value: string | null) => void\n /** Callback when input value changes */\n onInputChange?: (value: string) => void\n /** Placeholder text */\n placeholder?: string\n /** Component size */\n size?: ComboboxSize\n /** Whether the combobox is disabled */\n disabled?: boolean\n /** Whether the combobox is invalid */\n isInvalid?: boolean\n /** Whether the combobox is required */\n required?: boolean\n /** Whether to allow clearing the selection */\n clearable?: boolean\n /** Label for accessibility */\n 'aria-label'?: string\n /** ID of element that labels this combobox */\n 'aria-labelledby'?: string\n /** Custom filter function */\n filterFn?: (option: ComboboxOption, inputValue: string) => boolean\n /** Text to show when no options match */\n emptyText?: string\n /** Whether options are being loaded asynchronously */\n isLoading?: boolean\n /** Text to show while loading */\n loadingText?: string\n /** Whether to allow creating new options */\n creatable?: boolean\n /** Callback when creating new option */\n onCreate?: (inputValue: string) => void\n /** Label of the create-option button */\n createLabel?: (inputValue: string) => ReactNode\n /** Accessible label of the clear button */\n clearLabel?: string\n /** Accessible label of the options listbox (when no aria-label is given) */\n listboxLabel?: string\n /** Custom class name */\n className?: string\n /** Test ID */\n testId?: string\n}\n\nconst sizeConfig: Record<ComboboxSize, { height: number; fontSize: number; padding: number; iconSize: number }> = {\n sm: { height: componentHeights.sm, fontSize: fontSizes.base - 1, padding: componentPaddingX.sm, iconSize: iconSizes.sm },\n md: { height: componentHeights.md, fontSize: fontSizes.base, padding: componentPaddingX.md, iconSize: iconSizes.md },\n lg: { height: componentHeights.lg, fontSize: fontSizes.md, padding: componentPaddingX.lg, iconSize: iconSizes.lg },\n}\n\nconst defaultFilterFn = (option: ComboboxOption, inputValue: string): boolean => {\n const search = inputValue.toLowerCase()\n return (\n option.label.toLowerCase().includes(search) ||\n option.value.toLowerCase().includes(search) ||\n (option.description?.toLowerCase().includes(search) ?? false)\n )\n}\n\nfunction ChevronDownIcon() {\n return (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M4 6l4 4 4-4\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n )\n}\n\nfunction ClearIcon() {\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M4 4l6 6M10 4l-6 6\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n )\n}\n\nexport const Combobox = forwardRef<HTMLInputElement, ComboboxProps>(function Combobox(\n {\n options,\n value: controlledValue,\n defaultValue = null,\n onChange,\n onInputChange,\n placeholder = 'Select or search...',\n size = 'md',\n disabled = false,\n isInvalid = false,\n required = false,\n clearable = true,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledby,\n filterFn = defaultFilterFn,\n emptyText = 'No options found',\n isLoading = false,\n loadingText = 'Loading…',\n creatable = false,\n onCreate,\n createLabel = (input) => `Create \"${input}\"`,\n clearLabel = 'Clear selection',\n listboxLabel = 'Options',\n className,\n testId,\n },\n ref\n) {\n const listboxId = useId('combobox-listbox')\n const [internalValue, setInternalValue] = useState(defaultValue)\n const [inputValue, setInputValue] = useState('')\n const [isOpen, setIsOpen] = useState(false)\n const [activeIndex, setActiveIndex] = useState(-1)\n const [isFocused, setIsFocused] = useState(false)\n\n const containerRef = useRef<HTMLDivElement>(null)\n const inputRef = useRef<HTMLInputElement>(null)\n const listRef = useRef<HTMLUListElement>(null)\n\n const value = controlledValue !== undefined ? controlledValue : internalValue\n const config = sizeConfig[size]\n\n // Get selected option\n const selectedOption = useMemo(\n () => options.find((opt) => opt.value === value),\n [options, value]\n )\n\n // Filter options based on input\n const filteredOptions = useMemo(() => {\n if (!inputValue) return options\n return options.filter((opt) => filterFn(opt, inputValue))\n }, [options, inputValue, filterFn])\n\n // Sync input with selected value\n useEffect(() => {\n if (!isOpen && selectedOption) {\n setInputValue(selectedOption.label)\n } else if (!isOpen && !value) {\n setInputValue('')\n }\n }, [isOpen, selectedOption, value])\n\n const handleSelect = useCallback(\n (optionValue: string | null) => {\n if (controlledValue === undefined) {\n setInternalValue(optionValue)\n }\n onChange?.(optionValue)\n setIsOpen(false)\n setActiveIndex(-1)\n inputRef.current?.focus()\n },\n [controlledValue, onChange]\n )\n\n const handleInputChange = useCallback(\n (e: ChangeEvent<HTMLInputElement>) => {\n const newValue = e.target.value\n setInputValue(newValue)\n onInputChange?.(newValue)\n if (!isOpen) setIsOpen(true)\n setActiveIndex(0)\n },\n [isOpen, onInputChange]\n )\n\n const handleClear = useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation()\n handleSelect(null)\n setInputValue('')\n inputRef.current?.focus()\n },\n [handleSelect]\n )\n\n const handleKeyDown = useCallback(\n (e: KeyboardEvent<HTMLInputElement>) => {\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault()\n if (!isOpen) {\n setIsOpen(true)\n setActiveIndex(0)\n } else {\n setActiveIndex((prev) => Math.min(prev + 1, filteredOptions.length - 1))\n }\n break\n case 'ArrowUp':\n e.preventDefault()\n if (isOpen) {\n setActiveIndex((prev) => Math.max(prev - 1, 0))\n }\n break\n case 'Enter':\n e.preventDefault()\n if (isOpen && activeIndex >= 0 && filteredOptions[activeIndex]) {\n if (!filteredOptions[activeIndex].disabled) {\n handleSelect(filteredOptions[activeIndex].value)\n }\n } else if (creatable && inputValue && filteredOptions.length === 0) {\n onCreate?.(inputValue)\n }\n break\n case 'Escape':\n e.preventDefault()\n setIsOpen(false)\n setActiveIndex(-1)\n if (selectedOption) {\n setInputValue(selectedOption.label)\n }\n break\n case 'Tab':\n if (isOpen) {\n setIsOpen(false)\n setActiveIndex(-1)\n }\n break\n }\n },\n [isOpen, activeIndex, filteredOptions, handleSelect, creatable, inputValue, onCreate, selectedOption]\n )\n\n // Close on outside click\n useEffect(() => {\n if (!isOpen) return\n\n const handleClick = (e: MouseEvent) => {\n if (!containerRef.current?.contains(e.target as Node)) {\n setIsOpen(false)\n setActiveIndex(-1)\n if (selectedOption) {\n setInputValue(selectedOption.label)\n }\n }\n }\n\n document.addEventListener('mousedown', handleClick)\n return () => document.removeEventListener('mousedown', handleClick)\n }, [isOpen, selectedOption])\n\n // Scroll active option into view\n useEffect(() => {\n if (!isOpen || activeIndex < 0) return\n const list = listRef.current\n const activeItem = list?.children[activeIndex] as HTMLElement | undefined\n activeItem?.scrollIntoView({ block: 'nearest' })\n }, [isOpen, activeIndex])\n\n // Calculate dropdown position\n const [dropdownPosition, setDropdownPosition] = useState({ top: 0, left: 0, width: 0 })\n\n useEffect(() => {\n if (!isOpen || !containerRef.current) return\n\n const updatePosition = () => {\n const rect = containerRef.current!.getBoundingClientRect()\n setDropdownPosition({\n top: rect.bottom + window.scrollY + spacing[1],\n left: rect.left + window.scrollX,\n width: rect.width,\n })\n }\n\n updatePosition()\n window.addEventListener('resize', updatePosition)\n window.addEventListener('scroll', updatePosition, true)\n\n return () => {\n window.removeEventListener('resize', updatePosition)\n window.removeEventListener('scroll', updatePosition, true)\n }\n }, [isOpen])\n\n const containerStyle: CSSProperties = {\n position: 'relative',\n display: 'inline-flex',\n width: '100%',\n }\n\n const inputWrapperStyle: CSSProperties = {\n position: 'relative',\n display: 'flex',\n alignItems: 'center',\n width: '100%',\n height: config.height,\n backgroundColor: disabled ? 'var(--brycks-background-muted)' : 'var(--brycks-background-default)',\n border: `1px solid ${\n isInvalid\n ? 'var(--brycks-error-default)'\n : isFocused\n ? 'var(--brycks-primary-default)'\n : 'var(--brycks-border-default)'\n }`,\n borderRadius: 'var(--brycks-radius-md)',\n transition: `all ${durations.fast}ms ${easings.easeOut}`,\n cursor: disabled ? 'not-allowed' : 'text',\n boxShadow: isFocused ? 'var(--brycks-focus-ring)' : undefined,\n }\n\n const inputStyle: CSSProperties = {\n flex: 1,\n height: '100%',\n padding: `0 ${config.padding}px`,\n paddingRight: spacing[10],\n fontSize: config.fontSize,\n color: disabled ? 'var(--brycks-foreground-disabled)' : 'var(--brycks-foreground-default)',\n backgroundColor: 'transparent',\n border: 'none',\n outline: 'none',\n cursor: disabled ? 'not-allowed' : 'text',\n }\n\n const iconsStyle: CSSProperties = {\n position: 'absolute',\n right: config.padding,\n display: 'flex',\n alignItems: 'center',\n gap: spacing[1],\n pointerEvents: 'none',\n }\n\n const clearButtonStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: spacing[5],\n height: spacing[5],\n color: 'var(--brycks-foreground-muted)',\n cursor: 'pointer',\n borderRadius: 'var(--brycks-radius-sm)',\n transition: `all ${durations.fast}ms ${easings.easeOut}`,\n pointerEvents: 'auto',\n }\n\n const chevronStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: 'var(--brycks-foreground-muted)',\n transform: isOpen ? 'rotate(180deg)' : 'rotate(0)',\n transition: `transform ${durations.fast}ms ${easings.easeOut}`,\n }\n\n const dropdownStyle: CSSProperties = {\n position: 'absolute',\n top: dropdownPosition.top,\n left: dropdownPosition.left,\n width: dropdownPosition.width,\n maxHeight: 300,\n overflowY: 'auto',\n backgroundColor: 'var(--brycks-background-elevated)',\n border: '1px solid var(--brycks-border-default)',\n borderRadius: 'var(--brycks-radius-lg)',\n boxShadow: 'var(--brycks-shadow-lg)',\n zIndex: 'var(--brycks-z-dropdown)' as unknown as number,\n padding: spacing[1],\n animation: `brycks-dropdown-in ${durations.quick}ms ${easings.easeOut}`,\n }\n\n const optionStyle = (isActive: boolean, isDisabled: boolean, isSelected: boolean): CSSProperties => ({\n display: 'flex',\n alignItems: 'center',\n gap: componentGap.md,\n padding: `${spacing[2]}px ${componentPaddingX.sm}px`,\n fontSize: config.fontSize,\n color: isDisabled\n ? 'var(--brycks-foreground-disabled)'\n : 'var(--brycks-foreground-default)',\n backgroundColor: isActive\n ? 'var(--brycks-background-muted)'\n : isSelected\n ? 'var(--brycks-primary-muted)'\n : 'transparent',\n borderRadius: 'var(--brycks-radius-md)',\n cursor: isDisabled ? 'not-allowed' : 'pointer',\n transition: `background-color ${durations.fast}ms ${easings.easeOut}`,\n })\n\n const emptyStyle: CSSProperties = {\n padding: `${spacing[4]}px ${spacing[3]}px`,\n fontSize: config.fontSize,\n color: 'var(--brycks-foreground-muted)',\n textAlign: 'center',\n }\n\n return (\n <div\n ref={containerRef}\n className={cx('brycks-combobox', `brycks-combobox--${size}`, className)}\n style={containerStyle}\n data-testid={testId}\n >\n <div\n style={inputWrapperStyle}\n onClick={() => !disabled && inputRef.current?.focus()}\n >\n <input\n ref={(node) => {\n (inputRef as React.MutableRefObject<HTMLInputElement | null>).current = node\n if (typeof ref === 'function') ref(node)\n else if (ref) ref.current = node\n }}\n type=\"text\"\n role=\"combobox\"\n aria-expanded={isOpen}\n aria-haspopup=\"listbox\"\n aria-autocomplete=\"list\"\n aria-controls={isOpen ? listboxId : undefined}\n aria-activedescendant={isOpen && activeIndex >= 0 ? `${listboxId}-option-${activeIndex}` : undefined}\n aria-invalid={isInvalid}\n aria-required={required}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledby}\n value={inputValue}\n placeholder={placeholder}\n disabled={disabled}\n style={inputStyle}\n onChange={handleInputChange}\n onKeyDown={handleKeyDown}\n onFocus={() => {\n setIsFocused(true)\n setIsOpen(true)\n }}\n onBlur={() => setIsFocused(false)}\n />\n <div style={iconsStyle}>\n {clearable && value && !disabled && (\n <button\n type=\"button\"\n aria-label={clearLabel}\n style={clearButtonStyle}\n onClick={handleClear}\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor = 'var(--brycks-background-muted)'\n e.currentTarget.style.color = 'var(--brycks-foreground-default)'\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'transparent'\n e.currentTarget.style.color = 'var(--brycks-foreground-muted)'\n }}\n >\n <ClearIcon />\n </button>\n )}\n <span style={chevronStyle}>\n <ChevronDownIcon />\n </span>\n </div>\n </div>\n\n {isOpen &&\n createPortal(\n <>\n <style>\n {`\n @keyframes brycks-dropdown-in {\n from { opacity: 0; transform: translateY(-4px); }\n to { opacity: 1; transform: translateY(0); }\n }\n `}\n </style>\n <ul\n ref={listRef}\n id={listboxId}\n role=\"listbox\"\n aria-label={ariaLabel || listboxLabel}\n aria-busy={isLoading || undefined}\n style={dropdownStyle}\n >\n {isLoading ? (\n <li style={emptyStyle} role=\"status\" aria-live=\"polite\">\n <span style={{ display: 'inline-flex', alignItems: 'center', justifyContent: 'center', gap: spacing[2] }}>\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n className=\"brycks-animate-spin\"\n aria-hidden=\"true\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" opacity=\"0.2\" />\n <path d=\"M12 2C6.47715 2 2 6.47715 2 12\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" />\n </svg>\n {loadingText}\n </span>\n </li>\n ) : filteredOptions.length > 0 ? (\n filteredOptions.map((option, index) => (\n <li\n key={option.value}\n id={`${listboxId}-option-${index}`}\n role=\"option\"\n aria-selected={option.value === value}\n aria-disabled={option.disabled}\n style={optionStyle(index === activeIndex, !!option.disabled, option.value === value)}\n onClick={() => !option.disabled && handleSelect(option.value)}\n onMouseEnter={() => setActiveIndex(index)}\n >\n {option.icon && <span style={{ flexShrink: 0 }}>{option.icon}</span>}\n <div style={{ flex: 1, minWidth: 0 }}>\n <div style={{ fontWeight: option.value === value ? 500 : 400 }}>{option.label}</div>\n {option.description && (\n <div style={{ fontSize: fontSizes.sm, color: 'var(--brycks-foreground-muted)' }}>\n {option.description}\n </div>\n )}\n </div>\n {option.value === value && (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" style={{ flexShrink: 0 }}>\n <path\n d=\"M3 8l3 3 7-7\"\n stroke=\"var(--brycks-primary-default)\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n )}\n </li>\n ))\n ) : (\n <li style={emptyStyle}>\n {creatable && inputValue ? (\n <button\n type=\"button\"\n style={{\n ...optionStyle(true, false, false),\n width: '100%',\n border: 'none',\n cursor: 'pointer',\n }}\n onClick={() => onCreate?.(inputValue)}\n >\n {createLabel(inputValue)}\n </button>\n ) : (\n emptyText\n )}\n </li>\n )}\n </ul>\n </>,\n document.body\n )}\n </div>\n )\n})\n\nCombobox.displayName = 'Combobox'\n"],"names":["sizeConfig","componentHeights","fontSizes","componentPaddingX","iconSizes","defaultFilterFn","option","inputValue","search","ChevronDownIcon","jsx","ClearIcon","Combobox","forwardRef","options","controlledValue","defaultValue","onChange","onInputChange","placeholder","size","disabled","isInvalid","required","clearable","ariaLabel","ariaLabelledby","filterFn","emptyText","isLoading","loadingText","creatable","onCreate","createLabel","input","clearLabel","listboxLabel","className","testId","ref","listboxId","useId","internalValue","setInternalValue","useState","setInputValue","isOpen","setIsOpen","activeIndex","setActiveIndex","isFocused","setIsFocused","containerRef","useRef","inputRef","listRef","value","config","selectedOption","useMemo","opt","filteredOptions","useEffect","handleSelect","useCallback","optionValue","handleInputChange","newValue","handleClear","handleKeyDown","prev","handleClick","e","dropdownPosition","setDropdownPosition","updatePosition","rect","spacing","containerStyle","inputWrapperStyle","durations","easings","inputStyle","iconsStyle","clearButtonStyle","chevronStyle","dropdownStyle","optionStyle","isActive","isDisabled","isSelected","componentGap","emptyStyle","jsxs","cx","node","createPortal","Fragment","index"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react/jsx-runtime"),d=require("react"),F=require("../../../utils/styles.cjs"),$={sm:{height:32,fontSize:13,padding:10,iconSize:14},md:{height:40,fontSize:14,padding:12,iconSize:16},lg:{height:48,fontSize:16,padding:14,iconSize:18}},g=d.forwardRef(function({size:c="md",variant:o="outline",type:b="date",label:l,helperText:u,error:s,isInvalid:S=!1,leftIcon:n,disabled:a=!1,className:h,style:k,testId:v,...m},x){const[i,y]=d.useState(!1),[z,f]=d.useState(!1),e=$[c],r=S||!!s,j={display:"flex",flexDirection:"column",gap:6,...k},R={fontSize:e.fontSize-1,fontWeight:500,color:"var(--brycks-foreground-default)"},I={position:"relative",display:"flex",alignItems:"center"},w=()=>{const p={width:"100%",height:e.height,fontSize:e.fontSize,fontFamily:"inherit",color:"var(--brycks-foreground-default)",backgroundColor:o==="filled"?"var(--brycks-background-muted)":"var(--brycks-background-input)",paddingLeft:n?e.padding+e.iconSize+8:e.padding,paddingRight:e.padding,transition:"all 150ms ease-out",outline:"none",opacity:a?.5:1,cursor:a?"not-allowed":"pointer"};return o==="flushed"?{...p,border:"none",borderBottom:`2px solid ${r?"var(--brycks-error-default)":i?"var(--brycks-primary-default)":"var(--brycks-border-default)"}`,borderRadius:0,paddingLeft:n?e.iconSize+8:0,paddingRight:0,backgroundColor:"transparent"}:{...p,border:`1px solid ${r?"var(--brycks-error-default)":i?"var(--brycks-primary-default)":z?"var(--brycks-border-strong)":"var(--brycks-border-default)"}`,borderRadius:"var(--brycks-radius-md)",boxShadow:i&&!r?"0 0 0 3px var(--brycks-primary-100)":i&&r?"0 0 0 3px var(--brycks-error-100)":void 0}},C={position:"absolute",left:o==="flushed"?0:e.padding,color:"var(--brycks-foreground-muted)",display:"flex",alignItems:"center",justifyContent:"center",width:e.iconSize,height:e.iconSize,pointerEvents:"none"},D={fontSize:e.fontSize-2,color:r?"var(--brycks-error-default)":"var(--brycks-foreground-muted)"};return t.jsxs("div",{className:F.cx("brycks-date-input",`brycks-date-input--${c}`,`brycks-date-input--${o}`,h),style:j,children:[l&&t.jsx("label",{style:R,children:l}),t.jsxs("div",{style:I,onMouseEnter:()=>f(!0),onMouseLeave:()=>f(!1),children:[n&&t.jsx("span",{style:C,children:n}),t.jsx("input",{ref:x,type:b,disabled:a,style:w(),onFocus:()=>y(!0),onBlur:()=>y(!1),"data-testid":v,...m})]}),(u||s)&&t.jsx("span",{style:D,children:s||u})]})});g.displayName="DateInput";exports.DateInput=g;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react/jsx-runtime"),d=require("react"),F=require("../../../utils/styles.cjs"),$={sm:{height:32,fontSize:13,padding:10,iconSize:14},md:{height:40,fontSize:14,padding:12,iconSize:16},lg:{height:48,fontSize:16,padding:14,iconSize:18}},p=d.forwardRef(function({size:c="md",variant:o="outline",type:b="date",label:l,helperText:u,error:i,isInvalid:S=!1,leftIcon:n,disabled:a=!1,className:h,style:k,testId:v,...m},z){const[s,f]=d.useState(!1),[x,y]=d.useState(!1),e=$[c],r=S||!!i,j={display:"flex",flexDirection:"column",gap:6,...k},R={fontSize:e.fontSize-1,fontWeight:500,color:"var(--brycks-foreground-default)"},I={position:"relative",display:"flex",alignItems:"center"},w=()=>{const g={width:"100%",height:e.height,fontSize:e.fontSize,fontFamily:"inherit",color:"var(--brycks-foreground-default)",backgroundColor:o==="filled"?"var(--brycks-background-muted)":"var(--brycks-background-elevated)",paddingLeft:n?e.padding+e.iconSize+8:e.padding,paddingRight:e.padding,transition:"all 150ms ease-out",outline:"none",opacity:a?.5:1,cursor:a?"not-allowed":"pointer"};return o==="flushed"?{...g,border:"none",borderBottom:`2px solid ${r?"var(--brycks-error-default)":s?"var(--brycks-primary-default)":"var(--brycks-border-default)"}`,borderRadius:0,paddingLeft:n?e.iconSize+8:0,paddingRight:0,backgroundColor:"transparent"}:{...g,border:`1px solid ${r?"var(--brycks-error-default)":s?"var(--brycks-primary-default)":x?"var(--brycks-border-strong)":"var(--brycks-border-default)"}`,borderRadius:"var(--brycks-radius-md)",boxShadow:s&&!r?"var(--brycks-focus-ring)":s&&r?"0 0 0 3px var(--brycks-focus-ring-error)":void 0}},C={position:"absolute",left:o==="flushed"?0:e.padding,color:"var(--brycks-foreground-muted)",display:"flex",alignItems:"center",justifyContent:"center",width:e.iconSize,height:e.iconSize,pointerEvents:"none"},D={fontSize:e.fontSize-2,color:r?"var(--brycks-error-default)":"var(--brycks-foreground-muted)"};return t.jsxs("div",{className:F.cx("brycks-date-input",`brycks-date-input--${c}`,`brycks-date-input--${o}`,h),style:j,children:[l&&t.jsx("label",{style:R,children:l}),t.jsxs("div",{style:I,onMouseEnter:()=>y(!0),onMouseLeave:()=>y(!1),children:[n&&t.jsx("span",{style:C,children:n}),t.jsx("input",{ref:z,type:b,disabled:a,style:w(),onFocus:()=>f(!0),onBlur:()=>f(!1),"data-testid":v,...m})]}),(u||i)&&t.jsx("span",{style:D,children:i||u})]})});p.displayName="DateInput";exports.DateInput=p;
2
2
  //# sourceMappingURL=DateInput.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"DateInput.cjs","sources":["../../../../src/components/form/DateInput/DateInput.tsx"],"sourcesContent":["/**\n * DateInput Component\n *\n * A styled date input that uses the native date picker.\n * Consistent with other form inputs in the design system.\n */\n\nimport {\n forwardRef,\n useState,\n type CSSProperties,\n type InputHTMLAttributes,\n type ReactNode,\n} from 'react'\nimport { cx } from '../../../utils/styles'\n\nexport type DateInputSize = 'sm' | 'md' | 'lg'\nexport type DateInputVariant = 'outline' | 'filled' | 'flushed'\nexport type DateInputType = 'date' | 'datetime-local' | 'time' | 'month' | 'week'\n\nexport interface DateInputProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size' | 'type'> {\n /** Input size */\n size?: DateInputSize\n /** Input variant */\n variant?: DateInputVariant\n /** Type of date input */\n type?: DateInputType\n /** Input label */\n label?: ReactNode\n /** Helper text below input */\n helperText?: ReactNode\n /** Error message */\n error?: ReactNode\n /** Whether the input is invalid */\n isInvalid?: boolean\n /** Icon on the left side */\n leftIcon?: ReactNode\n /** Custom class name */\n className?: string\n /** Test ID */\n testId?: string\n}\n\nconst sizeConfig: Record<DateInputSize, { height: number; fontSize: number; padding: number; iconSize: number }> = {\n sm: { height: 32, fontSize: 13, padding: 10, iconSize: 14 },\n md: { height: 40, fontSize: 14, padding: 12, iconSize: 16 },\n lg: { height: 48, fontSize: 16, padding: 14, iconSize: 18 },\n}\n\nexport const DateInput = forwardRef<HTMLInputElement, DateInputProps>(function DateInput(\n {\n size = 'md',\n variant = 'outline',\n type = 'date',\n label,\n helperText,\n error,\n isInvalid = false,\n leftIcon,\n disabled = false,\n className,\n style,\n testId,\n ...props\n },\n ref\n) {\n const [isFocused, setIsFocused] = useState(false)\n const [isHovered, setIsHovered] = useState(false)\n const config = sizeConfig[size]\n const hasError = isInvalid || !!error\n\n const containerStyle: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: 6,\n ...style,\n }\n\n const labelStyle: CSSProperties = {\n fontSize: config.fontSize - 1,\n fontWeight: 500,\n color: 'var(--brycks-foreground-default)',\n }\n\n const inputContainerStyle: CSSProperties = {\n position: 'relative',\n display: 'flex',\n alignItems: 'center',\n }\n\n const getInputStyle = (): CSSProperties => {\n const baseStyle: CSSProperties = {\n width: '100%',\n height: config.height,\n fontSize: config.fontSize,\n fontFamily: 'inherit',\n color: 'var(--brycks-foreground-default)',\n backgroundColor: variant === 'filled' ? 'var(--brycks-background-muted)' : 'var(--brycks-background-input)',\n paddingLeft: leftIcon ? config.padding + config.iconSize + 8 : config.padding,\n paddingRight: config.padding,\n transition: 'all 150ms ease-out',\n outline: 'none',\n opacity: disabled ? 0.5 : 1,\n cursor: disabled ? 'not-allowed' : 'pointer',\n }\n\n if (variant === 'flushed') {\n return {\n ...baseStyle,\n border: 'none',\n borderBottom: `2px solid ${\n hasError\n ? 'var(--brycks-error-default)'\n : isFocused\n ? 'var(--brycks-primary-default)'\n : 'var(--brycks-border-default)'\n }`,\n borderRadius: 0,\n paddingLeft: leftIcon ? config.iconSize + 8 : 0,\n paddingRight: 0,\n backgroundColor: 'transparent',\n }\n }\n\n return {\n ...baseStyle,\n border: `1px solid ${\n hasError\n ? 'var(--brycks-error-default)'\n : isFocused\n ? 'var(--brycks-primary-default)'\n : isHovered\n ? 'var(--brycks-border-strong)'\n : 'var(--brycks-border-default)'\n }`,\n borderRadius: 'var(--brycks-radius-md)',\n boxShadow: isFocused && !hasError\n ? '0 0 0 3px var(--brycks-primary-100)'\n : isFocused && hasError\n ? '0 0 0 3px var(--brycks-error-100)'\n : undefined,\n }\n }\n\n const iconStyle: CSSProperties = {\n position: 'absolute',\n left: variant === 'flushed' ? 0 : config.padding,\n color: 'var(--brycks-foreground-muted)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: config.iconSize,\n height: config.iconSize,\n pointerEvents: 'none',\n }\n\n const helperStyle: CSSProperties = {\n fontSize: config.fontSize - 2,\n color: hasError ? 'var(--brycks-error-default)' : 'var(--brycks-foreground-muted)',\n }\n\n return (\n <div\n className={cx('brycks-date-input', `brycks-date-input--${size}`, `brycks-date-input--${variant}`, className)}\n style={containerStyle}\n >\n {label && <label style={labelStyle}>{label}</label>}\n <div\n style={inputContainerStyle}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n >\n {leftIcon && <span style={iconStyle}>{leftIcon}</span>}\n <input\n ref={ref}\n type={type}\n disabled={disabled}\n style={getInputStyle()}\n onFocus={() => setIsFocused(true)}\n onBlur={() => setIsFocused(false)}\n data-testid={testId}\n {...props}\n />\n </div>\n {(helperText || error) && (\n <span style={helperStyle}>{error || helperText}</span>\n )}\n </div>\n )\n})\n\nDateInput.displayName = 'DateInput'\n"],"names":["sizeConfig","DateInput","forwardRef","size","variant","type","label","helperText","error","isInvalid","leftIcon","disabled","className","style","testId","props","ref","isFocused","setIsFocused","useState","isHovered","setIsHovered","config","hasError","containerStyle","labelStyle","inputContainerStyle","getInputStyle","baseStyle","iconStyle","helperStyle","jsxs","cx","jsx"],"mappings":"+KA4CMA,EAA6G,CACjH,GAAI,CAAE,OAAQ,GAAI,SAAU,GAAI,QAAS,GAAI,SAAU,EAAA,EACvD,GAAI,CAAE,OAAQ,GAAI,SAAU,GAAI,QAAS,GAAI,SAAU,EAAA,EACvD,GAAI,CAAE,OAAQ,GAAI,SAAU,GAAI,QAAS,GAAI,SAAU,EAAA,CACzD,EAEaC,EAAYC,EAAAA,WAA6C,SACpE,CACE,KAAAC,EAAO,KACP,QAAAC,EAAU,UACV,KAAAC,EAAO,OACP,MAAAC,EACA,WAAAC,EACA,MAAAC,EACA,UAAAC,EAAY,GACZ,SAAAC,EACA,SAAAC,EAAW,GACX,UAAAC,EACA,MAAAC,EACA,OAAAC,EACA,GAAGC,CACL,EACAC,EACA,CACA,KAAM,CAACC,EAAWC,CAAY,EAAIC,EAAAA,SAAS,EAAK,EAC1C,CAACC,EAAWC,CAAY,EAAIF,EAAAA,SAAS,EAAK,EAC1CG,EAAStB,EAAWG,CAAI,EACxBoB,EAAWd,GAAa,CAAC,CAACD,EAE1BgB,EAAgC,CACpC,QAAS,OACT,cAAe,SACf,IAAK,EACL,GAAGX,CAAA,EAGCY,EAA4B,CAChC,SAAUH,EAAO,SAAW,EAC5B,WAAY,IACZ,MAAO,kCAAA,EAGHI,EAAqC,CACzC,SAAU,WACV,QAAS,OACT,WAAY,QAAA,EAGRC,EAAgB,IAAqB,CACzC,MAAMC,EAA2B,CAC/B,MAAO,OACP,OAAQN,EAAO,OACf,SAAUA,EAAO,SACjB,WAAY,UACZ,MAAO,mCACP,gBAAiBlB,IAAY,SAAW,iCAAmC,iCAC3E,YAAaM,EAAWY,EAAO,QAAUA,EAAO,SAAW,EAAIA,EAAO,QACtE,aAAcA,EAAO,QACrB,WAAY,qBACZ,QAAS,OACT,QAASX,EAAW,GAAM,EAC1B,OAAQA,EAAW,cAAgB,SAAA,EAGrC,OAAIP,IAAY,UACP,CACL,GAAGwB,EACH,OAAQ,OACR,aAAc,aACZL,EACI,8BACAN,EACA,gCACA,8BACN,GACA,aAAc,EACd,YAAaP,EAAWY,EAAO,SAAW,EAAI,EAC9C,aAAc,EACd,gBAAiB,aAAA,EAId,CACL,GAAGM,EACH,OAAQ,aACNL,EACI,8BACAN,EACA,gCACAG,EACA,8BACA,8BACN,GACA,aAAc,0BACd,UAAWH,GAAa,CAACM,EACrB,sCACAN,GAAaM,EACb,oCACA,MAAA,CAER,EAEMM,EAA2B,CAC/B,SAAU,WACV,KAAMzB,IAAY,UAAY,EAAIkB,EAAO,QACzC,MAAO,iCACP,QAAS,OACT,WAAY,SACZ,eAAgB,SAChB,MAAOA,EAAO,SACd,OAAQA,EAAO,SACf,cAAe,MAAA,EAGXQ,EAA6B,CACjC,SAAUR,EAAO,SAAW,EAC5B,MAAOC,EAAW,8BAAgC,gCAAA,EAGpD,OACEQ,EAAAA,KAAC,MAAA,CACC,UAAWC,EAAAA,GAAG,oBAAqB,sBAAsB7B,CAAI,GAAI,sBAAsBC,CAAO,GAAIQ,CAAS,EAC3G,MAAOY,EAEN,SAAA,CAAAlB,GAAS2B,EAAAA,IAAC,QAAA,CAAM,MAAOR,EAAa,SAAAnB,EAAM,EAC3CyB,EAAAA,KAAC,MAAA,CACC,MAAOL,EACP,aAAc,IAAML,EAAa,EAAI,EACrC,aAAc,IAAMA,EAAa,EAAK,EAErC,SAAA,CAAAX,GAAYuB,EAAAA,IAAC,OAAA,CAAK,MAAOJ,EAAY,SAAAnB,EAAS,EAC/CuB,EAAAA,IAAC,QAAA,CACC,IAAAjB,EACA,KAAAX,EACA,SAAAM,EACA,MAAOgB,EAAA,EACP,QAAS,IAAMT,EAAa,EAAI,EAChC,OAAQ,IAAMA,EAAa,EAAK,EAChC,cAAaJ,EACZ,GAAGC,CAAA,CAAA,CACN,CAAA,CAAA,GAEAR,GAAcC,IACdyB,EAAAA,IAAC,QAAK,MAAOH,EAAc,YAASvB,CAAA,CAAW,CAAA,CAAA,CAAA,CAIvD,CAAC,EAEDN,EAAU,YAAc"}
1
+ {"version":3,"file":"DateInput.cjs","sources":["../../../../src/components/form/DateInput/DateInput.tsx"],"sourcesContent":["/**\n * DateInput Component\n *\n * A styled date input that uses the native date picker.\n * Consistent with other form inputs in the design system.\n */\n\nimport {\n forwardRef,\n useState,\n type CSSProperties,\n type InputHTMLAttributes,\n type ReactNode,\n} from 'react'\nimport { cx } from '../../../utils/styles'\n\nexport type DateInputSize = 'sm' | 'md' | 'lg'\nexport type DateInputVariant = 'outline' | 'filled' | 'flushed'\nexport type DateInputType = 'date' | 'datetime-local' | 'time' | 'month' | 'week'\n\nexport interface DateInputProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size' | 'type'> {\n /** Input size */\n size?: DateInputSize\n /** Input variant */\n variant?: DateInputVariant\n /** Type of date input */\n type?: DateInputType\n /** Input label */\n label?: ReactNode\n /** Helper text below input */\n helperText?: ReactNode\n /** Error message */\n error?: ReactNode\n /** Whether the input is invalid */\n isInvalid?: boolean\n /** Icon on the left side */\n leftIcon?: ReactNode\n /** Custom class name */\n className?: string\n /** Test ID */\n testId?: string\n}\n\nconst sizeConfig: Record<DateInputSize, { height: number; fontSize: number; padding: number; iconSize: number }> = {\n sm: { height: 32, fontSize: 13, padding: 10, iconSize: 14 },\n md: { height: 40, fontSize: 14, padding: 12, iconSize: 16 },\n lg: { height: 48, fontSize: 16, padding: 14, iconSize: 18 },\n}\n\nexport const DateInput = forwardRef<HTMLInputElement, DateInputProps>(function DateInput(\n {\n size = 'md',\n variant = 'outline',\n type = 'date',\n label,\n helperText,\n error,\n isInvalid = false,\n leftIcon,\n disabled = false,\n className,\n style,\n testId,\n ...props\n },\n ref\n) {\n const [isFocused, setIsFocused] = useState(false)\n const [isHovered, setIsHovered] = useState(false)\n const config = sizeConfig[size]\n const hasError = isInvalid || !!error\n\n const containerStyle: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: 6,\n ...style,\n }\n\n const labelStyle: CSSProperties = {\n fontSize: config.fontSize - 1,\n fontWeight: 500,\n color: 'var(--brycks-foreground-default)',\n }\n\n const inputContainerStyle: CSSProperties = {\n position: 'relative',\n display: 'flex',\n alignItems: 'center',\n }\n\n const getInputStyle = (): CSSProperties => {\n const baseStyle: CSSProperties = {\n width: '100%',\n height: config.height,\n fontSize: config.fontSize,\n fontFamily: 'inherit',\n color: 'var(--brycks-foreground-default)',\n backgroundColor: variant === 'filled' ? 'var(--brycks-background-muted)' : 'var(--brycks-background-elevated)',\n paddingLeft: leftIcon ? config.padding + config.iconSize + 8 : config.padding,\n paddingRight: config.padding,\n transition: 'all 150ms ease-out',\n outline: 'none',\n opacity: disabled ? 0.5 : 1,\n cursor: disabled ? 'not-allowed' : 'pointer',\n }\n\n if (variant === 'flushed') {\n return {\n ...baseStyle,\n border: 'none',\n borderBottom: `2px solid ${\n hasError\n ? 'var(--brycks-error-default)'\n : isFocused\n ? 'var(--brycks-primary-default)'\n : 'var(--brycks-border-default)'\n }`,\n borderRadius: 0,\n paddingLeft: leftIcon ? config.iconSize + 8 : 0,\n paddingRight: 0,\n backgroundColor: 'transparent',\n }\n }\n\n return {\n ...baseStyle,\n border: `1px solid ${\n hasError\n ? 'var(--brycks-error-default)'\n : isFocused\n ? 'var(--brycks-primary-default)'\n : isHovered\n ? 'var(--brycks-border-strong)'\n : 'var(--brycks-border-default)'\n }`,\n borderRadius: 'var(--brycks-radius-md)',\n boxShadow: isFocused && !hasError\n ? 'var(--brycks-focus-ring)'\n : isFocused && hasError\n ? '0 0 0 3px var(--brycks-focus-ring-error)'\n : undefined,\n }\n }\n\n const iconStyle: CSSProperties = {\n position: 'absolute',\n left: variant === 'flushed' ? 0 : config.padding,\n color: 'var(--brycks-foreground-muted)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: config.iconSize,\n height: config.iconSize,\n pointerEvents: 'none',\n }\n\n const helperStyle: CSSProperties = {\n fontSize: config.fontSize - 2,\n color: hasError ? 'var(--brycks-error-default)' : 'var(--brycks-foreground-muted)',\n }\n\n return (\n <div\n className={cx('brycks-date-input', `brycks-date-input--${size}`, `brycks-date-input--${variant}`, className)}\n style={containerStyle}\n >\n {label && <label style={labelStyle}>{label}</label>}\n <div\n style={inputContainerStyle}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n >\n {leftIcon && <span style={iconStyle}>{leftIcon}</span>}\n <input\n ref={ref}\n type={type}\n disabled={disabled}\n style={getInputStyle()}\n onFocus={() => setIsFocused(true)}\n onBlur={() => setIsFocused(false)}\n data-testid={testId}\n {...props}\n />\n </div>\n {(helperText || error) && (\n <span style={helperStyle}>{error || helperText}</span>\n )}\n </div>\n )\n})\n\nDateInput.displayName = 'DateInput'\n"],"names":["sizeConfig","DateInput","forwardRef","size","variant","type","label","helperText","error","isInvalid","leftIcon","disabled","className","style","testId","props","ref","isFocused","setIsFocused","useState","isHovered","setIsHovered","config","hasError","containerStyle","labelStyle","inputContainerStyle","getInputStyle","baseStyle","iconStyle","helperStyle","jsxs","cx","jsx"],"mappings":"+KA4CMA,EAA6G,CACjH,GAAI,CAAE,OAAQ,GAAI,SAAU,GAAI,QAAS,GAAI,SAAU,EAAA,EACvD,GAAI,CAAE,OAAQ,GAAI,SAAU,GAAI,QAAS,GAAI,SAAU,EAAA,EACvD,GAAI,CAAE,OAAQ,GAAI,SAAU,GAAI,QAAS,GAAI,SAAU,EAAA,CACzD,EAEaC,EAAYC,EAAAA,WAA6C,SACpE,CACE,KAAAC,EAAO,KACP,QAAAC,EAAU,UACV,KAAAC,EAAO,OACP,MAAAC,EACA,WAAAC,EACA,MAAAC,EACA,UAAAC,EAAY,GACZ,SAAAC,EACA,SAAAC,EAAW,GACX,UAAAC,EACA,MAAAC,EACA,OAAAC,EACA,GAAGC,CACL,EACAC,EACA,CACA,KAAM,CAACC,EAAWC,CAAY,EAAIC,EAAAA,SAAS,EAAK,EAC1C,CAACC,EAAWC,CAAY,EAAIF,EAAAA,SAAS,EAAK,EAC1CG,EAAStB,EAAWG,CAAI,EACxBoB,EAAWd,GAAa,CAAC,CAACD,EAE1BgB,EAAgC,CACpC,QAAS,OACT,cAAe,SACf,IAAK,EACL,GAAGX,CAAA,EAGCY,EAA4B,CAChC,SAAUH,EAAO,SAAW,EAC5B,WAAY,IACZ,MAAO,kCAAA,EAGHI,EAAqC,CACzC,SAAU,WACV,QAAS,OACT,WAAY,QAAA,EAGRC,EAAgB,IAAqB,CACzC,MAAMC,EAA2B,CAC/B,MAAO,OACP,OAAQN,EAAO,OACf,SAAUA,EAAO,SACjB,WAAY,UACZ,MAAO,mCACP,gBAAiBlB,IAAY,SAAW,iCAAmC,oCAC3E,YAAaM,EAAWY,EAAO,QAAUA,EAAO,SAAW,EAAIA,EAAO,QACtE,aAAcA,EAAO,QACrB,WAAY,qBACZ,QAAS,OACT,QAASX,EAAW,GAAM,EAC1B,OAAQA,EAAW,cAAgB,SAAA,EAGrC,OAAIP,IAAY,UACP,CACL,GAAGwB,EACH,OAAQ,OACR,aAAc,aACZL,EACI,8BACAN,EACA,gCACA,8BACN,GACA,aAAc,EACd,YAAaP,EAAWY,EAAO,SAAW,EAAI,EAC9C,aAAc,EACd,gBAAiB,aAAA,EAId,CACL,GAAGM,EACH,OAAQ,aACNL,EACI,8BACAN,EACA,gCACAG,EACA,8BACA,8BACN,GACA,aAAc,0BACd,UAAWH,GAAa,CAACM,EACrB,2BACAN,GAAaM,EACb,2CACA,MAAA,CAER,EAEMM,EAA2B,CAC/B,SAAU,WACV,KAAMzB,IAAY,UAAY,EAAIkB,EAAO,QACzC,MAAO,iCACP,QAAS,OACT,WAAY,SACZ,eAAgB,SAChB,MAAOA,EAAO,SACd,OAAQA,EAAO,SACf,cAAe,MAAA,EAGXQ,EAA6B,CACjC,SAAUR,EAAO,SAAW,EAC5B,MAAOC,EAAW,8BAAgC,gCAAA,EAGpD,OACEQ,EAAAA,KAAC,MAAA,CACC,UAAWC,EAAAA,GAAG,oBAAqB,sBAAsB7B,CAAI,GAAI,sBAAsBC,CAAO,GAAIQ,CAAS,EAC3G,MAAOY,EAEN,SAAA,CAAAlB,GAAS2B,EAAAA,IAAC,QAAA,CAAM,MAAOR,EAAa,SAAAnB,EAAM,EAC3CyB,EAAAA,KAAC,MAAA,CACC,MAAOL,EACP,aAAc,IAAML,EAAa,EAAI,EACrC,aAAc,IAAMA,EAAa,EAAK,EAErC,SAAA,CAAAX,GAAYuB,EAAAA,IAAC,OAAA,CAAK,MAAOJ,EAAY,SAAAnB,EAAS,EAC/CuB,EAAAA,IAAC,QAAA,CACC,IAAAjB,EACA,KAAAX,EACA,SAAAM,EACA,MAAOgB,EAAA,EACP,QAAS,IAAMT,EAAa,EAAI,EAChC,OAAQ,IAAMA,EAAa,EAAK,EAChC,cAAaJ,EACZ,GAAGC,CAAA,CAAA,CACN,CAAA,CAAA,GAEAR,GAAcC,IACdyB,EAAAA,IAAC,QAAK,MAAOH,EAAc,YAASvB,CAAA,CAAW,CAAA,CAAA,CAAA,CAIvD,CAAC,EAEDN,EAAU,YAAc"}
@@ -40,7 +40,7 @@ const E = {
40
40
  fontSize: e.fontSize,
41
41
  fontFamily: "inherit",
42
42
  color: "var(--brycks-foreground-default)",
43
- backgroundColor: t === "filled" ? "var(--brycks-background-muted)" : "var(--brycks-background-input)",
43
+ backgroundColor: t === "filled" ? "var(--brycks-background-muted)" : "var(--brycks-background-elevated)",
44
44
  paddingLeft: o ? e.padding + e.iconSize + 8 : e.padding,
45
45
  paddingRight: e.padding,
46
46
  transition: "all 150ms ease-out",
@@ -60,7 +60,7 @@ const E = {
60
60
  ...p,
61
61
  border: `1px solid ${r ? "var(--brycks-error-default)" : n ? "var(--brycks-primary-default)" : x ? "var(--brycks-border-strong)" : "var(--brycks-border-default)"}`,
62
62
  borderRadius: "var(--brycks-radius-md)",
63
- boxShadow: n && !r ? "0 0 0 3px var(--brycks-primary-100)" : n && r ? "0 0 0 3px var(--brycks-error-100)" : void 0
63
+ boxShadow: n && !r ? "var(--brycks-focus-ring)" : n && r ? "0 0 0 3px var(--brycks-focus-ring-error)" : void 0
64
64
  };
65
65
  }, D = {
66
66
  position: "absolute",
@@ -1 +1 @@
1
- {"version":3,"file":"DateInput.js","sources":["../../../../src/components/form/DateInput/DateInput.tsx"],"sourcesContent":["/**\n * DateInput Component\n *\n * A styled date input that uses the native date picker.\n * Consistent with other form inputs in the design system.\n */\n\nimport {\n forwardRef,\n useState,\n type CSSProperties,\n type InputHTMLAttributes,\n type ReactNode,\n} from 'react'\nimport { cx } from '../../../utils/styles'\n\nexport type DateInputSize = 'sm' | 'md' | 'lg'\nexport type DateInputVariant = 'outline' | 'filled' | 'flushed'\nexport type DateInputType = 'date' | 'datetime-local' | 'time' | 'month' | 'week'\n\nexport interface DateInputProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size' | 'type'> {\n /** Input size */\n size?: DateInputSize\n /** Input variant */\n variant?: DateInputVariant\n /** Type of date input */\n type?: DateInputType\n /** Input label */\n label?: ReactNode\n /** Helper text below input */\n helperText?: ReactNode\n /** Error message */\n error?: ReactNode\n /** Whether the input is invalid */\n isInvalid?: boolean\n /** Icon on the left side */\n leftIcon?: ReactNode\n /** Custom class name */\n className?: string\n /** Test ID */\n testId?: string\n}\n\nconst sizeConfig: Record<DateInputSize, { height: number; fontSize: number; padding: number; iconSize: number }> = {\n sm: { height: 32, fontSize: 13, padding: 10, iconSize: 14 },\n md: { height: 40, fontSize: 14, padding: 12, iconSize: 16 },\n lg: { height: 48, fontSize: 16, padding: 14, iconSize: 18 },\n}\n\nexport const DateInput = forwardRef<HTMLInputElement, DateInputProps>(function DateInput(\n {\n size = 'md',\n variant = 'outline',\n type = 'date',\n label,\n helperText,\n error,\n isInvalid = false,\n leftIcon,\n disabled = false,\n className,\n style,\n testId,\n ...props\n },\n ref\n) {\n const [isFocused, setIsFocused] = useState(false)\n const [isHovered, setIsHovered] = useState(false)\n const config = sizeConfig[size]\n const hasError = isInvalid || !!error\n\n const containerStyle: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: 6,\n ...style,\n }\n\n const labelStyle: CSSProperties = {\n fontSize: config.fontSize - 1,\n fontWeight: 500,\n color: 'var(--brycks-foreground-default)',\n }\n\n const inputContainerStyle: CSSProperties = {\n position: 'relative',\n display: 'flex',\n alignItems: 'center',\n }\n\n const getInputStyle = (): CSSProperties => {\n const baseStyle: CSSProperties = {\n width: '100%',\n height: config.height,\n fontSize: config.fontSize,\n fontFamily: 'inherit',\n color: 'var(--brycks-foreground-default)',\n backgroundColor: variant === 'filled' ? 'var(--brycks-background-muted)' : 'var(--brycks-background-input)',\n paddingLeft: leftIcon ? config.padding + config.iconSize + 8 : config.padding,\n paddingRight: config.padding,\n transition: 'all 150ms ease-out',\n outline: 'none',\n opacity: disabled ? 0.5 : 1,\n cursor: disabled ? 'not-allowed' : 'pointer',\n }\n\n if (variant === 'flushed') {\n return {\n ...baseStyle,\n border: 'none',\n borderBottom: `2px solid ${\n hasError\n ? 'var(--brycks-error-default)'\n : isFocused\n ? 'var(--brycks-primary-default)'\n : 'var(--brycks-border-default)'\n }`,\n borderRadius: 0,\n paddingLeft: leftIcon ? config.iconSize + 8 : 0,\n paddingRight: 0,\n backgroundColor: 'transparent',\n }\n }\n\n return {\n ...baseStyle,\n border: `1px solid ${\n hasError\n ? 'var(--brycks-error-default)'\n : isFocused\n ? 'var(--brycks-primary-default)'\n : isHovered\n ? 'var(--brycks-border-strong)'\n : 'var(--brycks-border-default)'\n }`,\n borderRadius: 'var(--brycks-radius-md)',\n boxShadow: isFocused && !hasError\n ? '0 0 0 3px var(--brycks-primary-100)'\n : isFocused && hasError\n ? '0 0 0 3px var(--brycks-error-100)'\n : undefined,\n }\n }\n\n const iconStyle: CSSProperties = {\n position: 'absolute',\n left: variant === 'flushed' ? 0 : config.padding,\n color: 'var(--brycks-foreground-muted)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: config.iconSize,\n height: config.iconSize,\n pointerEvents: 'none',\n }\n\n const helperStyle: CSSProperties = {\n fontSize: config.fontSize - 2,\n color: hasError ? 'var(--brycks-error-default)' : 'var(--brycks-foreground-muted)',\n }\n\n return (\n <div\n className={cx('brycks-date-input', `brycks-date-input--${size}`, `brycks-date-input--${variant}`, className)}\n style={containerStyle}\n >\n {label && <label style={labelStyle}>{label}</label>}\n <div\n style={inputContainerStyle}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n >\n {leftIcon && <span style={iconStyle}>{leftIcon}</span>}\n <input\n ref={ref}\n type={type}\n disabled={disabled}\n style={getInputStyle()}\n onFocus={() => setIsFocused(true)}\n onBlur={() => setIsFocused(false)}\n data-testid={testId}\n {...props}\n />\n </div>\n {(helperText || error) && (\n <span style={helperStyle}>{error || helperText}</span>\n )}\n </div>\n )\n})\n\nDateInput.displayName = 'DateInput'\n"],"names":["sizeConfig","DateInput","forwardRef","size","variant","type","label","helperText","error","isInvalid","leftIcon","disabled","className","style","testId","props","ref","isFocused","setIsFocused","useState","isHovered","setIsHovered","config","hasError","containerStyle","labelStyle","inputContainerStyle","getInputStyle","baseStyle","iconStyle","helperStyle","jsxs","cx","jsx"],"mappings":"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"}
1
+ {"version":3,"file":"DateInput.js","sources":["../../../../src/components/form/DateInput/DateInput.tsx"],"sourcesContent":["/**\n * DateInput Component\n *\n * A styled date input that uses the native date picker.\n * Consistent with other form inputs in the design system.\n */\n\nimport {\n forwardRef,\n useState,\n type CSSProperties,\n type InputHTMLAttributes,\n type ReactNode,\n} from 'react'\nimport { cx } from '../../../utils/styles'\n\nexport type DateInputSize = 'sm' | 'md' | 'lg'\nexport type DateInputVariant = 'outline' | 'filled' | 'flushed'\nexport type DateInputType = 'date' | 'datetime-local' | 'time' | 'month' | 'week'\n\nexport interface DateInputProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size' | 'type'> {\n /** Input size */\n size?: DateInputSize\n /** Input variant */\n variant?: DateInputVariant\n /** Type of date input */\n type?: DateInputType\n /** Input label */\n label?: ReactNode\n /** Helper text below input */\n helperText?: ReactNode\n /** Error message */\n error?: ReactNode\n /** Whether the input is invalid */\n isInvalid?: boolean\n /** Icon on the left side */\n leftIcon?: ReactNode\n /** Custom class name */\n className?: string\n /** Test ID */\n testId?: string\n}\n\nconst sizeConfig: Record<DateInputSize, { height: number; fontSize: number; padding: number; iconSize: number }> = {\n sm: { height: 32, fontSize: 13, padding: 10, iconSize: 14 },\n md: { height: 40, fontSize: 14, padding: 12, iconSize: 16 },\n lg: { height: 48, fontSize: 16, padding: 14, iconSize: 18 },\n}\n\nexport const DateInput = forwardRef<HTMLInputElement, DateInputProps>(function DateInput(\n {\n size = 'md',\n variant = 'outline',\n type = 'date',\n label,\n helperText,\n error,\n isInvalid = false,\n leftIcon,\n disabled = false,\n className,\n style,\n testId,\n ...props\n },\n ref\n) {\n const [isFocused, setIsFocused] = useState(false)\n const [isHovered, setIsHovered] = useState(false)\n const config = sizeConfig[size]\n const hasError = isInvalid || !!error\n\n const containerStyle: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: 6,\n ...style,\n }\n\n const labelStyle: CSSProperties = {\n fontSize: config.fontSize - 1,\n fontWeight: 500,\n color: 'var(--brycks-foreground-default)',\n }\n\n const inputContainerStyle: CSSProperties = {\n position: 'relative',\n display: 'flex',\n alignItems: 'center',\n }\n\n const getInputStyle = (): CSSProperties => {\n const baseStyle: CSSProperties = {\n width: '100%',\n height: config.height,\n fontSize: config.fontSize,\n fontFamily: 'inherit',\n color: 'var(--brycks-foreground-default)',\n backgroundColor: variant === 'filled' ? 'var(--brycks-background-muted)' : 'var(--brycks-background-elevated)',\n paddingLeft: leftIcon ? config.padding + config.iconSize + 8 : config.padding,\n paddingRight: config.padding,\n transition: 'all 150ms ease-out',\n outline: 'none',\n opacity: disabled ? 0.5 : 1,\n cursor: disabled ? 'not-allowed' : 'pointer',\n }\n\n if (variant === 'flushed') {\n return {\n ...baseStyle,\n border: 'none',\n borderBottom: `2px solid ${\n hasError\n ? 'var(--brycks-error-default)'\n : isFocused\n ? 'var(--brycks-primary-default)'\n : 'var(--brycks-border-default)'\n }`,\n borderRadius: 0,\n paddingLeft: leftIcon ? config.iconSize + 8 : 0,\n paddingRight: 0,\n backgroundColor: 'transparent',\n }\n }\n\n return {\n ...baseStyle,\n border: `1px solid ${\n hasError\n ? 'var(--brycks-error-default)'\n : isFocused\n ? 'var(--brycks-primary-default)'\n : isHovered\n ? 'var(--brycks-border-strong)'\n : 'var(--brycks-border-default)'\n }`,\n borderRadius: 'var(--brycks-radius-md)',\n boxShadow: isFocused && !hasError\n ? 'var(--brycks-focus-ring)'\n : isFocused && hasError\n ? '0 0 0 3px var(--brycks-focus-ring-error)'\n : undefined,\n }\n }\n\n const iconStyle: CSSProperties = {\n position: 'absolute',\n left: variant === 'flushed' ? 0 : config.padding,\n color: 'var(--brycks-foreground-muted)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: config.iconSize,\n height: config.iconSize,\n pointerEvents: 'none',\n }\n\n const helperStyle: CSSProperties = {\n fontSize: config.fontSize - 2,\n color: hasError ? 'var(--brycks-error-default)' : 'var(--brycks-foreground-muted)',\n }\n\n return (\n <div\n className={cx('brycks-date-input', `brycks-date-input--${size}`, `brycks-date-input--${variant}`, className)}\n style={containerStyle}\n >\n {label && <label style={labelStyle}>{label}</label>}\n <div\n style={inputContainerStyle}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n >\n {leftIcon && <span style={iconStyle}>{leftIcon}</span>}\n <input\n ref={ref}\n type={type}\n disabled={disabled}\n style={getInputStyle()}\n onFocus={() => setIsFocused(true)}\n onBlur={() => setIsFocused(false)}\n data-testid={testId}\n {...props}\n />\n </div>\n {(helperText || error) && (\n <span style={helperStyle}>{error || helperText}</span>\n )}\n </div>\n )\n})\n\nDateInput.displayName = 'DateInput'\n"],"names":["sizeConfig","DateInput","forwardRef","size","variant","type","label","helperText","error","isInvalid","leftIcon","disabled","className","style","testId","props","ref","isFocused","setIsFocused","useState","isHovered","setIsHovered","config","hasError","containerStyle","labelStyle","inputContainerStyle","getInputStyle","baseStyle","iconStyle","helperStyle","jsxs","cx","jsx"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react/jsx-runtime"),i=require("react"),De=require("react-dom"),Me=require("../../../utils/styles.cjs"),r=require("../../../design-system/tokens/spacing.cjs"),h=require("../../../design-system/primitives/sizing.cjs"),f=require("../../../design-system/tokens/typography.cjs"),d=require("../../../design-system/tokens/motion.cjs"),ze={sm:{height:h.componentHeights.sm,fontSize:f.fontSizes.base-1,padding:h.componentPaddingX.sm},md:{height:h.componentHeights.md,fontSize:f.fontSizes.base,padding:h.componentPaddingX.md},lg:{height:h.componentHeights.lg,fontSize:f.fontSizes.md,padding:h.componentPaddingX.lg}},$e=["Su","Mo","Tu","We","Th","Fr","Sa"],Re=["January","February","March","April","May","June","July","August","September","October","November","December"],Ie=n=>`${n.getMonth()+1}/${n.getDate()}/${n.getFullYear()}`;function Pe(){return t.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none","aria-hidden":"true",children:[t.jsx("rect",{x:"2",y:"3",width:"12",height:"11",rx:"2",stroke:"currentColor",strokeWidth:"1.5"}),t.jsx("path",{d:"M2 6h12",stroke:"currentColor",strokeWidth:"1.5"}),t.jsx("path",{d:"M5 1v3M11 1v3",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"})]})}function J({direction:n}){return t.jsx("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none","aria-hidden":"true",children:t.jsx("path",{d:n==="left"?"M10 4l-4 4 4 4":"M6 4l4 4-4 4",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})})}function Te(){return t.jsx("svg",{width:"14",height:"14",viewBox:"0 0 14 14",fill:"none","aria-hidden":"true",children:t.jsx("path",{d:"M4 4l6 6M10 4l-6 6",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"})})}const Ee=(n,s)=>new Date(n,s+1,0).getDate(),Le=(n,s)=>new Date(n,s,1).getDay(),R=(n,s)=>!n||!s?!1:n.getFullYear()===s.getFullYear()&&n.getMonth()===s.getMonth()&&n.getDate()===s.getDate(),We=(n,s,u)=>{if(!s||!u)return!1;const b=n.getTime();return b>s.getTime()&&b<u.getTime()},K=(n,s,u)=>!!(s&&n<s||u&&n>u),G=i.forwardRef(function({value:s,defaultValue:u={start:null,end:null},onChange:b,size:I="md",minDate:C,maxDate:j,placeholder:V="Select date range",disabled:m=!1,isInvalid:P=!1,clearable:T=!0,presets:D,dateFormat:M=Ie,"aria-label":Q="Select date range",className:U,testId:Z},x){const[_,ee]=i.useState(u),[y,k]=i.useState(!1),[E,L]=i.useState(!1),[te,W]=i.useState(()=>{const e=s?.start||u.start||new Date;return{year:e.getFullYear(),month:e.getMonth()}}),[S,p]=i.useState(!1),[B,O]=i.useState(null),w=i.useRef(null),o=s!==void 0?s:_,v=ze[I],g=i.useCallback(e=>{s===void 0&&ee(e),b?.(e)},[s,b]),re=i.useCallback(e=>{K(e,C,j)||(!S||!o.start?(g({start:e,end:null}),p(!0)):(e<o.start?g({start:e,end:o.start}):g({start:o.start,end:e}),p(!1),k(!1)))},[S,o.start,C,j,g]),ne=i.useCallback(e=>{const l=e.getValue();g(l),k(!1),p(!1)},[g]),se=i.useCallback(e=>{e.stopPropagation(),g({start:null,end:null}),p(!1)},[g]),oe=i.useCallback(e=>{e.key==="Escape"&&(k(!1),p(!1))},[]);i.useEffect(()=>{if(!y)return;const e=l=>{w.current?.contains(l.target)||(k(!1),p(!1))};return document.addEventListener("mousedown",e),()=>document.removeEventListener("mousedown",e)},[y]);const[F,ae]=i.useState({top:0,left:0});i.useEffect(()=>{if(!y||!w.current)return;const e=()=>{const l=w.current.getBoundingClientRect();ae({top:l.bottom+window.scrollY+r.spacing[1],left:l.left+window.scrollX})};return e(),window.addEventListener("resize",e),window.addEventListener("scroll",e,!0),()=>{window.removeEventListener("resize",e),window.removeEventListener("scroll",e,!0)}},[y]);const ie=i.useCallback(()=>{W(e=>e.month===0?{year:e.year-1,month:11}:{...e,month:e.month-1})},[]),le=i.useCallback(()=>{W(e=>e.month===11?{year:e.year+1,month:0}:{...e,month:e.month+1})},[]),H=(e=0)=>{let{year:l,month:c}=te;c+=e,c>11&&(c=0,l++);const z=Ee(l,c),xe=Le(l,c),$=[];for(let a=0;a<xe;a++)$.push(null);for(let a=1;a<=z;a++)$.push(new Date(l,c,a));const A=S&&B&&o.start&&!o.end?B:o.end;return t.jsxs("div",{style:{flex:1},children:[t.jsxs("div",{style:pe,children:[e===0&&t.jsx("button",{type:"button","aria-label":"Previous month",style:N,onClick:ie,children:t.jsx(J,{direction:"left"})}),t.jsxs("span",{style:{fontWeight:600},children:[Re[c]," ",l]}),e===1&&t.jsx("button",{type:"button","aria-label":"Next month",style:N,onClick:le,children:t.jsx(J,{direction:"right"})})]}),t.jsx("div",{style:he,children:$e.map(a=>t.jsx("div",{style:be,children:a},a))}),t.jsx("div",{style:me,children:$.map((a,Se)=>{if(!a)return t.jsx("div",{style:Y(!1,!1,!1,!1)},`empty-${Se}`);const we=R(a,o.start),Ce=R(a,A),je=We(a,o.start,A),X=K(a,C,j);return t.jsx("button",{type:"button",disabled:X,style:Y(we||Ce,je,X,R(a,new Date)),onClick:()=>re(a),onMouseEnter:()=>S&&O(a),onMouseLeave:()=>O(null),children:a.getDate()},a.toISOString())})})]})},q=o.start&&o.end?`${M(o.start)} - ${M(o.end)}`:o.start?`${M(o.start)} - ...`:"",ce={position:"relative",display:"inline-flex",width:"100%"},de={position:"relative",display:"flex",alignItems:"center",width:"100%",height:v.height,backgroundColor:m?"var(--brycks-background-muted)":"var(--brycks-background-default)",border:`1px solid ${P?"var(--brycks-error-default)":E?"var(--brycks-primary-default)":"var(--brycks-border-default)"}`,borderRadius:"var(--brycks-radius-md)",transition:`all ${d.durations.fast}ms ${d.easings.easeOut}`,cursor:m?"not-allowed":"pointer",boxShadow:E?"var(--brycks-focus-ring)":void 0,padding:`0 ${v.padding}px`,paddingRight:T&&(o.start||o.end)?r.spacing[10]:v.padding},ue={display:"flex",alignItems:"center",justifyContent:"center",marginRight:r.spacing[2],color:"var(--brycks-foreground-muted)"},ge={flex:1,fontSize:v.fontSize,color:q?"var(--brycks-foreground-default)":"var(--brycks-foreground-muted)"},fe={position:"absolute",right:v.padding,display:"flex",alignItems:"center",justifyContent:"center",width:r.spacing[5],height:r.spacing[5],color:"var(--brycks-foreground-muted)",cursor:"pointer",borderRadius:"var(--brycks-radius-sm)",transition:`all ${d.durations.fast}ms ${d.easings.easeOut}`},ye={position:"absolute",top:F.top,left:F.left,backgroundColor:"var(--brycks-background-elevated)",border:"1px solid var(--brycks-border-default)",borderRadius:"var(--brycks-radius-lg)",boxShadow:"var(--brycks-shadow-lg)",zIndex:"var(--brycks-z-dropdown)",padding:r.spacing[3],display:"flex",gap:r.spacing[4]},pe={display:"flex",alignItems:"center",justifyContent:"space-between",marginBottom:r.spacing[2],minHeight:r.spacing[8],fontSize:f.fontSizes.base},N={display:"flex",alignItems:"center",justifyContent:"center",width:r.spacing[7],height:r.spacing[7],backgroundColor:"transparent",border:"none",borderRadius:"var(--brycks-radius-md)",cursor:"pointer",color:"var(--brycks-foreground-default)",transition:`all ${d.durations.fast}ms ${d.easings.easeOut}`},he={display:"grid",gridTemplateColumns:"repeat(7, 1fr)",gap:r.spacing[.5],marginBottom:r.spacing[1]},be={display:"flex",alignItems:"center",justifyContent:"center",height:r.spacing[7],fontSize:f.fontSizes.xs,fontWeight:600,color:"var(--brycks-foreground-muted)"},me={display:"grid",gridTemplateColumns:"repeat(7, 1fr)",gap:r.spacing[.5]},Y=(e,l,c,z)=>({display:"flex",alignItems:"center",justifyContent:"center",width:r.spacing[8],height:r.spacing[8],fontSize:f.fontSizes.sm,fontWeight:e?600:400,color:c?"var(--brycks-foreground-disabled)":e?"white":"var(--brycks-foreground-default)",backgroundColor:e?"var(--brycks-primary-default)":l?"var(--brycks-primary-50)":"transparent",border:z&&!e?"1px solid var(--brycks-border-strong)":"none",borderRadius:"var(--brycks-radius-md)",cursor:c?"not-allowed":"pointer",opacity:c?.5:1,transition:`all ${d.durations.fast}ms ${d.easings.easeOut}`}),ke={display:"flex",flexDirection:"column",gap:r.spacing[1],borderLeft:"1px solid var(--brycks-border-default)",paddingLeft:r.spacing[3],minWidth:140},ve={display:"flex",alignItems:"center",padding:`${r.spacing[2]}px ${r.spacing[3]}px`,fontSize:f.fontSizes.sm,color:"var(--brycks-foreground-default)",backgroundColor:"transparent",border:"none",borderRadius:"var(--brycks-radius-md)",cursor:"pointer",textAlign:"left",transition:`all ${d.durations.fast}ms ${d.easings.easeOut}`};return t.jsxs("div",{ref:e=>{w.current=e,typeof x=="function"?x(e):x&&(x.current=e)},className:Me.cx("brycks-daterangepicker",`brycks-daterangepicker--${I}`,U),style:ce,"data-testid":Z,onKeyDown:oe,children:[t.jsxs("div",{role:"button",tabIndex:m?-1:0,"aria-label":Q,"aria-expanded":y,"aria-haspopup":"dialog","aria-invalid":P,style:de,onClick:()=>!m&&k(!0),onFocus:()=>L(!0),onBlur:()=>L(!1),children:[t.jsx("span",{style:ue,children:t.jsx(Pe,{})}),t.jsx("span",{style:ge,children:q||V}),T&&(o.start||o.end)&&!m&&t.jsx("button",{type:"button","aria-label":"Clear date range",style:fe,onClick:se,onMouseEnter:e=>{e.currentTarget.style.backgroundColor="var(--brycks-background-muted)",e.currentTarget.style.color="var(--brycks-foreground-default)"},onMouseLeave:e=>{e.currentTarget.style.backgroundColor="transparent",e.currentTarget.style.color="var(--brycks-foreground-muted)"},children:t.jsx(Te,{})})]}),y&&De.createPortal(t.jsxs("div",{role:"dialog","aria-label":"Date range picker",style:ye,children:[H(0),H(1),D&&D.length>0&&t.jsxs("div",{style:ke,children:[t.jsx("div",{style:{fontSize:f.fontSizes.xs,fontWeight:600,color:"var(--brycks-foreground-muted)",marginBottom:r.spacing[1]},children:"Presets"}),D.map((e,l)=>t.jsx("button",{type:"button",style:ve,onClick:()=>ne(e),onMouseEnter:c=>{c.currentTarget.style.backgroundColor="var(--brycks-background-muted)"},onMouseLeave:c=>{c.currentTarget.style.backgroundColor="transparent"},children:e.label},l))]})]}),document.body)]})});G.displayName="DateRangePicker";exports.DateRangePicker=G;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react/jsx-runtime"),i=require("react"),De=require("react-dom"),Me=require("../../../utils/styles.cjs"),r=require("../../../design-system/tokens/spacing.cjs"),h=require("../../../design-system/primitives/sizing.cjs"),f=require("../../../design-system/tokens/typography.cjs"),d=require("../../../design-system/tokens/motion.cjs"),ze={sm:{height:h.componentHeights.sm,fontSize:f.fontSizes.base-1,padding:h.componentPaddingX.sm},md:{height:h.componentHeights.md,fontSize:f.fontSizes.base,padding:h.componentPaddingX.md},lg:{height:h.componentHeights.lg,fontSize:f.fontSizes.md,padding:h.componentPaddingX.lg}},$e=["Su","Mo","Tu","We","Th","Fr","Sa"],Re=["January","February","March","April","May","June","July","August","September","October","November","December"],Ie=n=>`${n.getMonth()+1}/${n.getDate()}/${n.getFullYear()}`;function Pe(){return t.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none","aria-hidden":"true",children:[t.jsx("rect",{x:"2",y:"3",width:"12",height:"11",rx:"2",stroke:"currentColor",strokeWidth:"1.5"}),t.jsx("path",{d:"M2 6h12",stroke:"currentColor",strokeWidth:"1.5"}),t.jsx("path",{d:"M5 1v3M11 1v3",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"})]})}function J({direction:n}){return t.jsx("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none","aria-hidden":"true",children:t.jsx("path",{d:n==="left"?"M10 4l-4 4 4 4":"M6 4l4 4-4 4",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})})}function Te(){return t.jsx("svg",{width:"14",height:"14",viewBox:"0 0 14 14",fill:"none","aria-hidden":"true",children:t.jsx("path",{d:"M4 4l6 6M10 4l-6 6",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"})})}const Ee=(n,s)=>new Date(n,s+1,0).getDate(),Le=(n,s)=>new Date(n,s,1).getDay(),R=(n,s)=>!n||!s?!1:n.getFullYear()===s.getFullYear()&&n.getMonth()===s.getMonth()&&n.getDate()===s.getDate(),We=(n,s,u)=>{if(!s||!u)return!1;const b=n.getTime();return b>s.getTime()&&b<u.getTime()},K=(n,s,u)=>!!(s&&n<s||u&&n>u),G=i.forwardRef(function({value:s,defaultValue:u={start:null,end:null},onChange:b,size:I="md",minDate:C,maxDate:j,placeholder:V="Select date range",disabled:m=!1,isInvalid:P=!1,clearable:T=!0,presets:D,dateFormat:M=Ie,"aria-label":Q="Select date range",className:U,testId:Z},x){const[_,ee]=i.useState(u),[y,k]=i.useState(!1),[E,L]=i.useState(!1),[te,W]=i.useState(()=>{const e=s?.start||u.start||new Date;return{year:e.getFullYear(),month:e.getMonth()}}),[S,p]=i.useState(!1),[B,O]=i.useState(null),w=i.useRef(null),o=s!==void 0?s:_,v=ze[I],g=i.useCallback(e=>{s===void 0&&ee(e),b?.(e)},[s,b]),re=i.useCallback(e=>{K(e,C,j)||(!S||!o.start?(g({start:e,end:null}),p(!0)):(e<o.start?g({start:e,end:o.start}):g({start:o.start,end:e}),p(!1),k(!1)))},[S,o.start,C,j,g]),ne=i.useCallback(e=>{const l=e.getValue();g(l),k(!1),p(!1)},[g]),se=i.useCallback(e=>{e.stopPropagation(),g({start:null,end:null}),p(!1)},[g]),oe=i.useCallback(e=>{e.key==="Escape"&&(k(!1),p(!1))},[]);i.useEffect(()=>{if(!y)return;const e=l=>{w.current?.contains(l.target)||(k(!1),p(!1))};return document.addEventListener("mousedown",e),()=>document.removeEventListener("mousedown",e)},[y]);const[F,ae]=i.useState({top:0,left:0});i.useEffect(()=>{if(!y||!w.current)return;const e=()=>{const l=w.current.getBoundingClientRect();ae({top:l.bottom+window.scrollY+r.spacing[1],left:l.left+window.scrollX})};return e(),window.addEventListener("resize",e),window.addEventListener("scroll",e,!0),()=>{window.removeEventListener("resize",e),window.removeEventListener("scroll",e,!0)}},[y]);const ie=i.useCallback(()=>{W(e=>e.month===0?{year:e.year-1,month:11}:{...e,month:e.month-1})},[]),le=i.useCallback(()=>{W(e=>e.month===11?{year:e.year+1,month:0}:{...e,month:e.month+1})},[]),H=(e=0)=>{let{year:l,month:c}=te;c+=e,c>11&&(c=0,l++);const z=Ee(l,c),xe=Le(l,c),$=[];for(let a=0;a<xe;a++)$.push(null);for(let a=1;a<=z;a++)$.push(new Date(l,c,a));const A=S&&B&&o.start&&!o.end?B:o.end;return t.jsxs("div",{style:{flex:1},children:[t.jsxs("div",{style:pe,children:[e===0&&t.jsx("button",{type:"button","aria-label":"Previous month",style:N,onClick:ie,children:t.jsx(J,{direction:"left"})}),t.jsxs("span",{style:{fontWeight:600},children:[Re[c]," ",l]}),e===1&&t.jsx("button",{type:"button","aria-label":"Next month",style:N,onClick:le,children:t.jsx(J,{direction:"right"})})]}),t.jsx("div",{style:he,children:$e.map(a=>t.jsx("div",{style:be,children:a},a))}),t.jsx("div",{style:me,children:$.map((a,Se)=>{if(!a)return t.jsx("div",{style:Y(!1,!1,!1,!1)},`empty-${Se}`);const we=R(a,o.start),Ce=R(a,A),je=We(a,o.start,A),X=K(a,C,j);return t.jsx("button",{type:"button",disabled:X,style:Y(we||Ce,je,X,R(a,new Date)),onClick:()=>re(a),onMouseEnter:()=>S&&O(a),onMouseLeave:()=>O(null),children:a.getDate()},a.toISOString())})})]})},q=o.start&&o.end?`${M(o.start)} - ${M(o.end)}`:o.start?`${M(o.start)} - ...`:"",ce={position:"relative",display:"inline-flex",width:"100%"},de={position:"relative",display:"flex",alignItems:"center",width:"100%",height:v.height,backgroundColor:m?"var(--brycks-background-muted)":"var(--brycks-background-default)",border:`1px solid ${P?"var(--brycks-error-default)":E?"var(--brycks-primary-default)":"var(--brycks-border-default)"}`,borderRadius:"var(--brycks-radius-md)",transition:`all ${d.durations.fast}ms ${d.easings.easeOut}`,cursor:m?"not-allowed":"pointer",boxShadow:E?"var(--brycks-focus-ring)":void 0,padding:`0 ${v.padding}px`,paddingRight:T&&(o.start||o.end)?r.spacing[10]:v.padding},ue={display:"flex",alignItems:"center",justifyContent:"center",marginRight:r.spacing[2],color:"var(--brycks-foreground-muted)"},ge={flex:1,fontSize:v.fontSize,color:q?"var(--brycks-foreground-default)":"var(--brycks-foreground-muted)"},fe={position:"absolute",right:v.padding,display:"flex",alignItems:"center",justifyContent:"center",width:r.spacing[5],height:r.spacing[5],color:"var(--brycks-foreground-muted)",cursor:"pointer",borderRadius:"var(--brycks-radius-sm)",transition:`all ${d.durations.fast}ms ${d.easings.easeOut}`},ye={position:"absolute",top:F.top,left:F.left,backgroundColor:"var(--brycks-background-elevated)",border:"1px solid var(--brycks-border-default)",borderRadius:"var(--brycks-radius-lg)",boxShadow:"var(--brycks-shadow-lg)",zIndex:"var(--brycks-z-dropdown)",padding:r.spacing[3],display:"flex",gap:r.spacing[4]},pe={display:"flex",alignItems:"center",justifyContent:"space-between",marginBottom:r.spacing[2],minHeight:r.spacing[8],fontSize:f.fontSizes.base},N={display:"flex",alignItems:"center",justifyContent:"center",width:r.spacing[7],height:r.spacing[7],backgroundColor:"transparent",border:"none",borderRadius:"var(--brycks-radius-md)",cursor:"pointer",color:"var(--brycks-foreground-default)",transition:`all ${d.durations.fast}ms ${d.easings.easeOut}`},he={display:"grid",gridTemplateColumns:"repeat(7, 1fr)",gap:r.spacing[.5],marginBottom:r.spacing[1]},be={display:"flex",alignItems:"center",justifyContent:"center",height:r.spacing[7],fontSize:f.fontSizes.xs,fontWeight:600,color:"var(--brycks-foreground-muted)"},me={display:"grid",gridTemplateColumns:"repeat(7, 1fr)",gap:r.spacing[.5]},Y=(e,l,c,z)=>({display:"flex",alignItems:"center",justifyContent:"center",width:r.spacing[8],height:r.spacing[8],fontSize:f.fontSizes.sm,fontWeight:e?600:400,color:c?"var(--brycks-foreground-disabled)":e?"var(--brycks-primary-foreground)":"var(--brycks-foreground-default)",backgroundColor:e?"var(--brycks-primary-default)":l?"var(--brycks-primary-muted)":"transparent",border:z&&!e?"1px solid var(--brycks-border-strong)":"none",borderRadius:"var(--brycks-radius-md)",cursor:c?"not-allowed":"pointer",opacity:c?.5:1,transition:`all ${d.durations.fast}ms ${d.easings.easeOut}`}),ke={display:"flex",flexDirection:"column",gap:r.spacing[1],borderLeft:"1px solid var(--brycks-border-default)",paddingLeft:r.spacing[3],minWidth:140},ve={display:"flex",alignItems:"center",padding:`${r.spacing[2]}px ${r.spacing[3]}px`,fontSize:f.fontSizes.sm,color:"var(--brycks-foreground-default)",backgroundColor:"transparent",border:"none",borderRadius:"var(--brycks-radius-md)",cursor:"pointer",textAlign:"left",transition:`all ${d.durations.fast}ms ${d.easings.easeOut}`};return t.jsxs("div",{ref:e=>{w.current=e,typeof x=="function"?x(e):x&&(x.current=e)},className:Me.cx("brycks-daterangepicker",`brycks-daterangepicker--${I}`,U),style:ce,"data-testid":Z,onKeyDown:oe,children:[t.jsxs("div",{role:"button",tabIndex:m?-1:0,"aria-label":Q,"aria-expanded":y,"aria-haspopup":"dialog","aria-invalid":P,style:de,onClick:()=>!m&&k(!0),onFocus:()=>L(!0),onBlur:()=>L(!1),children:[t.jsx("span",{style:ue,children:t.jsx(Pe,{})}),t.jsx("span",{style:ge,children:q||V}),T&&(o.start||o.end)&&!m&&t.jsx("button",{type:"button","aria-label":"Clear date range",style:fe,onClick:se,onMouseEnter:e=>{e.currentTarget.style.backgroundColor="var(--brycks-background-muted)",e.currentTarget.style.color="var(--brycks-foreground-default)"},onMouseLeave:e=>{e.currentTarget.style.backgroundColor="transparent",e.currentTarget.style.color="var(--brycks-foreground-muted)"},children:t.jsx(Te,{})})]}),y&&De.createPortal(t.jsxs("div",{role:"dialog","aria-label":"Date range picker",style:ye,children:[H(0),H(1),D&&D.length>0&&t.jsxs("div",{style:ke,children:[t.jsx("div",{style:{fontSize:f.fontSizes.xs,fontWeight:600,color:"var(--brycks-foreground-muted)",marginBottom:r.spacing[1]},children:"Presets"}),D.map((e,l)=>t.jsx("button",{type:"button",style:ve,onClick:()=>ne(e),onMouseEnter:c=>{c.currentTarget.style.backgroundColor="var(--brycks-background-muted)"},onMouseLeave:c=>{c.currentTarget.style.backgroundColor="transparent"},children:e.label},l))]})]}),document.body)]})});G.displayName="DateRangePicker";exports.DateRangePicker=G;
2
2
  //# sourceMappingURL=DateRangePicker.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"DateRangePicker.cjs","sources":["../../../../src/components/form/DateRangePicker/DateRangePicker.tsx"],"sourcesContent":["/**\n * DateRangePicker Component\n *\n * A date range selection component with calendar UI.\n * Supports preset ranges and custom date selection.\n *\n * @module components/form/DateRangePicker\n */\n\nimport {\n forwardRef,\n useState,\n useCallback,\n useRef,\n useEffect,\n type CSSProperties,\n type KeyboardEvent,\n} from 'react'\nimport { createPortal } from 'react-dom'\nimport { cx } from '../../../utils/styles'\nimport { spacing, fontSizes, durations, easings } from '../../../design-system'\nimport { componentHeights, componentPaddingX } from '../../../design-system/primitives'\n\nexport type DateRangePickerSize = 'sm' | 'md' | 'lg'\n\nexport interface DateRange {\n start: Date | null\n end: Date | null\n}\n\nexport interface DateRangePreset {\n label: string\n getValue: () => DateRange\n}\n\nexport interface DateRangePickerProps {\n /** Current date range value */\n value?: DateRange\n /** Default date range value (uncontrolled) */\n defaultValue?: DateRange\n /** Callback when date range changes */\n onChange?: (value: DateRange) => void\n /** Component size */\n size?: DateRangePickerSize\n /** Minimum selectable date */\n minDate?: Date\n /** Maximum selectable date */\n maxDate?: Date\n /** Placeholder text */\n placeholder?: string\n /** Whether the input is disabled */\n disabled?: boolean\n /** Whether the input is invalid */\n isInvalid?: boolean\n /** Whether to allow clearing */\n clearable?: boolean\n /** Preset date ranges */\n presets?: DateRangePreset[]\n /** Date format display */\n dateFormat?: (date: Date) => string\n /** Label for accessibility */\n 'aria-label'?: string\n /** Custom class name */\n className?: string\n /** Test ID */\n testId?: string\n}\n\nconst sizeConfig: Record<DateRangePickerSize, { height: number; fontSize: number; padding: number }> = {\n sm: { height: componentHeights.sm, fontSize: fontSizes.base - 1, padding: componentPaddingX.sm },\n md: { height: componentHeights.md, fontSize: fontSizes.base, padding: componentPaddingX.md },\n lg: { height: componentHeights.lg, fontSize: fontSizes.md, padding: componentPaddingX.lg },\n}\n\nconst DAYS = ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa']\nconst MONTHS = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']\n\nconst defaultDateFormat = (date: Date): string => {\n return `${date.getMonth() + 1}/${date.getDate()}/${date.getFullYear()}`\n}\n\nfunction CalendarIcon() {\n return (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\n <rect x=\"2\" y=\"3\" width=\"12\" height=\"11\" rx=\"2\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"M2 6h12\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"M5 1v3M11 1v3\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n )\n}\n\nfunction ChevronIcon({ direction }: { direction: 'left' | 'right' }) {\n return (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\n <path\n d={direction === 'left' ? 'M10 4l-4 4 4 4' : 'M6 4l4 4-4 4'}\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n )\n}\n\nfunction ClearIcon() {\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M4 4l6 6M10 4l-6 6\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n )\n}\n\nconst getDaysInMonth = (year: number, month: number): number => {\n return new Date(year, month + 1, 0).getDate()\n}\n\nconst getFirstDayOfMonth = (year: number, month: number): number => {\n return new Date(year, month, 1).getDay()\n}\n\nconst isSameDay = (date1: Date | null, date2: Date | null): boolean => {\n if (!date1 || !date2) return false\n return (\n date1.getFullYear() === date2.getFullYear() &&\n date1.getMonth() === date2.getMonth() &&\n date1.getDate() === date2.getDate()\n )\n}\n\nconst isInRange = (date: Date, start: Date | null, end: Date | null): boolean => {\n if (!start || !end) return false\n const time = date.getTime()\n return time > start.getTime() && time < end.getTime()\n}\n\nconst isDateDisabled = (date: Date, minDate?: Date, maxDate?: Date): boolean => {\n if (minDate && date < minDate) return true\n if (maxDate && date > maxDate) return true\n return false\n}\n\nexport const DateRangePicker = forwardRef<HTMLDivElement, DateRangePickerProps>(function DateRangePicker(\n {\n value: controlledValue,\n defaultValue = { start: null, end: null },\n onChange,\n size = 'md',\n minDate,\n maxDate,\n placeholder = 'Select date range',\n disabled = false,\n isInvalid = false,\n clearable = true,\n presets,\n dateFormat = defaultDateFormat,\n 'aria-label': ariaLabel = 'Select date range',\n className,\n testId,\n },\n ref\n) {\n const [internalValue, setInternalValue] = useState<DateRange>(defaultValue)\n const [isOpen, setIsOpen] = useState(false)\n const [isFocused, setIsFocused] = useState(false)\n const [viewDate, setViewDate] = useState(() => {\n const initial = controlledValue?.start || defaultValue.start || new Date()\n return { year: initial.getFullYear(), month: initial.getMonth() }\n })\n const [selectingEnd, setSelectingEnd] = useState(false)\n const [hoverDate, setHoverDate] = useState<Date | null>(null)\n\n const containerRef = useRef<HTMLDivElement>(null)\n\n const value = controlledValue !== undefined ? controlledValue : internalValue\n const config = sizeConfig[size]\n\n const updateValue = useCallback(\n (newValue: DateRange) => {\n if (controlledValue === undefined) {\n setInternalValue(newValue)\n }\n onChange?.(newValue)\n },\n [controlledValue, onChange]\n )\n\n const handleDateClick = useCallback(\n (date: Date) => {\n if (isDateDisabled(date, minDate, maxDate)) return\n\n if (!selectingEnd || !value.start) {\n // Start new selection\n updateValue({ start: date, end: null })\n setSelectingEnd(true)\n } else {\n // Complete selection\n if (date < value.start) {\n updateValue({ start: date, end: value.start })\n } else {\n updateValue({ start: value.start, end: date })\n }\n setSelectingEnd(false)\n setIsOpen(false)\n }\n },\n [selectingEnd, value.start, minDate, maxDate, updateValue]\n )\n\n const handlePresetClick = useCallback(\n (preset: DateRangePreset) => {\n const newValue = preset.getValue()\n updateValue(newValue)\n setIsOpen(false)\n setSelectingEnd(false)\n },\n [updateValue]\n )\n\n const handleClear = useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation()\n updateValue({ start: null, end: null })\n setSelectingEnd(false)\n },\n [updateValue]\n )\n\n const handleKeyDown = useCallback(\n (e: KeyboardEvent<HTMLDivElement>) => {\n if (e.key === 'Escape') {\n setIsOpen(false)\n setSelectingEnd(false)\n }\n },\n []\n )\n\n // Close on outside click\n useEffect(() => {\n if (!isOpen) return\n\n const handleClick = (e: MouseEvent) => {\n if (!containerRef.current?.contains(e.target as Node)) {\n setIsOpen(false)\n setSelectingEnd(false)\n }\n }\n\n document.addEventListener('mousedown', handleClick)\n return () => document.removeEventListener('mousedown', handleClick)\n }, [isOpen])\n\n // Calculate dropdown position\n const [dropdownPosition, setDropdownPosition] = useState({ top: 0, left: 0 })\n\n useEffect(() => {\n if (!isOpen || !containerRef.current) return\n\n const updatePosition = () => {\n const rect = containerRef.current!.getBoundingClientRect()\n setDropdownPosition({\n top: rect.bottom + window.scrollY + spacing[1],\n left: rect.left + window.scrollX,\n })\n }\n\n updatePosition()\n window.addEventListener('resize', updatePosition)\n window.addEventListener('scroll', updatePosition, true)\n\n return () => {\n window.removeEventListener('resize', updatePosition)\n window.removeEventListener('scroll', updatePosition, true)\n }\n }, [isOpen])\n\n const goToPrevMonth = useCallback(() => {\n setViewDate((prev) => {\n if (prev.month === 0) {\n return { year: prev.year - 1, month: 11 }\n }\n return { ...prev, month: prev.month - 1 }\n })\n }, [])\n\n const goToNextMonth = useCallback(() => {\n setViewDate((prev) => {\n if (prev.month === 11) {\n return { year: prev.year + 1, month: 0 }\n }\n return { ...prev, month: prev.month + 1 }\n })\n }, [])\n\n // Generate calendar days\n const renderCalendar = (monthOffset: number = 0) => {\n let { year, month } = viewDate\n month += monthOffset\n if (month > 11) {\n month = 0\n year++\n }\n\n const daysInMonth = getDaysInMonth(year, month)\n const firstDay = getFirstDayOfMonth(year, month)\n const days: (Date | null)[] = []\n\n // Empty cells for days before the first day\n for (let i = 0; i < firstDay; i++) {\n days.push(null)\n }\n\n // Days of the month\n for (let i = 1; i <= daysInMonth; i++) {\n days.push(new Date(year, month, i))\n }\n\n const effectiveEnd = selectingEnd && hoverDate && value.start && !value.end ? hoverDate : value.end\n\n return (\n <div style={{ flex: 1 }}>\n <div style={calendarHeaderStyle}>\n {monthOffset === 0 && (\n <button\n type=\"button\"\n aria-label=\"Previous month\"\n style={navButtonStyle}\n onClick={goToPrevMonth}\n >\n <ChevronIcon direction=\"left\" />\n </button>\n )}\n <span style={{ fontWeight: 600 }}>\n {MONTHS[month]} {year}\n </span>\n {monthOffset === 1 && (\n <button\n type=\"button\"\n aria-label=\"Next month\"\n style={navButtonStyle}\n onClick={goToNextMonth}\n >\n <ChevronIcon direction=\"right\" />\n </button>\n )}\n </div>\n <div style={daysHeaderStyle}>\n {DAYS.map((day) => (\n <div key={day} style={dayHeaderStyle}>\n {day}\n </div>\n ))}\n </div>\n <div style={daysGridStyle}>\n {days.map((date, index) => {\n if (!date) {\n return <div key={`empty-${index}`} style={dayStyle(false, false, false, false)} />\n }\n\n const isStart = isSameDay(date, value.start)\n const isEnd = isSameDay(date, effectiveEnd)\n const isRange = isInRange(date, value.start, effectiveEnd)\n const isDisabled = isDateDisabled(date, minDate, maxDate)\n\n return (\n <button\n key={date.toISOString()}\n type=\"button\"\n disabled={isDisabled}\n style={dayStyle(isStart || isEnd, isRange, isDisabled, isSameDay(date, new Date()))}\n onClick={() => handleDateClick(date)}\n onMouseEnter={() => selectingEnd && setHoverDate(date)}\n onMouseLeave={() => setHoverDate(null)}\n >\n {date.getDate()}\n </button>\n )\n })}\n </div>\n </div>\n )\n }\n\n const displayValue = value.start && value.end\n ? `${dateFormat(value.start)} - ${dateFormat(value.end)}`\n : value.start\n ? `${dateFormat(value.start)} - ...`\n : ''\n\n const containerStyle: CSSProperties = {\n position: 'relative',\n display: 'inline-flex',\n width: '100%',\n }\n\n const inputWrapperStyle: CSSProperties = {\n position: 'relative',\n display: 'flex',\n alignItems: 'center',\n width: '100%',\n height: config.height,\n backgroundColor: disabled ? 'var(--brycks-background-muted)' : 'var(--brycks-background-default)',\n border: `1px solid ${\n isInvalid\n ? 'var(--brycks-error-default)'\n : isFocused\n ? 'var(--brycks-primary-default)'\n : 'var(--brycks-border-default)'\n }`,\n borderRadius: 'var(--brycks-radius-md)',\n transition: `all ${durations.fast}ms ${easings.easeOut}`,\n cursor: disabled ? 'not-allowed' : 'pointer',\n boxShadow: isFocused ? 'var(--brycks-focus-ring)' : undefined,\n padding: `0 ${config.padding}px`,\n paddingRight: clearable && (value.start || value.end) ? spacing[10] : config.padding,\n }\n\n const iconStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n marginRight: spacing[2],\n color: 'var(--brycks-foreground-muted)',\n }\n\n const textStyle: CSSProperties = {\n flex: 1,\n fontSize: config.fontSize,\n color: displayValue ? 'var(--brycks-foreground-default)' : 'var(--brycks-foreground-muted)',\n }\n\n const clearButtonStyle: CSSProperties = {\n position: 'absolute',\n right: config.padding,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: spacing[5],\n height: spacing[5],\n color: 'var(--brycks-foreground-muted)',\n cursor: 'pointer',\n borderRadius: 'var(--brycks-radius-sm)',\n transition: `all ${durations.fast}ms ${easings.easeOut}`,\n }\n\n const dropdownStyle: CSSProperties = {\n position: 'absolute',\n top: dropdownPosition.top,\n left: dropdownPosition.left,\n backgroundColor: 'var(--brycks-background-elevated)',\n border: '1px solid var(--brycks-border-default)',\n borderRadius: 'var(--brycks-radius-lg)',\n boxShadow: 'var(--brycks-shadow-lg)',\n zIndex: 'var(--brycks-z-dropdown)' as unknown as number,\n padding: spacing[3],\n display: 'flex',\n gap: spacing[4],\n }\n\n const calendarHeaderStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n marginBottom: spacing[2],\n minHeight: spacing[8],\n fontSize: fontSizes.base,\n }\n\n const navButtonStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: spacing[7],\n height: spacing[7],\n backgroundColor: 'transparent',\n border: 'none',\n borderRadius: 'var(--brycks-radius-md)',\n cursor: 'pointer',\n color: 'var(--brycks-foreground-default)',\n transition: `all ${durations.fast}ms ${easings.easeOut}`,\n }\n\n const daysHeaderStyle: CSSProperties = {\n display: 'grid',\n gridTemplateColumns: 'repeat(7, 1fr)',\n gap: spacing[0.5],\n marginBottom: spacing[1],\n }\n\n const dayHeaderStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n height: spacing[7],\n fontSize: fontSizes.xs,\n fontWeight: 600,\n color: 'var(--brycks-foreground-muted)',\n }\n\n const daysGridStyle: CSSProperties = {\n display: 'grid',\n gridTemplateColumns: 'repeat(7, 1fr)',\n gap: spacing[0.5],\n }\n\n const dayStyle = (isSelected: boolean, isRange: boolean, isDisabled: boolean, isToday: boolean): CSSProperties => ({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: spacing[8],\n height: spacing[8],\n fontSize: fontSizes.sm,\n fontWeight: isSelected ? 600 : 400,\n color: isDisabled\n ? 'var(--brycks-foreground-disabled)'\n : isSelected\n ? 'white'\n : 'var(--brycks-foreground-default)',\n backgroundColor: isSelected\n ? 'var(--brycks-primary-default)'\n : isRange\n ? 'var(--brycks-primary-50)'\n : 'transparent',\n border: isToday && !isSelected ? '1px solid var(--brycks-border-strong)' : 'none',\n borderRadius: 'var(--brycks-radius-md)',\n cursor: isDisabled ? 'not-allowed' : 'pointer',\n opacity: isDisabled ? 0.5 : 1,\n transition: `all ${durations.fast}ms ${easings.easeOut}`,\n })\n\n const presetsStyle: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: spacing[1],\n borderLeft: '1px solid var(--brycks-border-default)',\n paddingLeft: spacing[3],\n minWidth: 140,\n }\n\n const presetButtonStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n padding: `${spacing[2]}px ${spacing[3]}px`,\n fontSize: fontSizes.sm,\n color: 'var(--brycks-foreground-default)',\n backgroundColor: 'transparent',\n border: 'none',\n borderRadius: 'var(--brycks-radius-md)',\n cursor: 'pointer',\n textAlign: 'left',\n transition: `all ${durations.fast}ms ${easings.easeOut}`,\n }\n\n return (\n <div\n ref={(node) => {\n (containerRef as React.MutableRefObject<HTMLDivElement | null>).current = node\n if (typeof ref === 'function') ref(node)\n else if (ref) ref.current = node\n }}\n className={cx('brycks-daterangepicker', `brycks-daterangepicker--${size}`, className)}\n style={containerStyle}\n data-testid={testId}\n onKeyDown={handleKeyDown}\n >\n <div\n role=\"button\"\n tabIndex={disabled ? -1 : 0}\n aria-label={ariaLabel}\n aria-expanded={isOpen}\n aria-haspopup=\"dialog\"\n aria-invalid={isInvalid}\n style={inputWrapperStyle}\n onClick={() => !disabled && setIsOpen(true)}\n onFocus={() => setIsFocused(true)}\n onBlur={() => setIsFocused(false)}\n >\n <span style={iconStyle}>\n <CalendarIcon />\n </span>\n <span style={textStyle}>{displayValue || placeholder}</span>\n {clearable && (value.start || value.end) && !disabled && (\n <button\n type=\"button\"\n aria-label=\"Clear date range\"\n style={clearButtonStyle}\n onClick={handleClear}\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor = 'var(--brycks-background-muted)'\n e.currentTarget.style.color = 'var(--brycks-foreground-default)'\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'transparent'\n e.currentTarget.style.color = 'var(--brycks-foreground-muted)'\n }}\n >\n <ClearIcon />\n </button>\n )}\n </div>\n\n {isOpen &&\n createPortal(\n <div role=\"dialog\" aria-label=\"Date range picker\" style={dropdownStyle}>\n {renderCalendar(0)}\n {renderCalendar(1)}\n {presets && presets.length > 0 && (\n <div style={presetsStyle}>\n <div style={{ fontSize: fontSizes.xs, fontWeight: 600, color: 'var(--brycks-foreground-muted)', marginBottom: spacing[1] }}>\n Presets\n </div>\n {presets.map((preset, index) => (\n <button\n key={index}\n type=\"button\"\n style={presetButtonStyle}\n onClick={() => handlePresetClick(preset)}\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor = 'var(--brycks-background-muted)'\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'transparent'\n }}\n >\n {preset.label}\n </button>\n ))}\n </div>\n )}\n </div>,\n document.body\n )}\n </div>\n )\n})\n\nDateRangePicker.displayName = 'DateRangePicker'\n"],"names":["sizeConfig","componentHeights","fontSizes","componentPaddingX","DAYS","MONTHS","defaultDateFormat","date","CalendarIcon","jsxs","jsx","ChevronIcon","direction","ClearIcon","getDaysInMonth","year","month","getFirstDayOfMonth","isSameDay","date1","date2","isInRange","start","end","time","isDateDisabled","minDate","maxDate","DateRangePicker","forwardRef","controlledValue","defaultValue","onChange","size","placeholder","disabled","isInvalid","clearable","presets","dateFormat","ariaLabel","className","testId","ref","internalValue","setInternalValue","useState","isOpen","setIsOpen","isFocused","setIsFocused","viewDate","setViewDate","initial","selectingEnd","setSelectingEnd","hoverDate","setHoverDate","containerRef","useRef","value","config","updateValue","useCallback","newValue","handleDateClick","handlePresetClick","preset","handleClear","handleKeyDown","useEffect","handleClick","e","dropdownPosition","setDropdownPosition","updatePosition","rect","spacing","goToPrevMonth","prev","goToNextMonth","renderCalendar","monthOffset","daysInMonth","firstDay","days","i","effectiveEnd","calendarHeaderStyle","navButtonStyle","daysHeaderStyle","day","dayHeaderStyle","daysGridStyle","index","dayStyle","isStart","isEnd","isRange","isDisabled","displayValue","containerStyle","inputWrapperStyle","durations","easings","iconStyle","textStyle","clearButtonStyle","dropdownStyle","isSelected","isToday","presetsStyle","presetButtonStyle","node","cx","createPortal"],"mappings":"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"}
1
+ {"version":3,"file":"DateRangePicker.cjs","sources":["../../../../src/components/form/DateRangePicker/DateRangePicker.tsx"],"sourcesContent":["/**\n * DateRangePicker Component\n *\n * A date range selection component with calendar UI.\n * Supports preset ranges and custom date selection.\n *\n * @module components/form/DateRangePicker\n */\n\nimport {\n forwardRef,\n useState,\n useCallback,\n useRef,\n useEffect,\n type CSSProperties,\n type KeyboardEvent,\n} from 'react'\nimport { createPortal } from 'react-dom'\nimport { cx } from '../../../utils/styles'\nimport { spacing, fontSizes, durations, easings } from '../../../design-system'\nimport { componentHeights, componentPaddingX } from '../../../design-system/primitives'\n\nexport type DateRangePickerSize = 'sm' | 'md' | 'lg'\n\nexport interface DateRange {\n start: Date | null\n end: Date | null\n}\n\nexport interface DateRangePreset {\n label: string\n getValue: () => DateRange\n}\n\nexport interface DateRangePickerProps {\n /** Current date range value */\n value?: DateRange\n /** Default date range value (uncontrolled) */\n defaultValue?: DateRange\n /** Callback when date range changes */\n onChange?: (value: DateRange) => void\n /** Component size */\n size?: DateRangePickerSize\n /** Minimum selectable date */\n minDate?: Date\n /** Maximum selectable date */\n maxDate?: Date\n /** Placeholder text */\n placeholder?: string\n /** Whether the input is disabled */\n disabled?: boolean\n /** Whether the input is invalid */\n isInvalid?: boolean\n /** Whether to allow clearing */\n clearable?: boolean\n /** Preset date ranges */\n presets?: DateRangePreset[]\n /** Date format display */\n dateFormat?: (date: Date) => string\n /** Label for accessibility */\n 'aria-label'?: string\n /** Custom class name */\n className?: string\n /** Test ID */\n testId?: string\n}\n\nconst sizeConfig: Record<DateRangePickerSize, { height: number; fontSize: number; padding: number }> = {\n sm: { height: componentHeights.sm, fontSize: fontSizes.base - 1, padding: componentPaddingX.sm },\n md: { height: componentHeights.md, fontSize: fontSizes.base, padding: componentPaddingX.md },\n lg: { height: componentHeights.lg, fontSize: fontSizes.md, padding: componentPaddingX.lg },\n}\n\nconst DAYS = ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa']\nconst MONTHS = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']\n\nconst defaultDateFormat = (date: Date): string => {\n return `${date.getMonth() + 1}/${date.getDate()}/${date.getFullYear()}`\n}\n\nfunction CalendarIcon() {\n return (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\n <rect x=\"2\" y=\"3\" width=\"12\" height=\"11\" rx=\"2\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"M2 6h12\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"M5 1v3M11 1v3\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n )\n}\n\nfunction ChevronIcon({ direction }: { direction: 'left' | 'right' }) {\n return (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\n <path\n d={direction === 'left' ? 'M10 4l-4 4 4 4' : 'M6 4l4 4-4 4'}\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n )\n}\n\nfunction ClearIcon() {\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M4 4l6 6M10 4l-6 6\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n )\n}\n\nconst getDaysInMonth = (year: number, month: number): number => {\n return new Date(year, month + 1, 0).getDate()\n}\n\nconst getFirstDayOfMonth = (year: number, month: number): number => {\n return new Date(year, month, 1).getDay()\n}\n\nconst isSameDay = (date1: Date | null, date2: Date | null): boolean => {\n if (!date1 || !date2) return false\n return (\n date1.getFullYear() === date2.getFullYear() &&\n date1.getMonth() === date2.getMonth() &&\n date1.getDate() === date2.getDate()\n )\n}\n\nconst isInRange = (date: Date, start: Date | null, end: Date | null): boolean => {\n if (!start || !end) return false\n const time = date.getTime()\n return time > start.getTime() && time < end.getTime()\n}\n\nconst isDateDisabled = (date: Date, minDate?: Date, maxDate?: Date): boolean => {\n if (minDate && date < minDate) return true\n if (maxDate && date > maxDate) return true\n return false\n}\n\nexport const DateRangePicker = forwardRef<HTMLDivElement, DateRangePickerProps>(function DateRangePicker(\n {\n value: controlledValue,\n defaultValue = { start: null, end: null },\n onChange,\n size = 'md',\n minDate,\n maxDate,\n placeholder = 'Select date range',\n disabled = false,\n isInvalid = false,\n clearable = true,\n presets,\n dateFormat = defaultDateFormat,\n 'aria-label': ariaLabel = 'Select date range',\n className,\n testId,\n },\n ref\n) {\n const [internalValue, setInternalValue] = useState<DateRange>(defaultValue)\n const [isOpen, setIsOpen] = useState(false)\n const [isFocused, setIsFocused] = useState(false)\n const [viewDate, setViewDate] = useState(() => {\n const initial = controlledValue?.start || defaultValue.start || new Date()\n return { year: initial.getFullYear(), month: initial.getMonth() }\n })\n const [selectingEnd, setSelectingEnd] = useState(false)\n const [hoverDate, setHoverDate] = useState<Date | null>(null)\n\n const containerRef = useRef<HTMLDivElement>(null)\n\n const value = controlledValue !== undefined ? controlledValue : internalValue\n const config = sizeConfig[size]\n\n const updateValue = useCallback(\n (newValue: DateRange) => {\n if (controlledValue === undefined) {\n setInternalValue(newValue)\n }\n onChange?.(newValue)\n },\n [controlledValue, onChange]\n )\n\n const handleDateClick = useCallback(\n (date: Date) => {\n if (isDateDisabled(date, minDate, maxDate)) return\n\n if (!selectingEnd || !value.start) {\n // Start new selection\n updateValue({ start: date, end: null })\n setSelectingEnd(true)\n } else {\n // Complete selection\n if (date < value.start) {\n updateValue({ start: date, end: value.start })\n } else {\n updateValue({ start: value.start, end: date })\n }\n setSelectingEnd(false)\n setIsOpen(false)\n }\n },\n [selectingEnd, value.start, minDate, maxDate, updateValue]\n )\n\n const handlePresetClick = useCallback(\n (preset: DateRangePreset) => {\n const newValue = preset.getValue()\n updateValue(newValue)\n setIsOpen(false)\n setSelectingEnd(false)\n },\n [updateValue]\n )\n\n const handleClear = useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation()\n updateValue({ start: null, end: null })\n setSelectingEnd(false)\n },\n [updateValue]\n )\n\n const handleKeyDown = useCallback(\n (e: KeyboardEvent<HTMLDivElement>) => {\n if (e.key === 'Escape') {\n setIsOpen(false)\n setSelectingEnd(false)\n }\n },\n []\n )\n\n // Close on outside click\n useEffect(() => {\n if (!isOpen) return\n\n const handleClick = (e: MouseEvent) => {\n if (!containerRef.current?.contains(e.target as Node)) {\n setIsOpen(false)\n setSelectingEnd(false)\n }\n }\n\n document.addEventListener('mousedown', handleClick)\n return () => document.removeEventListener('mousedown', handleClick)\n }, [isOpen])\n\n // Calculate dropdown position\n const [dropdownPosition, setDropdownPosition] = useState({ top: 0, left: 0 })\n\n useEffect(() => {\n if (!isOpen || !containerRef.current) return\n\n const updatePosition = () => {\n const rect = containerRef.current!.getBoundingClientRect()\n setDropdownPosition({\n top: rect.bottom + window.scrollY + spacing[1],\n left: rect.left + window.scrollX,\n })\n }\n\n updatePosition()\n window.addEventListener('resize', updatePosition)\n window.addEventListener('scroll', updatePosition, true)\n\n return () => {\n window.removeEventListener('resize', updatePosition)\n window.removeEventListener('scroll', updatePosition, true)\n }\n }, [isOpen])\n\n const goToPrevMonth = useCallback(() => {\n setViewDate((prev) => {\n if (prev.month === 0) {\n return { year: prev.year - 1, month: 11 }\n }\n return { ...prev, month: prev.month - 1 }\n })\n }, [])\n\n const goToNextMonth = useCallback(() => {\n setViewDate((prev) => {\n if (prev.month === 11) {\n return { year: prev.year + 1, month: 0 }\n }\n return { ...prev, month: prev.month + 1 }\n })\n }, [])\n\n // Generate calendar days\n const renderCalendar = (monthOffset: number = 0) => {\n let { year, month } = viewDate\n month += monthOffset\n if (month > 11) {\n month = 0\n year++\n }\n\n const daysInMonth = getDaysInMonth(year, month)\n const firstDay = getFirstDayOfMonth(year, month)\n const days: (Date | null)[] = []\n\n // Empty cells for days before the first day\n for (let i = 0; i < firstDay; i++) {\n days.push(null)\n }\n\n // Days of the month\n for (let i = 1; i <= daysInMonth; i++) {\n days.push(new Date(year, month, i))\n }\n\n const effectiveEnd = selectingEnd && hoverDate && value.start && !value.end ? hoverDate : value.end\n\n return (\n <div style={{ flex: 1 }}>\n <div style={calendarHeaderStyle}>\n {monthOffset === 0 && (\n <button\n type=\"button\"\n aria-label=\"Previous month\"\n style={navButtonStyle}\n onClick={goToPrevMonth}\n >\n <ChevronIcon direction=\"left\" />\n </button>\n )}\n <span style={{ fontWeight: 600 }}>\n {MONTHS[month]} {year}\n </span>\n {monthOffset === 1 && (\n <button\n type=\"button\"\n aria-label=\"Next month\"\n style={navButtonStyle}\n onClick={goToNextMonth}\n >\n <ChevronIcon direction=\"right\" />\n </button>\n )}\n </div>\n <div style={daysHeaderStyle}>\n {DAYS.map((day) => (\n <div key={day} style={dayHeaderStyle}>\n {day}\n </div>\n ))}\n </div>\n <div style={daysGridStyle}>\n {days.map((date, index) => {\n if (!date) {\n return <div key={`empty-${index}`} style={dayStyle(false, false, false, false)} />\n }\n\n const isStart = isSameDay(date, value.start)\n const isEnd = isSameDay(date, effectiveEnd)\n const isRange = isInRange(date, value.start, effectiveEnd)\n const isDisabled = isDateDisabled(date, minDate, maxDate)\n\n return (\n <button\n key={date.toISOString()}\n type=\"button\"\n disabled={isDisabled}\n style={dayStyle(isStart || isEnd, isRange, isDisabled, isSameDay(date, new Date()))}\n onClick={() => handleDateClick(date)}\n onMouseEnter={() => selectingEnd && setHoverDate(date)}\n onMouseLeave={() => setHoverDate(null)}\n >\n {date.getDate()}\n </button>\n )\n })}\n </div>\n </div>\n )\n }\n\n const displayValue = value.start && value.end\n ? `${dateFormat(value.start)} - ${dateFormat(value.end)}`\n : value.start\n ? `${dateFormat(value.start)} - ...`\n : ''\n\n const containerStyle: CSSProperties = {\n position: 'relative',\n display: 'inline-flex',\n width: '100%',\n }\n\n const inputWrapperStyle: CSSProperties = {\n position: 'relative',\n display: 'flex',\n alignItems: 'center',\n width: '100%',\n height: config.height,\n backgroundColor: disabled ? 'var(--brycks-background-muted)' : 'var(--brycks-background-default)',\n border: `1px solid ${\n isInvalid\n ? 'var(--brycks-error-default)'\n : isFocused\n ? 'var(--brycks-primary-default)'\n : 'var(--brycks-border-default)'\n }`,\n borderRadius: 'var(--brycks-radius-md)',\n transition: `all ${durations.fast}ms ${easings.easeOut}`,\n cursor: disabled ? 'not-allowed' : 'pointer',\n boxShadow: isFocused ? 'var(--brycks-focus-ring)' : undefined,\n padding: `0 ${config.padding}px`,\n paddingRight: clearable && (value.start || value.end) ? spacing[10] : config.padding,\n }\n\n const iconStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n marginRight: spacing[2],\n color: 'var(--brycks-foreground-muted)',\n }\n\n const textStyle: CSSProperties = {\n flex: 1,\n fontSize: config.fontSize,\n color: displayValue ? 'var(--brycks-foreground-default)' : 'var(--brycks-foreground-muted)',\n }\n\n const clearButtonStyle: CSSProperties = {\n position: 'absolute',\n right: config.padding,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: spacing[5],\n height: spacing[5],\n color: 'var(--brycks-foreground-muted)',\n cursor: 'pointer',\n borderRadius: 'var(--brycks-radius-sm)',\n transition: `all ${durations.fast}ms ${easings.easeOut}`,\n }\n\n const dropdownStyle: CSSProperties = {\n position: 'absolute',\n top: dropdownPosition.top,\n left: dropdownPosition.left,\n backgroundColor: 'var(--brycks-background-elevated)',\n border: '1px solid var(--brycks-border-default)',\n borderRadius: 'var(--brycks-radius-lg)',\n boxShadow: 'var(--brycks-shadow-lg)',\n zIndex: 'var(--brycks-z-dropdown)' as unknown as number,\n padding: spacing[3],\n display: 'flex',\n gap: spacing[4],\n }\n\n const calendarHeaderStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n marginBottom: spacing[2],\n minHeight: spacing[8],\n fontSize: fontSizes.base,\n }\n\n const navButtonStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: spacing[7],\n height: spacing[7],\n backgroundColor: 'transparent',\n border: 'none',\n borderRadius: 'var(--brycks-radius-md)',\n cursor: 'pointer',\n color: 'var(--brycks-foreground-default)',\n transition: `all ${durations.fast}ms ${easings.easeOut}`,\n }\n\n const daysHeaderStyle: CSSProperties = {\n display: 'grid',\n gridTemplateColumns: 'repeat(7, 1fr)',\n gap: spacing[0.5],\n marginBottom: spacing[1],\n }\n\n const dayHeaderStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n height: spacing[7],\n fontSize: fontSizes.xs,\n fontWeight: 600,\n color: 'var(--brycks-foreground-muted)',\n }\n\n const daysGridStyle: CSSProperties = {\n display: 'grid',\n gridTemplateColumns: 'repeat(7, 1fr)',\n gap: spacing[0.5],\n }\n\n const dayStyle = (isSelected: boolean, isRange: boolean, isDisabled: boolean, isToday: boolean): CSSProperties => ({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: spacing[8],\n height: spacing[8],\n fontSize: fontSizes.sm,\n fontWeight: isSelected ? 600 : 400,\n color: isDisabled\n ? 'var(--brycks-foreground-disabled)'\n : isSelected\n ? 'var(--brycks-primary-foreground)'\n : 'var(--brycks-foreground-default)',\n backgroundColor: isSelected\n ? 'var(--brycks-primary-default)'\n : isRange\n ? 'var(--brycks-primary-muted)'\n : 'transparent',\n border: isToday && !isSelected ? '1px solid var(--brycks-border-strong)' : 'none',\n borderRadius: 'var(--brycks-radius-md)',\n cursor: isDisabled ? 'not-allowed' : 'pointer',\n opacity: isDisabled ? 0.5 : 1,\n transition: `all ${durations.fast}ms ${easings.easeOut}`,\n })\n\n const presetsStyle: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: spacing[1],\n borderLeft: '1px solid var(--brycks-border-default)',\n paddingLeft: spacing[3],\n minWidth: 140,\n }\n\n const presetButtonStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n padding: `${spacing[2]}px ${spacing[3]}px`,\n fontSize: fontSizes.sm,\n color: 'var(--brycks-foreground-default)',\n backgroundColor: 'transparent',\n border: 'none',\n borderRadius: 'var(--brycks-radius-md)',\n cursor: 'pointer',\n textAlign: 'left',\n transition: `all ${durations.fast}ms ${easings.easeOut}`,\n }\n\n return (\n <div\n ref={(node) => {\n (containerRef as React.MutableRefObject<HTMLDivElement | null>).current = node\n if (typeof ref === 'function') ref(node)\n else if (ref) ref.current = node\n }}\n className={cx('brycks-daterangepicker', `brycks-daterangepicker--${size}`, className)}\n style={containerStyle}\n data-testid={testId}\n onKeyDown={handleKeyDown}\n >\n <div\n role=\"button\"\n tabIndex={disabled ? -1 : 0}\n aria-label={ariaLabel}\n aria-expanded={isOpen}\n aria-haspopup=\"dialog\"\n aria-invalid={isInvalid}\n style={inputWrapperStyle}\n onClick={() => !disabled && setIsOpen(true)}\n onFocus={() => setIsFocused(true)}\n onBlur={() => setIsFocused(false)}\n >\n <span style={iconStyle}>\n <CalendarIcon />\n </span>\n <span style={textStyle}>{displayValue || placeholder}</span>\n {clearable && (value.start || value.end) && !disabled && (\n <button\n type=\"button\"\n aria-label=\"Clear date range\"\n style={clearButtonStyle}\n onClick={handleClear}\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor = 'var(--brycks-background-muted)'\n e.currentTarget.style.color = 'var(--brycks-foreground-default)'\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'transparent'\n e.currentTarget.style.color = 'var(--brycks-foreground-muted)'\n }}\n >\n <ClearIcon />\n </button>\n )}\n </div>\n\n {isOpen &&\n createPortal(\n <div role=\"dialog\" aria-label=\"Date range picker\" style={dropdownStyle}>\n {renderCalendar(0)}\n {renderCalendar(1)}\n {presets && presets.length > 0 && (\n <div style={presetsStyle}>\n <div style={{ fontSize: fontSizes.xs, fontWeight: 600, color: 'var(--brycks-foreground-muted)', marginBottom: spacing[1] }}>\n Presets\n </div>\n {presets.map((preset, index) => (\n <button\n key={index}\n type=\"button\"\n style={presetButtonStyle}\n onClick={() => handlePresetClick(preset)}\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor = 'var(--brycks-background-muted)'\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'transparent'\n }}\n >\n {preset.label}\n </button>\n ))}\n </div>\n )}\n </div>,\n document.body\n )}\n </div>\n )\n})\n\nDateRangePicker.displayName = 'DateRangePicker'\n"],"names":["sizeConfig","componentHeights","fontSizes","componentPaddingX","DAYS","MONTHS","defaultDateFormat","date","CalendarIcon","jsxs","jsx","ChevronIcon","direction","ClearIcon","getDaysInMonth","year","month","getFirstDayOfMonth","isSameDay","date1","date2","isInRange","start","end","time","isDateDisabled","minDate","maxDate","DateRangePicker","forwardRef","controlledValue","defaultValue","onChange","size","placeholder","disabled","isInvalid","clearable","presets","dateFormat","ariaLabel","className","testId","ref","internalValue","setInternalValue","useState","isOpen","setIsOpen","isFocused","setIsFocused","viewDate","setViewDate","initial","selectingEnd","setSelectingEnd","hoverDate","setHoverDate","containerRef","useRef","value","config","updateValue","useCallback","newValue","handleDateClick","handlePresetClick","preset","handleClear","handleKeyDown","useEffect","handleClick","e","dropdownPosition","setDropdownPosition","updatePosition","rect","spacing","goToPrevMonth","prev","goToNextMonth","renderCalendar","monthOffset","daysInMonth","firstDay","days","i","effectiveEnd","calendarHeaderStyle","navButtonStyle","daysHeaderStyle","day","dayHeaderStyle","daysGridStyle","index","dayStyle","isStart","isEnd","isRange","isDisabled","displayValue","containerStyle","inputWrapperStyle","durations","easings","iconStyle","textStyle","clearButtonStyle","dropdownStyle","isSelected","isToday","presetsStyle","presetButtonStyle","node","cx","createPortal"],"mappings":"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"}