@arolariu/components 1.0.0 → 2.0.0

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 (451) hide show
  1. package/CHANGELOG.md +89 -0
  2. package/EXAMPLES.md +2510 -0
  3. package/dist/components/ui/accordion.js +3 -3
  4. package/dist/components/ui/accordion.js.map +1 -1
  5. package/dist/components/ui/accordion_module.css.map +1 -1
  6. package/dist/components/ui/alert-dialog.d.ts +4 -16
  7. package/dist/components/ui/alert-dialog.d.ts.map +1 -1
  8. package/dist/components/ui/alert-dialog.js +21 -17
  9. package/dist/components/ui/alert-dialog.js.map +1 -1
  10. package/dist/components/ui/alert-dialog_module.css +1 -1
  11. package/dist/components/ui/alert-dialog_module.css.map +1 -1
  12. package/dist/components/ui/alert.js +4 -4
  13. package/dist/components/ui/alert.js.map +1 -1
  14. package/dist/components/ui/alert_module.css.map +1 -1
  15. package/dist/components/ui/aspect-ratio.js +2 -2
  16. package/dist/components/ui/aspect-ratio.js.map +1 -1
  17. package/dist/components/ui/aspect-ratio_module.css.map +1 -1
  18. package/dist/components/ui/async-boundary.js +2 -2
  19. package/dist/components/ui/async-boundary.js.map +1 -1
  20. package/dist/components/ui/avatar.d.ts +3 -12
  21. package/dist/components/ui/avatar.d.ts.map +1 -1
  22. package/dist/components/ui/avatar.js +18 -15
  23. package/dist/components/ui/avatar.js.map +1 -1
  24. package/dist/components/ui/avatar_module.css.map +1 -1
  25. package/dist/components/ui/background-beams.js +3 -3
  26. package/dist/components/ui/background-beams.js.map +1 -1
  27. package/dist/components/ui/background-beams_module.css.map +1 -1
  28. package/dist/components/ui/badge.js +2 -2
  29. package/dist/components/ui/badge.js.map +1 -1
  30. package/dist/components/ui/badge_module.css.map +1 -1
  31. package/dist/components/ui/breadcrumb.js +10 -10
  32. package/dist/components/ui/breadcrumb.js.map +1 -1
  33. package/dist/components/ui/breadcrumb_module.css.map +1 -1
  34. package/dist/components/ui/bubble-background.js +5 -5
  35. package/dist/components/ui/bubble-background.js.map +1 -1
  36. package/dist/components/ui/bubble-background_module.css.map +1 -1
  37. package/dist/components/ui/button-group.d.ts +1 -1
  38. package/dist/components/ui/button-group.d.ts.map +1 -1
  39. package/dist/components/ui/button-group.js +6 -6
  40. package/dist/components/ui/button-group.js.map +1 -1
  41. package/dist/components/ui/button-group_module.css.map +1 -1
  42. package/dist/components/ui/button.js +4 -4
  43. package/dist/components/ui/button.js.map +1 -1
  44. package/dist/components/ui/button_module.css.map +1 -1
  45. package/dist/components/ui/calendar.d.ts +3 -5
  46. package/dist/components/ui/calendar.d.ts.map +1 -1
  47. package/dist/components/ui/calendar.js +9 -9
  48. package/dist/components/ui/calendar.js.map +1 -1
  49. package/dist/components/ui/calendar_module.css.map +1 -1
  50. package/dist/components/ui/card-skeleton.js +2 -2
  51. package/dist/components/ui/card-skeleton.js.map +1 -1
  52. package/dist/components/ui/card-skeleton_module.css.map +1 -1
  53. package/dist/components/ui/card.js +8 -8
  54. package/dist/components/ui/card.js.map +1 -1
  55. package/dist/components/ui/card_module.css.map +1 -1
  56. package/dist/components/ui/carousel.d.ts.map +1 -1
  57. package/dist/components/ui/carousel.js +16 -16
  58. package/dist/components/ui/carousel.js.map +1 -1
  59. package/dist/components/ui/carousel_module.css +1 -1
  60. package/dist/components/ui/carousel_module.css.map +1 -1
  61. package/dist/components/ui/chart.d.ts +6 -3
  62. package/dist/components/ui/chart.d.ts.map +1 -1
  63. package/dist/components/ui/chart.js +70 -70
  64. package/dist/components/ui/chart.js.map +1 -1
  65. package/dist/components/ui/chart_module.css.map +1 -1
  66. package/dist/components/ui/checkbox-group.d.ts +2 -6
  67. package/dist/components/ui/checkbox-group.d.ts.map +1 -1
  68. package/dist/components/ui/checkbox-group.js +8 -7
  69. package/dist/components/ui/checkbox-group.js.map +1 -1
  70. package/dist/components/ui/checkbox-group_module.css.map +1 -1
  71. package/dist/components/ui/checkbox.d.ts +3 -1
  72. package/dist/components/ui/checkbox.d.ts.map +1 -1
  73. package/dist/components/ui/checkbox.js +6 -3
  74. package/dist/components/ui/checkbox.js.map +1 -1
  75. package/dist/components/ui/checkbox_module.css.map +1 -1
  76. package/dist/components/ui/collapsible.d.ts.map +1 -1
  77. package/dist/components/ui/collapsible.js +4 -4
  78. package/dist/components/ui/collapsible.js.map +1 -1
  79. package/dist/components/ui/collapsible_module.css.map +1 -1
  80. package/dist/components/ui/combobox.d.ts +335 -0
  81. package/dist/components/ui/combobox.d.ts.map +1 -0
  82. package/dist/components/ui/combobox.js +206 -0
  83. package/dist/components/ui/combobox.js.map +1 -0
  84. package/dist/components/ui/combobox.module.js +23 -0
  85. package/dist/components/ui/combobox.module.js.map +1 -0
  86. package/dist/components/ui/combobox_module.css +142 -0
  87. package/dist/components/ui/combobox_module.css.map +1 -0
  88. package/dist/components/ui/command.d.ts.map +1 -1
  89. package/dist/components/ui/command.js +62 -53
  90. package/dist/components/ui/command.js.map +1 -1
  91. package/dist/components/ui/command_module.css +1 -1
  92. package/dist/components/ui/command_module.css.map +1 -1
  93. package/dist/components/ui/context-menu.d.ts.map +1 -1
  94. package/dist/components/ui/context-menu.js +6 -6
  95. package/dist/components/ui/context-menu.js.map +1 -1
  96. package/dist/components/ui/context-menu_module.css.map +1 -1
  97. package/dist/components/ui/copy-button.js +6 -6
  98. package/dist/components/ui/copy-button.js.map +1 -1
  99. package/dist/components/ui/copy-button_module.css.map +1 -1
  100. package/dist/components/ui/counting-number.js +6 -6
  101. package/dist/components/ui/counting-number.js.map +1 -1
  102. package/dist/components/ui/counting-number_module.css.map +1 -1
  103. package/dist/components/ui/dialog.js +6 -6
  104. package/dist/components/ui/dialog.js.map +1 -1
  105. package/dist/components/ui/dialog_module.css +1 -1
  106. package/dist/components/ui/dialog_module.css.map +1 -1
  107. package/dist/components/ui/dot-background_module.css.map +1 -1
  108. package/dist/components/ui/drawer.d.ts.map +1 -1
  109. package/dist/components/ui/drawer.js +5 -5
  110. package/dist/components/ui/drawer.js.map +1 -1
  111. package/dist/components/ui/drawer_module.css.map +1 -1
  112. package/dist/components/ui/dropdown-menu.d.ts.map +1 -1
  113. package/dist/components/ui/dropdown-menu.js +6 -6
  114. package/dist/components/ui/dropdown-menu.js.map +1 -1
  115. package/dist/components/ui/dropdown-menu_module.css.map +1 -1
  116. package/dist/components/ui/dropdrawer.d.ts +10 -16
  117. package/dist/components/ui/dropdrawer.d.ts.map +1 -1
  118. package/dist/components/ui/dropdrawer.js +73 -65
  119. package/dist/components/ui/dropdrawer.js.map +1 -1
  120. package/dist/components/ui/dropdrawer_module.css.map +1 -1
  121. package/dist/components/ui/empty.js +7 -7
  122. package/dist/components/ui/empty.js.map +1 -1
  123. package/dist/components/ui/empty_module.css.map +1 -1
  124. package/dist/components/ui/error-boundary.js +2 -2
  125. package/dist/components/ui/error-boundary.js.map +1 -1
  126. package/dist/components/ui/error-boundary_module.css.map +1 -1
  127. package/dist/components/ui/field.js +12 -12
  128. package/dist/components/ui/field.js.map +1 -1
  129. package/dist/components/ui/field_module.css.map +1 -1
  130. package/dist/components/ui/fireworks-background.js +6 -6
  131. package/dist/components/ui/fireworks-background.js.map +1 -1
  132. package/dist/components/ui/fireworks-background_module.css.map +1 -1
  133. package/dist/components/ui/flip-button.js +5 -5
  134. package/dist/components/ui/flip-button.js.map +1 -1
  135. package/dist/components/ui/flip-button_module.css.map +1 -1
  136. package/dist/components/ui/focus-scope.js +6 -6
  137. package/dist/components/ui/focus-scope.js.map +1 -1
  138. package/dist/components/ui/focus-scope_module.css.map +1 -1
  139. package/dist/components/ui/form-skeleton.js +2 -2
  140. package/dist/components/ui/form-skeleton.js.map +1 -1
  141. package/dist/components/ui/form-skeleton_module.css.map +1 -1
  142. package/dist/components/ui/form.d.ts +3 -3
  143. package/dist/components/ui/form.d.ts.map +1 -1
  144. package/dist/components/ui/form.js +13 -13
  145. package/dist/components/ui/form.js.map +1 -1
  146. package/dist/components/ui/form_module.css.map +1 -1
  147. package/dist/components/ui/gradient-background.js +2 -2
  148. package/dist/components/ui/gradient-background.js.map +1 -1
  149. package/dist/components/ui/gradient-background_module.css.map +1 -1
  150. package/dist/components/ui/gradient-text.js +2 -2
  151. package/dist/components/ui/gradient-text.js.map +1 -1
  152. package/dist/components/ui/gradient-text_module.css.map +1 -1
  153. package/dist/components/ui/highlight-text.js +4 -4
  154. package/dist/components/ui/highlight-text.js.map +1 -1
  155. package/dist/components/ui/highlight-text_module.css.map +1 -1
  156. package/dist/components/ui/hole-background.js +21 -21
  157. package/dist/components/ui/hole-background.js.map +1 -1
  158. package/dist/components/ui/hole-background_module.css.map +1 -1
  159. package/dist/components/ui/hover-card.js +3 -3
  160. package/dist/components/ui/hover-card.js.map +1 -1
  161. package/dist/components/ui/hover-card_module.css.map +1 -1
  162. package/dist/components/ui/input-group.js +7 -7
  163. package/dist/components/ui/input-group.js.map +1 -1
  164. package/dist/components/ui/input-group_module.css.map +1 -1
  165. package/dist/components/ui/input-otp.d.ts +3 -3
  166. package/dist/components/ui/input-otp.d.ts.map +1 -1
  167. package/dist/components/ui/input-otp.js +6 -6
  168. package/dist/components/ui/input-otp.js.map +1 -1
  169. package/dist/components/ui/input-otp_module.css.map +1 -1
  170. package/dist/components/ui/input.js +2 -2
  171. package/dist/components/ui/input.js.map +1 -1
  172. package/dist/components/ui/input_module.css.map +1 -1
  173. package/dist/components/ui/item.d.ts +1 -1
  174. package/dist/components/ui/item.d.ts.map +1 -1
  175. package/dist/components/ui/item.js +13 -13
  176. package/dist/components/ui/item.js.map +1 -1
  177. package/dist/components/ui/item_module.css.map +1 -1
  178. package/dist/components/ui/kbd.js +3 -3
  179. package/dist/components/ui/kbd.js.map +1 -1
  180. package/dist/components/ui/kbd_module.css.map +1 -1
  181. package/dist/components/ui/label.js +2 -2
  182. package/dist/components/ui/label.js.map +1 -1
  183. package/dist/components/ui/label_module.css.map +1 -1
  184. package/dist/components/ui/list-skeleton.js +2 -2
  185. package/dist/components/ui/list-skeleton.js.map +1 -1
  186. package/dist/components/ui/list-skeleton_module.css.map +1 -1
  187. package/dist/components/ui/loading-overlay.js +2 -2
  188. package/dist/components/ui/loading-overlay.js.map +1 -1
  189. package/dist/components/ui/loading-overlay_module.css.map +1 -1
  190. package/dist/components/ui/menubar.d.ts +11 -13
  191. package/dist/components/ui/menubar.d.ts.map +1 -1
  192. package/dist/components/ui/menubar.js +4 -4
  193. package/dist/components/ui/menubar.js.map +1 -1
  194. package/dist/components/ui/menubar_module.css.map +1 -1
  195. package/dist/components/ui/meter.d.ts +8 -24
  196. package/dist/components/ui/meter.d.ts.map +1 -1
  197. package/dist/components/ui/meter.js +23 -19
  198. package/dist/components/ui/meter.js.map +1 -1
  199. package/dist/components/ui/meter_module.css.map +1 -1
  200. package/dist/components/ui/navigation-menu.d.ts +3 -12
  201. package/dist/components/ui/navigation-menu.d.ts.map +1 -1
  202. package/dist/components/ui/navigation-menu.js +15 -12
  203. package/dist/components/ui/navigation-menu.js.map +1 -1
  204. package/dist/components/ui/navigation-menu_module.css +1 -1
  205. package/dist/components/ui/navigation-menu_module.css.map +1 -1
  206. package/dist/components/ui/number-field.d.ts +6 -12
  207. package/dist/components/ui/number-field.d.ts.map +1 -1
  208. package/dist/components/ui/number-field.js +3 -3
  209. package/dist/components/ui/number-field.js.map +1 -1
  210. package/dist/components/ui/number-field_module.css.map +1 -1
  211. package/dist/components/ui/pagination.js +8 -8
  212. package/dist/components/ui/pagination.js.map +1 -1
  213. package/dist/components/ui/pagination_module.css.map +1 -1
  214. package/dist/components/ui/popover.js +5 -5
  215. package/dist/components/ui/popover.js.map +1 -1
  216. package/dist/components/ui/popover_module.css.map +1 -1
  217. package/dist/components/ui/progress.d.ts +1 -4
  218. package/dist/components/ui/progress.d.ts.map +1 -1
  219. package/dist/components/ui/progress.js +10 -9
  220. package/dist/components/ui/progress.js.map +1 -1
  221. package/dist/components/ui/progress_module.css.map +1 -1
  222. package/dist/components/ui/radio-group.d.ts +2 -4
  223. package/dist/components/ui/radio-group.d.ts.map +1 -1
  224. package/dist/components/ui/radio-group.js +3 -3
  225. package/dist/components/ui/radio-group.js.map +1 -1
  226. package/dist/components/ui/radio-group_module.css.map +1 -1
  227. package/dist/components/ui/resizable.d.ts +13 -29
  228. package/dist/components/ui/resizable.d.ts.map +1 -1
  229. package/dist/components/ui/resizable.js +8 -7
  230. package/dist/components/ui/resizable.js.map +1 -1
  231. package/dist/components/ui/resizable_module.css.map +1 -1
  232. package/dist/components/ui/ripple-button.js +9 -9
  233. package/dist/components/ui/ripple-button.js.map +1 -1
  234. package/dist/components/ui/ripple-button_module.css.map +1 -1
  235. package/dist/components/ui/scratcher.d.ts +1 -1
  236. package/dist/components/ui/scratcher.d.ts.map +1 -1
  237. package/dist/components/ui/scratcher.js +5 -4
  238. package/dist/components/ui/scratcher.js.map +1 -1
  239. package/dist/components/ui/scratcher_module.css.map +1 -1
  240. package/dist/components/ui/scroll-area.d.ts +2 -4
  241. package/dist/components/ui/scroll-area.d.ts.map +1 -1
  242. package/dist/components/ui/scroll-area.js +2 -2
  243. package/dist/components/ui/scroll-area.js.map +1 -1
  244. package/dist/components/ui/scroll-area_module.css.map +1 -1
  245. package/dist/components/ui/select.js +4 -4
  246. package/dist/components/ui/select.js.map +1 -1
  247. package/dist/components/ui/select_module.css.map +1 -1
  248. package/dist/components/ui/separator.d.ts +1 -4
  249. package/dist/components/ui/separator.d.ts.map +1 -1
  250. package/dist/components/ui/separator.js +9 -8
  251. package/dist/components/ui/separator.js.map +1 -1
  252. package/dist/components/ui/separator_module.css.map +1 -1
  253. package/dist/components/ui/sheet.d.ts.map +1 -1
  254. package/dist/components/ui/sheet.js +6 -6
  255. package/dist/components/ui/sheet.js.map +1 -1
  256. package/dist/components/ui/sheet_module.css.map +1 -1
  257. package/dist/components/ui/sidebar.d.ts +1 -1
  258. package/dist/components/ui/sidebar.d.ts.map +1 -1
  259. package/dist/components/ui/sidebar.js +36 -36
  260. package/dist/components/ui/sidebar.js.map +1 -1
  261. package/dist/components/ui/sidebar_module.css.map +1 -1
  262. package/dist/components/ui/skeleton.js +2 -2
  263. package/dist/components/ui/skeleton.js.map +1 -1
  264. package/dist/components/ui/skeleton_module.css.map +1 -1
  265. package/dist/components/ui/slider.js +2 -2
  266. package/dist/components/ui/slider.js.map +1 -1
  267. package/dist/components/ui/slider_module.css.map +1 -1
  268. package/dist/components/ui/spinner.js +2 -2
  269. package/dist/components/ui/spinner.js.map +1 -1
  270. package/dist/components/ui/spinner_module.css.map +1 -1
  271. package/dist/components/ui/stepper.js +2 -2
  272. package/dist/components/ui/stepper.js.map +1 -1
  273. package/dist/components/ui/stepper_module.css.map +1 -1
  274. package/dist/components/ui/switch.js +2 -2
  275. package/dist/components/ui/switch.js.map +1 -1
  276. package/dist/components/ui/switch_module.css.map +1 -1
  277. package/dist/components/ui/table-skeleton.js +2 -2
  278. package/dist/components/ui/table-skeleton.js.map +1 -1
  279. package/dist/components/ui/table-skeleton_module.css.map +1 -1
  280. package/dist/components/ui/table.js +9 -9
  281. package/dist/components/ui/table.js.map +1 -1
  282. package/dist/components/ui/table_module.css.map +1 -1
  283. package/dist/components/ui/tabs.js +3 -3
  284. package/dist/components/ui/tabs.js.map +1 -1
  285. package/dist/components/ui/tabs_module.css.map +1 -1
  286. package/dist/components/ui/textarea.js +2 -2
  287. package/dist/components/ui/textarea.js.map +1 -1
  288. package/dist/components/ui/textarea_module.css.map +1 -1
  289. package/dist/components/ui/timeline.js +5 -5
  290. package/dist/components/ui/timeline.js.map +1 -1
  291. package/dist/components/ui/timeline_module.css.map +1 -1
  292. package/dist/components/ui/{sonner.d.ts → toast.d.ts} +15 -6
  293. package/dist/components/ui/toast.d.ts.map +1 -0
  294. package/dist/components/ui/{sonner.js → toast.js} +43 -42
  295. package/dist/components/ui/toast.js.map +1 -0
  296. package/dist/components/ui/toast.module.js +34 -0
  297. package/dist/components/ui/toast.module.js.map +1 -0
  298. package/dist/components/ui/{sonner_module.css → toast_module.css} +35 -35
  299. package/dist/components/ui/toast_module.css.map +1 -0
  300. package/dist/components/ui/toggle-group.d.ts +2 -8
  301. package/dist/components/ui/toggle-group.d.ts.map +1 -1
  302. package/dist/components/ui/toggle-group.js +14 -12
  303. package/dist/components/ui/toggle-group.js.map +1 -1
  304. package/dist/components/ui/toggle-group_module.css.map +1 -1
  305. package/dist/components/ui/toggle.js +2 -2
  306. package/dist/components/ui/toggle.js.map +1 -1
  307. package/dist/components/ui/toggle_module.css.map +1 -1
  308. package/dist/components/ui/toolbar.d.ts +10 -30
  309. package/dist/components/ui/toolbar.d.ts.map +1 -1
  310. package/dist/components/ui/toolbar.js +28 -23
  311. package/dist/components/ui/toolbar.js.map +1 -1
  312. package/dist/components/ui/toolbar_module.css.map +1 -1
  313. package/dist/components/ui/tooltip.js +4 -4
  314. package/dist/components/ui/tooltip.js.map +1 -1
  315. package/dist/components/ui/tooltip_module.css.map +1 -1
  316. package/dist/components/ui/typewriter.js +4 -4
  317. package/dist/components/ui/typewriter.js.map +1 -1
  318. package/dist/components/ui/typewriter_module.css.map +1 -1
  319. package/dist/components/ui/visually-hidden.js +2 -2
  320. package/dist/components/ui/visually-hidden.js.map +1 -1
  321. package/dist/components/ui/visually-hidden_module.css.map +1 -1
  322. package/dist/hooks/useAnnounce.js +5 -5
  323. package/dist/hooks/useAnnounce.js.map +1 -1
  324. package/dist/hooks/useClipboard.d.ts +77 -0
  325. package/dist/hooks/useClipboard.d.ts.map +1 -0
  326. package/dist/hooks/useClipboard.js +42 -0
  327. package/dist/hooks/useClipboard.js.map +1 -0
  328. package/dist/hooks/useControllableState.d.ts +54 -0
  329. package/dist/hooks/useControllableState.d.ts.map +1 -0
  330. package/dist/hooks/useControllableState.js +29 -0
  331. package/dist/hooks/useControllableState.js.map +1 -0
  332. package/dist/hooks/useDebounce.d.ts +33 -0
  333. package/dist/hooks/useDebounce.d.ts.map +1 -0
  334. package/dist/hooks/useDebounce.js +20 -0
  335. package/dist/hooks/useDebounce.js.map +1 -0
  336. package/dist/hooks/useEventCallback.d.ts +34 -0
  337. package/dist/hooks/useEventCallback.d.ts.map +1 -0
  338. package/dist/hooks/useEventCallback.js +12 -0
  339. package/dist/hooks/useEventCallback.js.map +1 -0
  340. package/dist/hooks/useFocusManager.js +6 -6
  341. package/dist/hooks/useFocusManager.js.map +1 -1
  342. package/dist/hooks/useFocusVisible.js +5 -5
  343. package/dist/hooks/useFocusVisible.js.map +1 -1
  344. package/dist/hooks/useId.d.ts +30 -0
  345. package/dist/hooks/useId.d.ts.map +1 -0
  346. package/dist/hooks/useId.js +9 -0
  347. package/dist/hooks/useId.js.map +1 -0
  348. package/dist/hooks/useIntersectionObserver.d.ts +51 -0
  349. package/dist/hooks/useIntersectionObserver.d.ts.map +1 -0
  350. package/dist/hooks/useIntersectionObserver.js +25 -0
  351. package/dist/hooks/useIntersectionObserver.js.map +1 -0
  352. package/dist/hooks/useInterval.d.ts +55 -0
  353. package/dist/hooks/useInterval.d.ts.map +1 -0
  354. package/dist/hooks/useInterval.js +24 -0
  355. package/dist/hooks/useInterval.js.map +1 -0
  356. package/dist/hooks/useLocalStorage.d.ts +43 -0
  357. package/dist/hooks/useLocalStorage.d.ts.map +1 -0
  358. package/dist/hooks/useLocalStorage.js +53 -0
  359. package/dist/hooks/useLocalStorage.js.map +1 -0
  360. package/dist/hooks/useMediaQuery.js +3 -3
  361. package/dist/hooks/useMediaQuery.js.map +1 -1
  362. package/dist/hooks/useMergedRefs.d.ts +27 -0
  363. package/dist/hooks/useMergedRefs.d.ts.map +1 -0
  364. package/dist/hooks/useMergedRefs.js +11 -0
  365. package/dist/hooks/useMergedRefs.js.map +1 -0
  366. package/dist/hooks/useOnClickOutside.d.ts +32 -0
  367. package/dist/hooks/useOnClickOutside.d.ts.map +1 -0
  368. package/dist/hooks/useOnClickOutside.js +23 -0
  369. package/dist/hooks/useOnClickOutside.js.map +1 -0
  370. package/dist/hooks/usePrevious.d.ts +33 -0
  371. package/dist/hooks/usePrevious.d.ts.map +1 -0
  372. package/dist/hooks/usePrevious.js +14 -0
  373. package/dist/hooks/usePrevious.js.map +1 -0
  374. package/dist/hooks/useThrottle.d.ts +37 -0
  375. package/dist/hooks/useThrottle.d.ts.map +1 -0
  376. package/dist/hooks/useThrottle.js +34 -0
  377. package/dist/hooks/useThrottle.js.map +1 -0
  378. package/dist/hooks/useTimeout.d.ts +28 -0
  379. package/dist/hooks/useTimeout.d.ts.map +1 -0
  380. package/dist/hooks/useTimeout.js +24 -0
  381. package/dist/hooks/useTimeout.js.map +1 -0
  382. package/dist/index.css.map +1 -1
  383. package/dist/index.d.ts +17 -3
  384. package/dist/index.d.ts.map +1 -1
  385. package/dist/index.js +15 -1
  386. package/dist/lib/utilities.d.ts +2 -3
  387. package/dist/lib/utilities.d.ts.map +1 -1
  388. package/dist/lib/utilities.js.map +1 -1
  389. package/dist/motion/Collapse.js +2 -2
  390. package/dist/motion/Collapse.js.map +1 -1
  391. package/dist/motion/Collapse_module.css.map +1 -1
  392. package/dist/motion/tokens.js +5 -5
  393. package/dist/motion/tokens.js.map +1 -1
  394. package/package.json +88 -10
  395. package/src/components/ui/alert-dialog.tsx +15 -8
  396. package/src/components/ui/avatar.tsx +9 -6
  397. package/src/components/ui/calendar.tsx +9 -14
  398. package/src/components/ui/carousel.tsx +2 -0
  399. package/src/components/ui/chart.tsx +65 -62
  400. package/src/components/ui/checkbox-group.tsx +4 -5
  401. package/src/components/ui/checkbox.tsx +10 -2
  402. package/src/components/ui/collapsible.tsx +1 -0
  403. package/src/components/ui/combobox.module.css +158 -0
  404. package/src/components/ui/combobox.tsx +569 -0
  405. package/src/components/ui/command.tsx +31 -15
  406. package/src/components/ui/context-menu.tsx +3 -0
  407. package/src/components/ui/drawer.tsx +2 -0
  408. package/src/components/ui/dropdown-menu.tsx +3 -0
  409. package/src/components/ui/dropdrawer.tsx +80 -62
  410. package/src/components/ui/form.tsx +28 -3
  411. package/src/components/ui/input-otp.tsx +3 -3
  412. package/src/components/ui/menubar.tsx +9 -10
  413. package/src/components/ui/meter.tsx +16 -17
  414. package/src/components/ui/navigation-menu.tsx +41 -33
  415. package/src/components/ui/number-field.tsx +6 -13
  416. package/src/components/ui/progress.tsx +3 -2
  417. package/src/components/ui/radio-group.tsx +2 -5
  418. package/src/components/ui/resizable.tsx +15 -18
  419. package/src/components/ui/scratcher.tsx +6 -10
  420. package/src/components/ui/scroll-area.tsx +2 -5
  421. package/src/components/ui/separator.tsx +4 -3
  422. package/src/components/ui/sheet.tsx +3 -0
  423. package/src/components/ui/sidebar.tsx +1 -0
  424. package/src/components/ui/{sonner.module.css → toast.module.css} +1 -1
  425. package/src/components/ui/{sonner.tsx → toast.tsx} +22 -14
  426. package/src/components/ui/toggle-group.tsx +6 -4
  427. package/src/components/ui/toolbar.tsx +20 -21
  428. package/src/hooks/useClipboard.tsx +137 -0
  429. package/src/hooks/useControllableState.tsx +81 -0
  430. package/src/hooks/useDebounce.tsx +50 -0
  431. package/src/hooks/useEventCallback.tsx +47 -0
  432. package/src/hooks/useId.tsx +36 -0
  433. package/src/hooks/useIntersectionObserver.tsx +81 -0
  434. package/src/hooks/useInterval.tsx +80 -0
  435. package/src/hooks/useLocalStorage.tsx +111 -0
  436. package/src/hooks/useMergedRefs.tsx +48 -0
  437. package/src/hooks/useOnClickOutside.tsx +55 -0
  438. package/src/hooks/usePrevious.tsx +44 -0
  439. package/src/hooks/useThrottle.tsx +78 -0
  440. package/src/hooks/useTimeout.tsx +51 -0
  441. package/src/index.ts +27 -4
  442. package/src/lib/utilities.ts +4 -4
  443. package/src/motion/tokens.ts +4 -4
  444. package/src/stories/DesignPrinciples.mdx +48 -0
  445. package/src/stories/GettingStarted.mdx +92 -0
  446. package/src/stories/Welcome.mdx +44 -0
  447. package/dist/components/ui/sonner.d.ts.map +0 -1
  448. package/dist/components/ui/sonner.js.map +0 -1
  449. package/dist/components/ui/sonner.module.js +0 -34
  450. package/dist/components/ui/sonner.module.js.map +0 -1
  451. package/dist/components/ui/sonner_module.css.map +0 -1
@@ -1,15 +1,16 @@
1
1
  "use client";
2
2
  import { jsx } from "react/jsx-runtime";
3
3
  import { mergeProps } from "@base-ui/react/merge-props";
4
- import { Toolbar } from "@base-ui/react/toolbar";
4
+ import { Toolbar as toolbar_Toolbar } from "@base-ui/react/toolbar";
5
5
  import { useRender } from "@base-ui/react/use-render";
6
- import "react";
7
6
  import { cn } from "../../lib/utilities.js";
8
7
  import toolbar_module from "./toolbar.module.js";
9
- function toolbar_Toolbar(props) {
8
+ import * as __rspack_external_react from "react";
9
+ const ui_toolbar_Toolbar = /*#__PURE__*/ __rspack_external_react.forwardRef(function(props, forwardedRef) {
10
10
  const { className, children, render, ...otherProps } = props;
11
- return /*#__PURE__*/ jsx(Toolbar.Root, {
11
+ return /*#__PURE__*/ jsx(toolbar_Toolbar.Root, {
12
12
  ...otherProps,
13
+ ref: forwardedRef,
13
14
  render: useRender({
14
15
  defaultTagName: "div",
15
16
  render: render,
@@ -19,11 +20,12 @@ function toolbar_Toolbar(props) {
19
20
  }),
20
21
  children: children
21
22
  });
22
- }
23
- function ToolbarButton(props) {
23
+ });
24
+ const toolbar_ToolbarButton = /*#__PURE__*/ __rspack_external_react.forwardRef(function(props, forwardedRef) {
24
25
  const { className, children, render, ...otherProps } = props;
25
- return /*#__PURE__*/ jsx(Toolbar.Button, {
26
+ return /*#__PURE__*/ jsx(toolbar_Toolbar.Button, {
26
27
  ...otherProps,
28
+ ref: forwardedRef,
27
29
  render: useRender({
28
30
  defaultTagName: "button",
29
31
  render: render,
@@ -33,11 +35,12 @@ function ToolbarButton(props) {
33
35
  }),
34
36
  children: children
35
37
  });
36
- }
37
- function ToolbarGroup(props) {
38
+ });
39
+ const toolbar_ToolbarGroup = /*#__PURE__*/ __rspack_external_react.forwardRef(function(props, forwardedRef) {
38
40
  const { className, children, render, ...otherProps } = props;
39
- return /*#__PURE__*/ jsx(Toolbar.Group, {
41
+ return /*#__PURE__*/ jsx(toolbar_Toolbar.Group, {
40
42
  ...otherProps,
43
+ ref: forwardedRef,
41
44
  render: useRender({
42
45
  defaultTagName: "div",
43
46
  render: render,
@@ -47,11 +50,12 @@ function ToolbarGroup(props) {
47
50
  }),
48
51
  children: children
49
52
  });
50
- }
51
- function ToolbarSeparator(props) {
53
+ });
54
+ const toolbar_ToolbarSeparator = /*#__PURE__*/ __rspack_external_react.forwardRef(function(props, forwardedRef) {
52
55
  const { className, render, ...otherProps } = props;
53
- return /*#__PURE__*/ jsx(Toolbar.Separator, {
56
+ return /*#__PURE__*/ jsx(toolbar_Toolbar.Separator, {
54
57
  ...otherProps,
58
+ ref: forwardedRef,
55
59
  render: useRender({
56
60
  defaultTagName: "div",
57
61
  render: render,
@@ -60,11 +64,12 @@ function ToolbarSeparator(props) {
60
64
  }, {})
61
65
  })
62
66
  });
63
- }
64
- function ToolbarLink(props) {
67
+ });
68
+ const toolbar_ToolbarLink = /*#__PURE__*/ __rspack_external_react.forwardRef(function(props, forwardedRef) {
65
69
  const { className, children, render, ...otherProps } = props;
66
- return /*#__PURE__*/ jsx(Toolbar.Link, {
70
+ return /*#__PURE__*/ jsx(toolbar_Toolbar.Link, {
67
71
  ...otherProps,
72
+ ref: forwardedRef,
68
73
  render: useRender({
69
74
  defaultTagName: "a",
70
75
  render: render,
@@ -74,12 +79,12 @@ function ToolbarLink(props) {
74
79
  }),
75
80
  children: children
76
81
  });
77
- }
78
- toolbar_Toolbar.displayName = "Toolbar";
79
- ToolbarButton.displayName = "ToolbarButton";
80
- ToolbarGroup.displayName = "ToolbarGroup";
81
- ToolbarSeparator.displayName = "ToolbarSeparator";
82
- ToolbarLink.displayName = "ToolbarLink";
83
- export { ToolbarButton, ToolbarGroup, ToolbarLink, ToolbarSeparator, toolbar_Toolbar as Toolbar };
82
+ });
83
+ ui_toolbar_Toolbar.displayName = "Toolbar";
84
+ toolbar_ToolbarButton.displayName = "ToolbarButton";
85
+ toolbar_ToolbarGroup.displayName = "ToolbarGroup";
86
+ toolbar_ToolbarSeparator.displayName = "ToolbarSeparator";
87
+ toolbar_ToolbarLink.displayName = "ToolbarLink";
88
+ export { toolbar_ToolbarButton as ToolbarButton, toolbar_ToolbarGroup as ToolbarGroup, toolbar_ToolbarLink as ToolbarLink, toolbar_ToolbarSeparator as ToolbarSeparator, ui_toolbar_Toolbar as Toolbar };
84
89
 
85
90
  //# sourceMappingURL=toolbar.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"components/ui/toolbar.js","sources":["../../../src/components/ui/toolbar.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport {mergeProps} from \"@base-ui/react/merge-props\";\r\nimport {Toolbar as BaseToolbar} from \"@base-ui/react/toolbar\";\r\nimport {useRender} from \"@base-ui/react/use-render\";\r\nimport * as React from \"react\";\r\n\r\nimport {cn} from \"@/lib/utilities\";\r\nimport styles from \"./toolbar.module.css\";\r\n\r\ntype ToolbarProps = React.ComponentPropsWithRef<typeof BaseToolbar.Root>;\r\ntype ToolbarButtonProps = React.ComponentPropsWithRef<typeof BaseToolbar.Button>;\r\ntype ToolbarGroupProps = React.ComponentPropsWithRef<typeof BaseToolbar.Group>;\r\ntype ToolbarSeparatorProps = React.ComponentPropsWithRef<typeof BaseToolbar.Separator>;\r\ntype ToolbarLinkProps = React.ComponentPropsWithRef<typeof BaseToolbar.Link>;\r\n\r\n/**\r\n * Arranges related actions into a keyboard-accessible toolbar.\r\n *\r\n * @remarks\r\n * - Renders a `<div>` element by default\r\n * - Built on Base UI Toolbar primitives\r\n * - Supports roving focus and compound toolbar item composition\r\n *\r\n * @example\r\n * ```tsx\r\n * <Toolbar aria-label='Text formatting'>\r\n * <ToolbarButton>Bold</ToolbarButton>\r\n * <ToolbarButton>Italic</ToolbarButton>\r\n * </Toolbar>\r\n * ```\r\n *\r\n * @see {@link https://base-ui.com/react/components/toolbar | Base UI Toolbar Docs}\r\n */\r\nfunction Toolbar(props: Readonly<Toolbar.Props>): React.ReactElement {\r\n const {className, children, render, ...otherProps} = props;\r\n\r\n return (\r\n <BaseToolbar.Root\r\n {...otherProps}\r\n render={useRender({\r\n defaultTagName: \"div\",\r\n render: render as never,\r\n props: mergeProps({className: cn(styles.root, className)}, {}),\r\n })}>\r\n {children}\r\n </BaseToolbar.Root>\r\n );\r\n}\r\n\r\n/**\r\n * Renders an interactive button within a toolbar.\r\n *\r\n * @remarks\r\n * - Renders a `<button>` element by default\r\n * - Built on Base UI Toolbar button behavior\r\n * - Applies shared toolbar item spacing and focus styling\r\n *\r\n * @example\r\n * ```tsx\r\n * <ToolbarButton aria-label='Bold'>B</ToolbarButton>\r\n * ```\r\n *\r\n * @see {@link https://base-ui.com/react/components/toolbar | Base UI Toolbar Docs}\r\n */\r\nfunction ToolbarButton(props: Readonly<ToolbarButton.Props>): React.ReactElement {\r\n const {className, children, render, ...otherProps} = props;\r\n\r\n return (\r\n <BaseToolbar.Button\r\n {...otherProps}\r\n render={useRender({\r\n defaultTagName: \"button\",\r\n render: render as never,\r\n props: mergeProps({className: cn(styles.item, styles.button, className)}, {}),\r\n })}>\r\n {children}\r\n </BaseToolbar.Button>\r\n );\r\n}\r\n\r\n/**\r\n * Groups related toolbar controls into a single visual cluster.\r\n *\r\n * @remarks\r\n * - Renders a `<div>` element by default\r\n * - Built on Base UI Toolbar grouping primitives\r\n *\r\n * @example\r\n * ```tsx\r\n * <ToolbarGroup>\r\n * <ToolbarButton>Left</ToolbarButton>\r\n * <ToolbarButton>Center</ToolbarButton>\r\n * </ToolbarGroup>\r\n * ```\r\n *\r\n * @see {@link https://base-ui.com/react/components/toolbar | Base UI Toolbar Docs}\r\n */\r\nfunction ToolbarGroup(props: Readonly<ToolbarGroup.Props>): React.ReactElement {\r\n const {className, children, render, ...otherProps} = props;\r\n\r\n return (\r\n <BaseToolbar.Group\r\n {...otherProps}\r\n render={useRender({\r\n defaultTagName: \"div\",\r\n render: render as never,\r\n props: mergeProps({className: cn(styles.group, className)}, {}),\r\n })}>\r\n {children}\r\n </BaseToolbar.Group>\r\n );\r\n}\r\n\r\n/**\r\n * Renders a visual separator between toolbar items or groups.\r\n *\r\n * @remarks\r\n * - Renders a `<div>` element by default\r\n * - Built on Base UI Toolbar separator primitives\r\n *\r\n * @example\r\n * ```tsx\r\n * <ToolbarSeparator />\r\n * ```\r\n *\r\n * @see {@link https://base-ui.com/react/components/toolbar | Base UI Toolbar Docs}\r\n */\r\nfunction ToolbarSeparator(props: Readonly<ToolbarSeparator.Props>): React.ReactElement {\r\n const {className, render, ...otherProps} = props;\r\n\r\n return (\r\n <BaseToolbar.Separator\r\n {...otherProps}\r\n render={useRender({\r\n defaultTagName: \"div\",\r\n render: render as never,\r\n props: mergeProps({className: cn(styles.separator, className)}, {}),\r\n })}\r\n />\r\n );\r\n}\r\n\r\n/**\r\n * Renders a link that visually matches toolbar buttons.\r\n *\r\n * @remarks\r\n * - Renders an `<a>` element by default\r\n * - Built on Base UI Toolbar link primitives\r\n *\r\n * @example\r\n * ```tsx\r\n * <ToolbarLink href='/docs'>Docs</ToolbarLink>\r\n * ```\r\n *\r\n * @see {@link https://base-ui.com/react/components/toolbar | Base UI Toolbar Docs}\r\n */\r\nfunction ToolbarLink(props: Readonly<ToolbarLink.Props>): React.ReactElement {\r\n const {className, children, render, ...otherProps} = props;\r\n\r\n return (\r\n <BaseToolbar.Link\r\n {...otherProps}\r\n render={useRender({\r\n defaultTagName: \"a\",\r\n render: render as never,\r\n props: mergeProps({className: cn(styles.item, styles.link, className)}, {}),\r\n })}>\r\n {children}\r\n </BaseToolbar.Link>\r\n );\r\n}\r\n\r\n// eslint-disable-next-line no-redeclare -- required for the canonical component namespace typing API\r\nnamespace Toolbar {\r\n export type Props = ToolbarProps;\r\n export type State = BaseToolbar.Root.State;\r\n}\r\n\r\n// eslint-disable-next-line no-redeclare -- required for the canonical component namespace typing API\r\nnamespace ToolbarButton {\r\n export type Props = ToolbarButtonProps;\r\n export type State = BaseToolbar.Button.State;\r\n}\r\n\r\n// eslint-disable-next-line no-redeclare -- required for the canonical component namespace typing API\r\nnamespace ToolbarGroup {\r\n export type Props = ToolbarGroupProps;\r\n export type State = BaseToolbar.Group.State;\r\n}\r\n\r\n// eslint-disable-next-line no-redeclare -- required for the canonical component namespace typing API\r\nnamespace ToolbarSeparator {\r\n export type Props = ToolbarSeparatorProps;\r\n export type State = BaseToolbar.Separator.State;\r\n}\r\n\r\n// eslint-disable-next-line no-redeclare -- required for the canonical component namespace typing API\r\nnamespace ToolbarLink {\r\n export type Props = ToolbarLinkProps;\r\n export type State = BaseToolbar.Link.State;\r\n}\r\n\r\nToolbar.displayName = \"Toolbar\";\r\nToolbarButton.displayName = \"ToolbarButton\";\r\nToolbarGroup.displayName = \"ToolbarGroup\";\r\nToolbarSeparator.displayName = \"ToolbarSeparator\";\r\nToolbarLink.displayName = \"ToolbarLink\";\r\n\r\nexport {Toolbar, ToolbarButton, ToolbarGroup, ToolbarLink, ToolbarSeparator};\r\n"],"names":["Toolbar","props","className","children","render","otherProps","BaseToolbar","useRender","mergeProps","cn","styles","ToolbarButton","ToolbarGroup","ToolbarSeparator","ToolbarLink"],"mappings":";;;;;;;;AAkCA,SAASA,gBAAQC,KAA8B;IAC7C,MAAM,EAACC,SAAS,EAAEC,QAAQ,EAAEC,MAAM,EAAE,GAAGC,YAAW,GAAGJ;IAErD,OAAO,WAAP,GACE,IAACK,QAAAA,IAAgB;QACd,GAAGD,UAAU;QACd,QAAQE,UAAU;YAChB,gBAAgB;YAChB,QAAQH;YACR,OAAOI,WAAW;gBAAC,WAAWC,GAAGC,eAAAA,IAAW,EAAER;YAAU,GAAG,CAAC;QAC9D;kBACCC;;AAGP;AAiBA,SAASQ,cAAcV,KAAoC;IACzD,MAAM,EAACC,SAAS,EAAEC,QAAQ,EAAEC,MAAM,EAAE,GAAGC,YAAW,GAAGJ;IAErD,OAAO,WAAP,GACE,IAACK,QAAAA,MAAkB;QAChB,GAAGD,UAAU;QACd,QAAQE,UAAU;YAChB,gBAAgB;YAChB,QAAQH;YACR,OAAOI,WAAW;gBAAC,WAAWC,GAAGC,eAAAA,IAAW,EAAEA,eAAAA,MAAa,EAAER;YAAU,GAAG,CAAC;QAC7E;kBACCC;;AAGP;AAmBA,SAASS,aAAaX,KAAmC;IACvD,MAAM,EAACC,SAAS,EAAEC,QAAQ,EAAEC,MAAM,EAAE,GAAGC,YAAW,GAAGJ;IAErD,OAAO,WAAP,GACE,IAACK,QAAAA,KAAiB;QACf,GAAGD,UAAU;QACd,QAAQE,UAAU;YAChB,gBAAgB;YAChB,QAAQH;YACR,OAAOI,WAAW;gBAAC,WAAWC,GAAGC,eAAAA,KAAY,EAAER;YAAU,GAAG,CAAC;QAC/D;kBACCC;;AAGP;AAgBA,SAASU,iBAAiBZ,KAAuC;IAC/D,MAAM,EAACC,SAAS,EAAEE,MAAM,EAAE,GAAGC,YAAW,GAAGJ;IAE3C,OAAO,WAAP,GACE,IAACK,QAAAA,SAAqB;QACnB,GAAGD,UAAU;QACd,QAAQE,UAAU;YAChB,gBAAgB;YAChB,QAAQH;YACR,OAAOI,WAAW;gBAAC,WAAWC,GAAGC,eAAAA,SAAgB,EAAER;YAAU,GAAG,CAAC;QACnE;;AAGN;AAgBA,SAASY,YAAYb,KAAkC;IACrD,MAAM,EAACC,SAAS,EAAEC,QAAQ,EAAEC,MAAM,EAAE,GAAGC,YAAW,GAAGJ;IAErD,OAAO,WAAP,GACE,IAACK,QAAAA,IAAgB;QACd,GAAGD,UAAU;QACd,QAAQE,UAAU;YAChB,gBAAgB;YAChB,QAAQH;YACR,OAAOI,WAAW;gBAAC,WAAWC,GAAGC,eAAAA,IAAW,EAAEA,eAAAA,IAAW,EAAER;YAAU,GAAG,CAAC;QAC3E;kBACCC;;AAGP;AAgCAH,gBAAQ,WAAW,GAAG;AACtBW,cAAc,WAAW,GAAG;AAC5BC,aAAa,WAAW,GAAG;AAC3BC,iBAAiB,WAAW,GAAG;AAC/BC,YAAY,WAAW,GAAG"}
1
+ {"version":3,"file":"components/ui/toolbar.js","sources":["../../../src/components/ui/toolbar.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport {mergeProps} from \"@base-ui/react/merge-props\";\r\nimport {Toolbar as BaseToolbar} from \"@base-ui/react/toolbar\";\r\nimport {useRender} from \"@base-ui/react/use-render\";\r\nimport * as React from \"react\";\r\n\r\nimport {cn} from \"@/lib/utilities\";\r\nimport styles from \"./toolbar.module.css\";\r\n\r\n/**\r\n * Arranges related actions into a keyboard-accessible toolbar.\r\n *\r\n * @remarks\r\n * - Renders a `<div>` element by default\r\n * - Built on Base UI Toolbar primitives\r\n * - Supports roving focus and compound toolbar item composition\r\n *\r\n * @example\r\n * ```tsx\r\n * <Toolbar aria-label='Text formatting'>\r\n * <ToolbarButton>Bold</ToolbarButton>\r\n * <ToolbarButton>Italic</ToolbarButton>\r\n * </Toolbar>\r\n * ```\r\n *\r\n * @see {@link https://base-ui.com/react/components/toolbar | Base UI Toolbar Docs}\r\n */\r\nconst Toolbar = React.forwardRef<HTMLDivElement, Toolbar.Props>(function Toolbar(props, forwardedRef) {\r\n const {className, children, render, ...otherProps} = props;\r\n\r\n return (\r\n <BaseToolbar.Root\r\n {...otherProps}\r\n ref={forwardedRef}\r\n render={useRender({\r\n defaultTagName: \"div\",\r\n render: render as never,\r\n props: mergeProps({className: cn(styles.root, className)}, {}),\r\n })}>\r\n {children}\r\n </BaseToolbar.Root>\r\n );\r\n});\r\n\r\n/**\r\n * Renders an interactive button within a toolbar.\r\n *\r\n * @remarks\r\n * - Renders a `<button>` element by default\r\n * - Built on Base UI Toolbar button behavior\r\n * - Applies shared toolbar item spacing and focus styling\r\n *\r\n * @example\r\n * ```tsx\r\n * <ToolbarButton aria-label='Bold'>B</ToolbarButton>\r\n * ```\r\n *\r\n * @see {@link https://base-ui.com/react/components/toolbar | Base UI Toolbar Docs}\r\n */\r\nconst ToolbarButton = React.forwardRef<HTMLButtonElement, ToolbarButton.Props>(function ToolbarButton(props, forwardedRef) {\r\n const {className, children, render, ...otherProps} = props;\r\n\r\n return (\r\n <BaseToolbar.Button\r\n {...otherProps}\r\n ref={forwardedRef}\r\n render={useRender({\r\n defaultTagName: \"button\",\r\n render: render as never,\r\n props: mergeProps({className: cn(styles.item, styles.button, className)}, {}),\r\n })}>\r\n {children}\r\n </BaseToolbar.Button>\r\n );\r\n});\r\n\r\n/**\r\n * Groups related toolbar controls into a single visual cluster.\r\n *\r\n * @remarks\r\n * - Renders a `<div>` element by default\r\n * - Built on Base UI Toolbar grouping primitives\r\n *\r\n * @example\r\n * ```tsx\r\n * <ToolbarGroup>\r\n * <ToolbarButton>Left</ToolbarButton>\r\n * <ToolbarButton>Center</ToolbarButton>\r\n * </ToolbarGroup>\r\n * ```\r\n *\r\n * @see {@link https://base-ui.com/react/components/toolbar | Base UI Toolbar Docs}\r\n */\r\nconst ToolbarGroup = React.forwardRef<HTMLDivElement, ToolbarGroup.Props>(function ToolbarGroup(props, forwardedRef) {\r\n const {className, children, render, ...otherProps} = props;\r\n\r\n return (\r\n <BaseToolbar.Group\r\n {...otherProps}\r\n ref={forwardedRef}\r\n render={useRender({\r\n defaultTagName: \"div\",\r\n render: render as never,\r\n props: mergeProps({className: cn(styles.group, className)}, {}),\r\n })}>\r\n {children}\r\n </BaseToolbar.Group>\r\n );\r\n});\r\n\r\n/**\r\n * Renders a visual separator between toolbar items or groups.\r\n *\r\n * @remarks\r\n * - Renders a `<div>` element by default\r\n * - Built on Base UI Toolbar separator primitives\r\n *\r\n * @example\r\n * ```tsx\r\n * <ToolbarSeparator />\r\n * ```\r\n *\r\n * @see {@link https://base-ui.com/react/components/toolbar | Base UI Toolbar Docs}\r\n */\r\nconst ToolbarSeparator = React.forwardRef<HTMLDivElement, ToolbarSeparator.Props>(function ToolbarSeparator(props, forwardedRef) {\r\n const {className, render, ...otherProps} = props;\r\n\r\n return (\r\n <BaseToolbar.Separator\r\n {...otherProps}\r\n ref={forwardedRef}\r\n render={useRender({\r\n defaultTagName: \"div\",\r\n render: render as never,\r\n props: mergeProps({className: cn(styles.separator, className)}, {}),\r\n })}\r\n />\r\n );\r\n});\r\n\r\n/**\r\n * Renders a link that visually matches toolbar buttons.\r\n *\r\n * @remarks\r\n * - Renders an `<a>` element by default\r\n * - Built on Base UI Toolbar link primitives\r\n *\r\n * @example\r\n * ```tsx\r\n * <ToolbarLink href='/docs'>Docs</ToolbarLink>\r\n * ```\r\n *\r\n * @see {@link https://base-ui.com/react/components/toolbar | Base UI Toolbar Docs}\r\n */\r\nconst ToolbarLink = React.forwardRef<HTMLAnchorElement, ToolbarLink.Props>(function ToolbarLink(props, forwardedRef) {\r\n const {className, children, render, ...otherProps} = props;\r\n\r\n return (\r\n <BaseToolbar.Link\r\n {...otherProps}\r\n ref={forwardedRef}\r\n render={useRender({\r\n defaultTagName: \"a\",\r\n render: render as never,\r\n props: mergeProps({className: cn(styles.item, styles.link, className)}, {}),\r\n })}>\r\n {children}\r\n </BaseToolbar.Link>\r\n );\r\n});\r\n\r\n// eslint-disable-next-line no-redeclare -- required for the canonical component namespace typing API\r\nnamespace Toolbar {\r\n export type Props = React.ComponentPropsWithRef<typeof BaseToolbar.Root>;\r\n export type State = BaseToolbar.Root.State;\r\n}\r\n\r\n// eslint-disable-next-line no-redeclare -- required for the canonical component namespace typing API\r\nnamespace ToolbarButton {\r\n export type Props = React.ComponentPropsWithRef<typeof BaseToolbar.Button>;\r\n export type State = BaseToolbar.Button.State;\r\n}\r\n\r\n// eslint-disable-next-line no-redeclare -- required for the canonical component namespace typing API\r\nnamespace ToolbarGroup {\r\n export type Props = React.ComponentPropsWithRef<typeof BaseToolbar.Group>;\r\n export type State = BaseToolbar.Group.State;\r\n}\r\n\r\n// eslint-disable-next-line no-redeclare -- required for the canonical component namespace typing API\r\nnamespace ToolbarSeparator {\r\n export type Props = React.ComponentPropsWithRef<typeof BaseToolbar.Separator>;\r\n export type State = BaseToolbar.Separator.State;\r\n}\r\n\r\n// eslint-disable-next-line no-redeclare -- required for the canonical component namespace typing API\r\nnamespace ToolbarLink {\r\n export type Props = React.ComponentPropsWithRef<typeof BaseToolbar.Link>;\r\n export type State = BaseToolbar.Link.State;\r\n}\r\n\r\nToolbar.displayName = \"Toolbar\";\r\nToolbarButton.displayName = \"ToolbarButton\";\r\nToolbarGroup.displayName = \"ToolbarGroup\";\r\nToolbarSeparator.displayName = \"ToolbarSeparator\";\r\nToolbarLink.displayName = \"ToolbarLink\";\r\n\r\nexport {Toolbar, ToolbarButton, ToolbarGroup, ToolbarLink, ToolbarSeparator};\r\n"],"names":["Toolbar","React","props","forwardedRef","className","children","render","otherProps","BaseToolbar","useRender","mergeProps","cn","styles","ToolbarButton","ToolbarGroup","ToolbarSeparator","ToolbarLink"],"mappings":";;;;;;;;AA4BA,MAAMA,qBAAU,WAAHA,GAAGC,wBAAAA,UAAgB,CAAgC,SAAiBC,KAAK,EAAEC,YAAY;IAClG,MAAM,EAACC,SAAS,EAAEC,QAAQ,EAAEC,MAAM,EAAE,GAAGC,YAAW,GAAGL;IAErD,OAAO,WAAP,GACE,IAACM,gBAAAA,IAAgB;QACd,GAAGD,UAAU;QACd,KAAKJ;QACL,QAAQM,UAAU;YAChB,gBAAgB;YAChB,QAAQH;YACR,OAAOI,WAAW;gBAAC,WAAWC,GAAGC,eAAAA,IAAW,EAAER;YAAU,GAAG,CAAC;QAC9D;kBACCC;;AAGP;AAiBA,MAAMQ,wBAAgB,WAAHA,GAAGZ,wBAAAA,UAAgB,CAAyC,SAAuBC,KAAK,EAAEC,YAAY;IACvH,MAAM,EAACC,SAAS,EAAEC,QAAQ,EAAEC,MAAM,EAAE,GAAGC,YAAW,GAAGL;IAErD,OAAO,WAAP,GACE,IAACM,gBAAAA,MAAkB;QAChB,GAAGD,UAAU;QACd,KAAKJ;QACL,QAAQM,UAAU;YAChB,gBAAgB;YAChB,QAAQH;YACR,OAAOI,WAAW;gBAAC,WAAWC,GAAGC,eAAAA,IAAW,EAAEA,eAAAA,MAAa,EAAER;YAAU,GAAG,CAAC;QAC7E;kBACCC;;AAGP;AAmBA,MAAMS,uBAAe,WAAHA,GAAGb,wBAAAA,UAAgB,CAAqC,SAAsBC,KAAK,EAAEC,YAAY;IACjH,MAAM,EAACC,SAAS,EAAEC,QAAQ,EAAEC,MAAM,EAAE,GAAGC,YAAW,GAAGL;IAErD,OAAO,WAAP,GACE,IAACM,gBAAAA,KAAiB;QACf,GAAGD,UAAU;QACd,KAAKJ;QACL,QAAQM,UAAU;YAChB,gBAAgB;YAChB,QAAQH;YACR,OAAOI,WAAW;gBAAC,WAAWC,GAAGC,eAAAA,KAAY,EAAER;YAAU,GAAG,CAAC;QAC/D;kBACCC;;AAGP;AAgBA,MAAMU,2BAAmB,WAAHA,GAAGd,wBAAAA,UAAgB,CAAyC,SAA0BC,KAAK,EAAEC,YAAY;IAC7H,MAAM,EAACC,SAAS,EAAEE,MAAM,EAAE,GAAGC,YAAW,GAAGL;IAE3C,OAAO,WAAP,GACE,IAACM,gBAAAA,SAAqB;QACnB,GAAGD,UAAU;QACd,KAAKJ;QACL,QAAQM,UAAU;YAChB,gBAAgB;YAChB,QAAQH;YACR,OAAOI,WAAW;gBAAC,WAAWC,GAAGC,eAAAA,SAAgB,EAAER;YAAU,GAAG,CAAC;QACnE;;AAGN;AAgBA,MAAMY,sBAAc,WAAHA,GAAGf,wBAAAA,UAAgB,CAAuC,SAAqBC,KAAK,EAAEC,YAAY;IACjH,MAAM,EAACC,SAAS,EAAEC,QAAQ,EAAEC,MAAM,EAAE,GAAGC,YAAW,GAAGL;IAErD,OAAO,WAAP,GACE,IAACM,gBAAAA,IAAgB;QACd,GAAGD,UAAU;QACd,KAAKJ;QACL,QAAQM,UAAU;YAChB,gBAAgB;YAChB,QAAQH;YACR,OAAOI,WAAW;gBAAC,WAAWC,GAAGC,eAAAA,IAAW,EAAEA,eAAAA,IAAW,EAAER;YAAU,GAAG,CAAC;QAC3E;kBACCC;;AAGP;AAgCAL,mBAAQ,WAAW,GAAG;AACtBa,sBAAc,WAAW,GAAG;AAC5BC,qBAAa,WAAW,GAAG;AAC3BC,yBAAiB,WAAW,GAAG;AAC/BC,oBAAY,WAAW,GAAG"}
@@ -1 +1 @@
1
- {"version":3,"sources":["webpack://./home/runner/work/arolariu.ro/arolariu.ro/packages/components/src/components/ui/toolbar.module.css","webpack://./src/components/ui/toolbar.module.css"],"names":[],"mappings":"AADA;ECEE,gCAAgC;EAChC,kCAAkC;EAClC,8CAA8C;EAC9C,gCAAgC;EAChC,mBAAmB;EACnB,sBAAsB;EACtB,0BAA0B;EAC1B,oBAAoB;EACpB,+BAA+B;;EAE/B;IACE,sBAAsB;IACtB,oBAAoB;EACtB;;EAEA;IACE,WAAW;EACb;AACF;;AAEA;EACE,mBAAmB;EACnB,sBAAsB;EACtB,oBAAoB;;EAEpB;IACE,sBAAsB;IACtB,oBAAoB;EACtB;;EAEA;IACE,WAAW;EACb;AACF;;AAEA;EACE,kCAAkC;EAClC,sBAAsB;EACtB,2BAA2B;EAC3B,4BAA4B;EAC5B,mBAAmB;EACnB,sBAAsB;EACtB,6BAA6B;EAC7B,4BAA4B;EAC5B,2HAA2H;EAC3H,mBAAmB;EACnB,aAAa;EACb,uBAAuB;EACvB,gBAAgB;EAChB,cAAc;EACd,qBAAqB;EACrB,oBAAoB;;EAEpB;IACE,kCAAkC;IAClC,0CAA0C;IAC1C,kCAAkC;EACpC;;EAEA;IACE,WAAW;IACX,oBAAoB;EACtB;;EAEA;IACE,cAAc;IACd,cAAc;IACd,eAAe;EACjB;AACF;;AAEA;EACE,eAAe;EACf,uBAAuB;EACvB,SAAS;;EAET;IACE;MACE,kCAAkC;MAClC,kCAAkC;IACpC;EACF;AACF;;AAEA;EACE;IACE;MACE,kCAAkC;MAClC,kCAAkC;IACpC;EACF;AACF;;AAEA;EACE,kCAAkC;EAClC,cAAc;EACd,mBAAmB;;EAEnB;IACE,WAAW;IACX,WAAW;IACX,eAAe;EACjB;;EAEA;IACE,UAAU;IACV,cAAc;IACd,YAAY;IACZ,kBAAkB;EACpB;AACF","sourcesContent":[".root{align-items:center;background-color:var(--ac-card);border:1px solid var(--ac-border);border-radius:calc(var(--ac-radius-md) + 1px);box-shadow:0 1px 2px 0 rgba(0,0,0,.04);color:var(--ac-card-foreground);display:inline-flex;gap:var(--ac-space-1);padding:var(--ac-space-1);&[data-orientation=vertical]{align-items:stretch;flex-direction:column}&[data-disabled]{opacity:.7}}.group{align-items:center;display:inline-flex;gap:var(--ac-space-1);&[data-orientation=vertical]{align-items:stretch;flex-direction:column}&[data-disabled]{opacity:.7}}.item{align-items:center;border-radius:var(--ac-radius-sm);box-sizing:border-box;color:var(--ac-foreground);display:inline-flex;font-size:var(--ac-text-xs);font-weight:500;gap:var(--ac-space-2);justify-content:center;line-height:1;min-height:var(--ac-size-md);outline:none;padding:0 var(--ac-space-2);text-decoration:none;transition:background-color var(--ac-transition-fast),color var(--ac-transition-fast),box-shadow var(--ac-transition-fast);white-space:nowrap;&:focus-visible{background-color:var(--ac-accent);box-shadow:inset 0 0 0 1px var(--ac-ring);color:var(--ac-accent-foreground)}&[data-disabled]{opacity:.5;pointer-events:none}& svg{flex-shrink:0;height:.875rem;width:.875rem}}.button{background-color:transparent;border:0;cursor:pointer;@media (hover:hover){&:hover:not([data-disabled]){background-color:var(--ac-accent);color:var(--ac-accent-foreground)}}}.link{@media (hover:hover){&:hover{background-color:var(--ac-accent);color:var(--ac-accent-foreground)}}}.separator{align-self:stretch;background-color:var(--ac-border);flex-shrink:0;&[data-orientation=horizontal]{height:1px;min-height:1px;width:100%}&[data-orientation=vertical]{height:1rem;margin-block:auto;min-width:1px;width:1px}}",".root {\n background-color: var(--ac-card);\n border: 1px solid var(--ac-border);\n border-radius: calc(var(--ac-radius-md) + 1px);\n color: var(--ac-card-foreground);\n align-items: center;\n gap: var(--ac-space-1);\n padding: var(--ac-space-1);\n display: inline-flex;\n box-shadow: 0 1px 2px #0000000a;\n\n &[data-orientation=\"vertical\"] {\n flex-direction: column;\n align-items: stretch;\n }\n\n &[data-disabled] {\n opacity: .7;\n }\n}\n\n.group {\n align-items: center;\n gap: var(--ac-space-1);\n display: inline-flex;\n\n &[data-orientation=\"vertical\"] {\n flex-direction: column;\n align-items: stretch;\n }\n\n &[data-disabled] {\n opacity: .7;\n }\n}\n\n.item {\n border-radius: var(--ac-radius-sm);\n box-sizing: border-box;\n color: var(--ac-foreground);\n font-size: var(--ac-text-xs);\n align-items: center;\n gap: var(--ac-space-2);\n min-height: var(--ac-size-md);\n padding: 0 var(--ac-space-2);\n transition: background-color var(--ac-transition-fast),color var(--ac-transition-fast),box-shadow var(--ac-transition-fast);\n white-space: nowrap;\n outline: none;\n justify-content: center;\n font-weight: 500;\n line-height: 1;\n text-decoration: none;\n display: inline-flex;\n\n &:focus-visible {\n background-color: var(--ac-accent);\n box-shadow: inset 0 0 0 1px var(--ac-ring);\n color: var(--ac-accent-foreground);\n }\n\n &[data-disabled] {\n opacity: .5;\n pointer-events: none;\n }\n\n & svg {\n flex-shrink: 0;\n width: .875rem;\n height: .875rem;\n }\n}\n\n.button {\n cursor: pointer;\n background-color: #0000;\n border: 0;\n\n @media (hover: hover) {\n &:hover:not([data-disabled]) {\n background-color: var(--ac-accent);\n color: var(--ac-accent-foreground);\n }\n }\n}\n\n.link {\n @media (hover: hover) {\n &:hover {\n background-color: var(--ac-accent);\n color: var(--ac-accent-foreground);\n }\n }\n}\n\n.separator {\n background-color: var(--ac-border);\n flex-shrink: 0;\n align-self: stretch;\n\n &[data-orientation=\"horizontal\"] {\n width: 100%;\n height: 1px;\n min-height: 1px;\n }\n\n &[data-orientation=\"vertical\"] {\n width: 1px;\n min-width: 1px;\n height: 1rem;\n margin-block: auto;\n }\n}\n"],"sourceRoot":""}
1
+ {"version":3,"sources":["webpack://./../../node_modules/@rslib/core/node_modules/@rsbuild/core/compiled/css-loader/index.js??ruleSet[1].rules[1].oneOf[2].use[1]!builtin:lightningcss-loader??ruleSet[1].rules[1].oneOf[2].use[2]!/home/runner/work/arolariu.ro/arolariu.ro/node_modules/@rslib/core/node_modules/@rsbuild/core/compiled/postcss-loader/index.js??ruleSet[1].rules[1].oneOf[2].use[3]!/home/runner/work/arolariu.ro/arolariu.ro/packages/components/src/components/ui/toolbar.module.css","webpack://./src/components/ui/toolbar.module.css"],"names":[],"mappings":"AAAA;ECCE,gCAAgC;EAChC,kCAAkC;EAClC,8CAA8C;EAC9C,gCAAgC;EAChC,mBAAmB;EACnB,sBAAsB;EACtB,0BAA0B;EAC1B,oBAAoB;EACpB,+BAA+B;;EDTmP;ICYhR,sBAAsB;IACtB,oBAAoB;EACtB;;EDdyV;ICiBvV,WAAW;EACb;AACF;;ADnBwX;ECsBtX,mBAAmB;EACnB,sBAAsB;EACtB,oBAAoB;;EDxBsa;IC2Bxb,sBAAsB;IACtB,oBAAoB;EACtB;;ED7BigB;ICgC/f,WAAW;EACb;AACF;;ADlCgiB;ECqC9hB,kCAAkC;EAClC,sBAAsB;EACtB,2BAA2B;EAC3B,4BAA4B;EAC5B,mBAAmB;EACnB,sBAAsB;EACtB,6BAA6B;EAC7B,4BAA4B;EAC5B,2HAA2H;EAC3H,mBAAmB;EACnB,aAAa;EACb,uBAAuB;EACvB,gBAAgB;EAChB,cAAc;EACd,qBAAqB;EACrB,oBAAoB;;EDpD09B;ICuD5+B,kCAAkC;IAClC,0CAA0C;IAC1C,kCAAkC;EACpC;;ED1D4mC;IC6D1mC,WAAW;IACX,oBAAoB;EACtB;;ED/D4pC;ICkE1pC,cAAc;IACd,cAAc;IACd,eAAe;EACjB;AACF;;ADtEgtC;ECyE9sC,eAAe;EACf,uBAAuB;EACvB,SAAS;;ED3EkwC;IAAqB;MC+E5xC,kCAAkC;MAClC,kCAAkC;IACpC;EACF;AACF;;ADnFq4C;EAAM;IAAqB;MCwF15C,kCAAkC;MAClC,kCAAkC;IACpC;EACF;AACF;;AD5F8+C;EC+F5+C,kCAAkC;EAClC,cAAc;EACd,mBAAmB;;EDjGuiD;ICoGxjD,WAAW;IACX,WAAW;IACX,eAAe;EACjB;;EDvG8nD;IC0G5nD,UAAU;IACV,cAAc;IACd,YAAY;IACZ,kBAAkB;EACpB;AACF","sourcesContent":[".root{align-items:center;background-color:var(--ac-card);border:1px solid var(--ac-border);border-radius:calc(var(--ac-radius-md) + 1px);box-shadow:0 1px 2px 0 rgba(0,0,0,.04);color:var(--ac-card-foreground);display:inline-flex;gap:var(--ac-space-1);padding:var(--ac-space-1);&[data-orientation=vertical]{align-items:stretch;flex-direction:column}&[data-disabled]{opacity:.7}}.group{align-items:center;display:inline-flex;gap:var(--ac-space-1);&[data-orientation=vertical]{align-items:stretch;flex-direction:column}&[data-disabled]{opacity:.7}}.item{align-items:center;border-radius:var(--ac-radius-sm);box-sizing:border-box;color:var(--ac-foreground);display:inline-flex;font-size:var(--ac-text-xs);font-weight:500;gap:var(--ac-space-2);justify-content:center;line-height:1;min-height:var(--ac-size-md);outline:none;padding:0 var(--ac-space-2);text-decoration:none;transition:background-color var(--ac-transition-fast),color var(--ac-transition-fast),box-shadow var(--ac-transition-fast);white-space:nowrap;&:focus-visible{background-color:var(--ac-accent);box-shadow:inset 0 0 0 1px var(--ac-ring);color:var(--ac-accent-foreground)}&[data-disabled]{opacity:.5;pointer-events:none}& svg{flex-shrink:0;height:.875rem;width:.875rem}}.button{background-color:transparent;border:0;cursor:pointer;@media (hover:hover){&:hover:not([data-disabled]){background-color:var(--ac-accent);color:var(--ac-accent-foreground)}}}.link{@media (hover:hover){&:hover{background-color:var(--ac-accent);color:var(--ac-accent-foreground)}}}.separator{align-self:stretch;background-color:var(--ac-border);flex-shrink:0;&[data-orientation=horizontal]{height:1px;min-height:1px;width:100%}&[data-orientation=vertical]{height:1rem;margin-block:auto;min-width:1px;width:1px}}",".root {\n background-color: var(--ac-card);\n border: 1px solid var(--ac-border);\n border-radius: calc(var(--ac-radius-md) + 1px);\n color: var(--ac-card-foreground);\n align-items: center;\n gap: var(--ac-space-1);\n padding: var(--ac-space-1);\n display: inline-flex;\n box-shadow: 0 1px 2px #0000000a;\n\n &[data-orientation=\"vertical\"] {\n flex-direction: column;\n align-items: stretch;\n }\n\n &[data-disabled] {\n opacity: .7;\n }\n}\n\n.group {\n align-items: center;\n gap: var(--ac-space-1);\n display: inline-flex;\n\n &[data-orientation=\"vertical\"] {\n flex-direction: column;\n align-items: stretch;\n }\n\n &[data-disabled] {\n opacity: .7;\n }\n}\n\n.item {\n border-radius: var(--ac-radius-sm);\n box-sizing: border-box;\n color: var(--ac-foreground);\n font-size: var(--ac-text-xs);\n align-items: center;\n gap: var(--ac-space-2);\n min-height: var(--ac-size-md);\n padding: 0 var(--ac-space-2);\n transition: background-color var(--ac-transition-fast),color var(--ac-transition-fast),box-shadow var(--ac-transition-fast);\n white-space: nowrap;\n outline: none;\n justify-content: center;\n font-weight: 500;\n line-height: 1;\n text-decoration: none;\n display: inline-flex;\n\n &:focus-visible {\n background-color: var(--ac-accent);\n box-shadow: inset 0 0 0 1px var(--ac-ring);\n color: var(--ac-accent-foreground);\n }\n\n &[data-disabled] {\n opacity: .5;\n pointer-events: none;\n }\n\n & svg {\n flex-shrink: 0;\n width: .875rem;\n height: .875rem;\n }\n}\n\n.button {\n cursor: pointer;\n background-color: #0000;\n border: 0;\n\n @media (hover: hover) {\n &:hover:not([data-disabled]) {\n background-color: var(--ac-accent);\n color: var(--ac-accent-foreground);\n }\n }\n}\n\n.link {\n @media (hover: hover) {\n &:hover {\n background-color: var(--ac-accent);\n color: var(--ac-accent-foreground);\n }\n }\n}\n\n.separator {\n background-color: var(--ac-border);\n flex-shrink: 0;\n align-self: stretch;\n\n &[data-orientation=\"horizontal\"] {\n width: 100%;\n height: 1px;\n min-height: 1px;\n }\n\n &[data-orientation=\"vertical\"] {\n width: 1px;\n min-width: 1px;\n height: 1rem;\n margin-block: auto;\n }\n}\n"],"sourceRoot":""}
@@ -1,9 +1,9 @@
1
1
  "use client";
2
2
  import { jsx } from "react/jsx-runtime";
3
3
  import { Tooltip } from "@base-ui/react/tooltip";
4
- import { forwardRef, isValidElement } from "react";
5
4
  import { cn } from "../../lib/utilities.js";
6
5
  import tooltip_module from "./tooltip.module.js";
6
+ import * as __rspack_external_react from "react";
7
7
  const TooltipProvider = ({ children })=>children;
8
8
  TooltipProvider.displayName = "TooltipProvider";
9
9
  function tooltip_Tooltip(props) {
@@ -17,9 +17,9 @@ function tooltip_Tooltip(props) {
17
17
  });
18
18
  }
19
19
  tooltip_Tooltip.displayName = "Tooltip";
20
- const TooltipTrigger = /*#__PURE__*/ forwardRef((props, ref)=>{
20
+ const TooltipTrigger = /*#__PURE__*/ __rspack_external_react.forwardRef((props, ref)=>{
21
21
  const { asChild = false, children, className, ...otherProps } = props;
22
- if (asChild && /*#__PURE__*/ isValidElement(children)) return /*#__PURE__*/ jsx(Tooltip.Trigger, {
22
+ if (asChild && /*#__PURE__*/ __rspack_external_react.isValidElement(children)) return /*#__PURE__*/ jsx(Tooltip.Trigger, {
23
23
  ref: ref,
24
24
  className: cn(tooltip_module.trigger, className),
25
25
  render: children,
@@ -33,7 +33,7 @@ const TooltipTrigger = /*#__PURE__*/ forwardRef((props, ref)=>{
33
33
  });
34
34
  });
35
35
  TooltipTrigger.displayName = "TooltipTrigger";
36
- const TooltipContent = /*#__PURE__*/ forwardRef((props, ref)=>{
36
+ const TooltipContent = /*#__PURE__*/ __rspack_external_react.forwardRef((props, ref)=>{
37
37
  const { className, children, side = "top", sideOffset = 4, ...otherProps } = props;
38
38
  return /*#__PURE__*/ jsx(Tooltip.Portal, {
39
39
  children: /*#__PURE__*/ jsx(Tooltip.Positioner, {
@@ -1 +1 @@
1
- {"version":3,"file":"components/ui/tooltip.js","sources":["../../../src/components/ui/tooltip.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport {Tooltip as BaseTooltip} from \"@base-ui/react/tooltip\";\r\nimport * as React from \"react\";\r\n\r\nimport {cn} from \"@/lib/utilities\";\r\nimport styles from \"./tooltip.module.css\";\r\n\r\ninterface TooltipProviderProps {\r\n /** Tooltip content and triggers managed by the provider. @default undefined */\r\n children: React.ReactNode;\r\n /** Delay in milliseconds before tooltip content becomes visible. @default undefined */\r\n delayDuration?: number;\r\n}\r\n\r\ninterface TooltipProps extends Omit<React.ComponentPropsWithRef<typeof BaseTooltip.Root>, \"delay\"> {\r\n /** Delay in milliseconds before tooltip content becomes visible. @default undefined */\r\n delayDuration?: number;\r\n}\r\n\r\ninterface TooltipTriggerProps extends Omit<React.ComponentPropsWithRef<typeof BaseTooltip.Trigger>, \"className\"> {\r\n /** Additional CSS classes merged with the tooltip trigger styles. @default undefined */\r\n className?: string;\r\n /** Backward-compatible child-slot API that maps the child element to `render`. @default false @deprecated Prefer Base UI's `render` prop. */\r\n asChild?: boolean;\r\n}\r\n\r\ninterface TooltipContentProps extends Omit<React.ComponentPropsWithRef<typeof BaseTooltip.Popup>, \"className\"> {\r\n /** Additional CSS classes merged with the tooltip popup styles. @default undefined */\r\n className?: string;\r\n /** The offset in pixels between the trigger and the tooltip popup. @default 4 */\r\n sideOffset?: number;\r\n /** Preferred side on which the tooltip should appear. @default \"top\" */\r\n side?: \"top\" | \"right\" | \"bottom\" | \"left\";\r\n}\r\n\r\n/**\r\n * Provides a compatibility wrapper for grouping tooltip triggers and content.\r\n *\r\n * @remarks\r\n * - Renders no DOM element by default and returns its children directly\r\n * - Built on {@link https://base-ui.com/react/components/tooltip | Base UI Tooltip}\r\n * - Does not expose a `render` prop because it is a pass-through provider shim\r\n * - Styling via CSS Modules with `--ac-*` custom properties through descendant components\r\n *\r\n * @example Basic usage\r\n * ```tsx\r\n * <TooltipProvider>\r\n * <Tooltip>\r\n * <TooltipTrigger>Hover</TooltipTrigger>\r\n * <TooltipContent>Details</TooltipContent>\r\n * </Tooltip>\r\n * </TooltipProvider>\r\n * ```\r\n *\r\n * @see {@link https://base-ui.com/react/components/tooltip | Base UI Documentation}\r\n */\r\nconst TooltipProvider = ({children}: Readonly<TooltipProviderProps>): React.ReactNode => children;\r\nTooltipProvider.displayName = \"TooltipProvider\";\r\n\r\n/**\r\n * Coordinates tooltip timing, open state, and accessibility semantics.\r\n *\r\n * @remarks\r\n * - Renders no DOM element by default and coordinates descendant tooltip parts\r\n * - Built on {@link https://base-ui.com/react/components/tooltip | Base UI Tooltip}\r\n * - Supports composition through descendant `render` props\r\n * - Styling via CSS Modules with `--ac-*` custom properties\r\n *\r\n * @example Basic usage\r\n * ```tsx\r\n * <Tooltip>\r\n * <TooltipTrigger>Hover</TooltipTrigger>\r\n * <TooltipContent>Details</TooltipContent>\r\n * </Tooltip>\r\n * ```\r\n *\r\n * @see {@link https://base-ui.com/react/components/tooltip | Base UI Documentation}\r\n */\r\nfunction Tooltip(props: Readonly<Tooltip.Props>): React.ReactElement {\r\n const {delayDuration, ...otherProps} = props;\r\n const tooltipProps = delayDuration === undefined ? otherProps : {...otherProps, delay: delayDuration};\r\n\r\n return <BaseTooltip.Root {...tooltipProps} />;\r\n}\r\nTooltip.displayName = \"Tooltip\";\r\n\r\n/**\r\n * Anchors tooltip behavior to an interactive trigger element.\r\n *\r\n * @remarks\r\n * - Renders a `<button>` element by default\r\n * - Built on {@link https://base-ui.com/react/components/tooltip | Base UI Tooltip}\r\n * - Supports the `render` prop for element composition\r\n * - Styling via CSS Modules with `--ac-*` custom properties\r\n *\r\n * @example Basic usage\r\n * ```tsx\r\n * <TooltipTrigger>Hover</TooltipTrigger>\r\n * ```\r\n *\r\n * @see {@link https://base-ui.com/react/components/tooltip | Base UI Documentation}\r\n */\r\nconst TooltipTrigger = React.forwardRef<HTMLButtonElement, TooltipTrigger.Props>(\r\n (props: Readonly<TooltipTrigger.Props>, ref): React.ReactElement => {\r\n // eslint-disable-next-line sonarjs/deprecation -- backward-compatible asChild support is part of the public API.\r\n const {asChild = false, children, className, ...otherProps} = props;\r\n\r\n if (asChild && React.isValidElement(children)) {\r\n return (\r\n <BaseTooltip.Trigger\r\n ref={ref}\r\n className={cn(styles.trigger, className)}\r\n render={children as React.ReactElement}\r\n {...otherProps}\r\n />\r\n );\r\n }\r\n\r\n return (\r\n <BaseTooltip.Trigger\r\n ref={ref}\r\n className={cn(styles.trigger, className)}\r\n {...otherProps}>\r\n {children}\r\n </BaseTooltip.Trigger>\r\n );\r\n },\r\n);\r\nTooltipTrigger.displayName = \"TooltipTrigger\";\r\n\r\n/**\r\n * Renders positioned tooltip content inside a portal.\r\n *\r\n * @remarks\r\n * - Renders a `<div>` element by default\r\n * - Built on {@link https://base-ui.com/react/components/tooltip | Base UI Tooltip}\r\n * - Supports the `render` prop for element composition\r\n * - Styling via CSS Modules with `--ac-*` custom properties\r\n *\r\n * @example Basic usage\r\n * ```tsx\r\n * <TooltipContent>Details</TooltipContent>\r\n * ```\r\n *\r\n * @see {@link https://base-ui.com/react/components/tooltip | Base UI Documentation}\r\n */\r\nconst TooltipContent = React.forwardRef<React.ComponentRef<typeof BaseTooltip.Popup>, TooltipContent.Props>(\r\n (props: Readonly<TooltipContent.Props>, ref): React.ReactElement => {\r\n const {className, children, side = \"top\", sideOffset = 4, ...otherProps} = props;\r\n\r\n return (\r\n <BaseTooltip.Portal>\r\n <BaseTooltip.Positioner\r\n className={styles.positioner}\r\n side={side}\r\n sideOffset={sideOffset}>\r\n <BaseTooltip.Popup\r\n ref={ref}\r\n className={cn(styles.popup, className)}\r\n {...otherProps}>\r\n {children}\r\n </BaseTooltip.Popup>\r\n </BaseTooltip.Positioner>\r\n </BaseTooltip.Portal>\r\n );\r\n },\r\n);\r\nTooltipContent.displayName = \"TooltipContent\";\r\n\r\n// eslint-disable-next-line no-redeclare -- required for the canonical component namespace typing API\r\nnamespace Tooltip {\r\n export type Props = TooltipProps;\r\n export type State = BaseTooltip.Root.State;\r\n}\r\n\r\n// eslint-disable-next-line no-redeclare -- required for the canonical component namespace typing API\r\nnamespace TooltipTrigger {\r\n export type Props = TooltipTriggerProps;\r\n export type State = BaseTooltip.Trigger.State;\r\n}\r\n\r\n// eslint-disable-next-line no-redeclare -- required for the canonical component namespace typing API\r\nnamespace TooltipContent {\r\n export type Props = TooltipContentProps;\r\n export type State = BaseTooltip.Popup.State;\r\n}\r\n\r\nexport {Tooltip, TooltipContent, TooltipProvider, TooltipTrigger};\r\n"],"names":["TooltipProvider","children","Tooltip","props","delayDuration","otherProps","tooltipProps","undefined","BaseTooltip","TooltipTrigger","React","ref","asChild","className","cn","styles","TooltipContent","side","sideOffset"],"mappings":";;;;;;AAyDA,MAAMA,kBAAkB,CAAC,EAACC,QAAQ,EAAiC,GAAsBA;AACzFD,gBAAgB,WAAW,GAAG;AAqB9B,SAASE,gBAAQC,KAA8B;IAC7C,MAAM,EAACC,aAAa,EAAE,GAAGC,YAAW,GAAGF;IACvC,MAAMG,eAAeF,AAAkBG,WAAlBH,gBAA8BC,aAAa;QAAC,GAAGA,UAAU;QAAE,OAAOD;IAAa;IAEpG,OAAO,WAAP,GAAO,IAACI,QAAAA,IAAgB;QAAE,GAAGF,YAAY;;AAC3C;AACAJ,gBAAQ,WAAW,GAAG;AAkBtB,MAAMO,iBAAiB,WAAHA,GAAGC,WACrB,CAACP,OAAuCQ;IAEtC,MAAM,EAACC,UAAU,KAAK,EAAEX,QAAQ,EAAEY,SAAS,EAAE,GAAGR,YAAW,GAAGF;IAE9D,IAAIS,WAAW,WAAXA,GAAWF,eAAqBT,WAClC,OAAO,WAAP,GACE,IAACO,QAAAA,OAAmB;QAClB,KAAKG;QACL,WAAWG,GAAGC,eAAAA,OAAc,EAAEF;QAC9B,QAAQZ;QACP,GAAGI,UAAU;;IAKpB,OAAO,WAAP,GACE,IAACG,QAAAA,OAAmB;QAClB,KAAKG;QACL,WAAWG,GAAGC,eAAAA,OAAc,EAAEF;QAC7B,GAAGR,UAAU;kBACbJ;;AAGP;AAEFQ,eAAe,WAAW,GAAG;AAkB7B,MAAMO,iBAAiB,WAAHA,GAAGN,WACrB,CAACP,OAAuCQ;IACtC,MAAM,EAACE,SAAS,EAAEZ,QAAQ,EAAEgB,OAAO,KAAK,EAAEC,aAAa,CAAC,EAAE,GAAGb,YAAW,GAAGF;IAE3E,OAAO,WAAP,GACE,IAACK,QAAAA,MAAkB;kBACjB,kBAACA,QAAAA,UAAsB;YACrB,WAAWO,eAAAA,UAAiB;YAC5B,MAAME;YACN,YAAYC;sBACZ,kBAACV,QAAAA,KAAiB;gBAChB,KAAKG;gBACL,WAAWG,GAAGC,eAAAA,KAAY,EAAEF;gBAC3B,GAAGR,UAAU;0BACbJ;;;;AAKX;AAEFe,eAAe,WAAW,GAAG"}
1
+ {"version":3,"file":"components/ui/tooltip.js","sources":["../../../src/components/ui/tooltip.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport {Tooltip as BaseTooltip} from \"@base-ui/react/tooltip\";\r\nimport * as React from \"react\";\r\n\r\nimport {cn} from \"@/lib/utilities\";\r\nimport styles from \"./tooltip.module.css\";\r\n\r\ninterface TooltipProviderProps {\r\n /** Tooltip content and triggers managed by the provider. @default undefined */\r\n children: React.ReactNode;\r\n /** Delay in milliseconds before tooltip content becomes visible. @default undefined */\r\n delayDuration?: number;\r\n}\r\n\r\ninterface TooltipProps extends Omit<React.ComponentPropsWithRef<typeof BaseTooltip.Root>, \"delay\"> {\r\n /** Delay in milliseconds before tooltip content becomes visible. @default undefined */\r\n delayDuration?: number;\r\n}\r\n\r\ninterface TooltipTriggerProps extends Omit<React.ComponentPropsWithRef<typeof BaseTooltip.Trigger>, \"className\"> {\r\n /** Additional CSS classes merged with the tooltip trigger styles. @default undefined */\r\n className?: string;\r\n /** Backward-compatible child-slot API that maps the child element to `render`. @default false @deprecated Prefer Base UI's `render` prop. */\r\n asChild?: boolean;\r\n}\r\n\r\ninterface TooltipContentProps extends Omit<React.ComponentPropsWithRef<typeof BaseTooltip.Popup>, \"className\"> {\r\n /** Additional CSS classes merged with the tooltip popup styles. @default undefined */\r\n className?: string;\r\n /** The offset in pixels between the trigger and the tooltip popup. @default 4 */\r\n sideOffset?: number;\r\n /** Preferred side on which the tooltip should appear. @default \"top\" */\r\n side?: \"top\" | \"right\" | \"bottom\" | \"left\";\r\n}\r\n\r\n/**\r\n * Provides a compatibility wrapper for grouping tooltip triggers and content.\r\n *\r\n * @remarks\r\n * - Renders no DOM element by default and returns its children directly\r\n * - Built on {@link https://base-ui.com/react/components/tooltip | Base UI Tooltip}\r\n * - Does not expose a `render` prop because it is a pass-through provider shim\r\n * - Styling via CSS Modules with `--ac-*` custom properties through descendant components\r\n *\r\n * @example Basic usage\r\n * ```tsx\r\n * <TooltipProvider>\r\n * <Tooltip>\r\n * <TooltipTrigger>Hover</TooltipTrigger>\r\n * <TooltipContent>Details</TooltipContent>\r\n * </Tooltip>\r\n * </TooltipProvider>\r\n * ```\r\n *\r\n * @see {@link https://base-ui.com/react/components/tooltip | Base UI Documentation}\r\n */\r\nconst TooltipProvider = ({children}: Readonly<TooltipProviderProps>): React.ReactNode => children;\r\nTooltipProvider.displayName = \"TooltipProvider\";\r\n\r\n/**\r\n * Coordinates tooltip timing, open state, and accessibility semantics.\r\n *\r\n * @remarks\r\n * - Renders no DOM element by default and coordinates descendant tooltip parts\r\n * - Built on {@link https://base-ui.com/react/components/tooltip | Base UI Tooltip}\r\n * - Supports composition through descendant `render` props\r\n * - Styling via CSS Modules with `--ac-*` custom properties\r\n *\r\n * @example Basic usage\r\n * ```tsx\r\n * <Tooltip>\r\n * <TooltipTrigger>Hover</TooltipTrigger>\r\n * <TooltipContent>Details</TooltipContent>\r\n * </Tooltip>\r\n * ```\r\n *\r\n * @see {@link https://base-ui.com/react/components/tooltip | Base UI Documentation}\r\n */\r\nfunction Tooltip(props: Readonly<Tooltip.Props>): React.ReactElement {\r\n const {delayDuration, ...otherProps} = props;\r\n const tooltipProps = delayDuration === undefined ? otherProps : {...otherProps, delay: delayDuration};\r\n\r\n return <BaseTooltip.Root {...tooltipProps} />;\r\n}\r\nTooltip.displayName = \"Tooltip\";\r\n\r\n/**\r\n * Anchors tooltip behavior to an interactive trigger element.\r\n *\r\n * @remarks\r\n * - Renders a `<button>` element by default\r\n * - Built on {@link https://base-ui.com/react/components/tooltip | Base UI Tooltip}\r\n * - Supports the `render` prop for element composition\r\n * - Styling via CSS Modules with `--ac-*` custom properties\r\n *\r\n * @example Basic usage\r\n * ```tsx\r\n * <TooltipTrigger>Hover</TooltipTrigger>\r\n * ```\r\n *\r\n * @see {@link https://base-ui.com/react/components/tooltip | Base UI Documentation}\r\n */\r\nconst TooltipTrigger = React.forwardRef<HTMLButtonElement, TooltipTrigger.Props>(\r\n (props: Readonly<TooltipTrigger.Props>, ref): React.ReactElement => {\r\n // eslint-disable-next-line sonarjs/deprecation -- backward-compatible asChild support is part of the public API.\r\n const {asChild = false, children, className, ...otherProps} = props;\r\n\r\n if (asChild && React.isValidElement(children)) {\r\n return (\r\n <BaseTooltip.Trigger\r\n ref={ref}\r\n className={cn(styles.trigger, className)}\r\n render={children as React.ReactElement}\r\n {...otherProps}\r\n />\r\n );\r\n }\r\n\r\n return (\r\n <BaseTooltip.Trigger\r\n ref={ref}\r\n className={cn(styles.trigger, className)}\r\n {...otherProps}>\r\n {children}\r\n </BaseTooltip.Trigger>\r\n );\r\n },\r\n);\r\nTooltipTrigger.displayName = \"TooltipTrigger\";\r\n\r\n/**\r\n * Renders positioned tooltip content inside a portal.\r\n *\r\n * @remarks\r\n * - Renders a `<div>` element by default\r\n * - Built on {@link https://base-ui.com/react/components/tooltip | Base UI Tooltip}\r\n * - Supports the `render` prop for element composition\r\n * - Styling via CSS Modules with `--ac-*` custom properties\r\n *\r\n * @example Basic usage\r\n * ```tsx\r\n * <TooltipContent>Details</TooltipContent>\r\n * ```\r\n *\r\n * @see {@link https://base-ui.com/react/components/tooltip | Base UI Documentation}\r\n */\r\nconst TooltipContent = React.forwardRef<React.ComponentRef<typeof BaseTooltip.Popup>, TooltipContent.Props>(\r\n (props: Readonly<TooltipContent.Props>, ref): React.ReactElement => {\r\n const {className, children, side = \"top\", sideOffset = 4, ...otherProps} = props;\r\n\r\n return (\r\n <BaseTooltip.Portal>\r\n <BaseTooltip.Positioner\r\n className={styles.positioner}\r\n side={side}\r\n sideOffset={sideOffset}>\r\n <BaseTooltip.Popup\r\n ref={ref}\r\n className={cn(styles.popup, className)}\r\n {...otherProps}>\r\n {children}\r\n </BaseTooltip.Popup>\r\n </BaseTooltip.Positioner>\r\n </BaseTooltip.Portal>\r\n );\r\n },\r\n);\r\nTooltipContent.displayName = \"TooltipContent\";\r\n\r\n// eslint-disable-next-line no-redeclare -- required for the canonical component namespace typing API\r\nnamespace Tooltip {\r\n export type Props = TooltipProps;\r\n export type State = BaseTooltip.Root.State;\r\n}\r\n\r\n// eslint-disable-next-line no-redeclare -- required for the canonical component namespace typing API\r\nnamespace TooltipTrigger {\r\n export type Props = TooltipTriggerProps;\r\n export type State = BaseTooltip.Trigger.State;\r\n}\r\n\r\n// eslint-disable-next-line no-redeclare -- required for the canonical component namespace typing API\r\nnamespace TooltipContent {\r\n export type Props = TooltipContentProps;\r\n export type State = BaseTooltip.Popup.State;\r\n}\r\n\r\nexport {Tooltip, TooltipContent, TooltipProvider, TooltipTrigger};\r\n"],"names":["TooltipProvider","children","Tooltip","props","delayDuration","otherProps","tooltipProps","undefined","BaseTooltip","TooltipTrigger","React","ref","asChild","className","cn","styles","TooltipContent","side","sideOffset"],"mappings":";;;;;;AAyDA,MAAMA,kBAAkB,CAAC,EAACC,QAAQ,EAAiC,GAAsBA;AACzFD,gBAAgB,WAAW,GAAG;AAqB9B,SAASE,gBAAQC,KAA8B;IAC7C,MAAM,EAACC,aAAa,EAAE,GAAGC,YAAW,GAAGF;IACvC,MAAMG,eAAeF,AAAkBG,WAAlBH,gBAA8BC,aAAa;QAAC,GAAGA,UAAU;QAAE,OAAOD;IAAa;IAEpG,OAAO,WAAP,GAAO,IAACI,QAAAA,IAAgB;QAAE,GAAGF,YAAY;;AAC3C;AACAJ,gBAAQ,WAAW,GAAG;AAkBtB,MAAMO,iBAAiB,WAAHA,GAAGC,wBAAAA,UAAgB,CACrC,CAACP,OAAuCQ;IAEtC,MAAM,EAACC,UAAU,KAAK,EAAEX,QAAQ,EAAEY,SAAS,EAAE,GAAGR,YAAW,GAAGF;IAE9D,IAAIS,WAAW,WAAXA,GAAWF,wBAAAA,cAAoB,CAACT,WAClC,OAAO,WAAP,GACE,IAACO,QAAAA,OAAmB;QAClB,KAAKG;QACL,WAAWG,GAAGC,eAAAA,OAAc,EAAEF;QAC9B,QAAQZ;QACP,GAAGI,UAAU;;IAKpB,OAAO,WAAP,GACE,IAACG,QAAAA,OAAmB;QAClB,KAAKG;QACL,WAAWG,GAAGC,eAAAA,OAAc,EAAEF;QAC7B,GAAGR,UAAU;kBACbJ;;AAGP;AAEFQ,eAAe,WAAW,GAAG;AAkB7B,MAAMO,iBAAiB,WAAHA,GAAGN,wBAAAA,UAAgB,CACrC,CAACP,OAAuCQ;IACtC,MAAM,EAACE,SAAS,EAAEZ,QAAQ,EAAEgB,OAAO,KAAK,EAAEC,aAAa,CAAC,EAAE,GAAGb,YAAW,GAAGF;IAE3E,OAAO,WAAP,GACE,IAACK,QAAAA,MAAkB;kBACjB,kBAACA,QAAAA,UAAsB;YACrB,WAAWO,eAAAA,UAAiB;YAC5B,MAAME;YACN,YAAYC;sBACZ,kBAACV,QAAAA,KAAiB;gBAChB,KAAKG;gBACL,WAAWG,GAAGC,eAAAA,KAAY,EAAEF;gBAC3B,GAAGR,UAAU;0BACbJ;;;;AAKX;AAEFe,eAAe,WAAW,GAAG"}
@@ -1 +1 @@
1
- {"version":3,"sources":["webpack://./home/runner/work/arolariu.ro/arolariu.ro/packages/components/src/components/ui/tooltip.module.css","webpack://./src/components/ui/tooltip.module.css"],"names":[],"mappings":"AADA;ECEE,sBAAsB;EACtB,oBAAoB;AACtB;;AAEA;EACE,WAAW;AACb;;AAEA;EACE,sCAAsC;EACtC,kCAAkC;EAClC,2BAA2B;EAC3B,4BAA4B;EAC5B,4CAA4C;EAC5C,yCAAyC;EACzC,iFAAiF;EACjF,gBAAgB;EAChB,kBAAkB;EAClB,gBAAgB;EAChB,+BAA+B;;EAE/B;IACE,cAAc;IACd,uBAAuB;EACzB;;EAEA;IACE,UAAU;IACV,qBAAqB;EACvB;AACF","sourcesContent":[".trigger{display:inline-flex;max-width:max-content}.positioner{z-index:50}.popup{background-color:var(--ac-foreground);border-radius:var(--ac-radius-sm);box-shadow:0 2px 8px rgba(0,0,0,.12);color:var(--ac-background);font-size:var(--ac-text-xs);line-height:1.5;overflow:hidden;padding:var(--ac-space-1) var(--ac-space-2);position:relative;transform-origin:var(--transform-origin);transition:opacity var(--ac-transition-fast),transform var(--ac-transition-fast);& *{background-color:transparent;color:inherit}&[data-ending-style],&[data-starting-style]{opacity:0;transform:scale(.96)}}",".trigger {\n max-width: max-content;\n display: inline-flex;\n}\n\n.positioner {\n z-index: 50;\n}\n\n.popup {\n background-color: var(--ac-foreground);\n border-radius: var(--ac-radius-sm);\n color: var(--ac-background);\n font-size: var(--ac-text-xs);\n padding: var(--ac-space-1) var(--ac-space-2);\n transform-origin: var(--transform-origin);\n transition: opacity var(--ac-transition-fast),transform var(--ac-transition-fast);\n line-height: 1.5;\n position: relative;\n overflow: hidden;\n box-shadow: 0 2px 8px #0000001f;\n\n & * {\n color: inherit;\n background-color: #0000;\n }\n\n &[data-ending-style], &[data-starting-style] {\n opacity: 0;\n transform: scale(.96);\n }\n}\n"],"sourceRoot":""}
1
+ {"version":3,"sources":["webpack://./../../node_modules/@rslib/core/node_modules/@rsbuild/core/compiled/css-loader/index.js??ruleSet[1].rules[1].oneOf[2].use[1]!builtin:lightningcss-loader??ruleSet[1].rules[1].oneOf[2].use[2]!/home/runner/work/arolariu.ro/arolariu.ro/node_modules/@rslib/core/node_modules/@rsbuild/core/compiled/postcss-loader/index.js??ruleSet[1].rules[1].oneOf[2].use[3]!/home/runner/work/arolariu.ro/arolariu.ro/packages/components/src/components/ui/tooltip.module.css","webpack://./src/components/ui/tooltip.module.css"],"names":[],"mappings":"AAAA;ECCE,sBAAsB;EACtB,oBAAoB;AACtB;;ADHmD;ECMjD,WAAW;AACb;;ADP0E;ECUxE,sCAAsC;EACtC,kCAAkC;EAClC,2BAA2B;EAC3B,4BAA4B;EAC5B,4CAA4C;EAC5C,yCAAyC;EACzC,iFAAiF;EACjF,gBAAgB;EAChB,kBAAkB;EAClB,gBAAgB;EAChB,+BAA+B;;EDpB4a;ICuBzc,cAAc;IACd,uBAAuB;EACzB;;EDzB0f;IC4Bxf,UAAU;IACV,qBAAqB;EACvB;AACF","sourcesContent":[".trigger{display:inline-flex;max-width:max-content}.positioner{z-index:50}.popup{background-color:var(--ac-foreground);border-radius:var(--ac-radius-sm);box-shadow:0 2px 8px rgba(0,0,0,.12);color:var(--ac-background);font-size:var(--ac-text-xs);line-height:1.5;overflow:hidden;padding:var(--ac-space-1) var(--ac-space-2);position:relative;transform-origin:var(--transform-origin);transition:opacity var(--ac-transition-fast),transform var(--ac-transition-fast);& *{background-color:transparent;color:inherit}&[data-ending-style],&[data-starting-style]{opacity:0;transform:scale(.96)}}",".trigger {\n max-width: max-content;\n display: inline-flex;\n}\n\n.positioner {\n z-index: 50;\n}\n\n.popup {\n background-color: var(--ac-foreground);\n border-radius: var(--ac-radius-sm);\n color: var(--ac-background);\n font-size: var(--ac-text-xs);\n padding: var(--ac-space-1) var(--ac-space-2);\n transform-origin: var(--transform-origin);\n transition: opacity var(--ac-transition-fast),transform var(--ac-transition-fast);\n line-height: 1.5;\n position: relative;\n overflow: hidden;\n box-shadow: 0 2px 8px #0000001f;\n\n & * {\n color: inherit;\n background-color: #0000;\n }\n\n &[data-ending-style], &[data-starting-style] {\n opacity: 0;\n transform: scale(.96);\n }\n}\n"],"sourceRoot":""}
@@ -1,10 +1,10 @@
1
1
  "use client";
2
2
  import { jsx, jsxs } from "react/jsx-runtime";
3
3
  import { motion, stagger, useAnimate, useInView } from "motion/react";
4
- import { forwardRef, useEffect } from "react";
5
4
  import { cn } from "../../lib/utilities.js";
6
5
  import typewriter_module from "./typewriter.module.js";
7
- const TypewriterText = /*#__PURE__*/ forwardRef(({ words, className, cursorClassName }, ref)=>{
6
+ import * as __rspack_external_react from "react";
7
+ const TypewriterText = /*#__PURE__*/ __rspack_external_react.forwardRef(({ words, className, cursorClassName }, ref)=>{
8
8
  const wordsArray = words.map((word)=>({
9
9
  ...word,
10
10
  text: [
@@ -13,7 +13,7 @@ const TypewriterText = /*#__PURE__*/ forwardRef(({ words, className, cursorClass
13
13
  }));
14
14
  const [scope, animate] = useAnimate();
15
15
  const isInView = useInView(scope);
16
- useEffect(()=>{
16
+ __rspack_external_react.useEffect(()=>{
17
17
  if (!isInView) return;
18
18
  animate("span", {
19
19
  display: "inline-block",
@@ -65,7 +65,7 @@ const TypewriterText = /*#__PURE__*/ forwardRef(({ words, className, cursorClass
65
65
  });
66
66
  });
67
67
  TypewriterText.displayName = "TypewriterText";
68
- const TypewriterTextSmooth = /*#__PURE__*/ forwardRef(({ words, className, cursorClassName }, ref)=>{
68
+ const TypewriterTextSmooth = /*#__PURE__*/ __rspack_external_react.forwardRef(({ words, className, cursorClassName }, ref)=>{
69
69
  const wordsArray = words.map((word)=>({
70
70
  ...word,
71
71
  text: [
@@ -1 +1 @@
1
- {"version":3,"file":"components/ui/typewriter.js","sources":["../../../src/components/ui/typewriter.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport {motion, stagger, useAnimate, useInView} from \"motion/react\";\r\nimport * as React from \"react\";\r\n\r\nimport {cn} from \"@/lib/utilities\";\r\nimport styles from \"./typewriter.module.css\";\r\n\r\n/** Single word definition consumed by the typewriter components. */\r\nexport interface TypewriterWord {\r\n /** Word content split into animated characters at render time. @default undefined */\r\n text: string;\r\n /** Additional CSS classes merged with each rendered character. @default undefined */\r\n className?: string;\r\n}\r\n\r\n/** Props accepted by {@link TypewriterText} and {@link TypewriterTextSmooth}. */\r\nexport interface TypewriterTextProps {\r\n /** Ordered list of words rendered by the typewriter animation. @default undefined */\r\n words: ReadonlyArray<TypewriterWord>;\r\n /** Additional CSS classes merged with the outer container. @default undefined */\r\n className?: string;\r\n /** Additional CSS classes merged with the blinking cursor element. @default undefined */\r\n cursorClassName?: string;\r\n}\r\n\r\n/**\r\n * Reveals text one character at a time with a stepped typewriter animation.\r\n *\r\n * @remarks\r\n * - Animated component using the `motion` library\r\n * - Renders a `<div>` element\r\n * - Styling via CSS Modules with `--ac-*` custom properties\r\n * - Client-side only (`\"use client\"` directive)\r\n *\r\n * @example\r\n * ```tsx\r\n * <TypewriterText words={[{text: \"Hello\"}, {text: \"world\"}]} />\r\n * ```\r\n *\r\n * @see {@link TypewriterTextProps} for available props\r\n */\r\nconst TypewriterText = React.forwardRef<HTMLDivElement, TypewriterTextProps>(\r\n ({words, className, cursorClassName}: Readonly<TypewriterTextProps>, ref): React.JSX.Element => {\r\n const wordsArray = words.map((word) => ({\r\n ...word,\r\n text: [...word.text],\r\n }));\r\n\r\n const [scope, animate] = useAnimate();\r\n const isInView = useInView(scope);\r\n\r\n React.useEffect(() => {\r\n if (!isInView) {\r\n return;\r\n }\r\n\r\n animate(\r\n \"span\",\r\n {\r\n display: \"inline-block\",\r\n opacity: 1,\r\n width: \"fit-content\",\r\n },\r\n {\r\n duration: 0.3,\r\n delay: stagger(0.1),\r\n ease: \"easeInOut\",\r\n },\r\n );\r\n }, [animate, isInView]);\r\n\r\n return (\r\n <div\r\n ref={ref}\r\n className={cn(styles.root, className)}>\r\n <motion.div\r\n ref={scope}\r\n className={styles.inline}>\r\n {wordsArray.map((word, wordIndex) => (\r\n <div\r\n key={`word-${wordIndex}`}\r\n className={styles.word}>\r\n {word.text.map((character, characterIndex) => (\r\n <motion.span\r\n initial={{}}\r\n key={`char-${characterIndex}`}\r\n className={cn(styles.hiddenCharacter, word.className)}>\r\n {character}\r\n </motion.span>\r\n ))}\r\n &nbsp;\r\n </div>\r\n ))}\r\n </motion.div>\r\n <motion.span\r\n initial={{opacity: 0}}\r\n animate={{opacity: 1}}\r\n transition={{duration: 0.8, repeat: Infinity, repeatType: \"reverse\"}}\r\n className={cn(styles.cursor, cursorClassName)}\r\n />\r\n </div>\r\n );\r\n },\r\n);\r\nTypewriterText.displayName = \"TypewriterText\";\r\n\r\n/**\r\n * Reveals text with a continuous width-based typewriter sweep animation.\r\n *\r\n * @remarks\r\n * - Animated component using the `motion` library\r\n * - Renders a `<div>` element\r\n * - Styling via CSS Modules with `--ac-*` custom properties\r\n * - Client-side only (`\"use client\"` directive)\r\n *\r\n * @example\r\n * ```tsx\r\n * <TypewriterTextSmooth words={[{text: \"Smooth\"}, {text: \"typing\"}]} />\r\n * ```\r\n *\r\n * @see {@link TypewriterTextProps} for available props\r\n */\r\nconst TypewriterTextSmooth = React.forwardRef<HTMLDivElement, TypewriterTextProps>(\r\n ({words, className, cursorClassName}: Readonly<TypewriterTextProps>, ref): React.JSX.Element => {\r\n const wordsArray = words.map((word) => ({\r\n ...word,\r\n text: [...word.text],\r\n }));\r\n\r\n const renderWords = (): React.JSX.Element => {\r\n return (\r\n <div>\r\n {wordsArray.map((word, wordIndex) => (\r\n <div\r\n key={`word-${wordIndex}`}\r\n className={styles.word}>\r\n {word.text.map((character, characterIndex) => (\r\n <span\r\n key={`char-${characterIndex}`}\r\n className={cn(styles.visibleCharacter, word.className)}>\r\n {character}\r\n </span>\r\n ))}\r\n &nbsp;\r\n </div>\r\n ))}\r\n </div>\r\n );\r\n };\r\n\r\n return (\r\n <div\r\n ref={ref}\r\n className={cn(styles.smoothRoot, className)}>\r\n <motion.div\r\n className={styles.smoothViewport}\r\n initial={{width: \"0%\"}}\r\n whileInView={{width: \"fit-content\"}}\r\n transition={{duration: 2, ease: \"linear\", delay: 1}}>\r\n <div className={styles.smoothText}>{renderWords()}</div>\r\n </motion.div>\r\n <motion.span\r\n initial={{opacity: 0}}\r\n animate={{opacity: 1}}\r\n transition={{duration: 0.8, repeat: Infinity, repeatType: \"reverse\"}}\r\n className={cn(styles.smoothCursor, cursorClassName)}\r\n />\r\n </div>\r\n );\r\n },\r\n);\r\nTypewriterTextSmooth.displayName = \"TypewriterTextSmooth\";\r\n\r\nexport {TypewriterText, TypewriterTextSmooth};\r\n"],"names":["TypewriterText","React","words","className","cursorClassName","ref","wordsArray","word","scope","animate","useAnimate","isInView","useInView","stagger","cn","styles","motion","wordIndex","character","characterIndex","Infinity","TypewriterTextSmooth","renderWords"],"mappings":";;;;;;AA0CA,MAAMA,iBAAiB,WAAHA,GAAGC,WACrB,CAAC,EAACC,KAAK,EAAEC,SAAS,EAAEC,eAAe,EAAgC,EAAEC;IACnE,MAAMC,aAAaJ,MAAM,GAAG,CAAC,CAACK,OAAU;YACtC,GAAGA,IAAI;YACP,MAAM;mBAAIA,KAAK,IAAI;aAAC;QACtB;IAEA,MAAM,CAACC,OAAOC,QAAQ,GAAGC;IACzB,MAAMC,WAAWC,UAAUJ;IAE3BP,UAAgB;QACd,IAAI,CAACU,UACH;QAGFF,QACE,QACA;YACE,SAAS;YACT,SAAS;YACT,OAAO;QACT,GACA;YACE,UAAU;YACV,OAAOI,QAAQ;YACf,MAAM;QACR;IAEJ,GAAG;QAACJ;QAASE;KAAS;IAEtB,OAAO,WAAP,GACE,KAAC;QACC,KAAKN;QACL,WAAWS,GAAGC,kBAAAA,IAAW,EAAEZ;;0BAC3B,IAACa,OAAO,GAAG;gBACT,KAAKR;gBACL,WAAWO,kBAAAA,MAAa;0BACvBT,WAAW,GAAG,CAAC,CAACC,MAAMU,YAAAA,WAAAA,GACrB,KAAC;wBAEC,WAAWF,kBAAAA,IAAW;;4BACrBR,KAAK,IAAI,CAAC,GAAG,CAAC,CAACW,WAAWC,iBAAAA,WAAAA,GACzB,IAACH,OAAO,IAAI;oCACV,SAAS,CAAC;oCAEV,WAAWF,GAAGC,kBAAAA,eAAsB,EAAER,KAAK,SAAS;8CACnDW;mCAFI,CAAC,KAAK,EAAEC,gBAAgB;4BAI9B;;uBATE,CAAC,KAAK,EAAEF,WAAW;;0BAc9B,IAACD,OAAO,IAAI;gBACV,SAAS;oBAAC,SAAS;gBAAC;gBACpB,SAAS;oBAAC,SAAS;gBAAC;gBACpB,YAAY;oBAAC,UAAU;oBAAK,QAAQI;oBAAU,YAAY;gBAAS;gBACnE,WAAWN,GAAGC,kBAAAA,MAAa,EAAEX;;;;AAIrC;AAEFJ,eAAe,WAAW,GAAG;AAkB7B,MAAMqB,uBAAuB,WAAHA,GAAGpB,WAC3B,CAAC,EAACC,KAAK,EAAEC,SAAS,EAAEC,eAAe,EAAgC,EAAEC;IACnE,MAAMC,aAAaJ,MAAM,GAAG,CAAC,CAACK,OAAU;YACtC,GAAGA,IAAI;YACP,MAAM;mBAAIA,KAAK,IAAI;aAAC;QACtB;IAEA,MAAMe,cAAc,IACX,WAAP,GACE,IAAC;sBACEhB,WAAW,GAAG,CAAC,CAACC,MAAMU,YAAAA,WAAAA,GACrB,KAAC;oBAEC,WAAWF,kBAAAA,IAAW;;wBACrBR,KAAK,IAAI,CAAC,GAAG,CAAC,CAACW,WAAWC,iBAAAA,WAAAA,GACzB,IAAC;gCAEC,WAAWL,GAAGC,kBAAAA,gBAAuB,EAAER,KAAK,SAAS;0CACpDW;+BAFI,CAAC,KAAK,EAAEC,gBAAgB;wBAI9B;;mBARE,CAAC,KAAK,EAAEF,WAAW;;IAgBlC,OAAO,WAAP,GACE,KAAC;QACC,KAAKZ;QACL,WAAWS,GAAGC,kBAAAA,UAAiB,EAAEZ;;0BACjC,IAACa,OAAO,GAAG;gBACT,WAAWD,kBAAAA,cAAqB;gBAChC,SAAS;oBAAC,OAAO;gBAAI;gBACrB,aAAa;oBAAC,OAAO;gBAAa;gBAClC,YAAY;oBAAC,UAAU;oBAAG,MAAM;oBAAU,OAAO;gBAAC;0BAClD,kBAAC;oBAAI,WAAWA,kBAAAA,UAAiB;8BAAGO;;;0BAEtC,IAACN,OAAO,IAAI;gBACV,SAAS;oBAAC,SAAS;gBAAC;gBACpB,SAAS;oBAAC,SAAS;gBAAC;gBACpB,YAAY;oBAAC,UAAU;oBAAK,QAAQI;oBAAU,YAAY;gBAAS;gBACnE,WAAWN,GAAGC,kBAAAA,YAAmB,EAAEX;;;;AAI3C;AAEFiB,qBAAqB,WAAW,GAAG"}
1
+ {"version":3,"file":"components/ui/typewriter.js","sources":["../../../src/components/ui/typewriter.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport {motion, stagger, useAnimate, useInView} from \"motion/react\";\r\nimport * as React from \"react\";\r\n\r\nimport {cn} from \"@/lib/utilities\";\r\nimport styles from \"./typewriter.module.css\";\r\n\r\n/** Single word definition consumed by the typewriter components. */\r\nexport interface TypewriterWord {\r\n /** Word content split into animated characters at render time. @default undefined */\r\n text: string;\r\n /** Additional CSS classes merged with each rendered character. @default undefined */\r\n className?: string;\r\n}\r\n\r\n/** Props accepted by {@link TypewriterText} and {@link TypewriterTextSmooth}. */\r\nexport interface TypewriterTextProps {\r\n /** Ordered list of words rendered by the typewriter animation. @default undefined */\r\n words: ReadonlyArray<TypewriterWord>;\r\n /** Additional CSS classes merged with the outer container. @default undefined */\r\n className?: string;\r\n /** Additional CSS classes merged with the blinking cursor element. @default undefined */\r\n cursorClassName?: string;\r\n}\r\n\r\n/**\r\n * Reveals text one character at a time with a stepped typewriter animation.\r\n *\r\n * @remarks\r\n * - Animated component using the `motion` library\r\n * - Renders a `<div>` element\r\n * - Styling via CSS Modules with `--ac-*` custom properties\r\n * - Client-side only (`\"use client\"` directive)\r\n *\r\n * @example\r\n * ```tsx\r\n * <TypewriterText words={[{text: \"Hello\"}, {text: \"world\"}]} />\r\n * ```\r\n *\r\n * @see {@link TypewriterTextProps} for available props\r\n */\r\nconst TypewriterText = React.forwardRef<HTMLDivElement, TypewriterTextProps>(\r\n ({words, className, cursorClassName}: Readonly<TypewriterTextProps>, ref): React.JSX.Element => {\r\n const wordsArray = words.map((word) => ({\r\n ...word,\r\n text: [...word.text],\r\n }));\r\n\r\n const [scope, animate] = useAnimate();\r\n const isInView = useInView(scope);\r\n\r\n React.useEffect(() => {\r\n if (!isInView) {\r\n return;\r\n }\r\n\r\n animate(\r\n \"span\",\r\n {\r\n display: \"inline-block\",\r\n opacity: 1,\r\n width: \"fit-content\",\r\n },\r\n {\r\n duration: 0.3,\r\n delay: stagger(0.1),\r\n ease: \"easeInOut\",\r\n },\r\n );\r\n }, [animate, isInView]);\r\n\r\n return (\r\n <div\r\n ref={ref}\r\n className={cn(styles.root, className)}>\r\n <motion.div\r\n ref={scope}\r\n className={styles.inline}>\r\n {wordsArray.map((word, wordIndex) => (\r\n <div\r\n key={`word-${wordIndex}`}\r\n className={styles.word}>\r\n {word.text.map((character, characterIndex) => (\r\n <motion.span\r\n initial={{}}\r\n key={`char-${characterIndex}`}\r\n className={cn(styles.hiddenCharacter, word.className)}>\r\n {character}\r\n </motion.span>\r\n ))}\r\n &nbsp;\r\n </div>\r\n ))}\r\n </motion.div>\r\n <motion.span\r\n initial={{opacity: 0}}\r\n animate={{opacity: 1}}\r\n transition={{duration: 0.8, repeat: Infinity, repeatType: \"reverse\"}}\r\n className={cn(styles.cursor, cursorClassName)}\r\n />\r\n </div>\r\n );\r\n },\r\n);\r\nTypewriterText.displayName = \"TypewriterText\";\r\n\r\n/**\r\n * Reveals text with a continuous width-based typewriter sweep animation.\r\n *\r\n * @remarks\r\n * - Animated component using the `motion` library\r\n * - Renders a `<div>` element\r\n * - Styling via CSS Modules with `--ac-*` custom properties\r\n * - Client-side only (`\"use client\"` directive)\r\n *\r\n * @example\r\n * ```tsx\r\n * <TypewriterTextSmooth words={[{text: \"Smooth\"}, {text: \"typing\"}]} />\r\n * ```\r\n *\r\n * @see {@link TypewriterTextProps} for available props\r\n */\r\nconst TypewriterTextSmooth = React.forwardRef<HTMLDivElement, TypewriterTextProps>(\r\n ({words, className, cursorClassName}: Readonly<TypewriterTextProps>, ref): React.JSX.Element => {\r\n const wordsArray = words.map((word) => ({\r\n ...word,\r\n text: [...word.text],\r\n }));\r\n\r\n const renderWords = (): React.JSX.Element => {\r\n return (\r\n <div>\r\n {wordsArray.map((word, wordIndex) => (\r\n <div\r\n key={`word-${wordIndex}`}\r\n className={styles.word}>\r\n {word.text.map((character, characterIndex) => (\r\n <span\r\n key={`char-${characterIndex}`}\r\n className={cn(styles.visibleCharacter, word.className)}>\r\n {character}\r\n </span>\r\n ))}\r\n &nbsp;\r\n </div>\r\n ))}\r\n </div>\r\n );\r\n };\r\n\r\n return (\r\n <div\r\n ref={ref}\r\n className={cn(styles.smoothRoot, className)}>\r\n <motion.div\r\n className={styles.smoothViewport}\r\n initial={{width: \"0%\"}}\r\n whileInView={{width: \"fit-content\"}}\r\n transition={{duration: 2, ease: \"linear\", delay: 1}}>\r\n <div className={styles.smoothText}>{renderWords()}</div>\r\n </motion.div>\r\n <motion.span\r\n initial={{opacity: 0}}\r\n animate={{opacity: 1}}\r\n transition={{duration: 0.8, repeat: Infinity, repeatType: \"reverse\"}}\r\n className={cn(styles.smoothCursor, cursorClassName)}\r\n />\r\n </div>\r\n );\r\n },\r\n);\r\nTypewriterTextSmooth.displayName = \"TypewriterTextSmooth\";\r\n\r\nexport {TypewriterText, TypewriterTextSmooth};\r\n"],"names":["TypewriterText","React","words","className","cursorClassName","ref","wordsArray","word","scope","animate","useAnimate","isInView","useInView","stagger","cn","styles","motion","wordIndex","character","characterIndex","Infinity","TypewriterTextSmooth","renderWords"],"mappings":";;;;;;AA0CA,MAAMA,iBAAiB,WAAHA,GAAGC,wBAAAA,UAAgB,CACrC,CAAC,EAACC,KAAK,EAAEC,SAAS,EAAEC,eAAe,EAAgC,EAAEC;IACnE,MAAMC,aAAaJ,MAAM,GAAG,CAAC,CAACK,OAAU;YACtC,GAAGA,IAAI;YACP,MAAM;mBAAIA,KAAK,IAAI;aAAC;QACtB;IAEA,MAAM,CAACC,OAAOC,QAAQ,GAAGC;IACzB,MAAMC,WAAWC,UAAUJ;IAE3BP,wBAAAA,SAAe,CAAC;QACd,IAAI,CAACU,UACH;QAGFF,QACE,QACA;YACE,SAAS;YACT,SAAS;YACT,OAAO;QACT,GACA;YACE,UAAU;YACV,OAAOI,QAAQ;YACf,MAAM;QACR;IAEJ,GAAG;QAACJ;QAASE;KAAS;IAEtB,OAAO,WAAP,GACE,KAAC;QACC,KAAKN;QACL,WAAWS,GAAGC,kBAAAA,IAAW,EAAEZ;;0BAC3B,IAACa,OAAO,GAAG;gBACT,KAAKR;gBACL,WAAWO,kBAAAA,MAAa;0BACvBT,WAAW,GAAG,CAAC,CAACC,MAAMU,YAAAA,WAAAA,GACrB,KAAC;wBAEC,WAAWF,kBAAAA,IAAW;;4BACrBR,KAAK,IAAI,CAAC,GAAG,CAAC,CAACW,WAAWC,iBAAAA,WAAAA,GACzB,IAACH,OAAO,IAAI;oCACV,SAAS,CAAC;oCAEV,WAAWF,GAAGC,kBAAAA,eAAsB,EAAER,KAAK,SAAS;8CACnDW;mCAFI,CAAC,KAAK,EAAEC,gBAAgB;4BAI9B;;uBATE,CAAC,KAAK,EAAEF,WAAW;;0BAc9B,IAACD,OAAO,IAAI;gBACV,SAAS;oBAAC,SAAS;gBAAC;gBACpB,SAAS;oBAAC,SAAS;gBAAC;gBACpB,YAAY;oBAAC,UAAU;oBAAK,QAAQI;oBAAU,YAAY;gBAAS;gBACnE,WAAWN,GAAGC,kBAAAA,MAAa,EAAEX;;;;AAIrC;AAEFJ,eAAe,WAAW,GAAG;AAkB7B,MAAMqB,uBAAuB,WAAHA,GAAGpB,wBAAAA,UAAgB,CAC3C,CAAC,EAACC,KAAK,EAAEC,SAAS,EAAEC,eAAe,EAAgC,EAAEC;IACnE,MAAMC,aAAaJ,MAAM,GAAG,CAAC,CAACK,OAAU;YACtC,GAAGA,IAAI;YACP,MAAM;mBAAIA,KAAK,IAAI;aAAC;QACtB;IAEA,MAAMe,cAAc,IACX,WAAP,GACE,IAAC;sBACEhB,WAAW,GAAG,CAAC,CAACC,MAAMU,YAAAA,WAAAA,GACrB,KAAC;oBAEC,WAAWF,kBAAAA,IAAW;;wBACrBR,KAAK,IAAI,CAAC,GAAG,CAAC,CAACW,WAAWC,iBAAAA,WAAAA,GACzB,IAAC;gCAEC,WAAWL,GAAGC,kBAAAA,gBAAuB,EAAER,KAAK,SAAS;0CACpDW;+BAFI,CAAC,KAAK,EAAEC,gBAAgB;wBAI9B;;mBARE,CAAC,KAAK,EAAEF,WAAW;;IAgBlC,OAAO,WAAP,GACE,KAAC;QACC,KAAKZ;QACL,WAAWS,GAAGC,kBAAAA,UAAiB,EAAEZ;;0BACjC,IAACa,OAAO,GAAG;gBACT,WAAWD,kBAAAA,cAAqB;gBAChC,SAAS;oBAAC,OAAO;gBAAI;gBACrB,aAAa;oBAAC,OAAO;gBAAa;gBAClC,YAAY;oBAAC,UAAU;oBAAG,MAAM;oBAAU,OAAO;gBAAC;0BAClD,kBAAC;oBAAI,WAAWA,kBAAAA,UAAiB;8BAAGO;;;0BAEtC,IAACN,OAAO,IAAI;gBACV,SAAS;oBAAC,SAAS;gBAAC;gBACpB,SAAS;oBAAC,SAAS;gBAAC;gBACpB,YAAY;oBAAC,UAAU;oBAAK,QAAQI;oBAAU,YAAY;gBAAS;gBACnE,WAAWN,GAAGC,kBAAAA,YAAmB,EAAEX;;;;AAI3C;AAEFiB,qBAAqB,WAAW,GAAG"}
@@ -1 +1 @@
1
- {"version":3,"sources":["webpack://./home/runner/work/arolariu.ro/arolariu.ro/packages/components/src/components/ui/typewriter.module.css","webpack://./src/components/ui/typewriter.module.css"],"names":[],"mappings":"AADA;ECEE,kBAAkB;EAClB,eAAe;EACf,gBAAgB;AAClB;;AAEA;EACE,eAAe;AACjB;;AAEA;EACE,qBAAqB;AACvB;;AAEA;EACE,UAAU;EACV,aAAa;AACf;;AAEA;EACE,2BAA2B;AAC7B;;AAEA;EACE,kCAAkC;EAClC,mBAAmB;EACnB,UAAU;EACV,qBAAqB;AACvB;;AAEA;EACE,YAAY;AACd;;AAEA;EACE,WAAW;EACX,gBAAgB;EAChB,aAAa;AACf;;AAEA;EACE,qBAAqB;EACrB,gBAAgB;AAClB;;AAEA;EACE,mBAAmB;EACnB,iBAAiB;EACjB,gBAAgB;AAClB;;AAEA;EACE,YAAY;EACZ,cAAc;AAChB;;AAEA;EACE;IACE,kBAAkB;EACpB;;EAEA;IACE,cAAc;EAChB;;EAEA;IACE,eAAe;EACjB;;EAEA;IACE,cAAc;EAChB;AACF;;AAEA;EACE;IACE,mBAAmB;EACrB;AACF;;AAEA;EACE;IACE,eAAe;EACjB;;EAEA;IACE,cAAc;EAChB;AACF;;AAEA;EACE;IACE,eAAe;EACjB;;EAEA;IACE,YAAY;EACd;AACF","sourcesContent":[".root{font-size:1rem;font-weight:700;text-align:center}.inline{display:inline}.word{display:inline-block}.hiddenCharacter{display:none;opacity:0}.hiddenCharacter,.visibleCharacter{color:var(--ac-foreground)}.cursor,.smoothCursor{background:#3b82f6;border-radius:var(--ac-radius-xs);display:inline-block;width:4px}.cursor{height:1rem}.smoothRoot{display:flex;gap:.25rem;margin:1.5rem 0}.smoothViewport{overflow:hidden;padding-bottom:.5rem}.smoothText{font-size:.75rem;font-weight:700;white-space:nowrap}.smoothCursor{display:block;height:1rem}@media (min-width:640px){.root{font-size:1.25rem}.cursor{height:1.5rem}.smoothText{font-size:1rem}.smoothCursor{height:1.5rem}}@media (min-width:768px){.root{font-size:1.875rem}}@media (min-width:1024px){.root{font-size:3rem}.cursor{height:2.5rem}}@media (min-width:1280px){.smoothText{font-size:3rem}.smoothCursor{height:3rem}}",".root {\n text-align: center;\n font-size: 1rem;\n font-weight: 700;\n}\n\n.inline {\n display: inline;\n}\n\n.word {\n display: inline-block;\n}\n\n.hiddenCharacter {\n opacity: 0;\n display: none;\n}\n\n.hiddenCharacter, .visibleCharacter {\n color: var(--ac-foreground);\n}\n\n.cursor, .smoothCursor {\n border-radius: var(--ac-radius-xs);\n background: #3b82f6;\n width: 4px;\n display: inline-block;\n}\n\n.cursor {\n height: 1rem;\n}\n\n.smoothRoot {\n gap: .25rem;\n margin: 1.5rem 0;\n display: flex;\n}\n\n.smoothViewport {\n padding-bottom: .5rem;\n overflow: hidden;\n}\n\n.smoothText {\n white-space: nowrap;\n font-size: .75rem;\n font-weight: 700;\n}\n\n.smoothCursor {\n height: 1rem;\n display: block;\n}\n\n@media (width >= 640px) {\n .root {\n font-size: 1.25rem;\n }\n\n .cursor {\n height: 1.5rem;\n }\n\n .smoothText {\n font-size: 1rem;\n }\n\n .smoothCursor {\n height: 1.5rem;\n }\n}\n\n@media (width >= 768px) {\n .root {\n font-size: 1.875rem;\n }\n}\n\n@media (width >= 1024px) {\n .root {\n font-size: 3rem;\n }\n\n .cursor {\n height: 2.5rem;\n }\n}\n\n@media (width >= 1280px) {\n .smoothText {\n font-size: 3rem;\n }\n\n .smoothCursor {\n height: 3rem;\n }\n}\n"],"sourceRoot":""}
1
+ {"version":3,"sources":["webpack://./../../node_modules/@rslib/core/node_modules/@rsbuild/core/compiled/css-loader/index.js??ruleSet[1].rules[1].oneOf[2].use[1]!builtin:lightningcss-loader??ruleSet[1].rules[1].oneOf[2].use[2]!/home/runner/work/arolariu.ro/arolariu.ro/node_modules/@rslib/core/node_modules/@rsbuild/core/compiled/postcss-loader/index.js??ruleSet[1].rules[1].oneOf[2].use[3]!/home/runner/work/arolariu.ro/arolariu.ro/packages/components/src/components/ui/typewriter.module.css","webpack://./src/components/ui/typewriter.module.css"],"names":[],"mappings":"AAAA;ECCE,kBAAkB;EAClB,eAAe;EACf,gBAAgB;AAClB;;ADJuD;ECOrD,eAAe;AACjB;;ADR8E;ECW5E,qBAAqB;AACvB;;ADZyG;ECevG,UAAU;EACV,aAAa;AACf;;ADjBiJ;ECoB/I,2BAA2B;AAC7B;;ADrB+M;ECwB7M,kCAAkC;EAClC,mBAAmB;EACnB,UAAU;EACV,qBAAqB;AACvB;;AD5ByT;EC+BvT,YAAY;AACd;;ADhC6U;ECmC3U,WAAW;EACX,gBAAgB;EAChB,aAAa;AACf;;ADtCiY;ECyC/X,qBAAqB;EACrB,gBAAgB;AAClB;;AD3Csb;EC8Cpb,mBAAmB;EACnB,iBAAiB;EACjB,gBAAgB;AAClB;;ADjDsf;ECoDpf,YAAY;EACZ,cAAc;AAChB;;ADtD8hB;EAAyB;IC0DnjB,kBAAkB;EACpB;;ED3D6kB;IC8D3kB,cAAc;EAChB;;ED/DmmB;ICkEjmB,eAAe;EACjB;;EDnE8nB;ICsE5nB,cAAc;EAChB;AACF;;ADxE6pB;EAAyB;IC4ElrB,mBAAmB;EACrB;AACF;;AD9EgtB;EAA0B;ICkFtuB,eAAe;EACjB;;EDnF6vB;ICsF3vB,cAAc;EAChB;AACF;;ADxFsxB;EAA0B;IC4F5yB,eAAe;EACjB;;ED7Fy0B;ICgGv0B,YAAY;EACd;AACF","sourcesContent":[".root{font-size:1rem;font-weight:700;text-align:center}.inline{display:inline}.word{display:inline-block}.hiddenCharacter{display:none;opacity:0}.hiddenCharacter,.visibleCharacter{color:var(--ac-foreground)}.cursor,.smoothCursor{background:#3b82f6;border-radius:var(--ac-radius-xs);display:inline-block;width:4px}.cursor{height:1rem}.smoothRoot{display:flex;gap:.25rem;margin:1.5rem 0}.smoothViewport{overflow:hidden;padding-bottom:.5rem}.smoothText{font-size:.75rem;font-weight:700;white-space:nowrap}.smoothCursor{display:block;height:1rem}@media (min-width:640px){.root{font-size:1.25rem}.cursor{height:1.5rem}.smoothText{font-size:1rem}.smoothCursor{height:1.5rem}}@media (min-width:768px){.root{font-size:1.875rem}}@media (min-width:1024px){.root{font-size:3rem}.cursor{height:2.5rem}}@media (min-width:1280px){.smoothText{font-size:3rem}.smoothCursor{height:3rem}}",".root {\n text-align: center;\n font-size: 1rem;\n font-weight: 700;\n}\n\n.inline {\n display: inline;\n}\n\n.word {\n display: inline-block;\n}\n\n.hiddenCharacter {\n opacity: 0;\n display: none;\n}\n\n.hiddenCharacter, .visibleCharacter {\n color: var(--ac-foreground);\n}\n\n.cursor, .smoothCursor {\n border-radius: var(--ac-radius-xs);\n background: #3b82f6;\n width: 4px;\n display: inline-block;\n}\n\n.cursor {\n height: 1rem;\n}\n\n.smoothRoot {\n gap: .25rem;\n margin: 1.5rem 0;\n display: flex;\n}\n\n.smoothViewport {\n padding-bottom: .5rem;\n overflow: hidden;\n}\n\n.smoothText {\n white-space: nowrap;\n font-size: .75rem;\n font-weight: 700;\n}\n\n.smoothCursor {\n height: 1rem;\n display: block;\n}\n\n@media (width >= 640px) {\n .root {\n font-size: 1.25rem;\n }\n\n .cursor {\n height: 1.5rem;\n }\n\n .smoothText {\n font-size: 1rem;\n }\n\n .smoothCursor {\n height: 1.5rem;\n }\n}\n\n@media (width >= 768px) {\n .root {\n font-size: 1.875rem;\n }\n}\n\n@media (width >= 1024px) {\n .root {\n font-size: 3rem;\n }\n\n .cursor {\n height: 2.5rem;\n }\n}\n\n@media (width >= 1280px) {\n .smoothText {\n font-size: 3rem;\n }\n\n .smoothCursor {\n height: 3rem;\n }\n}\n"],"sourceRoot":""}
@@ -1,8 +1,8 @@
1
1
  import { jsx } from "react/jsx-runtime";
2
- import { forwardRef } from "react";
3
2
  import { cn } from "../../lib/utilities.js";
4
3
  import visually_hidden_module from "./visually-hidden.module.js";
5
- const VisuallyHidden = /*#__PURE__*/ forwardRef(({ className, ...props }, ref)=>/*#__PURE__*/ jsx("span", {
4
+ import * as __rspack_external_react from "react";
5
+ const VisuallyHidden = /*#__PURE__*/ __rspack_external_react.forwardRef(({ className, ...props }, ref)=>/*#__PURE__*/ jsx("span", {
6
6
  ref: ref,
7
7
  className: cn(visually_hidden_module.visuallyHidden, className),
8
8
  ...props
@@ -1 +1 @@
1
- {"version":3,"file":"components/ui/visually-hidden.js","sources":["../../../src/components/ui/visually-hidden.tsx"],"sourcesContent":["import * as React from \"react\";\r\n\r\nimport {cn} from \"@/lib/utilities\";\r\nimport styles from \"./visually-hidden.module.css\";\r\n\r\n/**\r\n * Represents the configurable props for the {@link VisuallyHidden} component.\r\n *\r\n * @remarks\r\n * Extends native `<span>` attributes so hidden assistive text can carry ARIA metadata,\r\n * testing hooks, and composed class overrides while remaining available to screen readers.\r\n */\r\ninterface VisuallyHiddenProps extends React.HTMLAttributes<HTMLSpanElement> {\r\n /**\r\n * Content that is hidden visually but remains accessible to assistive technology.\r\n */\r\n children: React.ReactNode;\r\n}\r\n\r\n/**\r\n * Hides content visually while keeping it accessible to screen readers.\r\n *\r\n * @remarks\r\n * **Rendering Context**: Server- and client-compatible presentational component.\r\n *\r\n * Renders a `<span>` that uses the classic clipping technique to remove content from the\r\n * visual flow without removing it from the accessibility tree. Use it to provide labels\r\n * for icon-only controls, clarify status changes, or add extra context for assistive tech.\r\n *\r\n * @example\r\n * ```tsx\r\n * <button type=\"button\">\r\n * <TrashIcon aria-hidden=\"true\" />\r\n * <VisuallyHidden>Delete item</VisuallyHidden>\r\n * </button>\r\n * ```\r\n *\r\n * @see {@link https://www.w3.org/WAI/tutorials/forms/labels/#note-on-hiding-elements | W3C hiding elements guidance}\r\n */\r\nconst VisuallyHidden = React.forwardRef<HTMLSpanElement, VisuallyHiddenProps>(({className, ...props}, ref) => (\r\n <span\r\n ref={ref}\r\n className={cn(styles.visuallyHidden, className)}\r\n {...props}\r\n />\r\n));\r\nVisuallyHidden.displayName = \"VisuallyHidden\";\r\n\r\nexport {VisuallyHidden};\r\nexport type {VisuallyHiddenProps};\r\n"],"names":["VisuallyHidden","React","className","props","ref","cn","styles"],"mappings":";;;;AAuCA,MAAMA,iBAAiB,WAAHA,GAAGC,WAAuD,CAAC,EAACC,SAAS,EAAE,GAAGC,OAAM,EAAEC,MAAAA,WAAAA,GACpG,IAAC;QACC,KAAKA;QACL,WAAWC,GAAGC,uBAAAA,cAAqB,EAAEJ;QACpC,GAAGC,KAAK;;AAGbH,eAAe,WAAW,GAAG"}
1
+ {"version":3,"file":"components/ui/visually-hidden.js","sources":["../../../src/components/ui/visually-hidden.tsx"],"sourcesContent":["import * as React from \"react\";\r\n\r\nimport {cn} from \"@/lib/utilities\";\r\nimport styles from \"./visually-hidden.module.css\";\r\n\r\n/**\r\n * Represents the configurable props for the {@link VisuallyHidden} component.\r\n *\r\n * @remarks\r\n * Extends native `<span>` attributes so hidden assistive text can carry ARIA metadata,\r\n * testing hooks, and composed class overrides while remaining available to screen readers.\r\n */\r\ninterface VisuallyHiddenProps extends React.HTMLAttributes<HTMLSpanElement> {\r\n /**\r\n * Content that is hidden visually but remains accessible to assistive technology.\r\n */\r\n children: React.ReactNode;\r\n}\r\n\r\n/**\r\n * Hides content visually while keeping it accessible to screen readers.\r\n *\r\n * @remarks\r\n * **Rendering Context**: Server- and client-compatible presentational component.\r\n *\r\n * Renders a `<span>` that uses the classic clipping technique to remove content from the\r\n * visual flow without removing it from the accessibility tree. Use it to provide labels\r\n * for icon-only controls, clarify status changes, or add extra context for assistive tech.\r\n *\r\n * @example\r\n * ```tsx\r\n * <button type=\"button\">\r\n * <TrashIcon aria-hidden=\"true\" />\r\n * <VisuallyHidden>Delete item</VisuallyHidden>\r\n * </button>\r\n * ```\r\n *\r\n * @see {@link https://www.w3.org/WAI/tutorials/forms/labels/#note-on-hiding-elements | W3C hiding elements guidance}\r\n */\r\nconst VisuallyHidden = React.forwardRef<HTMLSpanElement, VisuallyHiddenProps>(({className, ...props}, ref) => (\r\n <span\r\n ref={ref}\r\n className={cn(styles.visuallyHidden, className)}\r\n {...props}\r\n />\r\n));\r\nVisuallyHidden.displayName = \"VisuallyHidden\";\r\n\r\nexport {VisuallyHidden};\r\nexport type {VisuallyHiddenProps};\r\n"],"names":["VisuallyHidden","React","className","props","ref","cn","styles"],"mappings":";;;;AAuCA,MAAMA,iBAAiB,WAAHA,GAAGC,wBAAAA,UAAgB,CAAuC,CAAC,EAACC,SAAS,EAAE,GAAGC,OAAM,EAAEC,MAAAA,WAAAA,GACpG,IAAC;QACC,KAAKA;QACL,WAAWC,GAAGC,uBAAAA,cAAqB,EAAEJ;QACpC,GAAGC,KAAK;;AAGbH,eAAe,WAAW,GAAG"}
@@ -1 +1 @@
1
- {"version":3,"sources":["webpack://./home/runner/work/arolariu.ro/arolariu.ro/packages/components/src/components/ui/visually-hidden.module.css","webpack://./src/components/ui/visually-hidden.module.css"],"names":[],"mappings":"AADA;ECEE,mBAAmB;EACnB,mBAAmB;EACnB,SAAS;EACT,UAAU;EACV,WAAW;EACX,YAAY;EACZ,UAAU;EACV,kBAAkB;EAClB,gBAAgB;AAClB","sourcesContent":[".visuallyHidden{height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;clip:rect(0,0,0,0);border:0;white-space:nowrap}",".visuallyHidden {\n clip: rect(0,0,0,0);\n white-space: nowrap;\n border: 0;\n width: 1px;\n height: 1px;\n margin: -1px;\n padding: 0;\n position: absolute;\n overflow: hidden;\n}\n"],"sourceRoot":""}
1
+ {"version":3,"sources":["webpack://./../../node_modules/@rslib/core/node_modules/@rsbuild/core/compiled/css-loader/index.js??ruleSet[1].rules[1].oneOf[2].use[1]!builtin:lightningcss-loader??ruleSet[1].rules[1].oneOf[2].use[2]!/home/runner/work/arolariu.ro/arolariu.ro/node_modules/@rslib/core/node_modules/@rsbuild/core/compiled/postcss-loader/index.js??ruleSet[1].rules[1].oneOf[2].use[3]!/home/runner/work/arolariu.ro/arolariu.ro/packages/components/src/components/ui/visually-hidden.module.css","webpack://./src/components/ui/visually-hidden.module.css"],"names":[],"mappings":"AAAA;ECCE,mBAAmB;EACnB,mBAAmB;EACnB,SAAS;EACT,UAAU;EACV,WAAW;EACX,YAAY;EACZ,UAAU;EACV,kBAAkB;EAClB,gBAAgB;AAClB","sourcesContent":[".visuallyHidden{height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;clip:rect(0,0,0,0);border:0;white-space:nowrap}",".visuallyHidden {\n clip: rect(0,0,0,0);\n white-space: nowrap;\n border: 0;\n width: 1px;\n height: 1px;\n margin: -1px;\n padding: 0;\n position: absolute;\n overflow: hidden;\n}\n"],"sourceRoot":""}
@@ -1,9 +1,9 @@
1
1
  "use client";
2
- import { useCallback, useEffect, useRef } from "react";
2
+ import * as __rspack_external_react from "react";
3
3
  function useAnnounce() {
4
- const politeRef = useRef(null);
5
- const assertiveRef = useRef(null);
6
- useEffect(()=>{
4
+ const politeRef = __rspack_external_react.useRef(null);
5
+ const assertiveRef = __rspack_external_react.useRef(null);
6
+ __rspack_external_react.useEffect(()=>{
7
7
  const createRegion = (politeness)=>{
8
8
  const element = document.createElement("div");
9
9
  element.setAttribute("role", "status");
@@ -32,7 +32,7 @@ function useAnnounce() {
32
32
  assertiveRef.current = null;
33
33
  };
34
34
  }, []);
35
- return useCallback((message, politeness = "polite")=>{
35
+ return __rspack_external_react.useCallback((message, politeness = "polite")=>{
36
36
  const region = "assertive" === politeness ? assertiveRef.current : politeRef.current;
37
37
  if (!region) return;
38
38
  region.textContent = "";
@@ -1 +1 @@
1
- {"version":3,"file":"hooks/useAnnounce.js","sources":["../../src/hooks/useAnnounce.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport * as React from \"react\";\r\n\r\ntype Politeness = \"polite\" | \"assertive\";\r\n\r\n/**\r\n * Creates off-screen ARIA live regions and returns an announcement function for screen readers.\r\n *\r\n * @returns A callback that announces a message using the requested politeness level.\r\n *\r\n * @example\r\n * ```tsx\r\n * const announce = useAnnounce();\r\n *\r\n * announce(\"Item deleted successfully\");\r\n * announce(\"Error: invalid input\", \"assertive\");\r\n * ```\r\n */\r\nexport function useAnnounce(): (message: string, politeness?: Politeness) => void {\r\n const politeRef = React.useRef<HTMLDivElement | null>(null);\r\n const assertiveRef = React.useRef<HTMLDivElement | null>(null);\r\n\r\n React.useEffect(() => {\r\n const createRegion = (politeness: Politeness): HTMLDivElement => {\r\n const element = document.createElement(\"div\");\r\n\r\n element.setAttribute(\"role\", \"status\");\r\n element.setAttribute(\"aria-live\", politeness);\r\n element.setAttribute(\"aria-atomic\", \"true\");\r\n\r\n Object.assign(element.style, {\r\n position: \"absolute\",\r\n width: \"1px\",\r\n height: \"1px\",\r\n padding: \"0\",\r\n margin: \"-1px\",\r\n overflow: \"hidden\",\r\n clip: \"rect(0,0,0,0)\",\r\n whiteSpace: \"nowrap\",\r\n border: \"0\",\r\n });\r\n\r\n document.body.append(element);\r\n\r\n return element;\r\n };\r\n\r\n politeRef.current = createRegion(\"polite\");\r\n assertiveRef.current = createRegion(\"assertive\");\r\n\r\n return () => {\r\n politeRef.current?.remove();\r\n assertiveRef.current?.remove();\r\n politeRef.current = null;\r\n assertiveRef.current = null;\r\n };\r\n }, []);\r\n\r\n return React.useCallback((message: string, politeness: Politeness = \"polite\") => {\r\n const region = politeness === \"assertive\" ? assertiveRef.current : politeRef.current;\r\n\r\n if (!region) {\r\n return;\r\n }\r\n\r\n region.textContent = \"\";\r\n\r\n requestAnimationFrame(() => {\r\n region.textContent = message;\r\n });\r\n }, []);\r\n}\r\n"],"names":["useAnnounce","politeRef","React","assertiveRef","createRegion","politeness","element","document","Object","message","region","requestAnimationFrame"],"mappings":";;AAmBO,SAASA;IACd,MAAMC,YAAYC,OAAoC;IACtD,MAAMC,eAAeD,OAAoC;IAEzDA,UAAgB;QACd,MAAME,eAAe,CAACC;YACpB,MAAMC,UAAUC,SAAS,aAAa,CAAC;YAEvCD,QAAQ,YAAY,CAAC,QAAQ;YAC7BA,QAAQ,YAAY,CAAC,aAAaD;YAClCC,QAAQ,YAAY,CAAC,eAAe;YAEpCE,OAAO,MAAM,CAACF,QAAQ,KAAK,EAAE;gBAC3B,UAAU;gBACV,OAAO;gBACP,QAAQ;gBACR,SAAS;gBACT,QAAQ;gBACR,UAAU;gBACV,MAAM;gBACN,YAAY;gBACZ,QAAQ;YACV;YAEAC,SAAS,IAAI,CAAC,MAAM,CAACD;YAErB,OAAOA;QACT;QAEAL,UAAU,OAAO,GAAGG,aAAa;QACjCD,aAAa,OAAO,GAAGC,aAAa;QAEpC,OAAO;YACLH,UAAU,OAAO,EAAE;YACnBE,aAAa,OAAO,EAAE;YACtBF,UAAU,OAAO,GAAG;YACpBE,aAAa,OAAO,GAAG;QACzB;IACF,GAAG,EAAE;IAEL,OAAOD,YAAkB,CAACO,SAAiBJ,aAAyB,QAAQ;QAC1E,MAAMK,SAASL,AAAe,gBAAfA,aAA6BF,aAAa,OAAO,GAAGF,UAAU,OAAO;QAEpF,IAAI,CAACS,QACH;QAGFA,OAAO,WAAW,GAAG;QAErBC,sBAAsB;YACpBD,OAAO,WAAW,GAAGD;QACvB;IACF,GAAG,EAAE;AACP"}
1
+ {"version":3,"file":"hooks/useAnnounce.js","sources":["../../src/hooks/useAnnounce.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport * as React from \"react\";\r\n\r\ntype Politeness = \"polite\" | \"assertive\";\r\n\r\n/**\r\n * Creates off-screen ARIA live regions and returns an announcement function for screen readers.\r\n *\r\n * @returns A callback that announces a message using the requested politeness level.\r\n *\r\n * @example\r\n * ```tsx\r\n * const announce = useAnnounce();\r\n *\r\n * announce(\"Item deleted successfully\");\r\n * announce(\"Error: invalid input\", \"assertive\");\r\n * ```\r\n */\r\nexport function useAnnounce(): (message: string, politeness?: Politeness) => void {\r\n const politeRef = React.useRef<HTMLDivElement | null>(null);\r\n const assertiveRef = React.useRef<HTMLDivElement | null>(null);\r\n\r\n React.useEffect(() => {\r\n const createRegion = (politeness: Politeness): HTMLDivElement => {\r\n const element = document.createElement(\"div\");\r\n\r\n element.setAttribute(\"role\", \"status\");\r\n element.setAttribute(\"aria-live\", politeness);\r\n element.setAttribute(\"aria-atomic\", \"true\");\r\n\r\n Object.assign(element.style, {\r\n position: \"absolute\",\r\n width: \"1px\",\r\n height: \"1px\",\r\n padding: \"0\",\r\n margin: \"-1px\",\r\n overflow: \"hidden\",\r\n clip: \"rect(0,0,0,0)\",\r\n whiteSpace: \"nowrap\",\r\n border: \"0\",\r\n });\r\n\r\n document.body.append(element);\r\n\r\n return element;\r\n };\r\n\r\n politeRef.current = createRegion(\"polite\");\r\n assertiveRef.current = createRegion(\"assertive\");\r\n\r\n return () => {\r\n politeRef.current?.remove();\r\n assertiveRef.current?.remove();\r\n politeRef.current = null;\r\n assertiveRef.current = null;\r\n };\r\n }, []);\r\n\r\n return React.useCallback((message: string, politeness: Politeness = \"polite\") => {\r\n const region = politeness === \"assertive\" ? assertiveRef.current : politeRef.current;\r\n\r\n if (!region) {\r\n return;\r\n }\r\n\r\n region.textContent = \"\";\r\n\r\n requestAnimationFrame(() => {\r\n region.textContent = message;\r\n });\r\n }, []);\r\n}\r\n"],"names":["useAnnounce","politeRef","React","assertiveRef","createRegion","politeness","element","document","Object","message","region","requestAnimationFrame"],"mappings":";;AAmBO,SAASA;IACd,MAAMC,YAAYC,wBAAAA,MAAY,CAAwB;IACtD,MAAMC,eAAeD,wBAAAA,MAAY,CAAwB;IAEzDA,wBAAAA,SAAe,CAAC;QACd,MAAME,eAAe,CAACC;YACpB,MAAMC,UAAUC,SAAS,aAAa,CAAC;YAEvCD,QAAQ,YAAY,CAAC,QAAQ;YAC7BA,QAAQ,YAAY,CAAC,aAAaD;YAClCC,QAAQ,YAAY,CAAC,eAAe;YAEpCE,OAAO,MAAM,CAACF,QAAQ,KAAK,EAAE;gBAC3B,UAAU;gBACV,OAAO;gBACP,QAAQ;gBACR,SAAS;gBACT,QAAQ;gBACR,UAAU;gBACV,MAAM;gBACN,YAAY;gBACZ,QAAQ;YACV;YAEAC,SAAS,IAAI,CAAC,MAAM,CAACD;YAErB,OAAOA;QACT;QAEAL,UAAU,OAAO,GAAGG,aAAa;QACjCD,aAAa,OAAO,GAAGC,aAAa;QAEpC,OAAO;YACLH,UAAU,OAAO,EAAE;YACnBE,aAAa,OAAO,EAAE;YACtBF,UAAU,OAAO,GAAG;YACpBE,aAAa,OAAO,GAAG;QACzB;IACF,GAAG,EAAE;IAEL,OAAOD,wBAAAA,WAAiB,CAAC,CAACO,SAAiBJ,aAAyB,QAAQ;QAC1E,MAAMK,SAASL,AAAe,gBAAfA,aAA6BF,aAAa,OAAO,GAAGF,UAAU,OAAO;QAEpF,IAAI,CAACS,QACH;QAGFA,OAAO,WAAW,GAAG;QAErBC,sBAAsB;YACpBD,OAAO,WAAW,GAAGD;QACvB;IACF,GAAG,EAAE;AACP"}
@@ -0,0 +1,77 @@
1
+ /**
2
+ * Options for the `useClipboard` hook.
3
+ */
4
+ export interface UseClipboardOptions {
5
+ /**
6
+ * The duration in milliseconds after which the `copied` state resets to `false`.
7
+ *
8
+ * @defaultValue 2000
9
+ */
10
+ timeout?: number;
11
+ }
12
+ /**
13
+ * Return type for the `useClipboard` hook.
14
+ */
15
+ export interface UseClipboardReturn {
16
+ /**
17
+ * Whether the text was successfully copied to the clipboard.
18
+ */
19
+ copied: boolean;
20
+ /**
21
+ * Copies the provided text to the clipboard.
22
+ *
23
+ * @param text - The text to copy.
24
+ * @returns A promise that resolves when the copy operation completes.
25
+ */
26
+ copy: (text: string) => Promise<void>;
27
+ /**
28
+ * The error that occurred during the copy operation, or `null` if no error occurred.
29
+ */
30
+ error: Error | null;
31
+ }
32
+ /**
33
+ * Copies text to the clipboard with success/error state management.
34
+ *
35
+ * @remarks
36
+ * This hook provides a simple interface for copying text to the clipboard using
37
+ * the Clipboard API. It manages the `copied` state that automatically resets
38
+ * after a configurable timeout, and handles errors gracefully when the Clipboard
39
+ * API is unavailable or the operation fails.
40
+ *
41
+ * The hook is SSR-safe and will handle the case where `navigator.clipboard` is
42
+ * not available (e.g., in non-secure contexts or older browsers).
43
+ *
44
+ * @param options - Configuration options for the hook.
45
+ * @returns An object containing the copied state, copy function, and any error.
46
+ *
47
+ * @example
48
+ * ```tsx
49
+ * function CopyButton({textToCopy}: {textToCopy: string}) {
50
+ * const {copied, copy, error} = useClipboard({timeout: 3000});
51
+ *
52
+ * return (
53
+ * <div>
54
+ * <button onClick={() => copy(textToCopy)}>
55
+ * {copied ? "Copied!" : "Copy to clipboard"}
56
+ * </button>
57
+ * {error && <span>Failed to copy: {error.message}</span>}
58
+ * </div>
59
+ * );
60
+ * }
61
+ * ```
62
+ *
63
+ * @example
64
+ * ```tsx
65
+ * function ShareLink({url}: {url: string}) {
66
+ * const {copied, copy} = useClipboard();
67
+ *
68
+ * return (
69
+ * <button onClick={() => copy(url)} disabled={copied}>
70
+ * {copied ? "✓ Copied" : "Share link"}
71
+ * </button>
72
+ * );
73
+ * }
74
+ * ```
75
+ */
76
+ export declare function useClipboard(options?: UseClipboardOptions): UseClipboardReturn;
77
+ //# sourceMappingURL=useClipboard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useClipboard.d.ts","sourceRoot":"","sources":["../../src/hooks/useClipboard.tsx"],"names":[],"mappings":"AAIA;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC;;OAEG;IACH,MAAM,EAAE,OAAO,CAAC;IAEhB;;;;;OAKG;IACH,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAEtC;;OAEG;IACH,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;CACrB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,wBAAgB,YAAY,CAAC,OAAO,GAAE,mBAAwB,GAAG,kBAAkB,CAqDlF"}
@@ -0,0 +1,42 @@
1
+ "use client";
2
+ import * as __rspack_external_react from "react";
3
+ function useClipboard(options = {}) {
4
+ const { timeout = 2000 } = options;
5
+ const [copied, setCopied] = __rspack_external_react.useState(false);
6
+ const [error, setError] = __rspack_external_react.useState(null);
7
+ const timeoutRef = __rspack_external_react.useRef(null);
8
+ const copy = __rspack_external_react.useCallback(async (text)=>{
9
+ if (null !== timeoutRef.current) {
10
+ clearTimeout(timeoutRef.current);
11
+ timeoutRef.current = null;
12
+ }
13
+ setError(null);
14
+ try {
15
+ if (void 0 === globalThis.navigator || !globalThis.navigator.clipboard) throw new Error("Clipboard API is not available");
16
+ await globalThis.navigator.clipboard.writeText(text);
17
+ setCopied(true);
18
+ timeoutRef.current = setTimeout(()=>{
19
+ setCopied(false);
20
+ timeoutRef.current = null;
21
+ }, timeout);
22
+ } catch (err) {
23
+ const errorMessage = err instanceof Error ? err : new Error("Failed to copy to clipboard");
24
+ setError(errorMessage);
25
+ setCopied(false);
26
+ console.error("Copy to clipboard failed:", errorMessage);
27
+ }
28
+ }, [
29
+ timeout
30
+ ]);
31
+ __rspack_external_react.useEffect(()=>()=>{
32
+ if (null !== timeoutRef.current) clearTimeout(timeoutRef.current);
33
+ }, []);
34
+ return {
35
+ copied,
36
+ copy,
37
+ error
38
+ };
39
+ }
40
+ export { useClipboard };
41
+
42
+ //# sourceMappingURL=useClipboard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks/useClipboard.js","sources":["../../src/hooks/useClipboard.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport * as React from \"react\";\r\n\r\n/**\r\n * Options for the `useClipboard` hook.\r\n */\r\nexport interface UseClipboardOptions {\r\n /**\r\n * The duration in milliseconds after which the `copied` state resets to `false`.\r\n *\r\n * @defaultValue 2000\r\n */\r\n timeout?: number;\r\n}\r\n\r\n/**\r\n * Return type for the `useClipboard` hook.\r\n */\r\nexport interface UseClipboardReturn {\r\n /**\r\n * Whether the text was successfully copied to the clipboard.\r\n */\r\n copied: boolean;\r\n\r\n /**\r\n * Copies the provided text to the clipboard.\r\n *\r\n * @param text - The text to copy.\r\n * @returns A promise that resolves when the copy operation completes.\r\n */\r\n copy: (text: string) => Promise<void>;\r\n\r\n /**\r\n * The error that occurred during the copy operation, or `null` if no error occurred.\r\n */\r\n error: Error | null;\r\n}\r\n\r\n/**\r\n * Copies text to the clipboard with success/error state management.\r\n *\r\n * @remarks\r\n * This hook provides a simple interface for copying text to the clipboard using\r\n * the Clipboard API. It manages the `copied` state that automatically resets\r\n * after a configurable timeout, and handles errors gracefully when the Clipboard\r\n * API is unavailable or the operation fails.\r\n *\r\n * The hook is SSR-safe and will handle the case where `navigator.clipboard` is\r\n * not available (e.g., in non-secure contexts or older browsers).\r\n *\r\n * @param options - Configuration options for the hook.\r\n * @returns An object containing the copied state, copy function, and any error.\r\n *\r\n * @example\r\n * ```tsx\r\n * function CopyButton({textToCopy}: {textToCopy: string}) {\r\n * const {copied, copy, error} = useClipboard({timeout: 3000});\r\n *\r\n * return (\r\n * <div>\r\n * <button onClick={() => copy(textToCopy)}>\r\n * {copied ? \"Copied!\" : \"Copy to clipboard\"}\r\n * </button>\r\n * {error && <span>Failed to copy: {error.message}</span>}\r\n * </div>\r\n * );\r\n * }\r\n * ```\r\n *\r\n * @example\r\n * ```tsx\r\n * function ShareLink({url}: {url: string}) {\r\n * const {copied, copy} = useClipboard();\r\n *\r\n * return (\r\n * <button onClick={() => copy(url)} disabled={copied}>\r\n * {copied ? \"✓ Copied\" : \"Share link\"}\r\n * </button>\r\n * );\r\n * }\r\n * ```\r\n */\r\nexport function useClipboard(options: UseClipboardOptions = {}): UseClipboardReturn {\r\n const {timeout = 2000} = options;\r\n\r\n const [copied, setCopied] = React.useState(false);\r\n const [error, setError] = React.useState<Error | null>(null);\r\n const timeoutRef = React.useRef<ReturnType<typeof setTimeout> | null>(null);\r\n\r\n const copy = React.useCallback(\r\n async (text: string): Promise<void> => {\r\n // Clear any existing timeout\r\n if (timeoutRef.current !== null) {\r\n clearTimeout(timeoutRef.current);\r\n timeoutRef.current = null;\r\n }\r\n\r\n // Reset error state\r\n setError(null);\r\n\r\n try {\r\n // Check if Clipboard API is available\r\n if (typeof globalThis.navigator === \"undefined\" || !globalThis.navigator.clipboard) {\r\n throw new Error(\"Clipboard API is not available\");\r\n }\r\n\r\n await globalThis.navigator.clipboard.writeText(text);\r\n setCopied(true);\r\n\r\n // Reset copied state after timeout\r\n timeoutRef.current = setTimeout(() => {\r\n setCopied(false);\r\n timeoutRef.current = null;\r\n }, timeout);\r\n } catch (err) {\r\n const errorMessage = err instanceof Error ? err : new Error(\"Failed to copy to clipboard\");\r\n\r\n setError(errorMessage);\r\n setCopied(false);\r\n console.error(\"Copy to clipboard failed:\", errorMessage);\r\n }\r\n },\r\n [timeout],\r\n );\r\n\r\n // Cleanup timeout on unmount\r\n React.useEffect(() => {\r\n return () => {\r\n if (timeoutRef.current !== null) {\r\n clearTimeout(timeoutRef.current);\r\n }\r\n };\r\n }, []);\r\n\r\n return {copied, copy, error};\r\n}\r\n"],"names":["useClipboard","options","timeout","copied","setCopied","React","error","setError","timeoutRef","copy","text","clearTimeout","globalThis","Error","setTimeout","err","errorMessage","console"],"mappings":";;AAmFO,SAASA,aAAaC,UAA+B,CAAC,CAAC;IAC5D,MAAM,EAACC,UAAU,IAAI,EAAC,GAAGD;IAEzB,MAAM,CAACE,QAAQC,UAAU,GAAGC,wBAAAA,QAAc,CAAC;IAC3C,MAAM,CAACC,OAAOC,SAAS,GAAGF,wBAAAA,QAAc,CAAe;IACvD,MAAMG,aAAaH,wBAAAA,MAAY,CAAuC;IAEtE,MAAMI,OAAOJ,wBAAAA,WAAiB,CAC5B,OAAOK;QAEL,IAAIF,AAAuB,SAAvBA,WAAW,OAAO,EAAW;YAC/BG,aAAaH,WAAW,OAAO;YAC/BA,WAAW,OAAO,GAAG;QACvB;QAGAD,SAAS;QAET,IAAI;YAEF,IAAI,AAAgC,WAAzBK,WAAW,SAAS,IAAoB,CAACA,WAAW,SAAS,CAAC,SAAS,EAChF,MAAM,IAAIC,MAAM;YAGlB,MAAMD,WAAW,SAAS,CAAC,SAAS,CAAC,SAAS,CAACF;YAC/CN,UAAU;YAGVI,WAAW,OAAO,GAAGM,WAAW;gBAC9BV,UAAU;gBACVI,WAAW,OAAO,GAAG;YACvB,GAAGN;QACL,EAAE,OAAOa,KAAK;YACZ,MAAMC,eAAeD,eAAeF,QAAQE,MAAM,IAAIF,MAAM;YAE5DN,SAASS;YACTZ,UAAU;YACVa,QAAQ,KAAK,CAAC,6BAA6BD;QAC7C;IACF,GACA;QAACd;KAAQ;IAIXG,wBAAAA,SAAe,CAAC,IACP;YACL,IAAIG,AAAuB,SAAvBA,WAAW,OAAO,EACpBG,aAAaH,WAAW,OAAO;QAEnC,GACC,EAAE;IAEL,OAAO;QAACL;QAAQM;QAAMH;IAAK;AAC7B"}