asterui 0.12.29 → 0.12.31

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 (329) hide show
  1. package/dist/chart.d.ts +2 -0
  2. package/dist/chart.js +5 -0
  3. package/dist/chart.js.map +1 -0
  4. package/dist/{index2.js → components/Affix.js} +1 -1
  5. package/dist/components/Affix.js.map +1 -0
  6. package/dist/{index4.js → components/Alert.js} +1 -1
  7. package/dist/components/Alert.js.map +1 -0
  8. package/dist/{index3.js → components/Anchor.js} +1 -1
  9. package/dist/components/Anchor.js.map +1 -0
  10. package/dist/{index5.js → components/Autocomplete.js} +1 -1
  11. package/dist/components/Autocomplete.js.map +1 -0
  12. package/dist/{index6.js → components/Avatar.js} +1 -1
  13. package/dist/components/Avatar.js.map +1 -0
  14. package/dist/{index7.js → components/Badge.js} +1 -1
  15. package/dist/components/Badge.js.map +1 -0
  16. package/dist/components/Breadcrumb.js +38 -0
  17. package/dist/components/Breadcrumb.js.map +1 -0
  18. package/dist/{index53.js → components/Browser.js} +1 -1
  19. package/dist/components/Browser.js.map +1 -0
  20. package/dist/{index9.js → components/Button.js} +1 -1
  21. package/dist/components/Button.js.map +1 -0
  22. package/dist/{index14.js → components/Card.js} +22 -22
  23. package/dist/{index14.js.map → components/Card.js.map} +1 -1
  24. package/dist/{index17.js → components/Carousel.js} +1 -1
  25. package/dist/components/Carousel.js.map +1 -0
  26. package/dist/{index15.js → components/Cascader.js} +1 -1
  27. package/dist/components/Cascader.js.map +1 -0
  28. package/dist/{index16.js → components/Chart.js} +1 -1
  29. package/dist/components/Chart.js.map +1 -0
  30. package/dist/{index12.js → components/Chat.js} +1 -1
  31. package/dist/{index12.js.map → components/Chat.js.map} +1 -1
  32. package/dist/{index11.js → components/Checkbox.js} +15 -15
  33. package/dist/components/Checkbox.js.map +1 -0
  34. package/dist/{index54.js → components/Code.js} +5 -5
  35. package/dist/{index54.js.map → components/Code.js.map} +1 -1
  36. package/dist/{index18.js → components/Collapse.js} +1 -1
  37. package/dist/components/Collapse.js.map +1 -0
  38. package/dist/components/ColorPicker.d.ts +8 -2
  39. package/dist/components/ColorPicker.js +366 -0
  40. package/dist/components/ColorPicker.js.map +1 -0
  41. package/dist/{index19.js → components/Container.js} +1 -1
  42. package/dist/components/Container.js.map +1 -0
  43. package/dist/{index20.js → components/ContextMenu.js} +9 -9
  44. package/dist/components/ContextMenu.js.map +1 -0
  45. package/dist/{index10.js → components/CopyButton.js} +2 -2
  46. package/dist/components/CopyButton.js.map +1 -0
  47. package/dist/{index21.js → components/Countdown.js} +1 -1
  48. package/dist/components/Countdown.js.map +1 -0
  49. package/dist/{index22.js → components/DatePicker.js} +2 -2
  50. package/dist/components/DatePicker.js.map +1 -0
  51. package/dist/{index23.js → components/Descriptions.js} +23 -23
  52. package/dist/components/Descriptions.js.map +1 -0
  53. package/dist/{index24.js → components/Diff.js} +1 -1
  54. package/dist/{index24.js.map → components/Diff.js.map} +1 -1
  55. package/dist/{index26.js → components/Divider.js} +1 -1
  56. package/dist/components/Divider.js.map +1 -0
  57. package/dist/{index25.js → components/Dock.js} +1 -1
  58. package/dist/{index25.js.map → components/Dock.js.map} +1 -1
  59. package/dist/{index27.js → components/Drawer.js} +1 -1
  60. package/dist/components/Drawer.js.map +1 -0
  61. package/dist/{index40.js → components/Dropdown.js} +31 -31
  62. package/dist/components/Dropdown.js.map +1 -0
  63. package/dist/{index41.js → components/Empty.js} +1 -1
  64. package/dist/components/Empty.js.map +1 -0
  65. package/dist/{index29.js → components/Fieldset.js} +1 -1
  66. package/dist/components/Fieldset.js.map +1 -0
  67. package/dist/{index30.js → components/FileInput.js} +1 -1
  68. package/dist/components/FileInput.js.map +1 -0
  69. package/dist/{index31.js → components/Filter.js} +1 -1
  70. package/dist/components/Filter.js.map +1 -0
  71. package/dist/{index32.js → components/Flex.js} +1 -1
  72. package/dist/{index32.js.map → components/Flex.js.map} +1 -1
  73. package/dist/{index33.js → components/FloatButton.js} +1 -1
  74. package/dist/components/FloatButton.js.map +1 -0
  75. package/dist/{index34.js → components/Footer.js} +1 -1
  76. package/dist/components/Footer.js.map +1 -0
  77. package/dist/{index35.js → components/Form.js} +1 -1
  78. package/dist/{index35.js.map → components/Form.js.map} +1 -1
  79. package/dist/{index36.js → components/Grid.js} +6 -6
  80. package/dist/{index36.js.map → components/Grid.js.map} +1 -1
  81. package/dist/{index37.js → components/Hero.js} +1 -1
  82. package/dist/{index37.js.map → components/Hero.js.map} +1 -1
  83. package/dist/{index38.js → components/HoverGallery.js} +1 -1
  84. package/dist/components/HoverGallery.js.map +1 -0
  85. package/dist/{index39.js → components/Image.js} +1 -1
  86. package/dist/components/Image.js.map +1 -0
  87. package/dist/{index42.js → components/Input.js} +1 -1
  88. package/dist/components/Input.js.map +1 -0
  89. package/dist/{index43.js → components/InputNumber.js} +1 -1
  90. package/dist/components/InputNumber.js.map +1 -0
  91. package/dist/components/Join.js +18 -0
  92. package/dist/{index44.js.map → components/Join.js.map} +1 -1
  93. package/dist/{index45.js → components/Kbd.js} +1 -1
  94. package/dist/components/Kbd.js.map +1 -0
  95. package/dist/{index46.js → components/Layout.js} +16 -16
  96. package/dist/components/Layout.js.map +1 -0
  97. package/dist/{index47.js → components/List.js} +17 -17
  98. package/dist/{index47.js.map → components/List.js.map} +1 -1
  99. package/dist/{index48.js → components/Loading.js} +1 -1
  100. package/dist/components/Loading.js.map +1 -0
  101. package/dist/{index49.js → components/Mask.js} +1 -1
  102. package/dist/{index49.js.map → components/Mask.js.map} +1 -1
  103. package/dist/{index50.js → components/Masonry.js} +19 -19
  104. package/dist/components/Masonry.js.map +1 -0
  105. package/dist/{index51.js → components/Mention.js} +1 -1
  106. package/dist/components/Mention.js.map +1 -0
  107. package/dist/{index52.js → components/Menu.js} +1 -1
  108. package/dist/{index52.js.map → components/Menu.js.map} +1 -1
  109. package/dist/{index57.js → components/Modal.js} +23 -23
  110. package/dist/components/Modal.js.map +1 -0
  111. package/dist/{index58.js → components/Navbar.js} +1 -1
  112. package/dist/components/Navbar.js.map +1 -0
  113. package/dist/{index59.js → components/Notification.js} +1 -1
  114. package/dist/components/Notification.js.map +1 -0
  115. package/dist/{index60.js → components/OTPInput.js} +1 -1
  116. package/dist/components/OTPInput.js.map +1 -0
  117. package/dist/{index62.js → components/PageLayout.js} +1 -1
  118. package/dist/components/PageLayout.js.map +1 -0
  119. package/dist/{index61.js → components/Pagination.js} +18 -18
  120. package/dist/components/Pagination.js.map +1 -0
  121. package/dist/{index55.js → components/Phone.js} +1 -1
  122. package/dist/components/Phone.js.map +1 -0
  123. package/dist/{index63.js → components/Popconfirm.js} +14 -14
  124. package/dist/components/Popconfirm.js.map +1 -0
  125. package/dist/{index64.js → components/Popover.js} +1 -1
  126. package/dist/components/Popover.js.map +1 -0
  127. package/dist/{index65.js → components/Progress.js} +1 -1
  128. package/dist/components/Progress.js.map +1 -0
  129. package/dist/{index66.js → components/QRCode.js} +1 -1
  130. package/dist/components/QRCode.js.map +1 -0
  131. package/dist/{index68.js → components/RadialProgress.js} +1 -1
  132. package/dist/components/RadialProgress.js.map +1 -0
  133. package/dist/{index67.js → components/Radio.js} +13 -13
  134. package/dist/components/Radio.js.map +1 -0
  135. package/dist/{index69.js → components/Range.js} +1 -1
  136. package/dist/components/Range.js.map +1 -0
  137. package/dist/{index70.js → components/Rating.js} +20 -20
  138. package/dist/components/Rating.js.map +1 -0
  139. package/dist/{index98.js → components/Responsive.js} +2 -2
  140. package/dist/components/Responsive.js.map +1 -0
  141. package/dist/{index71.js → components/Result.js} +1 -1
  142. package/dist/components/Result.js.map +1 -0
  143. package/dist/{index73.js → components/Segmented.js} +1 -1
  144. package/dist/components/Segmented.js.map +1 -0
  145. package/dist/{index72.js → components/Select.js} +1 -1
  146. package/dist/components/Select.js.map +1 -0
  147. package/dist/{index28.js → components/SidebarDrawer.js} +3 -3
  148. package/dist/components/SidebarDrawer.js.map +1 -0
  149. package/dist/{index74.js → components/Skeleton.js} +1 -1
  150. package/dist/components/Skeleton.js.map +1 -0
  151. package/dist/components/Space.js +61 -0
  152. package/dist/components/Space.js.map +1 -0
  153. package/dist/{index76.js → components/Splitter.js} +22 -22
  154. package/dist/components/Splitter.js.map +1 -0
  155. package/dist/{index77.js → components/Stat.js} +1 -1
  156. package/dist/{index77.js.map → components/Stat.js.map} +1 -1
  157. package/dist/{index78.js → components/Status.js} +1 -1
  158. package/dist/components/Status.js.map +1 -0
  159. package/dist/{index79.js → components/Steps.js} +14 -14
  160. package/dist/components/Steps.js.map +1 -0
  161. package/dist/{index80.js → components/Table.js} +92 -92
  162. package/dist/components/Table.js.map +1 -0
  163. package/dist/components/Tabs.js +83 -0
  164. package/dist/{index81.js.map → components/Tabs.js.map} +1 -1
  165. package/dist/{index84.js → components/Tag.js} +1 -1
  166. package/dist/components/Tag.js.map +1 -0
  167. package/dist/{index83.js → components/TextRotate.js} +1 -1
  168. package/dist/components/TextRotate.js.map +1 -0
  169. package/dist/{index82.js → components/Textarea.js} +1 -1
  170. package/dist/components/Textarea.js.map +1 -0
  171. package/dist/{index85.js → components/ThemeController.js} +1 -1
  172. package/dist/components/ThemeController.js.map +1 -0
  173. package/dist/{index86.js → components/TimePicker.js} +2 -2
  174. package/dist/components/TimePicker.js.map +1 -0
  175. package/dist/{index87.js → components/Timeline.js} +13 -13
  176. package/dist/components/Timeline.js.map +1 -0
  177. package/dist/{index88.js → components/Toggle.js} +1 -1
  178. package/dist/components/Toggle.js.map +1 -0
  179. package/dist/{index90.js → components/Tooltip.js} +1 -1
  180. package/dist/components/Tooltip.js.map +1 -0
  181. package/dist/{index89.js → components/Tour.js} +1 -1
  182. package/dist/{index89.js.map → components/Tour.js.map} +1 -1
  183. package/dist/{index91.js → components/Transfer.js} +1 -1
  184. package/dist/components/Transfer.js.map +1 -0
  185. package/dist/{index92.js → components/Tree.js} +1 -1
  186. package/dist/{index92.js.map → components/Tree.js.map} +1 -1
  187. package/dist/{index93.js → components/TreeSelect.js} +44 -44
  188. package/dist/components/TreeSelect.js.map +1 -0
  189. package/dist/{index94.js → components/Typography.js} +1 -1
  190. package/dist/components/Typography.js.map +1 -0
  191. package/dist/{index95.js → components/Upload.js} +1 -1
  192. package/dist/components/Upload.js.map +1 -0
  193. package/dist/{index96.js → components/VirtualList.js} +2 -2
  194. package/dist/components/VirtualList.js.map +1 -0
  195. package/dist/{index97.js → components/Watermark.js} +1 -1
  196. package/dist/components/Watermark.js.map +1 -0
  197. package/dist/{index56.js → components/Window.js} +1 -1
  198. package/dist/components/Window.js.map +1 -0
  199. package/dist/{index99.js → hooks/useBreakpoint.js} +1 -1
  200. package/dist/hooks/useBreakpoint.js.map +1 -0
  201. package/dist/{index104.js → hooks/useClickOutside.js} +1 -1
  202. package/dist/hooks/useClickOutside.js.map +1 -0
  203. package/dist/{index101.js → hooks/useClipboard.js} +1 -1
  204. package/dist/hooks/useClipboard.js.map +1 -0
  205. package/dist/{index103.js → hooks/useDebounce.js} +1 -1
  206. package/dist/hooks/useDebounce.js.map +1 -0
  207. package/dist/{index100.js → hooks/useDisclosure.js} +1 -1
  208. package/dist/hooks/useDisclosure.js.map +1 -0
  209. package/dist/{index106.js → hooks/useHover.js} +1 -1
  210. package/dist/hooks/useHover.js.map +1 -0
  211. package/dist/{index107.js → hooks/useKeyPress.js} +1 -1
  212. package/dist/hooks/useKeyPress.js.map +1 -0
  213. package/dist/{index102.js → hooks/useLocalStorage.js} +1 -1
  214. package/dist/hooks/useLocalStorage.js.map +1 -0
  215. package/dist/{index105.js → hooks/usePrevious.js} +1 -1
  216. package/dist/hooks/usePrevious.js.map +1 -0
  217. package/dist/{index108.js → hooks/useWindowSize.js} +1 -1
  218. package/dist/hooks/useWindowSize.js.map +1 -0
  219. package/dist/index.d.ts +1 -7
  220. package/dist/index.js +204 -210
  221. package/dist/index.js.map +1 -1
  222. package/dist/qrcode.d.ts +2 -0
  223. package/dist/qrcode.js +5 -0
  224. package/dist/qrcode.js.map +1 -0
  225. package/dist/virtuallist.d.ts +2 -0
  226. package/dist/virtuallist.js +5 -0
  227. package/dist/virtuallist.js.map +1 -0
  228. package/package.json +13 -1
  229. package/dist/index10.js.map +0 -1
  230. package/dist/index100.js.map +0 -1
  231. package/dist/index101.js.map +0 -1
  232. package/dist/index102.js.map +0 -1
  233. package/dist/index103.js.map +0 -1
  234. package/dist/index104.js.map +0 -1
  235. package/dist/index105.js.map +0 -1
  236. package/dist/index106.js.map +0 -1
  237. package/dist/index107.js.map +0 -1
  238. package/dist/index108.js.map +0 -1
  239. package/dist/index109.js +0 -36
  240. package/dist/index109.js.map +0 -1
  241. package/dist/index11.js.map +0 -1
  242. package/dist/index110.js +0 -523
  243. package/dist/index110.js.map +0 -1
  244. package/dist/index111.js +0 -53
  245. package/dist/index111.js.map +0 -1
  246. package/dist/index13.js +0 -268
  247. package/dist/index13.js.map +0 -1
  248. package/dist/index15.js.map +0 -1
  249. package/dist/index16.js.map +0 -1
  250. package/dist/index17.js.map +0 -1
  251. package/dist/index18.js.map +0 -1
  252. package/dist/index19.js.map +0 -1
  253. package/dist/index2.js.map +0 -1
  254. package/dist/index20.js.map +0 -1
  255. package/dist/index21.js.map +0 -1
  256. package/dist/index22.js.map +0 -1
  257. package/dist/index23.js.map +0 -1
  258. package/dist/index26.js.map +0 -1
  259. package/dist/index27.js.map +0 -1
  260. package/dist/index28.js.map +0 -1
  261. package/dist/index29.js.map +0 -1
  262. package/dist/index3.js.map +0 -1
  263. package/dist/index30.js.map +0 -1
  264. package/dist/index31.js.map +0 -1
  265. package/dist/index33.js.map +0 -1
  266. package/dist/index34.js.map +0 -1
  267. package/dist/index38.js.map +0 -1
  268. package/dist/index39.js.map +0 -1
  269. package/dist/index4.js.map +0 -1
  270. package/dist/index40.js.map +0 -1
  271. package/dist/index41.js.map +0 -1
  272. package/dist/index42.js.map +0 -1
  273. package/dist/index43.js.map +0 -1
  274. package/dist/index44.js +0 -18
  275. package/dist/index45.js.map +0 -1
  276. package/dist/index46.js.map +0 -1
  277. package/dist/index48.js.map +0 -1
  278. package/dist/index5.js.map +0 -1
  279. package/dist/index50.js.map +0 -1
  280. package/dist/index51.js.map +0 -1
  281. package/dist/index53.js.map +0 -1
  282. package/dist/index55.js.map +0 -1
  283. package/dist/index56.js.map +0 -1
  284. package/dist/index57.js.map +0 -1
  285. package/dist/index58.js.map +0 -1
  286. package/dist/index59.js.map +0 -1
  287. package/dist/index6.js.map +0 -1
  288. package/dist/index60.js.map +0 -1
  289. package/dist/index61.js.map +0 -1
  290. package/dist/index62.js.map +0 -1
  291. package/dist/index63.js.map +0 -1
  292. package/dist/index64.js.map +0 -1
  293. package/dist/index65.js.map +0 -1
  294. package/dist/index66.js.map +0 -1
  295. package/dist/index67.js.map +0 -1
  296. package/dist/index68.js.map +0 -1
  297. package/dist/index69.js.map +0 -1
  298. package/dist/index7.js.map +0 -1
  299. package/dist/index70.js.map +0 -1
  300. package/dist/index71.js.map +0 -1
  301. package/dist/index72.js.map +0 -1
  302. package/dist/index73.js.map +0 -1
  303. package/dist/index74.js.map +0 -1
  304. package/dist/index75.js +0 -61
  305. package/dist/index75.js.map +0 -1
  306. package/dist/index76.js.map +0 -1
  307. package/dist/index78.js.map +0 -1
  308. package/dist/index79.js.map +0 -1
  309. package/dist/index8.js +0 -38
  310. package/dist/index8.js.map +0 -1
  311. package/dist/index80.js.map +0 -1
  312. package/dist/index81.js +0 -83
  313. package/dist/index82.js.map +0 -1
  314. package/dist/index83.js.map +0 -1
  315. package/dist/index84.js.map +0 -1
  316. package/dist/index85.js.map +0 -1
  317. package/dist/index86.js.map +0 -1
  318. package/dist/index87.js.map +0 -1
  319. package/dist/index88.js.map +0 -1
  320. package/dist/index9.js.map +0 -1
  321. package/dist/index90.js.map +0 -1
  322. package/dist/index91.js.map +0 -1
  323. package/dist/index93.js.map +0 -1
  324. package/dist/index94.js.map +0 -1
  325. package/dist/index95.js.map +0 -1
  326. package/dist/index96.js.map +0 -1
  327. package/dist/index97.js.map +0 -1
  328. package/dist/index98.js.map +0 -1
  329. package/dist/index99.js.map +0 -1
@@ -0,0 +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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"}
@@ -150,4 +150,4 @@ const $ = ({
150
150
  export {
151
151
  $ as Chart
152
152
  };
153
- //# sourceMappingURL=index16.js.map
153
+ //# sourceMappingURL=Chart.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Chart.js","sources":["../../src/components/Chart.tsx"],"sourcesContent":["import React, { useEffect, useRef, useState } from 'react'\nimport ApexCharts from 'apexcharts'\nimport type { ApexOptions } from 'apexcharts'\n\nexport interface ChartProps {\n /** Chart type */\n type: 'line' | 'area' | 'bar' | 'pie' | 'donut' | 'radialBar' | 'scatter' | 'bubble' | 'heatmap' | 'candlestick' | 'boxPlot' | 'radar' | 'polarArea' | 'rangeBar' | 'rangeArea' | 'treemap'\n /** Chart series data */\n series: ApexAxisChartSeries | ApexNonAxisChartSeries\n /** Chart width */\n width?: string | number\n /** Chart height */\n height?: string | number\n /** ApexCharts options (merged with theme defaults) */\n options?: ApexOptions\n /** Use daisyUI theme colors */\n themed?: boolean\n /** Additional CSS classes */\n className?: string\n}\n\n// Get CSS variable value from root\nfunction getCssVar(varName: string): string {\n if (typeof document === 'undefined') return ''\n return getComputedStyle(document.documentElement).getPropertyValue(varName).trim()\n}\n\n// Convert oklch to hex (approximate)\nfunction oklchToHex(oklch: string): string {\n // Parse oklch(L C H) format\n const match = oklch.match(/oklch\\(\\s*([\\d.]+)%?\\s+([\\d.]+)\\s+([\\d.]+)/)\n if (!match) return ''\n\n const l = parseFloat(match[1]) / 100 // Lightness 0-1\n const c = parseFloat(match[2]) // Chroma\n const h = parseFloat(match[3]) // Hue in degrees\n\n // Simplified oklch to sRGB conversion\n // This is an approximation - full conversion is complex\n const hRad = (h * Math.PI) / 180\n const a = c * Math.cos(hRad)\n const b = c * Math.sin(hRad)\n\n // Approximate conversion to linear RGB\n const l_ = l + 0.3963377774 * a + 0.2158037573 * b\n const m_ = l - 0.1055613458 * a - 0.0638541728 * b\n const s_ = l - 0.0894841775 * a - 1.2914855480 * b\n\n const l3 = l_ * l_ * l_\n const m3 = m_ * m_ * m_\n const s3 = s_ * s_ * s_\n\n let r = 4.0767416621 * l3 - 3.3077115913 * m3 + 0.2309699292 * s3\n let g = -1.2684380046 * l3 + 2.6097574011 * m3 - 0.3413193965 * s3\n let bl = -0.0041960863 * l3 - 0.7034186147 * m3 + 1.7076147010 * s3\n\n // Clamp and convert to sRGB\n const toSrgb = (x: number) => {\n x = Math.max(0, Math.min(1, x))\n return x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1/2.4) - 0.055\n }\n\n r = Math.round(toSrgb(r) * 255)\n g = Math.round(toSrgb(g) * 255)\n bl = Math.round(toSrgb(bl) * 255)\n\n return `#${r.toString(16).padStart(2, '0')}${g.toString(16).padStart(2, '0')}${bl.toString(16).padStart(2, '0')}`\n}\n\n// Get daisyUI theme colors from CSS variables\nfunction getThemeColors(): string[] {\n if (typeof document === 'undefined') return []\n\n const colorVars = [\n '--color-primary',\n '--color-secondary',\n '--color-accent',\n '--color-info',\n '--color-success',\n '--color-warning',\n '--color-error',\n ]\n\n return colorVars\n .map(varName => {\n const value = getCssVar(varName)\n if (value.includes('oklch')) {\n return oklchToHex(value)\n }\n return value\n })\n .filter(Boolean)\n}\n\n// Get theme-aware chart options\nfunction getThemedOptions(): Partial<ApexOptions> {\n const colors = getThemeColors()\n\n // Get text color from CSS variable\n const baseContentVar = getCssVar('--color-base-content')\n const textColor = baseContentVar.includes('oklch')\n ? oklchToHex(baseContentVar)\n : (baseContentVar || '#888888')\n\n // Get grid color from CSS variable\n const base300Var = getCssVar('--color-base-300')\n const gridColor = base300Var.includes('oklch')\n ? oklchToHex(base300Var)\n : (base300Var || '#e0e0e0')\n\n // Determine if dark theme by checking luminance of text color\n // If text is light, we're on dark theme\n const textMatch = textColor.match(/^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i)\n const isDark = textMatch\n ? (parseInt(textMatch[1], 16) + parseInt(textMatch[2], 16) + parseInt(textMatch[3], 16)) / 3 > 128\n : false\n\n return {\n colors: colors.length > 0 ? colors : undefined,\n theme: {\n mode: isDark ? 'dark' : 'light',\n },\n chart: {\n background: 'transparent',\n foreColor: textColor,\n },\n grid: {\n borderColor: gridColor,\n },\n xaxis: {\n labels: {\n style: {\n colors: textColor,\n },\n },\n axisBorder: {\n color: gridColor,\n },\n axisTicks: {\n color: gridColor,\n },\n },\n yaxis: {\n labels: {\n style: {\n colors: textColor,\n },\n },\n },\n legend: {\n labels: {\n colors: textColor,\n },\n },\n tooltip: {\n theme: isDark ? 'dark' : 'light',\n style: {\n fontSize: '12px',\n },\n x: {\n show: true,\n },\n marker: {\n show: true,\n },\n },\n dataLabels: {\n style: {\n colors: [textColor, textColor, textColor, textColor, textColor, textColor, textColor],\n },\n background: {\n enabled: false,\n },\n dropShadow: {\n enabled: false,\n },\n },\n }\n}\n\n// Deep merge objects\nfunction deepMerge<T extends Record<string, unknown>>(target: T, source: Partial<T>): T {\n const result = { ...target }\n\n for (const key in source) {\n if (source[key] !== undefined) {\n if (\n typeof source[key] === 'object' &&\n source[key] !== null &&\n !Array.isArray(source[key]) &&\n typeof target[key] === 'object' &&\n target[key] !== null &&\n !Array.isArray(target[key])\n ) {\n result[key] = deepMerge(\n target[key] as Record<string, unknown>,\n source[key] as Record<string, unknown>\n ) as T[Extract<keyof T, string>]\n } else {\n result[key] = source[key] as T[Extract<keyof T, string>]\n }\n }\n }\n\n return result\n}\n\nexport const Chart: React.FC<ChartProps> = ({\n type,\n series,\n width = '100%',\n height = 350,\n options = {},\n themed = true,\n className = '',\n}) => {\n const chartRef = useRef<HTMLDivElement>(null)\n const chartInstance = useRef<ApexCharts | null>(null)\n const [, setMounted] = useState(false)\n\n // Build final options\n const buildOptions = (): ApexOptions => {\n const baseOptions: ApexOptions = {\n chart: {\n type,\n width,\n height,\n },\n series,\n }\n\n if (themed) {\n const themedOpts = getThemedOptions()\n return deepMerge(deepMerge(baseOptions as unknown as Record<string, unknown>, themedOpts as unknown as Record<string, unknown>), options as unknown as Record<string, unknown>) as ApexOptions\n }\n\n return deepMerge(baseOptions as unknown as Record<string, unknown>, options as unknown as Record<string, unknown>) as ApexOptions\n }\n\n // Initialize chart\n useEffect(() => {\n if (!chartRef.current) return\n\n const opts = buildOptions()\n chartInstance.current = new ApexCharts(chartRef.current, opts)\n chartInstance.current.render()\n setMounted(true)\n\n return () => {\n if (chartInstance.current) {\n chartInstance.current.destroy()\n chartInstance.current = null\n }\n }\n }, []) // eslint-disable-line react-hooks/exhaustive-deps\n\n // Update chart when props change\n useEffect(() => {\n if (!chartInstance.current) return\n\n const opts = buildOptions()\n chartInstance.current.updateOptions(opts, true, true)\n }, [type, series, width, height, options, themed]) // eslint-disable-line react-hooks/exhaustive-deps\n\n // Listen for theme changes\n useEffect(() => {\n if (!themed || typeof window === 'undefined') return\n\n const observer = new MutationObserver(() => {\n if (chartInstance.current) {\n const opts = buildOptions()\n chartInstance.current.updateOptions(opts, true, true)\n }\n })\n\n observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['data-theme', 'class'],\n })\n\n return () => observer.disconnect()\n }, [themed]) // eslint-disable-line react-hooks/exhaustive-deps\n\n return <div ref={chartRef} className={className} />\n}\n"],"names":["getCssVar","varName","oklchToHex","oklch","match","l","c","hRad","a","b","l_","m_","s_","l3","m3","s3","r","g","bl","toSrgb","x","getThemeColors","value","getThemedOptions","colors","baseContentVar","textColor","base300Var","gridColor","textMatch","isDark","deepMerge","target","source","result","key","Chart","type","series","width","height","options","themed","className","chartRef","useRef","chartInstance","setMounted","useState","buildOptions","baseOptions","themedOpts","useEffect","opts","ApexCharts","observer","jsx"],"mappings":";;;AAsBA,SAASA,EAAUC,GAAyB;AAC1C,SAAI,OAAO,WAAa,MAAoB,KACrC,iBAAiB,SAAS,eAAe,EAAE,iBAAiBA,CAAO,EAAE,KAAA;AAC9E;AAGA,SAASC,EAAWC,GAAuB;AAEzC,QAAMC,IAAQD,EAAM,MAAM,4CAA4C;AACtE,MAAI,CAACC,EAAO,QAAO;AAEnB,QAAMC,IAAI,WAAWD,EAAM,CAAC,CAAC,IAAI,KAC3BE,IAAI,WAAWF,EAAM,CAAC,CAAC,GAKvBG,IAJI,WAAWH,EAAM,CAAC,CAAC,IAIX,KAAK,KAAM,KACvBI,IAAIF,IAAI,KAAK,IAAIC,CAAI,GACrBE,IAAIH,IAAI,KAAK,IAAIC,CAAI,GAGrBG,IAAKL,IAAI,eAAeG,IAAI,eAAeC,GAC3CE,IAAKN,IAAI,eAAeG,IAAI,eAAeC,GAC3CG,IAAKP,IAAI,eAAeG,IAAI,cAAeC,GAE3CI,IAAKH,IAAKA,IAAKA,GACfI,IAAKH,IAAKA,IAAKA,GACfI,IAAKH,IAAKA,IAAKA;AAErB,MAAII,IAAI,eAAeH,IAAK,eAAeC,IAAK,eAAeC,GAC3DE,IAAI,gBAAgBJ,IAAK,eAAeC,IAAK,eAAeC,GAC5DG,IAAK,gBAAgBL,IAAK,eAAeC,IAAK,cAAeC;AAGjE,QAAMI,IAAS,CAACC,OACdA,IAAI,KAAK,IAAI,GAAG,KAAK,IAAI,GAAGA,CAAC,CAAC,GACvBA,KAAK,WAAY,QAAQA,IAAI,QAAQ,KAAK,IAAIA,GAAG,IAAE,GAAG,IAAI;AAGnE,SAAAJ,IAAI,KAAK,MAAMG,EAAOH,CAAC,IAAI,GAAG,GAC9BC,IAAI,KAAK,MAAME,EAAOF,CAAC,IAAI,GAAG,GAC9BC,IAAK,KAAK,MAAMC,EAAOD,CAAE,IAAI,GAAG,GAEzB,IAAIF,EAAE,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG,CAAC,GAAGC,EAAE,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG,CAAC,GAAGC,EAAG,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG,CAAC;AACjH;AAGA,SAASG,IAA2B;AAClC,SAAI,OAAO,WAAa,MAAoB,CAAA,IAE1B;AAAA,IAChB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,EAIC,IAAI,CAAApB,MAAW;AACd,UAAMqB,IAAQtB,EAAUC,CAAO;AAC/B,WAAIqB,EAAM,SAAS,OAAO,IACjBpB,EAAWoB,CAAK,IAElBA;AAAA,EACT,CAAC,EACA,OAAO,OAAO;AACnB;AAGA,SAASC,IAAyC;AAChD,QAAMC,IAASH,EAAA,GAGTI,IAAiBzB,EAAU,sBAAsB,GACjD0B,IAAYD,EAAe,SAAS,OAAO,IAC7CvB,EAAWuB,CAAc,IACxBA,KAAkB,WAGjBE,IAAa3B,EAAU,kBAAkB,GACzC4B,IAAYD,EAAW,SAAS,OAAO,IACzCzB,EAAWyB,CAAU,IACpBA,KAAc,WAIbE,IAAYH,EAAU,MAAM,6CAA6C,GACzEI,IAASD,KACV,SAASA,EAAU,CAAC,GAAG,EAAE,IAAI,SAASA,EAAU,CAAC,GAAG,EAAE,IAAI,SAASA,EAAU,CAAC,GAAG,EAAE,KAAK,IAAI,MAC7F;AAEJ,SAAO;AAAA,IACL,QAAQL,EAAO,SAAS,IAAIA,IAAS;AAAA,IACrC,OAAO;AAAA,MACL,MAAMM,IAAS,SAAS;AAAA,IAAA;AAAA,IAE1B,OAAO;AAAA,MACL,YAAY;AAAA,MACZ,WAAWJ;AAAA,IAAA;AAAA,IAEb,MAAM;AAAA,MACJ,aAAaE;AAAA,IAAA;AAAA,IAEf,OAAO;AAAA,MACL,QAAQ;AAAA,QACN,OAAO;AAAA,UACL,QAAQF;AAAA,QAAA;AAAA,MACV;AAAA,MAEF,YAAY;AAAA,QACV,OAAOE;AAAA,MAAA;AAAA,MAET,WAAW;AAAA,QACT,OAAOA;AAAA,MAAA;AAAA,IACT;AAAA,IAEF,OAAO;AAAA,MACL,QAAQ;AAAA,QACN,OAAO;AAAA,UACL,QAAQF;AAAA,QAAA;AAAA,MACV;AAAA,IACF;AAAA,IAEF,QAAQ;AAAA,MACN,QAAQ;AAAA,QACN,QAAQA;AAAA,MAAA;AAAA,IACV;AAAA,IAEF,SAAS;AAAA,MACP,OAAOI,IAAS,SAAS;AAAA,MACzB,OAAO;AAAA,QACL,UAAU;AAAA,MAAA;AAAA,MAEZ,GAAG;AAAA,QACD,MAAM;AAAA,MAAA;AAAA,MAER,QAAQ;AAAA,QACN,MAAM;AAAA,MAAA;AAAA,IACR;AAAA,IAEF,YAAY;AAAA,MACV,OAAO;AAAA,QACL,QAAQ,CAACJ,GAAWA,GAAWA,GAAWA,GAAWA,GAAWA,GAAWA,CAAS;AAAA,MAAA;AAAA,MAEtF,YAAY;AAAA,QACV,SAAS;AAAA,MAAA;AAAA,MAEX,YAAY;AAAA,QACV,SAAS;AAAA,MAAA;AAAA,IACX;AAAA,EACF;AAEJ;AAGA,SAASK,EAA6CC,GAAWC,GAAuB;AACtF,QAAMC,IAAS,EAAE,GAAGF,EAAA;AAEpB,aAAWG,KAAOF;AAChB,IAAIA,EAAOE,CAAG,MAAM,WAEhB,OAAOF,EAAOE,CAAG,KAAM,YACvBF,EAAOE,CAAG,MAAM,QAChB,CAAC,MAAM,QAAQF,EAAOE,CAAG,CAAC,KAC1B,OAAOH,EAAOG,CAAG,KAAM,YACvBH,EAAOG,CAAG,MAAM,QAChB,CAAC,MAAM,QAAQH,EAAOG,CAAG,CAAC,IAE1BD,EAAOC,CAAG,IAAIJ;AAAA,MACZC,EAAOG,CAAG;AAAA,MACVF,EAAOE,CAAG;AAAA,IAAA,IAGZD,EAAOC,CAAG,IAAIF,EAAOE,CAAG;AAK9B,SAAOD;AACT;AAEO,MAAME,IAA8B,CAAC;AAAA,EAC1C,MAAAC;AAAA,EACA,QAAAC;AAAA,EACA,OAAAC,IAAQ;AAAA,EACR,QAAAC,IAAS;AAAA,EACT,SAAAC,IAAU,CAAA;AAAA,EACV,QAAAC,IAAS;AAAA,EACT,WAAAC,IAAY;AACd,MAAM;AACJ,QAAMC,IAAWC,EAAuB,IAAI,GACtCC,IAAgBD,EAA0B,IAAI,GAC9C,GAAGE,CAAU,IAAIC,EAAS,EAAK,GAG/BC,IAAe,MAAmB;AACtC,UAAMC,IAA2B;AAAA,MAC/B,OAAO;AAAA,QACL,MAAAb;AAAA,QACA,OAAAE;AAAA,QACA,QAAAC;AAAA,MAAA;AAAA,MAEF,QAAAF;AAAA,IAAA;AAGF,QAAII,GAAQ;AACV,YAAMS,IAAa5B,EAAA;AACnB,aAAOQ,EAAUA,EAAUmB,GAAmDC,CAAgD,GAAGV,CAA6C;AAAA,IAChL;AAEA,WAAOV,EAAUmB,GAAmDT,CAA6C;AAAA,EACnH;AAGA,SAAAW,EAAU,MAAM;AACd,QAAI,CAACR,EAAS,QAAS;AAEvB,UAAMS,IAAOJ,EAAA;AACb,WAAAH,EAAc,UAAU,IAAIQ,EAAWV,EAAS,SAASS,CAAI,GAC7DP,EAAc,QAAQ,OAAA,GACtBC,EAAW,EAAI,GAER,MAAM;AACX,MAAID,EAAc,YAChBA,EAAc,QAAQ,QAAA,GACtBA,EAAc,UAAU;AAAA,IAE5B;AAAA,EACF,GAAG,CAAA,CAAE,GAGLM,EAAU,MAAM;AACd,QAAI,CAACN,EAAc,QAAS;AAE5B,UAAMO,IAAOJ,EAAA;AACb,IAAAH,EAAc,QAAQ,cAAcO,GAAM,IAAM,EAAI;AAAA,EACtD,GAAG,CAAChB,GAAMC,GAAQC,GAAOC,GAAQC,GAASC,CAAM,CAAC,GAGjDU,EAAU,MAAM;AACd,QAAI,CAACV,KAAU,OAAO,SAAW,IAAa;AAE9C,UAAMa,IAAW,IAAI,iBAAiB,MAAM;AAC1C,UAAIT,EAAc,SAAS;AACzB,cAAMO,IAAOJ,EAAA;AACb,QAAAH,EAAc,QAAQ,cAAcO,GAAM,IAAM,EAAI;AAAA,MACtD;AAAA,IACF,CAAC;AAED,WAAAE,EAAS,QAAQ,SAAS,iBAAiB;AAAA,MACzC,YAAY;AAAA,MACZ,iBAAiB,CAAC,cAAc,OAAO;AAAA,IAAA,CACxC,GAEM,MAAMA,EAAS,WAAA;AAAA,EACxB,GAAG,CAACb,CAAM,CAAC,GAEJ,gBAAAc,EAAC,OAAA,EAAI,KAAKZ,GAAU,WAAAD,EAAA,CAAsB;AACnD;"}
@@ -30,4 +30,4 @@ const p = ({
30
30
  export {
31
31
  p as Chat
32
32
  };
33
- //# sourceMappingURL=index12.js.map
33
+ //# sourceMappingURL=Chat.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index12.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\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;"}
@@ -5,9 +5,9 @@ function I({
5
5
  children: x,
6
6
  value: r,
7
7
  defaultValue: b,
8
- onChange: d,
8
+ onChange: h,
9
9
  disabled: a = !1,
10
- options: h,
10
+ options: d,
11
11
  direction: s = "vertical",
12
12
  className: u = ""
13
13
  }) {
@@ -15,13 +15,13 @@ function I({
15
15
  value: l,
16
16
  onChange: (i, e) => {
17
17
  const k = e ? [...l, i] : l.filter((f) => f !== i);
18
- r === void 0 && g(k), d?.(k);
18
+ r === void 0 && g(k), h?.(k);
19
19
  },
20
20
  disabled: a
21
21
  };
22
- if (h) {
22
+ if (d) {
23
23
  const i = s === "horizontal" ? "flex flex-row flex-wrap gap-4" : "flex flex-col";
24
- return /* @__PURE__ */ c(y.Provider, { value: t, children: /* @__PURE__ */ c("div", { className: `${i} ${u}`.trim(), children: h.map((e) => typeof e == "string" || typeof e == "number" ? /* @__PURE__ */ p("label", { className: "flex items-center cursor-pointer gap-2", children: [
24
+ return /* @__PURE__ */ c(y.Provider, { value: t, children: /* @__PURE__ */ c("div", { className: `${i} ${u}`.trim(), children: d.map((e) => typeof e == "string" || typeof e == "number" ? /* @__PURE__ */ p("label", { className: "flex items-center cursor-pointer gap-2", children: [
25
25
  /* @__PURE__ */ c(m, { value: e }),
26
26
  /* @__PURE__ */ c("span", { children: e })
27
27
  ] }, e) : /* @__PURE__ */ p("label", { className: "flex items-center cursor-pointer gap-2", children: [
@@ -36,9 +36,9 @@ const m = G(
36
36
  children: x,
37
37
  size: r,
38
38
  color: b,
39
- indeterminate: d = !1,
39
+ indeterminate: h = !1,
40
40
  swap: a,
41
- className: h = "",
41
+ className: d = "",
42
42
  value: s,
43
43
  checked: u,
44
44
  onChange: C,
@@ -68,16 +68,16 @@ const m = G(
68
68
  t && s !== void 0 && (typeof s == "string" || typeof s == "number") && t.onChange?.(s, n.target.checked), C?.(n);
69
69
  }, V = R.useCallback(
70
70
  (n) => {
71
- n && (n.indeterminate = d), typeof o == "function" ? o(n) : o && (o.current = n);
71
+ n && (n.indeterminate = h), typeof o == "function" ? o(n) : o && (o.current = n);
72
72
  },
73
- [d, o]
74
- ), N = d ? "indeterminate" : f ? "checked" : "unchecked";
73
+ [h, o]
74
+ ), N = h ? "indeterminate" : f ? "checked" : "unchecked";
75
75
  if (a) {
76
76
  const n = [
77
77
  "swap",
78
78
  a.effect === "rotate" && "swap-rotate",
79
79
  a.effect === "flip" && "swap-flip",
80
- h
80
+ d
81
81
  ].filter(Boolean).join(" ");
82
82
  return /* @__PURE__ */ p("label", { className: n, children: [
83
83
  /* @__PURE__ */ c(
@@ -110,17 +110,17 @@ const m = G(
110
110
  ...l
111
111
  }
112
112
  );
113
- return x ? /* @__PURE__ */ p("label", { className: `flex items-center cursor-pointer gap-2 ${h}`, children: [
113
+ return x ? /* @__PURE__ */ p("label", { className: `flex items-center cursor-pointer gap-2 ${d}`, children: [
114
114
  j,
115
115
  /* @__PURE__ */ c("span", { children: x })
116
116
  ] }) : j;
117
117
  }
118
118
  );
119
119
  m.displayName = "Checkbox";
120
- const _ = Object.assign(m, {
120
+ const z = Object.assign(m, {
121
121
  Group: I
122
122
  });
123
123
  export {
124
- _ as Checkbox
124
+ z as Checkbox
125
125
  };
126
- //# sourceMappingURL=index11.js.map
126
+ //# sourceMappingURL=Checkbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Checkbox.js","sources":["../../src/components/Checkbox.tsx"],"sourcesContent":["import React, { forwardRef, createContext, useContext } from 'react'\n\nexport interface CheckboxSwapConfig {\n /** Content shown when checked */\n on: React.ReactNode\n /** Content shown when unchecked */\n off: React.ReactNode\n /** Animation effect for the swap transition */\n effect?: 'rotate' | 'flip'\n}\n\nexport interface CheckboxProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size' | 'type'> {\n children?: React.ReactNode\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n color?: 'primary' | 'secondary' | 'accent' | 'neutral' | 'success' | 'warning' | 'info' | 'error'\n indeterminate?: boolean\n /** Swap mode: toggle between two visual states instead of showing a checkbox */\n swap?: CheckboxSwapConfig\n className?: string\n}\n\nexport interface CheckboxOptionType {\n label: React.ReactNode\n value: string | number\n disabled?: boolean\n}\n\nexport interface CheckboxGroupProps {\n children?: React.ReactNode\n value?: (string | number)[]\n defaultValue?: (string | number)[]\n onChange?: (values: (string | number)[]) => void\n disabled?: boolean\n options?: (string | number | CheckboxOptionType)[]\n /** Layout direction for options */\n direction?: 'horizontal' | 'vertical'\n className?: string\n}\n\ninterface CheckboxGroupContextValue {\n value?: (string | number)[]\n onChange?: (checkedValue: string | number, checked: boolean) => void\n disabled?: boolean\n}\n\nconst CheckboxGroupContext = createContext<CheckboxGroupContextValue | null>(null)\n\nfunction CheckboxGroup({\n children,\n value,\n defaultValue,\n onChange,\n disabled = false,\n options,\n direction = 'vertical',\n className = ''\n}: CheckboxGroupProps) {\n const [internalValue, setInternalValue] = React.useState<(string | number)[]>(defaultValue || [])\n const currentValue = value !== undefined ? value : internalValue\n\n const handleChange = (checkedValue: string | number, checked: boolean) => {\n const newValue = checked\n ? [...currentValue, checkedValue]\n : currentValue.filter((v) => v !== checkedValue)\n\n if (value === undefined) {\n setInternalValue(newValue)\n }\n onChange?.(newValue)\n }\n\n const contextValue: CheckboxGroupContextValue = {\n value: currentValue,\n onChange: handleChange,\n disabled,\n }\n\n // If options are provided, render checkboxes automatically\n if (options) {\n const directionClasses = direction === 'horizontal' ? 'flex flex-row flex-wrap gap-4' : 'flex flex-col'\n return (\n <CheckboxGroupContext.Provider value={contextValue}>\n <div className={`${directionClasses} ${className}`.trim()}>\n {options.map((option) => {\n if (typeof option === 'string' || typeof option === 'number') {\n return (\n <label key={option} className=\"flex items-center cursor-pointer gap-2\">\n <CheckboxRoot value={option} />\n <span>{option}</span>\n </label>\n )\n } else {\n return (\n <label key={option.value} className=\"flex items-center cursor-pointer gap-2\">\n <CheckboxRoot value={option.value} disabled={option.disabled} />\n <span>{option.label}</span>\n </label>\n )\n }\n })}\n </div>\n </CheckboxGroupContext.Provider>\n )\n }\n\n return (\n <CheckboxGroupContext.Provider value={contextValue}>\n <div className={className}>{children}</div>\n </CheckboxGroupContext.Provider>\n )\n}\n\nconst CheckboxRoot = forwardRef<HTMLInputElement, CheckboxProps>(\n (\n {\n children,\n size,\n color,\n indeterminate = false,\n swap,\n className = '',\n value,\n checked,\n onChange,\n disabled: disabledProp,\n ...props\n },\n ref\n ) => {\n const groupContext = useContext(CheckboxGroupContext)\n\n const sizeClasses = {\n xs: 'checkbox-xs',\n sm: 'checkbox-sm',\n md: 'checkbox-md',\n lg: 'checkbox-lg',\n xl: 'checkbox-xl',\n }\n\n const colorClasses = {\n primary: 'checkbox-primary',\n secondary: 'checkbox-secondary',\n accent: 'checkbox-accent',\n neutral: 'checkbox-neutral',\n success: 'checkbox-success',\n warning: 'checkbox-warning',\n info: 'checkbox-info',\n error: 'checkbox-error',\n }\n\n const checkboxClasses = [\n 'checkbox',\n size && sizeClasses[size],\n color && colorClasses[color],\n ]\n .filter(Boolean)\n .join(' ')\n\n // If in a group, use group's value to determine checked state\n const isChecked = groupContext && value !== undefined && (typeof value === 'string' || typeof value === 'number')\n ? groupContext.value?.includes(value) ?? false\n : checked\n\n const isDisabled = groupContext?.disabled || disabledProp\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (groupContext && value !== undefined && (typeof value === 'string' || typeof value === 'number')) {\n groupContext.onChange?.(value, e.target.checked)\n }\n onChange?.(e)\n }\n\n // Handle indeterminate state\n const checkboxRef = React.useCallback(\n (node: HTMLInputElement | null) => {\n if (node) {\n node.indeterminate = indeterminate\n }\n if (typeof ref === 'function') {\n ref(node)\n } else if (ref) {\n ref.current = node\n }\n },\n [indeterminate, ref]\n )\n\n const dataState = indeterminate ? 'indeterminate' : isChecked ? 'checked' : 'unchecked'\n\n // Swap mode: render as a swap toggle instead of checkbox\n if (swap) {\n const swapClasses = [\n 'swap',\n swap.effect === 'rotate' && 'swap-rotate',\n swap.effect === 'flip' && 'swap-flip',\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n return (\n <label className={swapClasses}>\n <input\n ref={ref}\n type=\"checkbox\"\n checked={isChecked}\n onChange={handleChange}\n disabled={isDisabled}\n data-state={dataState}\n {...props}\n />\n <div className=\"swap-on\">{swap.on}</div>\n <div className=\"swap-off\">{swap.off}</div>\n </label>\n )\n }\n\n const checkboxInput = (\n <input\n ref={checkboxRef}\n type=\"checkbox\"\n className={checkboxClasses}\n value={value}\n checked={isChecked}\n onChange={handleChange}\n disabled={isDisabled}\n data-state={dataState}\n {...props}\n />\n )\n\n // If children provided, wrap in label\n if (children) {\n return (\n <label className={`flex items-center cursor-pointer gap-2 ${className}`}>\n {checkboxInput}\n <span>{children}</span>\n </label>\n )\n }\n\n return checkboxInput\n }\n)\n\nCheckboxRoot.displayName = 'Checkbox'\n\nexport const Checkbox = Object.assign(CheckboxRoot, {\n Group: CheckboxGroup,\n})\n"],"names":["CheckboxGroupContext","createContext","CheckboxGroup","children","value","defaultValue","onChange","disabled","options","direction","className","internalValue","setInternalValue","React","currentValue","contextValue","checkedValue","checked","newValue","v","directionClasses","option","jsxs","jsx","CheckboxRoot","forwardRef","size","color","indeterminate","swap","disabledProp","props","ref","groupContext","useContext","sizeClasses","colorClasses","checkboxClasses","isChecked","isDisabled","handleChange","e","checkboxRef","node","dataState","swapClasses","checkboxInput","Checkbox"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { jsxs as l, jsx as r } from "react/jsx-runtime";
2
2
  import p from "react";
3
- import { CopyButton as a } from "./index10.js";
4
- const c = ({
3
+ import { CopyButton as c } from "./CopyButton.js";
4
+ const a = ({
5
5
  children: e,
6
6
  prefix: o = "$",
7
7
  highlight: t = !1,
@@ -41,7 +41,7 @@ const c = ({
41
41
  children: [
42
42
  e,
43
43
  s !== null && /* @__PURE__ */ r("div", { style: { position: "absolute", top: 8, right: 8 }, children: /* @__PURE__ */ r(
44
- a,
44
+ c,
45
45
  {
46
46
  text: s,
47
47
  size: "xs",
@@ -53,8 +53,8 @@ const c = ({
53
53
  }
54
54
  );
55
55
  };
56
- f.Line = c;
56
+ f.Line = a;
57
57
  export {
58
58
  f as Code
59
59
  };
60
- //# sourceMappingURL=index54.js.map
60
+ //# sourceMappingURL=Code.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index54.js","sources":["../src/components/Code.tsx"],"sourcesContent":["import React from 'react'\nimport { CopyButton } from './CopyButton'\n\nexport interface CodeLineProps extends React.HTMLAttributes<HTMLPreElement> {\n children: React.ReactNode\n prefix?: string\n highlight?: boolean\n}\n\nconst Line: React.FC<CodeLineProps> = ({\n children,\n prefix = '$',\n highlight = false,\n className = '',\n ...rest\n}) => {\n return (\n <pre\n data-prefix={prefix}\n className={`${highlight ? 'bg-warning text-warning-content' : ''} ${className}`}\n {...rest}\n >\n <code>{children}</code>\n </pre>\n )\n}\n\nexport interface CodeProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode\n /** Show copy button. Pass true to auto-extract text, or a string to specify custom copy text */\n copyable?: boolean | string\n}\n\nconst extractTextFromChildren = (children: React.ReactNode): string => {\n const lines: string[] = []\n React.Children.forEach(children, (child) => {\n if (React.isValidElement<{ children?: React.ReactNode }>(child) && child.props?.children) {\n const text = typeof child.props.children === 'string'\n ? child.props.children\n : ''\n if (text) lines.push(text)\n }\n })\n return lines.join('\\n')\n}\n\nexport const Code: React.FC<CodeProps> & { Line: typeof Line } = ({\n children,\n className = '',\n copyable,\n style,\n ...rest\n}) => {\n const copyText = typeof copyable === 'string'\n ? copyable\n : copyable\n ? extractTextFromChildren(children)\n : null\n\n return (\n <div\n className={`mockup-code ${className}`}\n style={{ position: 'relative', overflow: 'hidden', ...style }}\n {...rest}\n >\n {children}\n {copyText !== null && (\n <div style={{ position: 'absolute', top: 8, right: 8 }}>\n <CopyButton\n text={copyText}\n size=\"xs\"\n variant=\"ghost\"\n showTooltip\n />\n </div>\n )}\n </div>\n )\n}\n\nCode.Line = Line\n"],"names":["Line","children","prefix","highlight","className","rest","jsx","extractTextFromChildren","lines","React","child","text","Code","copyable","style","copyText","jsxs","CopyButton"],"mappings":";;;AASA,MAAMA,IAAgC,CAAC;AAAA,EACrC,UAAAC;AAAA,EACA,QAAAC,IAAS;AAAA,EACT,WAAAC,IAAY;AAAA,EACZ,WAAAC,IAAY;AAAA,EACZ,GAAGC;AACL,MAEI,gBAAAC;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,eAAaJ;AAAA,IACb,WAAW,GAAGC,IAAY,oCAAoC,EAAE,IAAIC,CAAS;AAAA,IAC5E,GAAGC;AAAA,IAEJ,UAAA,gBAAAC,EAAC,UAAM,UAAAL,EAAA,CAAS;AAAA,EAAA;AAAA,GAWhBM,IAA0B,CAACN,MAAsC;AACrE,QAAMO,IAAkB,CAAA;AACxBC,SAAAA,EAAM,SAAS,QAAQR,GAAU,CAACS,MAAU;AAC1C,QAAID,EAAM,eAA+CC,CAAK,KAAKA,EAAM,OAAO,UAAU;AACxF,YAAMC,IAAO,OAAOD,EAAM,MAAM,YAAa,WACzCA,EAAM,MAAM,WACZ;AACJ,MAAIC,KAAMH,EAAM,KAAKG,CAAI;AAAA,IAC3B;AAAA,EACF,CAAC,GACMH,EAAM,KAAK;AAAA,CAAI;AACxB,GAEaI,IAAoD,CAAC;AAAA,EAChE,UAAAX;AAAA,EACA,WAAAG,IAAY;AAAA,EACZ,UAAAS;AAAA,EACA,OAAAC;AAAA,EACA,GAAGT;AACL,MAAM;AACJ,QAAMU,IAAW,OAAOF,KAAa,WACjCA,IACAA,IACEN,EAAwBN,CAAQ,IAChC;AAEN,SACE,gBAAAe;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW,eAAeZ,CAAS;AAAA,MACnC,OAAO,EAAE,UAAU,YAAY,UAAU,UAAU,GAAGU,EAAA;AAAA,MACrD,GAAGT;AAAA,MAEH,UAAA;AAAA,QAAAJ;AAAA,QACAc,MAAa,QACZ,gBAAAT,EAAC,OAAA,EAAI,OAAO,EAAE,UAAU,YAAY,KAAK,GAAG,OAAO,EAAA,GACjD,UAAA,gBAAAA;AAAA,UAACW;AAAA,UAAA;AAAA,YACC,MAAMF;AAAA,YACN,MAAK;AAAA,YACL,SAAQ;AAAA,YACR,aAAW;AAAA,UAAA;AAAA,QAAA,EACb,CACF;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAIR;AAEAH,EAAK,OAAOZ;"}
1
+ {"version":3,"file":"Code.js","sources":["../../src/components/Code.tsx"],"sourcesContent":["import React from 'react'\nimport { CopyButton } from './CopyButton'\n\nexport interface CodeLineProps extends React.HTMLAttributes<HTMLPreElement> {\n children: React.ReactNode\n prefix?: string\n highlight?: boolean\n}\n\nconst Line: React.FC<CodeLineProps> = ({\n children,\n prefix = '$',\n highlight = false,\n className = '',\n ...rest\n}) => {\n return (\n <pre\n data-prefix={prefix}\n className={`${highlight ? 'bg-warning text-warning-content' : ''} ${className}`}\n {...rest}\n >\n <code>{children}</code>\n </pre>\n )\n}\n\nexport interface CodeProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode\n /** Show copy button. Pass true to auto-extract text, or a string to specify custom copy text */\n copyable?: boolean | string\n}\n\nconst extractTextFromChildren = (children: React.ReactNode): string => {\n const lines: string[] = []\n React.Children.forEach(children, (child) => {\n if (React.isValidElement<{ children?: React.ReactNode }>(child) && child.props?.children) {\n const text = typeof child.props.children === 'string'\n ? child.props.children\n : ''\n if (text) lines.push(text)\n }\n })\n return lines.join('\\n')\n}\n\nexport const Code: React.FC<CodeProps> & { Line: typeof Line } = ({\n children,\n className = '',\n copyable,\n style,\n ...rest\n}) => {\n const copyText = typeof copyable === 'string'\n ? copyable\n : copyable\n ? extractTextFromChildren(children)\n : null\n\n return (\n <div\n className={`mockup-code ${className}`}\n style={{ position: 'relative', overflow: 'hidden', ...style }}\n {...rest}\n >\n {children}\n {copyText !== null && (\n <div style={{ position: 'absolute', top: 8, right: 8 }}>\n <CopyButton\n text={copyText}\n size=\"xs\"\n variant=\"ghost\"\n showTooltip\n />\n </div>\n )}\n </div>\n )\n}\n\nCode.Line = Line\n"],"names":["Line","children","prefix","highlight","className","rest","jsx","extractTextFromChildren","lines","React","child","text","Code","copyable","style","copyText","jsxs","CopyButton"],"mappings":";;;AASA,MAAMA,IAAgC,CAAC;AAAA,EACrC,UAAAC;AAAA,EACA,QAAAC,IAAS;AAAA,EACT,WAAAC,IAAY;AAAA,EACZ,WAAAC,IAAY;AAAA,EACZ,GAAGC;AACL,MAEI,gBAAAC;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,eAAaJ;AAAA,IACb,WAAW,GAAGC,IAAY,oCAAoC,EAAE,IAAIC,CAAS;AAAA,IAC5E,GAAGC;AAAA,IAEJ,UAAA,gBAAAC,EAAC,UAAM,UAAAL,EAAA,CAAS;AAAA,EAAA;AAAA,GAWhBM,IAA0B,CAACN,MAAsC;AACrE,QAAMO,IAAkB,CAAA;AACxB,SAAAC,EAAM,SAAS,QAAQR,GAAU,CAACS,MAAU;AAC1C,QAAID,EAAM,eAA+CC,CAAK,KAAKA,EAAM,OAAO,UAAU;AACxF,YAAMC,IAAO,OAAOD,EAAM,MAAM,YAAa,WACzCA,EAAM,MAAM,WACZ;AACJ,MAAIC,KAAMH,EAAM,KAAKG,CAAI;AAAA,IAC3B;AAAA,EACF,CAAC,GACMH,EAAM,KAAK;AAAA,CAAI;AACxB,GAEaI,IAAoD,CAAC;AAAA,EAChE,UAAAX;AAAA,EACA,WAAAG,IAAY;AAAA,EACZ,UAAAS;AAAA,EACA,OAAAC;AAAA,EACA,GAAGT;AACL,MAAM;AACJ,QAAMU,IAAW,OAAOF,KAAa,WACjCA,IACAA,IACEN,EAAwBN,CAAQ,IAChC;AAEN,SACE,gBAAAe;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW,eAAeZ,CAAS;AAAA,MACnC,OAAO,EAAE,UAAU,YAAY,UAAU,UAAU,GAAGU,EAAA;AAAA,MACrD,GAAGT;AAAA,MAEH,UAAA;AAAA,QAAAJ;AAAA,QACAc,MAAa,QACZ,gBAAAT,EAAC,OAAA,EAAI,OAAO,EAAE,UAAU,YAAY,KAAK,GAAG,OAAO,EAAA,GACjD,UAAA,gBAAAA;AAAA,UAACW;AAAA,UAAA;AAAA,YACC,MAAMF;AAAA,YACN,MAAK;AAAA,YACL,SAAQ;AAAA,YACR,aAAW;AAAA,UAAA;AAAA,QAAA,EACb,CACF;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAIR;AAEAH,EAAK,OAAOZ;"}
@@ -112,4 +112,4 @@ P.displayName = "Collapse";
112
112
  export {
113
113
  P as Collapse
114
114
  };
115
- //# sourceMappingURL=index18.js.map
115
+ //# sourceMappingURL=Collapse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Collapse.js","sources":["../../src/components/Collapse.tsx"],"sourcesContent":["import React, { forwardRef, useState } from 'react'\n\nexport type CollapseSize = 'sm' | 'md' | 'lg'\nexport type CollapseIconPosition = 'start' | 'end'\nexport type CollapseCollapsible = 'header' | 'icon' | 'disabled'\n\nexport interface CollapseItemType {\n /** Unique key for the panel */\n key: string | number\n /** Panel header/label */\n label: React.ReactNode\n /** Panel content */\n children: React.ReactNode\n /** Extra element in the corner */\n extra?: React.ReactNode\n /** Whether to show the arrow icon */\n showArrow?: boolean\n /** Collapsible mode for this panel */\n collapsible?: CollapseCollapsible\n /** Custom class name for this panel */\n className?: string\n}\n\nexport interface CollapseProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {\n /** Collapse items */\n items?: CollapseItemType[]\n /** Currently active panel keys (controlled) */\n activeKey?: string | number | (string | number)[]\n /** Default active panel keys (uncontrolled) */\n defaultActiveKey?: string | number | (string | number)[]\n /** Accordion mode - only one panel open at a time */\n accordion?: boolean\n /** Show border around panels */\n bordered?: boolean\n /** Ghost mode - transparent background */\n ghost?: boolean\n /** Size variant */\n size?: CollapseSize\n /** Icon type */\n icon?: 'arrow' | 'plus' | 'none'\n /** Icon placement */\n expandIconPlacement?: CollapseIconPosition\n /** Callback when panels change */\n onChange?: (activeKey: (string | number)[]) => void\n /** Test ID */\n 'data-testid'?: string\n}\n\nconst sizeClasses: Record<CollapseSize, string> = {\n sm: 'text-sm',\n md: 'text-base',\n lg: 'text-lg',\n}\n\nconst CollapsePanel = forwardRef<\n HTMLDivElement,\n {\n item: CollapseItemType\n isOpen: boolean\n onToggle: () => void\n icon: 'arrow' | 'plus' | 'none'\n expandIconPlacement: CollapseIconPosition\n bordered: boolean\n ghost: boolean\n size: CollapseSize\n testId?: string\n }\n>(({ item, isOpen, onToggle, icon, expandIconPlacement, bordered, ghost, size, testId }, ref) => {\n const isDisabled = item.collapsible === 'disabled'\n\n const iconClasses = {\n arrow: 'collapse-arrow',\n plus: 'collapse-plus',\n none: '',\n }\n\n const panelClasses = [\n 'collapse',\n iconClasses[icon],\n isOpen ? 'collapse-open' : 'collapse-close',\n !ghost && 'bg-base-200',\n ghost && 'bg-transparent',\n bordered && 'border border-base-300',\n expandIconPlacement === 'end' && icon !== 'none' && 'collapse-arrow-end',\n sizeClasses[size],\n isDisabled && 'opacity-50 cursor-not-allowed',\n item.className,\n ]\n .filter(Boolean)\n .join(' ')\n\n const handleClick = () => {\n if (!isDisabled) {\n onToggle()\n }\n }\n\n return (\n <div\n ref={ref}\n className={panelClasses}\n data-testid={testId ? `${testId}-panel-${item.key}` : undefined}\n data-state={isOpen ? 'open' : 'closed'}\n >\n <div\n className=\"collapse-title font-medium flex items-center justify-between cursor-pointer\"\n onClick={handleClick}\n role=\"button\"\n tabIndex={isDisabled ? -1 : 0}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n handleClick()\n }\n }}\n aria-expanded={isOpen}\n aria-disabled={isDisabled}\n >\n <span>{item.label}</span>\n {item.extra && <span className=\"ml-auto mr-6\">{item.extra}</span>}\n </div>\n <div className=\"collapse-content\">\n {item.children}\n </div>\n </div>\n )\n})\n\nCollapsePanel.displayName = 'CollapsePanel'\n\nexport const Collapse = forwardRef<HTMLDivElement, CollapseProps>(\n (\n {\n items = [],\n activeKey,\n defaultActiveKey,\n accordion = false,\n bordered = true,\n ghost = false,\n size = 'md',\n icon = 'arrow',\n expandIconPlacement = 'start',\n onChange,\n className = '',\n 'data-testid': testId = 'collapse',\n ...rest\n },\n ref\n ) => {\n // Normalize keys to array\n const normalizeKeys = (keys: string | number | (string | number)[] | undefined): (string | number)[] => {\n if (keys === undefined) return []\n if (Array.isArray(keys)) return keys\n return [keys]\n }\n\n const [internalActiveKeys, setInternalActiveKeys] = useState<(string | number)[]>(\n () => normalizeKeys(defaultActiveKey)\n )\n\n const isControlled = activeKey !== undefined\n const currentActiveKeys = isControlled ? normalizeKeys(activeKey) : internalActiveKeys\n\n const handleToggle = (key: string | number) => {\n let newActiveKeys: (string | number)[]\n\n if (accordion) {\n // In accordion mode, only one can be open\n newActiveKeys = currentActiveKeys.includes(key) ? [] : [key]\n } else {\n // Toggle the key\n if (currentActiveKeys.includes(key)) {\n newActiveKeys = currentActiveKeys.filter((k) => k !== key)\n } else {\n newActiveKeys = [...currentActiveKeys, key]\n }\n }\n\n if (!isControlled) {\n setInternalActiveKeys(newActiveKeys)\n }\n onChange?.(newActiveKeys)\n }\n\n const containerClasses = [\n 'flex flex-col',\n bordered && !ghost && 'divide-y divide-base-300',\n bordered && 'border border-base-300 rounded-lg overflow-hidden',\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n return (\n <div\n ref={ref}\n className={containerClasses}\n data-testid={testId}\n {...rest}\n >\n {items.map((item) => (\n <CollapsePanel\n key={item.key}\n item={item}\n isOpen={currentActiveKeys.includes(item.key)}\n onToggle={() => handleToggle(item.key)}\n icon={item.showArrow === false ? 'none' : icon}\n expandIconPlacement={expandIconPlacement}\n bordered={false}\n ghost={ghost}\n size={size}\n testId={testId}\n />\n ))}\n </div>\n )\n }\n)\n\nCollapse.displayName = 'Collapse'\n"],"names":["sizeClasses","CollapsePanel","forwardRef","item","isOpen","onToggle","icon","expandIconPlacement","bordered","ghost","size","testId","ref","isDisabled","panelClasses","handleClick","jsxs","e","jsx","Collapse","items","activeKey","defaultActiveKey","accordion","onChange","className","rest","normalizeKeys","keys","internalActiveKeys","setInternalActiveKeys","useState","isControlled","currentActiveKeys","handleToggle","key","newActiveKeys","k","containerClasses"],"mappings":"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"}
@@ -1,10 +1,16 @@
1
1
  import { default as React } from 'react';
2
- export interface ColorPickerProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {
2
+ export interface ColorPickerProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange' | 'defaultValue'> {
3
3
  value?: string;
4
+ defaultValue?: string;
4
5
  onChange?: (color: string) => void;
5
6
  mode?: 'swatches' | 'picker' | 'both';
6
7
  presets?: string[];
7
8
  size?: 'xs' | 'sm' | 'md' | 'lg';
8
9
  disabled?: boolean;
10
+ showText?: boolean;
11
+ allowClear?: boolean;
12
+ open?: boolean;
13
+ onOpenChange?: (open: boolean) => void;
14
+ 'data-testid'?: string;
9
15
  }
10
- export declare function ColorPicker({ value, onChange, mode, presets, size, disabled, className, ...rest }: ColorPickerProps): import("react/jsx-runtime").JSX.Element;
16
+ export declare const ColorPicker: React.ForwardRefExoticComponent<ColorPickerProps & React.RefAttributes<HTMLDivElement>>;