@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,204 @@
1
+ import { jsxs as d, jsx as i } from "react/jsx-runtime";
2
+ import { forwardRef as L, useRef as M, useEffect as R, useMemo as C } from "react";
3
+ const F = {
4
+ locale: "en",
5
+ daysShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
6
+ monthsLong: [
7
+ "January",
8
+ "February",
9
+ "March",
10
+ "April",
11
+ "May",
12
+ "June",
13
+ "July",
14
+ "August",
15
+ "September",
16
+ "October",
17
+ "November",
18
+ "December"
19
+ ],
20
+ moreText: "more",
21
+ formatTime: (s) => {
22
+ const t = s.getHours();
23
+ return `${t === 0 ? 12 : t > 12 ? t - 12 : t}:00 ${t < 12 ? "AM" : "PM"}`.replace(" ", "").toLowerCase().replace(":00", "");
24
+ }
25
+ }, $ = (s) => _(s, /* @__PURE__ */ new Date()), _ = (s, t) => {
26
+ const n = new Date(s), c = new Date(t);
27
+ return n.setHours(0, 0, 0, 0), c.setHours(0, 0, 0, 0), c.getTime() === n.getTime();
28
+ }, k = (s) => {
29
+ const t = /* @__PURE__ */ new Date(), n = new Date(s);
30
+ return t.setHours(0, 0, 0, 0), n.setHours(0, 0, 0, 0), n < t;
31
+ }, J = (s) => {
32
+ const t = new Date(s), n = t.getDay(), c = t.getDate() - n;
33
+ return new Date(t.setDate(c));
34
+ }, O = (s, t) => {
35
+ const n = new Date(s);
36
+ return n.setDate(n.getDate() + t), n;
37
+ }, u = (s, t) => {
38
+ const n = s.getDate(), c = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"][s.getDay()];
39
+ return t === "YYYY-MM-DD" ? s.toISOString().split("T")[0] : t === "ddd" ? c : t === "D" ? n.toString() : s.toISOString();
40
+ }, P = L(
41
+ ({
42
+ date: s = /* @__PURE__ */ new Date(),
43
+ events: t = [],
44
+ locale: n = F,
45
+ onEventClick: c,
46
+ onDayClick: N,
47
+ onSelectSlot: x,
48
+ allowPastInteraction: m = !1,
49
+ fitContainer: f = !1,
50
+ startHour: y = 9,
51
+ endHour: Y = 17,
52
+ className: T = "",
53
+ ...S
54
+ }, E) => {
55
+ const g = M(null), D = M(null);
56
+ R(() => {
57
+ const e = () => {
58
+ if (g.current && D.current) {
59
+ const r = g.current, o = D.current, l = r.offsetWidth - r.clientWidth;
60
+ o.style.paddingRight = `${l}px`;
61
+ }
62
+ };
63
+ return e(), window.addEventListener("resize", e), () => window.removeEventListener("resize", e);
64
+ }, []);
65
+ const H = J(s), w = Array.from({ length: 7 }, (e, r) => O(H, r)), W = C(() => {
66
+ const e = {};
67
+ return t.forEach((r) => {
68
+ const o = u(r.date, "YYYY-MM-DD");
69
+ e[o] || (e[o] = []), e[o].push(r);
70
+ }), e;
71
+ }, [t]), v = Array.from({ length: Y - y + 1 }, (e, r) => r + y), A = (e) => n.formatTime ? n.formatTime(new Date(2e3, 0, 1, e, 0)) : `${e === 0 ? 12 : e > 12 ? e - 12 : e}:00 ${e < 12 ? "AM" : "PM"}`, j = (e, r) => (W[e] || []).filter((l) => l.date.getHours() === r);
72
+ return /* @__PURE__ */ d(
73
+ "div",
74
+ {
75
+ ref: E,
76
+ className: `flex h-full flex-col overflow-hidden border-b border-base-200 bg-base-100 ${T}`,
77
+ ...S,
78
+ children: [
79
+ /* @__PURE__ */ d(
80
+ "div",
81
+ {
82
+ ref: D,
83
+ className: "grid grid-cols-[80px_repeat(7,1fr)] border-b border-base-200 bg-base-100",
84
+ children: [
85
+ /* @__PURE__ */ i("div", { className: "week-calendar-time-column" }),
86
+ w.map((e) => {
87
+ const r = k(e), o = $(e);
88
+ return /* @__PURE__ */ d(
89
+ "div",
90
+ {
91
+ className: `
92
+ cursor-pointer px-2 py-0.5 text-center transition-colors hover:bg-primary/5
93
+ ${r && !m ? "cursor-not-allowed" : ""}
94
+ `,
95
+ onClick: () => {
96
+ r && !m || N?.(e);
97
+ },
98
+ children: [
99
+ /* @__PURE__ */ i(
100
+ "div",
101
+ {
102
+ className: `
103
+ text-xs font-medium uppercase
104
+ ${r ? "text-base-content/40" : "text-base-content/60"}
105
+ `,
106
+ children: u(e, "ddd")
107
+ }
108
+ ),
109
+ /* @__PURE__ */ i(
110
+ "div",
111
+ {
112
+ className: `
113
+ mx-auto flex items-center justify-center text-xs font-medium transition-all
114
+ ${o ? "font-bold text-primary" : ""}
115
+ ${r && !o ? "text-base-content/40" : "text-base-content"}
116
+ `,
117
+ children: u(e, "D")
118
+ }
119
+ )
120
+ ]
121
+ },
122
+ u(e, "YYYY-MM-DD")
123
+ );
124
+ })
125
+ ]
126
+ }
127
+ ),
128
+ /* @__PURE__ */ i(
129
+ "div",
130
+ {
131
+ ref: g,
132
+ className: f ? "grid flex-1" : "flex-1 overflow-y-auto",
133
+ style: f ? { gridTemplateRows: `repeat(${v.length}, 1fr)` } : void 0,
134
+ children: v.map((e) => /* @__PURE__ */ d(
135
+ "div",
136
+ {
137
+ className: `grid grid-cols-[80px_repeat(7,1fr)] border-b border-base-200 last:border-b-0 ${f ? "min-h-10" : "h-20"}`,
138
+ children: [
139
+ /* @__PURE__ */ i("div", { className: "flex items-start justify-end border-l border-r border-base-200 bg-base-200/50 p-2 pt-1 text-xs text-base-content/50", children: A(e) }),
140
+ w.map((r) => {
141
+ const o = u(r, "YYYY-MM-DD"), l = j(o, e), h = k(r) && !$(r);
142
+ return /* @__PURE__ */ i(
143
+ "div",
144
+ {
145
+ className: `
146
+ relative flex cursor-pointer flex-col justify-start overflow-y-auto border-r border-base-200 p-1 last:border-r-0
147
+ hover:bg-primary/5
148
+ ${f ? "" : "h-20"}
149
+ ${h && !m ? "cursor-not-allowed hover:cursor-not-allowed" : ""}
150
+ `,
151
+ onClick: (a) => {
152
+ if (!(h && !m) && x && (a.target === a.currentTarget || a.target.classList.contains("week-calendar-time-cell"))) {
153
+ const b = new Date(r);
154
+ b.setHours(e, 0, 0, 0);
155
+ const p = new Date(r);
156
+ p.setHours(e + 1, 0, 0, 0), x({ start: b, end: p });
157
+ }
158
+ },
159
+ children: l.map((a, b) => /* @__PURE__ */ d(
160
+ "div",
161
+ {
162
+ className: `
163
+ mb-px flex shrink-0 cursor-pointer items-center rounded px-1 py-0.5 text-xs leading-none
164
+ text-base-content transition-colors hover:bg-base-content/5 last:mb-0
165
+ ${a.strikethrough ? "line-through" : ""}
166
+ `,
167
+ style: a.style,
168
+ title: a.title,
169
+ onClick: (p) => {
170
+ p.stopPropagation(), c?.(a);
171
+ },
172
+ children: [
173
+ /* @__PURE__ */ i(
174
+ "div",
175
+ {
176
+ className: "mr-1.5 inline-block h-2 w-2 shrink-0 rounded-full",
177
+ style: { backgroundColor: a.color || "#bfbfbf" }
178
+ }
179
+ ),
180
+ /* @__PURE__ */ i("div", { className: "min-w-0 flex-1 overflow-hidden text-ellipsis whitespace-nowrap", children: a.title })
181
+ ]
182
+ },
183
+ b
184
+ ))
185
+ },
186
+ `${o}-${e}`
187
+ );
188
+ })
189
+ ]
190
+ },
191
+ e
192
+ ))
193
+ }
194
+ )
195
+ ]
196
+ }
197
+ );
198
+ }
199
+ );
200
+ P.displayName = "WeekCalendar";
201
+ export {
202
+ P as WeekCalendar
203
+ };
204
+ //# sourceMappingURL=WeekCalendar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WeekCalendar.js","sources":["../../src/components/WeekCalendar.tsx"],"sourcesContent":["import React, { useMemo, useRef, useEffect, forwardRef } from 'react'\n\n// DaisyUI classes\n// (No DaisyUI classes used in this component)\n\n// Types (shared with MonthCalendar)\nexport type CalendarEvent = {\n date: Date\n title: string\n color: string\n strikethrough?: boolean\n style?: React.CSSProperties\n}\n\nexport type CalendarLocale = {\n locale: string\n daysShort: string[]\n monthsLong: string[]\n moreText: string\n formatTime?: (date: Date) => string\n}\n\n// Default English locale\nconst defaultLocale: CalendarLocale = {\n locale: 'en',\n daysShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n monthsLong: [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December',\n ],\n moreText: 'more',\n formatTime: (date: Date): string => {\n const hour = date.getHours()\n const formatted = `${hour === 0 ? 12 : hour > 12 ? hour - 12 : hour}:00 ${hour < 12 ? 'AM' : 'PM'}`\n return formatted.replace(' ', '').toLowerCase().replace(':00', '')\n },\n}\n\n// Utility functions\nconst isToday = (date: Date) => isEqual(date, new Date())\n\nconst isEqual = (a: Date, b: Date) => {\n const acopy = new Date(a)\n const bcopy = new Date(b)\n acopy.setHours(0, 0, 0, 0)\n bcopy.setHours(0, 0, 0, 0)\n return bcopy.getTime() === acopy.getTime()\n}\n\nconst isPastDate = (date: Date) => {\n const today = new Date()\n const checkDate = new Date(date)\n today.setHours(0, 0, 0, 0)\n checkDate.setHours(0, 0, 0, 0)\n return checkDate < today\n}\n\nconst getWeekStart = (date: Date): Date => {\n const d = new Date(date)\n const day = d.getDay()\n const diff = d.getDate() - day\n return new Date(d.setDate(diff))\n}\n\nconst addDays = (date: Date, days: number): Date => {\n const result = new Date(date)\n result.setDate(result.getDate() + days)\n return result\n}\n\nconst formatDate = (date: Date, format: string): string => {\n const day = date.getDate()\n const dayName = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'][date.getDay()]\n\n if (format === 'YYYY-MM-DD') {\n return date.toISOString().split('T')[0]\n }\n if (format === 'ddd') {\n return dayName\n }\n if (format === 'D') {\n return day.toString()\n }\n return date.toISOString()\n}\n\nexport interface WeekCalendarProps<T extends CalendarEvent = CalendarEvent>\n extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {\n date?: Date\n events?: T[]\n onEventClick?: (event: T) => void\n onDayClick?: (date: Date) => void\n onSelectSlot?: (slotInfo: { start: Date; end: Date }) => void\n locale?: CalendarLocale\n allowPastInteraction?: boolean\n fitContainer?: boolean\n /** Start hour for the time grid (0-23) */\n startHour?: number\n /** End hour for the time grid (0-23) */\n endHour?: number\n}\n\nexport const WeekCalendar = forwardRef<HTMLDivElement, WeekCalendarProps>(\n <T extends CalendarEvent>(\n {\n date = new Date(),\n events = [],\n locale = defaultLocale,\n onEventClick,\n onDayClick,\n onSelectSlot,\n allowPastInteraction = false,\n fitContainer = false,\n startHour = 9,\n endHour = 17,\n className = '',\n ...rest\n }: WeekCalendarProps<T>,\n ref: React.ForwardedRef<HTMLDivElement>\n ) => {\n const bodyRef = useRef<HTMLDivElement>(null)\n const headerRef = useRef<HTMLDivElement>(null)\n\n // Adjust header padding to account for scrollbar\n useEffect(() => {\n const adjustScrollbar = () => {\n if (bodyRef.current && headerRef.current) {\n const bodyElement = bodyRef.current\n const headerElement = headerRef.current\n const scrollbarWidth = bodyElement.offsetWidth - bodyElement.clientWidth\n headerElement.style.paddingRight = `${scrollbarWidth}px`\n }\n }\n\n adjustScrollbar()\n window.addEventListener('resize', adjustScrollbar)\n return () => window.removeEventListener('resize', adjustScrollbar)\n }, [])\n\n\n const weekStart = getWeekStart(date)\n const weekDays = Array.from({ length: 7 }, (_, i) => addDays(weekStart, i))\n\n // Group events by day\n const eventsByDay = useMemo(() => {\n const grouped: Record<string, T[]> = {}\n events.forEach((event) => {\n const eventDate = formatDate(event.date, 'YYYY-MM-DD')\n if (!grouped[eventDate]) {\n grouped[eventDate] = []\n }\n grouped[eventDate].push(event as T)\n })\n return grouped\n }, [events])\n\n // Time slots from startHour to endHour\n const timeSlots = Array.from({ length: endHour - startHour + 1 }, (_, i) => i + startHour)\n\n const formatHour = (hour: number) => {\n if (locale.formatTime) {\n return locale.formatTime(new Date(2000, 0, 1, hour, 0))\n }\n return `${hour === 0 ? 12 : hour > 12 ? hour - 12 : hour}:00 ${hour < 12 ? 'AM' : 'PM'}`\n }\n\n const getEventsForDayAndHour = (dayStr: string, hour: number) => {\n const dayEvents = eventsByDay[dayStr] || []\n return dayEvents.filter((event) => {\n const eventHour = event.date.getHours()\n return eventHour === hour\n })\n }\n\n return (\n <div\n ref={ref}\n className={`flex h-full flex-col overflow-hidden border-b border-base-200 bg-base-100 ${className}`}\n {...rest}\n >\n {/* Header with days */}\n <div\n ref={headerRef}\n className=\"grid grid-cols-[80px_repeat(7,1fr)] border-b border-base-200 bg-base-100\"\n >\n <div className=\"week-calendar-time-column\" />\n {weekDays.map((day) => {\n const isPast = isPastDate(day)\n const isTodayDate = isToday(day)\n\n return (\n <div\n key={formatDate(day, 'YYYY-MM-DD')}\n className={`\n cursor-pointer px-2 py-0.5 text-center transition-colors hover:bg-primary/5\n ${isPast && !allowPastInteraction ? 'cursor-not-allowed' : ''}\n `}\n onClick={() => {\n if (isPast && !allowPastInteraction) {\n return\n }\n onDayClick?.(day)\n }}\n >\n <div\n className={`\n text-xs font-medium uppercase\n ${isPast ? 'text-base-content/40' : 'text-base-content/60'}\n `}\n >\n {formatDate(day, 'ddd')}\n </div>\n <div\n className={`\n mx-auto flex items-center justify-center text-xs font-medium transition-all\n ${isTodayDate ? 'font-bold text-primary' : ''}\n ${isPast && !isTodayDate ? 'text-base-content/40' : 'text-base-content'}\n `}\n >\n {formatDate(day, 'D')}\n </div>\n </div>\n )\n })}\n </div>\n\n {/* Time grid */}\n <div\n ref={bodyRef}\n className={fitContainer ? 'grid flex-1' : 'flex-1 overflow-y-auto'}\n style={fitContainer ? { gridTemplateRows: `repeat(${timeSlots.length}, 1fr)` } : undefined}\n >\n {timeSlots.map((hour) => (\n <div\n key={hour}\n className={`grid grid-cols-[80px_repeat(7,1fr)] border-b border-base-200 last:border-b-0 ${fitContainer ? 'min-h-10' : 'h-20'}`}\n >\n {/* Time label */}\n <div className=\"flex items-start justify-end border-l border-r border-base-200 bg-base-200/50 p-2 pt-1 text-xs text-base-content/50\">\n {formatHour(hour)}\n </div>\n\n {/* Day cells */}\n {weekDays.map((day) => {\n const dayStr = formatDate(day, 'YYYY-MM-DD')\n const hourEvents = getEventsForDayAndHour(dayStr, hour)\n const isPast = isPastDate(day) && !isToday(day)\n\n return (\n <div\n key={`${dayStr}-${hour}`}\n className={`\n relative flex cursor-pointer flex-col justify-start overflow-y-auto border-r border-base-200 p-1 last:border-r-0\n hover:bg-primary/5\n ${fitContainer ? '' : 'h-20'}\n ${isPast && !allowPastInteraction ? 'cursor-not-allowed hover:cursor-not-allowed' : ''}\n `}\n onClick={(e) => {\n if (isPast && !allowPastInteraction) {\n return\n }\n\n if (\n onSelectSlot &&\n (e.target === e.currentTarget ||\n (e.target as HTMLElement).classList.contains('week-calendar-time-cell'))\n ) {\n const start = new Date(day)\n start.setHours(hour, 0, 0, 0)\n\n const end = new Date(day)\n end.setHours(hour + 1, 0, 0, 0)\n\n onSelectSlot({ start, end })\n }\n }}\n >\n {hourEvents.map((event, idx) => (\n <div\n key={idx}\n className={`\n mb-px flex shrink-0 cursor-pointer items-center rounded px-1 py-0.5 text-xs leading-none\n text-base-content transition-colors hover:bg-base-content/5 last:mb-0\n ${event.strikethrough ? 'line-through' : ''}\n `}\n style={event.style}\n title={event.title}\n onClick={(e) => {\n e.stopPropagation()\n onEventClick?.(event)\n }}\n >\n <div\n className=\"mr-1.5 inline-block h-2 w-2 shrink-0 rounded-full\"\n style={{ backgroundColor: event.color || '#bfbfbf' }}\n />\n <div className=\"min-w-0 flex-1 overflow-hidden text-ellipsis whitespace-nowrap\">\n {event.title}\n </div>\n </div>\n ))}\n </div>\n )\n })}\n </div>\n ))}\n </div>\n </div>\n )\n }\n) as <T extends CalendarEvent = CalendarEvent>(\n props: WeekCalendarProps<T> & { ref?: React.ForwardedRef<HTMLDivElement> }\n) => React.ReactElement\n\n;(WeekCalendar as React.FC).displayName = 'WeekCalendar'\n"],"names":["defaultLocale","date","hour","isToday","isEqual","a","b","acopy","bcopy","isPastDate","today","checkDate","getWeekStart","d","day","diff","addDays","days","result","formatDate","format","dayName","WeekCalendar","forwardRef","events","locale","onEventClick","onDayClick","onSelectSlot","allowPastInteraction","fitContainer","startHour","endHour","className","rest","ref","bodyRef","useRef","headerRef","useEffect","adjustScrollbar","bodyElement","headerElement","scrollbarWidth","weekStart","weekDays","_","i","eventsByDay","useMemo","grouped","event","eventDate","timeSlots","formatHour","getEventsForDayAndHour","dayStr","jsxs","jsx","isPast","isTodayDate","hourEvents","e","start","end","idx"],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { default as React } from 'react';
2
+ export interface WindowProps {
3
+ children: React.ReactNode;
4
+ className?: string;
5
+ contentClassName?: string;
6
+ }
7
+ export declare const Window: React.FC<WindowProps>;
@@ -0,0 +1,10 @@
1
+ import { jsx as o } from "react/jsx-runtime";
2
+ const s = "d-mockup-window", i = ({
3
+ children: r,
4
+ className: d = "",
5
+ contentClassName: e = ""
6
+ }) => /* @__PURE__ */ o("div", { className: `${s} border border-base-300 ${d}`, children: /* @__PURE__ */ o("div", { className: `border-t border-base-300 ${e}`, children: r }) });
7
+ export {
8
+ i as Window
9
+ };
10
+ //# sourceMappingURL=Window.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Window.js","sources":["../../src/components/Window.tsx"],"sourcesContent":["import React from 'react'\n\n// DaisyUI classes\nconst dMockupWindow = 'd-mockup-window'\n\nexport interface WindowProps {\n children: React.ReactNode\n className?: string\n contentClassName?: string\n}\n\nexport const Window: React.FC<WindowProps> = ({\n children,\n className = '',\n contentClassName = '',\n}) => {\n return (\n <div className={`${dMockupWindow} border border-base-300 ${className}`}>\n <div className={`border-t border-base-300 ${contentClassName}`}>\n {children}\n </div>\n </div>\n )\n}\n"],"names":["dMockupWindow","Window","children","className","contentClassName","jsx"],"mappings":";AAGA,MAAMA,IAAgB,mBAQTC,IAAgC,CAAC;AAAA,EAC5C,UAAAC;AAAA,EACA,WAAAC,IAAY;AAAA,EACZ,kBAAAC,IAAmB;AACrB,MAEI,gBAAAC,EAAC,OAAA,EAAI,WAAW,GAAGL,CAAa,2BAA2BG,CAAS,IAClE,UAAA,gBAAAE,EAAC,SAAI,WAAW,4BAA4BD,CAAgB,IACzD,UAAAF,GACH,GACF;"}
@@ -0,0 +1,2 @@
1
+ export type IconSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
2
+ export declare const IconSizeContext: import('react').Context<IconSize | undefined>;
@@ -0,0 +1,6 @@
1
+ import { createContext as o } from "react";
2
+ const e = o(void 0);
3
+ export {
4
+ e as IconSizeContext
5
+ };
6
+ //# sourceMappingURL=IconSizeContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IconSizeContext.js","sources":["../../src/contexts/IconSizeContext.ts"],"sourcesContent":["import { createContext } from 'react'\n\nexport type IconSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n\nexport const IconSizeContext = createContext<IconSize | undefined>(undefined)\n"],"names":["IconSizeContext","createContext"],"mappings":";AAIO,MAAMA,IAAkBC,EAAoC,MAAS;"}
@@ -0,0 +1 @@
1
+ export { RichTextEditor, type RichTextEditorProps, type ToolbarItem } from './components/RichTextEditor';
package/dist/editor.js ADDED
@@ -0,0 +1,5 @@
1
+ import { RichTextEditor as t } from "./components/RichTextEditor.js";
2
+ export {
3
+ t as RichTextEditor
4
+ };
5
+ //# sourceMappingURL=editor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"editor.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
@@ -0,0 +1,10 @@
1
+ export type Breakpoint = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';
2
+ export interface UseBreakpointReturn {
3
+ breakpoint: Breakpoint;
4
+ width: number;
5
+ isAbove: (bp: Breakpoint) => boolean;
6
+ isBelow: (bp: Breakpoint) => boolean;
7
+ isAt: (bp: Breakpoint) => boolean;
8
+ isBetween: (min: Breakpoint, max: Breakpoint) => boolean;
9
+ }
10
+ export declare function useBreakpoint(): UseBreakpointReturn;
@@ -0,0 +1,36 @@
1
+ import { useState as u, useEffect as f } from "react";
2
+ const t = {
3
+ sm: 640,
4
+ md: 768,
5
+ lg: 1024,
6
+ xl: 1280,
7
+ "2xl": 1536
8
+ }, s = ["xs", "sm", "md", "lg", "xl", "2xl"];
9
+ function l(e) {
10
+ return e >= t["2xl"] ? "2xl" : e >= t.xl ? "xl" : e >= t.lg ? "lg" : e >= t.md ? "md" : e >= t.sm ? "sm" : "xs";
11
+ }
12
+ function i(e, o) {
13
+ return s.indexOf(e) - s.indexOf(o);
14
+ }
15
+ function m() {
16
+ const [e, o] = u(
17
+ () => typeof window < "u" ? window.innerWidth : 1024
18
+ );
19
+ f(() => {
20
+ const n = () => o(window.innerWidth);
21
+ return window.addEventListener("resize", n), () => window.removeEventListener("resize", n);
22
+ }, []);
23
+ const r = l(e);
24
+ return {
25
+ breakpoint: r,
26
+ width: e,
27
+ isAbove: (n) => i(r, n) >= 0,
28
+ isBelow: (n) => i(r, n) < 0,
29
+ isAt: (n) => r === n,
30
+ isBetween: (n, d) => i(r, n) >= 0 && i(r, d) <= 0
31
+ };
32
+ }
33
+ export {
34
+ m as useBreakpoint
35
+ };
36
+ //# sourceMappingURL=useBreakpoint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useBreakpoint.js","sources":["../../src/hooks/useBreakpoint.ts"],"sourcesContent":["import { useState, useEffect } from 'react'\n\nexport type Breakpoint = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'\n\nconst breakpoints: Record<Breakpoint, number> = {\n xs: 0,\n sm: 640,\n md: 768,\n lg: 1024,\n xl: 1280,\n '2xl': 1536,\n}\n\nconst breakpointOrder: Breakpoint[] = ['xs', 'sm', 'md', 'lg', 'xl', '2xl']\n\nfunction getBreakpoint(width: number): Breakpoint {\n if (width >= breakpoints['2xl']) return '2xl'\n if (width >= breakpoints.xl) return 'xl'\n if (width >= breakpoints.lg) return 'lg'\n if (width >= breakpoints.md) return 'md'\n if (width >= breakpoints.sm) return 'sm'\n return 'xs'\n}\n\nfunction compareBreakpoints(a: Breakpoint, b: Breakpoint): number {\n return breakpointOrder.indexOf(a) - breakpointOrder.indexOf(b)\n}\n\nexport interface UseBreakpointReturn {\n breakpoint: Breakpoint\n width: number\n isAbove: (bp: Breakpoint) => boolean\n isBelow: (bp: Breakpoint) => boolean\n isAt: (bp: Breakpoint) => boolean\n isBetween: (min: Breakpoint, max: Breakpoint) => boolean\n}\n\nexport function useBreakpoint(): UseBreakpointReturn {\n const [width, setWidth] = useState(() =>\n typeof window !== 'undefined' ? window.innerWidth : 1024\n )\n\n useEffect(() => {\n const handleResize = () => setWidth(window.innerWidth)\n\n window.addEventListener('resize', handleResize)\n return () => window.removeEventListener('resize', handleResize)\n }, [])\n\n const breakpoint = getBreakpoint(width)\n\n return {\n breakpoint,\n width,\n isAbove: (bp: Breakpoint) => compareBreakpoints(breakpoint, bp) >= 0,\n isBelow: (bp: Breakpoint) => compareBreakpoints(breakpoint, bp) < 0,\n isAt: (bp: Breakpoint) => breakpoint === bp,\n isBetween: (min: Breakpoint, max: Breakpoint) =>\n compareBreakpoints(breakpoint, min) >= 0 && compareBreakpoints(breakpoint, max) <= 0,\n }\n}\n"],"names":["breakpoints","breakpointOrder","getBreakpoint","width","compareBreakpoints","a","b","useBreakpoint","setWidth","useState","useEffect","handleResize","breakpoint","bp","min","max"],"mappings":";AAIA,MAAMA,IAA0C;AAAA,EAE9C,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,OAAO;AACT,GAEMC,IAAgC,CAAC,MAAM,MAAM,MAAM,MAAM,MAAM,KAAK;AAE1E,SAASC,EAAcC,GAA2B;AAChD,SAAIA,KAASH,EAAY,KAAK,IAAU,QACpCG,KAASH,EAAY,KAAW,OAChCG,KAASH,EAAY,KAAW,OAChCG,KAASH,EAAY,KAAW,OAChCG,KAASH,EAAY,KAAW,OAC7B;AACT;AAEA,SAASI,EAAmBC,GAAeC,GAAuB;AAChE,SAAOL,EAAgB,QAAQI,CAAC,IAAIJ,EAAgB,QAAQK,CAAC;AAC/D;AAWO,SAASC,IAAqC;AACnD,QAAM,CAACJ,GAAOK,CAAQ,IAAIC;AAAA,IAAS,MACjC,OAAO,SAAW,MAAc,OAAO,aAAa;AAAA,EAAA;AAGtD,EAAAC,EAAU,MAAM;AACd,UAAMC,IAAe,MAAMH,EAAS,OAAO,UAAU;AAErD,kBAAO,iBAAiB,UAAUG,CAAY,GACvC,MAAM,OAAO,oBAAoB,UAAUA,CAAY;AAAA,EAChE,GAAG,CAAA,CAAE;AAEL,QAAMC,IAAaV,EAAcC,CAAK;AAEtC,SAAO;AAAA,IACL,YAAAS;AAAA,IACA,OAAAT;AAAA,IACA,SAAS,CAACU,MAAmBT,EAAmBQ,GAAYC,CAAE,KAAK;AAAA,IACnE,SAAS,CAACA,MAAmBT,EAAmBQ,GAAYC,CAAE,IAAI;AAAA,IAClE,MAAM,CAACA,MAAmBD,MAAeC;AAAA,IACzC,WAAW,CAACC,GAAiBC,MAC3BX,EAAmBQ,GAAYE,CAAG,KAAK,KAAKV,EAAmBQ,GAAYG,CAAG,KAAK;AAAA,EAAA;AAEzF;"}
@@ -0,0 +1,17 @@
1
+ import { RefObject } from 'react';
2
+ /**
3
+ * Hook that detects clicks outside of a referenced element.
4
+ * Useful for closing dropdowns, modals, or menus.
5
+ *
6
+ * @param handler - Callback when click outside is detected
7
+ * @param enabled - Whether the listener is active (default: true)
8
+ * @returns Ref to attach to the element
9
+ *
10
+ * @example
11
+ * const ref = useClickOutside(() => setIsOpen(false))
12
+ *
13
+ * <div ref={ref}>
14
+ * <Dropdown>...</Dropdown>
15
+ * </div>
16
+ */
17
+ export declare function useClickOutside<T extends HTMLElement = HTMLElement>(handler: (event: MouseEvent | TouchEvent) => void, enabled?: boolean): RefObject<T | null>;
@@ -0,0 +1,18 @@
1
+ import { useRef as s, useEffect as c } from "react";
2
+ function m(t, n = !0) {
3
+ const r = s(null);
4
+ return c(() => {
5
+ if (!n) return;
6
+ const e = (o) => {
7
+ const u = r.current;
8
+ !u || u.contains(o.target) || t(o);
9
+ };
10
+ return document.addEventListener("mousedown", e), document.addEventListener("touchstart", e), () => {
11
+ document.removeEventListener("mousedown", e), document.removeEventListener("touchstart", e);
12
+ };
13
+ }, [t, n]), r;
14
+ }
15
+ export {
16
+ m as useClickOutside
17
+ };
18
+ //# sourceMappingURL=useClickOutside.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useClickOutside.js","sources":["../../src/hooks/useClickOutside.ts"],"sourcesContent":["import { useEffect, useRef, type RefObject } from 'react'\n\n/**\n * Hook that detects clicks outside of a referenced element.\n * Useful for closing dropdowns, modals, or menus.\n *\n * @param handler - Callback when click outside is detected\n * @param enabled - Whether the listener is active (default: true)\n * @returns Ref to attach to the element\n *\n * @example\n * const ref = useClickOutside(() => setIsOpen(false))\n *\n * <div ref={ref}>\n * <Dropdown>...</Dropdown>\n * </div>\n */\nexport function useClickOutside<T extends HTMLElement = HTMLElement>(\n handler: (event: MouseEvent | TouchEvent) => void,\n enabled = true\n): RefObject<T | null> {\n const ref = useRef<T>(null)\n\n useEffect(() => {\n if (!enabled) return\n\n const listener = (event: MouseEvent | TouchEvent) => {\n const el = ref.current\n if (!el || el.contains(event.target as Node)) {\n return\n }\n handler(event)\n }\n\n document.addEventListener('mousedown', listener)\n document.addEventListener('touchstart', listener)\n\n return () => {\n document.removeEventListener('mousedown', listener)\n document.removeEventListener('touchstart', listener)\n }\n }, [handler, enabled])\n\n return ref\n}\n"],"names":["useClickOutside","handler","enabled","ref","useRef","useEffect","listener","event","el"],"mappings":";AAiBO,SAASA,EACdC,GACAC,IAAU,IACW;AACrB,QAAMC,IAAMC,EAAU,IAAI;AAE1B,SAAAC,EAAU,MAAM;AACd,QAAI,CAACH,EAAS;AAEd,UAAMI,IAAW,CAACC,MAAmC;AACnD,YAAMC,IAAKL,EAAI;AACf,MAAI,CAACK,KAAMA,EAAG,SAASD,EAAM,MAAc,KAG3CN,EAAQM,CAAK;AAAA,IACf;AAEA,oBAAS,iBAAiB,aAAaD,CAAQ,GAC/C,SAAS,iBAAiB,cAAcA,CAAQ,GAEzC,MAAM;AACX,eAAS,oBAAoB,aAAaA,CAAQ,GAClD,SAAS,oBAAoB,cAAcA,CAAQ;AAAA,IACrD;AAAA,EACF,GAAG,CAACL,GAASC,CAAO,CAAC,GAEdC;AACT;"}
@@ -0,0 +1,20 @@
1
+ export interface UseClipboardReturn {
2
+ copy: (text: string) => Promise<boolean>;
3
+ copied: boolean;
4
+ error: Error | null;
5
+ reset: () => void;
6
+ }
7
+ /**
8
+ * Hook for copying text to clipboard with success/error state.
9
+ *
10
+ * @param timeout - Duration in ms to show copied state (default: 2000)
11
+ * @returns Object with copy function and state
12
+ *
13
+ * @example
14
+ * const { copy, copied } = useClipboard()
15
+ *
16
+ * <Button onClick={() => copy('Hello!')}>
17
+ * {copied ? 'Copied!' : 'Copy'}
18
+ * </Button>
19
+ */
20
+ export declare function useClipboard(timeout?: number): UseClipboardReturn;
@@ -0,0 +1,17 @@
1
+ import { useState as a, useCallback as s } from "react";
2
+ function p(t = 2e3) {
3
+ const [n, r] = a(!1), [l, e] = a(null), c = s(async (i) => {
4
+ try {
5
+ return await navigator.clipboard.writeText(i), r(!0), e(null), setTimeout(() => r(!1), t), !0;
6
+ } catch (o) {
7
+ return e(o instanceof Error ? o : new Error("Failed to copy")), r(!1), !1;
8
+ }
9
+ }, [t]), u = s(() => {
10
+ r(!1), e(null);
11
+ }, []);
12
+ return { copy: c, copied: n, error: l, reset: u };
13
+ }
14
+ export {
15
+ p as useClipboard
16
+ };
17
+ //# sourceMappingURL=useClipboard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useClipboard.js","sources":["../../src/hooks/useClipboard.ts"],"sourcesContent":["import { useState, useCallback } from 'react'\n\nexport interface UseClipboardReturn {\n copy: (text: string) => Promise<boolean>\n copied: boolean\n error: Error | null\n reset: () => void\n}\n\n/**\n * Hook for copying text to clipboard with success/error state.\n *\n * @param timeout - Duration in ms to show copied state (default: 2000)\n * @returns Object with copy function and state\n *\n * @example\n * const { copy, copied } = useClipboard()\n *\n * <Button onClick={() => copy('Hello!')}>\n * {copied ? 'Copied!' : 'Copy'}\n * </Button>\n */\nexport function useClipboard(timeout = 2000): UseClipboardReturn {\n const [copied, setCopied] = useState(false)\n const [error, setError] = useState<Error | null>(null)\n\n const copy = useCallback(async (text: string): Promise<boolean> => {\n try {\n await navigator.clipboard.writeText(text)\n setCopied(true)\n setError(null)\n\n setTimeout(() => setCopied(false), timeout)\n return true\n } catch (err) {\n setError(err instanceof Error ? err : new Error('Failed to copy'))\n setCopied(false)\n return false\n }\n }, [timeout])\n\n const reset = useCallback(() => {\n setCopied(false)\n setError(null)\n }, [])\n\n return { copy, copied, error, reset }\n}\n"],"names":["useClipboard","timeout","copied","setCopied","useState","error","setError","copy","useCallback","text","err","reset"],"mappings":";AAsBO,SAASA,EAAaC,IAAU,KAA0B;AAC/D,QAAM,CAACC,GAAQC,CAAS,IAAIC,EAAS,EAAK,GACpC,CAACC,GAAOC,CAAQ,IAAIF,EAAuB,IAAI,GAE/CG,IAAOC,EAAY,OAAOC,MAAmC;AACjE,QAAI;AACF,mBAAM,UAAU,UAAU,UAAUA,CAAI,GACxCN,EAAU,EAAI,GACdG,EAAS,IAAI,GAEb,WAAW,MAAMH,EAAU,EAAK,GAAGF,CAAO,GACnC;AAAA,IACT,SAASS,GAAK;AACZ,aAAAJ,EAASI,aAAe,QAAQA,IAAM,IAAI,MAAM,gBAAgB,CAAC,GACjEP,EAAU,EAAK,GACR;AAAA,IACT;AAAA,EACF,GAAG,CAACF,CAAO,CAAC,GAENU,IAAQH,EAAY,MAAM;AAC9B,IAAAL,EAAU,EAAK,GACfG,EAAS,IAAI;AAAA,EACf,GAAG,CAAA,CAAE;AAEL,SAAO,EAAE,MAAAC,GAAM,QAAAL,GAAQ,OAAAG,GAAO,OAAAM,EAAA;AAChC;"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Hook that delays updating a value until after a specified delay.
3
+ * Useful for search inputs to avoid excessive API calls.
4
+ *
5
+ * @param value - Value to debounce
6
+ * @param delay - Delay in milliseconds (default: 300)
7
+ * @returns Debounced value
8
+ *
9
+ * @example
10
+ * const [search, setSearch] = useState('')
11
+ * const debouncedSearch = useDebounce(search, 500)
12
+ *
13
+ * useEffect(() => {
14
+ * // This runs 500ms after user stops typing
15
+ * fetchResults(debouncedSearch)
16
+ * }, [debouncedSearch])
17
+ */
18
+ export declare function useDebounce<T>(value: T, delay?: number): T;
@@ -0,0 +1,16 @@
1
+ import { useState as r, useEffect as c } from "react";
2
+ function i(e, t = 300) {
3
+ const [o, u] = r(e);
4
+ return c(() => {
5
+ const n = setTimeout(() => {
6
+ u(e);
7
+ }, t);
8
+ return () => {
9
+ clearTimeout(n);
10
+ };
11
+ }, [e, t]), o;
12
+ }
13
+ export {
14
+ i as useDebounce
15
+ };
16
+ //# sourceMappingURL=useDebounce.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDebounce.js","sources":["../../src/hooks/useDebounce.ts"],"sourcesContent":["import { useState, useEffect } from 'react'\n\n/**\n * Hook that delays updating a value until after a specified delay.\n * Useful for search inputs to avoid excessive API calls.\n *\n * @param value - Value to debounce\n * @param delay - Delay in milliseconds (default: 300)\n * @returns Debounced value\n *\n * @example\n * const [search, setSearch] = useState('')\n * const debouncedSearch = useDebounce(search, 500)\n *\n * useEffect(() => {\n * // This runs 500ms after user stops typing\n * fetchResults(debouncedSearch)\n * }, [debouncedSearch])\n */\nexport function useDebounce<T>(value: T, delay = 300): T {\n const [debouncedValue, setDebouncedValue] = useState<T>(value)\n\n useEffect(() => {\n const timer = setTimeout(() => {\n setDebouncedValue(value)\n }, delay)\n\n return () => {\n clearTimeout(timer)\n }\n }, [value, delay])\n\n return debouncedValue\n}\n"],"names":["useDebounce","value","delay","debouncedValue","setDebouncedValue","useState","useEffect","timer"],"mappings":";AAmBO,SAASA,EAAeC,GAAUC,IAAQ,KAAQ;AACvD,QAAM,CAACC,GAAgBC,CAAiB,IAAIC,EAAYJ,CAAK;AAE7D,SAAAK,EAAU,MAAM;AACd,UAAMC,IAAQ,WAAW,MAAM;AAC7B,MAAAH,EAAkBH,CAAK;AAAA,IACzB,GAAGC,CAAK;AAER,WAAO,MAAM;AACX,mBAAaK,CAAK;AAAA,IACpB;AAAA,EACF,GAAG,CAACN,GAAOC,CAAK,CAAC,GAEVC;AACT;"}
@@ -0,0 +1,20 @@
1
+ export interface UseDisclosureReturn {
2
+ isOpen: boolean;
3
+ onOpen: () => void;
4
+ onClose: () => void;
5
+ onToggle: () => void;
6
+ setIsOpen: (value: boolean) => void;
7
+ }
8
+ /**
9
+ * Hook for managing open/close state of modals, drawers, dropdowns, etc.
10
+ *
11
+ * @param defaultIsOpen - Initial open state (default: false)
12
+ * @returns Object with isOpen state and control functions
13
+ *
14
+ * @example
15
+ * const { isOpen, onOpen, onClose } = useDisclosure()
16
+ *
17
+ * <Button onClick={onOpen}>Open Modal</Button>
18
+ * <Modal open={isOpen} onClose={onClose}>Content</Modal>
19
+ */
20
+ export declare function useDisclosure(defaultIsOpen?: boolean): UseDisclosureReturn;
@@ -0,0 +1,9 @@
1
+ import { useState as u, useCallback as s } from "react";
2
+ function p(o = !1) {
3
+ const [n, e] = u(o), t = s(() => e(!0), []), c = s(() => e(!1), []), l = s(() => e((r) => !r), []);
4
+ return { isOpen: n, onOpen: t, onClose: c, onToggle: l, setIsOpen: e };
5
+ }
6
+ export {
7
+ p as useDisclosure
8
+ };
9
+ //# sourceMappingURL=useDisclosure.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDisclosure.js","sources":["../../src/hooks/useDisclosure.ts"],"sourcesContent":["import { useState, useCallback } from 'react'\n\nexport interface UseDisclosureReturn {\n isOpen: boolean\n onOpen: () => void\n onClose: () => void\n onToggle: () => void\n setIsOpen: (value: boolean) => void\n}\n\n/**\n * Hook for managing open/close state of modals, drawers, dropdowns, etc.\n *\n * @param defaultIsOpen - Initial open state (default: false)\n * @returns Object with isOpen state and control functions\n *\n * @example\n * const { isOpen, onOpen, onClose } = useDisclosure()\n *\n * <Button onClick={onOpen}>Open Modal</Button>\n * <Modal open={isOpen} onClose={onClose}>Content</Modal>\n */\nexport function useDisclosure(defaultIsOpen = false): UseDisclosureReturn {\n const [isOpen, setIsOpen] = useState(defaultIsOpen)\n\n const onOpen = useCallback(() => setIsOpen(true), [])\n const onClose = useCallback(() => setIsOpen(false), [])\n const onToggle = useCallback(() => setIsOpen(prev => !prev), [])\n\n return { isOpen, onOpen, onClose, onToggle, setIsOpen }\n}\n"],"names":["useDisclosure","defaultIsOpen","isOpen","setIsOpen","useState","onOpen","useCallback","onClose","onToggle","prev"],"mappings":";AAsBO,SAASA,EAAcC,IAAgB,IAA4B;AACxE,QAAM,CAACC,GAAQC,CAAS,IAAIC,EAASH,CAAa,GAE5CI,IAASC,EAAY,MAAMH,EAAU,EAAI,GAAG,CAAA,CAAE,GAC9CI,IAAUD,EAAY,MAAMH,EAAU,EAAK,GAAG,CAAA,CAAE,GAChDK,IAAWF,EAAY,MAAMH,EAAU,OAAQ,CAACM,CAAI,GAAG,EAAE;AAE/D,SAAO,EAAE,QAAAP,GAAQ,QAAAG,GAAQ,SAAAE,GAAS,UAAAC,GAAU,WAAAL,EAAA;AAC9C;"}
@@ -0,0 +1,18 @@
1
+ import { RefObject } from 'react';
2
+ export interface UseHoverReturn<T extends HTMLElement> {
3
+ ref: RefObject<T | null>;
4
+ isHovered: boolean;
5
+ }
6
+ /**
7
+ * Hook that tracks hover state of an element.
8
+ *
9
+ * @returns Object with ref and isHovered state
10
+ *
11
+ * @example
12
+ * const { ref, isHovered } = useHover<HTMLDivElement>()
13
+ *
14
+ * <div ref={ref} className={isHovered ? 'bg-blue-500' : 'bg-gray-500'}>
15
+ * Hover me!
16
+ * </div>
17
+ */
18
+ export declare function useHover<T extends HTMLElement = HTMLElement>(): UseHoverReturn<T>;
@@ -0,0 +1,16 @@
1
+ import { useState as u, useRef as v, useEffect as a } from "react";
2
+ function f() {
3
+ const [o, t] = u(!1), n = v(null);
4
+ return a(() => {
5
+ const e = n.current;
6
+ if (!e) return;
7
+ const r = () => t(!0), s = () => t(!1);
8
+ return e.addEventListener("mouseenter", r), e.addEventListener("mouseleave", s), () => {
9
+ e.removeEventListener("mouseenter", r), e.removeEventListener("mouseleave", s);
10
+ };
11
+ }, []), { ref: n, isHovered: o };
12
+ }
13
+ export {
14
+ f as useHover
15
+ };
16
+ //# sourceMappingURL=useHover.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useHover.js","sources":["../../src/hooks/useHover.ts"],"sourcesContent":["import { useState, useRef, useEffect, type RefObject } from 'react'\n\nexport interface UseHoverReturn<T extends HTMLElement> {\n ref: RefObject<T | null>\n isHovered: boolean\n}\n\n/**\n * Hook that tracks hover state of an element.\n *\n * @returns Object with ref and isHovered state\n *\n * @example\n * const { ref, isHovered } = useHover<HTMLDivElement>()\n *\n * <div ref={ref} className={isHovered ? 'bg-blue-500' : 'bg-gray-500'}>\n * Hover me!\n * </div>\n */\nexport function useHover<T extends HTMLElement = HTMLElement>(): UseHoverReturn<T> {\n const [isHovered, setIsHovered] = useState(false)\n const ref = useRef<T>(null)\n\n useEffect(() => {\n const node = ref.current\n if (!node) return\n\n const handleMouseEnter = () => setIsHovered(true)\n const handleMouseLeave = () => setIsHovered(false)\n\n node.addEventListener('mouseenter', handleMouseEnter)\n node.addEventListener('mouseleave', handleMouseLeave)\n\n return () => {\n node.removeEventListener('mouseenter', handleMouseEnter)\n node.removeEventListener('mouseleave', handleMouseLeave)\n }\n }, [])\n\n return { ref, isHovered }\n}\n"],"names":["useHover","isHovered","setIsHovered","useState","ref","useRef","useEffect","node","handleMouseEnter","handleMouseLeave"],"mappings":";AAmBO,SAASA,IAAmE;AACjF,QAAM,CAACC,GAAWC,CAAY,IAAIC,EAAS,EAAK,GAC1CC,IAAMC,EAAU,IAAI;AAE1B,SAAAC,EAAU,MAAM;AACd,UAAMC,IAAOH,EAAI;AACjB,QAAI,CAACG,EAAM;AAEX,UAAMC,IAAmB,MAAMN,EAAa,EAAI,GAC1CO,IAAmB,MAAMP,EAAa,EAAK;AAEjD,WAAAK,EAAK,iBAAiB,cAAcC,CAAgB,GACpDD,EAAK,iBAAiB,cAAcE,CAAgB,GAE7C,MAAM;AACX,MAAAF,EAAK,oBAAoB,cAAcC,CAAgB,GACvDD,EAAK,oBAAoB,cAAcE,CAAgB;AAAA,IACzD;AAAA,EACF,GAAG,CAAA,CAAE,GAEE,EAAE,KAAAL,GAAK,WAAAH,EAAA;AAChB;"}
@@ -0,0 +1,40 @@
1
+ export interface UseKeyPressOptions {
2
+ /** Target element (default: window) */
3
+ target?: HTMLElement | Window | null;
4
+ /** Event type: 'keydown' | 'keyup' (default: 'keydown') */
5
+ event?: 'keydown' | 'keyup';
6
+ /** Prevent default browser behavior */
7
+ preventDefault?: boolean;
8
+ }
9
+ /**
10
+ * Hook that detects when a specific key is pressed.
11
+ *
12
+ * @param targetKey - Key to detect (e.g., 'Enter', 'Escape', 'a')
13
+ * @param options - Configuration options
14
+ * @returns Whether the key is currently pressed
15
+ *
16
+ * @example
17
+ * const enterPressed = useKeyPress('Enter')
18
+ * const escapePressed = useKeyPress('Escape')
19
+ *
20
+ * useEffect(() => {
21
+ * if (escapePressed) closeModal()
22
+ * }, [escapePressed])
23
+ *
24
+ * @example
25
+ * // With callback for immediate action
26
+ * useKeyPress('Escape', { preventDefault: true })
27
+ */
28
+ export declare function useKeyPress(targetKey: string, options?: UseKeyPressOptions): boolean;
29
+ /**
30
+ * Hook that calls a callback when a specific key is pressed.
31
+ *
32
+ * @param targetKey - Key to detect
33
+ * @param callback - Function to call when key is pressed
34
+ * @param options - Configuration options
35
+ *
36
+ * @example
37
+ * useKeyPressCallback('Escape', () => closeModal())
38
+ * useKeyPressCallback('Enter', () => submitForm(), { preventDefault: true })
39
+ */
40
+ export declare function useKeyPressCallback(targetKey: string, callback: (event: KeyboardEvent) => void, options?: UseKeyPressOptions): void;