@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":"Menu.js","sources":["../../src/components/Menu.tsx"],"sourcesContent":["import React, { createContext, useContext, useState, useCallback, useId } from 'react'\n\n// DaisyUI classes\nconst dMenu = 'd-menu'\nconst dMenuVertical = 'd-menu-vertical'\nconst dMenuHorizontal = 'd-menu-horizontal'\nconst dMenuXs = 'd-menu-xs'\nconst dMenuSm = 'd-menu-sm'\nconst dMenuMd = 'd-menu-md'\nconst dMenuLg = 'd-menu-lg'\nconst dMenuXl = 'd-menu-xl'\nconst dMenuIcon = 'd-menu-icon'\nconst dMenuTitle = 'd-menu-title'\n\nexport type MenuMode = 'vertical' | 'horizontal' | 'inline'\nexport type MenuSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n\nexport interface MenuItem {\n key: string\n label: React.ReactNode\n icon?: React.ReactNode\n disabled?: boolean\n children?: MenuItem[]\n divider?: boolean\n title?: boolean // For section titles\n}\n\nexport interface MenuProps extends Omit<React.HTMLAttributes<HTMLUListElement>, 'onSelect'> {\n /** Menu items (compound pattern) */\n children?: React.ReactNode\n /** Menu items (data-driven pattern) */\n items?: MenuItem[]\n /** Menu display mode */\n mode?: MenuMode\n /** Menu size */\n size?: MenuSize\n /** Controlled selected keys */\n selectedKeys?: string[]\n /** Default selected keys (uncontrolled) */\n defaultSelectedKeys?: string[]\n /** Controlled open submenu keys */\n openKeys?: string[]\n /** Default open submenu keys (uncontrolled) */\n defaultOpenKeys?: string[]\n /** Callback when item is selected */\n onSelect?: (key: string) => void\n /** Callback when submenu open state changes */\n onOpenChange?: (openKeys: string[]) => void\n}\n\nexport interface MenuItemProps extends Omit<React.HTMLAttributes<HTMLAnchorElement>, 'onClick'> {\n children: React.ReactNode\n icon?: React.ReactNode\n disabled?: boolean\n onClick?: () => void\n /** @deprecated Use key and selectedKeys instead */\n active?: boolean\n /** @internal */\n _key?: string\n}\n\nexport interface MenuSubMenuProps extends Omit<React.HTMLAttributes<HTMLLIElement>, 'title'> {\n children: React.ReactNode\n /** Submenu label */\n label?: React.ReactNode\n /** Submenu title (alias for label) */\n title?: React.ReactNode\n icon?: React.ReactNode\n disabled?: boolean\n /** @internal */\n _key?: string\n}\n\nexport interface MenuTitleProps extends React.HTMLAttributes<HTMLLIElement> {\n children: React.ReactNode\n}\n\nexport interface MenuDividerProps extends React.HTMLAttributes<HTMLLIElement> {}\n\ninterface MenuContextValue {\n mode: MenuMode\n selectedKeys: string[]\n openKeys: string[]\n onSelect: (key: string) => void\n onToggleOpen: (key: string) => void\n}\n\nconst MenuContext = createContext<MenuContextValue | null>(null)\n\nfunction useMenuContext() {\n const context = useContext(MenuContext)\n if (!context) {\n throw new Error('Menu components must be used within a Menu')\n }\n return context\n}\n\n// Internal component for rendering data-driven menu items\nfunction renderMenuItem(item: MenuItem, onSelect: (key: string) => void, selectedKeys: string[], openKeys: string[], onToggleOpen: (key: string) => void): React.ReactNode {\n if (item.divider) {\n return <MenuDivider key={item.key} />\n }\n\n if (item.title) {\n return <MenuTitle key={item.key}>{item.label}</MenuTitle>\n }\n\n if (item.children && item.children.length > 0) {\n return (\n <MenuSubMenu key={item.key} _key={item.key} label={item.label} icon={item.icon} disabled={item.disabled}>\n {item.children.map((child) => renderMenuItem(child, onSelect, selectedKeys, openKeys, onToggleOpen))}\n </MenuSubMenu>\n )\n }\n\n return (\n <MenuItem key={item.key} _key={item.key} icon={item.icon} disabled={item.disabled}>\n {item.label}\n </MenuItem>\n )\n}\n\nfunction MenuRoot({\n children,\n items,\n mode = 'vertical',\n size,\n selectedKeys: controlledSelectedKeys,\n defaultSelectedKeys = [],\n openKeys: controlledOpenKeys,\n defaultOpenKeys = [],\n onSelect,\n onOpenChange,\n className = '',\n ...rest\n}: MenuProps) {\n const [internalSelectedKeys, setInternalSelectedKeys] = useState<string[]>(defaultSelectedKeys)\n const [internalOpenKeys, setInternalOpenKeys] = useState<string[]>(defaultOpenKeys)\n\n const selectedKeys = controlledSelectedKeys ?? internalSelectedKeys\n const openKeys = controlledOpenKeys ?? internalOpenKeys\n\n const handleSelect = useCallback(\n (key: string) => {\n if (controlledSelectedKeys === undefined) {\n setInternalSelectedKeys([key])\n }\n onSelect?.(key)\n },\n [controlledSelectedKeys, onSelect]\n )\n\n const handleToggleOpen = useCallback(\n (key: string) => {\n const newOpenKeys = openKeys.includes(key)\n ? openKeys.filter((k) => k !== key)\n : [...openKeys, key]\n\n if (controlledOpenKeys === undefined) {\n setInternalOpenKeys(newOpenKeys)\n }\n onOpenChange?.(newOpenKeys)\n },\n [openKeys, controlledOpenKeys, onOpenChange]\n )\n\n const modeClasses: Record<MenuMode, string> = {\n vertical: dMenuVertical,\n horizontal: dMenuHorizontal,\n inline: dMenuVertical,\n }\n\n const sizeClasses: Record<MenuSize, string> = {\n xs: dMenuXs,\n sm: dMenuSm,\n md: dMenuMd,\n lg: dMenuLg,\n xl: dMenuXl,\n }\n\n const menuClasses = [dMenu, modeClasses[mode], size && sizeClasses[size], className].filter(Boolean).join(' ')\n\n const contextValue = {\n mode,\n selectedKeys,\n openKeys,\n onSelect: handleSelect,\n onToggleOpen: handleToggleOpen,\n }\n\n // Clone children to extract keys\n const cloneChildrenWithKeys = (children: React.ReactNode): React.ReactNode => {\n return React.Children.map(children, (child) => {\n if (React.isValidElement(child)) {\n const childKey = child.key != null ? String(child.key) : undefined\n if (child.type === MenuItem || child.type === MenuSubMenu) {\n return React.cloneElement(child as React.ReactElement<any>, { _key: childKey })\n }\n }\n return child\n })\n }\n\n // Render data-driven items if provided\n const content = items && items.length > 0\n ? items.map((item) => renderMenuItem(item, handleSelect, selectedKeys, openKeys, handleToggleOpen))\n : cloneChildrenWithKeys(children)\n\n return (\n <MenuContext.Provider value={contextValue}>\n <ul className={menuClasses} {...rest}>{content}</ul>\n </MenuContext.Provider>\n )\n}\n\nfunction MenuItem({\n children,\n icon,\n disabled = false,\n onClick,\n active,\n className = '',\n _key,\n ...rest\n}: MenuItemProps) {\n const context = useContext(MenuContext)\n\n // Support both old active prop and new key-based selection\n const isSelected = _key && context ? context.selectedKeys.includes(_key) : active\n\n const handleClick = () => {\n if (disabled) return\n if (_key && context) {\n context.onSelect(_key)\n }\n onClick?.()\n }\n\n const itemClasses = [\n isSelected && 'active bg-primary text-primary-content',\n disabled && 'disabled',\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n return (\n <li>\n <a\n className={itemClasses}\n onClick={handleClick}\n aria-disabled={disabled}\n role=\"menuitem\"\n data-state={isSelected ? 'active' : 'inactive'}\n {...rest}\n >\n {icon && <span className={dMenuIcon}>{icon}</span>}\n {children}\n </a>\n </li>\n )\n}\n\nfunction MenuSubMenu({\n children,\n label,\n title,\n icon,\n disabled = false,\n className = '',\n _key,\n ...rest\n}: MenuSubMenuProps) {\n const context = useMenuContext()\n const isOpen = _key ? context.openKeys.includes(_key) : false\n const submenuId = useId()\n\n // Support both label and title (title as alias for backwards compatibility)\n const displayLabel = label ?? title\n\n const handleToggle = () => {\n if (disabled || !_key) return\n context.onToggleOpen(_key)\n }\n\n const submenuClasses = [disabled && 'disabled', className].filter(Boolean).join(' ')\n\n // For inline mode, use collapsible details/summary\n if (context.mode === 'inline') {\n return (\n <li className={submenuClasses} data-state={isOpen ? 'open' : 'closed'} {...rest}>\n <details open={isOpen}>\n <summary\n onClick={(e) => {\n e.preventDefault()\n handleToggle()\n }}\n aria-expanded={isOpen}\n aria-controls={submenuId}\n aria-disabled={disabled}\n >\n {icon && <span className={dMenuIcon}>{icon}</span>}\n {displayLabel}\n </summary>\n <ul id={submenuId} role=\"menu\">\n {children}\n </ul>\n </details>\n </li>\n )\n }\n\n // For vertical/horizontal, use nested menu (dropdown style)\n return (\n <li className={submenuClasses} data-state={isOpen ? 'open' : 'closed'} {...rest}>\n <details open={isOpen}>\n <summary\n onClick={(e) => {\n e.preventDefault()\n handleToggle()\n }}\n aria-expanded={isOpen}\n aria-controls={submenuId}\n aria-disabled={disabled}\n >\n {icon && <span className={dMenuIcon}>{icon}</span>}\n {displayLabel}\n </summary>\n <ul id={submenuId} role=\"menu\">\n {children}\n </ul>\n </details>\n </li>\n )\n}\n\nfunction MenuTitle({ children, className = '', ...rest }: MenuTitleProps) {\n const titleClasses = [dMenuTitle, className].filter(Boolean).join(' ')\n\n return <li className={titleClasses} {...rest}>{children}</li>\n}\n\nfunction MenuDivider({ className = '', ...rest }: MenuDividerProps) {\n const dividerClasses = ['border-t border-base-300 my-1', className].filter(Boolean).join(' ')\n\n return <li className={dividerClasses} role=\"separator\" {...rest} />\n}\n\nexport const Menu = Object.assign(MenuRoot, {\n Item: MenuItem,\n SubMenu: MenuSubMenu,\n Title: MenuTitle,\n Divider: MenuDivider,\n})\n"],"names":["dMenu","dMenuVertical","dMenuHorizontal","dMenuXs","dMenuSm","dMenuMd","dMenuLg","dMenuXl","dMenuIcon","dMenuTitle","MenuContext","createContext","useMenuContext","context","useContext","renderMenuItem","item","onSelect","selectedKeys","openKeys","onToggleOpen","jsx","MenuDivider","MenuTitle","MenuSubMenu","child","MenuItem","MenuRoot","children","items","mode","size","controlledSelectedKeys","defaultSelectedKeys","controlledOpenKeys","defaultOpenKeys","onOpenChange","className","rest","internalSelectedKeys","setInternalSelectedKeys","useState","internalOpenKeys","setInternalOpenKeys","handleSelect","useCallback","key","handleToggleOpen","newOpenKeys","k","modeClasses","sizeClasses","menuClasses","contextValue","cloneChildrenWithKeys","React","childKey","content","icon","disabled","onClick","active","_key","isSelected","handleClick","itemClasses","jsxs","label","title","isOpen","submenuId","useId","displayLabel","handleToggle","submenuClasses","e","titleClasses","dividerClasses","Menu"],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { default as React } from 'react';
2
+ export interface MessageConfig {
3
+ duration?: number;
4
+ key?: string;
5
+ icon?: React.ReactNode;
6
+ className?: string;
7
+ style?: React.CSSProperties;
8
+ 'data-testid'?: string;
9
+ onClick?: () => void;
10
+ onClose?: () => void;
11
+ }
12
+ export declare class MessageManager {
13
+ success(content: React.ReactNode, config?: MessageConfig): string;
14
+ error(content: React.ReactNode, config?: MessageConfig): string;
15
+ info(content: React.ReactNode, config?: MessageConfig): string;
16
+ warning(content: React.ReactNode, config?: MessageConfig): string;
17
+ loading(content: React.ReactNode, config?: MessageConfig): string;
18
+ destroy(id?: string): void;
19
+ }
20
+ export declare const message: MessageManager;
@@ -0,0 +1,57 @@
1
+ import { jsx as s } from "react/jsx-runtime";
2
+ import { notification as o } from "./Notification.js";
3
+ const r = "d-loading", t = "d-loading-spinner", i = "d-loading-sm";
4
+ class c {
5
+ success(n, e) {
6
+ return o.open({
7
+ message: n,
8
+ type: "success",
9
+ variant: "compact",
10
+ ...e
11
+ });
12
+ }
13
+ error(n, e) {
14
+ return o.open({
15
+ message: n,
16
+ type: "error",
17
+ variant: "compact",
18
+ ...e
19
+ });
20
+ }
21
+ info(n, e) {
22
+ return o.open({
23
+ message: n,
24
+ type: "info",
25
+ variant: "compact",
26
+ ...e
27
+ });
28
+ }
29
+ warning(n, e) {
30
+ return o.open({
31
+ message: n,
32
+ type: "warning",
33
+ variant: "compact",
34
+ ...e
35
+ });
36
+ }
37
+ loading(n, e) {
38
+ const a = /* @__PURE__ */ s("span", { className: `${r} ${t} ${i}` });
39
+ return o.open({
40
+ message: n,
41
+ type: "info",
42
+ variant: "compact",
43
+ duration: 0,
44
+ icon: a,
45
+ ...e
46
+ });
47
+ }
48
+ destroy(n) {
49
+ n ? o.close(n) : o.destroy();
50
+ }
51
+ }
52
+ const d = new c();
53
+ export {
54
+ c as MessageManager,
55
+ d as message
56
+ };
57
+ //# sourceMappingURL=Message.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Message.js","sources":["../../src/components/Message.tsx"],"sourcesContent":["import React from 'react'\nimport { notification } from './Notification'\n\n// DaisyUI classes\nconst dLoading = 'd-loading'\nconst dLoadingSpinner = 'd-loading-spinner'\nconst dLoadingSm = 'd-loading-sm'\n\nexport interface MessageConfig {\n duration?: number\n key?: string\n icon?: React.ReactNode\n className?: string\n style?: React.CSSProperties\n 'data-testid'?: string\n onClick?: () => void\n onClose?: () => void\n}\n\nexport class MessageManager {\n success(content: React.ReactNode, config?: MessageConfig) {\n return notification.open({\n message: content,\n type: 'success',\n variant: 'compact',\n ...config,\n })\n }\n\n error(content: React.ReactNode, config?: MessageConfig) {\n return notification.open({\n message: content,\n type: 'error',\n variant: 'compact',\n ...config,\n })\n }\n\n info(content: React.ReactNode, config?: MessageConfig) {\n return notification.open({\n message: content,\n type: 'info',\n variant: 'compact',\n ...config,\n })\n }\n\n warning(content: React.ReactNode, config?: MessageConfig) {\n return notification.open({\n message: content,\n type: 'warning',\n variant: 'compact',\n ...config,\n })\n }\n\n loading(content: React.ReactNode, config?: MessageConfig) {\n const loadingIcon = (\n <span className={`${dLoading} ${dLoadingSpinner} ${dLoadingSm}`} />\n )\n return notification.open({\n message: content,\n type: 'info',\n variant: 'compact',\n duration: 0,\n icon: loadingIcon,\n ...config,\n })\n }\n\n destroy(id?: string) {\n if (id) {\n notification.close(id)\n } else {\n notification.destroy()\n }\n }\n}\n\nexport const message = new MessageManager()\n"],"names":["dLoading","dLoadingSpinner","dLoadingSm","MessageManager","content","config","notification","loadingIcon","jsx","id","message"],"mappings":";;AAIA,MAAMA,IAAW,aACXC,IAAkB,qBAClBC,IAAa;AAaZ,MAAMC,EAAe;AAAA,EAC1B,QAAQC,GAA0BC,GAAwB;AACxD,WAAOC,EAAa,KAAK;AAAA,MACvB,SAASF;AAAA,MACT,MAAM;AAAA,MACN,SAAS;AAAA,MACT,GAAGC;AAAA,IAAA,CACJ;AAAA,EACH;AAAA,EAEA,MAAMD,GAA0BC,GAAwB;AACtD,WAAOC,EAAa,KAAK;AAAA,MACvB,SAASF;AAAA,MACT,MAAM;AAAA,MACN,SAAS;AAAA,MACT,GAAGC;AAAA,IAAA,CACJ;AAAA,EACH;AAAA,EAEA,KAAKD,GAA0BC,GAAwB;AACrD,WAAOC,EAAa,KAAK;AAAA,MACvB,SAASF;AAAA,MACT,MAAM;AAAA,MACN,SAAS;AAAA,MACT,GAAGC;AAAA,IAAA,CACJ;AAAA,EACH;AAAA,EAEA,QAAQD,GAA0BC,GAAwB;AACxD,WAAOC,EAAa,KAAK;AAAA,MACvB,SAASF;AAAA,MACT,MAAM;AAAA,MACN,SAAS;AAAA,MACT,GAAGC;AAAA,IAAA,CACJ;AAAA,EACH;AAAA,EAEA,QAAQD,GAA0BC,GAAwB;AACxD,UAAME,IACJ,gBAAAC,EAAC,QAAA,EAAK,WAAW,GAAGR,CAAQ,IAAIC,CAAe,IAAIC,CAAU,GAAA,CAAI;AAEnE,WAAOI,EAAa,KAAK;AAAA,MACvB,SAASF;AAAA,MACT,MAAM;AAAA,MACN,SAAS;AAAA,MACT,UAAU;AAAA,MACV,MAAMG;AAAA,MACN,GAAGF;AAAA,IAAA,CACJ;AAAA,EACH;AAAA,EAEA,QAAQI,GAAa;AACnB,IAAIA,IACFH,EAAa,MAAMG,CAAE,IAErBH,EAAa,QAAA;AAAA,EAEjB;AACF;AAEO,MAAMI,IAAU,IAAIP,EAAA;"}
@@ -0,0 +1,57 @@
1
+ import { default as React } from 'react';
2
+ export type ModalPosition = 'top' | 'middle' | 'bottom';
3
+ export type ModalAlign = 'start' | 'end';
4
+ export type Breakpoint = 'base' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';
5
+ export type ResponsivePosition = Partial<Record<Breakpoint, ModalPosition>>;
6
+ export interface ModalProps extends Omit<React.HTMLAttributes<HTMLDialogElement>, 'title'> {
7
+ children: React.ReactNode;
8
+ title?: React.ReactNode;
9
+ footer?: React.ReactNode;
10
+ open?: boolean;
11
+ onOk?: () => void | Promise<void>;
12
+ onCancel?: () => void;
13
+ okText?: string;
14
+ cancelText?: string;
15
+ maskClosable?: boolean;
16
+ closable?: boolean;
17
+ /** Modal position - can be a single value or responsive object */
18
+ position?: ModalPosition | ResponsivePosition;
19
+ align?: ModalAlign;
20
+ /** Width of the modal box */
21
+ width?: number | string;
22
+ /** Center the modal vertically */
23
+ centered?: boolean;
24
+ /** Callback when modal is closed */
25
+ onClose?: () => void;
26
+ /** Where to place initial focus: 'ok', 'cancel', or 'close' button */
27
+ initialFocus?: 'ok' | 'cancel' | 'close';
28
+ /** Use alertdialog role for urgent messages */
29
+ alertDialog?: boolean;
30
+ }
31
+ export interface ModalFuncProps {
32
+ title?: React.ReactNode;
33
+ content?: React.ReactNode;
34
+ onOk?: () => void | Promise<void>;
35
+ onCancel?: () => void;
36
+ okText?: string;
37
+ cancelText?: string;
38
+ type?: 'info' | 'success' | 'warning' | 'error';
39
+ }
40
+ export declare function Modal({ children, title, footer, open, onOk, onCancel, okText, cancelText, maskClosable, closable, position, align, width, centered, onClose, initialFocus, alertDialog, className, ...rest }: ModalProps): import("react/jsx-runtime").JSX.Element;
41
+ export declare namespace Modal {
42
+ var confirm: (config: ModalFuncProps) => {
43
+ destroy: () => void;
44
+ };
45
+ var info: (config: ModalFuncProps) => {
46
+ destroy: () => void;
47
+ };
48
+ var success: (config: ModalFuncProps) => {
49
+ destroy: () => void;
50
+ };
51
+ var warning: (config: ModalFuncProps) => {
52
+ destroy: () => void;
53
+ };
54
+ var error: (config: ModalFuncProps) => {
55
+ destroy: () => void;
56
+ };
57
+ }
@@ -0,0 +1,338 @@
1
+ import { jsxs as m, jsx as t, Fragment as oe } from "react/jsx-runtime";
2
+ import $, { useRef as w, useId as z, useEffect as P } from "react";
3
+ import { createRoot as ne } from "react-dom/client";
4
+ const re = "d-modal", D = "d-modal-top", K = "d-modal-middle", F = "d-modal-bottom", se = "d-modal-start", le = "d-modal-end", ae = "d-modal-box", H = "d-modal-action", de = "d-modal-backdrop", b = "d-btn", T = "d-btn-primary", q = "d-btn-error", ce = "d-alert", ie = "d-alert-info", me = "d-alert-success", ue = "d-alert-warning", he = "d-alert-error";
5
+ function u({
6
+ children: e,
7
+ title: n,
8
+ footer: s,
9
+ open: l = !1,
10
+ onOk: a,
11
+ onCancel: d,
12
+ okText: C = "OK",
13
+ cancelText: c = "Cancel",
14
+ maskClosable: h = !0,
15
+ closable: p = !0,
16
+ position: r,
17
+ align: f,
18
+ width: i,
19
+ centered: g,
20
+ onClose: N,
21
+ initialFocus: v,
22
+ alertDialog: G = !1,
23
+ className: J = "",
24
+ ...Q
25
+ }) {
26
+ const M = w(null), A = w(null), E = w(null), R = w(null), j = w(null), [B, L] = $.useState(!1), O = z(), S = z(), x = N || d;
27
+ P(() => {
28
+ const o = M.current;
29
+ o && (l ? o.open || (j.current = document.activeElement, o.showModal(), v && setTimeout(() => {
30
+ switch (v) {
31
+ case "ok":
32
+ A.current?.focus();
33
+ break;
34
+ case "cancel":
35
+ E.current?.focus();
36
+ break;
37
+ case "close":
38
+ R.current?.focus();
39
+ break;
40
+ }
41
+ }, 0)) : o.open && (o.close(), j.current?.focus()));
42
+ }, [l, v]), P(() => {
43
+ const o = M.current;
44
+ if (!o) return;
45
+ const y = () => {
46
+ x?.();
47
+ };
48
+ return o.addEventListener("close", y), () => {
49
+ o.removeEventListener("close", y);
50
+ };
51
+ }, [x]);
52
+ const W = {
53
+ top: D,
54
+ middle: K,
55
+ bottom: F
56
+ }, U = {
57
+ base: {
58
+ top: D,
59
+ middle: K,
60
+ bottom: F
61
+ },
62
+ sm: {
63
+ top: "sm:modal-top",
64
+ middle: "sm:modal-middle",
65
+ bottom: "sm:modal-bottom"
66
+ },
67
+ md: {
68
+ top: "md:modal-top",
69
+ middle: "md:modal-middle",
70
+ bottom: "md:modal-bottom"
71
+ },
72
+ lg: {
73
+ top: "lg:modal-top",
74
+ middle: "lg:modal-middle",
75
+ bottom: "lg:modal-bottom"
76
+ },
77
+ xl: {
78
+ top: "xl:modal-top",
79
+ middle: "xl:modal-middle",
80
+ bottom: "xl:modal-bottom"
81
+ },
82
+ "2xl": {
83
+ top: "2xl:modal-top",
84
+ middle: "2xl:modal-middle",
85
+ bottom: "2xl:modal-bottom"
86
+ }
87
+ }, V = {
88
+ start: se,
89
+ end: le
90
+ }, X = [
91
+ re,
92
+ ...(() => {
93
+ if (g)
94
+ return [W.middle];
95
+ if (!r)
96
+ return [];
97
+ if (typeof r == "string")
98
+ return [W[r]];
99
+ const o = [];
100
+ for (const [y, I] of Object.entries(r))
101
+ I && o.push(U[y][I]);
102
+ return o;
103
+ })(),
104
+ f && V[f],
105
+ J
106
+ ].filter(Boolean).join(" "), Y = async () => {
107
+ if (a) {
108
+ L(!0);
109
+ try {
110
+ await a(), L(!1);
111
+ } catch (o) {
112
+ throw L(!1), o;
113
+ }
114
+ }
115
+ }, Z = () => {
116
+ h && x && x();
117
+ }, _ = i ? { width: typeof i == "number" ? `${i}px` : i, maxWidth: "90vw" } : {}, ee = !s && (a || d), te = s != null;
118
+ return /* @__PURE__ */ m(
119
+ "dialog",
120
+ {
121
+ ref: M,
122
+ role: G ? "alertdialog" : "dialog",
123
+ "aria-modal": "true",
124
+ className: X,
125
+ "data-state": l ? "open" : "closed",
126
+ "aria-labelledby": n ? O : void 0,
127
+ "aria-describedby": S,
128
+ ...Q,
129
+ children: [
130
+ /* @__PURE__ */ m("div", { className: ae, style: _, children: [
131
+ n && /* @__PURE__ */ t("h3", { id: O, className: "text-lg font-bold mb-4", children: n }),
132
+ /* @__PURE__ */ t("div", { id: S, className: "py-4", children: e }),
133
+ ee && /* @__PURE__ */ m("div", { className: H, children: [
134
+ d && /* @__PURE__ */ t("button", { ref: E, className: b, onClick: d, children: c }),
135
+ a && /* @__PURE__ */ t(
136
+ "button",
137
+ {
138
+ ref: A,
139
+ className: `${b} ${T} ${B ? "loading" : ""}`,
140
+ onClick: Y,
141
+ disabled: B,
142
+ "aria-busy": B || void 0,
143
+ children: C
144
+ }
145
+ )
146
+ ] }),
147
+ te && /* @__PURE__ */ t("div", { className: H, children: s })
148
+ ] }),
149
+ p && h && /* @__PURE__ */ t("form", { method: "dialog", className: de, children: /* @__PURE__ */ t("button", { ref: R, onClick: Z, children: /* @__PURE__ */ t("span", { className: "sr-only", children: "Close modal" }) }) })
150
+ ]
151
+ }
152
+ );
153
+ }
154
+ function k(e) {
155
+ const n = document.createElement("div");
156
+ document.body.appendChild(n);
157
+ const s = ne(n), l = () => {
158
+ s.unmount(), n.parentNode && n.parentNode.removeChild(n);
159
+ }, a = () => {
160
+ const [d, C] = $.useState(!0), [c, h] = $.useState(!1), p = () => {
161
+ C(!1), setTimeout(l, 300);
162
+ }, r = async () => {
163
+ if (e.onOk) {
164
+ h(!0);
165
+ try {
166
+ await e.onOk(), p();
167
+ } catch {
168
+ h(!1);
169
+ }
170
+ } else
171
+ p();
172
+ }, f = () => {
173
+ e.onCancel?.(), p();
174
+ }, i = () => {
175
+ switch (e.type) {
176
+ case "success":
177
+ return me;
178
+ case "warning":
179
+ return ue;
180
+ case "error":
181
+ return he;
182
+ case "info":
183
+ default:
184
+ return ie;
185
+ }
186
+ }, g = () => {
187
+ switch (e.type) {
188
+ case "success":
189
+ return /* @__PURE__ */ t(
190
+ "svg",
191
+ {
192
+ xmlns: "http://www.w3.org/2000/svg",
193
+ className: "stroke-current shrink-0 h-6 w-6",
194
+ fill: "none",
195
+ viewBox: "0 0 24 24",
196
+ "aria-hidden": "true",
197
+ children: /* @__PURE__ */ t(
198
+ "path",
199
+ {
200
+ strokeLinecap: "round",
201
+ strokeLinejoin: "round",
202
+ strokeWidth: "2",
203
+ d: "M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z"
204
+ }
205
+ )
206
+ }
207
+ );
208
+ case "warning":
209
+ return /* @__PURE__ */ t(
210
+ "svg",
211
+ {
212
+ xmlns: "http://www.w3.org/2000/svg",
213
+ className: "stroke-current shrink-0 h-6 w-6",
214
+ fill: "none",
215
+ viewBox: "0 0 24 24",
216
+ "aria-hidden": "true",
217
+ children: /* @__PURE__ */ t(
218
+ "path",
219
+ {
220
+ strokeLinecap: "round",
221
+ strokeLinejoin: "round",
222
+ strokeWidth: "2",
223
+ d: "M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z"
224
+ }
225
+ )
226
+ }
227
+ );
228
+ case "error":
229
+ return /* @__PURE__ */ t(
230
+ "svg",
231
+ {
232
+ xmlns: "http://www.w3.org/2000/svg",
233
+ className: "stroke-current shrink-0 h-6 w-6",
234
+ fill: "none",
235
+ viewBox: "0 0 24 24",
236
+ "aria-hidden": "true",
237
+ children: /* @__PURE__ */ t(
238
+ "path",
239
+ {
240
+ strokeLinecap: "round",
241
+ strokeLinejoin: "round",
242
+ strokeWidth: "2",
243
+ d: "M10 14l2-2m0 0l2-2m-2 2l-2-2m2 2l2 2m7-2a9 9 0 11-18 0 9 9 0 0118 0z"
244
+ }
245
+ )
246
+ }
247
+ );
248
+ case "info":
249
+ default:
250
+ return /* @__PURE__ */ t(
251
+ "svg",
252
+ {
253
+ xmlns: "http://www.w3.org/2000/svg",
254
+ fill: "none",
255
+ viewBox: "0 0 24 24",
256
+ className: "stroke-current shrink-0 w-6 h-6",
257
+ "aria-hidden": "true",
258
+ children: /* @__PURE__ */ t(
259
+ "path",
260
+ {
261
+ strokeLinecap: "round",
262
+ strokeLinejoin: "round",
263
+ strokeWidth: "2",
264
+ d: "M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"
265
+ }
266
+ )
267
+ }
268
+ );
269
+ }
270
+ }, N = e.type === "warning" || e.type === "error";
271
+ return /* @__PURE__ */ m(
272
+ u,
273
+ {
274
+ open: d,
275
+ onOk: e.showCancel ? void 0 : r,
276
+ onCancel: f,
277
+ alertDialog: N,
278
+ title: e.type ? /* @__PURE__ */ m("div", { className: `${ce} ${i()}`, children: [
279
+ g(),
280
+ /* @__PURE__ */ t("div", { children: e.title && /* @__PURE__ */ t("h3", { className: "font-bold", children: e.title }) })
281
+ ] }) : e.title,
282
+ okText: e.okText,
283
+ cancelText: e.cancelText,
284
+ footer: e.showCancel ? /* @__PURE__ */ m(oe, { children: [
285
+ /* @__PURE__ */ t("button", { className: b, onClick: f, children: e.cancelText || "Cancel" }),
286
+ /* @__PURE__ */ t(
287
+ "button",
288
+ {
289
+ className: `${b} ${e.type === "error" ? q : T} ${c ? "loading" : ""}`,
290
+ onClick: r,
291
+ disabled: c,
292
+ children: e.okText || "OK"
293
+ }
294
+ )
295
+ ] }) : /* @__PURE__ */ t(
296
+ "button",
297
+ {
298
+ className: `${b} ${e.type === "error" ? q : T} ${c ? "loading" : ""}`,
299
+ onClick: r,
300
+ disabled: c,
301
+ children: e.okText || "OK"
302
+ }
303
+ ),
304
+ children: [
305
+ e.type && e.content && /* @__PURE__ */ t("div", { className: "text-sm", children: e.content }),
306
+ !e.type && e.content
307
+ ]
308
+ }
309
+ );
310
+ };
311
+ return s.render(/* @__PURE__ */ t(a, {})), {
312
+ destroy: l
313
+ };
314
+ }
315
+ function pe(e) {
316
+ return k({ ...e, showCancel: !0 });
317
+ }
318
+ function fe(e) {
319
+ return k({ ...e, type: "info", showCancel: !1 });
320
+ }
321
+ function we(e) {
322
+ return k({ ...e, type: "success", showCancel: !1 });
323
+ }
324
+ function be(e) {
325
+ return k({ ...e, type: "warning", showCancel: !1 });
326
+ }
327
+ function ke(e) {
328
+ return k({ ...e, type: "error", showCancel: !1 });
329
+ }
330
+ u.confirm = pe;
331
+ u.info = fe;
332
+ u.success = we;
333
+ u.warning = be;
334
+ u.error = ke;
335
+ export {
336
+ u as Modal
337
+ };
338
+ //# sourceMappingURL=Modal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Modal.js","sources":["../../src/components/Modal.tsx"],"sourcesContent":["import React, { useEffect, useRef, useId } from 'react'\nimport { createRoot } from 'react-dom/client'\n\n// DaisyUI classes\nconst dModal = 'd-modal'\nconst dModalTop = 'd-modal-top'\nconst dModalMiddle = 'd-modal-middle'\nconst dModalBottom = 'd-modal-bottom'\nconst dModalStart = 'd-modal-start'\nconst dModalEnd = 'd-modal-end'\nconst dModalBox = 'd-modal-box'\nconst dModalAction = 'd-modal-action'\nconst dModalBackdrop = 'd-modal-backdrop'\nconst dBtn = 'd-btn'\nconst dBtnPrimary = 'd-btn-primary'\nconst dBtnError = 'd-btn-error'\nconst dAlert = 'd-alert'\nconst dAlertInfo = 'd-alert-info'\nconst dAlertSuccess = 'd-alert-success'\nconst dAlertWarning = 'd-alert-warning'\nconst dAlertError = 'd-alert-error'\n\nexport type ModalPosition = 'top' | 'middle' | 'bottom'\nexport type ModalAlign = 'start' | 'end'\nexport type Breakpoint = 'base' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'\n\nexport type ResponsivePosition = Partial<Record<Breakpoint, ModalPosition>>\n\nexport interface ModalProps extends Omit<React.HTMLAttributes<HTMLDialogElement>, 'title'> {\n children: React.ReactNode\n title?: React.ReactNode\n footer?: React.ReactNode\n open?: boolean\n onOk?: () => void | Promise<void>\n onCancel?: () => void\n okText?: string\n cancelText?: string\n maskClosable?: boolean\n closable?: boolean\n /** Modal position - can be a single value or responsive object */\n position?: ModalPosition | ResponsivePosition\n align?: ModalAlign\n /** Width of the modal box */\n width?: number | string\n /** Center the modal vertically */\n centered?: boolean\n /** Callback when modal is closed */\n onClose?: () => void\n /** Where to place initial focus: 'ok', 'cancel', or 'close' button */\n initialFocus?: 'ok' | 'cancel' | 'close'\n /** Use alertdialog role for urgent messages */\n alertDialog?: boolean\n}\n\nexport interface ModalFuncProps {\n title?: React.ReactNode\n content?: React.ReactNode\n onOk?: () => void | Promise<void>\n onCancel?: () => void\n okText?: string\n cancelText?: string\n type?: 'info' | 'success' | 'warning' | 'error'\n}\n\nexport function Modal({\n children,\n title,\n footer,\n open = false,\n onOk,\n onCancel,\n okText = 'OK',\n cancelText = 'Cancel',\n maskClosable = true,\n closable = true,\n position,\n align,\n width,\n centered,\n onClose,\n initialFocus,\n alertDialog = false,\n className = '',\n ...rest\n}: ModalProps) {\n const dialogRef = useRef<HTMLDialogElement>(null)\n const okButtonRef = useRef<HTMLButtonElement>(null)\n const cancelButtonRef = useRef<HTMLButtonElement>(null)\n const closeButtonRef = useRef<HTMLButtonElement>(null)\n const previousActiveElement = useRef<HTMLElement | null>(null)\n const [loading, setLoading] = React.useState(false)\n const titleId = useId()\n const contentId = useId()\n\n // Handle close - use onClose if provided, otherwise onCancel\n const closeHandler = onClose || onCancel\n\n useEffect(() => {\n const dialog = dialogRef.current\n if (!dialog) return\n\n if (open) {\n if (!dialog.open) {\n // Save currently focused element for restoration\n previousActiveElement.current = document.activeElement as HTMLElement\n dialog.showModal()\n\n // Handle custom initial focus placement\n if (initialFocus) {\n setTimeout(() => {\n switch (initialFocus) {\n case 'ok':\n okButtonRef.current?.focus()\n break\n case 'cancel':\n cancelButtonRef.current?.focus()\n break\n case 'close':\n closeButtonRef.current?.focus()\n break\n }\n }, 0)\n }\n }\n } else {\n if (dialog.open) {\n dialog.close()\n // Restore focus to previously focused element\n previousActiveElement.current?.focus()\n }\n }\n }, [open, initialFocus])\n\n useEffect(() => {\n const dialog = dialogRef.current\n if (!dialog) return\n\n const onDialogClose = () => {\n closeHandler?.()\n }\n\n dialog.addEventListener('close', onDialogClose)\n return () => {\n dialog.removeEventListener('close', onDialogClose)\n }\n }, [closeHandler])\n\n // Static class mappings for positions (no interpolation per qa.md)\n const positionClasses: Record<ModalPosition, string> = {\n top: dModalTop,\n middle: dModalMiddle,\n bottom: dModalBottom,\n }\n\n // Responsive position class mappings for each breakpoint\n const responsivePositionClasses: Record<Breakpoint, Record<ModalPosition, string>> = {\n base: {\n top: dModalTop,\n middle: dModalMiddle,\n bottom: dModalBottom,\n },\n sm: {\n top: 'sm:modal-top',\n middle: 'sm:modal-middle',\n bottom: 'sm:modal-bottom',\n },\n md: {\n top: 'md:modal-top',\n middle: 'md:modal-middle',\n bottom: 'md:modal-bottom',\n },\n lg: {\n top: 'lg:modal-top',\n middle: 'lg:modal-middle',\n bottom: 'lg:modal-bottom',\n },\n xl: {\n top: 'xl:modal-top',\n middle: 'xl:modal-middle',\n bottom: 'xl:modal-bottom',\n },\n '2xl': {\n top: '2xl:modal-top',\n middle: '2xl:modal-middle',\n bottom: '2xl:modal-bottom',\n },\n }\n\n const alignClasses: Record<ModalAlign, string> = {\n start: dModalStart,\n end: dModalEnd,\n }\n\n // Build position classes - handle both simple and responsive values\n const getPositionClasses = (): string[] => {\n // centered is an alias for position=\"middle\"\n if (centered) {\n return [positionClasses.middle]\n }\n\n if (!position) {\n return []\n }\n\n // Simple string position\n if (typeof position === 'string') {\n return [positionClasses[position]]\n }\n\n // Responsive object position\n const classes: string[] = []\n for (const [breakpoint, pos] of Object.entries(position) as [Breakpoint, ModalPosition][]) {\n if (pos) {\n classes.push(responsivePositionClasses[breakpoint][pos])\n }\n }\n return classes\n }\n\n const classes = [\n dModal,\n ...getPositionClasses(),\n align && alignClasses[align],\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n const handleOk = async () => {\n if (onOk) {\n setLoading(true)\n try {\n await onOk()\n setLoading(false)\n } catch (error) {\n setLoading(false)\n throw error\n }\n }\n }\n\n const handleBackdropClick = () => {\n if (maskClosable && closeHandler) {\n closeHandler()\n }\n }\n\n // Calculate modal-box style for custom width\n const modalBoxStyle: React.CSSProperties = width\n ? { width: typeof width === 'number' ? `${width}px` : width, maxWidth: '90vw' }\n : {}\n\n // Render default footer if no custom footer provided and either onOk or onCancel exists\n const shouldRenderDefaultFooter = !footer && (onOk || onCancel)\n const shouldRenderCustomFooter = footer !== null && footer !== undefined\n\n return (\n <dialog\n ref={dialogRef}\n role={alertDialog ? 'alertdialog' : 'dialog'}\n aria-modal=\"true\"\n className={classes}\n data-state={open ? 'open' : 'closed'}\n aria-labelledby={title ? titleId : undefined}\n aria-describedby={contentId}\n {...rest}\n >\n <div className={dModalBox} style={modalBoxStyle}>\n {title && (\n <h3 id={titleId} className=\"text-lg font-bold mb-4\">\n {title}\n </h3>\n )}\n <div id={contentId} className=\"py-4\">\n {children}\n </div>\n {shouldRenderDefaultFooter && (\n <div className={dModalAction}>\n {onCancel && (\n <button ref={cancelButtonRef} className={dBtn} onClick={onCancel}>\n {cancelText}\n </button>\n )}\n {onOk && (\n <button\n ref={okButtonRef}\n className={`${dBtn} ${dBtnPrimary} ${loading ? 'loading' : ''}`}\n onClick={handleOk}\n disabled={loading}\n aria-busy={loading || undefined}\n >\n {okText}\n </button>\n )}\n </div>\n )}\n {shouldRenderCustomFooter && <div className={dModalAction}>{footer}</div>}\n </div>\n {closable && maskClosable && (\n <form method=\"dialog\" className={dModalBackdrop}>\n <button ref={closeButtonRef} onClick={handleBackdropClick}>\n <span className=\"sr-only\">Close modal</span>\n </button>\n </form>\n )}\n </dialog>\n )\n}\n\nfunction createModal(config: ModalFuncProps & { showCancel?: boolean }) {\n const div = document.createElement('div')\n document.body.appendChild(div)\n const root = createRoot(div)\n\n const destroy = () => {\n root.unmount()\n if (div.parentNode) {\n div.parentNode.removeChild(div)\n }\n }\n\n const ModalContent = () => {\n const [open, setOpen] = React.useState(true)\n const [loading, setLoading] = React.useState(false)\n\n const handleClose = () => {\n setOpen(false)\n setTimeout(destroy, 300) // Wait for animation\n }\n\n const handleOk = async () => {\n if (config.onOk) {\n setLoading(true)\n try {\n await config.onOk()\n handleClose()\n } catch (error) {\n setLoading(false)\n }\n } else {\n handleClose()\n }\n }\n\n const handleCancel = () => {\n config.onCancel?.()\n handleClose()\n }\n\n const getAlertClass = () => {\n switch (config.type) {\n case 'success':\n return dAlertSuccess\n case 'warning':\n return dAlertWarning\n case 'error':\n return dAlertError\n case 'info':\n default:\n return dAlertInfo\n }\n }\n\n const getIcon = () => {\n switch (config.type) {\n case 'success':\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"stroke-current shrink-0 h-6 w-6\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"2\"\n d=\"M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z\"\n />\n </svg>\n )\n case 'warning':\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"stroke-current shrink-0 h-6 w-6\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"2\"\n d=\"M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z\"\n />\n </svg>\n )\n case 'error':\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"stroke-current shrink-0 h-6 w-6\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"2\"\n d=\"M10 14l2-2m0 0l2-2m-2 2l-2-2m2 2l2 2m7-2a9 9 0 11-18 0 9 9 0 0118 0z\"\n />\n </svg>\n )\n case 'info':\n default:\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n className=\"stroke-current shrink-0 w-6 h-6\"\n aria-hidden=\"true\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"2\"\n d=\"M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n ></path>\n </svg>\n )\n }\n }\n\n // Use alertdialog role for warning/error types\n const isAlert = config.type === 'warning' || config.type === 'error'\n\n return (\n <Modal\n open={open}\n onOk={config.showCancel ? undefined : handleOk}\n onCancel={handleCancel}\n alertDialog={isAlert}\n title={\n config.type ? (\n <div className={`${dAlert} ${getAlertClass()}`}>\n {getIcon()}\n <div>\n {config.title && <h3 className=\"font-bold\">{config.title}</h3>}\n </div>\n </div>\n ) : (\n config.title\n )\n }\n okText={config.okText}\n cancelText={config.cancelText}\n footer={\n config.showCancel ? (\n <>\n <button className={dBtn} onClick={handleCancel}>\n {config.cancelText || 'Cancel'}\n </button>\n <button\n className={`${dBtn} ${config.type === 'error' ? dBtnError : dBtnPrimary} ${loading ? 'loading' : ''}`}\n onClick={handleOk}\n disabled={loading}\n >\n {config.okText || 'OK'}\n </button>\n </>\n ) : (\n <button\n className={`${dBtn} ${config.type === 'error' ? dBtnError : dBtnPrimary} ${loading ? 'loading' : ''}`}\n onClick={handleOk}\n disabled={loading}\n >\n {config.okText || 'OK'}\n </button>\n )\n }\n >\n {config.type && config.content && <div className=\"text-sm\">{config.content}</div>}\n {!config.type && config.content}\n </Modal>\n )\n }\n\n root.render(<ModalContent />)\n\n return {\n destroy,\n }\n}\n\nfunction confirm(config: ModalFuncProps) {\n return createModal({ ...config, showCancel: true })\n}\n\nfunction info(config: ModalFuncProps) {\n return createModal({ ...config, type: 'info', showCancel: false })\n}\n\nfunction success(config: ModalFuncProps) {\n return createModal({ ...config, type: 'success', showCancel: false })\n}\n\nfunction warning(config: ModalFuncProps) {\n return createModal({ ...config, type: 'warning', showCancel: false })\n}\n\nfunction error(config: ModalFuncProps) {\n return createModal({ ...config, type: 'error', showCancel: false })\n}\n\nModal.confirm = confirm\nModal.info = info\nModal.success = success\nModal.warning = warning\nModal.error = error\n"],"names":["dModal","dModalTop","dModalMiddle","dModalBottom","dModalStart","dModalEnd","dModalBox","dModalAction","dModalBackdrop","dBtn","dBtnPrimary","dBtnError","dAlert","dAlertInfo","dAlertSuccess","dAlertWarning","dAlertError","Modal","children","title","footer","open","onOk","onCancel","okText","cancelText","maskClosable","closable","position","align","width","centered","onClose","initialFocus","alertDialog","className","rest","dialogRef","useRef","okButtonRef","cancelButtonRef","closeButtonRef","previousActiveElement","loading","setLoading","React","titleId","useId","contentId","closeHandler","useEffect","dialog","onDialogClose","positionClasses","responsivePositionClasses","alignClasses","classes","breakpoint","pos","handleOk","error","handleBackdropClick","modalBoxStyle","shouldRenderDefaultFooter","shouldRenderCustomFooter","jsxs","jsx","createModal","config","div","root","createRoot","destroy","ModalContent","setOpen","handleClose","handleCancel","getAlertClass","getIcon","isAlert","Fragment","confirm","info","success","warning"],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import { default as React } from 'react';
2
+ export type CalendarEvent = {
3
+ date: Date;
4
+ title: string;
5
+ color: string;
6
+ strikethrough?: boolean;
7
+ style?: React.CSSProperties;
8
+ };
9
+ export type CalendarLocale = {
10
+ locale: string;
11
+ daysShort: string[];
12
+ monthsLong: string[];
13
+ moreText: string;
14
+ formatTime?: (date: Date) => string;
15
+ };
16
+ export interface MonthCalendarProps<T extends CalendarEvent = CalendarEvent> extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {
17
+ date?: Date;
18
+ events?: T[];
19
+ onEventClick?: (event: T) => void;
20
+ onDayClick?: (date: Date) => void;
21
+ locale?: CalendarLocale;
22
+ allowPastInteraction?: boolean;
23
+ maxEventsPerDay?: number;
24
+ onMoreEventsClick?: (date: Date, events: T[]) => void;
25
+ header?: boolean;
26
+ daySelector?: boolean;
27
+ ellipsis?: boolean;
28
+ }
29
+ export declare const MonthCalendar: <T extends CalendarEvent = CalendarEvent>(props: MonthCalendarProps<T> & {
30
+ ref?: React.ForwardedRef<HTMLDivElement>;
31
+ }) => React.ReactElement;