@orion-ds/react 4.0.5 → 4.2.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.
- package/dist/contexts/ThemeContext.d.ts.map +1 -1
- package/dist/index.d.ts +2 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index10.cjs +1 -1
- package/dist/index10.mjs +1 -1
- package/dist/index100.cjs +1 -1
- package/dist/index100.mjs +20 -40
- package/dist/index100.mjs.map +1 -1
- package/dist/index101.cjs +1 -1
- package/dist/index101.mjs +28 -40
- package/dist/index101.mjs.map +1 -1
- package/dist/index102.cjs +1 -1
- package/dist/index102.mjs +46 -33
- package/dist/index102.mjs.map +1 -1
- package/dist/index103.cjs +1 -1
- package/dist/index103.mjs +42 -27
- package/dist/index103.mjs.map +1 -1
- package/dist/index104.cjs +1 -1
- package/dist/index104.mjs +56 -30
- package/dist/index104.mjs.map +1 -1
- package/dist/index105.cjs +1 -1
- package/dist/index105.mjs +25 -15
- package/dist/index105.mjs.map +1 -1
- package/dist/index106.cjs +1 -1
- package/dist/index106.mjs +64 -52
- package/dist/index106.mjs.map +1 -1
- package/dist/index107.cjs +1 -1
- package/dist/index107.mjs +20 -20
- package/dist/index108.cjs +1 -1
- package/dist/index108.mjs +45 -36
- package/dist/index108.mjs.map +1 -1
- package/dist/index109.cjs +1 -1
- package/dist/index109.mjs +24 -42
- package/dist/index109.mjs.map +1 -1
- package/dist/index11.cjs +1 -1
- package/dist/index11.mjs +1 -1
- package/dist/index110.cjs +1 -1
- package/dist/index110.mjs +40 -18
- package/dist/index110.mjs.map +1 -1
- package/dist/index111.cjs +1 -1
- package/dist/index111.mjs +18 -28
- package/dist/index111.mjs.map +1 -1
- package/dist/index112.cjs +1 -1
- package/dist/index112.mjs +55 -12
- package/dist/index112.mjs.map +1 -1
- package/dist/index114.cjs +1 -1
- package/dist/index114.mjs +62 -28
- package/dist/index114.mjs.map +1 -1
- package/dist/index115.cjs +1 -1
- package/dist/index115.mjs +65 -45
- package/dist/index115.mjs.map +1 -1
- package/dist/index116.cjs +1 -1
- package/dist/index116.mjs +234 -18
- package/dist/index116.mjs.map +1 -1
- package/dist/index117.cjs +1 -1
- package/dist/index117.cjs.map +1 -1
- package/dist/index117.mjs +34 -29
- package/dist/index117.mjs.map +1 -1
- package/dist/index118.cjs +1 -1
- package/dist/index118.cjs.map +1 -1
- package/dist/index118.mjs +44 -31
- package/dist/index118.mjs.map +1 -1
- package/dist/index119.cjs +1 -1
- package/dist/index119.cjs.map +1 -1
- package/dist/index119.mjs +170 -22
- package/dist/index119.mjs.map +1 -1
- package/dist/index12.cjs +1 -1
- package/dist/index12.mjs +1 -1
- package/dist/index120.cjs +1 -1
- package/dist/index120.cjs.map +1 -1
- package/dist/index120.mjs +186 -39
- package/dist/index120.mjs.map +1 -1
- package/dist/index121.cjs +1 -1
- package/dist/index121.cjs.map +1 -1
- package/dist/index121.mjs +29 -66
- package/dist/index121.mjs.map +1 -1
- package/dist/index122.cjs +1 -1
- package/dist/index122.cjs.map +1 -1
- package/dist/index122.mjs +90 -18
- package/dist/index122.mjs.map +1 -1
- package/dist/index123.cjs +1 -1
- package/dist/index123.cjs.map +1 -1
- package/dist/index123.mjs +53 -54
- package/dist/index123.mjs.map +1 -1
- package/dist/index124.cjs +1 -1
- package/dist/index124.cjs.map +1 -1
- package/dist/index124.mjs +66 -30
- package/dist/index124.mjs.map +1 -1
- package/dist/index125.cjs +1 -1
- package/dist/index125.cjs.map +1 -1
- package/dist/index125.mjs +124 -62
- package/dist/index125.mjs.map +1 -1
- package/dist/index126.cjs +1 -1
- package/dist/index126.cjs.map +1 -1
- package/dist/index126.mjs +108 -55
- package/dist/index126.mjs.map +1 -1
- package/dist/index127.cjs +1 -1
- package/dist/index127.cjs.map +1 -1
- package/dist/index127.mjs +111 -44
- package/dist/index127.mjs.map +1 -1
- package/dist/index128.cjs +1 -1
- package/dist/index128.cjs.map +1 -1
- package/dist/index128.mjs +122 -14
- package/dist/index128.mjs.map +1 -1
- package/dist/index129.cjs +1 -1
- package/dist/index129.cjs.map +1 -1
- package/dist/index129.mjs +214 -33
- package/dist/index129.mjs.map +1 -1
- package/dist/index13.cjs +1 -1
- package/dist/index13.mjs +1 -1
- package/dist/index130.cjs +1 -1
- package/dist/index130.mjs +42 -28
- package/dist/index130.mjs.map +1 -1
- package/dist/index131.cjs +1 -1
- package/dist/index131.mjs +40 -22
- package/dist/index131.mjs.map +1 -1
- package/dist/index132.cjs +1 -1
- package/dist/index132.mjs +106 -64
- package/dist/index132.mjs.map +1 -1
- package/dist/index133.cjs +1 -1
- package/dist/index133.mjs +20 -44
- package/dist/index133.mjs.map +1 -1
- package/dist/index134.cjs +1 -1
- package/dist/index134.mjs +30 -57
- package/dist/index134.mjs.map +1 -1
- package/dist/index135.cjs +1 -1
- package/dist/index135.mjs +46 -44
- package/dist/index135.mjs.map +1 -1
- package/dist/index136.cjs +1 -1
- package/dist/index136.mjs +12 -38
- package/dist/index136.mjs.map +1 -1
- package/dist/index137.cjs +1 -1
- package/dist/index137.mjs +32 -28
- package/dist/index137.mjs.map +1 -1
- package/dist/index138.cjs +1 -1
- package/dist/index138.mjs +27 -24
- package/dist/index138.mjs.map +1 -1
- package/dist/index139.cjs +1 -1
- package/dist/index139.mjs +33 -67
- package/dist/index139.mjs.map +1 -1
- package/dist/index14.cjs +1 -1
- package/dist/index14.mjs +1 -1
- package/dist/index140.cjs +1 -1
- package/dist/index140.mjs +57 -76
- package/dist/index140.mjs.map +1 -1
- package/dist/index141.cjs +1 -1
- package/dist/index141.mjs +30 -46
- package/dist/index141.mjs.map +1 -1
- package/dist/index142.cjs +1 -1
- package/dist/index142.mjs +32 -234
- package/dist/index142.mjs.map +1 -1
- package/dist/index143.cjs +1 -1
- package/dist/index143.cjs.map +1 -1
- package/dist/index143.mjs +51 -34
- package/dist/index143.mjs.map +1 -1
- package/dist/index144.cjs +1 -1
- package/dist/index144.cjs.map +1 -1
- package/dist/index144.mjs +17 -44
- package/dist/index144.mjs.map +1 -1
- package/dist/index145.cjs +1 -1
- package/dist/index145.cjs.map +1 -1
- package/dist/index145.mjs +30 -170
- package/dist/index145.mjs.map +1 -1
- package/dist/index146.cjs +1 -1
- package/dist/index146.cjs.map +1 -1
- package/dist/index146.mjs +47 -186
- package/dist/index146.mjs.map +1 -1
- package/dist/index147.cjs +1 -1
- package/dist/index147.cjs.map +1 -1
- package/dist/index147.mjs +43 -29
- package/dist/index147.mjs.map +1 -1
- package/dist/index148.cjs +1 -1
- package/dist/index148.cjs.map +1 -1
- package/dist/index148.mjs +28 -90
- package/dist/index148.mjs.map +1 -1
- package/dist/index149.cjs +1 -1
- package/dist/index149.cjs.map +1 -1
- package/dist/index149.mjs +29 -53
- package/dist/index149.mjs.map +1 -1
- package/dist/index15.cjs +1 -1
- package/dist/index15.mjs +1 -1
- package/dist/index150.cjs +1 -1
- package/dist/index150.cjs.map +1 -1
- package/dist/index150.mjs +30 -66
- package/dist/index150.mjs.map +1 -1
- package/dist/index151.cjs +1 -1
- package/dist/index151.cjs.map +1 -1
- package/dist/index151.mjs +24 -124
- package/dist/index151.mjs.map +1 -1
- package/dist/index152.cjs +1 -1
- package/dist/index152.cjs.map +1 -1
- package/dist/index152.mjs +22 -108
- package/dist/index152.mjs.map +1 -1
- package/dist/index153.cjs +1 -1
- package/dist/index153.cjs.map +1 -1
- package/dist/index153.mjs +36 -111
- package/dist/index153.mjs.map +1 -1
- package/dist/index154.cjs +1 -1
- package/dist/index154.cjs.map +1 -1
- package/dist/index154.mjs +38 -122
- package/dist/index154.mjs.map +1 -1
- package/dist/index155.cjs +1 -1
- package/dist/index155.cjs.map +1 -1
- package/dist/index155.mjs +12 -214
- package/dist/index155.mjs.map +1 -1
- package/dist/index156.cjs +1 -1
- package/dist/index156.mjs +27 -49
- package/dist/index156.mjs.map +1 -1
- package/dist/index157.cjs +1 -1
- package/dist/index157.mjs +38 -24
- package/dist/index157.mjs.map +1 -1
- package/dist/index158.cjs +1 -1
- package/dist/index158.mjs +33 -32
- package/dist/index158.mjs.map +1 -1
- package/dist/index159.cjs +1 -1
- package/dist/index159.mjs +30 -18
- package/dist/index159.mjs.map +1 -1
- package/dist/index16.cjs +1 -1
- package/dist/index16.mjs +1 -1
- package/dist/index160.cjs +1 -1
- package/dist/index160.mjs +14 -26
- package/dist/index160.mjs.map +1 -1
- package/dist/index161.cjs +1 -1
- package/dist/index161.mjs +18 -46
- package/dist/index161.mjs.map +1 -1
- package/dist/index162.cjs +1 -1
- package/dist/index162.mjs +28 -24
- package/dist/index162.mjs.map +1 -1
- package/dist/index163.cjs +1 -1
- package/dist/index163.mjs +18 -56
- package/dist/index163.mjs.map +1 -1
- package/dist/index164.cjs +1 -1
- package/dist/index164.mjs +65 -40
- package/dist/index164.mjs.map +1 -1
- package/dist/index165.cjs +1 -1
- package/dist/index165.mjs +30 -62
- package/dist/index165.mjs.map +1 -1
- package/dist/index166.cjs +1 -1
- package/dist/index166.mjs +44 -20
- package/dist/index166.mjs.map +1 -1
- package/dist/index167.cjs +1 -1
- package/dist/index167.mjs +52 -106
- package/dist/index167.mjs.map +1 -1
- package/dist/index168.cjs +1 -1
- package/dist/index168.cjs.map +1 -1
- package/dist/index168.mjs +37 -21
- package/dist/index168.mjs.map +1 -1
- package/dist/index169.cjs +1 -1
- package/dist/index169.mjs +28 -30
- package/dist/index169.mjs.map +1 -1
- package/dist/index17.cjs +1 -1
- package/dist/index17.mjs +1 -1
- package/dist/index170.cjs +1 -1
- package/dist/index170.mjs +18 -12
- package/dist/index170.mjs.map +1 -1
- package/dist/index171.cjs +1 -1
- package/dist/index171.mjs +33 -32
- package/dist/index171.mjs.map +1 -1
- package/dist/index172.cjs +1 -1
- package/dist/index172.mjs +20 -40
- package/dist/index172.mjs.map +1 -1
- package/dist/index173.cjs +1 -1
- package/dist/index173.cjs.map +1 -1
- package/dist/index173.mjs +25 -37
- package/dist/index173.mjs.map +1 -1
- package/dist/index174.cjs +1 -1
- package/dist/index174.mjs +64 -28
- package/dist/index174.mjs.map +1 -1
- package/dist/index175.cjs +1 -1
- package/dist/index175.mjs +76 -33
- package/dist/index175.mjs.map +1 -1
- package/dist/index176.cjs +1 -1
- package/dist/index176.mjs +40 -52
- package/dist/index176.mjs.map +1 -1
- package/dist/index177.cjs +1 -1
- package/dist/index177.mjs +52 -18
- package/dist/index177.mjs.map +1 -1
- package/dist/index178.cjs +1 -1
- package/dist/index178.mjs +53 -42
- package/dist/index178.mjs.map +1 -1
- package/dist/index179.cjs +1 -1
- package/dist/index179.mjs +18 -28
- package/dist/index179.mjs.map +1 -1
- package/dist/index18.cjs +1 -1
- package/dist/index18.mjs +1 -1
- package/dist/index180.cjs +1 -1
- package/dist/index180.mjs +42 -28
- package/dist/index180.mjs.map +1 -1
- package/dist/index181.cjs +1 -1
- package/dist/index181.mjs +28 -64
- package/dist/index181.mjs.map +1 -1
- package/dist/index182.cjs +1 -1
- package/dist/index182.mjs +17 -17
- package/dist/index182.mjs.map +1 -1
- package/dist/index183.cjs +1 -1
- package/dist/index183.mjs +17 -17
- package/dist/index183.mjs.map +1 -1
- package/dist/index185.cjs +1 -1
- package/dist/index185.mjs +1 -1
- package/dist/index19.cjs +1 -1
- package/dist/index19.mjs +2 -2
- package/dist/index20.cjs +1 -1
- package/dist/index20.mjs +14 -14
- package/dist/index21.cjs +1 -1
- package/dist/index21.cjs.map +1 -1
- package/dist/index21.mjs +1 -1
- package/dist/index22.cjs +1 -1
- package/dist/index22.mjs +1 -1
- package/dist/index23.cjs +1 -1
- package/dist/index23.mjs +1 -1
- package/dist/index24.cjs +1 -1
- package/dist/index24.mjs +1 -1
- package/dist/index25.cjs +1 -1
- package/dist/index25.mjs +1 -1
- package/dist/index26.cjs +1 -1
- package/dist/index26.cjs.map +1 -1
- package/dist/index26.mjs +1 -1
- package/dist/index27.cjs +1 -1
- package/dist/index27.mjs +1 -1
- package/dist/index28.cjs +1 -1
- package/dist/index28.mjs +1 -1
- package/dist/index29.cjs +1 -1
- package/dist/index29.mjs +1 -1
- package/dist/index30.cjs +1 -1
- package/dist/index30.mjs +1 -1
- package/dist/index31.cjs +1 -1
- package/dist/index31.mjs +1 -1
- package/dist/index32.cjs +1 -1
- package/dist/index32.mjs +1 -1
- package/dist/index33.cjs +1 -1
- package/dist/index33.mjs +1 -1
- package/dist/index34.cjs +1 -1
- package/dist/index34.mjs +1 -1
- package/dist/index35.cjs +1 -1
- package/dist/index35.mjs +1 -1
- package/dist/index36.cjs +1 -1
- package/dist/index36.mjs +1 -1
- package/dist/index37.cjs +1 -1
- package/dist/index37.mjs +1 -1
- package/dist/index38.cjs +1 -1
- package/dist/index38.mjs +1 -1
- package/dist/index39.cjs +1 -1
- package/dist/index39.mjs +1 -1
- package/dist/index40.cjs +1 -1
- package/dist/index40.mjs +1 -1
- package/dist/index42.cjs +1 -1
- package/dist/index42.mjs +1 -1
- package/dist/index43.cjs +1 -1
- package/dist/index43.mjs +1 -1
- package/dist/index46.cjs +1 -1
- package/dist/index46.mjs +1 -1
- package/dist/index47.cjs +1 -1
- package/dist/index47.mjs +1 -1
- package/dist/index49.cjs +1 -1
- package/dist/index49.mjs +1 -1
- package/dist/index5.cjs +1 -1
- package/dist/index5.mjs +1 -1
- package/dist/index50.cjs +1 -1
- package/dist/index50.mjs +1 -1
- package/dist/index51.cjs +1 -1
- package/dist/index51.mjs +1 -1
- package/dist/index52.cjs +1 -1
- package/dist/index52.mjs +1 -1
- package/dist/index53.cjs +1 -1
- package/dist/index53.mjs +1 -1
- package/dist/index54.cjs +1 -1
- package/dist/index54.mjs +1 -1
- package/dist/index55.cjs +1 -1
- package/dist/index55.mjs +1 -1
- package/dist/index56.cjs +1 -1
- package/dist/index56.mjs +1 -1
- package/dist/index57.cjs +1 -1
- package/dist/index57.mjs +1 -1
- package/dist/index58.cjs +1 -1
- package/dist/index58.mjs +1 -1
- package/dist/index59.cjs +1 -1
- package/dist/index59.mjs +1 -1
- package/dist/index6.cjs +1 -1
- package/dist/index6.mjs +1 -1
- package/dist/index60.cjs +1 -1
- package/dist/index60.mjs +1 -1
- package/dist/index61.cjs +1 -1
- package/dist/index61.mjs +1 -1
- package/dist/index62.cjs +1 -1
- package/dist/index62.mjs +1 -1
- package/dist/index63.cjs +1 -1
- package/dist/index63.mjs +1 -1
- package/dist/index64.cjs +1 -1
- package/dist/index64.mjs +1 -1
- package/dist/index65.cjs +1 -1
- package/dist/index65.mjs +1 -1
- package/dist/index66.cjs +1 -1
- package/dist/index66.mjs +1 -1
- package/dist/index67.cjs +1 -1
- package/dist/index67.mjs +1 -1
- package/dist/index68.cjs +1 -1
- package/dist/index68.mjs +1 -1
- package/dist/index69.cjs +1 -1
- package/dist/index69.mjs +1 -1
- package/dist/index7.cjs +1 -1
- package/dist/index7.mjs +1 -1
- package/dist/index70.cjs +1 -1
- package/dist/index70.mjs +1 -1
- package/dist/index71.cjs +1 -1
- package/dist/index71.mjs +1 -1
- package/dist/index72.cjs +1 -1
- package/dist/index72.mjs +1 -1
- package/dist/index73.cjs +1 -1
- package/dist/index73.mjs +1 -1
- package/dist/index75.cjs +7 -10
- package/dist/index75.cjs.map +1 -1
- package/dist/index75.mjs +18 -21
- package/dist/index75.mjs.map +1 -1
- package/dist/index76.cjs +1 -1
- package/dist/index76.mjs +1 -1
- package/dist/index77.cjs +1 -1
- package/dist/index77.mjs +1 -1
- package/dist/index78.cjs +1 -1
- package/dist/index78.mjs +1 -1
- package/dist/index79.cjs +1 -1
- package/dist/index79.mjs +1 -1
- package/dist/index8.cjs +1 -1
- package/dist/index8.mjs +1 -1
- package/dist/index80.cjs +1 -1
- package/dist/index80.mjs +1 -1
- package/dist/index81.cjs +1 -1
- package/dist/index81.mjs +1 -1
- package/dist/index82.cjs +1 -1
- package/dist/index82.mjs +2 -2
- package/dist/index9.cjs +1 -1
- package/dist/index9.mjs +1 -1
- package/dist/index97.cjs +1 -1
- package/dist/index97.cjs.map +1 -1
- package/dist/index97.mjs +62 -154
- package/dist/index97.mjs.map +1 -1
- package/dist/index98.cjs +1 -1
- package/dist/index98.cjs.map +1 -1
- package/dist/index98.mjs +138 -202
- package/dist/index98.mjs.map +1 -1
- package/dist/index99.cjs +1 -1
- package/dist/index99.cjs.map +1 -1
- package/dist/index99.mjs +218 -30
- package/dist/index99.mjs.map +1 -1
- package/package.json +1 -5
package/dist/index26.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index26.cjs","sources":["../src/components/Combobox/Combobox.tsx"],"sourcesContent":["/**\n * Combobox Component\n *\n * An autocomplete input with searchable dropdown options.\n *\n * @example\n * ```tsx\n * <Combobox\n * options={[\n * { value: 'react', label: 'React' },\n * { value: 'vue', label: 'Vue' },\n * ]}\n * value={selected}\n * onChange={setSelected}\n * placeholder=\"Select a framework...\"\n * />\n * ```\n */\n\nimport {\n forwardRef,\n useState,\n useRef,\n useEffect,\n useCallback,\n useId,\n useMemo,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { ChevronDown, X, Check, Loader2 } from \"lucide-react\";\nimport type { ComboboxProps, ComboboxOption } from \"./Combobox.types\";\nimport styles from \"./Combobox.module.css\";\n\n// Default filter function\nconst defaultFilter = (option: ComboboxOption, inputValue: string): boolean => {\n const searchTerm = inputValue.toLowerCase().trim();\n if (!searchTerm) return true;\n\n return (\n option.label.toLowerCase().includes(searchTerm) ||\n option.value.toLowerCase().includes(searchTerm) ||\n (option.description?.toLowerCase().includes(searchTerm) ?? false)\n );\n};\n\nexport const Combobox = forwardRef<HTMLInputElement, ComboboxProps>(\n (\n {\n options,\n value,\n onChange,\n onInputChange,\n size = \"md\",\n label,\n helperText,\n error,\n loading = false,\n clearable = true,\n allowFreeInput = false,\n filterFn = defaultFilter,\n openOnFocus = true,\n minChars = 0,\n emptyText = \"No results found\",\n renderOption,\n maxHeight = 300,\n fullWidth = false,\n placeholder,\n disabled,\n className,\n id: providedId,\n onFocus,\n onBlur,\n onKeyDown,\n ...rest\n },\n ref,\n ) => {\n const generatedId = useId();\n const inputId = providedId || generatedId;\n const listboxId = `${inputId}-listbox`;\n\n const containerRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n const dropdownRef = useRef<HTMLDivElement>(null);\n\n const [isOpen, setIsOpen] = useState(false);\n const [inputValue, setInputValue] = useState(\"\");\n const [highlightedIndex, setHighlightedIndex] = useState(-1);\n const [dropdownPosition, setDropdownPosition] = useState({\n top: 0,\n left: 0,\n width: 0,\n });\n\n // Find the selected option\n const selectedOption = useMemo(\n () => options.find((opt) => opt.value === value) ?? null,\n [options, value],\n );\n\n // Sync input value with selection\n useEffect(() => {\n if (selectedOption) {\n setInputValue(selectedOption.label);\n } else if (!allowFreeInput) {\n setInputValue(\"\");\n }\n }, [selectedOption, allowFreeInput]);\n\n // Filter options based on input\n const filteredOptions = useMemo(() => {\n if (inputValue.length < minChars) return [];\n return options.filter((opt) => filterFn(opt, inputValue));\n }, [options, inputValue, minChars, filterFn]);\n\n // Update dropdown position\n const updatePosition = useCallback(() => {\n if (!containerRef.current) return;\n\n const rect = containerRef.current.getBoundingClientRect();\n setDropdownPosition({\n top: rect.bottom + window.scrollY + 4,\n left: rect.left + window.scrollX,\n width: rect.width,\n });\n }, []);\n\n useEffect(() => {\n if (isOpen) {\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 }\n }, [isOpen, updatePosition]);\n\n // Handle click outside\n useEffect(() => {\n if (!isOpen) return;\n\n const handleClickOutside = (event: MouseEvent) => {\n const target = event.target as Node;\n if (\n containerRef.current &&\n !containerRef.current.contains(target) &&\n dropdownRef.current &&\n !dropdownRef.current.contains(target)\n ) {\n setIsOpen(false);\n // Reset input if no selection\n if (!allowFreeInput && !value) {\n setInputValue(\"\");\n } else if (selectedOption) {\n setInputValue(selectedOption.label);\n }\n }\n };\n\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () =>\n document.removeEventListener(\"mousedown\", handleClickOutside);\n }, [isOpen, allowFreeInput, value, selectedOption]);\n\n const handleInputChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = e.target.value;\n setInputValue(newValue);\n setHighlightedIndex(-1);\n onInputChange?.(newValue);\n\n if (!isOpen && newValue.length >= minChars) {\n setIsOpen(true);\n }\n\n // Clear selection if input doesn't match and not allowing free input\n if (\n selectedOption &&\n newValue !== selectedOption.label &&\n !allowFreeInput\n ) {\n onChange?.(null, null);\n }\n },\n [\n isOpen,\n minChars,\n onInputChange,\n selectedOption,\n allowFreeInput,\n onChange,\n ],\n );\n\n const handleFocus = useCallback(\n (e: React.FocusEvent<HTMLInputElement>) => {\n if (openOnFocus && !disabled) {\n setIsOpen(true);\n }\n onFocus?.(e);\n },\n [openOnFocus, disabled, onFocus],\n );\n\n const handleBlur = useCallback(\n (e: React.FocusEvent<HTMLInputElement>) => {\n // Don't close immediately to allow click on options\n setTimeout(() => {\n if (!dropdownRef.current?.contains(document.activeElement)) {\n setIsOpen(false);\n if (!allowFreeInput && !value) {\n setInputValue(\"\");\n } else if (selectedOption) {\n setInputValue(selectedOption.label);\n }\n }\n }, 200);\n onBlur?.(e);\n },\n [allowFreeInput, value, selectedOption, onBlur],\n );\n\n const selectOption = useCallback(\n (option: ComboboxOption) => {\n if (option.disabled) return;\n\n onChange?.(option.value, option);\n setInputValue(option.label);\n setIsOpen(false);\n setHighlightedIndex(-1);\n inputRef.current?.focus();\n },\n [onChange],\n );\n\n const handleClear = useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation();\n onChange?.(null, null);\n setInputValue(\"\");\n inputRef.current?.focus();\n },\n [onChange],\n );\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLInputElement>) => {\n switch (e.key) {\n case \"ArrowDown\":\n e.preventDefault();\n if (!isOpen) {\n setIsOpen(true);\n } else {\n setHighlightedIndex((prev) =>\n Math.min(prev + 1, filteredOptions.length - 1),\n );\n }\n break;\n\n case \"ArrowUp\":\n e.preventDefault();\n setHighlightedIndex((prev) => Math.max(prev - 1, 0));\n break;\n\n case \"Enter\":\n e.preventDefault();\n if (\n isOpen &&\n highlightedIndex >= 0 &&\n filteredOptions[highlightedIndex]\n ) {\n selectOption(filteredOptions[highlightedIndex]);\n }\n break;\n\n case \"Escape\":\n e.preventDefault();\n setIsOpen(false);\n if (selectedOption) {\n setInputValue(selectedOption.label);\n } else {\n setInputValue(\"\");\n }\n break;\n\n case \"Tab\":\n setIsOpen(false);\n break;\n }\n\n onKeyDown?.(e);\n },\n [\n isOpen,\n highlightedIndex,\n filteredOptions,\n selectOption,\n selectedOption,\n onKeyDown,\n ],\n );\n\n // Scroll highlighted option into view\n useEffect(() => {\n if (highlightedIndex >= 0 && dropdownRef.current) {\n const options = dropdownRef.current.querySelectorAll('[role=\"option\"]');\n options[highlightedIndex]?.scrollIntoView({ block: \"nearest\" });\n }\n }, [highlightedIndex]);\n\n const containerClasses = [\n styles.container,\n styles[size],\n fullWidth && styles.fullWidth,\n disabled && styles.disabled,\n error && styles.error,\n className,\n ]\n .filter(Boolean)\n .join(\" \");\n\n const iconSize = size === \"sm\" ? 14 : size === \"lg\" ? 20 : 16;\n\n const renderOptionContent = (option: ComboboxOption, index: number) => {\n const isSelected = option.value === value;\n const isHighlighted = index === highlightedIndex;\n\n if (renderOption) {\n return renderOption(option, isSelected, isHighlighted);\n }\n\n return (\n <>\n {option.icon && (\n <span className={styles.optionIcon} aria-hidden=\"true\">\n {option.icon}\n </span>\n )}\n <div className={styles.optionContent}>\n <span className={styles.optionLabel}>{option.label}</span>\n {option.description && (\n <span className={styles.optionDescription}>\n {option.description}\n </span>\n )}\n </div>\n {isSelected && (\n <Check\n size={iconSize}\n className={styles.checkIcon}\n aria-hidden=\"true\"\n />\n )}\n </>\n );\n };\n\n const dropdownContent = (\n <div\n ref={dropdownRef}\n className={`${styles.dropdown} ${isOpen && styles.visible}`}\n style={{\n top: dropdownPosition.top,\n left: dropdownPosition.left,\n width: dropdownPosition.width,\n maxHeight,\n }}\n role=\"listbox\"\n id={listboxId}\n aria-label={label || placeholder}\n >\n {loading ? (\n <div className={styles.loading}>\n <Loader2 size={iconSize} className={styles.spinner} />\n <span>Loading...</span>\n </div>\n ) : filteredOptions.length === 0 ? (\n <div className={styles.empty}>{emptyText}</div>\n ) : (\n filteredOptions.map((option, index) => {\n const isHighlighted = index === highlightedIndex;\n const isSelected = option.value === value;\n\n return (\n <div\n key={option.value}\n className={[\n styles.option,\n isHighlighted && styles.highlighted,\n isSelected && styles.selected,\n option.disabled && styles.disabled,\n ]\n .filter(Boolean)\n .join(\" \")}\n role=\"option\"\n aria-selected={isSelected}\n aria-disabled={option.disabled}\n onClick={() => selectOption(option)}\n onMouseEnter={() => setHighlightedIndex(index)}\n >\n {renderOptionContent(option, index)}\n </div>\n );\n })\n )}\n </div>\n );\n\n return (\n <div className={containerClasses}>\n {label && (\n <label htmlFor={inputId} className={styles.label}>\n {label}\n </label>\n )}\n\n <div\n ref={containerRef}\n className={styles.inputWrapper}\n onClick={() => inputRef.current?.focus()}\n >\n <input\n {...rest}\n ref={(node) => {\n // Handle both refs\n if (typeof ref === \"function\") {\n ref(node);\n } else if (ref) {\n ref.current = node;\n }\n (\n inputRef as React.MutableRefObject<HTMLInputElement | null>\n ).current = node;\n }}\n id={inputId}\n type=\"text\"\n className={styles.input}\n value={inputValue}\n onChange={handleInputChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n disabled={disabled}\n placeholder={placeholder}\n role=\"combobox\"\n aria-expanded={isOpen}\n aria-haspopup=\"listbox\"\n aria-controls={listboxId}\n aria-autocomplete=\"list\"\n aria-activedescendant={\n highlightedIndex >= 0\n ? `${listboxId}-option-${highlightedIndex}`\n : undefined\n }\n />\n\n <div className={styles.actions}>\n {clearable && value && !disabled && (\n <button\n type=\"button\"\n className={styles.clearButton}\n onClick={handleClear}\n aria-label=\"Clear selection\"\n tabIndex={-1}\n >\n <X size={iconSize} />\n </button>\n )}\n <span\n className={`${styles.chevron} ${isOpen ? styles.open : \"\"}`}\n aria-hidden=\"true\"\n >\n <ChevronDown size={iconSize} />\n </span>\n </div>\n </div>\n\n {(helperText || error) && (\n <span className={error ? styles.errorText : styles.helperText}>\n {error || helperText}\n </span>\n )}\n\n {isOpen && createPortal(dropdownContent, document.body)}\n </div>\n );\n },\n);\n\nCombobox.displayName = \"Combobox\";\n"],"names":["defaultFilter","option","inputValue","searchTerm","Combobox","forwardRef","options","value","onChange","onInputChange","size","label","helperText","error","loading","clearable","allowFreeInput","filterFn","openOnFocus","minChars","emptyText","renderOption","maxHeight","fullWidth","placeholder","disabled","className","providedId","onFocus","onBlur","onKeyDown","rest","ref","generatedId","useId","inputId","listboxId","containerRef","useRef","inputRef","dropdownRef","isOpen","setIsOpen","useState","setInputValue","highlightedIndex","setHighlightedIndex","dropdownPosition","setDropdownPosition","selectedOption","useMemo","opt","useEffect","filteredOptions","updatePosition","useCallback","rect","handleClickOutside","event","target","handleInputChange","newValue","handleFocus","handleBlur","selectOption","handleClear","handleKeyDown","prev","containerClasses","styles","iconSize","renderOptionContent","index","isSelected","isHighlighted","jsxs","Fragment","jsx","Check","dropdownContent","Loader2","node","X","ChevronDown","createPortal"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index26.cjs","sources":["../src/components/Combobox/Combobox.tsx"],"sourcesContent":["/**\n * Combobox Component\n *\n * An autocomplete input with searchable dropdown options.\n *\n * @example\n * ```tsx\n * <Combobox\n * options={[\n * { value: 'react', label: 'React' },\n * { value: 'vue', label: 'Vue' },\n * ]}\n * value={selected}\n * onChange={setSelected}\n * placeholder=\"Select a framework...\"\n * />\n * ```\n */\n\nimport {\n forwardRef,\n useState,\n useRef,\n useEffect,\n useCallback,\n useId,\n useMemo,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { ChevronDown, X, Check, Loader2 } from \"lucide-react\";\nimport type { ComboboxProps, ComboboxOption } from \"./Combobox.types\";\nimport styles from \"./Combobox.module.css\";\n\n// Default filter function\nconst defaultFilter = (option: ComboboxOption, inputValue: string): boolean => {\n const searchTerm = inputValue.toLowerCase().trim();\n if (!searchTerm) return true;\n\n return (\n option.label.toLowerCase().includes(searchTerm) ||\n option.value.toLowerCase().includes(searchTerm) ||\n (option.description?.toLowerCase().includes(searchTerm) ?? false)\n );\n};\n\nexport const Combobox = forwardRef<HTMLInputElement, ComboboxProps>(\n (\n {\n options,\n value,\n onChange,\n onInputChange,\n size = \"md\",\n label,\n helperText,\n error,\n loading = false,\n clearable = true,\n allowFreeInput = false,\n filterFn = defaultFilter,\n openOnFocus = true,\n minChars = 0,\n emptyText = \"No results found\",\n renderOption,\n maxHeight = 300,\n fullWidth = false,\n placeholder,\n disabled,\n className,\n id: providedId,\n onFocus,\n onBlur,\n onKeyDown,\n ...rest\n },\n ref,\n ) => {\n const generatedId = useId();\n const inputId = providedId || generatedId;\n const listboxId = `${inputId}-listbox`;\n\n const containerRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n const dropdownRef = useRef<HTMLDivElement>(null);\n\n const [isOpen, setIsOpen] = useState(false);\n const [inputValue, setInputValue] = useState(\"\");\n const [highlightedIndex, setHighlightedIndex] = useState(-1);\n const [dropdownPosition, setDropdownPosition] = useState({\n top: 0,\n left: 0,\n width: 0,\n });\n\n // Find the selected option\n const selectedOption = useMemo(\n () => options.find((opt) => opt.value === value) ?? null,\n [options, value],\n );\n\n // Sync input value with selection\n useEffect(() => {\n if (selectedOption) {\n setInputValue(selectedOption.label);\n } else if (!allowFreeInput) {\n setInputValue(\"\");\n }\n }, [selectedOption, allowFreeInput]);\n\n // Filter options based on input\n const filteredOptions = useMemo(() => {\n if (inputValue.length < minChars) return [];\n return options.filter((opt) => filterFn(opt, inputValue));\n }, [options, inputValue, minChars, filterFn]);\n\n // Update dropdown position\n const updatePosition = useCallback(() => {\n if (!containerRef.current) return;\n\n const rect = containerRef.current.getBoundingClientRect();\n setDropdownPosition({\n top: rect.bottom + window.scrollY + 4,\n left: rect.left + window.scrollX,\n width: rect.width,\n });\n }, []);\n\n useEffect(() => {\n if (isOpen) {\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 }\n }, [isOpen, updatePosition]);\n\n // Handle click outside\n useEffect(() => {\n if (!isOpen) return;\n\n const handleClickOutside = (event: MouseEvent) => {\n const target = event.target as Node;\n if (\n containerRef.current &&\n !containerRef.current.contains(target) &&\n dropdownRef.current &&\n !dropdownRef.current.contains(target)\n ) {\n setIsOpen(false);\n // Reset input if no selection\n if (!allowFreeInput && !value) {\n setInputValue(\"\");\n } else if (selectedOption) {\n setInputValue(selectedOption.label);\n }\n }\n };\n\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () =>\n document.removeEventListener(\"mousedown\", handleClickOutside);\n }, [isOpen, allowFreeInput, value, selectedOption]);\n\n const handleInputChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = e.target.value;\n setInputValue(newValue);\n setHighlightedIndex(-1);\n onInputChange?.(newValue);\n\n if (!isOpen && newValue.length >= minChars) {\n setIsOpen(true);\n }\n\n // Clear selection if input doesn't match and not allowing free input\n if (\n selectedOption &&\n newValue !== selectedOption.label &&\n !allowFreeInput\n ) {\n onChange?.(null, null);\n }\n },\n [\n isOpen,\n minChars,\n onInputChange,\n selectedOption,\n allowFreeInput,\n onChange,\n ],\n );\n\n const handleFocus = useCallback(\n (e: React.FocusEvent<HTMLInputElement>) => {\n if (openOnFocus && !disabled) {\n setIsOpen(true);\n }\n onFocus?.(e);\n },\n [openOnFocus, disabled, onFocus],\n );\n\n const handleBlur = useCallback(\n (e: React.FocusEvent<HTMLInputElement>) => {\n // Don't close immediately to allow click on options\n setTimeout(() => {\n if (!dropdownRef.current?.contains(document.activeElement)) {\n setIsOpen(false);\n if (!allowFreeInput && !value) {\n setInputValue(\"\");\n } else if (selectedOption) {\n setInputValue(selectedOption.label);\n }\n }\n }, 200);\n onBlur?.(e);\n },\n [allowFreeInput, value, selectedOption, onBlur],\n );\n\n const selectOption = useCallback(\n (option: ComboboxOption) => {\n if (option.disabled) return;\n\n onChange?.(option.value, option);\n setInputValue(option.label);\n setIsOpen(false);\n setHighlightedIndex(-1);\n inputRef.current?.focus();\n },\n [onChange],\n );\n\n const handleClear = useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation();\n onChange?.(null, null);\n setInputValue(\"\");\n inputRef.current?.focus();\n },\n [onChange],\n );\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLInputElement>) => {\n switch (e.key) {\n case \"ArrowDown\":\n e.preventDefault();\n if (!isOpen) {\n setIsOpen(true);\n } else {\n setHighlightedIndex((prev) =>\n Math.min(prev + 1, filteredOptions.length - 1),\n );\n }\n break;\n\n case \"ArrowUp\":\n e.preventDefault();\n setHighlightedIndex((prev) => Math.max(prev - 1, 0));\n break;\n\n case \"Enter\":\n e.preventDefault();\n if (\n isOpen &&\n highlightedIndex >= 0 &&\n filteredOptions[highlightedIndex]\n ) {\n selectOption(filteredOptions[highlightedIndex]);\n }\n break;\n\n case \"Escape\":\n e.preventDefault();\n setIsOpen(false);\n if (selectedOption) {\n setInputValue(selectedOption.label);\n } else {\n setInputValue(\"\");\n }\n break;\n\n case \"Tab\":\n setIsOpen(false);\n break;\n }\n\n onKeyDown?.(e);\n },\n [\n isOpen,\n highlightedIndex,\n filteredOptions,\n selectOption,\n selectedOption,\n onKeyDown,\n ],\n );\n\n // Scroll highlighted option into view\n useEffect(() => {\n if (highlightedIndex >= 0 && dropdownRef.current) {\n const options = dropdownRef.current.querySelectorAll('[role=\"option\"]');\n options[highlightedIndex]?.scrollIntoView({ block: \"nearest\" });\n }\n }, [highlightedIndex]);\n\n const containerClasses = [\n styles.container,\n styles[size],\n fullWidth && styles.fullWidth,\n disabled && styles.disabled,\n error && styles.error,\n className,\n ]\n .filter(Boolean)\n .join(\" \");\n\n const iconSize = size === \"sm\" ? 14 : size === \"lg\" ? 20 : 16;\n\n const renderOptionContent = (option: ComboboxOption, index: number) => {\n const isSelected = option.value === value;\n const isHighlighted = index === highlightedIndex;\n\n if (renderOption) {\n return renderOption(option, isSelected, isHighlighted);\n }\n\n return (\n <>\n {option.icon && (\n <span className={styles.optionIcon} aria-hidden=\"true\">\n {option.icon}\n </span>\n )}\n <div className={styles.optionContent}>\n <span className={styles.optionLabel}>{option.label}</span>\n {option.description && (\n <span className={styles.optionDescription}>\n {option.description}\n </span>\n )}\n </div>\n {isSelected && (\n <Check\n size={iconSize}\n className={styles.checkIcon}\n aria-hidden=\"true\"\n />\n )}\n </>\n );\n };\n\n const dropdownContent = (\n <div\n ref={dropdownRef}\n className={`${styles.dropdown} ${isOpen && styles.visible}`}\n style={{\n top: dropdownPosition.top,\n left: dropdownPosition.left,\n width: dropdownPosition.width,\n maxHeight,\n }}\n role=\"listbox\"\n id={listboxId}\n aria-label={label || placeholder}\n >\n {loading ? (\n <div className={styles.loading}>\n <Loader2 size={iconSize} className={styles.spinner} />\n <span>Loading...</span>\n </div>\n ) : filteredOptions.length === 0 ? (\n <div className={styles.empty}>{emptyText}</div>\n ) : (\n filteredOptions.map((option, index) => {\n const isHighlighted = index === highlightedIndex;\n const isSelected = option.value === value;\n\n return (\n <div\n key={option.value}\n className={[\n styles.option,\n isHighlighted && styles.highlighted,\n isSelected && styles.selected,\n option.disabled && styles.disabled,\n ]\n .filter(Boolean)\n .join(\" \")}\n role=\"option\"\n aria-selected={isSelected}\n aria-disabled={option.disabled}\n onClick={() => selectOption(option)}\n onMouseEnter={() => setHighlightedIndex(index)}\n >\n {renderOptionContent(option, index)}\n </div>\n );\n })\n )}\n </div>\n );\n\n return (\n <div className={containerClasses}>\n {label && (\n <label htmlFor={inputId} className={styles.label}>\n {label}\n </label>\n )}\n\n <div\n ref={containerRef}\n className={styles.inputWrapper}\n onClick={() => inputRef.current?.focus()}\n >\n <input\n {...rest}\n ref={(node) => {\n // Handle both refs\n if (typeof ref === \"function\") {\n ref(node);\n } else if (ref) {\n ref.current = node;\n }\n (\n inputRef as React.MutableRefObject<HTMLInputElement | null>\n ).current = node;\n }}\n id={inputId}\n type=\"text\"\n className={styles.input}\n value={inputValue}\n onChange={handleInputChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n disabled={disabled}\n placeholder={placeholder}\n role=\"combobox\"\n aria-expanded={isOpen}\n aria-haspopup=\"listbox\"\n aria-controls={listboxId}\n aria-autocomplete=\"list\"\n aria-activedescendant={\n highlightedIndex >= 0\n ? `${listboxId}-option-${highlightedIndex}`\n : undefined\n }\n />\n\n <div className={styles.actions}>\n {clearable && value && !disabled && (\n <button\n type=\"button\"\n className={styles.clearButton}\n onClick={handleClear}\n aria-label=\"Clear selection\"\n tabIndex={-1}\n >\n <X size={iconSize} />\n </button>\n )}\n <span\n className={`${styles.chevron} ${isOpen ? styles.open : \"\"}`}\n aria-hidden=\"true\"\n >\n <ChevronDown size={iconSize} />\n </span>\n </div>\n </div>\n\n {(helperText || error) && (\n <span className={error ? styles.errorText : styles.helperText}>\n {error || helperText}\n </span>\n )}\n\n {isOpen && createPortal(dropdownContent, document.body)}\n </div>\n );\n },\n);\n\nCombobox.displayName = \"Combobox\";\n"],"names":["defaultFilter","option","inputValue","searchTerm","Combobox","forwardRef","options","value","onChange","onInputChange","size","label","helperText","error","loading","clearable","allowFreeInput","filterFn","openOnFocus","minChars","emptyText","renderOption","maxHeight","fullWidth","placeholder","disabled","className","providedId","onFocus","onBlur","onKeyDown","rest","ref","generatedId","useId","inputId","listboxId","containerRef","useRef","inputRef","dropdownRef","isOpen","setIsOpen","useState","setInputValue","highlightedIndex","setHighlightedIndex","dropdownPosition","setDropdownPosition","selectedOption","useMemo","opt","useEffect","filteredOptions","updatePosition","useCallback","rect","handleClickOutside","event","target","handleInputChange","newValue","handleFocus","handleBlur","selectOption","handleClear","handleKeyDown","prev","containerClasses","styles","iconSize","renderOptionContent","index","isSelected","isHighlighted","jsxs","Fragment","jsx","Check","dropdownContent","Loader2","node","X","ChevronDown","createPortal"],"mappings":"qNAkCMA,GAAgB,CAACC,EAAwBC,IAAgC,CAC7E,MAAMC,EAAaD,EAAW,YAAA,EAAc,KAAA,EAC5C,OAAKC,EAGHF,EAAO,MAAM,YAAA,EAAc,SAASE,CAAU,GAC9CF,EAAO,MAAM,YAAA,EAAc,SAASE,CAAU,IAC7CF,EAAO,aAAa,cAAc,SAASE,CAAU,GAAK,IALrC,EAO1B,EAEaC,EAAWC,EAAAA,WACtB,CACE,CACE,QAAAC,EACA,MAAAC,EACA,SAAAC,EACA,cAAAC,EACA,KAAAC,EAAO,KACP,MAAAC,EACA,WAAAC,EACA,MAAAC,EACA,QAAAC,EAAU,GACV,UAAAC,EAAY,GACZ,eAAAC,EAAiB,GACjB,SAAAC,EAAWjB,GACX,YAAAkB,EAAc,GACd,SAAAC,EAAW,EACX,UAAAC,EAAY,mBACZ,aAAAC,EACA,UAAAC,EAAY,IACZ,UAAAC,EAAY,GACZ,YAAAC,EACA,SAAAC,EACA,UAAAC,EACA,GAAIC,EACJ,QAAAC,EACA,OAAAC,EACA,UAAAC,EACA,GAAGC,CAAA,EAELC,IACG,CACH,MAAMC,EAAcC,EAAAA,MAAA,EACdC,EAAUR,GAAcM,EACxBG,EAAY,GAAGD,CAAO,WAEtBE,EAAeC,EAAAA,OAAuB,IAAI,EAC1CC,EAAWD,EAAAA,OAAyB,IAAI,EACxCE,EAAcF,EAAAA,OAAuB,IAAI,EAEzC,CAACG,EAAQC,CAAS,EAAIC,EAAAA,SAAS,EAAK,EACpC,CAACzC,EAAY0C,CAAa,EAAID,EAAAA,SAAS,EAAE,EACzC,CAACE,EAAkBC,CAAmB,EAAIH,EAAAA,SAAS,EAAE,EACrD,CAACI,EAAkBC,EAAmB,EAAIL,WAAS,CACvD,IAAK,EACL,KAAM,EACN,MAAO,CAAA,CACR,EAGKM,EAAiBC,EAAAA,QACrB,IAAM5C,EAAQ,KAAM6C,GAAQA,EAAI,QAAU5C,CAAK,GAAK,KACpD,CAACD,EAASC,CAAK,CAAA,EAIjB6C,EAAAA,UAAU,IAAM,CACVH,EACFL,EAAcK,EAAe,KAAK,EACxBjC,GACV4B,EAAc,EAAE,CAEpB,EAAG,CAACK,EAAgBjC,CAAc,CAAC,EAGnC,MAAMqC,EAAkBH,EAAAA,QAAQ,IAC1BhD,EAAW,OAASiB,EAAiB,CAAA,EAClCb,EAAQ,OAAQ6C,GAAQlC,EAASkC,EAAKjD,CAAU,CAAC,EACvD,CAACI,EAASJ,EAAYiB,EAAUF,CAAQ,CAAC,EAGtCqC,EAAiBC,EAAAA,YAAY,IAAM,CACvC,GAAI,CAAClB,EAAa,QAAS,OAE3B,MAAMmB,EAAOnB,EAAa,QAAQ,sBAAA,EAClCW,GAAoB,CAClB,IAAKQ,EAAK,OAAS,OAAO,QAAU,EACpC,KAAMA,EAAK,KAAO,OAAO,QACzB,MAAOA,EAAK,KAAA,CACb,CACH,EAAG,CAAA,CAAE,EAELJ,EAAAA,UAAU,IAAM,CACd,GAAIX,EACF,OAAAa,EAAA,EACA,OAAO,iBAAiB,SAAUA,CAAc,EAChD,OAAO,iBAAiB,SAAUA,EAAgB,EAAI,EAE/C,IAAM,CACX,OAAO,oBAAoB,SAAUA,CAAc,EACnD,OAAO,oBAAoB,SAAUA,EAAgB,EAAI,CAC3D,CAEJ,EAAG,CAACb,EAAQa,CAAc,CAAC,EAG3BF,EAAAA,UAAU,IAAM,CACd,GAAI,CAACX,EAAQ,OAEb,MAAMgB,EAAsBC,GAAsB,CAChD,MAAMC,EAASD,EAAM,OAEnBrB,EAAa,SACb,CAACA,EAAa,QAAQ,SAASsB,CAAM,GACrCnB,EAAY,SACZ,CAACA,EAAY,QAAQ,SAASmB,CAAM,IAEpCjB,EAAU,EAAK,EAEX,CAAC1B,GAAkB,CAACT,EACtBqC,EAAc,EAAE,EACPK,GACTL,EAAcK,EAAe,KAAK,EAGxC,EAEA,gBAAS,iBAAiB,YAAaQ,CAAkB,EAClD,IACL,SAAS,oBAAoB,YAAaA,CAAkB,CAChE,EAAG,CAAChB,EAAQzB,EAAgBT,EAAO0C,CAAc,CAAC,EAElD,MAAMW,GAAoBL,EAAAA,YACvB,GAA2C,CAC1C,MAAMM,EAAW,EAAE,OAAO,MAC1BjB,EAAciB,CAAQ,EACtBf,EAAoB,EAAE,EACtBrC,IAAgBoD,CAAQ,EAEpB,CAACpB,GAAUoB,EAAS,QAAU1C,GAChCuB,EAAU,EAAI,EAKdO,GACAY,IAAaZ,EAAe,OAC5B,CAACjC,GAEDR,IAAW,KAAM,IAAI,CAEzB,EACA,CACEiC,EACAtB,EACAV,EACAwC,EACAjC,EACAR,CAAA,CACF,EAGIsD,GAAcP,EAAAA,YACjB,GAA0C,CACrCrC,GAAe,CAACO,GAClBiB,EAAU,EAAI,EAEhBd,IAAU,CAAC,CACb,EACA,CAACV,EAAaO,EAAUG,CAAO,CAAA,EAG3BmC,GAAaR,EAAAA,YAChB,GAA0C,CAEzC,WAAW,IAAM,CACVf,EAAY,SAAS,SAAS,SAAS,aAAa,IACvDE,EAAU,EAAK,EACX,CAAC1B,GAAkB,CAACT,EACtBqC,EAAc,EAAE,EACPK,GACTL,EAAcK,EAAe,KAAK,EAGxC,EAAG,GAAG,EACNpB,IAAS,CAAC,CACZ,EACA,CAACb,EAAgBT,EAAO0C,EAAgBpB,CAAM,CAAA,EAG1CmC,EAAeT,EAAAA,YAClBtD,GAA2B,CACtBA,EAAO,WAEXO,IAAWP,EAAO,MAAOA,CAAM,EAC/B2C,EAAc3C,EAAO,KAAK,EAC1ByC,EAAU,EAAK,EACfI,EAAoB,EAAE,EACtBP,EAAS,SAAS,MAAA,EACpB,EACA,CAAC/B,CAAQ,CAAA,EAGLyD,GAAcV,EAAAA,YACjB,GAAwB,CACvB,EAAE,gBAAA,EACF/C,IAAW,KAAM,IAAI,EACrBoC,EAAc,EAAE,EAChBL,EAAS,SAAS,MAAA,CACpB,EACA,CAAC/B,CAAQ,CAAA,EAGL0D,GAAgBX,EAAAA,YACnB,GAA6C,CAC5C,OAAQ,EAAE,IAAA,CACR,IAAK,YACH,EAAE,eAAA,EACGd,EAGHK,EAAqBqB,GACnB,KAAK,IAAIA,EAAO,EAAGd,EAAgB,OAAS,CAAC,CAAA,EAH/CX,EAAU,EAAI,EAMhB,MAEF,IAAK,UACH,EAAE,eAAA,EACFI,EAAqBqB,GAAS,KAAK,IAAIA,EAAO,EAAG,CAAC,CAAC,EACnD,MAEF,IAAK,QACH,EAAE,eAAA,EAEA1B,GACAI,GAAoB,GACpBQ,EAAgBR,CAAgB,GAEhCmB,EAAaX,EAAgBR,CAAgB,CAAC,EAEhD,MAEF,IAAK,SACH,EAAE,eAAA,EACFH,EAAU,EAAK,EAEbE,EADEK,EACYA,EAAe,MAEf,EAFoB,EAIpC,MAEF,IAAK,MACHP,EAAU,EAAK,EACf,KAAA,CAGJZ,IAAY,CAAC,CACf,EACA,CACEW,EACAI,EACAQ,EACAW,EACAf,EACAnB,CAAA,CACF,EAIFsB,EAAAA,UAAU,IAAM,CACVP,GAAoB,GAAKL,EAAY,SACvBA,EAAY,QAAQ,iBAAiB,iBAAiB,EAC9DK,CAAgB,GAAG,eAAe,CAAE,MAAO,UAAW,CAElE,EAAG,CAACA,CAAgB,CAAC,EAErB,MAAMuB,GAAmB,CACvBC,EAAAA,QAAO,UACPA,EAAAA,QAAO3D,CAAI,EACXa,GAAa8C,EAAAA,QAAO,UACpB5C,GAAY4C,EAAAA,QAAO,SACnBxD,GAASwD,EAAAA,QAAO,MAChB3C,CAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG,EAEL4C,EAAW5D,IAAS,KAAO,GAAKA,IAAS,KAAO,GAAK,GAErD6D,GAAsB,CAACtE,EAAwBuE,IAAkB,CACrE,MAAMC,EAAaxE,EAAO,QAAUM,EAC9BmE,EAAgBF,IAAU3B,EAEhC,OAAIxB,EACKA,EAAapB,EAAQwE,EAAYC,CAAa,EAIrDC,EAAAA,KAAAC,WAAA,CACG,SAAA,CAAA3E,EAAO,YACL,OAAA,CAAK,UAAWoE,EAAAA,QAAO,WAAY,cAAY,OAC7C,SAAApE,EAAO,IAAA,CACV,EAEF0E,EAAAA,KAAC,MAAA,CAAI,UAAWN,EAAAA,QAAO,cACrB,SAAA,CAAAQ,MAAC,OAAA,CAAK,UAAWR,EAAAA,QAAO,YAAc,WAAO,MAAM,EAClDpE,EAAO,aACN4E,MAAC,OAAA,CAAK,UAAWR,EAAAA,QAAO,kBACrB,WAAO,WAAA,CACV,CAAA,EAEJ,EACCI,GACCI,EAAAA,IAACC,EAAAA,MAAA,CACC,KAAMR,EACN,UAAWD,EAAAA,QAAO,UAClB,cAAY,MAAA,CAAA,CACd,EAEJ,CAEJ,EAEMU,GACJF,EAAAA,IAAC,MAAA,CACC,IAAKrC,EACL,UAAW,GAAG6B,EAAAA,QAAO,QAAQ,IAAI5B,GAAU4B,EAAAA,QAAO,OAAO,GACzD,MAAO,CACL,IAAKtB,EAAiB,IACtB,KAAMA,EAAiB,KACvB,MAAOA,EAAiB,MACxB,UAAAzB,CAAA,EAEF,KAAK,UACL,GAAIc,EACJ,aAAYzB,GAASa,EAEpB,SAAAV,EACC6D,EAAAA,KAAC,MAAA,CAAI,UAAWN,EAAAA,QAAO,QACrB,SAAA,CAAAQ,EAAAA,IAACG,EAAAA,QAAA,CAAQ,KAAMV,EAAU,UAAWD,EAAAA,QAAO,QAAS,EACpDQ,EAAAA,IAAC,QAAK,SAAA,YAAA,CAAU,CAAA,CAAA,CAClB,EACExB,EAAgB,SAAW,QAC5B,MAAA,CAAI,UAAWgB,EAAAA,QAAO,MAAQ,WAAU,EAEzChB,EAAgB,IAAI,CAACpD,EAAQuE,IAAU,CACrC,MAAME,EAAgBF,IAAU3B,EAC1B4B,EAAaxE,EAAO,QAAUM,EAEpC,OACEsE,EAAAA,IAAC,MAAA,CAEC,UAAW,CACTR,EAAAA,QAAO,OACPK,GAAiBL,EAAAA,QAAO,YACxBI,GAAcJ,EAAAA,QAAO,SACrBpE,EAAO,UAAYoE,UAAO,QAAA,EAEzB,OAAO,OAAO,EACd,KAAK,GAAG,EACX,KAAK,SACL,gBAAeI,EACf,gBAAexE,EAAO,SACtB,QAAS,IAAM+D,EAAa/D,CAAM,EAClC,aAAc,IAAM6C,EAAoB0B,CAAK,EAE5C,SAAAD,GAAoBtE,EAAQuE,CAAK,CAAA,EAf7BvE,EAAO,KAAA,CAkBlB,CAAC,CAAA,CAAA,EAKP,OACE0E,EAAAA,KAAC,MAAA,CAAI,UAAWP,GACb,SAAA,CAAAzD,SACE,QAAA,CAAM,QAASwB,EAAS,UAAWkC,UAAO,MACxC,SAAA1D,CAAA,CACH,EAGFgE,EAAAA,KAAC,MAAA,CACC,IAAKtC,EACL,UAAWgC,EAAAA,QAAO,aAClB,QAAS,IAAM9B,EAAS,SAAS,MAAA,EAEjC,SAAA,CAAAsC,EAAAA,IAAC,QAAA,CACE,GAAG9C,EACJ,IAAMkD,GAAS,CAET,OAAOjD,GAAQ,WACjBA,EAAIiD,CAAI,EACCjD,IACTA,EAAI,QAAUiD,GAGd1C,EACA,QAAU0C,CACd,EACA,GAAI9C,EACJ,KAAK,OACL,UAAWkC,EAAAA,QAAO,MAClB,MAAOnE,EACP,SAAU0D,GACV,QAASE,GACT,OAAQC,GACR,UAAWG,GACX,SAAAzC,EACA,YAAAD,EACA,KAAK,WACL,gBAAeiB,EACf,gBAAc,UACd,gBAAeL,EACf,oBAAkB,OAClB,wBACES,GAAoB,EAChB,GAAGT,CAAS,WAAWS,CAAgB,GACvC,MAAA,CAAA,EAIR8B,EAAAA,KAAC,MAAA,CAAI,UAAWN,EAAAA,QAAO,QACpB,SAAA,CAAAtD,GAAaR,GAAS,CAACkB,GACtBoD,EAAAA,IAAC,SAAA,CACC,KAAK,SACL,UAAWR,EAAAA,QAAO,YAClB,QAASJ,GACT,aAAW,kBACX,SAAU,GAEV,SAAAY,EAAAA,IAACK,EAAAA,EAAA,CAAE,KAAMZ,CAAA,CAAU,CAAA,CAAA,EAGvBO,EAAAA,IAAC,OAAA,CACC,UAAW,GAAGR,EAAAA,QAAO,OAAO,IAAI5B,EAAS4B,EAAAA,QAAO,KAAO,EAAE,GACzD,cAAY,OAEZ,SAAAQ,EAAAA,IAACM,EAAAA,YAAA,CAAY,KAAMb,CAAA,CAAU,CAAA,CAAA,CAC/B,CAAA,CACF,CAAA,CAAA,CAAA,GAGA1D,GAAcC,IACdgE,EAAAA,IAAC,OAAA,CAAK,UAAWhE,EAAQwD,EAAAA,QAAO,UAAYA,EAAAA,QAAO,WAChD,SAAAxD,GAASD,CAAA,CACZ,EAGD6B,GAAU2C,GAAAA,aAAaL,GAAiB,SAAS,IAAI,CAAA,EACxD,CAEJ,CACF,EAEA3E,EAAS,YAAc"}
|
package/dist/index26.mjs
CHANGED
|
@@ -2,7 +2,7 @@ import { jsx as s, jsxs as v, Fragment as fe } from "react/jsx-runtime";
|
|
|
2
2
|
import { forwardRef as me, useId as he, useRef as M, useState as R, useMemo as Y, useEffect as z, useCallback as h } from "react";
|
|
3
3
|
import { createPortal as pe } from "react-dom";
|
|
4
4
|
import { Loader2 as be, X as we, ChevronDown as ve, Check as ge } from "lucide-react";
|
|
5
|
-
import t from "./
|
|
5
|
+
import t from "./index97.mjs";
|
|
6
6
|
const Ne = (d, l) => {
|
|
7
7
|
const o = l.toLowerCase().trim();
|
|
8
8
|
return o ? d.label.toLowerCase().includes(o) || d.value.toLowerCase().includes(o) || (d.description?.toLowerCase().includes(o) ?? !1) : !0;
|
package/dist/index27.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("react/jsx-runtime"),s=require("react"),H=require("react-dom"),K=require("lucide-react"),r=require("./
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("react/jsx-runtime"),s=require("react"),H=require("react-dom"),K=require("lucide-react"),r=require("./index137.cjs"),U=require("./index33.cjs"),B=s.createContext(null);function S(){const e=s.useContext(B);if(!e)throw new Error("Command compound components must be used within <Command>");return e}const $=(e,t)=>t?e.toLowerCase().includes(t.toLowerCase())?1:0:1,d=({value:e,onValueChange:t,filter:n=$,children:i,className:c,...l})=>{const[C,b]=s.useState(""),[v,p]=s.useState(0),y=s.useRef(new Map),[,j]=s.useState(0),x=s.useId(),m=e!==void 0?e:C,I=s.useCallback(o=>{e!==void 0?t?.(o):b(o),p(0)},[e,t]),N=s.useCallback((o,u)=>{y.current.set(o,u),j(f=>f+1)},[]),w=s.useCallback(o=>{y.current.delete(o),j(u=>u+1)},[]),g=s.useCallback(()=>{const o=[];for(const[u,f]of y.current)n(f,m)>0&&o.push(u);return o},[n,m]),h=s.useMemo(()=>({search:m,setSearch:I,filter:n,activeIndex:v,setActiveIndex:p,registerItem:N,unregisterItem:w,items:y.current,getVisibleItems:g,listId:x}),[m,I,n,v,p,N,w,g,x]),k=s.useRef(null),E=s.useCallback(o=>{const u=g();if(u.length){if(o.key==="ArrowDown")o.preventDefault(),p(f=>(f+1)%u.length);else if(o.key==="ArrowUp")o.preventDefault(),p(f=>(f-1+u.length)%u.length);else if(o.key==="Enter"){o.preventDefault();const f=u[v];f&&k.current?.querySelector(`[data-command-id="${f}"]`)?.click()}}},[g,v,p]),T=[r.default.command,c].filter(Boolean).join(" ");return a.jsx(B.Provider,{value:h,children:a.jsx("div",{ref:k,className:T,onKeyDown:E,...l,children:i})})},R=({className:e,...t})=>{const{search:n,setSearch:i,listId:c}=S(),l=s.useRef(null);s.useEffect(()=>{l.current?.focus()},[]);const C=[r.default.inputWrapper,e].filter(Boolean).join(" ");return a.jsxs("div",{className:C,children:[a.jsx(K.Search,{size:16,className:r.default.searchIcon,"aria-hidden":"true"}),a.jsx("input",{ref:l,className:r.default.input,value:n,onChange:b=>i(b.target.value),type:"text",role:"combobox","aria-expanded":"true","aria-autocomplete":"list","aria-controls":c,...t})]})};R.displayName="Command.Input";const q=({children:e,className:t,...n})=>{const{listId:i}=S(),c=[r.default.list,t].filter(Boolean).join(" ");return a.jsx("div",{id:i,className:c,role:"listbox",...n,children:e})};q.displayName="Command.List";const L=({children:e,className:t})=>{const{getVisibleItems:n}=S();if(n().length>0)return null;const c=[r.default.empty,t].filter(Boolean).join(" ");return a.jsx("div",{className:c,role:"status","aria-live":"polite",children:e})};L.displayName="Command.Empty";const A=({heading:e,children:t,className:n})=>{const i=[r.default.group,n].filter(Boolean).join(" ");return a.jsxs("div",{className:i,role:"group","aria-label":e,children:[e&&a.jsx("div",{className:r.default.groupHeading,children:e}),t]})};A.displayName="Command.Group";let z=0;const V=({onSelect:e,disabled:t=!1,value:n,children:i,className:c,...l})=>{const{filter:C,search:b,activeIndex:v,getVisibleItems:p,registerItem:y,unregisterItem:j}=S(),x=s.useRef("");x.current||(x.current=`cmd-item-${++z}`);const m=x.current,I=n||D(i);s.useEffect(()=>(y(m,I),()=>j(m)),[m,I,y,j]);const N=C(I,b)>0,h=p().indexOf(m)===v,k=()=>{t||e?.()},E=[r.default.item,t&&r.default.itemDisabled,!N&&r.default.itemHidden,c].filter(Boolean).join(" ");return a.jsx("div",{className:E,"data-command-id":m,"data-active":h,role:"option","aria-selected":h,"aria-disabled":t,onClick:k,...l,children:i})};V.displayName="Command.Item";const G=({className:e})=>{const t=[r.default.separator,e].filter(Boolean).join(" ");return a.jsx(U.Divider,{spacing:"none",className:t})};G.displayName="Command.Separator";const M=({children:e,className:t})=>{const n=[r.default.shortcut,t].filter(Boolean).join(" ");return a.jsx("span",{className:n,children:e})};M.displayName="Command.Shortcut";const P=({open:e,onOpenChange:t,children:n,className:i})=>{if(s.useEffect(()=>{if(!e)return;const l=C=>{C.key==="Escape"&&t(!1)};return document.addEventListener("keydown",l),()=>document.removeEventListener("keydown",l)},[e,t]),s.useEffect(()=>(e?document.body.style.overflow="hidden":document.body.style.overflow="",()=>{document.body.style.overflow=""}),[e]),!e)return null;const c=l=>{l.target===l.currentTarget&&t(!1)};return H.createPortal(a.jsx("div",{className:r.default.dialogBackdrop,onClick:c,children:a.jsx("div",{className:[r.default.dialogContent,i].filter(Boolean).join(" "),children:a.jsx(d,{children:n})})}),document.body)};P.displayName="Command.Dialog";d.Input=R;d.List=q;d.Empty=L;d.Group=A;d.Item=V;d.Separator=G;d.Shortcut=M;d.Dialog=P;d.displayName="Command";function D(e){return typeof e=="string"?e:typeof e=="number"?String(e):Array.isArray(e)?e.map(D).join(" "):s.isValidElement(e)&&e.props?D(e.props.children):""}exports.Command=d;
|
|
2
2
|
//# sourceMappingURL=index27.cjs.map
|
package/dist/index27.mjs
CHANGED
|
@@ -2,7 +2,7 @@ import { jsx as a, jsxs as R } from "react/jsx-runtime";
|
|
|
2
2
|
import z, { useState as L, useRef as S, useId as F, useCallback as b, useMemo as W, createContext as J, useEffect as j, useContext as Q } from "react";
|
|
3
3
|
import { createPortal as X } from "react-dom";
|
|
4
4
|
import { Search as Y } from "lucide-react";
|
|
5
|
-
import s from "./
|
|
5
|
+
import s from "./index137.mjs";
|
|
6
6
|
import { Divider as Z } from "./index33.mjs";
|
|
7
7
|
const V = J(null);
|
|
8
8
|
function B() {
|
package/dist/index28.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("react/jsx-runtime"),n=require("react"),w=require("lucide-react"),a=require("./
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("react/jsx-runtime"),n=require("react"),w=require("lucide-react"),a=require("./index147.cjs"),S=n.forwardRef(({open:d,onOpenChange:c,commands:m,recentCommands:i,onSelect:D,placeholder:E="Type a command or search...",emptyMessage:C="No results found.",footer:N,className:L,...R},M)=>{const[r,b]=n.useState(""),[o,u]=n.useState(0),v=n.useRef(null),y=n.useRef(null),k=n.useMemo(()=>{if(!r)return m;const e=r.toLowerCase();return m.filter(t=>{const l=t.label.toLowerCase().includes(e),h=t.description?.toLowerCase().includes(e),j=t.keywords?.some(K=>K.toLowerCase().includes(e));return l||h||j})},[m,r]),p=n.useMemo(()=>{const e=[],t=[];return k.forEach(l=>{if(l.category){const h=e.find(j=>j.title===l.category);h?h.commands.push(l):e.push({title:l.category,commands:[l]})}else t.push(l)}),t.length>0&&e.unshift({title:"",commands:t}),e},[k]),f=n.useMemo(()=>{const e=[];return i&&i.length>0&&!r&&e.push(...i),p.forEach(t=>{e.push(...t.commands)}),e},[p,i,r]);n.useEffect(()=>{d&&(b(""),u(0),setTimeout(()=>v.current?.focus(),0))},[d]);const $=n.useCallback(e=>{switch(e.key){case"ArrowDown":e.preventDefault(),u(t=>Math.min(t+1,f.length-1));break;case"ArrowUp":e.preventDefault(),u(t=>Math.max(t-1,0));break;case"Enter":{e.preventDefault();const t=f[o];t&&!t.disabled&&x(t);break}case"Escape":e.preventDefault(),c(!1);break}},[f,o,c]),x=e=>{D?.(e),e.onSelect(),c(!1)};if(n.useEffect(()=>{const e=y.current;if(!e)return;const t=e.querySelector(`[data-index="${o}"]`);t&&t.scrollIntoView({block:"nearest"})},[o]),n.useEffect(()=>{const e=t=>{(t.metaKey||t.ctrlKey)&&t.key==="k"&&(t.preventDefault(),c(!d))};return document.addEventListener("keydown",e),()=>document.removeEventListener("keydown",e)},[d,c]),!d)return null;const I=[a.default.commandBar,L].filter(Boolean).join(" ");let g=0;return s.jsx("div",{className:a.default.overlay,onClick:()=>c(!1),children:s.jsxs("div",{ref:M,className:I,onClick:e=>e.stopPropagation(),onKeyDown:$,...R,children:[s.jsxs("div",{className:a.default.inputWrapper,children:[s.jsx(w.Search,{size:18,className:a.default.searchIcon}),s.jsx("input",{ref:v,type:"text",className:a.default.input,placeholder:E,value:r,onChange:e=>{b(e.target.value),u(0)},autoComplete:"off",autoCorrect:"off",spellCheck:!1}),s.jsx("kbd",{className:a.default.shortcutHint,children:"ESC"})]}),s.jsx("div",{ref:y,className:a.default.results,children:f.length===0?s.jsx("div",{className:a.default.empty,children:C}):s.jsxs(s.Fragment,{children:[i&&i.length>0&&!r&&s.jsxs("div",{className:a.default.group,children:[s.jsx("div",{className:a.default.groupTitle,children:"Recent"}),i.map(e=>{const t=g++;return s.jsxs("button",{type:"button","data-index":t,className:`${a.default.item} ${t===o?a.default.itemSelected:""} ${e.disabled?a.default.itemDisabled:""}`,onClick:()=>!e.disabled&&x(e),onMouseEnter:()=>u(t),children:[e.icon&&s.jsx("span",{className:a.default.itemIcon,children:e.icon}),s.jsxs("span",{className:a.default.itemContent,children:[s.jsx("span",{className:a.default.itemLabel,children:e.label}),e.description&&s.jsx("span",{className:a.default.itemDescription,children:e.description})]}),e.shortcut&&s.jsx("kbd",{className:a.default.itemShortcut,children:e.shortcut})]},`recent-${e.id}`)})]}),p.map(e=>s.jsxs("div",{className:a.default.group,children:[e.title&&s.jsx("div",{className:a.default.groupTitle,children:e.title}),e.commands.map(t=>{const l=g++;return s.jsxs("button",{type:"button","data-index":l,className:`${a.default.item} ${l===o?a.default.itemSelected:""} ${t.disabled?a.default.itemDisabled:""}`,onClick:()=>!t.disabled&&x(t),onMouseEnter:()=>u(l),children:[t.icon&&s.jsx("span",{className:a.default.itemIcon,children:t.icon}),s.jsxs("span",{className:a.default.itemContent,children:[s.jsx("span",{className:a.default.itemLabel,children:t.label}),t.description&&s.jsx("span",{className:a.default.itemDescription,children:t.description})]}),t.shortcut&&s.jsx("kbd",{className:a.default.itemShortcut,children:t.shortcut})]},t.id)})]},e.title||"ungrouped"))]})}),N?s.jsx("div",{className:a.default.footer,children:N}):s.jsxs("div",{className:a.default.footer,children:[s.jsxs("span",{className:a.default.footerHint,children:[s.jsx(w.Command,{size:12})," ",s.jsx("span",{children:"K to toggle"})]}),s.jsxs("span",{className:a.default.footerHint,children:[s.jsx("span",{children:"↑↓"})," to navigate"]}),s.jsxs("span",{className:a.default.footerHint,children:[s.jsx("span",{children:"↵"})," to select"]})]})]})})});S.displayName="CommandBar";exports.CommandBar=S;
|
|
2
2
|
//# sourceMappingURL=index28.cjs.map
|
package/dist/index28.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsx as a, jsxs as n, Fragment as j } from "react/jsx-runtime";
|
|
2
2
|
import { forwardRef as z, useState as E, useRef as C, useMemo as v, useEffect as y, useCallback as A } from "react";
|
|
3
3
|
import { Search as q, Command as F } from "lucide-react";
|
|
4
|
-
import s from "./
|
|
4
|
+
import s from "./index147.mjs";
|
|
5
5
|
const G = z(
|
|
6
6
|
({
|
|
7
7
|
open: u,
|
package/dist/index29.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const l=require("react/jsx-runtime"),c=require("react"),e=require("./
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const l=require("react/jsx-runtime"),c=require("react"),e=require("./index182.cjs"),t=c.forwardRef(({size:r="lg",centered:n=!0,padded:a=!0,className:o,children:i,...s},u)=>{const d=[e.default.container,e.default[r],n&&e.default.centered,a&&e.default.padded,o].filter(Boolean).join(" ");return l.jsx("div",{ref:u,className:d,...s,children:i})});t.displayName="Container";exports.Container=t;
|
|
2
2
|
//# sourceMappingURL=index29.cjs.map
|
package/dist/index29.mjs
CHANGED
package/dist/index30.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("react/jsx-runtime"),f=require("react"),b=require("lucide-react"),e=require("./
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("react/jsx-runtime"),f=require("react"),b=require("lucide-react"),e=require("./index132.cjs"),q=f.forwardRef(({left:n,right:i,children:u,className:x,...k},r)=>a.jsxs("div",{ref:r,className:`${e.default.toolbar} ${x||""}`,...k,children:[n&&a.jsx("div",{className:e.default.toolbarLeft,children:n}),u,i&&a.jsx("div",{className:e.default.toolbarRight,children:i})]}));q.displayName="DataTable.Toolbar";const I=f.forwardRef(({pagination:n,onChange:i,className:u,...x},k)=>{const{page:r,pageSize:h,total:N,pageSizeOptions:T=[10,25,50,100]}=n,m=Math.ceil(N/h),M=(r-1)*h+1,y=Math.min(r*h,N),v=o=>{o>=1&&o<=m&&i({page:o,pageSize:h})},g=o=>{i({page:1,pageSize:Number(o.target.value)})};return a.jsxs("div",{ref:k,className:`${e.default.pagination} ${u||""}`,...x,children:[a.jsxs("div",{className:e.default.paginationInfo,children:[a.jsxs("span",{className:e.default.paginationText,children:[M,"-",y," of ",N]}),a.jsx("select",{className:e.default.pageSizeSelect,value:h,onChange:g,children:T.map(o=>a.jsxs("option",{value:o,children:[o," / page"]},o))})]}),a.jsxs("div",{className:e.default.paginationControls,children:[a.jsx("button",{type:"button",className:e.default.paginationButton,onClick:()=>v(r-1),disabled:r<=1,"aria-label":"Previous page",children:a.jsx(b.ChevronLeft,{size:16})}),a.jsxs("span",{className:e.default.paginationPages,children:[r," / ",m]}),a.jsx("button",{type:"button",className:e.default.paginationButton,onClick:()=>v(r+1),disabled:r>=m,"aria-label":"Next page",children:a.jsx(b.ChevronRight,{size:16})})]})]})});I.displayName="DataTable.Pagination";const R=f.forwardRef(({state:n,className:i,...u},x)=>a.jsxs("div",{ref:x,className:`${e.default.emptyState} ${i||""}`,...u,children:[n.icon&&a.jsx("div",{className:e.default.emptyIcon,children:n.icon}),a.jsx("h3",{className:e.default.emptyTitle,children:n.title}),n.description&&a.jsx("p",{className:e.default.emptyDescription,children:n.description}),n.action&&a.jsx("div",{className:e.default.emptyAction,children:n.action})]}));R.displayName="DataTable.EmptyState";function oe({columns:n,data:i,rowKey:u="id",searchable:x=!1,searchPlaceholder:k="Search...",searchValue:r,onSearchChange:h,pagination:N,onPaginationChange:T,selectable:m=!1,selectedKeys:M,onSelectionChange:y,bulkActions:v,rowActions:g,sort:o,onSortChange:S,emptyState:B,loading:E=!1,striped:K=!1,hoverable:W=!0,compact:w=!1,stickyHeader:H=!1,maxHeight:U,onRowClick:_,toolbar:z,className:F,...G},J){const[Q,X]=f.useState(""),[Y,O]=f.useState([]),[Z,ee]=f.useState(),[P,V]=f.useState(null),$=r??Q,d=M??Y,p=o??Z,A=f.useCallback((t,s)=>typeof u=="function"?u(t,s):t[u]??s,[u]),ae=t=>{const s=t.target.value;h?h(s):X(s)},te=t=>{if(!t.sortable)return;let s;p?.key===t.key?p.direction==="asc"?s={key:t.key,direction:"desc"}:s=void 0:s={key:t.key,direction:"asc"},S?S(s):ee(s)},se=()=>{const t=i.map((c,j)=>A(c,j)),s=d.length===i.length?[]:t;y?y(s):O(s)},le=t=>{const s=d.includes(t)?d.filter(c=>c!==t):[...d,t];y?y(s):O(s)},D=f.useMemo(()=>{let t=[...i];if(!h&&$){const s=$.toLowerCase();t=t.filter(c=>Object.values(c).some(j=>String(j).toLowerCase().includes(s)))}return!S&&p&&t.sort((s,c)=>{const j=s[p.key],l=c[p.key],L=String(j).localeCompare(String(l));return p.direction==="asc"?L:-L}),t},[i,$,p,h,S]),ne=[e.default.dataTable,w&&e.default.compact,F].filter(Boolean).join(" "),ie=[e.default.table,K&&e.default.striped,W&&e.default.hoverable,H&&e.default.stickyHeader].filter(Boolean).join(" "),ce=i.length>0&&d.length===i.length,de=d.length>0&&d.length<i.length,re={icon:a.jsx(b.Inbox,{size:48}),title:"No data",description:"There are no items to display."};return a.jsxs("div",{ref:J,className:ne,...G,children:[(x||z||m&&d.length>0)&&a.jsxs("div",{className:e.default.toolbar,children:[a.jsxs("div",{className:e.default.toolbarLeft,children:[m&&d.length>0&&v&&a.jsxs("div",{className:e.default.bulkActions,children:[a.jsxs("span",{className:e.default.selectedCount,children:[d.length," selected"]}),v.map(t=>a.jsxs("button",{type:"button",className:`${e.default.bulkAction} ${t.variant==="danger"?e.default.bulkActionDanger:""}`,onClick:()=>t.onClick(d),children:[t.icon,a.jsx("span",{children:t.label})]},t.key))]}),z]}),a.jsx("div",{className:e.default.toolbarRight,children:x&&a.jsxs("div",{className:e.default.searchWrapper,children:[a.jsx(b.Search,{size:16,className:e.default.searchIcon}),a.jsx("input",{type:"text",className:e.default.searchInput,placeholder:k,value:$,onChange:ae})]})})]}),a.jsx("div",{className:e.default.tableContainer,style:{maxHeight:U},children:E?a.jsx("div",{className:e.default.loadingOverlay,children:a.jsx("div",{className:e.default.spinner})}):D.length===0?a.jsx(R,{state:B||re}):a.jsxs("table",{className:ie,children:[a.jsx("thead",{className:e.default.thead,children:a.jsxs("tr",{children:[m&&a.jsx("th",{className:`${e.default.th} ${e.default.checkboxCell}`,children:a.jsx("input",{type:"checkbox",className:e.default.checkbox,checked:ce,ref:t=>{t&&(t.indeterminate=de)},onChange:se,"aria-label":"Select all rows"})}),n.map(t=>a.jsx("th",{className:`${e.default.th} ${t.sortable?e.default.sortable:""} ${t.sticky?e.default[`sticky-${t.sticky}`]:""} ${t.hideOnMobile?e.default.hideOnMobile:""}`,style:{width:t.width,minWidth:t.minWidth,textAlign:t.align},onClick:()=>te(t),children:a.jsxs("span",{className:e.default.thContent,children:[t.header,t.sortable&&a.jsx("span",{className:e.default.sortIcon,children:p?.key===t.key?p.direction==="asc"?a.jsx(b.ChevronUp,{size:14}):a.jsx(b.ChevronDown,{size:14}):a.jsx(b.ChevronUp,{size:14,className:e.default.sortIconInactive})})]})},t.key)),g&&g.length>0&&a.jsx("th",{className:`${e.default.th} ${e.default.actionsCell}`,children:a.jsx("span",{className:"sr-only",children:"Actions"})})]})}),a.jsx("tbody",{className:e.default.tbody,children:D.map((t,s)=>{const c=A(t,s),j=d.includes(c);return a.jsxs("tr",{className:`${e.default.tr} ${j?e.default.trSelected:""}`,onClick:l=>{l.target.closest(`.${e.default.checkbox}`)||l.target.closest(`.${e.default.actionMenu}`)||_?.(t,s)},children:[m&&a.jsx("td",{className:`${e.default.td} ${e.default.checkboxCell}`,children:a.jsx("input",{type:"checkbox",className:e.default.checkbox,checked:j,onChange:()=>le(c),"aria-label":`Select row ${s+1}`})}),n.map(l=>a.jsx("td",{className:`${e.default.td} ${l.sticky?e.default[`sticky-${l.sticky}`]:""} ${l.hideOnMobile?e.default.hideOnMobile:""}`,style:{textAlign:l.align},children:l.render?l.render(t[l.key],t,s):String(t[l.key]??"")},l.key)),g&&g.length>0&&a.jsx("td",{className:`${e.default.td} ${e.default.actionsCell}`,children:a.jsxs("div",{className:e.default.actionMenu,children:[a.jsx("button",{type:"button",className:e.default.actionMenuTrigger,onClick:()=>V(P===c?null:c),"aria-label":"Row actions",children:a.jsx(b.MoreHorizontal,{size:16})}),P===c&&a.jsx("div",{className:e.default.actionMenuDropdown,children:g.filter(l=>!l.show||l.show(t)).map(l=>a.jsxs("button",{type:"button",className:`${e.default.actionMenuItem} ${l.variant==="danger"?e.default.actionMenuItemDanger:""}`,onClick:()=>{l.onClick(t),V(null)},children:[l.icon,a.jsx("span",{children:l.label})]},l.key))})]})})]},c)})})]})}),N&&D.length>0&&a.jsx(I,{pagination:N,onChange:T||(()=>{})})]})}const C=f.forwardRef(oe);C.Toolbar=q;C.Pagination=I;C.EmptyState=R;exports.DataTable=C;
|
|
2
2
|
//# sourceMappingURL=index30.cjs.map
|
package/dist/index30.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsxs as n, jsx as t } from "react/jsx-runtime";
|
|
2
2
|
import { forwardRef as T, useState as M, useCallback as pe, useMemo as me } from "react";
|
|
3
3
|
import { Search as be, ChevronUp as E, ChevronDown as Ne, MoreHorizontal as ge, Inbox as ye, ChevronLeft as ke, ChevronRight as ue } from "lucide-react";
|
|
4
|
-
import e from "./
|
|
4
|
+
import e from "./index132.mjs";
|
|
5
5
|
const K = T(
|
|
6
6
|
({ left: i, right: c, children: p, className: N, ...v }, d) => /* @__PURE__ */ n("div", { ref: d, className: `${e.toolbar} ${N || ""}`, ...v, children: [
|
|
7
7
|
i && /* @__PURE__ */ t("div", { className: e.toolbarLeft, children: i }),
|
package/dist/index31.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react/jsx-runtime"),r=require("react"),d=require("date-fns"),O=require("lucide-react"),l=require("./
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react/jsx-runtime"),r=require("react"),d=require("date-fns"),O=require("lucide-react"),l=require("./index179.cjs"),h=require("./index15.cjs"),R=require("./index58.cjs"),F=require("./index14.cjs"),x=e=>{const{mode:a="single",min:S,max:b,disabledDates:v,placeholder:m="Pick a date",presets:i,format:c="PPP",disabled:C=!1,triggerClassName:P,className:N}=e,[k,o]=r.useState(!1),f=r.useMemo(()=>a==="single"&&e.mode!=="range"?e.selected?d.format(e.selected,c):null:a==="range"&&e.mode==="range"&&e.selected?.from?e.selected.to?`${d.format(e.selected.from,c)} - ${d.format(e.selected.to,c)}`:d.format(e.selected.from,c):null,[a,e,c]),g=r.useCallback(n=>{if(a==="single"&&e.mode!=="range"){const s=e.onSelect;s?.(n),o(!1)}else if(a==="range"&&e.mode==="range"){const s=e.onSelect,u=n;s?.(u),u?.from&&u?.to&&o(!1)}},[a,e]),q=r.useCallback(n=>{if(a==="single"&&e.mode!=="range"){const s=e.onSelect;s?.(n.value)}else if(a==="range"&&e.mode==="range"){const s=e.onSelect;s?.(n.value)}o(!1)},[a,e]),y=[l.default.trigger,P].filter(Boolean).join(" "),B=[l.default.wrapper,N].filter(Boolean).join(" "),j={min:S,max:b,disabled:v},D=t.jsxs("div",{className:l.default.popoverContent,children:[i&&i.length>0&&t.jsx("div",{className:l.default.presets,children:i.map(n=>t.jsx("button",{type:"button",className:l.default.presetButton,onClick:()=>q(n),children:n.label},n.label))}),a==="single"?t.jsx(h.Calendar,{mode:"single",selected:e.mode!=="range"?e.selected:void 0,onSelect:g,...j}):t.jsx(h.Calendar,{mode:"range",selected:e.mode==="range"?e.selected:void 0,onSelect:g,...j})]}),w=t.jsx(F.Button,{variant:"secondary",className:y,disabled:C,"aria-label":m,icon:t.jsx(O.Calendar,{size:16,className:l.default.triggerIcon}),children:f?t.jsx("span",{children:f}):t.jsx("span",{className:l.default.placeholder,children:m})});return t.jsx("div",{className:B,children:t.jsx(R.Popover,{trigger:w,content:D,placement:"bottom-start",open:k,onOpenChange:o,showArrow:!1,offset:4,className:l.default.popover})})};x.displayName="DatePicker";exports.DatePicker=x;
|
|
2
2
|
//# sourceMappingURL=index31.cjs.map
|
package/dist/index31.mjs
CHANGED
|
@@ -2,7 +2,7 @@ import { jsxs as $, jsx as n } from "react/jsx-runtime";
|
|
|
2
2
|
import { useState as O, useMemo as z, useCallback as h } from "react";
|
|
3
3
|
import { format as c } from "date-fns";
|
|
4
4
|
import { Calendar as A } from "lucide-react";
|
|
5
|
-
import a from "./
|
|
5
|
+
import a from "./index179.mjs";
|
|
6
6
|
import { Calendar as S } from "./index15.mjs";
|
|
7
7
|
import { Popover as F } from "./index58.mjs";
|
|
8
8
|
import { Button as I } from "./index14.mjs";
|
package/dist/index32.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const l=require("react/jsx-runtime"),a=require("react"),P=require("lucide-react"),e=require("./
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const l=require("react/jsx-runtime"),a=require("react"),P=require("lucide-react"),e=require("./index103.cjs"),u=a.forwardRef(({open:t,onClose:s,title:f,description:m,subtitle:d,children:v,size:h="md",position:y="right",headerActions:j,footer:n,overlay:N=!0,closeOnOverlayClick:x=!0,closeOnEscape:r=!0,loading:b=!1,className:p,...w},D)=>{const c=a.useRef(null),o=m??d;if(a.useEffect(()=>{d&&process.env.NODE_ENV==="development"&&console.warn('[DetailPanel] The "subtitle" prop is deprecated. Use "description" instead. subtitle will be removed in v3.0.')},[d]),a.useEffect(()=>{if(!t||!r)return;const i=k=>{k.key==="Escape"&&s()};return document.addEventListener("keydown",i),()=>document.removeEventListener("keydown",i)},[t,r,s]),a.useEffect(()=>{if(t){const i=document.body.style.overflow;return document.body.style.overflow="hidden",setTimeout(()=>{c.current?.focus()},0),()=>{document.body.style.overflow=i}}},[t]),!t)return null;const E=()=>{x&&s()},g=[e.default.panel,e.default[`size-${h}`],e.default[`position-${y}`],p].filter(Boolean).join(" ");return l.jsxs("div",{className:e.default.container,children:[N&&l.jsx("div",{className:e.default.overlay,onClick:E,"aria-hidden":"true"}),l.jsxs("div",{ref:D||c,className:g,role:"dialog","aria-modal":"true","aria-labelledby":"detail-panel-title",tabIndex:-1,...w,children:[l.jsxs("div",{className:e.default.header,children:[l.jsxs("div",{className:e.default.headerContent,children:[l.jsx("h2",{id:"detail-panel-title",className:e.default.title,children:f}),o&&l.jsx("p",{className:e.default.subtitle,children:o})]}),l.jsxs("div",{className:e.default.headerActions,children:[j,l.jsx("button",{type:"button",className:e.default.closeButton,onClick:s,"aria-label":"Close panel",children:l.jsx(P.X,{size:20})})]})]}),l.jsx("div",{className:e.default.body,children:b?l.jsx("div",{className:e.default.loading,children:l.jsx("div",{className:e.default.spinner})}):v}),n&&l.jsx("div",{className:e.default.footer,children:n})]})]})});u.displayName="DetailPanel";exports.DetailPanel=u;
|
|
2
2
|
//# sourceMappingURL=index32.cjs.map
|
package/dist/index32.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsxs as a, jsx as i } from "react/jsx-runtime";
|
|
2
2
|
import { forwardRef as P, useRef as R, useEffect as s } from "react";
|
|
3
3
|
import { X as z } from "lucide-react";
|
|
4
|
-
import e from "./
|
|
4
|
+
import e from "./index103.mjs";
|
|
5
5
|
const B = P(
|
|
6
6
|
({
|
|
7
7
|
open: l,
|
package/dist/index33.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("react/jsx-runtime"),c=require("react"),e=require("./
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("react/jsx-runtime"),c=require("react"),e=require("./index109.cjs"),l=c.forwardRef(({orientation:s="horizontal",variant:t="solid",spacing:d="md",label:r,className:o,...n},u)=>{const i=[e.default.divider,e.default[s],e.default[t],e.default[`spacing-${d}`],r&&e.default.withLabel,o].filter(Boolean).join(" ");return r&&s==="horizontal"?a.jsxs("div",{className:i,role:"separator","aria-orientation":s,children:[a.jsx("span",{className:e.default.line}),a.jsx("span",{className:e.default.label,children:r}),a.jsx("span",{className:e.default.line})]}):a.jsx("hr",{ref:u,className:i,role:"separator","aria-orientation":s,...n})});l.displayName="Divider";exports.Divider=l;
|
|
2
2
|
//# sourceMappingURL=index33.cjs.map
|
package/dist/index33.mjs
CHANGED
package/dist/index34.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react/jsx-runtime"),s=require("react"),g=require("react-dom"),a=require("./
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react/jsx-runtime"),s=require("react"),g=require("react-dom"),a=require("./index139.cjs"),u=s.forwardRef(({children:e,className:r,...o},d)=>t.jsx("div",{ref:d,className:`${a.default.header} ${r||""}`,...o,children:e}));u.displayName="Drawer.Header";const f=s.forwardRef(({children:e,className:r,...o},d)=>t.jsx("div",{ref:d,className:`${a.default.body} ${r||""}`,...o,children:e}));f.displayName="Drawer.Body";const w=s.forwardRef(({children:e,className:r,...o},d)=>t.jsx("div",{ref:d,className:`${a.default.footer} ${r||""}`,...o,children:e}));w.displayName="Drawer.Footer";const m=s.forwardRef(({open:e,onClose:r,placement:o="right",size:d="md",closeOnBackdrop:n=!0,closeOnEscape:c=!0,showCloseButton:y=!0,children:v,className:b,...h},j)=>{const l=s.useCallback(i=>{c&&i.key==="Escape"&&r()},[c,r]),k=s.useCallback(()=>{n&&r()},[n,r]);if(s.useEffect(()=>{if(e){const i=document.body.style.overflow;return document.body.style.overflow="hidden",document.addEventListener("keydown",l),()=>{document.body.style.overflow=i,document.removeEventListener("keydown",l)}}},[e,l]),!e)return null;const x=[a.default.overlay,e&&a.default.overlayVisible].filter(Boolean).join(" "),D=[a.default.drawer,a.default[o],a.default[`size-${d}`],e&&a.default.drawerVisible,b].filter(Boolean).join(" "),N=t.jsxs("div",{className:x,children:[t.jsx("div",{className:a.default.backdrop,onClick:k,"aria-hidden":"true"}),t.jsxs("div",{ref:j,className:D,role:"dialog","aria-modal":"true",...h,children:[y&&t.jsx("button",{type:"button",className:a.default.closeButton,onClick:r,"aria-label":"Close drawer",children:t.jsx("svg",{width:"20",height:"20",viewBox:"0 0 20 20",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:t.jsx("path",{d:"M15 5L5 15M5 5L15 15",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})})}),v]})]});return g.createPortal(N,document.body)});m.displayName="Drawer";const p=Object.assign(m,{Header:u,Body:f,Footer:w});exports.Drawer=p;
|
|
2
2
|
//# sourceMappingURL=index34.cjs.map
|
package/dist/index34.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsxs as m, jsx as d } from "react/jsx-runtime";
|
|
2
2
|
import { forwardRef as s, useCallback as u, useEffect as j } from "react";
|
|
3
3
|
import { createPortal as L } from "react-dom";
|
|
4
|
-
import o from "./
|
|
4
|
+
import o from "./index139.mjs";
|
|
5
5
|
const w = s(
|
|
6
6
|
({ children: e, className: r, ...t }, a) => /* @__PURE__ */ d(
|
|
7
7
|
"div",
|
package/dist/index35.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("react/jsx-runtime"),s=require("react"),U=require("react-dom"),i=require("./
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("react/jsx-runtime"),s=require("react"),U=require("react-dom"),i=require("./index105.cjs"),V=(e,l,m)=>{const r=window.scrollX,c=window.scrollY,u=4;let n=0,h=0;switch(m){case"bottom-start":n=e.bottom+c+u,h=e.left+r;break;case"bottom":n=e.bottom+c+u,h=e.left+r+(e.width-l.width)/2;break;case"bottom-end":n=e.bottom+c+u,h=e.right+r-l.width;break;case"top-start":n=e.top+c-l.height-u,h=e.left+r;break;case"top":n=e.top+c-l.height-u,h=e.left+r+(e.width-l.width)/2;break;case"top-end":n=e.top+c-l.height-u,h=e.right+r-l.width;break}return{top:n,left:h}},_=({item:e,onSelect:l,onNavigate:m})=>{const r=()=>{e.disabled||(e.onClick?.(),l())},c=n=>{n.key==="Enter"||n.key===" "?(n.preventDefault(),r()):n.key==="ArrowDown"?(n.preventDefault(),m?.("down")):n.key==="ArrowUp"&&(n.preventDefault(),m?.("up"))},u=[i.default.item,e.disabled&&i.default.disabled,e.danger&&i.default.danger].filter(Boolean).join(" ");return a.jsxs("div",{className:u,role:"menuitem",tabIndex:e.disabled?-1:0,"aria-disabled":e.disabled,onClick:r,onKeyDown:c,children:[e.icon&&a.jsx("span",{className:i.default.icon,"aria-hidden":"true",children:e.icon}),a.jsx("span",{className:i.default.label,children:e.label}),e.shortcut&&a.jsx("span",{className:i.default.shortcut,"aria-hidden":"true",children:e.shortcut})]})},P=s.forwardRef(({trigger:e,items:l=[],groups:m=[],placement:r="bottom-start",open:c,onOpenChange:u,onSelect:n,minWidth:h=180,closeOnSelect:y=!0,className:F,...S},A)=>{const[B,M]=s.useState(!1),[C,z]=s.useState({top:0,left:0}),[v,E]=s.useState(-1),w=s.useRef(null),k=s.useRef(null),x=s.useRef(new Map);s.useImperativeHandle(A,()=>w.current);const j=c!==void 0,f=j?c:B,I=(m.length>0?m:[{items:l}]).flatMap(t=>t.items).filter(t=>!t.disabled),b=s.useCallback(t=>{j||M(t),u?.(t),t||E(-1)},[j,u]),p=s.useCallback(()=>{if(!w.current||!k.current)return;const t=w.current.getBoundingClientRect(),d=k.current.getBoundingClientRect(),o=V(t,d,r);z(o)},[r]);s.useEffect(()=>{if(f)return requestAnimationFrame(p),window.addEventListener("resize",p),window.addEventListener("scroll",p,!0),requestAnimationFrame(()=>{const t=x.current.get(0);t&&(t.focus(),E(0))}),()=>{window.removeEventListener("resize",p),window.removeEventListener("scroll",p,!0)}},[f,p]),s.useEffect(()=>{if(!f)return;const t=d=>{const o=d.target;w.current&&!w.current.contains(o)&&k.current&&!k.current.contains(o)&&b(!1)};return document.addEventListener("mousedown",t),()=>document.removeEventListener("mousedown",t)},[f,b]),s.useEffect(()=>{if(!f)return;const t=d=>{d.key==="Escape"&&b(!1)};return document.addEventListener("keydown",t),()=>document.removeEventListener("keydown",t)},[f,b]);const K=s.useCallback(()=>{b(!f)},[f,b]),T=s.useCallback(t=>{n?.(t),y&&b(!1)},[y,n,b]),X=s.useCallback(t=>{const d=I.length;if(d===0)return;let o;t==="down"?o=v<d-1?v+1:0:o=v>0?v-1:d-1,E(o),x.current.get(o)?.focus()},[v,I.length]),Y=s.isValidElement(e)?s.cloneElement(e,{onClick:K,"aria-expanded":f,"aria-haspopup":"menu"}):e,D=m.length>0?m:[{items:l}],H=[i.default.menu,f&&i.default.visible,F].filter(Boolean).join(" ");let N=0;const O=a.jsx("div",{ref:k,className:H,style:{top:C.top,left:C.left,minWidth:h},role:"menu","aria-orientation":"vertical",...S,children:D.map((t,d)=>a.jsxs("div",{className:i.default.group,children:[t.label&&a.jsx("div",{className:i.default.groupLabel,children:t.label}),t.items.map(o=>{const L=N;return o.disabled||N++,a.jsx("div",{ref:q=>{q&&!o.disabled&&x.current.set(L,q)},children:a.jsx(_,{item:o,onSelect:()=>T(o),onNavigate:X})},o.id)}),d<D.length-1&&a.jsx("div",{className:i.default.separator,role:"separator"})]},d))});return a.jsxs(a.Fragment,{children:[a.jsx("div",{ref:w,className:i.default.trigger,children:Y}),f&&U.createPortal(O,document.body)]})});P.displayName="Dropdown";exports.Dropdown=P;
|
|
2
2
|
//# sourceMappingURL=index35.cjs.map
|
package/dist/index35.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsx as m, jsxs as L, Fragment as O } from "react/jsx-runtime";
|
|
2
2
|
import { forwardRef as Q, useState as N, useRef as C, useImperativeHandle as W, useCallback as k, useEffect as x, isValidElement as Z, cloneElement as _ } from "react";
|
|
3
3
|
import { createPortal as $ } from "react-dom";
|
|
4
|
-
import r from "./
|
|
4
|
+
import r from "./index105.mjs";
|
|
5
5
|
const g = (e, s, u) => {
|
|
6
6
|
const a = window.scrollX, i = window.scrollY, d = 4;
|
|
7
7
|
let n = 0, f = 0;
|
package/dist/index36.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react/jsx-runtime"),f=require("react"),e=require("./
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react/jsx-runtime"),f=require("react"),e=require("./index161.cjs"),r=f.forwardRef(({icon:a,title:i,description:s,action:l,secondaryAction:d,size:c="md",className:m,...u},n)=>{const o=[e.default.emptyState,e.default[c],m].filter(Boolean).join(" ");return t.jsxs("div",{ref:n,className:o,...u,children:[a&&t.jsx("div",{className:e.default.icon,"aria-hidden":"true",children:a}),t.jsx("h3",{className:e.default.title,children:i}),s&&t.jsx("p",{className:e.default.description,children:s}),(l||d)&&t.jsxs("div",{className:e.default.actions,children:[l,d]})]})});r.displayName="EmptyState";exports.EmptyState=r;
|
|
2
2
|
//# sourceMappingURL=index36.cjs.map
|
package/dist/index36.mjs
CHANGED
package/dist/index37.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),o=require("react"),a=require("lucide-react"),t=require("./
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),o=require("react"),a=require("lucide-react"),t=require("./index136.cjs");class i extends o.Component{constructor(r){super(r),this.reset=()=>{this.setState({hasError:!1,error:null})},this.state={hasError:!1,error:null}}static getDerivedStateFromError(r){return{hasError:!0,error:r}}componentDidCatch(r,s){this.props.onError?.(r,s)}componentDidUpdate(r){this.state.hasError&&this.props.resetKey!==void 0&&r.resetKey!==this.props.resetKey&&this.reset()}render(){if(this.state.hasError&&this.state.error){const{fallback:r}=this.props;return typeof r=="function"?r(this.state.error,this.reset):r||e.jsxs("div",{className:t.default.errorBoundary,role:"alert",children:[e.jsx(a.AlertCircle,{size:32,className:t.default.icon}),e.jsx("p",{className:t.default.title,children:"Something went wrong"}),e.jsx("p",{className:t.default.message,children:this.state.error.message}),e.jsx("button",{className:t.default.resetButton,onClick:this.reset,type:"button",children:"Try again"})]})}return this.props.children}}exports.ErrorBoundary=i;
|
|
2
2
|
//# sourceMappingURL=index37.cjs.map
|
package/dist/index37.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsxs as o, jsx as t } from "react/jsx-runtime";
|
|
2
2
|
import i from "react";
|
|
3
3
|
import { AlertCircle as a } from "lucide-react";
|
|
4
|
-
import e from "./
|
|
4
|
+
import e from "./index136.mjs";
|
|
5
5
|
class m extends i.Component {
|
|
6
6
|
constructor(r) {
|
|
7
7
|
super(r), this.reset = () => {
|
package/dist/index38.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("react/jsx-runtime"),x=require("react"),b=require("lucide-react"),e=require("./
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("react/jsx-runtime"),x=require("react"),b=require("lucide-react"),e=require("./index146.cjs"),v=x.forwardRef(({label:i,error:s,helperText:t,leftIcon:r,rightIcon:d,fullWidth:I=!1,size:c="md",optional:u=!1,className:g,id:$,disabled:f,required:o,"aria-label":h,"aria-describedby":p,...y},F)=>{const C=x.useId(),n=$||`field-${C}`,m=`${n}-error`,j=`${n}-helper`,N=s&&!d,l=[];s&&l.push(m),t&&!s&&l.push(j),p&&l.push(p);const R=l.length>0?l.join(" "):void 0;!(i||h)&&process.env.NODE_ENV==="development"&&console.warn("Field: Missing accessible name. Provide either a `label` prop or `aria-label` for screen reader users.");const q=[e.default.fieldContainer,I&&e.default.fullWidth,s&&e.default.error,f&&e.default.disabled,g].filter(Boolean).join(" "),A=[e.default.input,e.default[c],r&&e.default.hasLeftIcon,(d||N)&&e.default.hasRightIcon].filter(Boolean).join(" "),B=c==="sm"?14:c==="lg"?20:16;return a.jsxs("div",{className:q,children:[i&&a.jsxs("label",{htmlFor:n,className:e.default.label,children:[a.jsx("span",{className:e.default.labelText,children:i}),u&&a.jsx("span",{className:e.default.optional,"aria-hidden":"true",children:"(optional)"}),o&&!u&&a.jsx("span",{className:e.default.required,"aria-hidden":"true",children:"*"})]}),a.jsxs("div",{className:e.default.inputWrapper,children:[r&&a.jsx("span",{className:e.default.leftIcon,"aria-hidden":"true",children:r}),a.jsx("input",{ref:F,id:n,className:A,disabled:f,required:o,"aria-required":o||void 0,"aria-invalid":s?"true":"false","aria-describedby":R,"aria-label":i?void 0:h,...y}),d&&a.jsx("span",{className:`${e.default.rightIcon} ${e.default.rightIconInteractive}`,children:d}),N&&a.jsx("span",{className:`${e.default.rightIcon} ${e.default.errorIconInline}`,"aria-hidden":"true",children:a.jsx(b.AlertCircle,{size:B})})]}),t&&!s&&a.jsx("p",{id:j,className:e.default.helperText,children:t}),s&&a.jsxs("p",{id:m,className:e.default.errorMessage,role:"alert","aria-live":"assertive",children:[a.jsx(b.AlertCircle,{size:14,"aria-hidden":"true",className:e.default.errorIconMessage}),a.jsx("span",{children:s})]})]})});v.displayName="Field";exports.Field=v;
|
|
2
2
|
//# sourceMappingURL=index38.cjs.map
|
package/dist/index38.mjs
CHANGED
package/dist/index39.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("react/jsx-runtime"),n=require("react"),o=require("lucide-react"),s=require("./
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("react/jsx-runtime"),n=require("react"),o=require("lucide-react"),s=require("./index174.cjs"),G=t=>t.startsWith("image/")?o.FileImage:t.startsWith("video/")?o.FileVideo:t.startsWith("audio/")?o.FileAudio:t.includes("pdf")||t.includes("document")?o.FileText:o.File,z=t=>{if(t===0)return"0 B";const i=1024,c=["B","KB","MB","GB"],h=Math.floor(Math.log(t)/Math.log(i));return`${parseFloat((t/Math.pow(i,h)).toFixed(1))} ${c[h]}`},$=n.forwardRef(({accept:t,maxFiles:i,maxSize:c,multiple:h=!0,onFilesAdded:C,onFileRemove:D,files:p=[],disabled:l=!1,dropzoneContent:M,placeholder:B="Drag and drop files here, or click to browse",showFileList:E=!0,compact:v=!1,variant:R="default",error:g,helperText:k,className:S,...W},y)=>{const x=n.useRef(null),[A,N]=n.useState(!1),[m,w]=n.useState(null),F=n.useCallback(e=>{const u=[],r=[],I=Array.from(e);return i&&p.length+I.length>i?(r.push(`Maximum ${i} files allowed`),{valid:u,errors:r}):(I.forEach(d=>{if(c&&d.size>c){r.push(`${d.name} exceeds maximum size of ${z(c)}`);return}if(t&&t.length>0&&!t.some(f=>f.startsWith(".")?d.name.toLowerCase().endsWith(f.toLowerCase()):f.endsWith("/*")?d.type.startsWith(f.replace("/*","/")):d.type===f)){r.push(`${d.name} is not an accepted file type`);return}u.push(d)}),{valid:u,errors:r})},[t,i,c,p.length]),j=n.useCallback(e=>{if(l)return;const{valid:u,errors:r}=F(e);r.length>0&&r[0]&&(w(r[0]),setTimeout(()=>w(null),3e3)),u.length>0&&C?.(u)},[l,F,C]),L=n.useCallback(e=>{e.preventDefault(),l||N(!0)},[l]),U=n.useCallback(e=>{e.preventDefault(),N(!1)},[]),b=n.useCallback(e=>{e.preventDefault(),N(!1),j(e.dataTransfer.files)},[j]),T=n.useCallback(e=>{e.target.files&&j(e.target.files),e.target.value=""},[j]),q=()=>{l||x.current?.click()},H=e=>{(e.key==="Enter"||e.key===" ")&&!l&&(e.preventDefault(),x.current?.click())},P=t?.join(","),K=[s.default.fileUploader,s.default[R],v&&s.default.compact,S].filter(Boolean).join(" "),O=[s.default.dropzone,A&&s.default.dropzoneDragging,l&&s.default.dropzoneDisabled,(g||m)&&s.default.dropzoneError].filter(Boolean).join(" ");return a.jsxs("div",{ref:y,className:K,...W,children:[a.jsxs("div",{className:O,onDragOver:L,onDragLeave:U,onDrop:b,onClick:q,onKeyDown:H,role:"button",tabIndex:l?-1:0,"aria-disabled":l,children:[a.jsx("input",{ref:x,type:"file",className:s.default.input,accept:P,multiple:h,onChange:T,disabled:l,"aria-hidden":"true"}),M||a.jsxs("div",{className:s.default.dropzoneContent,children:[a.jsx("div",{className:s.default.dropzoneIcon,children:a.jsx(o.Upload,{size:v?20:24})}),a.jsx("p",{className:s.default.dropzonePlaceholder,children:B}),!v&&a.jsxs("div",{className:s.default.dropzoneHints,children:[t&&a.jsxs("span",{className:s.default.dropzoneHint,children:["Accepted: ",t.join(", ")]}),c&&a.jsxs("span",{className:s.default.dropzoneHint,children:["Max size: ",z(c)]}),i&&a.jsxs("span",{className:s.default.dropzoneHint,children:["Max files: ",i]})]})]})]}),(g||m||k)&&a.jsx("div",{className:`${s.default.helperText} ${g||m?s.default.helperTextError:""}`,children:g||m||k}),E&&p.length>0&&a.jsx("ul",{className:s.default.fileList,children:p.map(e=>{const u=G(e.type);return a.jsxs("li",{className:s.default.fileItem,children:[a.jsx("div",{className:s.default.fileIcon,children:e.preview?a.jsx("img",{src:e.preview,alt:"",className:s.default.filePreview}):a.jsx(u,{size:20})}),a.jsxs("div",{className:s.default.fileInfo,children:[a.jsx("span",{className:s.default.fileName,children:e.name}),a.jsx("span",{className:s.default.fileSize,children:z(e.size)})]}),a.jsxs("div",{className:s.default.fileStatus,children:[e.status==="uploading"&&a.jsxs(a.Fragment,{children:[a.jsx("div",{className:s.default.progressBar,children:a.jsx("div",{className:s.default.progressFill,style:{width:`${e.progress||0}%`}})}),a.jsx(o.Loader2,{size:16,className:s.default.fileStatusIcon})]}),e.status==="completed"&&a.jsx(o.CheckCircle,{size:16,className:s.default.fileStatusSuccess}),e.status==="error"&&a.jsx(o.AlertCircle,{size:16,className:s.default.fileStatusError})]}),D&&a.jsx("button",{type:"button",className:s.default.fileRemove,onClick:r=>{r.stopPropagation(),D(e.id)},"aria-label":`Remove ${e.name}`,children:a.jsx(o.X,{size:16})})]},e.id)})})]})});$.displayName="FileUploader";exports.FileUploader=$;
|
|
2
2
|
//# sourceMappingURL=index39.cjs.map
|
package/dist/index39.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsxs as a, jsx as s, Fragment as X } from "react/jsx-runtime";
|
|
2
2
|
import { forwardRef as q, useRef as J, useState as M, useCallback as u } from "react";
|
|
3
3
|
import { Upload as Q, Loader2 as Y, CheckCircle as Z, AlertCircle as _, X as b, FileImage as ee, FileVideo as re, FileAudio as se, FileText as ne, File as te } from "lucide-react";
|
|
4
|
-
import r from "./
|
|
4
|
+
import r from "./index174.mjs";
|
|
5
5
|
const ae = (n) => n.startsWith("image/") ? ee : n.startsWith("video/") ? re : n.startsWith("audio/") ? se : n.includes("pdf") || n.includes("document") ? ne : te, C = (n) => {
|
|
6
6
|
if (n === 0) return "0 B";
|
|
7
7
|
const i = 1024, l = ["B", "KB", "MB", "GB"], p = Math.floor(Math.log(n) / Math.log(i));
|
package/dist/index40.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),o=require("react"),r=require("lucide-react"),l=require("./
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),o=require("react"),r=require("lucide-react"),l=require("./index177.cjs"),$=({filter:c,onSelect:a,onClose:d})=>{const[n,i]=o.useState([]),p=t=>{if(c.type==="multi-select"){const m=n.includes(t.value)?n.filter(f=>f!==t.value):[...n,t.value];i(m)}else a(t.value),d()},h=()=>{n.length>0&&a(n),d()};return e.jsxs("div",{className:l.default.dropdown,children:[c.options?.map(t=>e.jsxs("button",{type:"button",className:`${l.default.dropdownItem} ${n.includes(t.value)?l.default.dropdownItemSelected:""}`,onClick:()=>p(t),children:[c.type==="multi-select"&&e.jsx("span",{className:l.default.checkbox,children:n.includes(t.value)&&"✓"}),e.jsx("span",{children:t.label}),t.count!==void 0&&e.jsx("span",{className:l.default.optionCount,children:t.count})]},t.value)),c.type==="multi-select"&&e.jsxs("div",{className:l.default.dropdownFooter,children:[e.jsx("button",{type:"button",className:l.default.dropdownCancel,onClick:d,children:"Cancel"}),e.jsx("button",{type:"button",className:l.default.dropdownApply,onClick:h,children:"Apply"})]})]})},N=o.forwardRef(({filters:c,activeFilters:a,onFilterChange:d,onFilterRemove:n,onClearAll:i,searchable:p=!1,searchValue:h="",onSearchChange:t,searchPlaceholder:m="Search...",showCount:f=!0,compact:b=!1,className:k,...g},w)=>{const[C,x]=o.useState(null),j=o.useRef(null);o.useEffect(()=>{const s=u=>{j.current&&!j.current.contains(u.target)&&x(null)};return document.addEventListener("mousedown",s),()=>document.removeEventListener("mousedown",s)},[]);const S=(s,u)=>{d(s,u)},R=[l.default.filterBar,b&&l.default.compact,k].filter(Boolean).join(" ");return e.jsxs("div",{ref:w,className:R,...g,children:[p&&e.jsxs("div",{className:l.default.searchWrapper,children:[e.jsx(r.Search,{size:16,className:l.default.searchIcon}),e.jsx("input",{type:"text",className:l.default.searchInput,placeholder:m,value:h,onChange:s=>t?.(s.target.value)})]}),e.jsx("div",{className:l.default.filters,ref:j,children:c.map(s=>{const u=a.some(v=>v.key===s.key),y=C===s.key;return e.jsxs("div",{className:l.default.filterWrapper,children:[e.jsxs("button",{type:"button",className:`${l.default.filterTrigger} ${u?l.default.filterActive:""}`,onClick:()=>x(y?null:s.key),children:[s.icon||(s.type.includes("date")?e.jsx(r.Calendar,{size:14}):e.jsx(r.Filter,{size:14})),e.jsx("span",{children:s.label}),e.jsx(r.ChevronDown,{size:14,className:`${l.default.chevron} ${y?l.default.chevronOpen:""}`})]}),y&&s.type!=="text"&&e.jsx($,{filter:s,onSelect:v=>S(s.key,v),onClose:()=>x(null)})]},s.key)})}),a.length>0&&e.jsxs("div",{className:l.default.activeFilters,children:[a.map(s=>e.jsxs("span",{className:l.default.chip,children:[e.jsx("span",{className:l.default.chipLabel,children:s.label}),e.jsx("button",{type:"button",className:l.default.chipRemove,onClick:()=>n(s.key),"aria-label":`Remove ${s.label} filter`,children:e.jsx(r.X,{size:12})})]},s.key)),i&&a.length>1&&e.jsx("button",{type:"button",className:l.default.clearAll,onClick:i,children:"Clear all"})]}),f&&a.length>0&&e.jsxs("span",{className:l.default.count,children:[a.length," filter",a.length!==1?"s":""," ","active"]})]})});N.displayName="FilterBar";exports.FilterBar=N;
|
|
2
2
|
//# sourceMappingURL=index40.cjs.map
|
package/dist/index40.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsxs as c, jsx as n } from "react/jsx-runtime";
|
|
2
2
|
import { forwardRef as z, useState as k, useRef as A, useEffect as O } from "react";
|
|
3
3
|
import { Search as R, Calendar as B, Filter as I, ChevronDown as j, X as E } from "lucide-react";
|
|
4
|
-
import e from "./
|
|
4
|
+
import e from "./index177.mjs";
|
|
5
5
|
const F = ({
|
|
6
6
|
filter: r,
|
|
7
7
|
onSelect: a,
|
package/dist/index42.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("react/jsx-runtime"),r=require("react"),C=require("lucide-react"),e=require("./
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("react/jsx-runtime"),r=require("react"),C=require("lucide-react"),e=require("./index178.cjs"),m=r.forwardRef(({label:l,helpText:t,children:o,columns:d=1,className:a,...n},i)=>{const u=[e.default.group,e.default[`columns-${d}`],a].filter(Boolean).join(" ");return s.jsxs("div",{ref:i,className:u,...n,children:[l&&s.jsx("div",{className:e.default.groupLabel,children:l}),s.jsx("div",{className:e.default.groupFields,children:o}),t&&s.jsx("div",{className:e.default.groupHelp,children:t})]})});m.displayName="FormSection.Group";const j=r.forwardRef(({children:l,align:t="end",className:o,...d},a)=>{const n=[e.default.actions,e.default[`align-${t}`],o].filter(Boolean).join(" ");return s.jsx("div",{ref:a,className:n,...d,children:l})});j.displayName="FormSection.Actions";const N=r.forwardRef(({title:l,description:t,children:o,actions:d,collapsible:a=!1,defaultCollapsed:n=!1,divider:i=!1,variant:u="default",icon:f,disabled:p=!1,className:h,...x},v)=>{const[c,S]=r.useState(n),g=[e.default.formSection,e.default[`variant-${u}`],i&&e.default.divider,p&&e.default.disabled,a&&e.default.collapsible,c&&e.default.collapsed,h].filter(Boolean).join(" "),F=()=>{a&&S(!c)},y=a?"button":"div",R=a?{type:"button",onClick:F,"aria-expanded":!c}:{};return s.jsxs("div",{ref:v,className:g,...x,children:[s.jsxs(y,{className:e.default.header,...R,children:[s.jsxs("div",{className:e.default.headerContent,children:[f&&s.jsx("span",{className:e.default.icon,children:f}),s.jsxs("div",{className:e.default.headerText,children:[s.jsx("h3",{className:e.default.title,children:l}),t&&s.jsx("p",{className:e.default.description,children:t})]})]}),a&&s.jsx(C.ChevronDown,{size:20,className:`${e.default.collapseIcon} ${c?e.default.iconCollapsed:""}`})]}),(!a||!c)&&s.jsxs("div",{className:e.default.content,children:[s.jsx("div",{className:e.default.fields,children:o}),d&&s.jsx("div",{className:e.default.actionsWrapper,children:d})]})]})});N.displayName="FormSection";const $=Object.assign(N,{Group:m,Actions:j});exports.FormSection=$;
|
|
2
2
|
//# sourceMappingURL=index42.cjs.map
|
package/dist/index42.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsxs as i, jsx as a } from "react/jsx-runtime";
|
|
2
2
|
import { forwardRef as p, useState as B } from "react";
|
|
3
3
|
import { ChevronDown as A } from "lucide-react";
|
|
4
|
-
import e from "./
|
|
4
|
+
import e from "./index178.mjs";
|
|
5
5
|
const h = p(
|
|
6
6
|
({ label: n, helpText: o, children: r, columns: c = 1, className: s, ...l }, d) => {
|
|
7
7
|
const m = [e.group, e[`columns-${c}`], s].filter(Boolean).join(" ");
|
package/dist/index43.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const I=require("react/jsx-runtime"),t=require("react"),n=require("./
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const I=require("react/jsx-runtime"),t=require("react"),n=require("./index153.cjs"),S={xs:12,sm:16,md:20,lg:24,xl:32},l=t.forwardRef(({icon:i,size:e="md",color:s="current",strokeWidth:d=2,label:a,decorative:c=!1,disabled:f=!1,className:o,style:u,...m},p)=>{const h=t.useMemo(()=>typeof e=="number"?e:S[e],[e]),g=t.useMemo(()=>{const r=[n.default.icon];return typeof e=="string"&&r.push(n.default[e]),r.push(n.default[s]),f&&r.push(n.default.disabled),o&&r.push(o),r.filter(Boolean).join(" ")},[e,s,f,o]),y=t.useMemo(()=>c?{"aria-hidden":!0,role:"presentation"}:{"aria-label":a,role:"img"},[c,a]),M=t.useMemo(()=>typeof e=="number"?{width:e,height:e,...u}:u,[e,u]);return I.jsx(i,{ref:p,className:g,size:h,strokeWidth:d,style:M,...y,...m})});l.displayName="Icon";exports.Icon=l;
|
|
2
2
|
//# sourceMappingURL=index43.cjs.map
|