@aster-ui/prefixed 0.12.50

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 (388) hide show
  1. package/LICENSE +15 -0
  2. package/README.md +40 -0
  3. package/dist/chart.d.ts +2 -0
  4. package/dist/chart.js +5 -0
  5. package/dist/chart.js.map +1 -0
  6. package/dist/components/Affix.d.ts +14 -0
  7. package/dist/components/Affix.js +57 -0
  8. package/dist/components/Affix.js.map +1 -0
  9. package/dist/components/Alert.d.ts +10 -0
  10. package/dist/components/Alert.js +31 -0
  11. package/dist/components/Alert.js.map +1 -0
  12. package/dist/components/Anchor.d.ts +55 -0
  13. package/dist/components/Anchor.js +116 -0
  14. package/dist/components/Anchor.js.map +1 -0
  15. package/dist/components/Autocomplete.d.ts +38 -0
  16. package/dist/components/Autocomplete.js +186 -0
  17. package/dist/components/Autocomplete.js.map +1 -0
  18. package/dist/components/Avatar.d.ts +28 -0
  19. package/dist/components/Avatar.js +65 -0
  20. package/dist/components/Avatar.js.map +1 -0
  21. package/dist/components/Badge.d.ts +39 -0
  22. package/dist/components/Badge.js +220 -0
  23. package/dist/components/Badge.js.map +1 -0
  24. package/dist/components/Breadcrumb.d.ts +32 -0
  25. package/dist/components/Breadcrumb.js +39 -0
  26. package/dist/components/Breadcrumb.js.map +1 -0
  27. package/dist/components/Browser.d.ts +7 -0
  28. package/dist/components/Browser.js +15 -0
  29. package/dist/components/Browser.js.map +1 -0
  30. package/dist/components/Button.d.ts +38 -0
  31. package/dist/components/Button.js +114 -0
  32. package/dist/components/Button.js.map +1 -0
  33. package/dist/components/Card.d.ts +57 -0
  34. package/dist/components/Card.js +202 -0
  35. package/dist/components/Card.js.map +1 -0
  36. package/dist/components/Carousel.d.ts +55 -0
  37. package/dist/components/Carousel.js +205 -0
  38. package/dist/components/Carousel.js.map +1 -0
  39. package/dist/components/Cascader.d.ts +71 -0
  40. package/dist/components/Cascader.js +416 -0
  41. package/dist/components/Cascader.js.map +1 -0
  42. package/dist/components/Chart.d.ts +19 -0
  43. package/dist/components/Chart.js +153 -0
  44. package/dist/components/Chart.js.map +1 -0
  45. package/dist/components/Chat.d.ts +11 -0
  46. package/dist/components/Chat.js +33 -0
  47. package/dist/components/Chat.js.map +1 -0
  48. package/dist/components/Checkbox.d.ts +42 -0
  49. package/dist/components/Checkbox.js +156 -0
  50. package/dist/components/Checkbox.js.map +1 -0
  51. package/dist/components/Code.d.ts +16 -0
  52. package/dist/components/Code.js +60 -0
  53. package/dist/components/Code.js.map +1 -0
  54. package/dist/components/Collapse.d.ts +45 -0
  55. package/dist/components/Collapse.js +115 -0
  56. package/dist/components/Collapse.js.map +1 -0
  57. package/dist/components/ColorPicker.d.ts +16 -0
  58. package/dist/components/ColorPicker.js +368 -0
  59. package/dist/components/ColorPicker.js.map +1 -0
  60. package/dist/components/Command.d.ts +65 -0
  61. package/dist/components/Command.js +422 -0
  62. package/dist/components/Command.js.map +1 -0
  63. package/dist/components/ConfigProvider.d.ts +59 -0
  64. package/dist/components/ConfigProvider.js +46 -0
  65. package/dist/components/ConfigProvider.js.map +1 -0
  66. package/dist/components/Container.d.ts +12 -0
  67. package/dist/components/Container.js +28 -0
  68. package/dist/components/Container.js.map +1 -0
  69. package/dist/components/ContextMenu.d.ts +59 -0
  70. package/dist/components/ContextMenu.js +206 -0
  71. package/dist/components/ContextMenu.js.map +1 -0
  72. package/dist/components/CopyButton.d.ts +37 -0
  73. package/dist/components/CopyButton.js +123 -0
  74. package/dist/components/CopyButton.js.map +1 -0
  75. package/dist/components/Countdown.d.ts +27 -0
  76. package/dist/components/Countdown.js +118 -0
  77. package/dist/components/Countdown.js.map +1 -0
  78. package/dist/components/DatePicker.d.ts +11 -0
  79. package/dist/components/DatePicker.js +188 -0
  80. package/dist/components/DatePicker.js.map +1 -0
  81. package/dist/components/Descriptions.d.ts +84 -0
  82. package/dist/components/Descriptions.js +234 -0
  83. package/dist/components/Descriptions.js.map +1 -0
  84. package/dist/components/Diff.d.ts +12 -0
  85. package/dist/components/Diff.js +22 -0
  86. package/dist/components/Diff.js.map +1 -0
  87. package/dist/components/Divider.d.ts +8 -0
  88. package/dist/components/Divider.js +36 -0
  89. package/dist/components/Divider.js.map +1 -0
  90. package/dist/components/Dock.d.ts +38 -0
  91. package/dist/components/Dock.js +47 -0
  92. package/dist/components/Dock.js.map +1 -0
  93. package/dist/components/Drawer.d.ts +81 -0
  94. package/dist/components/Drawer.js +246 -0
  95. package/dist/components/Drawer.js.map +1 -0
  96. package/dist/components/Dropdown.d.ts +104 -0
  97. package/dist/components/Dropdown.js +407 -0
  98. package/dist/components/Dropdown.js.map +1 -0
  99. package/dist/components/Empty.d.ts +17 -0
  100. package/dist/components/Empty.js +145 -0
  101. package/dist/components/Empty.js.map +1 -0
  102. package/dist/components/Fieldset.d.ts +21 -0
  103. package/dist/components/Fieldset.js +21 -0
  104. package/dist/components/Fieldset.js.map +1 -0
  105. package/dist/components/FileInput.d.ts +9 -0
  106. package/dist/components/FileInput.js +38 -0
  107. package/dist/components/FileInput.js.map +1 -0
  108. package/dist/components/Filter.d.ts +27 -0
  109. package/dist/components/Filter.js +57 -0
  110. package/dist/components/Filter.js.map +1 -0
  111. package/dist/components/Flex.d.ts +14 -0
  112. package/dist/components/Flex.js +66 -0
  113. package/dist/components/Flex.js.map +1 -0
  114. package/dist/components/FloatButton.d.ts +73 -0
  115. package/dist/components/FloatButton.js +187 -0
  116. package/dist/components/FloatButton.js.map +1 -0
  117. package/dist/components/Footer.d.ts +16 -0
  118. package/dist/components/Footer.js +22 -0
  119. package/dist/components/Footer.js.map +1 -0
  120. package/dist/components/Form.d.ts +107 -0
  121. package/dist/components/Form.js +277 -0
  122. package/dist/components/Form.js.map +1 -0
  123. package/dist/components/Grid.d.ts +26 -0
  124. package/dist/components/Grid.js +1090 -0
  125. package/dist/components/Grid.js.map +1 -0
  126. package/dist/components/Hero.d.ts +11 -0
  127. package/dist/components/Hero.js +21 -0
  128. package/dist/components/Hero.js.map +1 -0
  129. package/dist/components/HoverGallery.d.ts +10 -0
  130. package/dist/components/HoverGallery.js +20 -0
  131. package/dist/components/HoverGallery.js.map +1 -0
  132. package/dist/components/Image.d.ts +26 -0
  133. package/dist/components/Image.js +172 -0
  134. package/dist/components/Image.js.map +1 -0
  135. package/dist/components/Input.d.ts +36 -0
  136. package/dist/components/Input.js +263 -0
  137. package/dist/components/Input.js.map +1 -0
  138. package/dist/components/InputNumber.d.ts +19 -0
  139. package/dist/components/InputNumber.js +158 -0
  140. package/dist/components/InputNumber.js.map +1 -0
  141. package/dist/components/Join.d.ts +6 -0
  142. package/dist/components/Join.js +19 -0
  143. package/dist/components/Join.js.map +1 -0
  144. package/dist/components/Kbd.d.ts +9 -0
  145. package/dist/components/Kbd.js +20 -0
  146. package/dist/components/Kbd.js.map +1 -0
  147. package/dist/components/Layout.d.ts +67 -0
  148. package/dist/components/Layout.js +188 -0
  149. package/dist/components/Layout.js.map +1 -0
  150. package/dist/components/List.d.ts +79 -0
  151. package/dist/components/List.js +128 -0
  152. package/dist/components/List.js.map +1 -0
  153. package/dist/components/Loading.d.ts +9 -0
  154. package/dist/components/Loading.js +40 -0
  155. package/dist/components/Loading.js.map +1 -0
  156. package/dist/components/Mask.d.ts +14 -0
  157. package/dist/components/Mask.js +37 -0
  158. package/dist/components/Mask.js.map +1 -0
  159. package/dist/components/Masonry.d.ts +15 -0
  160. package/dist/components/Masonry.js +84 -0
  161. package/dist/components/Masonry.js.map +1 -0
  162. package/dist/components/Mention.d.ts +30 -0
  163. package/dist/components/Mention.js +179 -0
  164. package/dist/components/Mention.js.map +1 -0
  165. package/dist/components/Menu.d.ts +72 -0
  166. package/dist/components/Menu.js +163 -0
  167. package/dist/components/Menu.js.map +1 -0
  168. package/dist/components/Message.d.ts +20 -0
  169. package/dist/components/Message.js +57 -0
  170. package/dist/components/Message.js.map +1 -0
  171. package/dist/components/Modal.d.ts +57 -0
  172. package/dist/components/Modal.js +338 -0
  173. package/dist/components/Modal.js.map +1 -0
  174. package/dist/components/MonthCalendar.d.ts +31 -0
  175. package/dist/components/MonthCalendar.js +205 -0
  176. package/dist/components/MonthCalendar.js.map +1 -0
  177. package/dist/components/Navbar.d.ts +22 -0
  178. package/dist/components/Navbar.js +50 -0
  179. package/dist/components/Navbar.js.map +1 -0
  180. package/dist/components/Notification.d.ts +50 -0
  181. package/dist/components/Notification.js +150 -0
  182. package/dist/components/Notification.js.map +1 -0
  183. package/dist/components/OTPInput.d.ts +32 -0
  184. package/dist/components/OTPInput.js +114 -0
  185. package/dist/components/OTPInput.js.map +1 -0
  186. package/dist/components/Pagination.d.ts +18 -0
  187. package/dist/components/Pagination.js +175 -0
  188. package/dist/components/Pagination.js.map +1 -0
  189. package/dist/components/Phone.d.ts +8 -0
  190. package/dist/components/Phone.js +17 -0
  191. package/dist/components/Phone.js.map +1 -0
  192. package/dist/components/Popconfirm.d.ts +17 -0
  193. package/dist/components/Popconfirm.js +125 -0
  194. package/dist/components/Popconfirm.js.map +1 -0
  195. package/dist/components/Popover.d.ts +15 -0
  196. package/dist/components/Popover.js +89 -0
  197. package/dist/components/Popover.js.map +1 -0
  198. package/dist/components/Progress.d.ts +5 -0
  199. package/dist/components/Progress.js +23 -0
  200. package/dist/components/Progress.js.map +1 -0
  201. package/dist/components/QRCode.d.ts +19 -0
  202. package/dist/components/QRCode.js +75 -0
  203. package/dist/components/QRCode.js.map +1 -0
  204. package/dist/components/RadialProgress.d.ts +10 -0
  205. package/dist/components/RadialProgress.js +48 -0
  206. package/dist/components/RadialProgress.js.map +1 -0
  207. package/dist/components/Radio.d.ts +26 -0
  208. package/dist/components/Radio.js +61 -0
  209. package/dist/components/Radio.js.map +1 -0
  210. package/dist/components/Range.d.ts +16 -0
  211. package/dist/components/Range.js +57 -0
  212. package/dist/components/Range.js.map +1 -0
  213. package/dist/components/Rating.d.ts +30 -0
  214. package/dist/components/Rating.js +127 -0
  215. package/dist/components/Rating.js.map +1 -0
  216. package/dist/components/Responsive.d.ts +18 -0
  217. package/dist/components/Responsive.js +17 -0
  218. package/dist/components/Responsive.js.map +1 -0
  219. package/dist/components/ResponsiveDrawer.d.ts +34 -0
  220. package/dist/components/ResponsiveDrawer.js +75 -0
  221. package/dist/components/ResponsiveDrawer.js.map +1 -0
  222. package/dist/components/Result.d.ts +12 -0
  223. package/dist/components/Result.js +110 -0
  224. package/dist/components/Result.js.map +1 -0
  225. package/dist/components/RichTextEditor.d.ts +32 -0
  226. package/dist/components/RichTextEditor.js +335 -0
  227. package/dist/components/RichTextEditor.js.map +1 -0
  228. package/dist/components/Segmented.d.ts +37 -0
  229. package/dist/components/Segmented.js +73 -0
  230. package/dist/components/Segmented.js.map +1 -0
  231. package/dist/components/Select.d.ts +18 -0
  232. package/dist/components/Select.js +78 -0
  233. package/dist/components/Select.js.map +1 -0
  234. package/dist/components/Skeleton.d.ts +9 -0
  235. package/dist/components/Skeleton.js +24 -0
  236. package/dist/components/Skeleton.js.map +1 -0
  237. package/dist/components/Space.d.ts +11 -0
  238. package/dist/components/Space.js +61 -0
  239. package/dist/components/Space.js.map +1 -0
  240. package/dist/components/Splitter.d.ts +29 -0
  241. package/dist/components/Splitter.js +257 -0
  242. package/dist/components/Splitter.js.map +1 -0
  243. package/dist/components/Stat.d.ts +18 -0
  244. package/dist/components/Stat.js +26 -0
  245. package/dist/components/Stat.js.map +1 -0
  246. package/dist/components/Status.d.ts +18 -0
  247. package/dist/components/Status.js +34 -0
  248. package/dist/components/Status.js.map +1 -0
  249. package/dist/components/Steps.d.ts +52 -0
  250. package/dist/components/Steps.js +97 -0
  251. package/dist/components/Steps.js.map +1 -0
  252. package/dist/components/Table.d.ts +105 -0
  253. package/dist/components/Table.js +637 -0
  254. package/dist/components/Table.js.map +1 -0
  255. package/dist/components/Tabs.d.ts +45 -0
  256. package/dist/components/Tabs.js +86 -0
  257. package/dist/components/Tabs.js.map +1 -0
  258. package/dist/components/Tag.d.ts +34 -0
  259. package/dist/components/Tag.js +210 -0
  260. package/dist/components/Tag.js.map +1 -0
  261. package/dist/components/TextRotate.d.ts +13 -0
  262. package/dist/components/TextRotate.js +26 -0
  263. package/dist/components/TextRotate.js.map +1 -0
  264. package/dist/components/Textarea.d.ts +9 -0
  265. package/dist/components/Textarea.js +44 -0
  266. package/dist/components/Textarea.js.map +1 -0
  267. package/dist/components/ThemeController.d.ts +28 -0
  268. package/dist/components/ThemeController.js +162 -0
  269. package/dist/components/ThemeController.js.map +1 -0
  270. package/dist/components/TimePicker.d.ts +20 -0
  271. package/dist/components/TimePicker.js +304 -0
  272. package/dist/components/TimePicker.js.map +1 -0
  273. package/dist/components/Timeline.d.ts +79 -0
  274. package/dist/components/Timeline.js +151 -0
  275. package/dist/components/Timeline.js.map +1 -0
  276. package/dist/components/Toggle.d.ts +7 -0
  277. package/dist/components/Toggle.js +39 -0
  278. package/dist/components/Toggle.js.map +1 -0
  279. package/dist/components/Tooltip.d.ts +9 -0
  280. package/dist/components/Tooltip.js +37 -0
  281. package/dist/components/Tooltip.js.map +1 -0
  282. package/dist/components/Tour.d.ts +123 -0
  283. package/dist/components/Tour.js +400 -0
  284. package/dist/components/Tour.js.map +1 -0
  285. package/dist/components/Transfer.d.ts +22 -0
  286. package/dist/components/Transfer.js +214 -0
  287. package/dist/components/Transfer.js.map +1 -0
  288. package/dist/components/Tree.d.ts +118 -0
  289. package/dist/components/Tree.js +444 -0
  290. package/dist/components/Tree.js.map +1 -0
  291. package/dist/components/TreeSelect.d.ts +84 -0
  292. package/dist/components/TreeSelect.js +755 -0
  293. package/dist/components/TreeSelect.js.map +1 -0
  294. package/dist/components/Typography.d.ts +53 -0
  295. package/dist/components/Typography.js +182 -0
  296. package/dist/components/Typography.js.map +1 -0
  297. package/dist/components/Upload.d.ts +38 -0
  298. package/dist/components/Upload.js +261 -0
  299. package/dist/components/Upload.js.map +1 -0
  300. package/dist/components/VirtualList.d.ts +29 -0
  301. package/dist/components/VirtualList.js +69 -0
  302. package/dist/components/VirtualList.js.map +1 -0
  303. package/dist/components/Watermark.d.ts +40 -0
  304. package/dist/components/Watermark.js +129 -0
  305. package/dist/components/Watermark.js.map +1 -0
  306. package/dist/components/WeekCalendar.d.ts +35 -0
  307. package/dist/components/WeekCalendar.js +204 -0
  308. package/dist/components/WeekCalendar.js.map +1 -0
  309. package/dist/components/Window.d.ts +7 -0
  310. package/dist/components/Window.js +10 -0
  311. package/dist/components/Window.js.map +1 -0
  312. package/dist/contexts/IconSizeContext.d.ts +2 -0
  313. package/dist/contexts/IconSizeContext.js +6 -0
  314. package/dist/contexts/IconSizeContext.js.map +1 -0
  315. package/dist/editor.d.ts +1 -0
  316. package/dist/editor.js +5 -0
  317. package/dist/editor.js.map +1 -0
  318. package/dist/hooks/useBreakpoint.d.ts +10 -0
  319. package/dist/hooks/useBreakpoint.js +36 -0
  320. package/dist/hooks/useBreakpoint.js.map +1 -0
  321. package/dist/hooks/useClickOutside.d.ts +17 -0
  322. package/dist/hooks/useClickOutside.js +18 -0
  323. package/dist/hooks/useClickOutside.js.map +1 -0
  324. package/dist/hooks/useClipboard.d.ts +20 -0
  325. package/dist/hooks/useClipboard.js +17 -0
  326. package/dist/hooks/useClipboard.js.map +1 -0
  327. package/dist/hooks/useDebounce.d.ts +18 -0
  328. package/dist/hooks/useDebounce.js +16 -0
  329. package/dist/hooks/useDebounce.js.map +1 -0
  330. package/dist/hooks/useDisclosure.d.ts +20 -0
  331. package/dist/hooks/useDisclosure.js +9 -0
  332. package/dist/hooks/useDisclosure.js.map +1 -0
  333. package/dist/hooks/useHover.d.ts +18 -0
  334. package/dist/hooks/useHover.js +16 -0
  335. package/dist/hooks/useHover.js.map +1 -0
  336. package/dist/hooks/useKeyPress.d.ts +40 -0
  337. package/dist/hooks/useKeyPress.js +34 -0
  338. package/dist/hooks/useKeyPress.js.map +1 -0
  339. package/dist/hooks/useLocalStorage.d.ts +12 -0
  340. package/dist/hooks/useLocalStorage.js +49 -0
  341. package/dist/hooks/useLocalStorage.js.map +1 -0
  342. package/dist/hooks/usePrevious.d.ts +15 -0
  343. package/dist/hooks/usePrevious.js +11 -0
  344. package/dist/hooks/usePrevious.js.map +1 -0
  345. package/dist/hooks/useWindowSize.d.ts +21 -0
  346. package/dist/hooks/useWindowSize.js +21 -0
  347. package/dist/hooks/useWindowSize.js.map +1 -0
  348. package/dist/index.d.ts +216 -0
  349. package/dist/index.js +256 -0
  350. package/dist/index.js.map +1 -0
  351. package/dist/locale/de-DE.d.ts +3 -0
  352. package/dist/locale/de-DE.js +100 -0
  353. package/dist/locale/de-DE.js.map +1 -0
  354. package/dist/locale/en-CA.d.ts +3 -0
  355. package/dist/locale/en-CA.js +11 -0
  356. package/dist/locale/en-CA.js.map +1 -0
  357. package/dist/locale/en-GB.d.ts +3 -0
  358. package/dist/locale/en-GB.js +11 -0
  359. package/dist/locale/en-GB.js.map +1 -0
  360. package/dist/locale/en-US.d.ts +3 -0
  361. package/dist/locale/en-US.js +100 -0
  362. package/dist/locale/en-US.js.map +1 -0
  363. package/dist/locale/es-ES.d.ts +3 -0
  364. package/dist/locale/es-ES.js +100 -0
  365. package/dist/locale/es-ES.js.map +1 -0
  366. package/dist/locale/fr-FR.d.ts +3 -0
  367. package/dist/locale/fr-FR.js +100 -0
  368. package/dist/locale/fr-FR.js.map +1 -0
  369. package/dist/locale/index.d.ts +107 -0
  370. package/dist/locale/ja-JP.d.ts +3 -0
  371. package/dist/locale/ja-JP.js +100 -0
  372. package/dist/locale/ja-JP.js.map +1 -0
  373. package/dist/locale/ko-KR.d.ts +3 -0
  374. package/dist/locale/ko-KR.js +100 -0
  375. package/dist/locale/ko-KR.js.map +1 -0
  376. package/dist/locale/pt-BR.d.ts +3 -0
  377. package/dist/locale/pt-BR.js +100 -0
  378. package/dist/locale/pt-BR.js.map +1 -0
  379. package/dist/locale/zh-CN.d.ts +3 -0
  380. package/dist/locale/zh-CN.js +100 -0
  381. package/dist/locale/zh-CN.js.map +1 -0
  382. package/dist/qrcode.d.ts +2 -0
  383. package/dist/qrcode.js +5 -0
  384. package/dist/qrcode.js.map +1 -0
  385. package/dist/virtuallist.d.ts +2 -0
  386. package/dist/virtuallist.js +5 -0
  387. package/dist/virtuallist.js.map +1 -0
  388. package/package.json +130 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TimePicker.js","sources":["../../src/components/TimePicker.tsx"],"sourcesContent":["import React, { useState, useRef, useEffect, forwardRef, useCallback, useId } from 'react'\nimport { Input } from './Input'\nimport { useConfig } from './ConfigProvider'\n\n// DaisyUI classes\nconst dBtn = 'd-btn'\nconst dBtnGhost = 'd-btn-ghost'\nconst dBtnPrimary = 'd-btn-primary'\nconst dBtnXs = 'd-btn-xs'\nconst dBtnSm = 'd-btn-sm'\nconst dBtnCircle = 'd-btn-circle'\nconst dInputError = 'd-input-error'\nconst dInputWarning = 'd-input-warning'\n\nexport interface TimePickerProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange' | 'defaultValue'> {\n value?: Date | null\n defaultValue?: Date | null\n onChange?: (date: Date | null) => void\n format?: '12' | '24'\n placeholder?: string\n disabled?: boolean\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n showSeconds?: boolean\n allowClear?: boolean\n open?: boolean\n onOpenChange?: (open: boolean) => void\n hourStep?: number\n minuteStep?: number\n secondStep?: number\n status?: 'error' | 'warning'\n 'data-testid'?: string\n}\n\nfunction formatTime(date: Date | null, format: '12' | '24' = '24', showSeconds: boolean = false): string {\n if (!date) return ''\n\n let hours = date.getHours()\n const minutes = String(date.getMinutes()).padStart(2, '0')\n const seconds = String(date.getSeconds()).padStart(2, '0')\n\n if (format === '12') {\n const period = hours >= 12 ? 'PM' : 'AM'\n hours = hours % 12 || 12\n const timeStr = showSeconds\n ? `${hours}:${minutes}:${seconds} ${period}`\n : `${hours}:${minutes} ${period}`\n return timeStr\n }\n\n const hoursStr = String(hours).padStart(2, '0')\n return showSeconds ? `${hoursStr}:${minutes}:${seconds}` : `${hoursStr}:${minutes}`\n}\n\nexport const TimePicker = forwardRef<HTMLDivElement, TimePickerProps>(({\n value,\n defaultValue,\n onChange,\n format = '24',\n placeholder = 'Select time',\n disabled = false,\n className,\n size,\n showSeconds = false,\n allowClear = true,\n open: controlledOpen,\n onOpenChange,\n hourStep = 1,\n minuteStep = 1,\n secondStep = 1,\n status,\n 'data-testid': testId,\n ...rest\n}, ref) => {\n const { componentSize } = useConfig()\n const effectiveSize = size ?? componentSize ?? 'md'\n const [selectedTime, setSelectedTime] = useState<Date | null>(\n value !== undefined ? value : defaultValue || null\n )\n const [internalOpen, setInternalOpen] = useState(false)\n const isOpen = controlledOpen !== undefined ? controlledOpen : internalOpen\n const [hours, setHours] = useState(selectedTime ? selectedTime.getHours() : 0)\n const [minutes, setMinutes] = useState(selectedTime ? selectedTime.getMinutes() : 0)\n const [seconds, setSeconds] = useState(selectedTime ? selectedTime.getSeconds() : 0)\n const [period, setPeriod] = useState<'AM' | 'PM'>(\n selectedTime && selectedTime.getHours() >= 12 ? 'PM' : 'AM'\n )\n const [focusedColumn, setFocusedColumn] = useState<'hour' | 'minute' | 'second' | 'period'>('hour')\n\n const containerRef = useRef<HTMLDivElement>(null)\n const dropdownRef = useRef<HTMLDivElement>(null)\n const uniqueId = useId()\n const baseTestId = testId || 'timepicker'\n\n useEffect(() => {\n if (value !== undefined) {\n setSelectedTime(value)\n if (value) {\n setHours(value.getHours())\n setMinutes(value.getMinutes())\n setSeconds(value.getSeconds())\n setPeriod(value.getHours() >= 12 ? 'PM' : 'AM')\n }\n }\n }, [value])\n\n const setOpen = useCallback((newOpen: boolean) => {\n if (controlledOpen === undefined) {\n setInternalOpen(newOpen)\n }\n onOpenChange?.(newOpen)\n }, [controlledOpen, onOpenChange])\n\n useEffect(() => {\n function handleClickOutside(event: MouseEvent) {\n if (containerRef.current && !containerRef.current.contains(event.target as Node)) {\n setOpen(false)\n }\n }\n\n if (isOpen) {\n document.addEventListener('mousedown', handleClickOutside)\n return () => document.removeEventListener('mousedown', handleClickOutside)\n }\n }, [isOpen, setOpen])\n\n // Focus trap and keyboard navigation\n useEffect(() => {\n if (!isOpen) return\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n setOpen(false)\n return\n }\n\n if (e.key === 'Tab') {\n // Allow tab to cycle through columns\n return\n }\n\n if (e.key === 'ArrowUp' || e.key === 'ArrowDown') {\n e.preventDefault()\n const delta = e.key === 'ArrowUp' ? -1 : 1\n\n if (focusedColumn === 'hour') {\n const maxHour = format === '12' ? 12 : 23\n const minHour = format === '12' ? 1 : 0\n let newHour = hours + (delta * hourStep)\n if (newHour > maxHour) newHour = minHour\n if (newHour < minHour) newHour = maxHour\n handleHourChange(newHour)\n } else if (focusedColumn === 'minute') {\n let newMinute = minutes + (delta * minuteStep)\n if (newMinute > 59) newMinute = 0\n if (newMinute < 0) newMinute = 59\n handleMinuteChange(newMinute)\n } else if (focusedColumn === 'second') {\n let newSecond = seconds + (delta * secondStep)\n if (newSecond > 59) newSecond = 0\n if (newSecond < 0) newSecond = 59\n handleSecondChange(newSecond)\n } else if (focusedColumn === 'period') {\n handlePeriodChange(period === 'AM' ? 'PM' : 'AM')\n }\n }\n\n if (e.key === 'ArrowLeft' || e.key === 'ArrowRight') {\n e.preventDefault()\n const columns: Array<'hour' | 'minute' | 'second' | 'period'> = ['hour', 'minute']\n if (showSeconds) columns.push('second')\n if (format === '12') columns.push('period')\n\n const currentIndex = columns.indexOf(focusedColumn)\n const delta = e.key === 'ArrowLeft' ? -1 : 1\n let newIndex = currentIndex + delta\n if (newIndex < 0) newIndex = columns.length - 1\n if (newIndex >= columns.length) newIndex = 0\n setFocusedColumn(columns[newIndex])\n }\n\n if (e.key === 'Enter') {\n setOpen(false)\n }\n }\n\n document.addEventListener('keydown', handleKeyDown)\n return () => document.removeEventListener('keydown', handleKeyDown)\n }, [isOpen, focusedColumn, hours, minutes, seconds, period, format, showSeconds, hourStep, minuteStep, secondStep, setOpen])\n\n const handleClear = useCallback((e: React.MouseEvent) => {\n e.stopPropagation()\n setSelectedTime(null)\n setHours(0)\n setMinutes(0)\n setSeconds(0)\n setPeriod('AM')\n onChange?.(null)\n }, [onChange])\n\n const handleTimeChange = (newHours: number, newMinutes: number, newSeconds: number) => {\n const now = new Date()\n const newTime = new Date(\n now.getFullYear(),\n now.getMonth(),\n now.getDate(),\n newHours,\n newMinutes,\n newSeconds\n )\n setSelectedTime(newTime)\n onChange?.(newTime)\n }\n\n const handleHourChange = (newHour: number) => {\n let actualHour = newHour\n if (format === '12') {\n actualHour = period === 'PM' ? (newHour % 12) + 12 : newHour % 12\n }\n setHours(actualHour)\n handleTimeChange(actualHour, minutes, seconds)\n }\n\n const handleMinuteChange = (newMinute: number) => {\n setMinutes(newMinute)\n handleTimeChange(hours, newMinute, seconds)\n }\n\n const handleSecondChange = (newSecond: number) => {\n setSeconds(newSecond)\n handleTimeChange(hours, minutes, newSecond)\n }\n\n const handlePeriodChange = (newPeriod: 'AM' | 'PM') => {\n setPeriod(newPeriod)\n const newHours = newPeriod === 'PM'\n ? (hours % 12) + 12\n : hours % 12\n setHours(newHours)\n handleTimeChange(newHours, minutes, seconds)\n }\n\n const renderTimeColumn = (\n columnType: 'hour' | 'minute' | 'second',\n label: string,\n maxValue: number,\n currentValue: number,\n onChangeValue: (value: number) => void,\n step: number = 1,\n start: number = 0\n ) => {\n const items: number[] = []\n for (let i = start; i <= maxValue; i += step) {\n items.push(i)\n }\n const listboxId = `${uniqueId}-${columnType}-listbox`\n const isFocused = focusedColumn === columnType\n\n return (\n <div\n className=\"flex flex-col w-16\"\n role=\"listbox\"\n aria-label={`Select ${label.toLowerCase()}`}\n id={listboxId}\n data-testid={`${baseTestId}-${columnType}-column`}\n tabIndex={0}\n onFocus={() => setFocusedColumn(columnType)}\n >\n <div className=\"text-xs font-semibold text-center text-base-content/60 py-2\" aria-hidden=\"true\">\n {label}\n </div>\n <div className=\"overflow-y-auto max-h-48\">\n {items.map((item) => {\n const isSelected = currentValue === item\n return (\n <button\n key={item}\n type=\"button\"\n role=\"option\"\n aria-selected={isSelected}\n onClick={() => onChangeValue(item)}\n data-testid={`${baseTestId}-${columnType}-${item}`}\n className={[\n 'w-full px-4 py-2 text-center hover:bg-base-200 transition-colors',\n isSelected ? 'bg-primary text-primary-content' : '',\n isFocused && isSelected ? 'ring-2 ring-primary ring-offset-1' : ''\n ].filter(Boolean).join(' ')}\n >\n {String(item).padStart(2, '0')}\n </button>\n )\n })}\n </div>\n </div>\n )\n }\n\n const displayHours = format === '12' ? (hours % 12 || 12) : hours\n\n const statusClasses = {\n error: dInputError,\n warning: dInputWarning,\n }\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', className].filter(Boolean).join(' ')}\n data-testid={baseTestId}\n data-state={isOpen ? 'open' : 'closed'}\n {...rest}\n >\n <div className=\"relative\">\n <Input\n value={formatTime(selectedTime, format, showSeconds)}\n placeholder={placeholder}\n disabled={disabled}\n size={effectiveSize}\n readOnly\n onClick={() => !disabled && setOpen(!isOpen)}\n className={['cursor-pointer pr-8', status ? statusClasses[status] : ''].filter(Boolean).join(' ')}\n aria-haspopup=\"listbox\"\n aria-expanded={isOpen}\n aria-controls={isOpen ? `${uniqueId}-dropdown` : undefined}\n data-testid={`${baseTestId}-input`}\n />\n {allowClear && selectedTime && !disabled && (\n <button\n type=\"button\"\n onClick={handleClear}\n className={`absolute right-2 top-1/2 -translate-y-1/2 ${dBtn} ${dBtnGhost} ${dBtnXs} ${dBtnCircle}`}\n aria-label=\"Clear time\"\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 </div>\n\n {isOpen && (\n <div\n ref={dropdownRef}\n id={`${uniqueId}-dropdown`}\n className=\"absolute top-full left-0 mt-2 bg-base-100 border border-base-300 rounded-lg shadow-xl z-[9999] w-fit\"\n role=\"dialog\"\n aria-label=\"Time picker\"\n data-testid={`${baseTestId}-dropdown`}\n >\n <div className=\"flex divide-x divide-base-300\">\n {renderTimeColumn(\n 'hour',\n 'Hour',\n format === '12' ? 12 : 23,\n displayHours,\n handleHourChange,\n hourStep,\n format === '12' ? 1 : 0\n )}\n\n {renderTimeColumn('minute', 'Min', 59, minutes, handleMinuteChange, minuteStep)}\n\n {showSeconds && renderTimeColumn('second', 'Sec', 59, seconds, handleSecondChange, secondStep)}\n\n {format === '12' && (\n <div\n className=\"flex flex-col w-16\"\n role=\"listbox\"\n aria-label=\"Select period\"\n data-testid={`${baseTestId}-period-column`}\n tabIndex={0}\n onFocus={() => setFocusedColumn('period')}\n >\n <div className=\"text-xs font-semibold text-center text-base-content/60 py-2\" aria-hidden=\"true\">\n Period\n </div>\n <div className=\"flex flex-col p-2 gap-2\">\n <button\n type=\"button\"\n role=\"option\"\n aria-selected={period === 'AM'}\n onClick={() => handlePeriodChange('AM')}\n data-testid={`${baseTestId}-period-am`}\n className={[\n dBtn, dBtnSm,\n period === 'AM' ? dBtnPrimary : dBtnGhost\n ].join(' ')}\n >\n AM\n </button>\n <button\n type=\"button\"\n role=\"option\"\n aria-selected={period === 'PM'}\n onClick={() => handlePeriodChange('PM')}\n data-testid={`${baseTestId}-period-pm`}\n className={[\n dBtn, dBtnSm,\n period === 'PM' ? dBtnPrimary : dBtnGhost\n ].join(' ')}\n >\n PM\n </button>\n </div>\n </div>\n )}\n </div>\n\n <div className=\"flex justify-end gap-2 p-3 border-t border-base-300\">\n <button\n type=\"button\"\n onClick={() => {\n const now = new Date()\n setHours(now.getHours())\n setMinutes(now.getMinutes())\n setSeconds(now.getSeconds())\n setPeriod(now.getHours() >= 12 ? 'PM' : 'AM')\n handleTimeChange(now.getHours(), now.getMinutes(), now.getSeconds())\n }}\n className={`${dBtn} ${dBtnGhost} ${dBtnSm}`}\n data-testid={`${baseTestId}-now`}\n >\n Now\n </button>\n <button\n type=\"button\"\n onClick={() => setOpen(false)}\n className={`${dBtn} ${dBtnPrimary} ${dBtnSm}`}\n data-testid={`${baseTestId}-ok`}\n >\n OK\n </button>\n </div>\n </div>\n )}\n </div>\n )\n})\n\nTimePicker.displayName = 'TimePicker'\n"],"names":["dBtn","dBtnGhost","dBtnPrimary","dBtnXs","dBtnSm","dBtnCircle","dInputError","dInputWarning","formatTime","date","format","showSeconds","hours","minutes","seconds","period","hoursStr","TimePicker","forwardRef","value","defaultValue","onChange","placeholder","disabled","className","size","allowClear","controlledOpen","onOpenChange","hourStep","minuteStep","secondStep","status","testId","rest","ref","componentSize","useConfig","effectiveSize","selectedTime","setSelectedTime","useState","internalOpen","setInternalOpen","isOpen","setHours","setMinutes","setSeconds","setPeriod","focusedColumn","setFocusedColumn","containerRef","useRef","dropdownRef","uniqueId","useId","baseTestId","useEffect","setOpen","useCallback","newOpen","handleClickOutside","event","handleKeyDown","e","delta","maxHour","minHour","newHour","handleHourChange","newMinute","handleMinuteChange","newSecond","handleSecondChange","handlePeriodChange","columns","currentIndex","newIndex","handleClear","handleTimeChange","newHours","newMinutes","newSeconds","now","newTime","actualHour","newPeriod","renderTimeColumn","columnType","label","maxValue","currentValue","onChangeValue","step","start","items","i","listboxId","isFocused","jsxs","jsx","item","isSelected","displayHours","statusClasses","node","Input"],"mappings":"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"}
@@ -0,0 +1,79 @@
1
+ import { default as React } from 'react';
2
+ export type TimelineMode = 'start' | 'alternate' | 'end';
3
+ export type TimelineColor = 'primary' | 'secondary' | 'accent' | 'info' | 'success' | 'warning' | 'error' | 'neutral';
4
+ export interface TimelineItemConfig {
5
+ /** Unique key for the item */
6
+ key?: React.Key;
7
+ /** Content at start position (left/top) */
8
+ start?: React.ReactNode;
9
+ /** Content at end position (right/bottom) */
10
+ end?: React.ReactNode;
11
+ /** Central icon or marker */
12
+ icon?: React.ReactNode;
13
+ /** Wrap start content in timeline-box */
14
+ startBox?: boolean;
15
+ /** Wrap end content in timeline-box */
16
+ endBox?: boolean;
17
+ /** Color of the timeline dot/connector */
18
+ color?: TimelineColor;
19
+ /** Show loading spinner instead of icon */
20
+ loading?: boolean;
21
+ /** Additional CSS classes for this item */
22
+ className?: string;
23
+ }
24
+ export interface TimelineProps extends Omit<React.HTMLAttributes<HTMLUListElement>, 'children'> {
25
+ /** Timeline items (compound pattern) */
26
+ children?: React.ReactNode;
27
+ /** Timeline items (declarative API) */
28
+ items?: TimelineItemConfig[];
29
+ /** Vertical layout orientation */
30
+ vertical?: boolean;
31
+ /** Horizontal layout (default) */
32
+ horizontal?: boolean;
33
+ /** All items on one side */
34
+ compact?: boolean;
35
+ /** Snap icon to start instead of center */
36
+ snapIcon?: boolean;
37
+ /** Item distribution layout */
38
+ mode?: TimelineMode;
39
+ /** Reverse item order */
40
+ reverse?: boolean;
41
+ /** Show pending/loading indicator at end */
42
+ pending?: React.ReactNode;
43
+ /** Custom icon for pending item */
44
+ pendingIcon?: React.ReactNode;
45
+ /** Test ID for the component */
46
+ 'data-testid'?: string;
47
+ /** Accessible label for the timeline */
48
+ 'aria-label'?: string;
49
+ }
50
+ export interface TimelineItemProps extends Omit<React.LiHTMLAttributes<HTMLLIElement>, 'color'> {
51
+ /** Content at start position (left/top) */
52
+ start?: React.ReactNode;
53
+ /** Content at end position (right/bottom) */
54
+ end?: React.ReactNode;
55
+ /** Central icon or marker */
56
+ icon?: React.ReactNode;
57
+ /** Wrap start content in timeline-box */
58
+ startBox?: boolean;
59
+ /** Wrap end content in timeline-box */
60
+ endBox?: boolean;
61
+ /** Color of the timeline dot/connector */
62
+ color?: TimelineColor;
63
+ /** Show loading spinner instead of icon */
64
+ loading?: boolean;
65
+ /** Test ID for this item */
66
+ 'data-testid'?: string;
67
+ }
68
+ interface TimelineItemInternalProps extends TimelineItemProps {
69
+ _index?: number;
70
+ _total?: number;
71
+ _compact?: boolean;
72
+ _vertical?: boolean;
73
+ _mode?: TimelineMode;
74
+ _baseTestId?: string;
75
+ }
76
+ export declare const Timeline: React.ForwardRefExoticComponent<TimelineProps & React.RefAttributes<HTMLUListElement>> & {
77
+ Item: React.ForwardRefExoticComponent<TimelineItemInternalProps & React.RefAttributes<HTMLLIElement>>;
78
+ };
79
+ export {};
@@ -0,0 +1,151 @@
1
+ import { jsx as e, jsxs as b } from "react/jsx-runtime";
2
+ import z, { forwardRef as _, useMemo as L } from "react";
3
+ import { Loading as M } from "./Loading.js";
4
+ const V = "d-timeline", $ = "d-timeline-vertical", k = "d-timeline-horizontal", F = "d-timeline-compact", H = "d-timeline-snap-icon", P = "d-timeline-start", W = "d-timeline-end", q = "d-timeline-middle", S = "d-timeline-box", D = {
5
+ primary: "text-primary",
6
+ secondary: "text-secondary",
7
+ accent: "text-accent",
8
+ info: "text-info",
9
+ success: "text-success",
10
+ warning: "text-warning",
11
+ error: "text-error",
12
+ neutral: "text-neutral"
13
+ }, G = {
14
+ primary: "bg-primary",
15
+ secondary: "bg-secondary",
16
+ accent: "bg-accent",
17
+ info: "bg-info",
18
+ success: "bg-success",
19
+ warning: "bg-warning",
20
+ error: "bg-error",
21
+ neutral: "bg-neutral"
22
+ }, B = _(
23
+ ({
24
+ start: s,
25
+ end: n,
26
+ icon: C,
27
+ startBox: p = !1,
28
+ endBox: j = !1,
29
+ color: r,
30
+ loading: w = !1,
31
+ className: d = "",
32
+ "data-testid": I,
33
+ _index: c = 0,
34
+ _total: x = 1,
35
+ _compact: T = !1,
36
+ _vertical: E = !1,
37
+ _mode: m = "alternate",
38
+ _baseTestId: y,
39
+ ...h
40
+ }, v) => {
41
+ const f = I ?? (y ? `${y}-item-${c}` : void 0), a = [P, p && S].filter(Boolean).join(" "), l = [W, j && S].filter(Boolean).join(" "), u = [q, r && D[r]].filter(Boolean).join(" "), i = r ? G[r] : void 0, o = c === 0, R = c === x - 1, O = c % 2 === 0, N = m === "start" || m === "alternate" && !O, g = m === "end" || m === "alternate" && O, t = w ? /* @__PURE__ */ e(M, { size: "xs" }) : C;
42
+ return T ? /* @__PURE__ */ b("li", { ref: v, className: d, "data-testid": f, ...h, children: [
43
+ !o && /* @__PURE__ */ e("hr", { className: i }),
44
+ t && /* @__PURE__ */ e("div", { className: u, children: t }),
45
+ n && /* @__PURE__ */ e("div", { className: l, children: n }),
46
+ !R && /* @__PURE__ */ e("hr", { className: i })
47
+ ] }) : E ? /* @__PURE__ */ b("li", { ref: v, className: d, "data-testid": f, ...h, children: [
48
+ !o && /* @__PURE__ */ e("hr", { className: i }),
49
+ N && s && /* @__PURE__ */ e("div", { className: a, children: s }),
50
+ g && !N && n && /* @__PURE__ */ e("div", { className: a, children: n }),
51
+ t && /* @__PURE__ */ e("div", { className: u, children: t }),
52
+ g && s && !N && /* @__PURE__ */ e("div", { className: l, children: s }),
53
+ (N || !N && !g) && n && /* @__PURE__ */ e("div", { className: l, children: n }),
54
+ !N && g && s && /* @__PURE__ */ e("div", { className: l, children: s }),
55
+ !R && /* @__PURE__ */ e("hr", { className: i })
56
+ ] }) : g ? /* @__PURE__ */ b("li", { ref: v, className: d, "data-testid": f, ...h, children: [
57
+ s && /* @__PURE__ */ e("div", { className: a, children: s }),
58
+ t && /* @__PURE__ */ e("div", { className: u, children: t }),
59
+ n && /* @__PURE__ */ e("div", { className: l, children: n }),
60
+ !R && /* @__PURE__ */ e("hr", { className: i })
61
+ ] }) : /* @__PURE__ */ b("li", { ref: v, className: d, "data-testid": f, ...h, children: [
62
+ !o && /* @__PURE__ */ e("hr", { className: i }),
63
+ t && /* @__PURE__ */ e("div", { className: u, children: t }),
64
+ s && /* @__PURE__ */ e("div", { className: a, children: s }),
65
+ n && /* @__PURE__ */ e("div", { className: l, children: n })
66
+ ] });
67
+ }
68
+ );
69
+ B.displayName = "Timeline.Item";
70
+ const A = _(
71
+ ({
72
+ children: s,
73
+ items: n,
74
+ className: C = "",
75
+ vertical: p = !1,
76
+ horizontal: j = !1,
77
+ compact: r = !1,
78
+ snapIcon: w = !1,
79
+ mode: d = "alternate",
80
+ reverse: I = !1,
81
+ pending: c,
82
+ pendingIcon: x,
83
+ "data-testid": T = "timeline",
84
+ "aria-label": E,
85
+ ...m
86
+ }, y) => {
87
+ const h = [
88
+ V,
89
+ p && $,
90
+ j && k,
91
+ r && F,
92
+ w && H,
93
+ C
94
+ ].filter(Boolean).join(" "), f = L(() => n ? n.map((i, o) => /* @__PURE__ */ e(
95
+ B,
96
+ {
97
+ start: i.start,
98
+ end: i.end,
99
+ icon: i.icon,
100
+ startBox: i.startBox,
101
+ endBox: i.endBox,
102
+ color: i.color,
103
+ loading: i.loading,
104
+ className: i.className
105
+ },
106
+ i.key ?? o
107
+ )) : null, [n]) ?? s;
108
+ let a = z.Children.toArray(f);
109
+ if (I && (a = [...a].reverse()), c) {
110
+ const i = /* @__PURE__ */ e(
111
+ B,
112
+ {
113
+ end: c,
114
+ endBox: !0,
115
+ icon: x,
116
+ loading: !x
117
+ },
118
+ "__pending__"
119
+ );
120
+ a.push(i);
121
+ }
122
+ const l = a.length, u = a.map((i, o) => z.isValidElement(i) ? z.cloneElement(i, {
123
+ _index: o,
124
+ _total: l,
125
+ _compact: r,
126
+ _vertical: p,
127
+ _mode: d,
128
+ _baseTestId: T
129
+ }) : i);
130
+ return /* @__PURE__ */ e(
131
+ "ul",
132
+ {
133
+ ref: y,
134
+ className: h,
135
+ "data-testid": T,
136
+ "aria-label": E,
137
+ role: "list",
138
+ ...m,
139
+ children: u
140
+ }
141
+ );
142
+ }
143
+ );
144
+ A.displayName = "Timeline";
145
+ const U = Object.assign(A, {
146
+ Item: B
147
+ });
148
+ export {
149
+ U as Timeline
150
+ };
151
+ //# sourceMappingURL=Timeline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Timeline.js","sources":["../../src/components/Timeline.tsx"],"sourcesContent":["import React, { forwardRef, useMemo } from 'react'\nimport { Loading } from './Loading'\n\n// DaisyUI classes\nconst dTimeline = 'd-timeline'\nconst dTimelineVertical = 'd-timeline-vertical'\nconst dTimelineHorizontal = 'd-timeline-horizontal'\nconst dTimelineCompact = 'd-timeline-compact'\nconst dTimelineSnapIcon = 'd-timeline-snap-icon'\nconst dTimelineStart = 'd-timeline-start'\nconst dTimelineEnd = 'd-timeline-end'\nconst dTimelineMiddle = 'd-timeline-middle'\nconst dTimelineBox = 'd-timeline-box'\n\nexport type TimelineMode = 'start' | 'alternate' | 'end'\nexport type TimelineColor = 'primary' | 'secondary' | 'accent' | 'info' | 'success' | 'warning' | 'error' | 'neutral'\n\nexport interface TimelineItemConfig {\n /** Unique key for the item */\n key?: React.Key\n /** Content at start position (left/top) */\n start?: React.ReactNode\n /** Content at end position (right/bottom) */\n end?: React.ReactNode\n /** Central icon or marker */\n icon?: React.ReactNode\n /** Wrap start content in timeline-box */\n startBox?: boolean\n /** Wrap end content in timeline-box */\n endBox?: boolean\n /** Color of the timeline dot/connector */\n color?: TimelineColor\n /** Show loading spinner instead of icon */\n loading?: boolean\n /** Additional CSS classes for this item */\n className?: string\n}\n\nexport interface TimelineProps extends Omit<React.HTMLAttributes<HTMLUListElement>, 'children'> {\n /** Timeline items (compound pattern) */\n children?: React.ReactNode\n /** Timeline items (declarative API) */\n items?: TimelineItemConfig[]\n /** Vertical layout orientation */\n vertical?: boolean\n /** Horizontal layout (default) */\n horizontal?: boolean\n /** All items on one side */\n compact?: boolean\n /** Snap icon to start instead of center */\n snapIcon?: boolean\n /** Item distribution layout */\n mode?: TimelineMode\n /** Reverse item order */\n reverse?: boolean\n /** Show pending/loading indicator at end */\n pending?: React.ReactNode\n /** Custom icon for pending item */\n pendingIcon?: React.ReactNode\n /** Test ID for the component */\n 'data-testid'?: string\n /** Accessible label for the timeline */\n 'aria-label'?: string\n}\n\n// Public props for Timeline.Item (excludes internal props)\nexport interface TimelineItemProps extends Omit<React.LiHTMLAttributes<HTMLLIElement>, 'color'> {\n /** Content at start position (left/top) */\n start?: React.ReactNode\n /** Content at end position (right/bottom) */\n end?: React.ReactNode\n /** Central icon or marker */\n icon?: React.ReactNode\n /** Wrap start content in timeline-box */\n startBox?: boolean\n /** Wrap end content in timeline-box */\n endBox?: boolean\n /** Color of the timeline dot/connector */\n color?: TimelineColor\n /** Show loading spinner instead of icon */\n loading?: boolean\n /** Test ID for this item */\n 'data-testid'?: string\n}\n\n// Internal props injected by Timeline container\ninterface TimelineItemInternalProps extends TimelineItemProps {\n _index?: number\n _total?: number\n _compact?: boolean\n _vertical?: boolean\n _mode?: TimelineMode\n _baseTestId?: string\n}\n\nconst colorClasses: Record<TimelineColor, string> = {\n primary: 'text-primary',\n secondary: 'text-secondary',\n accent: 'text-accent',\n info: 'text-info',\n success: 'text-success',\n warning: 'text-warning',\n error: 'text-error',\n neutral: 'text-neutral',\n}\n\nconst hrColorClasses: Record<TimelineColor, string> = {\n primary: 'bg-primary',\n secondary: 'bg-secondary',\n accent: 'bg-accent',\n info: 'bg-info',\n success: 'bg-success',\n warning: 'bg-warning',\n error: 'bg-error',\n neutral: 'bg-neutral',\n}\n\nconst TimelineItem = forwardRef<HTMLLIElement, TimelineItemInternalProps>(\n (\n {\n start,\n end,\n icon,\n startBox = false,\n endBox = false,\n color,\n loading = false,\n className = '',\n 'data-testid': testId,\n _index = 0,\n _total = 1,\n _compact = false,\n _vertical = false,\n _mode = 'alternate',\n _baseTestId,\n ...rest\n },\n ref\n ) => {\n const itemTestId = testId ?? (_baseTestId ? `${_baseTestId}-item-${_index}` : undefined)\n\n const startClasses = [dTimelineStart, startBox && dTimelineBox].filter(Boolean).join(' ')\n const endClasses = [dTimelineEnd, endBox && dTimelineBox].filter(Boolean).join(' ')\n const middleClasses = [dTimelineMiddle, color && colorClasses[color]].filter(Boolean).join(' ')\n const hrClasses = color ? hrColorClasses[color] : undefined\n\n const isFirst = _index === 0\n const isLast = _index === _total - 1\n\n // Determine content placement based on mode\n const isEven = _index % 2 === 0\n const showOnStart = _mode === 'start' || (_mode === 'alternate' && !isEven)\n const showOnEnd = _mode === 'end' || (_mode === 'alternate' && isEven)\n\n // Render the icon or loading spinner\n const iconContent = loading ? (\n <Loading size=\"xs\" />\n ) : (\n icon\n )\n\n // Render connectors and content based on layout\n if (_compact) {\n // Compact layout: connector, icon, end content, connector\n return (\n <li ref={ref} className={className} data-testid={itemTestId} {...rest}>\n {!isFirst && <hr className={hrClasses} />}\n {iconContent && <div className={middleClasses}>{iconContent}</div>}\n {end && <div className={endClasses}>{end}</div>}\n {!isLast && <hr className={hrClasses} />}\n </li>\n )\n } else if (_vertical) {\n // Vertical layout with mode support\n return (\n <li ref={ref} className={className} data-testid={itemTestId} {...rest}>\n {!isFirst && <hr className={hrClasses} />}\n {showOnStart && start && <div className={startClasses}>{start}</div>}\n {showOnEnd && !showOnStart && end && <div className={startClasses}>{end}</div>}\n {iconContent && <div className={middleClasses}>{iconContent}</div>}\n {showOnEnd && start && !showOnStart && <div className={endClasses}>{start}</div>}\n {(showOnStart || (!showOnStart && !showOnEnd)) && end && <div className={endClasses}>{end}</div>}\n {!showOnStart && showOnEnd && start && <div className={endClasses}>{start}</div>}\n {!isLast && <hr className={hrClasses} />}\n </li>\n )\n } else {\n // Horizontal alternating layout\n if (showOnEnd) {\n // Content on end side\n return (\n <li ref={ref} className={className} data-testid={itemTestId} {...rest}>\n {start && <div className={startClasses}>{start}</div>}\n {iconContent && <div className={middleClasses}>{iconContent}</div>}\n {end && <div className={endClasses}>{end}</div>}\n {!isLast && <hr className={hrClasses} />}\n </li>\n )\n } else {\n // Content on start side\n return (\n <li ref={ref} className={className} data-testid={itemTestId} {...rest}>\n {!isFirst && <hr className={hrClasses} />}\n {iconContent && <div className={middleClasses}>{iconContent}</div>}\n {start && <div className={startClasses}>{start}</div>}\n {end && <div className={endClasses}>{end}</div>}\n </li>\n )\n }\n }\n }\n)\n\nTimelineItem.displayName = 'Timeline.Item'\n\nconst TimelineRoot = forwardRef<HTMLUListElement, TimelineProps>(\n (\n {\n children,\n items,\n className = '',\n vertical = false,\n horizontal = false,\n compact = false,\n snapIcon = false,\n mode = 'alternate',\n reverse = false,\n pending,\n pendingIcon,\n 'data-testid': testId = 'timeline',\n 'aria-label': ariaLabel,\n ...rest\n },\n ref\n ) => {\n const classes = [\n dTimeline,\n vertical && dTimelineVertical,\n horizontal && dTimelineHorizontal,\n compact && dTimelineCompact,\n snapIcon && dTimelineSnapIcon,\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n // Build items from declarative API if provided\n const declarativeItems = useMemo(() => {\n if (!items) return null\n return items.map((item, index) => (\n <TimelineItem\n key={item.key ?? index}\n start={item.start}\n end={item.end}\n icon={item.icon}\n startBox={item.startBox}\n endBox={item.endBox}\n color={item.color}\n loading={item.loading}\n className={item.className}\n />\n ))\n }, [items])\n\n // Get children to render (either declarative or compound)\n const childrenToRender = declarativeItems ?? children\n\n // Convert to array and optionally reverse\n let childArray = React.Children.toArray(childrenToRender)\n if (reverse) {\n childArray = [...childArray].reverse()\n }\n\n // Add pending item if provided\n if (pending) {\n const pendingItem = (\n <TimelineItem\n key=\"__pending__\"\n end={pending}\n endBox\n icon={pendingIcon}\n loading={!pendingIcon}\n />\n )\n childArray.push(pendingItem)\n }\n\n const total = childArray.length\n\n // Inject internal props into each Timeline.Item\n const childrenWithProps = childArray.map((child, index) => {\n if (React.isValidElement<TimelineItemInternalProps>(child)) {\n return React.cloneElement(child, {\n _index: index,\n _total: total,\n _compact: compact,\n _vertical: vertical,\n _mode: mode,\n _baseTestId: testId,\n })\n }\n return child\n })\n\n return (\n <ul\n ref={ref}\n className={classes}\n data-testid={testId}\n aria-label={ariaLabel}\n role=\"list\"\n {...rest}\n >\n {childrenWithProps}\n </ul>\n )\n }\n)\n\nTimelineRoot.displayName = 'Timeline'\n\nexport const Timeline = Object.assign(TimelineRoot, {\n Item: TimelineItem,\n})\n"],"names":["dTimeline","dTimelineVertical","dTimelineHorizontal","dTimelineCompact","dTimelineSnapIcon","dTimelineStart","dTimelineEnd","dTimelineMiddle","dTimelineBox","colorClasses","hrColorClasses","TimelineItem","forwardRef","start","end","icon","startBox","endBox","color","loading","className","testId","_index","_total","_compact","_vertical","_mode","_baseTestId","rest","ref","itemTestId","startClasses","endClasses","middleClasses","hrClasses","isFirst","isLast","isEven","showOnStart","showOnEnd","iconContent","jsx","Loading","TimelineRoot","children","items","vertical","horizontal","compact","snapIcon","mode","reverse","pending","pendingIcon","ariaLabel","classes","childrenToRender","useMemo","item","index","childArray","React","pendingItem","total","childrenWithProps","child","Timeline"],"mappings":";;;AAIA,MAAMA,IAAY,cACZC,IAAoB,uBACpBC,IAAsB,yBACtBC,IAAmB,sBACnBC,IAAoB,wBACpBC,IAAiB,oBACjBC,IAAe,kBACfC,IAAkB,qBAClBC,IAAe,kBAmFfC,IAA8C;AAAA,EAClD,SAAS;AAAA,EACT,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,SAAS;AAAA,EACT,SAAS;AAAA,EACT,OAAO;AAAA,EACP,SAAS;AACX,GAEMC,IAAgD;AAAA,EACpD,SAAS;AAAA,EACT,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,SAAS;AAAA,EACT,SAAS;AAAA,EACT,OAAO;AAAA,EACP,SAAS;AACX,GAEMC,IAAeC;AAAA,EACnB,CACE;AAAA,IACE,OAAAC;AAAA,IACA,KAAAC;AAAA,IACA,MAAAC;AAAA,IACA,UAAAC,IAAW;AAAA,IACX,QAAAC,IAAS;AAAA,IACT,OAAAC;AAAA,IACA,SAAAC,IAAU;AAAA,IACV,WAAAC,IAAY;AAAA,IACZ,eAAeC;AAAA,IACf,QAAAC,IAAS;AAAA,IACT,QAAAC,IAAS;AAAA,IACT,UAAAC,IAAW;AAAA,IACX,WAAAC,IAAY;AAAA,IACZ,OAAAC,IAAQ;AAAA,IACR,aAAAC;AAAA,IACA,GAAGC;AAAA,EAAA,GAELC,MACG;AACH,UAAMC,IAAaT,MAAWM,IAAc,GAAGA,CAAW,SAASL,CAAM,KAAK,SAExES,IAAe,CAAC1B,GAAgBW,KAAYR,CAAY,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,GAClFwB,IAAa,CAAC1B,GAAcW,KAAUT,CAAY,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,GAC5EyB,IAAgB,CAAC1B,GAAiBW,KAAST,EAAaS,CAAK,CAAC,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,GACxFgB,IAAYhB,IAAQR,EAAeQ,CAAK,IAAI,QAE5CiB,IAAUb,MAAW,GACrBc,IAASd,MAAWC,IAAS,GAG7Bc,IAASf,IAAS,MAAM,GACxBgB,IAAcZ,MAAU,WAAYA,MAAU,eAAe,CAACW,GAC9DE,IAAYb,MAAU,SAAUA,MAAU,eAAeW,GAGzDG,IAAcrB,IAClB,gBAAAsB,EAACC,GAAA,EAAQ,MAAK,MAAK,IAEnB3B;AAIF,WAAIS,sBAGC,MAAA,EAAG,KAAAK,GAAU,WAAAT,GAAsB,eAAaU,GAAa,GAAGF,GAC9D,UAAA;AAAA,MAAA,CAACO,KAAW,gBAAAM,EAAC,MAAA,EAAG,WAAWP,EAAA,CAAW;AAAA,MACtCM,KAAe,gBAAAC,EAAC,OAAA,EAAI,WAAWR,GAAgB,UAAAO,GAAY;AAAA,MAC3D1B,KAAO,gBAAA2B,EAAC,OAAA,EAAI,WAAWT,GAAa,UAAAlB,GAAI;AAAA,MACxC,CAACsB,KAAU,gBAAAK,EAAC,MAAA,EAAG,WAAWP,EAAA,CAAW;AAAA,IAAA,GACxC,IAEOT,sBAGN,MAAA,EAAG,KAAAI,GAAU,WAAAT,GAAsB,eAAaU,GAAa,GAAGF,GAC9D,UAAA;AAAA,MAAA,CAACO,KAAW,gBAAAM,EAAC,MAAA,EAAG,WAAWP,EAAA,CAAW;AAAA,MACtCI,KAAezB,KAAS,gBAAA4B,EAAC,OAAA,EAAI,WAAWV,GAAe,UAAAlB,GAAM;AAAA,MAC7D0B,KAAa,CAACD,KAAexB,uBAAQ,OAAA,EAAI,WAAWiB,GAAe,UAAAjB,GAAI;AAAA,MACvE0B,KAAe,gBAAAC,EAAC,OAAA,EAAI,WAAWR,GAAgB,UAAAO,GAAY;AAAA,MAC3DD,KAAa1B,KAAS,CAACyB,uBAAgB,OAAA,EAAI,WAAWN,GAAa,UAAAnB,GAAM;AAAA,OACxEyB,KAAgB,CAACA,KAAe,CAACC,MAAezB,KAAO,gBAAA2B,EAAC,OAAA,EAAI,WAAWT,GAAa,UAAAlB,EAAA,CAAI;AAAA,MACzF,CAACwB,KAAeC,KAAa1B,uBAAU,OAAA,EAAI,WAAWmB,GAAa,UAAAnB,GAAM;AAAA,MACzE,CAACuB,KAAU,gBAAAK,EAAC,MAAA,EAAG,WAAWP,EAAA,CAAW;AAAA,IAAA,GACxC,IAIEK,sBAGC,MAAA,EAAG,KAAAV,GAAU,WAAAT,GAAsB,eAAaU,GAAa,GAAGF,GAC9D,UAAA;AAAA,MAAAf,KAAS,gBAAA4B,EAAC,OAAA,EAAI,WAAWV,GAAe,UAAAlB,GAAM;AAAA,MAC9C2B,KAAe,gBAAAC,EAAC,OAAA,EAAI,WAAWR,GAAgB,UAAAO,GAAY;AAAA,MAC3D1B,KAAO,gBAAA2B,EAAC,OAAA,EAAI,WAAWT,GAAa,UAAAlB,GAAI;AAAA,MACxC,CAACsB,KAAU,gBAAAK,EAAC,MAAA,EAAG,WAAWP,EAAA,CAAW;AAAA,IAAA,GACxC,sBAKC,MAAA,EAAG,KAAAL,GAAU,WAAAT,GAAsB,eAAaU,GAAa,GAAGF,GAC9D,UAAA;AAAA,MAAA,CAACO,KAAW,gBAAAM,EAAC,MAAA,EAAG,WAAWP,EAAA,CAAW;AAAA,MACtCM,KAAe,gBAAAC,EAAC,OAAA,EAAI,WAAWR,GAAgB,UAAAO,GAAY;AAAA,MAC3D3B,KAAS,gBAAA4B,EAAC,OAAA,EAAI,WAAWV,GAAe,UAAAlB,GAAM;AAAA,MAC9CC,KAAO,gBAAA2B,EAAC,OAAA,EAAI,WAAWT,GAAa,UAAAlB,EAAA,CAAI;AAAA,IAAA,GAC3C;AAAA,EAIR;AACF;AAEAH,EAAa,cAAc;AAE3B,MAAMgC,IAAe/B;AAAA,EACnB,CACE;AAAA,IACE,UAAAgC;AAAA,IACA,OAAAC;AAAA,IACA,WAAAzB,IAAY;AAAA,IACZ,UAAA0B,IAAW;AAAA,IACX,YAAAC,IAAa;AAAA,IACb,SAAAC,IAAU;AAAA,IACV,UAAAC,IAAW;AAAA,IACX,MAAAC,IAAO;AAAA,IACP,SAAAC,IAAU;AAAA,IACV,SAAAC;AAAA,IACA,aAAAC;AAAA,IACA,eAAehC,IAAS;AAAA,IACxB,cAAciC;AAAA,IACd,GAAG1B;AAAA,EAAA,GAELC,MACG;AACH,UAAM0B,IAAU;AAAA,MACdvD;AAAA,MACA8C,KAAY7C;AAAA,MACZ8C,KAAc7C;AAAA,MACd8C,KAAW7C;AAAA,MACX8C,KAAY7C;AAAA,MACZgB;AAAA,IAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG,GAqBLoC,IAlBmBC,EAAQ,MAC1BZ,IACEA,EAAM,IAAI,CAACa,GAAMC,MACtB,gBAAAlB;AAAA,MAAC9B;AAAA,MAAA;AAAA,QAEC,OAAO+C,EAAK;AAAA,QACZ,KAAKA,EAAK;AAAA,QACV,MAAMA,EAAK;AAAA,QACX,UAAUA,EAAK;AAAA,QACf,QAAQA,EAAK;AAAA,QACb,OAAOA,EAAK;AAAA,QACZ,SAASA,EAAK;AAAA,QACd,WAAWA,EAAK;AAAA,MAAA;AAAA,MARXA,EAAK,OAAOC;AAAA,IAAA,CAUpB,IAbkB,MAclB,CAACd,CAAK,CAAC,KAGmCD;AAG7C,QAAIgB,IAAaC,EAAM,SAAS,QAAQL,CAAgB;AAMxD,QALIL,MACFS,IAAa,CAAC,GAAGA,CAAU,EAAE,QAAA,IAI3BR,GAAS;AACX,YAAMU,IACJ,gBAAArB;AAAA,QAAC9B;AAAA,QAAA;AAAA,UAEC,KAAKyC;AAAA,UACL,QAAM;AAAA,UACN,MAAMC;AAAA,UACN,SAAS,CAACA;AAAA,QAAA;AAAA,QAJN;AAAA,MAAA;AAOR,MAAAO,EAAW,KAAKE,CAAW;AAAA,IAC7B;AAEA,UAAMC,IAAQH,EAAW,QAGnBI,IAAoBJ,EAAW,IAAI,CAACK,GAAON,MAC3CE,EAAM,eAA0CI,CAAK,IAChDJ,EAAM,aAAaI,GAAO;AAAA,MAC/B,QAAQN;AAAA,MACR,QAAQI;AAAA,MACR,UAAUf;AAAA,MACV,WAAWF;AAAA,MACX,OAAOI;AAAA,MACP,aAAa7B;AAAA,IAAA,CACd,IAEI4C,CACR;AAED,WACE,gBAAAxB;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAAZ;AAAA,QACA,WAAW0B;AAAA,QACX,eAAalC;AAAA,QACb,cAAYiC;AAAA,QACZ,MAAK;AAAA,QACJ,GAAG1B;AAAA,QAEH,UAAAoC;AAAA,MAAA;AAAA,IAAA;AAAA,EAGP;AACF;AAEArB,EAAa,cAAc;AAEpB,MAAMuB,IAAW,OAAO,OAAOvB,GAAc;AAAA,EAClD,MAAMhC;AACR,CAAC;"}
@@ -0,0 +1,7 @@
1
+ import { default as React } from 'react';
2
+ export interface ToggleProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size' | 'type'> {
3
+ size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';
4
+ color?: 'primary' | 'secondary' | 'accent' | 'neutral' | 'success' | 'warning' | 'info' | 'error';
5
+ className?: string;
6
+ }
7
+ export declare const Toggle: React.ForwardRefExoticComponent<ToggleProps & React.RefAttributes<HTMLInputElement>>;
@@ -0,0 +1,39 @@
1
+ import { jsx as i } from "react/jsx-runtime";
2
+ import { forwardRef as m } from "react";
3
+ import { useConfig as T } from "./ConfigProvider.js";
4
+ const f = "d-toggle", u = "d-toggle-xs", p = "d-toggle-sm", y = "d-toggle-md", x = "d-toggle-lg", S = "d-toggle-xl", h = "d-toggle-primary", k = "d-toggle-secondary", C = "d-toggle-accent", w = "d-toggle-neutral", z = "d-toggle-success", N = "d-toggle-warning", j = "d-toggle-info", X = "d-toggle-error", b = m(
5
+ ({
6
+ size: t,
7
+ color: o,
8
+ className: s = "",
9
+ ...e
10
+ }, c) => {
11
+ const { componentSize: l } = T(), g = t ?? l ?? "md", n = {
12
+ xs: u,
13
+ sm: p,
14
+ md: y,
15
+ lg: x,
16
+ xl: S
17
+ }, d = {
18
+ primary: h,
19
+ secondary: k,
20
+ accent: C,
21
+ neutral: w,
22
+ success: z,
23
+ warning: N,
24
+ info: j,
25
+ error: X
26
+ }, r = [
27
+ f,
28
+ g && n[g],
29
+ o && d[o],
30
+ s
31
+ ].filter(Boolean).join(" "), a = e.checked ? "checked" : "unchecked";
32
+ return /* @__PURE__ */ i("input", { ref: c, type: "checkbox", className: r, "data-state": a, ...e });
33
+ }
34
+ );
35
+ b.displayName = "Toggle";
36
+ export {
37
+ b as Toggle
38
+ };
39
+ //# sourceMappingURL=Toggle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Toggle.js","sources":["../../src/components/Toggle.tsx"],"sourcesContent":["import React, { forwardRef } from 'react'\nimport { useConfig } from './ConfigProvider'\n\n// DaisyUI classes\nconst dToggle = 'd-toggle'\nconst dToggleXs = 'd-toggle-xs'\nconst dToggleSm = 'd-toggle-sm'\nconst dToggleMd = 'd-toggle-md'\nconst dToggleLg = 'd-toggle-lg'\nconst dToggleXl = 'd-toggle-xl'\nconst dTogglePrimary = 'd-toggle-primary'\nconst dToggleSecondary = 'd-toggle-secondary'\nconst dToggleAccent = 'd-toggle-accent'\nconst dToggleNeutral = 'd-toggle-neutral'\nconst dToggleSuccess = 'd-toggle-success'\nconst dToggleWarning = 'd-toggle-warning'\nconst dToggleInfo = 'd-toggle-info'\nconst dToggleError = 'd-toggle-error'\n\nexport interface ToggleProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size' | 'type'> {\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n color?: 'primary' | 'secondary' | 'accent' | 'neutral' | 'success' | 'warning' | 'info' | 'error'\n className?: string\n}\n\nexport const Toggle = forwardRef<HTMLInputElement, ToggleProps>(\n (\n {\n size,\n color,\n className = '',\n ...props\n },\n ref\n ) => {\n const { componentSize } = useConfig()\n const effectiveSize = size ?? componentSize ?? 'md'\n\n const sizeClasses = {\n xs: dToggleXs,\n sm: dToggleSm,\n md: dToggleMd,\n lg: dToggleLg,\n xl: dToggleXl,\n }\n\n const colorClasses = {\n primary: dTogglePrimary,\n secondary: dToggleSecondary,\n accent: dToggleAccent,\n neutral: dToggleNeutral,\n success: dToggleSuccess,\n warning: dToggleWarning,\n info: dToggleInfo,\n error: dToggleError,\n }\n\n const toggleClasses = [\n dToggle,\n effectiveSize && sizeClasses[effectiveSize],\n color && colorClasses[color],\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n const dataState = props.checked ? 'checked' : 'unchecked'\n return <input ref={ref} type=\"checkbox\" className={toggleClasses} data-state={dataState} {...props} />\n }\n)\n\nToggle.displayName = 'Toggle'\n"],"names":["dToggle","dToggleXs","dToggleSm","dToggleMd","dToggleLg","dToggleXl","dTogglePrimary","dToggleSecondary","dToggleAccent","dToggleNeutral","dToggleSuccess","dToggleWarning","dToggleInfo","dToggleError","Toggle","forwardRef","size","color","className","props","ref","componentSize","useConfig","effectiveSize","sizeClasses","colorClasses","toggleClasses","dataState","jsx"],"mappings":";;;AAIA,MAAMA,IAAU,YACVC,IAAY,eACZC,IAAY,eACZC,IAAY,eACZC,IAAY,eACZC,IAAY,eACZC,IAAiB,oBACjBC,IAAmB,sBACnBC,IAAgB,mBAChBC,IAAiB,oBACjBC,IAAiB,oBACjBC,IAAiB,oBACjBC,IAAc,iBACdC,IAAe,kBAQRC,IAASC;AAAA,EACpB,CACE;AAAA,IACE,MAAAC;AAAA,IACA,OAAAC;AAAA,IACA,WAAAC,IAAY;AAAA,IACZ,GAAGC;AAAA,EAAA,GAELC,MACG;AACH,UAAM,EAAE,eAAAC,EAAA,IAAkBC,EAAA,GACpBC,IAAgBP,KAAQK,KAAiB,MAEzCG,IAAc;AAAA,MAClB,IAAIvB;AAAA,MACJ,IAAIC;AAAA,MACJ,IAAIC;AAAA,MACJ,IAAIC;AAAA,MACJ,IAAIC;AAAA,IAAA,GAGAoB,IAAe;AAAA,MACnB,SAASnB;AAAA,MACT,WAAWC;AAAA,MACX,QAAQC;AAAA,MACR,SAASC;AAAA,MACT,SAASC;AAAA,MACT,SAASC;AAAA,MACT,MAAMC;AAAA,MACN,OAAOC;AAAA,IAAA,GAGHa,IAAgB;AAAA,MACpB1B;AAAA,MACAuB,KAAiBC,EAAYD,CAAa;AAAA,MAC1CN,KAASQ,EAAaR,CAAK;AAAA,MAC3BC;AAAA,IAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG,GAELS,IAAYR,EAAM,UAAU,YAAY;AAC9C,WAAO,gBAAAS,EAAC,SAAA,EAAM,KAAAR,GAAU,MAAK,YAAW,WAAWM,GAAe,cAAYC,GAAY,GAAGR,EAAA,CAAO;AAAA,EACtG;AACF;AAEAL,EAAO,cAAc;"}
@@ -0,0 +1,9 @@
1
+ import { default as React } from 'react';
2
+ export interface TooltipProps extends React.HTMLAttributes<HTMLDivElement> {
3
+ children: React.ReactNode;
4
+ tip: string;
5
+ position?: 'top' | 'bottom' | 'left' | 'right';
6
+ color?: 'neutral' | 'primary' | 'secondary' | 'accent' | 'info' | 'success' | 'warning' | 'error';
7
+ open?: boolean;
8
+ }
9
+ export declare const Tooltip: React.FC<TooltipProps>;
@@ -0,0 +1,37 @@
1
+ import { jsx as e } from "react/jsx-runtime";
2
+ const a = "d-tooltip", T = "d-tooltip-top", f = "d-tooltip-bottom", m = "d-tooltip-left", u = "d-tooltip-right", g = "d-tooltip-neutral", y = "d-tooltip-primary", h = "d-tooltip-secondary", b = "d-tooltip-accent", j = "d-tooltip-info", v = "d-tooltip-success", w = "d-tooltip-warning", x = "d-tooltip-error", B = "d-tooltip-open", N = ({
3
+ children: i,
4
+ tip: s,
5
+ className: l = "",
6
+ position: n = "top",
7
+ color: o,
8
+ open: t = !1,
9
+ ...p
10
+ }) => {
11
+ const c = {
12
+ top: T,
13
+ bottom: f,
14
+ left: m,
15
+ right: u
16
+ }, d = o ? {
17
+ neutral: g,
18
+ primary: y,
19
+ secondary: h,
20
+ accent: b,
21
+ info: j,
22
+ success: v,
23
+ warning: w,
24
+ error: x
25
+ }[o] : void 0, r = [
26
+ a,
27
+ c[n],
28
+ d,
29
+ t && B,
30
+ l
31
+ ].filter(Boolean).join(" ");
32
+ return /* @__PURE__ */ e("div", { className: r, "data-tip": s, "data-state": t ? "open" : "closed", ...p, children: i });
33
+ };
34
+ export {
35
+ N as Tooltip
36
+ };
37
+ //# sourceMappingURL=Tooltip.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Tooltip.js","sources":["../../src/components/Tooltip.tsx"],"sourcesContent":["import React from 'react'\n\n// DaisyUI classes\nconst dTooltip = 'd-tooltip'\nconst dTooltipTop = 'd-tooltip-top'\nconst dTooltipBottom = 'd-tooltip-bottom'\nconst dTooltipLeft = 'd-tooltip-left'\nconst dTooltipRight = 'd-tooltip-right'\nconst dTooltipNeutral = 'd-tooltip-neutral'\nconst dTooltipPrimary = 'd-tooltip-primary'\nconst dTooltipSecondary = 'd-tooltip-secondary'\nconst dTooltipAccent = 'd-tooltip-accent'\nconst dTooltipInfo = 'd-tooltip-info'\nconst dTooltipSuccess = 'd-tooltip-success'\nconst dTooltipWarning = 'd-tooltip-warning'\nconst dTooltipError = 'd-tooltip-error'\nconst dTooltipOpen = 'd-tooltip-open'\n\nexport interface TooltipProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode\n tip: string\n position?: 'top' | 'bottom' | 'left' | 'right'\n color?: 'neutral' | 'primary' | 'secondary' | 'accent' | 'info' | 'success' | 'warning' | 'error'\n open?: boolean\n}\n\nexport const Tooltip: React.FC<TooltipProps> = ({\n children,\n tip,\n className = '',\n position = 'top',\n color,\n open = false,\n ...rest\n}) => {\n const positionClasses = {\n top: dTooltipTop,\n bottom: dTooltipBottom,\n left: dTooltipLeft,\n right: dTooltipRight,\n }\n\n const colorClasses = color\n ? {\n neutral: dTooltipNeutral,\n primary: dTooltipPrimary,\n secondary: dTooltipSecondary,\n accent: dTooltipAccent,\n info: dTooltipInfo,\n success: dTooltipSuccess,\n warning: dTooltipWarning,\n error: dTooltipError,\n }[color]\n : undefined\n\n const classes = [\n dTooltip,\n positionClasses[position],\n colorClasses,\n open && dTooltipOpen,\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n return (\n <div className={classes} data-tip={tip} data-state={open ? 'open' : 'closed'} {...rest}>\n {children}\n </div>\n )\n}\n"],"names":["dTooltip","dTooltipTop","dTooltipBottom","dTooltipLeft","dTooltipRight","dTooltipNeutral","dTooltipPrimary","dTooltipSecondary","dTooltipAccent","dTooltipInfo","dTooltipSuccess","dTooltipWarning","dTooltipError","dTooltipOpen","Tooltip","children","tip","className","position","color","open","rest","positionClasses","colorClasses","classes","jsx"],"mappings":";AAGA,MAAMA,IAAW,aACXC,IAAc,iBACdC,IAAiB,oBACjBC,IAAe,kBACfC,IAAgB,mBAChBC,IAAkB,qBAClBC,IAAkB,qBAClBC,IAAoB,uBACpBC,IAAiB,oBACjBC,IAAe,kBACfC,IAAkB,qBAClBC,IAAkB,qBAClBC,IAAgB,mBAChBC,IAAe,kBAURC,IAAkC,CAAC;AAAA,EAC9C,UAAAC;AAAA,EACA,KAAAC;AAAA,EACA,WAAAC,IAAY;AAAA,EACZ,UAAAC,IAAW;AAAA,EACX,OAAAC;AAAA,EACA,MAAAC,IAAO;AAAA,EACP,GAAGC;AACL,MAAM;AACJ,QAAMC,IAAkB;AAAA,IACtB,KAAKrB;AAAA,IACL,QAAQC;AAAA,IACR,MAAMC;AAAA,IACN,OAAOC;AAAA,EAAA,GAGHmB,IAAeJ,IACjB;AAAA,IACE,SAASd;AAAA,IACT,SAASC;AAAA,IACT,WAAWC;AAAA,IACX,QAAQC;AAAA,IACR,MAAMC;AAAA,IACN,SAASC;AAAA,IACT,SAASC;AAAA,IACT,OAAOC;AAAA,EAAA,EACPO,CAAK,IACP,QAEEK,IAAU;AAAA,IACdxB;AAAA,IACAsB,EAAgBJ,CAAQ;AAAA,IACxBK;AAAA,IACAH,KAAQP;AAAA,IACRI;AAAA,EAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,SACE,gBAAAQ,EAAC,OAAA,EAAI,WAAWD,GAAS,YAAUR,GAAK,cAAYI,IAAO,SAAS,UAAW,GAAGC,GAC/E,UAAAN,EAAA,CACH;AAEJ;"}
@@ -0,0 +1,123 @@
1
+ import { default as React } from 'react';
2
+ export type TourPlacement = 'top' | 'topLeft' | 'topRight' | 'bottom' | 'bottomLeft' | 'bottomRight' | 'left' | 'leftTop' | 'leftBottom' | 'right' | 'rightTop' | 'rightBottom' | 'center';
3
+ export type TourType = 'default' | 'primary';
4
+ export interface TourArrowConfig {
5
+ pointAtCenter?: boolean;
6
+ }
7
+ export interface TourMaskConfig {
8
+ style?: React.CSSProperties;
9
+ color?: string;
10
+ }
11
+ export interface TourButtonProps {
12
+ children?: React.ReactNode;
13
+ onClick?: () => void;
14
+ }
15
+ export interface TourStepProps {
16
+ /** Target element ref or function returning element */
17
+ target?: React.RefObject<HTMLElement | null> | (() => HTMLElement | null) | null;
18
+ /** Step title */
19
+ title: React.ReactNode;
20
+ /** Step description */
21
+ description?: React.ReactNode;
22
+ /** Cover image or content above title */
23
+ cover?: React.ReactNode;
24
+ /** Placement of popover relative to target */
25
+ placement?: TourPlacement;
26
+ /** Whether to show arrow (overrides Tour setting) */
27
+ arrow?: boolean | TourArrowConfig;
28
+ /** Custom close icon for this step */
29
+ closeIcon?: React.ReactNode;
30
+ /** Show mask overlay (overrides Tour setting) */
31
+ mask?: boolean | TourMaskConfig;
32
+ /** Type affects styling (overrides Tour setting) */
33
+ type?: TourType;
34
+ /** Scroll into view options (overrides Tour setting) */
35
+ scrollIntoViewOptions?: boolean | ScrollIntoViewOptions;
36
+ /** Next button props */
37
+ nextButtonProps?: TourButtonProps;
38
+ /** Previous button props */
39
+ prevButtonProps?: TourButtonProps;
40
+ /** Custom class for this step's popover */
41
+ className?: string;
42
+ /** Custom style for this step's popover */
43
+ style?: React.CSSProperties;
44
+ /** Called when this step becomes active */
45
+ onClose?: () => void;
46
+ }
47
+ export type TourSemanticName = 'root' | 'mask' | 'popover' | 'header' | 'content' | 'footer' | 'indicator' | 'close';
48
+ export interface TourActionInfo {
49
+ current: number;
50
+ total: number;
51
+ }
52
+ export interface TourRef {
53
+ /** Go to a specific step */
54
+ goTo: (step: number) => void;
55
+ /** Go to the next step */
56
+ next: () => void;
57
+ /** Go to the previous step */
58
+ prev: () => void;
59
+ /** Close the tour */
60
+ close: () => void;
61
+ }
62
+ export interface TourProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {
63
+ /** Whether tour is visible */
64
+ open?: boolean;
65
+ /** Callback when tour closes */
66
+ onClose?: () => void;
67
+ /** Callback when tour finishes (last step completed) */
68
+ onFinish?: () => void;
69
+ /** Tour steps */
70
+ steps: TourStepProps[];
71
+ /** Current step (controlled) */
72
+ current?: number;
73
+ /** Callback when step changes */
74
+ onChange?: (current: number) => void;
75
+ /** Whether to show arrow on popover */
76
+ arrow?: boolean | TourArrowConfig;
77
+ /** Custom close icon */
78
+ closeIcon?: React.ReactNode;
79
+ /** Show mask overlay */
80
+ mask?: boolean | TourMaskConfig;
81
+ /** Disable interaction on highlighted area */
82
+ disabledInteraction?: boolean;
83
+ /** Type affects styling */
84
+ type?: TourType;
85
+ /** Gap between highlight and target */
86
+ gap?: {
87
+ offset?: number | [number, number];
88
+ radius?: number;
89
+ };
90
+ /** Text for prev button */
91
+ prevButtonText?: React.ReactNode;
92
+ /** Text for next button */
93
+ nextButtonText?: React.ReactNode;
94
+ /** Text for finish button */
95
+ finishButtonText?: React.ReactNode;
96
+ /** Text for skip button */
97
+ skipButtonText?: React.ReactNode;
98
+ /** Show skip button */
99
+ showSkip?: boolean;
100
+ /** Show step indicators */
101
+ showIndicators?: boolean;
102
+ /** Close on mask click */
103
+ closeOnMaskClick?: boolean;
104
+ /** Close on escape key */
105
+ closeOnEscape?: boolean;
106
+ /** Scroll target into view */
107
+ scrollIntoViewOptions?: boolean | ScrollIntoViewOptions;
108
+ /** Z-index for tour overlay */
109
+ zIndex?: number;
110
+ /** Custom indicator renderer */
111
+ indicatorsRender?: (current: number, total: number) => React.ReactNode;
112
+ /** Custom action buttons renderer */
113
+ actionsRender?: (originNode: React.ReactNode, info: TourActionInfo) => React.ReactNode;
114
+ /** Rendering container for tour */
115
+ getPopupContainer?: (node: HTMLElement) => HTMLElement;
116
+ /** Semantic class names */
117
+ classNames?: Partial<Record<TourSemanticName, string>>;
118
+ /** Semantic styles */
119
+ styles?: Partial<Record<TourSemanticName, React.CSSProperties>>;
120
+ /** Test ID for testing */
121
+ 'data-testid'?: string;
122
+ }
123
+ export declare const Tour: React.ForwardRefExoticComponent<TourProps & React.RefAttributes<TourRef>>;