asterui 0.12.49 → 0.12.51

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (196) hide show
  1. package/dist/components/Alert.js +18 -18
  2. package/dist/components/Alert.js.map +1 -1
  3. package/dist/components/Autocomplete.js +115 -114
  4. package/dist/components/Autocomplete.js.map +1 -1
  5. package/dist/components/Avatar.js +33 -32
  6. package/dist/components/Avatar.js.map +1 -1
  7. package/dist/components/Badge.js +99 -99
  8. package/dist/components/Badge.js.map +1 -1
  9. package/dist/components/Breadcrumb.js +12 -11
  10. package/dist/components/Breadcrumb.js.map +1 -1
  11. package/dist/components/Browser.js +10 -10
  12. package/dist/components/Browser.js.map +1 -1
  13. package/dist/components/Button.js +80 -79
  14. package/dist/components/Button.js.map +1 -1
  15. package/dist/components/Card.d.ts +2 -0
  16. package/dist/components/Card.js +111 -110
  17. package/dist/components/Card.js.map +1 -1
  18. package/dist/components/Carousel.js +59 -59
  19. package/dist/components/Carousel.js.map +1 -1
  20. package/dist/components/Cascader.js +175 -174
  21. package/dist/components/Cascader.js.map +1 -1
  22. package/dist/components/Chat.js +27 -27
  23. package/dist/components/Chat.js.map +1 -1
  24. package/dist/components/Checkbox.js +98 -97
  25. package/dist/components/Checkbox.js.map +1 -1
  26. package/dist/components/Code.js +11 -11
  27. package/dist/components/Code.js.map +1 -1
  28. package/dist/components/Collapse.js +46 -46
  29. package/dist/components/Collapse.js.map +1 -1
  30. package/dist/components/ColorPicker.d.ts +1 -1
  31. package/dist/components/ColorPicker.js +93 -91
  32. package/dist/components/ColorPicker.js.map +1 -1
  33. package/dist/components/Command.js +120 -120
  34. package/dist/components/Command.js.map +1 -1
  35. package/dist/components/ConfigProvider.d.ts +1 -1
  36. package/dist/components/ConfigProvider.js +9 -9
  37. package/dist/components/ConfigProvider.js.map +1 -1
  38. package/dist/components/ContextMenu.js +33 -33
  39. package/dist/components/ContextMenu.js.map +1 -1
  40. package/dist/components/CopyButton.js +74 -73
  41. package/dist/components/CopyButton.js.map +1 -1
  42. package/dist/components/Countdown.js +60 -59
  43. package/dist/components/Countdown.js.map +1 -1
  44. package/dist/components/DatePicker.d.ts +1 -1
  45. package/dist/components/DatePicker.js +54 -53
  46. package/dist/components/DatePicker.js.map +1 -1
  47. package/dist/components/Diff.js +10 -10
  48. package/dist/components/Diff.js.map +1 -1
  49. package/dist/components/Divider.js +21 -20
  50. package/dist/components/Divider.js.map +1 -1
  51. package/dist/components/Dock.js +28 -27
  52. package/dist/components/Dock.js.map +1 -1
  53. package/dist/components/Drawer.js +43 -43
  54. package/dist/components/Drawer.js.map +1 -1
  55. package/dist/components/Dropdown.js +127 -127
  56. package/dist/components/Dropdown.js.map +1 -1
  57. package/dist/components/Empty.js +16 -15
  58. package/dist/components/Empty.js.map +1 -1
  59. package/dist/components/Fieldset.js +11 -10
  60. package/dist/components/Fieldset.js.map +1 -1
  61. package/dist/components/FileInput.js +30 -29
  62. package/dist/components/FileInput.js.map +1 -1
  63. package/dist/components/Filter.d.ts +1 -1
  64. package/dist/components/Filter.js +32 -30
  65. package/dist/components/Filter.js.map +1 -1
  66. package/dist/components/FloatButton.js +83 -83
  67. package/dist/components/FloatButton.js.map +1 -1
  68. package/dist/components/Footer.js +14 -13
  69. package/dist/components/Footer.js.map +1 -1
  70. package/dist/components/Form.js +133 -132
  71. package/dist/components/Form.js.map +1 -1
  72. package/dist/components/Hero.js +12 -11
  73. package/dist/components/Hero.js.map +1 -1
  74. package/dist/components/HoverGallery.js +7 -7
  75. package/dist/components/HoverGallery.js.map +1 -1
  76. package/dist/components/Image.js +40 -40
  77. package/dist/components/Image.js.map +1 -1
  78. package/dist/components/Input.js +171 -169
  79. package/dist/components/Input.js.map +1 -1
  80. package/dist/components/InputNumber.js +84 -83
  81. package/dist/components/InputNumber.js.map +1 -1
  82. package/dist/components/Join.js +11 -10
  83. package/dist/components/Join.js.map +1 -1
  84. package/dist/components/Kbd.js +15 -15
  85. package/dist/components/Kbd.js.map +1 -1
  86. package/dist/components/List.d.ts +1 -1
  87. package/dist/components/List.js +75 -72
  88. package/dist/components/List.js.map +1 -1
  89. package/dist/components/Loading.d.ts +1 -1
  90. package/dist/components/Loading.js +31 -29
  91. package/dist/components/Loading.js.map +1 -1
  92. package/dist/components/Mask.js +31 -31
  93. package/dist/components/Mask.js.map +1 -1
  94. package/dist/components/Mention.js +61 -61
  95. package/dist/components/Mention.js.map +1 -1
  96. package/dist/components/Menu.js +84 -84
  97. package/dist/components/Menu.js.map +1 -1
  98. package/dist/components/Message.js +30 -29
  99. package/dist/components/Message.js.map +1 -1
  100. package/dist/components/Modal.js +117 -116
  101. package/dist/components/Modal.js.map +1 -1
  102. package/dist/components/MonthCalendar.d.ts +31 -0
  103. package/dist/components/MonthCalendar.js +205 -0
  104. package/dist/components/MonthCalendar.js.map +1 -0
  105. package/dist/components/Navbar.js +25 -25
  106. package/dist/components/Navbar.js.map +1 -1
  107. package/dist/components/Notification.js +56 -55
  108. package/dist/components/Notification.js.map +1 -1
  109. package/dist/components/OTPInput.js +69 -68
  110. package/dist/components/OTPInput.js.map +1 -1
  111. package/dist/components/Pagination.d.ts +1 -1
  112. package/dist/components/Pagination.js +60 -58
  113. package/dist/components/Pagination.js.map +1 -1
  114. package/dist/components/Phone.js +10 -10
  115. package/dist/components/Phone.js.map +1 -1
  116. package/dist/components/Popconfirm.js +60 -60
  117. package/dist/components/Popconfirm.js.map +1 -1
  118. package/dist/components/Progress.js +17 -17
  119. package/dist/components/Progress.js.map +1 -1
  120. package/dist/components/QRCode.js +23 -23
  121. package/dist/components/QRCode.js.map +1 -1
  122. package/dist/components/RadialProgress.js +17 -17
  123. package/dist/components/RadialProgress.js.map +1 -1
  124. package/dist/components/Radio.js +41 -40
  125. package/dist/components/Radio.js.map +1 -1
  126. package/dist/components/Range.d.ts +1 -1
  127. package/dist/components/Range.js +39 -37
  128. package/dist/components/Range.js.map +1 -1
  129. package/dist/components/Rating.js +79 -78
  130. package/dist/components/Rating.js.map +1 -1
  131. package/dist/components/ResponsiveDrawer.js +27 -27
  132. package/dist/components/ResponsiveDrawer.js.map +1 -1
  133. package/dist/components/RichTextEditor.d.ts +32 -0
  134. package/dist/components/RichTextEditor.js +335 -0
  135. package/dist/components/RichTextEditor.js.map +1 -0
  136. package/dist/components/Segmented.d.ts +1 -1
  137. package/dist/components/Segmented.js +48 -46
  138. package/dist/components/Segmented.js.map +1 -1
  139. package/dist/components/Select.js +55 -54
  140. package/dist/components/Select.js.map +1 -1
  141. package/dist/components/Skeleton.js +9 -9
  142. package/dist/components/Skeleton.js.map +1 -1
  143. package/dist/components/Splitter.js +1 -3
  144. package/dist/components/Splitter.js.map +1 -1
  145. package/dist/components/Stat.js +17 -16
  146. package/dist/components/Stat.js.map +1 -1
  147. package/dist/components/Status.js +29 -29
  148. package/dist/components/Status.js.map +1 -1
  149. package/dist/components/Steps.js +61 -61
  150. package/dist/components/Steps.js.map +1 -1
  151. package/dist/components/Table.js +256 -256
  152. package/dist/components/Table.js.map +1 -1
  153. package/dist/components/Tabs.js +65 -65
  154. package/dist/components/Tabs.js.map +1 -1
  155. package/dist/components/Tag.js +147 -147
  156. package/dist/components/Tag.js.map +1 -1
  157. package/dist/components/TextRotate.js +6 -6
  158. package/dist/components/TextRotate.js.map +1 -1
  159. package/dist/components/Textarea.js +35 -34
  160. package/dist/components/Textarea.js.map +1 -1
  161. package/dist/components/ThemeController.d.ts +1 -1
  162. package/dist/components/ThemeController.js +71 -68
  163. package/dist/components/ThemeController.js.map +1 -1
  164. package/dist/components/TimePicker.d.ts +1 -1
  165. package/dist/components/TimePicker.js +133 -129
  166. package/dist/components/TimePicker.js.map +1 -1
  167. package/dist/components/Timeline.js +79 -79
  168. package/dist/components/Timeline.js.map +1 -1
  169. package/dist/components/Toggle.js +33 -32
  170. package/dist/components/Toggle.js.map +1 -1
  171. package/dist/components/Tooltip.js +25 -25
  172. package/dist/components/Tooltip.js.map +1 -1
  173. package/dist/components/Tour.js +126 -126
  174. package/dist/components/Tour.js.map +1 -1
  175. package/dist/components/Transfer.js +93 -92
  176. package/dist/components/Transfer.js.map +1 -1
  177. package/dist/components/Tree.js +200 -200
  178. package/dist/components/Tree.js.map +1 -1
  179. package/dist/components/TreeSelect.js +255 -254
  180. package/dist/components/TreeSelect.js.map +1 -1
  181. package/dist/components/Typography.js +71 -70
  182. package/dist/components/Typography.js.map +1 -1
  183. package/dist/components/Upload.js +81 -81
  184. package/dist/components/Upload.js.map +1 -1
  185. package/dist/components/WeekCalendar.d.ts +35 -0
  186. package/dist/components/WeekCalendar.js +204 -0
  187. package/dist/components/WeekCalendar.js.map +1 -0
  188. package/dist/components/Window.js +7 -7
  189. package/dist/components/Window.js.map +1 -1
  190. package/dist/editor.d.ts +1 -0
  191. package/dist/editor.js +5 -0
  192. package/dist/editor.js.map +1 -0
  193. package/dist/index.d.ts +4 -0
  194. package/dist/index.js +211 -207
  195. package/dist/index.js.map +1 -1
  196. package/package.json +30 -1
@@ -1 +1 @@
1
- {"version":3,"file":"Cascader.js","sources":["../../src/components/Cascader.tsx"],"sourcesContent":["import React, { useState, useRef, useEffect, useCallback, useId, forwardRef, useMemo } from 'react'\n\nexport interface CascaderOption {\n value: string\n label: React.ReactNode\n disabled?: boolean\n children?: CascaderOption[]\n isLeaf?: boolean\n}\n\nexport type CascaderColor = 'primary' | 'secondary' | 'accent' | 'info' | 'success' | 'warning' | 'error'\nexport type CascaderSize = 'xs' | 'sm' | 'md' | 'lg'\n\nexport interface CascaderProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {\n /** Hierarchical options data */\n options: CascaderOption[]\n /** Controlled selected value path */\n value?: string[]\n /** Default selected value path (uncontrolled) */\n defaultValue?: string[]\n /** Callback when selection changes */\n onChange?: (value: string[], selectedOptions: CascaderOption[]) => void\n /** Placeholder text */\n placeholder?: string\n /** Disable the cascader */\n disabled?: boolean\n /** Show clear button */\n allowClear?: boolean\n /** How to expand sub-menus */\n expandTrigger?: 'click' | 'hover'\n /** Allow selection of any level, not just leaf nodes */\n changeOnSelect?: boolean\n /** Custom display render function */\n displayRender?: (labels: React.ReactNode[], selectedOptions: CascaderOption[]) => React.ReactNode\n /** Input size */\n size?: CascaderSize\n /** Focus ring color */\n color?: CascaderColor\n /** Validation status */\n status?: 'error' | 'warning'\n /** Enable search/filter functionality */\n showSearch?: boolean | {\n filter?: (inputValue: string, path: CascaderOption[]) => boolean\n render?: (inputValue: string, path: CascaderOption[]) => React.ReactNode\n matchInputWidth?: boolean\n }\n /** Content when no results found */\n notFoundContent?: React.ReactNode\n /** Async data loading function */\n loadData?: (selectedOptions: CascaderOption[]) => Promise<void>\n /** Custom field names for data mapping */\n fieldNames?: {\n label?: string\n value?: string\n children?: string\n }\n /** Controlled open state */\n open?: boolean\n /** Callback when dropdown visibility changes */\n onDropdownVisibleChange?: (open: boolean) => void\n /** Class name for dropdown */\n popupClassName?: string\n /** Custom dropdown render wrapper */\n dropdownRender?: (menu: React.ReactNode) => React.ReactNode\n /** Multiple selection mode */\n multiple?: boolean\n /** Max tags to show in multiple mode */\n maxTagCount?: number | 'responsive'\n /** Accessible label */\n 'aria-label'?: string\n /** Test ID for the component */\n 'data-testid'?: string\n}\n\n// Helper to get nested value using field names\nfunction getFieldValue<T>(option: Record<string, unknown>, field: string, fallback: string): T {\n return (option[field] ?? option[fallback]) as T\n}\n\nexport const Cascader = forwardRef<HTMLDivElement, CascaderProps>(({\n options,\n value,\n defaultValue,\n onChange,\n placeholder = 'Please select',\n disabled = false,\n allowClear = true,\n expandTrigger = 'click',\n changeOnSelect = false,\n displayRender,\n size = 'md',\n color,\n status,\n showSearch = false,\n notFoundContent = 'No results found',\n loadData,\n fieldNames,\n open: controlledOpen,\n onDropdownVisibleChange,\n popupClassName = '',\n dropdownRender,\n multiple = false,\n maxTagCount,\n className = '',\n 'aria-label': ariaLabel,\n 'data-testid': testId,\n ...rest\n}, ref) => {\n const baseTestId = testId ?? 'cascader'\n const isControlledOpen = controlledOpen !== undefined\n const [internalOpen, setInternalOpen] = useState(false)\n const isOpen = isControlledOpen ? controlledOpen : internalOpen\n\n const setIsOpen = useCallback((open: boolean) => {\n if (!isControlledOpen) {\n setInternalOpen(open)\n }\n onDropdownVisibleChange?.(open)\n }, [isControlledOpen, onDropdownVisibleChange])\n\n const [selectedPath, setSelectedPath] = useState<string[]>(value ?? defaultValue ?? [])\n const [selectedPaths, setSelectedPaths] = useState<string[][]>(\n value ? [value] : defaultValue ? [defaultValue] : []\n )\n const [hoveredPath, setHoveredPath] = useState<string[]>([])\n const [focusedIndex, setFocusedIndex] = useState<{ column: number; row: number }>({ column: 0, row: 0 })\n const [searchValue, setSearchValue] = useState('')\n const [loadingKeys, setLoadingKeys] = useState<Set<string>>(new Set())\n\n const containerRef = useRef<HTMLDivElement>(null)\n const inputRef = useRef<HTMLInputElement>(null)\n const dropdownRef = useRef<HTMLDivElement>(null)\n const baseId = useId()\n const inputId = `${baseId}-input`\n const listboxId = `${baseId}-listbox`\n\n // Field name mapping\n const labelField = fieldNames?.label ?? 'label'\n const valueField = fieldNames?.value ?? 'value'\n const childrenField = fieldNames?.children ?? 'children'\n\n // Normalize options with field names\n const normalizeOption = useCallback((opt: Record<string, unknown>): CascaderOption => ({\n value: getFieldValue<string>(opt, valueField, 'value'),\n label: getFieldValue<React.ReactNode>(opt, labelField, 'label'),\n disabled: opt.disabled as boolean | undefined,\n isLeaf: opt.isLeaf as boolean | undefined,\n children: opt[childrenField]\n ? (opt[childrenField] as Record<string, unknown>[]).map(normalizeOption)\n : undefined,\n }), [labelField, valueField, childrenField])\n\n const normalizedOptions = useMemo(() =>\n options.map(opt => normalizeOption(opt as unknown as Record<string, unknown>)),\n [options, normalizeOption]\n )\n\n // Sync with controlled value\n useEffect(() => {\n if (value !== undefined) {\n setSelectedPath(value)\n if (multiple) {\n setSelectedPaths([value])\n }\n }\n }, [value, multiple])\n\n // Close on outside click\n useEffect(() => {\n const handleClickOutside = (e: MouseEvent) => {\n if (containerRef.current && !containerRef.current.contains(e.target as Node)) {\n setIsOpen(false)\n setHoveredPath([])\n setSearchValue('')\n }\n }\n\n if (isOpen) {\n document.addEventListener('mousedown', handleClickOutside)\n return () => document.removeEventListener('mousedown', handleClickOutside)\n }\n }, [isOpen, setIsOpen])\n\n // Get options at each level based on path\n const getOptionsAtLevel = useCallback((level: number, path: string[]): CascaderOption[] => {\n if (level === 0) return normalizedOptions\n\n let currentOptions = normalizedOptions\n for (let i = 0; i < level; i++) {\n const selected = currentOptions.find(opt => opt.value === path[i])\n if (!selected?.children) return []\n currentOptions = selected.children\n }\n return currentOptions\n }, [normalizedOptions])\n\n // Get selected options objects from path\n const getSelectedOptions = useCallback((path: string[]): CascaderOption[] => {\n const result: CascaderOption[] = []\n let currentOptions = normalizedOptions\n\n for (const val of path) {\n const found = currentOptions.find(opt => opt.value === val)\n if (!found) break\n result.push(found)\n currentOptions = found.children || []\n }\n\n return result\n }, [normalizedOptions])\n\n // Get all paths for search\n const getAllPaths = useCallback((): { path: CascaderOption[]; values: string[] }[] => {\n const paths: { path: CascaderOption[]; values: string[] }[] = []\n\n const traverse = (opts: CascaderOption[], currentPath: CascaderOption[], currentValues: string[]) => {\n for (const opt of opts) {\n const newPath = [...currentPath, opt]\n const newValues = [...currentValues, opt.value]\n\n if (!opt.children || opt.children.length === 0) {\n paths.push({ path: newPath, values: newValues })\n } else {\n if (changeOnSelect) {\n paths.push({ path: newPath, values: newValues })\n }\n traverse(opt.children, newPath, newValues)\n }\n }\n }\n\n traverse(normalizedOptions, [], [])\n return paths\n }, [normalizedOptions, changeOnSelect])\n\n // Filter paths for search\n const filteredPaths = useMemo(() => {\n if (!showSearch || !searchValue.trim()) return null\n\n const allPaths = getAllPaths()\n const searchLower = searchValue.toLowerCase()\n\n const filterFn = typeof showSearch === 'object' && showSearch.filter\n ? showSearch.filter\n : (inputValue: string, path: CascaderOption[]) =>\n path.some(opt =>\n String(opt.label).toLowerCase().includes(inputValue.toLowerCase())\n )\n\n return allPaths.filter(({ path }) => filterFn(searchLower, path))\n }, [showSearch, searchValue, getAllPaths])\n\n // Determine which path to use for displaying columns\n const activePath = isOpen ? (hoveredPath.length > 0 ? hoveredPath : selectedPath) : selectedPath\n\n // Build columns to display (only when not searching)\n const columns: CascaderOption[][] = useMemo(() => {\n if (filteredPaths) return []\n\n const cols: CascaderOption[][] = []\n cols.push(normalizedOptions)\n\n for (let i = 0; i < activePath.length; i++) {\n const nextOptions = getOptionsAtLevel(i + 1, activePath)\n if (nextOptions.length > 0) {\n cols.push(nextOptions)\n }\n }\n return cols\n }, [filteredPaths, normalizedOptions, activePath, getOptionsAtLevel])\n\n const handleOptionClick = async (option: CascaderOption, level: number) => {\n if (option.disabled) return\n\n const newPath = [...activePath.slice(0, level), option.value]\n const selectedOpts = getSelectedOptions(newPath)\n\n // Handle async loading\n if (loadData && !option.children && !option.isLeaf) {\n const key = option.value\n if (!loadingKeys.has(key)) {\n setLoadingKeys(prev => new Set(prev).add(key))\n try {\n await loadData(selectedOpts)\n } finally {\n setLoadingKeys(prev => {\n const next = new Set(prev)\n next.delete(key)\n return next\n })\n }\n }\n setHoveredPath(newPath)\n return\n }\n\n if (option.children && option.children.length > 0) {\n // Has children - expand\n setHoveredPath(newPath)\n\n if (changeOnSelect) {\n // In changeOnSelect mode, also select this node\n setSelectedPath(newPath)\n onChange?.(newPath, selectedOpts)\n }\n } else {\n // Leaf node - select and close\n if (multiple) {\n const pathStr = newPath.join('/')\n const isSelected = selectedPaths.some(p => p.join('/') === pathStr)\n let newPaths: string[][]\n if (isSelected) {\n newPaths = selectedPaths.filter(p => p.join('/') !== pathStr)\n } else {\n newPaths = [...selectedPaths, newPath]\n }\n setSelectedPaths(newPaths)\n // Don't close in multiple mode\n } else {\n setSelectedPath(newPath)\n setIsOpen(false)\n setHoveredPath([])\n setSearchValue('')\n onChange?.(newPath, selectedOpts)\n }\n }\n }\n\n const handleSearchResultClick = (values: string[], path: CascaderOption[]) => {\n if (multiple) {\n const pathStr = values.join('/')\n const isSelected = selectedPaths.some(p => p.join('/') === pathStr)\n let newPaths: string[][]\n if (isSelected) {\n newPaths = selectedPaths.filter(p => p.join('/') !== pathStr)\n } else {\n newPaths = [...selectedPaths, values]\n }\n setSelectedPaths(newPaths)\n } else {\n setSelectedPath(values)\n setIsOpen(false)\n setSearchValue('')\n onChange?.(values, path)\n }\n }\n\n const handleOptionHover = (option: CascaderOption, level: number) => {\n if (expandTrigger !== 'hover' || option.disabled) return\n\n const newPath = [...activePath.slice(0, level), option.value]\n setHoveredPath(newPath)\n }\n\n const handleClear = (e: React.MouseEvent) => {\n e.stopPropagation()\n if (multiple) {\n setSelectedPaths([])\n onChange?.([], [])\n } else {\n setSelectedPath([])\n onChange?.([], [])\n }\n }\n\n const handleRemoveTag = (pathToRemove: string[], e: React.MouseEvent) => {\n e.stopPropagation()\n const pathStr = pathToRemove.join('/')\n const newPaths = selectedPaths.filter(p => p.join('/') !== pathStr)\n setSelectedPaths(newPaths)\n if (newPaths.length > 0) {\n onChange?.(newPaths[newPaths.length - 1], getSelectedOptions(newPaths[newPaths.length - 1]))\n } else {\n onChange?.([], [])\n }\n }\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (disabled) return\n\n switch (e.key) {\n case 'Enter':\n e.preventDefault()\n if (!isOpen) {\n setIsOpen(true)\n } else if (filteredPaths && filteredPaths.length > 0) {\n const { values, path } = filteredPaths[focusedIndex.row] || {}\n if (values) {\n handleSearchResultClick(values, path)\n }\n } else {\n const currentColumn = columns[focusedIndex.column]\n if (currentColumn) {\n const option = currentColumn[focusedIndex.row]\n if (option) {\n handleOptionClick(option, focusedIndex.column)\n }\n }\n }\n break\n case ' ':\n if (!showSearch) {\n e.preventDefault()\n setIsOpen(!isOpen)\n }\n break\n case 'Escape':\n e.preventDefault()\n setIsOpen(false)\n setHoveredPath([])\n setSearchValue('')\n break\n case 'ArrowDown':\n e.preventDefault()\n if (!isOpen) {\n setIsOpen(true)\n } else if (filteredPaths) {\n setFocusedIndex(prev => ({\n ...prev,\n row: Math.min(prev.row + 1, filteredPaths.length - 1)\n }))\n } else {\n const currentColumn = columns[focusedIndex.column]\n if (currentColumn) {\n setFocusedIndex(prev => ({\n ...prev,\n row: Math.min(prev.row + 1, currentColumn.length - 1)\n }))\n }\n }\n break\n case 'ArrowUp':\n e.preventDefault()\n if (filteredPaths) {\n setFocusedIndex(prev => ({\n ...prev,\n row: Math.max(prev.row - 1, 0)\n }))\n } else {\n setFocusedIndex(prev => ({\n ...prev,\n row: Math.max(prev.row - 1, 0)\n }))\n }\n break\n case 'ArrowRight':\n e.preventDefault()\n if (!filteredPaths && focusedIndex.column < columns.length - 1) {\n setFocusedIndex(prev => ({\n column: prev.column + 1,\n row: 0\n }))\n }\n break\n case 'ArrowLeft':\n e.preventDefault()\n if (!filteredPaths && focusedIndex.column > 0) {\n setFocusedIndex(prev => ({\n column: prev.column - 1,\n row: 0\n }))\n }\n break\n case 'Home':\n e.preventDefault()\n setFocusedIndex(prev => ({ ...prev, row: 0 }))\n break\n case 'End':\n e.preventDefault()\n if (filteredPaths) {\n setFocusedIndex(prev => ({ ...prev, row: filteredPaths.length - 1 }))\n } else {\n const currentColumn = columns[focusedIndex.column]\n if (currentColumn) {\n setFocusedIndex(prev => ({ ...prev, row: currentColumn.length - 1 }))\n }\n }\n break\n }\n }\n\n // Reset focus when dropdown opens/closes\n useEffect(() => {\n if (isOpen) {\n setFocusedIndex({ column: 0, row: 0 })\n }\n }, [isOpen])\n\n // Display value\n const selectedOptions = getSelectedOptions(selectedPath)\n const labels = selectedOptions.map(opt => opt.label)\n const displayValue = displayRender\n ? displayRender(labels, selectedOptions)\n : labels.join(' / ')\n\n // Size classes\n const sizeClasses: Record<CascaderSize, string> = {\n xs: 'input-xs text-xs min-h-6',\n sm: 'input-sm text-sm min-h-8',\n md: 'input-md min-h-10',\n lg: 'input-lg text-lg min-h-12',\n }\n\n const dropdownSizeClasses: Record<CascaderSize, string> = {\n xs: 'text-xs',\n sm: 'text-sm',\n md: 'text-base',\n lg: 'text-lg',\n }\n\n // Color and status classes\n const colorClasses: Record<CascaderColor, string> = {\n primary: 'border-primary focus:border-primary',\n secondary: 'border-secondary focus:border-secondary',\n accent: 'border-accent focus:border-accent',\n info: 'border-info focus:border-info',\n success: 'border-success focus:border-success',\n warning: 'border-warning focus:border-warning',\n error: 'border-error focus:border-error',\n }\n\n const getColorClass = () => {\n if (status === 'error') return 'input-error'\n if (status === 'warning') return 'input-warning'\n if (color && isOpen) return colorClasses[color]\n if (isOpen) return 'input-primary'\n return ''\n }\n\n const getOptionId = (colIndex: number, optIndex: number) =>\n `${baseId}-option-${colIndex}-${optIndex}`\n\n const getSearchOptionId = (index: number) =>\n `${baseId}-search-option-${index}`\n\n // Render tags for multiple mode\n const renderTags = () => {\n const paths = selectedPaths\n const displayPaths = maxTagCount === 'responsive' || typeof maxTagCount === 'number'\n ? paths.slice(0, typeof maxTagCount === 'number' ? maxTagCount : 3)\n : paths\n const hiddenCount = paths.length - displayPaths.length\n\n return (\n <div className=\"flex flex-wrap gap-1 flex-1\">\n {displayPaths.map((path) => {\n const opts = getSelectedOptions(path)\n const label = opts.map(o => o.label).join(' / ')\n return (\n <span\n key={path.join('/')}\n className=\"badge badge-sm gap-1\"\n >\n {label}\n <button\n type=\"button\"\n className=\"btn btn-ghost btn-xs btn-circle w-3 h-3 min-h-0\"\n onClick={(e) => handleRemoveTag(path, e)}\n aria-label={`Remove ${label}`}\n >\n <svg className=\"w-2 h-2\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n </span>\n )\n })}\n {hiddenCount > 0 && (\n <span className=\"badge badge-sm\">+{hiddenCount}</span>\n )}\n </div>\n )\n }\n\n // Render search results\n const renderSearchResults = () => {\n if (!filteredPaths) return null\n\n if (filteredPaths.length === 0) {\n return (\n <div className=\"p-4 text-center text-base-content/50\">\n {notFoundContent}\n </div>\n )\n }\n\n const renderFn = typeof showSearch === 'object' && showSearch.render\n ? showSearch.render\n : null\n\n return (\n <ul role=\"listbox\" className=\"max-h-[200px] overflow-y-auto py-1\">\n {filteredPaths.map(({ path, values }, index) => {\n const isSelected = multiple\n ? selectedPaths.some(p => p.join('/') === values.join('/'))\n : selectedPath.join('/') === values.join('/')\n const isFocused = focusedIndex.row === index\n\n return (\n <li\n key={values.join('/')}\n id={getSearchOptionId(index)}\n role=\"option\"\n aria-selected={isSelected}\n data-testid={`${baseTestId}-search-option-${values.join('-')}`}\n data-state={isSelected ? 'selected' : undefined}\n className={`px-3 py-2 cursor-pointer ${\n isSelected\n ? 'bg-primary text-primary-content'\n : isFocused\n ? 'bg-base-200'\n : 'hover:bg-base-200'\n }`}\n onClick={() => handleSearchResultClick(values, path)}\n >\n {renderFn\n ? renderFn(searchValue, path)\n : path.map(opt => opt.label).join(' / ')\n }\n </li>\n )\n })}\n </ul>\n )\n }\n\n // Render dropdown content\n const renderDropdownContent = () => {\n const content = filteredPaths ? renderSearchResults() : (\n <div className=\"flex\">\n {columns.map((columnOptions, colIndex) => (\n <ul\n key={colIndex}\n role=\"listbox\"\n aria-label={`Level ${colIndex + 1} options`}\n className={`min-w-[120px] max-h-[200px] overflow-y-auto py-1 ${\n colIndex > 0 ? 'border-l border-base-300' : ''\n }`}\n >\n {columnOptions.map((option, optIndex) => {\n const isSelected = selectedPath[colIndex] === option.value\n const isHovered = activePath[colIndex] === option.value\n const hasChildren = option.children && option.children.length > 0\n const isLoading = loadingKeys.has(option.value)\n const isFocused = focusedIndex.column === colIndex && focusedIndex.row === optIndex\n const optionId = getOptionId(colIndex, optIndex)\n\n return (\n <li\n key={option.value}\n id={optionId}\n role=\"option\"\n aria-selected={isSelected}\n aria-disabled={option.disabled}\n data-testid={`${baseTestId}-option-${option.value}`}\n data-state={isSelected ? 'selected' : isHovered ? 'hovered' : undefined}\n data-value={option.value}\n className={`px-3 py-2 cursor-pointer flex items-center justify-between gap-2 ${\n option.disabled\n ? 'text-base-content/30 cursor-not-allowed'\n : isSelected\n ? 'bg-primary text-primary-content'\n : isFocused\n ? 'bg-base-200'\n : isHovered\n ? 'bg-base-200'\n : 'hover:bg-base-200'\n }`}\n onClick={() => handleOptionClick(option, colIndex)}\n onMouseEnter={() => handleOptionHover(option, colIndex)}\n >\n <span>{option.label}</span>\n {isLoading ? (\n <span className=\"loading loading-spinner loading-xs\" />\n ) : hasChildren ? (\n <svg className=\"w-4 h-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 5l7 7-7 7\" />\n </svg>\n ) : null}\n </li>\n )\n })}\n </ul>\n ))}\n </div>\n )\n\n return dropdownRender ? dropdownRender(content) : content\n }\n\n // Get active descendant ID\n const getActiveDescendant = () => {\n if (!isOpen) return undefined\n if (filteredPaths) {\n return getSearchOptionId(focusedIndex.row)\n }\n return getOptionId(focusedIndex.column, focusedIndex.row)\n }\n\n const hasValue = multiple ? selectedPaths.length > 0 : selectedPath.length > 0\n\n return (\n <div\n ref={(node) => {\n containerRef.current = node\n if (typeof ref === 'function') ref(node)\n else if (ref) ref.current = node\n }}\n className={`relative inline-block w-full ${className}`}\n data-testid={baseTestId}\n data-state={isOpen ? 'open' : 'closed'}\n {...rest}\n >\n {/* Input/Trigger */}\n <div\n id={inputId}\n role=\"combobox\"\n aria-expanded={isOpen}\n aria-haspopup=\"listbox\"\n aria-controls={listboxId}\n aria-activedescendant={getActiveDescendant()}\n aria-label={ariaLabel}\n aria-disabled={disabled}\n tabIndex={disabled ? -1 : 0}\n className={`input w-full flex items-center justify-between cursor-pointer gap-1 ${sizeClasses[size]} ${\n disabled ? 'input-disabled cursor-not-allowed' : ''\n } ${getColorClass()}`}\n onClick={() => {\n if (!disabled) {\n setIsOpen(!isOpen)\n if (showSearch && !isOpen) {\n setTimeout(() => inputRef.current?.focus(), 0)\n }\n }\n }}\n onKeyDown={handleKeyDown}\n >\n {multiple && selectedPaths.length > 0 ? (\n renderTags()\n ) : showSearch && isOpen ? (\n <input\n ref={inputRef}\n type=\"text\"\n className=\"flex-1 bg-transparent outline-none min-w-[50px]\"\n value={searchValue}\n onChange={(e) => setSearchValue(e.target.value)}\n onClick={(e) => e.stopPropagation()}\n placeholder={hasValue ? String(displayValue) : placeholder}\n aria-label=\"Search options\"\n />\n ) : (\n <span className={`flex-1 truncate ${!hasValue ? 'text-base-content/50' : ''}`}>\n {hasValue ? displayValue : placeholder}\n </span>\n )}\n <div className=\"flex items-center gap-1 shrink-0\">\n {allowClear && hasValue && !disabled && (\n <button\n type=\"button\"\n className=\"btn btn-ghost btn-xs btn-circle\"\n onClick={handleClear}\n aria-label=\"Clear selection\"\n data-testid={`${baseTestId}-clear`}\n >\n <svg className=\"w-3 h-3\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n )}\n <svg\n className={`w-4 h-4 transition-transform ${isOpen ? 'rotate-180' : ''}`}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19 9l-7 7-7-7\" />\n </svg>\n </div>\n </div>\n\n {/* Dropdown */}\n {isOpen && (\n <div\n ref={dropdownRef}\n id={listboxId}\n className={`absolute z-50 mt-1 bg-base-100 border border-base-300 rounded-lg shadow-lg ${dropdownSizeClasses[size]} ${popupClassName}`}\n data-testid={`${baseTestId}-dropdown`}\n >\n {renderDropdownContent()}\n </div>\n )}\n </div>\n )\n})\n\nCascader.displayName = 'Cascader'\n"],"names":["getFieldValue","option","field","fallback","Cascader","forwardRef","options","value","defaultValue","onChange","placeholder","disabled","allowClear","expandTrigger","changeOnSelect","displayRender","size","color","status","showSearch","notFoundContent","loadData","fieldNames","controlledOpen","onDropdownVisibleChange","popupClassName","dropdownRender","multiple","maxTagCount","className","ariaLabel","testId","rest","ref","baseTestId","isControlledOpen","internalOpen","setInternalOpen","useState","isOpen","setIsOpen","useCallback","open","selectedPath","setSelectedPath","selectedPaths","setSelectedPaths","hoveredPath","setHoveredPath","focusedIndex","setFocusedIndex","searchValue","setSearchValue","loadingKeys","setLoadingKeys","containerRef","useRef","inputRef","dropdownRef","baseId","useId","inputId","listboxId","labelField","valueField","childrenField","normalizeOption","opt","normalizedOptions","useMemo","useEffect","handleClickOutside","e","getOptionsAtLevel","level","path","currentOptions","i","selected","getSelectedOptions","result","val","found","getAllPaths","paths","traverse","opts","currentPath","currentValues","newPath","newValues","filteredPaths","allPaths","searchLower","filterFn","inputValue","activePath","columns","cols","nextOptions","handleOptionClick","selectedOpts","key","prev","next","pathStr","isSelected","p","newPaths","handleSearchResultClick","values","handleOptionHover","handleClear","handleRemoveTag","pathToRemove","handleKeyDown","currentColumn","selectedOptions","labels","displayValue","sizeClasses","dropdownSizeClasses","colorClasses","getColorClass","getOptionId","colIndex","optIndex","getSearchOptionId","index","renderTags","displayPaths","hiddenCount","jsxs","label","o","jsx","renderSearchResults","renderFn","isFocused","renderDropdownContent","content","columnOptions","isHovered","hasChildren","isLoading","optionId","getActiveDescendant","hasValue","node"],"mappings":"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"}
1
+ {"version":3,"file":"Cascader.js","sources":["../../src/components/Cascader.tsx"],"sourcesContent":["import React, { useState, useRef, useEffect, useCallback, useId, forwardRef, useMemo } from 'react'\n\n// DaisyUI classes\nconst dInput = 'input'\nconst dInputXs = 'input-xs'\nconst dInputSm = 'input-sm'\nconst dInputMd = 'input-md'\nconst dInputLg = 'input-lg'\nconst dInputDisabled = 'input-disabled'\nconst dInputPrimary = 'input-primary'\nconst dInputError = 'input-error'\nconst dInputWarning = 'input-warning'\nconst dBadge = 'badge'\nconst dBadgeSm = 'badge-sm'\nconst dBtn = 'btn'\nconst dBtnGhost = 'btn-ghost'\nconst dBtnXs = 'btn-xs'\nconst dBtnCircle = 'btn-circle'\nconst dLoading = 'loading'\nconst dLoadingSpinner = 'loading-spinner'\nconst dLoadingXs = 'loading-xs'\n\nexport interface CascaderOption {\n value: string\n label: React.ReactNode\n disabled?: boolean\n children?: CascaderOption[]\n isLeaf?: boolean\n}\n\nexport type CascaderColor = 'primary' | 'secondary' | 'accent' | 'info' | 'success' | 'warning' | 'error'\nexport type CascaderSize = 'xs' | 'sm' | 'md' | 'lg'\n\nexport interface CascaderProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {\n /** Hierarchical options data */\n options: CascaderOption[]\n /** Controlled selected value path */\n value?: string[]\n /** Default selected value path (uncontrolled) */\n defaultValue?: string[]\n /** Callback when selection changes */\n onChange?: (value: string[], selectedOptions: CascaderOption[]) => void\n /** Placeholder text */\n placeholder?: string\n /** Disable the cascader */\n disabled?: boolean\n /** Show clear button */\n allowClear?: boolean\n /** How to expand sub-menus */\n expandTrigger?: 'click' | 'hover'\n /** Allow selection of any level, not just leaf nodes */\n changeOnSelect?: boolean\n /** Custom display render function */\n displayRender?: (labels: React.ReactNode[], selectedOptions: CascaderOption[]) => React.ReactNode\n /** Input size */\n size?: CascaderSize\n /** Focus ring color */\n color?: CascaderColor\n /** Validation status */\n status?: 'error' | 'warning'\n /** Enable search/filter functionality */\n showSearch?: boolean | {\n filter?: (inputValue: string, path: CascaderOption[]) => boolean\n render?: (inputValue: string, path: CascaderOption[]) => React.ReactNode\n matchInputWidth?: boolean\n }\n /** Content when no results found */\n notFoundContent?: React.ReactNode\n /** Async data loading function */\n loadData?: (selectedOptions: CascaderOption[]) => Promise<void>\n /** Custom field names for data mapping */\n fieldNames?: {\n label?: string\n value?: string\n children?: string\n }\n /** Controlled open state */\n open?: boolean\n /** Callback when dropdown visibility changes */\n onDropdownVisibleChange?: (open: boolean) => void\n /** Class name for dropdown */\n popupClassName?: string\n /** Custom dropdown render wrapper */\n dropdownRender?: (menu: React.ReactNode) => React.ReactNode\n /** Multiple selection mode */\n multiple?: boolean\n /** Max tags to show in multiple mode */\n maxTagCount?: number | 'responsive'\n /** Accessible label */\n 'aria-label'?: string\n /** Test ID for the component */\n 'data-testid'?: string\n}\n\n// Helper to get nested value using field names\nfunction getFieldValue<T>(option: Record<string, unknown>, field: string, fallback: string): T {\n return (option[field] ?? option[fallback]) as T\n}\n\nexport const Cascader = forwardRef<HTMLDivElement, CascaderProps>(({\n options,\n value,\n defaultValue,\n onChange,\n placeholder = 'Please select',\n disabled = false,\n allowClear = true,\n expandTrigger = 'click',\n changeOnSelect = false,\n displayRender,\n size = 'md',\n color,\n status,\n showSearch = false,\n notFoundContent = 'No results found',\n loadData,\n fieldNames,\n open: controlledOpen,\n onDropdownVisibleChange,\n popupClassName = '',\n dropdownRender,\n multiple = false,\n maxTagCount,\n className = '',\n 'aria-label': ariaLabel,\n 'data-testid': testId,\n ...rest\n}, ref) => {\n const baseTestId = testId ?? 'cascader'\n const isControlledOpen = controlledOpen !== undefined\n const [internalOpen, setInternalOpen] = useState(false)\n const isOpen = isControlledOpen ? controlledOpen : internalOpen\n\n const setIsOpen = useCallback((open: boolean) => {\n if (!isControlledOpen) {\n setInternalOpen(open)\n }\n onDropdownVisibleChange?.(open)\n }, [isControlledOpen, onDropdownVisibleChange])\n\n const [selectedPath, setSelectedPath] = useState<string[]>(value ?? defaultValue ?? [])\n const [selectedPaths, setSelectedPaths] = useState<string[][]>(\n value ? [value] : defaultValue ? [defaultValue] : []\n )\n const [hoveredPath, setHoveredPath] = useState<string[]>([])\n const [focusedIndex, setFocusedIndex] = useState<{ column: number; row: number }>({ column: 0, row: 0 })\n const [searchValue, setSearchValue] = useState('')\n const [loadingKeys, setLoadingKeys] = useState<Set<string>>(new Set())\n\n const containerRef = useRef<HTMLDivElement>(null)\n const inputRef = useRef<HTMLInputElement>(null)\n const dropdownRef = useRef<HTMLDivElement>(null)\n const baseId = useId()\n const inputId = `${baseId}-input`\n const listboxId = `${baseId}-listbox`\n\n // Field name mapping\n const labelField = fieldNames?.label ?? 'label'\n const valueField = fieldNames?.value ?? 'value'\n const childrenField = fieldNames?.children ?? 'children'\n\n // Normalize options with field names\n const normalizeOption = useCallback((opt: Record<string, unknown>): CascaderOption => ({\n value: getFieldValue<string>(opt, valueField, 'value'),\n label: getFieldValue<React.ReactNode>(opt, labelField, 'label'),\n disabled: opt.disabled as boolean | undefined,\n isLeaf: opt.isLeaf as boolean | undefined,\n children: opt[childrenField]\n ? (opt[childrenField] as Record<string, unknown>[]).map(normalizeOption)\n : undefined,\n }), [labelField, valueField, childrenField])\n\n const normalizedOptions = useMemo(() =>\n options.map(opt => normalizeOption(opt as unknown as Record<string, unknown>)),\n [options, normalizeOption]\n )\n\n // Sync with controlled value\n useEffect(() => {\n if (value !== undefined) {\n setSelectedPath(value)\n if (multiple) {\n setSelectedPaths([value])\n }\n }\n }, [value, multiple])\n\n // Close on outside click\n useEffect(() => {\n const handleClickOutside = (e: MouseEvent) => {\n if (containerRef.current && !containerRef.current.contains(e.target as Node)) {\n setIsOpen(false)\n setHoveredPath([])\n setSearchValue('')\n }\n }\n\n if (isOpen) {\n document.addEventListener('mousedown', handleClickOutside)\n return () => document.removeEventListener('mousedown', handleClickOutside)\n }\n }, [isOpen, setIsOpen])\n\n // Get options at each level based on path\n const getOptionsAtLevel = useCallback((level: number, path: string[]): CascaderOption[] => {\n if (level === 0) return normalizedOptions\n\n let currentOptions = normalizedOptions\n for (let i = 0; i < level; i++) {\n const selected = currentOptions.find(opt => opt.value === path[i])\n if (!selected?.children) return []\n currentOptions = selected.children\n }\n return currentOptions\n }, [normalizedOptions])\n\n // Get selected options objects from path\n const getSelectedOptions = useCallback((path: string[]): CascaderOption[] => {\n const result: CascaderOption[] = []\n let currentOptions = normalizedOptions\n\n for (const val of path) {\n const found = currentOptions.find(opt => opt.value === val)\n if (!found) break\n result.push(found)\n currentOptions = found.children || []\n }\n\n return result\n }, [normalizedOptions])\n\n // Get all paths for search\n const getAllPaths = useCallback((): { path: CascaderOption[]; values: string[] }[] => {\n const paths: { path: CascaderOption[]; values: string[] }[] = []\n\n const traverse = (opts: CascaderOption[], currentPath: CascaderOption[], currentValues: string[]) => {\n for (const opt of opts) {\n const newPath = [...currentPath, opt]\n const newValues = [...currentValues, opt.value]\n\n if (!opt.children || opt.children.length === 0) {\n paths.push({ path: newPath, values: newValues })\n } else {\n if (changeOnSelect) {\n paths.push({ path: newPath, values: newValues })\n }\n traverse(opt.children, newPath, newValues)\n }\n }\n }\n\n traverse(normalizedOptions, [], [])\n return paths\n }, [normalizedOptions, changeOnSelect])\n\n // Filter paths for search\n const filteredPaths = useMemo(() => {\n if (!showSearch || !searchValue.trim()) return null\n\n const allPaths = getAllPaths()\n const searchLower = searchValue.toLowerCase()\n\n const filterFn = typeof showSearch === 'object' && showSearch.filter\n ? showSearch.filter\n : (inputValue: string, path: CascaderOption[]) =>\n path.some(opt =>\n String(opt.label).toLowerCase().includes(inputValue.toLowerCase())\n )\n\n return allPaths.filter(({ path }) => filterFn(searchLower, path))\n }, [showSearch, searchValue, getAllPaths])\n\n // Determine which path to use for displaying columns\n const activePath = isOpen ? (hoveredPath.length > 0 ? hoveredPath : selectedPath) : selectedPath\n\n // Build columns to display (only when not searching)\n const columns: CascaderOption[][] = useMemo(() => {\n if (filteredPaths) return []\n\n const cols: CascaderOption[][] = []\n cols.push(normalizedOptions)\n\n for (let i = 0; i < activePath.length; i++) {\n const nextOptions = getOptionsAtLevel(i + 1, activePath)\n if (nextOptions.length > 0) {\n cols.push(nextOptions)\n }\n }\n return cols\n }, [filteredPaths, normalizedOptions, activePath, getOptionsAtLevel])\n\n const handleOptionClick = async (option: CascaderOption, level: number) => {\n if (option.disabled) return\n\n const newPath = [...activePath.slice(0, level), option.value]\n const selectedOpts = getSelectedOptions(newPath)\n\n // Handle async loading\n if (loadData && !option.children && !option.isLeaf) {\n const key = option.value\n if (!loadingKeys.has(key)) {\n setLoadingKeys(prev => new Set(prev).add(key))\n try {\n await loadData(selectedOpts)\n } finally {\n setLoadingKeys(prev => {\n const next = new Set(prev)\n next.delete(key)\n return next\n })\n }\n }\n setHoveredPath(newPath)\n return\n }\n\n if (option.children && option.children.length > 0) {\n // Has children - expand\n setHoveredPath(newPath)\n\n if (changeOnSelect) {\n // In changeOnSelect mode, also select this node\n setSelectedPath(newPath)\n onChange?.(newPath, selectedOpts)\n }\n } else {\n // Leaf node - select and close\n if (multiple) {\n const pathStr = newPath.join('/')\n const isSelected = selectedPaths.some(p => p.join('/') === pathStr)\n let newPaths: string[][]\n if (isSelected) {\n newPaths = selectedPaths.filter(p => p.join('/') !== pathStr)\n } else {\n newPaths = [...selectedPaths, newPath]\n }\n setSelectedPaths(newPaths)\n // Don't close in multiple mode\n } else {\n setSelectedPath(newPath)\n setIsOpen(false)\n setHoveredPath([])\n setSearchValue('')\n onChange?.(newPath, selectedOpts)\n }\n }\n }\n\n const handleSearchResultClick = (values: string[], path: CascaderOption[]) => {\n if (multiple) {\n const pathStr = values.join('/')\n const isSelected = selectedPaths.some(p => p.join('/') === pathStr)\n let newPaths: string[][]\n if (isSelected) {\n newPaths = selectedPaths.filter(p => p.join('/') !== pathStr)\n } else {\n newPaths = [...selectedPaths, values]\n }\n setSelectedPaths(newPaths)\n } else {\n setSelectedPath(values)\n setIsOpen(false)\n setSearchValue('')\n onChange?.(values, path)\n }\n }\n\n const handleOptionHover = (option: CascaderOption, level: number) => {\n if (expandTrigger !== 'hover' || option.disabled) return\n\n const newPath = [...activePath.slice(0, level), option.value]\n setHoveredPath(newPath)\n }\n\n const handleClear = (e: React.MouseEvent) => {\n e.stopPropagation()\n if (multiple) {\n setSelectedPaths([])\n onChange?.([], [])\n } else {\n setSelectedPath([])\n onChange?.([], [])\n }\n }\n\n const handleRemoveTag = (pathToRemove: string[], e: React.MouseEvent) => {\n e.stopPropagation()\n const pathStr = pathToRemove.join('/')\n const newPaths = selectedPaths.filter(p => p.join('/') !== pathStr)\n setSelectedPaths(newPaths)\n if (newPaths.length > 0) {\n onChange?.(newPaths[newPaths.length - 1], getSelectedOptions(newPaths[newPaths.length - 1]))\n } else {\n onChange?.([], [])\n }\n }\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (disabled) return\n\n switch (e.key) {\n case 'Enter':\n e.preventDefault()\n if (!isOpen) {\n setIsOpen(true)\n } else if (filteredPaths && filteredPaths.length > 0) {\n const { values, path } = filteredPaths[focusedIndex.row] || {}\n if (values) {\n handleSearchResultClick(values, path)\n }\n } else {\n const currentColumn = columns[focusedIndex.column]\n if (currentColumn) {\n const option = currentColumn[focusedIndex.row]\n if (option) {\n handleOptionClick(option, focusedIndex.column)\n }\n }\n }\n break\n case ' ':\n if (!showSearch) {\n e.preventDefault()\n setIsOpen(!isOpen)\n }\n break\n case 'Escape':\n e.preventDefault()\n setIsOpen(false)\n setHoveredPath([])\n setSearchValue('')\n break\n case 'ArrowDown':\n e.preventDefault()\n if (!isOpen) {\n setIsOpen(true)\n } else if (filteredPaths) {\n setFocusedIndex(prev => ({\n ...prev,\n row: Math.min(prev.row + 1, filteredPaths.length - 1)\n }))\n } else {\n const currentColumn = columns[focusedIndex.column]\n if (currentColumn) {\n setFocusedIndex(prev => ({\n ...prev,\n row: Math.min(prev.row + 1, currentColumn.length - 1)\n }))\n }\n }\n break\n case 'ArrowUp':\n e.preventDefault()\n if (filteredPaths) {\n setFocusedIndex(prev => ({\n ...prev,\n row: Math.max(prev.row - 1, 0)\n }))\n } else {\n setFocusedIndex(prev => ({\n ...prev,\n row: Math.max(prev.row - 1, 0)\n }))\n }\n break\n case 'ArrowRight':\n e.preventDefault()\n if (!filteredPaths && focusedIndex.column < columns.length - 1) {\n setFocusedIndex(prev => ({\n column: prev.column + 1,\n row: 0\n }))\n }\n break\n case 'ArrowLeft':\n e.preventDefault()\n if (!filteredPaths && focusedIndex.column > 0) {\n setFocusedIndex(prev => ({\n column: prev.column - 1,\n row: 0\n }))\n }\n break\n case 'Home':\n e.preventDefault()\n setFocusedIndex(prev => ({ ...prev, row: 0 }))\n break\n case 'End':\n e.preventDefault()\n if (filteredPaths) {\n setFocusedIndex(prev => ({ ...prev, row: filteredPaths.length - 1 }))\n } else {\n const currentColumn = columns[focusedIndex.column]\n if (currentColumn) {\n setFocusedIndex(prev => ({ ...prev, row: currentColumn.length - 1 }))\n }\n }\n break\n }\n }\n\n // Reset focus when dropdown opens/closes\n useEffect(() => {\n if (isOpen) {\n setFocusedIndex({ column: 0, row: 0 })\n }\n }, [isOpen])\n\n // Display value\n const selectedOptions = getSelectedOptions(selectedPath)\n const labels = selectedOptions.map(opt => opt.label)\n const displayValue = displayRender\n ? displayRender(labels, selectedOptions)\n : labels.join(' / ')\n\n // Size classes\n const sizeClasses: Record<CascaderSize, string> = {\n xs: `${dInputXs} text-xs min-h-6`,\n sm: `${dInputSm} text-sm min-h-8`,\n md: `${dInputMd} min-h-10`,\n lg: `${dInputLg} text-lg min-h-12`,\n }\n\n const dropdownSizeClasses: Record<CascaderSize, string> = {\n xs: 'text-xs',\n sm: 'text-sm',\n md: 'text-base',\n lg: 'text-lg',\n }\n\n // Color and status classes\n const colorClasses: Record<CascaderColor, string> = {\n primary: 'border-primary focus:border-primary',\n secondary: 'border-secondary focus:border-secondary',\n accent: 'border-accent focus:border-accent',\n info: 'border-info focus:border-info',\n success: 'border-success focus:border-success',\n warning: 'border-warning focus:border-warning',\n error: 'border-error focus:border-error',\n }\n\n const getColorClass = () => {\n if (status === 'error') return dInputError\n if (status === 'warning') return dInputWarning\n if (color && isOpen) return colorClasses[color]\n if (isOpen) return dInputPrimary\n return ''\n }\n\n const getOptionId = (colIndex: number, optIndex: number) =>\n `${baseId}-option-${colIndex}-${optIndex}`\n\n const getSearchOptionId = (index: number) =>\n `${baseId}-search-option-${index}`\n\n // Render tags for multiple mode\n const renderTags = () => {\n const paths = selectedPaths\n const displayPaths = maxTagCount === 'responsive' || typeof maxTagCount === 'number'\n ? paths.slice(0, typeof maxTagCount === 'number' ? maxTagCount : 3)\n : paths\n const hiddenCount = paths.length - displayPaths.length\n\n return (\n <div className=\"flex flex-wrap gap-1 flex-1\">\n {displayPaths.map((path) => {\n const opts = getSelectedOptions(path)\n const label = opts.map(o => o.label).join(' / ')\n return (\n <span\n key={path.join('/')}\n className={`${dBadge} ${dBadgeSm} gap-1`}\n >\n {label}\n <button\n type=\"button\"\n className={`${dBtn} ${dBtnGhost} ${dBtnXs} ${dBtnCircle} w-3 h-3 min-h-0`}\n onClick={(e) => handleRemoveTag(path, e)}\n aria-label={`Remove ${label}`}\n >\n <svg className=\"w-2 h-2\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n </span>\n )\n })}\n {hiddenCount > 0 && (\n <span className={`${dBadge} ${dBadgeSm}`}>+{hiddenCount}</span>\n )}\n </div>\n )\n }\n\n // Render search results\n const renderSearchResults = () => {\n if (!filteredPaths) return null\n\n if (filteredPaths.length === 0) {\n return (\n <div className=\"p-4 text-center text-base-content/50\">\n {notFoundContent}\n </div>\n )\n }\n\n const renderFn = typeof showSearch === 'object' && showSearch.render\n ? showSearch.render\n : null\n\n return (\n <ul role=\"listbox\" className=\"max-h-[200px] overflow-y-auto py-1\">\n {filteredPaths.map(({ path, values }, index) => {\n const isSelected = multiple\n ? selectedPaths.some(p => p.join('/') === values.join('/'))\n : selectedPath.join('/') === values.join('/')\n const isFocused = focusedIndex.row === index\n\n return (\n <li\n key={values.join('/')}\n id={getSearchOptionId(index)}\n role=\"option\"\n aria-selected={isSelected}\n data-testid={`${baseTestId}-search-option-${values.join('-')}`}\n data-state={isSelected ? 'selected' : undefined}\n className={`px-3 py-2 cursor-pointer ${\n isSelected\n ? 'bg-primary text-primary-content'\n : isFocused\n ? 'bg-base-200'\n : 'hover:bg-base-200'\n }`}\n onClick={() => handleSearchResultClick(values, path)}\n >\n {renderFn\n ? renderFn(searchValue, path)\n : path.map(opt => opt.label).join(' / ')\n }\n </li>\n )\n })}\n </ul>\n )\n }\n\n // Render dropdown content\n const renderDropdownContent = () => {\n const content = filteredPaths ? renderSearchResults() : (\n <div className=\"flex\">\n {columns.map((columnOptions, colIndex) => (\n <ul\n key={colIndex}\n role=\"listbox\"\n aria-label={`Level ${colIndex + 1} options`}\n className={`min-w-[120px] max-h-[200px] overflow-y-auto py-1 ${\n colIndex > 0 ? 'border-l border-base-300' : ''\n }`}\n >\n {columnOptions.map((option, optIndex) => {\n const isSelected = selectedPath[colIndex] === option.value\n const isHovered = activePath[colIndex] === option.value\n const hasChildren = option.children && option.children.length > 0\n const isLoading = loadingKeys.has(option.value)\n const isFocused = focusedIndex.column === colIndex && focusedIndex.row === optIndex\n const optionId = getOptionId(colIndex, optIndex)\n\n return (\n <li\n key={option.value}\n id={optionId}\n role=\"option\"\n aria-selected={isSelected}\n aria-disabled={option.disabled}\n data-testid={`${baseTestId}-option-${option.value}`}\n data-state={isSelected ? 'selected' : isHovered ? 'hovered' : undefined}\n data-value={option.value}\n className={`px-3 py-2 cursor-pointer flex items-center justify-between gap-2 ${\n option.disabled\n ? 'text-base-content/30 cursor-not-allowed'\n : isSelected\n ? 'bg-primary text-primary-content'\n : isFocused\n ? 'bg-base-200'\n : isHovered\n ? 'bg-base-200'\n : 'hover:bg-base-200'\n }`}\n onClick={() => handleOptionClick(option, colIndex)}\n onMouseEnter={() => handleOptionHover(option, colIndex)}\n >\n <span>{option.label}</span>\n {isLoading ? (\n <span className={`${dLoading} ${dLoadingSpinner} ${dLoadingXs}`} />\n ) : hasChildren ? (\n <svg className=\"w-4 h-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 5l7 7-7 7\" />\n </svg>\n ) : null}\n </li>\n )\n })}\n </ul>\n ))}\n </div>\n )\n\n return dropdownRender ? dropdownRender(content) : content\n }\n\n // Get active descendant ID\n const getActiveDescendant = () => {\n if (!isOpen) return undefined\n if (filteredPaths) {\n return getSearchOptionId(focusedIndex.row)\n }\n return getOptionId(focusedIndex.column, focusedIndex.row)\n }\n\n const hasValue = multiple ? selectedPaths.length > 0 : selectedPath.length > 0\n\n return (\n <div\n ref={(node) => {\n containerRef.current = node\n if (typeof ref === 'function') ref(node)\n else if (ref) ref.current = node\n }}\n className={`relative inline-block w-full ${className}`}\n data-testid={baseTestId}\n data-state={isOpen ? 'open' : 'closed'}\n {...rest}\n >\n {/* Input/Trigger */}\n <div\n id={inputId}\n role=\"combobox\"\n aria-expanded={isOpen}\n aria-haspopup=\"listbox\"\n aria-controls={listboxId}\n aria-activedescendant={getActiveDescendant()}\n aria-label={ariaLabel}\n aria-disabled={disabled}\n tabIndex={disabled ? -1 : 0}\n className={`${dInput} w-full flex items-center justify-between cursor-pointer gap-1 ${sizeClasses[size]} ${\n disabled ? `${dInputDisabled} cursor-not-allowed` : ''\n } ${getColorClass()}`}\n onClick={() => {\n if (!disabled) {\n setIsOpen(!isOpen)\n if (showSearch && !isOpen) {\n setTimeout(() => inputRef.current?.focus(), 0)\n }\n }\n }}\n onKeyDown={handleKeyDown}\n >\n {multiple && selectedPaths.length > 0 ? (\n renderTags()\n ) : showSearch && isOpen ? (\n <input\n ref={inputRef}\n type=\"text\"\n className=\"flex-1 bg-transparent outline-none min-w-[50px]\"\n value={searchValue}\n onChange={(e) => setSearchValue(e.target.value)}\n onClick={(e) => e.stopPropagation()}\n placeholder={hasValue ? String(displayValue) : placeholder}\n aria-label=\"Search options\"\n />\n ) : (\n <span className={`flex-1 truncate ${!hasValue ? 'text-base-content/50' : ''}`}>\n {hasValue ? displayValue : placeholder}\n </span>\n )}\n <div className=\"flex items-center gap-1 shrink-0\">\n {allowClear && hasValue && !disabled && (\n <button\n type=\"button\"\n className={`${dBtn} ${dBtnGhost} ${dBtnXs} ${dBtnCircle}`}\n onClick={handleClear}\n aria-label=\"Clear selection\"\n data-testid={`${baseTestId}-clear`}\n >\n <svg className=\"w-3 h-3\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n )}\n <svg\n className={`w-4 h-4 transition-transform ${isOpen ? 'rotate-180' : ''}`}\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19 9l-7 7-7-7\" />\n </svg>\n </div>\n </div>\n\n {/* Dropdown */}\n {isOpen && (\n <div\n ref={dropdownRef}\n id={listboxId}\n className={`absolute z-50 mt-1 bg-base-100 border border-base-300 rounded-lg shadow-lg ${dropdownSizeClasses[size]} ${popupClassName}`}\n data-testid={`${baseTestId}-dropdown`}\n >\n {renderDropdownContent()}\n </div>\n )}\n </div>\n )\n})\n\nCascader.displayName = 'Cascader'\n"],"names":["dInput","dInputXs","dInputSm","dInputMd","dInputLg","dInputDisabled","dInputPrimary","dInputError","dInputWarning","dBadge","dBadgeSm","dBtn","dBtnGhost","dBtnXs","dBtnCircle","dLoading","dLoadingSpinner","dLoadingXs","getFieldValue","option","field","fallback","Cascader","forwardRef","options","value","defaultValue","onChange","placeholder","disabled","allowClear","expandTrigger","changeOnSelect","displayRender","size","color","status","showSearch","notFoundContent","loadData","fieldNames","controlledOpen","onDropdownVisibleChange","popupClassName","dropdownRender","multiple","maxTagCount","className","ariaLabel","testId","rest","ref","baseTestId","isControlledOpen","internalOpen","setInternalOpen","useState","isOpen","setIsOpen","useCallback","open","selectedPath","setSelectedPath","selectedPaths","setSelectedPaths","hoveredPath","setHoveredPath","focusedIndex","setFocusedIndex","searchValue","setSearchValue","loadingKeys","setLoadingKeys","containerRef","useRef","inputRef","dropdownRef","baseId","useId","inputId","listboxId","labelField","valueField","childrenField","normalizeOption","opt","normalizedOptions","useMemo","useEffect","handleClickOutside","e","getOptionsAtLevel","level","path","currentOptions","i","selected","getSelectedOptions","result","val","found","getAllPaths","paths","traverse","opts","currentPath","currentValues","newPath","newValues","filteredPaths","allPaths","searchLower","filterFn","inputValue","activePath","columns","cols","nextOptions","handleOptionClick","selectedOpts","key","prev","next","pathStr","isSelected","p","newPaths","handleSearchResultClick","values","handleOptionHover","handleClear","handleRemoveTag","pathToRemove","handleKeyDown","currentColumn","selectedOptions","labels","displayValue","sizeClasses","dropdownSizeClasses","colorClasses","getColorClass","getOptionId","colIndex","optIndex","getSearchOptionId","index","renderTags","displayPaths","hiddenCount","jsxs","label","o","jsx","renderSearchResults","renderFn","isFocused","renderDropdownContent","content","columnOptions","isHovered","hasChildren","isLoading","optionId","getActiveDescendant","hasValue","node"],"mappings":"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"}
@@ -1,33 +1,33 @@
1
- import { jsxs as o, jsx as a } from "react/jsx-runtime";
2
- const p = ({
3
- message: l,
4
- position: n = "start",
5
- avatar: s,
6
- avatarAlt: i = "",
7
- header: e,
8
- footer: t,
9
- color: c,
10
- className: h = "",
11
- ...u
1
+ import { jsxs as i, jsx as t } from "react/jsx-runtime";
2
+ const C = "chat", m = "chat-start", B = "chat-end", v = "chat-image", N = "chat-header", f = "chat-bubble", g = "chat-bubble-primary", p = "chat-bubble-secondary", y = "chat-bubble-accent", $ = "chat-bubble-neutral", j = "chat-bubble-info", w = "chat-bubble-success", x = "chat-bubble-warning", S = "chat-bubble-error", A = "chat-footer", E = "avatar", F = ({
3
+ message: r,
4
+ position: l = "start",
5
+ avatar: c,
6
+ avatarAlt: h = "",
7
+ header: s,
8
+ footer: e,
9
+ color: a,
10
+ className: d = "",
11
+ ...o
12
12
  }) => {
13
- const d = n === "start" ? "chat-start" : "chat-end", r = {
14
- primary: "chat-bubble-primary",
15
- secondary: "chat-bubble-secondary",
16
- accent: "chat-bubble-accent",
17
- neutral: "chat-bubble-neutral",
18
- info: "chat-bubble-info",
19
- success: "chat-bubble-success",
20
- warning: "chat-bubble-warning",
21
- error: "chat-bubble-error"
22
- }, b = ["chat-bubble"];
23
- return c && r[c] && b.push(r[c]), /* @__PURE__ */ o("div", { className: `chat ${d} ${h}`, ...u, children: [
24
- s && /* @__PURE__ */ a("div", { className: "chat-image avatar", children: /* @__PURE__ */ a("div", { className: "w-10 rounded-full", children: /* @__PURE__ */ a("img", { alt: i, src: s }) }) }),
25
- e && /* @__PURE__ */ a("div", { className: "chat-header", children: e }),
26
- /* @__PURE__ */ a("div", { className: b.join(" "), children: l }),
27
- t && /* @__PURE__ */ a("div", { className: "chat-footer", children: t })
13
+ const u = l === "start" ? m : B, n = {
14
+ primary: g,
15
+ secondary: p,
16
+ accent: y,
17
+ neutral: $,
18
+ info: j,
19
+ success: w,
20
+ warning: x,
21
+ error: S
22
+ }, b = [f];
23
+ return a && n[a] && b.push(n[a]), /* @__PURE__ */ i("div", { className: `${C} ${u} ${d}`, ...o, children: [
24
+ c && /* @__PURE__ */ t("div", { className: `${v} ${E}`, children: /* @__PURE__ */ t("div", { className: "w-10 rounded-full", children: /* @__PURE__ */ t("img", { alt: h, src: c }) }) }),
25
+ s && /* @__PURE__ */ t("div", { className: N, children: s }),
26
+ /* @__PURE__ */ t("div", { className: b.join(" "), children: r }),
27
+ e && /* @__PURE__ */ t("div", { className: A, children: e })
28
28
  ] });
29
29
  };
30
30
  export {
31
- p as Chat
31
+ F as Chat
32
32
  };
33
33
  //# sourceMappingURL=Chat.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Chat.js","sources":["../../src/components/Chat.tsx"],"sourcesContent":["import React from 'react'\n\nexport interface ChatProps extends React.HTMLAttributes<HTMLDivElement> {\n message: React.ReactNode\n position?: 'start' | 'end'\n avatar?: string\n avatarAlt?: string\n header?: React.ReactNode\n footer?: React.ReactNode\n color?: 'primary' | 'secondary' | 'accent' | 'neutral' | 'info' | 'success' | 'warning' | 'error'\n}\n\nexport const Chat: React.FC<ChatProps> = ({\n message,\n position = 'start',\n avatar,\n avatarAlt = '',\n header,\n footer,\n color,\n className = '',\n ...rest\n}) => {\n const positionClass = position === 'start' ? 'chat-start' : 'chat-end'\n\n const colorClasses: Record<string, string> = {\n primary: 'chat-bubble-primary',\n secondary: 'chat-bubble-secondary',\n accent: 'chat-bubble-accent',\n neutral: 'chat-bubble-neutral',\n info: 'chat-bubble-info',\n success: 'chat-bubble-success',\n warning: 'chat-bubble-warning',\n error: 'chat-bubble-error',\n }\n\n const bubbleClasses = ['chat-bubble']\n if (color && colorClasses[color]) {\n bubbleClasses.push(colorClasses[color])\n }\n\n return (\n <div className={`chat ${positionClass} ${className}`} {...rest}>\n {avatar && (\n <div className=\"chat-image avatar\">\n <div className=\"w-10 rounded-full\">\n <img alt={avatarAlt} src={avatar} />\n </div>\n </div>\n )}\n {header && <div className=\"chat-header\">{header}</div>}\n <div className={bubbleClasses.join(' ')}>{message}</div>\n {footer && <div className=\"chat-footer\">{footer}</div>}\n </div>\n )\n}\n"],"names":["Chat","message","position","avatar","avatarAlt","header","footer","color","className","rest","positionClass","colorClasses","bubbleClasses","jsxs","jsx"],"mappings":";AAYO,MAAMA,IAA4B,CAAC;AAAA,EACxC,SAAAC;AAAA,EACA,UAAAC,IAAW;AAAA,EACX,QAAAC;AAAA,EACA,WAAAC,IAAY;AAAA,EACZ,QAAAC;AAAA,EACA,QAAAC;AAAA,EACA,OAAAC;AAAA,EACA,WAAAC,IAAY;AAAA,EACZ,GAAGC;AACL,MAAM;AACJ,QAAMC,IAAgBR,MAAa,UAAU,eAAe,YAEtDS,IAAuC;AAAA,IAC3C,SAAS;AAAA,IACT,WAAW;AAAA,IACX,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,MAAM;AAAA,IACN,SAAS;AAAA,IACT,SAAS;AAAA,IACT,OAAO;AAAA,EAAA,GAGHC,IAAgB,CAAC,aAAa;AACpC,SAAIL,KAASI,EAAaJ,CAAK,KAC7BK,EAAc,KAAKD,EAAaJ,CAAK,CAAC,GAItC,gBAAAM,EAAC,SAAI,WAAW,QAAQH,CAAa,IAAIF,CAAS,IAAK,GAAGC,GACvD,UAAA;AAAA,IAAAN,KACC,gBAAAW,EAAC,OAAA,EAAI,WAAU,qBACb,4BAAC,OAAA,EAAI,WAAU,qBACb,UAAA,gBAAAA,EAAC,SAAI,KAAKV,GAAW,KAAKD,EAAA,CAAQ,GACpC,GACF;AAAA,IAEDE,KAAU,gBAAAS,EAAC,OAAA,EAAI,WAAU,eAAe,UAAAT,GAAO;AAAA,sBAC/C,OAAA,EAAI,WAAWO,EAAc,KAAK,GAAG,GAAI,UAAAX,GAAQ;AAAA,IACjDK,KAAU,gBAAAQ,EAAC,OAAA,EAAI,WAAU,eAAe,UAAAR,EAAA,CAAO;AAAA,EAAA,GAClD;AAEJ;"}
1
+ {"version":3,"file":"Chat.js","sources":["../../src/components/Chat.tsx"],"sourcesContent":["import React from 'react'\n\n// DaisyUI classes\nconst dChat = 'chat'\nconst dChatStart = 'chat-start'\nconst dChatEnd = 'chat-end'\nconst dChatImage = 'chat-image'\nconst dChatHeader = 'chat-header'\nconst dChatBubble = 'chat-bubble'\nconst dChatBubblePrimary = 'chat-bubble-primary'\nconst dChatBubbleSecondary = 'chat-bubble-secondary'\nconst dChatBubbleAccent = 'chat-bubble-accent'\nconst dChatBubbleNeutral = 'chat-bubble-neutral'\nconst dChatBubbleInfo = 'chat-bubble-info'\nconst dChatBubbleSuccess = 'chat-bubble-success'\nconst dChatBubbleWarning = 'chat-bubble-warning'\nconst dChatBubbleError = 'chat-bubble-error'\nconst dChatFooter = 'chat-footer'\nconst dAvatar = 'avatar'\n\nexport interface ChatProps extends React.HTMLAttributes<HTMLDivElement> {\n message: React.ReactNode\n position?: 'start' | 'end'\n avatar?: string\n avatarAlt?: string\n header?: React.ReactNode\n footer?: React.ReactNode\n color?: 'primary' | 'secondary' | 'accent' | 'neutral' | 'info' | 'success' | 'warning' | 'error'\n}\n\nexport const Chat: React.FC<ChatProps> = ({\n message,\n position = 'start',\n avatar,\n avatarAlt = '',\n header,\n footer,\n color,\n className = '',\n ...rest\n}) => {\n const positionClass = position === 'start' ? dChatStart : dChatEnd\n\n const colorClasses: Record<string, string> = {\n primary: dChatBubblePrimary,\n secondary: dChatBubbleSecondary,\n accent: dChatBubbleAccent,\n neutral: dChatBubbleNeutral,\n info: dChatBubbleInfo,\n success: dChatBubbleSuccess,\n warning: dChatBubbleWarning,\n error: dChatBubbleError,\n }\n\n const bubbleClasses = [dChatBubble]\n if (color && colorClasses[color]) {\n bubbleClasses.push(colorClasses[color])\n }\n\n return (\n <div className={`${dChat} ${positionClass} ${className}`} {...rest}>\n {avatar && (\n <div className={`${dChatImage} ${dAvatar}`}>\n <div className=\"w-10 rounded-full\">\n <img alt={avatarAlt} src={avatar} />\n </div>\n </div>\n )}\n {header && <div className={dChatHeader}>{header}</div>}\n <div className={bubbleClasses.join(' ')}>{message}</div>\n {footer && <div className={dChatFooter}>{footer}</div>}\n </div>\n )\n}\n"],"names":["dChat","dChatStart","dChatEnd","dChatImage","dChatHeader","dChatBubble","dChatBubblePrimary","dChatBubbleSecondary","dChatBubbleAccent","dChatBubbleNeutral","dChatBubbleInfo","dChatBubbleSuccess","dChatBubbleWarning","dChatBubbleError","dChatFooter","dAvatar","Chat","message","position","avatar","avatarAlt","header","footer","color","className","rest","positionClass","colorClasses","bubbleClasses","jsxs","jsx"],"mappings":";AAGA,MAAMA,IAAQ,QACRC,IAAa,cACbC,IAAW,YACXC,IAAa,cACbC,IAAc,eACdC,IAAc,eACdC,IAAqB,uBACrBC,IAAuB,yBACvBC,IAAoB,sBACpBC,IAAqB,uBACrBC,IAAkB,oBAClBC,IAAqB,uBACrBC,IAAqB,uBACrBC,IAAmB,qBACnBC,IAAc,eACdC,IAAU,UAYHC,IAA4B,CAAC;AAAA,EACxC,SAAAC;AAAA,EACA,UAAAC,IAAW;AAAA,EACX,QAAAC;AAAA,EACA,WAAAC,IAAY;AAAA,EACZ,QAAAC;AAAA,EACA,QAAAC;AAAA,EACA,OAAAC;AAAA,EACA,WAAAC,IAAY;AAAA,EACZ,GAAGC;AACL,MAAM;AACJ,QAAMC,IAAgBR,MAAa,UAAUjB,IAAaC,GAEpDyB,IAAuC;AAAA,IAC3C,SAASrB;AAAA,IACT,WAAWC;AAAA,IACX,QAAQC;AAAA,IACR,SAASC;AAAA,IACT,MAAMC;AAAA,IACN,SAASC;AAAA,IACT,SAASC;AAAA,IACT,OAAOC;AAAA,EAAA,GAGHe,IAAgB,CAACvB,CAAW;AAClC,SAAIkB,KAASI,EAAaJ,CAAK,KAC7BK,EAAc,KAAKD,EAAaJ,CAAK,CAAC,GAItC,gBAAAM,EAAC,OAAA,EAAI,WAAW,GAAG7B,CAAK,IAAI0B,CAAa,IAAIF,CAAS,IAAK,GAAGC,GAC3D,UAAA;AAAA,IAAAN,uBACE,OAAA,EAAI,WAAW,GAAGhB,CAAU,IAAIY,CAAO,IACtC,UAAA,gBAAAe,EAAC,SAAI,WAAU,qBACb,4BAAC,OAAA,EAAI,KAAKV,GAAW,KAAKD,GAAQ,GACpC,EAAA,CACF;AAAA,IAEDE,KAAU,gBAAAS,EAAC,OAAA,EAAI,WAAW1B,GAAc,UAAAiB,GAAO;AAAA,sBAC/C,OAAA,EAAI,WAAWO,EAAc,KAAK,GAAG,GAAI,UAAAX,GAAQ;AAAA,IACjDK,KAAU,gBAAAQ,EAAC,OAAA,EAAI,WAAWhB,GAAc,UAAAQ,EAAA,CAAO;AAAA,EAAA,GAClD;AAEJ;"}
@@ -1,155 +1,156 @@
1
- import { jsxs as C, jsx as c } from "react/jsx-runtime";
2
- import V, { forwardRef as G, useContext as B, createContext as P } from "react";
3
- const N = P(null);
4
- function S({
1
+ import { jsxs as g, jsx as c } from "react/jsx-runtime";
2
+ import V, { forwardRef as G, useContext as O, createContext as P } from "react";
3
+ import { useConfig as B } from "./ConfigProvider.js";
4
+ const T = "checkbox", X = "checkbox-xs", A = "checkbox-sm", D = "checkbox-md", E = "checkbox-lg", F = "checkbox-xl", L = "checkbox-primary", M = "checkbox-secondary", W = "checkbox-accent", q = "checkbox-neutral", H = "checkbox-success", I = "checkbox-warning", J = "checkbox-info", K = "checkbox-error", Q = "swap", U = "swap-rotate", Y = "swap-flip", Z = "swap-on", _ = "swap-off", R = P(null);
5
+ function ee({
5
6
  children: u,
6
- value: d,
7
- defaultValue: k,
8
- onChange: h,
7
+ value: b,
8
+ defaultValue: C,
9
+ onChange: d,
9
10
  disabled: r = !1,
10
- options: f,
11
- direction: a = "vertical",
12
- name: y,
11
+ options: l,
12
+ direction: o = "vertical",
13
+ name: v,
13
14
  className: m = "",
14
15
  "data-testid": i
15
16
  }) {
16
- const [x, o] = V.useState(k || []), t = d !== void 0 ? d : x, p = {
17
- value: t,
18
- onChange: (l, e) => {
19
- const n = e ? [...t, l] : t.filter((b) => b !== l);
20
- d === void 0 && o(n), h?.(n);
17
+ const [h, s] = V.useState(C || []), f = b !== void 0 ? b : h, t = {
18
+ value: f,
19
+ onChange: (x, e) => {
20
+ const n = e ? [...f, x] : f.filter((k) => k !== x);
21
+ b === void 0 && s(n), d?.(n);
21
22
  },
22
23
  disabled: r,
23
- name: y
24
+ name: v
24
25
  };
25
- if (f) {
26
- const l = a === "horizontal" ? "flex flex-row flex-wrap gap-4" : "flex flex-col gap-2";
27
- return /* @__PURE__ */ c(N.Provider, { value: p, children: /* @__PURE__ */ c("div", { className: `${l} ${m}`.trim(), "data-testid": i, children: f.map((e) => {
26
+ if (l) {
27
+ const x = o === "horizontal" ? "flex flex-row flex-wrap gap-4" : "flex flex-col gap-2";
28
+ return /* @__PURE__ */ c(R.Provider, { value: t, children: /* @__PURE__ */ c("div", { className: `${x} ${m}`.trim(), "data-testid": i, children: l.map((e) => {
28
29
  if (typeof e == "string" || typeof e == "number") {
29
30
  const n = i ? `${i}-option-${e}` : void 0;
30
- return /* @__PURE__ */ C("label", { className: "flex items-center cursor-pointer gap-2", children: [
31
- /* @__PURE__ */ c(g, { value: e, "data-testid": n }),
31
+ return /* @__PURE__ */ g("label", { className: "flex items-center cursor-pointer gap-2", children: [
32
+ /* @__PURE__ */ c(y, { value: e, "data-testid": n }),
32
33
  /* @__PURE__ */ c("span", { children: e })
33
34
  ] }, e);
34
35
  } else {
35
36
  const n = i ? `${i}-option-${e.value}` : void 0;
36
- return /* @__PURE__ */ C("label", { className: "flex items-center cursor-pointer gap-2", children: [
37
- /* @__PURE__ */ c(g, { value: e.value, disabled: e.disabled, "data-testid": n }),
37
+ return /* @__PURE__ */ g("label", { className: "flex items-center cursor-pointer gap-2", children: [
38
+ /* @__PURE__ */ c(y, { value: e.value, disabled: e.disabled, "data-testid": n }),
38
39
  /* @__PURE__ */ c("span", { children: e.label })
39
40
  ] }, e.value);
40
41
  }
41
42
  }) }) });
42
43
  }
43
- return /* @__PURE__ */ c(N.Provider, { value: p, children: /* @__PURE__ */ c("div", { className: m, children: u }) });
44
+ return /* @__PURE__ */ c(R.Provider, { value: t, children: /* @__PURE__ */ c("div", { className: m, children: u }) });
44
45
  }
45
- const g = G(
46
+ const y = G(
46
47
  ({
47
48
  children: u,
48
- size: d,
49
- color: k,
50
- indeterminate: h = !1,
49
+ size: b,
50
+ color: C,
51
+ indeterminate: d = !1,
51
52
  swap: r,
52
- className: f = "",
53
- value: a,
54
- checked: y,
53
+ className: l = "",
54
+ value: o,
55
+ checked: v,
55
56
  onChange: m,
56
57
  disabled: i,
57
- ...x
58
- }, o) => {
59
- const t = B(N), j = {
60
- xs: "checkbox-xs",
61
- sm: "checkbox-sm",
62
- md: "checkbox-md",
63
- lg: "checkbox-lg",
64
- xl: "checkbox-xl"
65
- }, p = {
66
- primary: "checkbox-primary",
67
- secondary: "checkbox-secondary",
68
- accent: "checkbox-accent",
69
- neutral: "checkbox-neutral",
70
- success: "checkbox-success",
71
- warning: "checkbox-warning",
72
- info: "checkbox-info",
73
- error: "checkbox-error"
74
- }, l = [
75
- "checkbox",
76
- d && j[d],
77
- k && p[k]
78
- ].filter(Boolean).join(" "), e = t?.name ?? x.name, n = h ? "mixed" : void 0, b = t && a !== void 0 && (typeof a == "string" || typeof a == "number") ? t.value?.includes(a) ?? !1 : y, v = t?.disabled || i, $ = (s) => {
79
- t && a !== void 0 && (typeof a == "string" || typeof a == "number") && t.onChange?.(a, s.target.checked), m?.(s);
80
- }, R = V.useCallback(
81
- (s) => {
82
- s && (s.indeterminate = h), typeof o == "function" ? o(s) : o && (o.current = s);
58
+ ...h
59
+ }, s) => {
60
+ const { componentSize: f } = B(), w = b ?? f ?? "md", t = O(R), x = {
61
+ xs: X,
62
+ sm: A,
63
+ md: D,
64
+ lg: E,
65
+ xl: F
66
+ }, e = {
67
+ primary: L,
68
+ secondary: M,
69
+ accent: W,
70
+ neutral: q,
71
+ success: H,
72
+ warning: I,
73
+ info: J,
74
+ error: K
75
+ }, n = [
76
+ T,
77
+ w && x[w],
78
+ C && e[C]
79
+ ].filter(Boolean).join(" "), k = t?.name ?? h.name, S = d ? "mixed" : void 0, p = t && o !== void 0 && (typeof o == "string" || typeof o == "number") ? t.value?.includes(o) ?? !1 : v, N = t?.disabled || i, $ = (a) => {
80
+ t && o !== void 0 && (typeof o == "string" || typeof o == "number") && t.onChange?.(o, a.target.checked), m?.(a);
81
+ }, z = V.useCallback(
82
+ (a) => {
83
+ a && (a.indeterminate = d), typeof s == "function" ? s(a) : s && (s.current = a);
83
84
  },
84
- [h, o]
85
- ), w = h ? "indeterminate" : b ? "checked" : "unchecked";
85
+ [d, s]
86
+ ), j = d ? "indeterminate" : p ? "checked" : "unchecked";
86
87
  if (r) {
87
- const s = [
88
- "swap",
89
- r.effect === "rotate" && "swap-rotate",
90
- r.effect === "flip" && "swap-flip",
91
- f
88
+ const a = [
89
+ Q,
90
+ r.effect === "rotate" && U,
91
+ r.effect === "flip" && Y,
92
+ l
92
93
  ].filter(Boolean).join(" ");
93
- return /* @__PURE__ */ C("label", { className: s, children: [
94
+ return /* @__PURE__ */ g("label", { className: a, children: [
94
95
  /* @__PURE__ */ c(
95
96
  "input",
96
97
  {
97
- ref: o,
98
+ ref: s,
98
99
  type: "checkbox",
99
- name: e,
100
- checked: b,
100
+ name: k,
101
+ checked: p,
101
102
  onChange: $,
102
- disabled: v,
103
- "aria-checked": n,
104
- "data-state": w,
105
- ...x
103
+ disabled: N,
104
+ "aria-checked": S,
105
+ "data-state": j,
106
+ ...h
106
107
  }
107
108
  ),
108
- /* @__PURE__ */ c("div", { className: "swap-on", children: r.on }),
109
- /* @__PURE__ */ c("div", { className: "swap-off", children: r.off })
109
+ /* @__PURE__ */ c("div", { className: Z, children: r.on }),
110
+ /* @__PURE__ */ c("div", { className: _, children: r.off })
110
111
  ] });
111
112
  }
112
- return u ? /* @__PURE__ */ C("label", { className: `flex items-center cursor-pointer gap-2 ${f}`.trim(), children: [
113
+ return u ? /* @__PURE__ */ g("label", { className: `flex items-center cursor-pointer gap-2 ${l}`.trim(), children: [
113
114
  /* @__PURE__ */ c(
114
115
  "input",
115
116
  {
116
- ref: R,
117
+ ref: z,
117
118
  type: "checkbox",
118
- className: l,
119
- name: e,
120
- value: a,
121
- checked: b,
119
+ className: n,
120
+ name: k,
121
+ value: o,
122
+ checked: p,
122
123
  onChange: $,
123
- disabled: v,
124
- "aria-checked": n,
125
- "data-state": w,
126
- ...x
124
+ disabled: N,
125
+ "aria-checked": S,
126
+ "data-state": j,
127
+ ...h
127
128
  }
128
129
  ),
129
130
  /* @__PURE__ */ c("span", { children: u })
130
131
  ] }) : /* @__PURE__ */ c(
131
132
  "input",
132
133
  {
133
- ref: R,
134
+ ref: z,
134
135
  type: "checkbox",
135
- className: `${l} ${f}`.trim(),
136
- name: e,
137
- value: a,
138
- checked: b,
136
+ className: `${n} ${l}`.trim(),
137
+ name: k,
138
+ value: o,
139
+ checked: p,
139
140
  onChange: $,
140
- disabled: v,
141
- "aria-checked": n,
142
- "data-state": w,
143
- ...x
141
+ disabled: N,
142
+ "aria-checked": S,
143
+ "data-state": j,
144
+ ...h
144
145
  }
145
146
  );
146
147
  }
147
148
  );
148
- g.displayName = "Checkbox";
149
- const D = Object.assign(g, {
150
- Group: S
149
+ y.displayName = "Checkbox";
150
+ const ne = Object.assign(y, {
151
+ Group: ee
151
152
  });
152
153
  export {
153
- D as Checkbox
154
+ ne as Checkbox
154
155
  };
155
156
  //# sourceMappingURL=Checkbox.js.map