@arolariu/components 1.1.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 (325) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/dist/components/ui/accordion.js +3 -3
  3. package/dist/components/ui/accordion.js.map +1 -1
  4. package/dist/components/ui/accordion_module.css.map +1 -1
  5. package/dist/components/ui/alert-dialog.js +8 -8
  6. package/dist/components/ui/alert-dialog.js.map +1 -1
  7. package/dist/components/ui/alert-dialog_module.css +1 -1
  8. package/dist/components/ui/alert-dialog_module.css.map +1 -1
  9. package/dist/components/ui/alert.js +4 -4
  10. package/dist/components/ui/alert.js.map +1 -1
  11. package/dist/components/ui/alert_module.css.map +1 -1
  12. package/dist/components/ui/aspect-ratio.js +2 -2
  13. package/dist/components/ui/aspect-ratio.js.map +1 -1
  14. package/dist/components/ui/aspect-ratio_module.css.map +1 -1
  15. package/dist/components/ui/async-boundary.js +2 -2
  16. package/dist/components/ui/async-boundary.js.map +1 -1
  17. package/dist/components/ui/avatar.js +4 -4
  18. package/dist/components/ui/avatar.js.map +1 -1
  19. package/dist/components/ui/avatar_module.css.map +1 -1
  20. package/dist/components/ui/background-beams.js +3 -3
  21. package/dist/components/ui/background-beams.js.map +1 -1
  22. package/dist/components/ui/background-beams_module.css.map +1 -1
  23. package/dist/components/ui/badge.js +2 -2
  24. package/dist/components/ui/badge.js.map +1 -1
  25. package/dist/components/ui/badge_module.css.map +1 -1
  26. package/dist/components/ui/breadcrumb.js +10 -10
  27. package/dist/components/ui/breadcrumb.js.map +1 -1
  28. package/dist/components/ui/breadcrumb_module.css.map +1 -1
  29. package/dist/components/ui/bubble-background.js +5 -5
  30. package/dist/components/ui/bubble-background.js.map +1 -1
  31. package/dist/components/ui/bubble-background_module.css.map +1 -1
  32. package/dist/components/ui/button-group.js +6 -6
  33. package/dist/components/ui/button-group.js.map +1 -1
  34. package/dist/components/ui/button-group_module.css.map +1 -1
  35. package/dist/components/ui/button.js +4 -4
  36. package/dist/components/ui/button.js.map +1 -1
  37. package/dist/components/ui/button_module.css.map +1 -1
  38. package/dist/components/ui/calendar.d.ts +2 -1
  39. package/dist/components/ui/calendar.d.ts.map +1 -1
  40. package/dist/components/ui/calendar.js +4 -4
  41. package/dist/components/ui/calendar.js.map +1 -1
  42. package/dist/components/ui/calendar_module.css.map +1 -1
  43. package/dist/components/ui/card-skeleton.js +2 -2
  44. package/dist/components/ui/card-skeleton.js.map +1 -1
  45. package/dist/components/ui/card-skeleton_module.css.map +1 -1
  46. package/dist/components/ui/card.js +8 -8
  47. package/dist/components/ui/card.js.map +1 -1
  48. package/dist/components/ui/card_module.css.map +1 -1
  49. package/dist/components/ui/carousel.js +16 -16
  50. package/dist/components/ui/carousel.js.map +1 -1
  51. package/dist/components/ui/carousel_module.css +1 -1
  52. package/dist/components/ui/carousel_module.css.map +1 -1
  53. package/dist/components/ui/chart.d.ts +6 -3
  54. package/dist/components/ui/chart.d.ts.map +1 -1
  55. package/dist/components/ui/chart.js +70 -136
  56. package/dist/components/ui/chart.js.map +1 -1
  57. package/dist/components/ui/chart_module.css.map +1 -1
  58. package/dist/components/ui/checkbox-group.js +2 -2
  59. package/dist/components/ui/checkbox-group.js.map +1 -1
  60. package/dist/components/ui/checkbox-group_module.css.map +1 -1
  61. package/dist/components/ui/checkbox.js +2 -2
  62. package/dist/components/ui/checkbox.js.map +1 -1
  63. package/dist/components/ui/checkbox_module.css.map +1 -1
  64. package/dist/components/ui/collapsible.js +4 -4
  65. package/dist/components/ui/collapsible.js.map +1 -1
  66. package/dist/components/ui/collapsible_module.css.map +1 -1
  67. package/dist/components/ui/combobox.js +13 -13
  68. package/dist/components/ui/combobox.js.map +1 -1
  69. package/dist/components/ui/combobox_module.css.map +1 -1
  70. package/dist/components/ui/command.js +40 -40
  71. package/dist/components/ui/command.js.map +1 -1
  72. package/dist/components/ui/command_module.css +1 -1
  73. package/dist/components/ui/command_module.css.map +1 -1
  74. package/dist/components/ui/context-menu.js +6 -6
  75. package/dist/components/ui/context-menu.js.map +1 -1
  76. package/dist/components/ui/context-menu_module.css.map +1 -1
  77. package/dist/components/ui/copy-button.js +6 -6
  78. package/dist/components/ui/copy-button.js.map +1 -1
  79. package/dist/components/ui/copy-button_module.css.map +1 -1
  80. package/dist/components/ui/counting-number.js +6 -6
  81. package/dist/components/ui/counting-number.js.map +1 -1
  82. package/dist/components/ui/counting-number_module.css.map +1 -1
  83. package/dist/components/ui/dialog.js +6 -6
  84. package/dist/components/ui/dialog.js.map +1 -1
  85. package/dist/components/ui/dialog_module.css +1 -1
  86. package/dist/components/ui/dialog_module.css.map +1 -1
  87. package/dist/components/ui/dot-background_module.css.map +1 -1
  88. package/dist/components/ui/drawer.js +5 -5
  89. package/dist/components/ui/drawer.js.map +1 -1
  90. package/dist/components/ui/drawer_module.css.map +1 -1
  91. package/dist/components/ui/dropdown-menu.js +6 -6
  92. package/dist/components/ui/dropdown-menu.js.map +1 -1
  93. package/dist/components/ui/dropdown-menu_module.css.map +1 -1
  94. package/dist/components/ui/dropdrawer.js +52 -52
  95. package/dist/components/ui/dropdrawer.js.map +1 -1
  96. package/dist/components/ui/dropdrawer_module.css.map +1 -1
  97. package/dist/components/ui/empty.js +7 -7
  98. package/dist/components/ui/empty.js.map +1 -1
  99. package/dist/components/ui/empty_module.css.map +1 -1
  100. package/dist/components/ui/error-boundary.js +2 -2
  101. package/dist/components/ui/error-boundary.js.map +1 -1
  102. package/dist/components/ui/error-boundary_module.css.map +1 -1
  103. package/dist/components/ui/field.js +12 -12
  104. package/dist/components/ui/field.js.map +1 -1
  105. package/dist/components/ui/field_module.css.map +1 -1
  106. package/dist/components/ui/fireworks-background.js +6 -6
  107. package/dist/components/ui/fireworks-background.js.map +1 -1
  108. package/dist/components/ui/fireworks-background_module.css.map +1 -1
  109. package/dist/components/ui/flip-button.js +5 -5
  110. package/dist/components/ui/flip-button.js.map +1 -1
  111. package/dist/components/ui/flip-button_module.css.map +1 -1
  112. package/dist/components/ui/focus-scope.js +6 -6
  113. package/dist/components/ui/focus-scope.js.map +1 -1
  114. package/dist/components/ui/focus-scope_module.css.map +1 -1
  115. package/dist/components/ui/form-skeleton.js +2 -2
  116. package/dist/components/ui/form-skeleton.js.map +1 -1
  117. package/dist/components/ui/form-skeleton_module.css.map +1 -1
  118. package/dist/components/ui/form.d.ts +3 -3
  119. package/dist/components/ui/form.d.ts.map +1 -1
  120. package/dist/components/ui/form.js +13 -13
  121. package/dist/components/ui/form.js.map +1 -1
  122. package/dist/components/ui/form_module.css.map +1 -1
  123. package/dist/components/ui/gradient-background.js +2 -2
  124. package/dist/components/ui/gradient-background.js.map +1 -1
  125. package/dist/components/ui/gradient-background_module.css.map +1 -1
  126. package/dist/components/ui/gradient-text.js +2 -2
  127. package/dist/components/ui/gradient-text.js.map +1 -1
  128. package/dist/components/ui/gradient-text_module.css.map +1 -1
  129. package/dist/components/ui/highlight-text.js +4 -4
  130. package/dist/components/ui/highlight-text.js.map +1 -1
  131. package/dist/components/ui/highlight-text_module.css.map +1 -1
  132. package/dist/components/ui/hole-background.js +21 -21
  133. package/dist/components/ui/hole-background.js.map +1 -1
  134. package/dist/components/ui/hole-background_module.css.map +1 -1
  135. package/dist/components/ui/hover-card.js +3 -3
  136. package/dist/components/ui/hover-card.js.map +1 -1
  137. package/dist/components/ui/hover-card_module.css.map +1 -1
  138. package/dist/components/ui/input-group.js +7 -7
  139. package/dist/components/ui/input-group.js.map +1 -1
  140. package/dist/components/ui/input-group_module.css.map +1 -1
  141. package/dist/components/ui/input-otp.d.ts +3 -3
  142. package/dist/components/ui/input-otp.d.ts.map +1 -1
  143. package/dist/components/ui/input-otp.js +6 -6
  144. package/dist/components/ui/input-otp.js.map +1 -1
  145. package/dist/components/ui/input-otp_module.css.map +1 -1
  146. package/dist/components/ui/input.js +2 -2
  147. package/dist/components/ui/input.js.map +1 -1
  148. package/dist/components/ui/input_module.css.map +1 -1
  149. package/dist/components/ui/item.js +13 -13
  150. package/dist/components/ui/item.js.map +1 -1
  151. package/dist/components/ui/item_module.css.map +1 -1
  152. package/dist/components/ui/kbd.js +3 -3
  153. package/dist/components/ui/kbd.js.map +1 -1
  154. package/dist/components/ui/kbd_module.css.map +1 -1
  155. package/dist/components/ui/label.js +2 -2
  156. package/dist/components/ui/label.js.map +1 -1
  157. package/dist/components/ui/label_module.css.map +1 -1
  158. package/dist/components/ui/list-skeleton.js +2 -2
  159. package/dist/components/ui/list-skeleton.js.map +1 -1
  160. package/dist/components/ui/list-skeleton_module.css.map +1 -1
  161. package/dist/components/ui/loading-overlay.js +2 -2
  162. package/dist/components/ui/loading-overlay.js.map +1 -1
  163. package/dist/components/ui/loading-overlay_module.css.map +1 -1
  164. package/dist/components/ui/menubar.js +4 -4
  165. package/dist/components/ui/menubar.js.map +1 -1
  166. package/dist/components/ui/menubar_module.css.map +1 -1
  167. package/dist/components/ui/meter.js +5 -5
  168. package/dist/components/ui/meter.js.map +1 -1
  169. package/dist/components/ui/meter_module.css.map +1 -1
  170. package/dist/components/ui/navigation-menu.js +5 -5
  171. package/dist/components/ui/navigation-menu.js.map +1 -1
  172. package/dist/components/ui/navigation-menu_module.css +1 -1
  173. package/dist/components/ui/navigation-menu_module.css.map +1 -1
  174. package/dist/components/ui/number-field.js +3 -3
  175. package/dist/components/ui/number-field.js.map +1 -1
  176. package/dist/components/ui/number-field_module.css.map +1 -1
  177. package/dist/components/ui/pagination.js +8 -8
  178. package/dist/components/ui/pagination.js.map +1 -1
  179. package/dist/components/ui/pagination_module.css.map +1 -1
  180. package/dist/components/ui/popover.js +5 -5
  181. package/dist/components/ui/popover.js.map +1 -1
  182. package/dist/components/ui/popover_module.css.map +1 -1
  183. package/dist/components/ui/progress.js +2 -2
  184. package/dist/components/ui/progress.js.map +1 -1
  185. package/dist/components/ui/progress_module.css.map +1 -1
  186. package/dist/components/ui/radio-group.js +3 -3
  187. package/dist/components/ui/radio-group.js.map +1 -1
  188. package/dist/components/ui/radio-group_module.css.map +1 -1
  189. package/dist/components/ui/resizable.d.ts +13 -29
  190. package/dist/components/ui/resizable.d.ts.map +1 -1
  191. package/dist/components/ui/resizable.js +8 -7
  192. package/dist/components/ui/resizable.js.map +1 -1
  193. package/dist/components/ui/resizable_module.css.map +1 -1
  194. package/dist/components/ui/ripple-button.js +9 -9
  195. package/dist/components/ui/ripple-button.js.map +1 -1
  196. package/dist/components/ui/ripple-button_module.css.map +1 -1
  197. package/dist/components/ui/scratcher_module.css.map +1 -1
  198. package/dist/components/ui/scroll-area.js +2 -2
  199. package/dist/components/ui/scroll-area.js.map +1 -1
  200. package/dist/components/ui/scroll-area_module.css.map +1 -1
  201. package/dist/components/ui/select.js +4 -4
  202. package/dist/components/ui/select.js.map +1 -1
  203. package/dist/components/ui/select_module.css.map +1 -1
  204. package/dist/components/ui/separator.js +2 -2
  205. package/dist/components/ui/separator.js.map +1 -1
  206. package/dist/components/ui/separator_module.css.map +1 -1
  207. package/dist/components/ui/sheet.js +6 -6
  208. package/dist/components/ui/sheet.js.map +1 -1
  209. package/dist/components/ui/sheet_module.css.map +1 -1
  210. package/dist/components/ui/sidebar.js +36 -36
  211. package/dist/components/ui/sidebar.js.map +1 -1
  212. package/dist/components/ui/sidebar_module.css.map +1 -1
  213. package/dist/components/ui/skeleton.js +2 -2
  214. package/dist/components/ui/skeleton.js.map +1 -1
  215. package/dist/components/ui/skeleton_module.css.map +1 -1
  216. package/dist/components/ui/slider.js +2 -2
  217. package/dist/components/ui/slider.js.map +1 -1
  218. package/dist/components/ui/slider_module.css.map +1 -1
  219. package/dist/components/ui/spinner.js +2 -2
  220. package/dist/components/ui/spinner.js.map +1 -1
  221. package/dist/components/ui/spinner_module.css.map +1 -1
  222. package/dist/components/ui/stepper.js +2 -2
  223. package/dist/components/ui/stepper.js.map +1 -1
  224. package/dist/components/ui/stepper_module.css.map +1 -1
  225. package/dist/components/ui/switch.js +2 -2
  226. package/dist/components/ui/switch.js.map +1 -1
  227. package/dist/components/ui/switch_module.css.map +1 -1
  228. package/dist/components/ui/table-skeleton.js +2 -2
  229. package/dist/components/ui/table-skeleton.js.map +1 -1
  230. package/dist/components/ui/table-skeleton_module.css.map +1 -1
  231. package/dist/components/ui/table.js +9 -9
  232. package/dist/components/ui/table.js.map +1 -1
  233. package/dist/components/ui/table_module.css.map +1 -1
  234. package/dist/components/ui/tabs.js +3 -3
  235. package/dist/components/ui/tabs.js.map +1 -1
  236. package/dist/components/ui/tabs_module.css.map +1 -1
  237. package/dist/components/ui/textarea.js +2 -2
  238. package/dist/components/ui/textarea.js.map +1 -1
  239. package/dist/components/ui/textarea_module.css.map +1 -1
  240. package/dist/components/ui/timeline.js +5 -5
  241. package/dist/components/ui/timeline.js.map +1 -1
  242. package/dist/components/ui/timeline_module.css.map +1 -1
  243. package/dist/components/ui/{sonner.d.ts → toast.d.ts} +10 -2
  244. package/dist/components/ui/toast.d.ts.map +1 -0
  245. package/dist/components/ui/{sonner.js → toast.js} +40 -40
  246. package/dist/components/ui/toast.js.map +1 -0
  247. package/dist/components/ui/toast.module.js +34 -0
  248. package/dist/components/ui/toast.module.js.map +1 -0
  249. package/dist/components/ui/{sonner_module.css → toast_module.css} +35 -35
  250. package/dist/components/ui/toast_module.css.map +1 -0
  251. package/dist/components/ui/toggle-group.js +5 -5
  252. package/dist/components/ui/toggle-group.js.map +1 -1
  253. package/dist/components/ui/toggle-group_module.css.map +1 -1
  254. package/dist/components/ui/toggle.js +2 -2
  255. package/dist/components/ui/toggle.js.map +1 -1
  256. package/dist/components/ui/toggle_module.css.map +1 -1
  257. package/dist/components/ui/toolbar.js +6 -6
  258. package/dist/components/ui/toolbar.js.map +1 -1
  259. package/dist/components/ui/toolbar_module.css.map +1 -1
  260. package/dist/components/ui/tooltip.js +4 -4
  261. package/dist/components/ui/tooltip.js.map +1 -1
  262. package/dist/components/ui/tooltip_module.css.map +1 -1
  263. package/dist/components/ui/typewriter.js +4 -4
  264. package/dist/components/ui/typewriter.js.map +1 -1
  265. package/dist/components/ui/typewriter_module.css.map +1 -1
  266. package/dist/components/ui/visually-hidden.js +2 -2
  267. package/dist/components/ui/visually-hidden.js.map +1 -1
  268. package/dist/components/ui/visually-hidden_module.css.map +1 -1
  269. package/dist/hooks/useAnnounce.js +5 -5
  270. package/dist/hooks/useAnnounce.js.map +1 -1
  271. package/dist/hooks/useClipboard.js +6 -6
  272. package/dist/hooks/useClipboard.js.map +1 -1
  273. package/dist/hooks/useControllableState.js +3 -3
  274. package/dist/hooks/useControllableState.js.map +1 -1
  275. package/dist/hooks/useDebounce.js +3 -3
  276. package/dist/hooks/useDebounce.js.map +1 -1
  277. package/dist/hooks/useEventCallback.js +4 -4
  278. package/dist/hooks/useEventCallback.js.map +1 -1
  279. package/dist/hooks/useFocusManager.js +6 -6
  280. package/dist/hooks/useFocusManager.js.map +1 -1
  281. package/dist/hooks/useFocusVisible.js +5 -5
  282. package/dist/hooks/useFocusVisible.js.map +1 -1
  283. package/dist/hooks/useId.js +4 -4
  284. package/dist/hooks/useId.js.map +1 -1
  285. package/dist/hooks/useIntersectionObserver.js +3 -3
  286. package/dist/hooks/useIntersectionObserver.js.map +1 -1
  287. package/dist/hooks/useInterval.js +4 -4
  288. package/dist/hooks/useInterval.js.map +1 -1
  289. package/dist/hooks/useLocalStorage.js +4 -4
  290. package/dist/hooks/useLocalStorage.js.map +1 -1
  291. package/dist/hooks/useMediaQuery.js +3 -3
  292. package/dist/hooks/useMediaQuery.js.map +1 -1
  293. package/dist/hooks/useMergedRefs.js +2 -2
  294. package/dist/hooks/useMergedRefs.js.map +1 -1
  295. package/dist/hooks/useOnClickOutside.js +2 -2
  296. package/dist/hooks/useOnClickOutside.js.map +1 -1
  297. package/dist/hooks/usePrevious.js +3 -3
  298. package/dist/hooks/usePrevious.js.map +1 -1
  299. package/dist/hooks/useThrottle.js +7 -7
  300. package/dist/hooks/useThrottle.js.map +1 -1
  301. package/dist/hooks/useTimeout.js +4 -4
  302. package/dist/hooks/useTimeout.js.map +1 -1
  303. package/dist/index.css.map +1 -1
  304. package/dist/index.d.ts +3 -3
  305. package/dist/index.d.ts.map +1 -1
  306. package/dist/index.js +1 -1
  307. package/dist/motion/Collapse.js +2 -2
  308. package/dist/motion/Collapse.js.map +1 -1
  309. package/dist/motion/Collapse_module.css.map +1 -1
  310. package/package.json +7 -8
  311. package/src/components/ui/calendar.tsx +2 -1
  312. package/src/components/ui/chart.tsx +2 -2
  313. package/src/components/ui/form.tsx +28 -3
  314. package/src/components/ui/input-otp.tsx +3 -3
  315. package/src/components/ui/resizable.tsx +15 -18
  316. package/src/components/ui/{sonner.module.css → toast.module.css} +1 -1
  317. package/src/components/ui/{sonner.tsx → toast.tsx} +2 -2
  318. package/src/index.ts +4 -4
  319. package/dist/components/ui/sonner.d.ts.map +0 -1
  320. package/dist/components/ui/sonner.js.map +0 -1
  321. package/dist/components/ui/sonner.module.js +0 -34
  322. package/dist/components/ui/sonner.module.js.map +0 -1
  323. package/dist/components/ui/sonner_module.css.map +0 -1
  324. package/dist/rslib-runtime.js +0 -39
  325. package/dist/rslib-runtime.js.map +0 -1
@@ -1,10 +1,10 @@
1
1
  "use client";
2
2
  import { jsx, jsxs } from "react/jsx-runtime";
3
3
  import { motion } from "motion/react";
4
- import { forwardRef, useCallback, useMemo } from "react";
5
4
  import { cn } from "../../lib/utilities.js";
6
5
  import flip_button_module from "./flip-button.module.js";
7
- const FlipButton = /*#__PURE__*/ forwardRef(({ frontText, backText, transition = {
6
+ import * as __rspack_external_react from "react";
7
+ const FlipButton = /*#__PURE__*/ __rspack_external_react.forwardRef(({ frontText, backText, transition = {
8
8
  type: "spring",
9
9
  stiffness: 280,
10
10
  damping: 20
@@ -14,7 +14,7 @@ const FlipButton = /*#__PURE__*/ forwardRef(({ frontText, backText, transition =
14
14
  const rotateAxis = isVertical ? "rotateX" : "rotateY";
15
15
  const frontOffset = "top" === from || "left" === from ? "50%" : "-50%";
16
16
  const backOffset = "top" === from || "left" === from ? "-50%" : "50%";
17
- const buildVariant = useCallback((opacity, rotation, offset = null)=>({
17
+ const buildVariant = __rspack_external_react.useCallback((opacity, rotation, offset = null)=>({
18
18
  opacity,
19
19
  [rotateAxis]: rotation,
20
20
  ...isVertical && null !== offset ? {
@@ -27,14 +27,14 @@ const FlipButton = /*#__PURE__*/ forwardRef(({ frontText, backText, transition =
27
27
  isVertical,
28
28
  rotateAxis
29
29
  ]);
30
- const frontVariants = useMemo(()=>({
30
+ const frontVariants = __rspack_external_react.useMemo(()=>({
31
31
  initial: buildVariant(1, 0, "0%"),
32
32
  hover: buildVariant(0, 90, frontOffset)
33
33
  }), [
34
34
  buildVariant,
35
35
  frontOffset
36
36
  ]);
37
- const backVariants = useMemo(()=>({
37
+ const backVariants = __rspack_external_react.useMemo(()=>({
38
38
  initial: buildVariant(0, 90, backOffset),
39
39
  hover: buildVariant(1, 0, "0%")
40
40
  }), [
@@ -1 +1 @@
1
- {"version":3,"file":"components/ui/flip-button.js","sources":["../../../src/components/ui/flip-button.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport {type HTMLMotionProps, motion, type Transition, type Variant} from \"motion/react\";\r\nimport * as React from \"react\";\r\n\r\nimport {cn} from \"@/lib/utilities\";\r\nimport styles from \"./flip-button.module.css\";\r\n\r\n/** Supported flip origins for the button animation. */\r\nexport type FlipDirection = \"top\" | \"bottom\" | \"left\" | \"righ\";\r\n\r\n/** Props accepted by {@link FlipButton}. */\r\nexport interface FlipButtonProps extends HTMLMotionProps<\"button\"> {\r\n /** Label rendered on the default face of the button. @default undefined */\r\n frontText: string;\r\n /** Label revealed after the flip animation completes. @default undefined */\r\n backText: string;\r\n /** Motion transition applied to both button faces. @default {type: \"spring\", stiffness: 280, damping: 20} */\r\n transition?: Transition;\r\n /** Additional CSS classes merged with the front face. @default undefined */\r\n frontClassName?: string;\r\n /** Additional CSS classes merged with the back face. @default undefined */\r\n backClassName?: string;\r\n /** Direction from which the back face flips into view. @default \"top\" */\r\n from?: FlipDirection;\r\n}\r\n\r\n/**\r\n * Renders a two-sided button that flips between front and back labels on hover.\r\n *\r\n * @remarks\r\n * - Animated component using the `motion` library\r\n * - Renders a `<button>` 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 * <FlipButton frontText=\"Learn more\" backText=\"Open\" />\r\n * ```\r\n *\r\n * @see {@link FlipButtonProps} for available props\r\n */\r\nconst FlipButton = React.forwardRef<HTMLButtonElement, FlipButtonProps>(\r\n (\r\n {\r\n frontText,\r\n backText,\r\n transition = {type: \"spring\", stiffness: 280, damping: 20},\r\n className,\r\n frontClassName,\r\n backClassName,\r\n from = \"top\",\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n // eslint-disable-next-line sonarjs/no-unused-vars -- removing React key avoids implicit key spreading\r\n const {key: _ignoredKey, ...restProps} = props;\r\n const isVertical = from === \"top\" || from === \"bottom\";\r\n const rotateAxis = isVertical ? \"rotateX\" : \"rotateY\";\r\n\r\n const frontOffset = from === \"top\" || from === \"left\" ? \"50%\" : \"-50%\";\r\n const backOffset = from === \"top\" || from === \"left\" ? \"-50%\" : \"50%\";\r\n\r\n const buildVariant = React.useCallback(\r\n (opacity: number, rotation: number, offset: string | null = null): Variant => ({\r\n opacity,\r\n [rotateAxis]: rotation,\r\n ...(isVertical && offset !== null ? {y: offset} : {}),\r\n ...(!isVertical && offset !== null ? {x: offset} : {}),\r\n }),\r\n [isVertical, rotateAxis],\r\n );\r\n\r\n const frontVariants = React.useMemo(\r\n () => ({\r\n initial: buildVariant(1, 0, \"0%\"),\r\n hover: buildVariant(0, 90, frontOffset),\r\n }),\r\n [buildVariant, frontOffset],\r\n );\r\n\r\n const backVariants = React.useMemo(\r\n () => ({\r\n initial: buildVariant(0, 90, backOffset),\r\n hover: buildVariant(1, 0, \"0%\"),\r\n }),\r\n [backOffset, buildVariant],\r\n );\r\n\r\n return (\r\n <motion.button\r\n ref={ref}\r\n initial='initial'\r\n whileHover='hover'\r\n whileTap={{scale: 0.95}}\r\n className={cn(styles.button, className)}\r\n {...restProps}>\r\n <motion.span\r\n variants={frontVariants}\r\n transition={transition}\r\n className={cn(styles.face, styles.front, frontClassName)}>\r\n {frontText}\r\n </motion.span>\r\n <motion.span\r\n variants={backVariants}\r\n transition={transition}\r\n className={cn(styles.face, styles.back, backClassName)}>\r\n {backText}\r\n </motion.span>\r\n <span className={styles.measure}>{frontText}</span>\r\n </motion.button>\r\n );\r\n },\r\n);\r\n\r\nFlipButton.displayName = \"FlipButton\";\r\n\r\nexport {FlipButton};\r\n"],"names":["FlipButton","React","frontText","backText","transition","className","frontClassName","backClassName","from","props","ref","_ignoredKey","restProps","isVertical","rotateAxis","frontOffset","backOffset","buildVariant","opacity","rotation","offset","frontVariants","backVariants","motion","cn","styles"],"mappings":";;;;;;AA2CA,MAAMA,aAAa,WAAHA,GAAGC,WACjB,CACE,EACEC,SAAS,EACTC,QAAQ,EACRC,aAAa;IAAC,MAAM;IAAU,WAAW;IAAK,SAAS;AAAE,CAAC,EAC1DC,SAAS,EACTC,cAAc,EACdC,aAAa,EACbC,OAAO,KAAK,EACZ,GAAGC,OACJ,EACDC;IAGA,MAAM,EAAC,KAAKC,WAAW,EAAE,GAAGC,WAAU,GAAGH;IACzC,MAAMI,aAAaL,AAAS,UAATA,QAAkBA,AAAS,aAATA;IACrC,MAAMM,aAAaD,aAAa,YAAY;IAE5C,MAAME,cAAcP,AAAS,UAATA,QAAkBA,AAAS,WAATA,OAAkB,QAAQ;IAChE,MAAMQ,aAAaR,AAAS,UAATA,QAAkBA,AAAS,WAATA,OAAkB,SAAS;IAEhE,MAAMS,eAAehB,YACnB,CAACiB,SAAiBC,UAAkBC,SAAwB,IAAI,GAAe;YAC7EF;YACA,CAACJ,WAAW,EAAEK;YACd,GAAIN,cAAcO,AAAW,SAAXA,SAAkB;gBAAC,GAAGA;YAAM,IAAI,CAAC,CAAC;YACpD,GAAI,CAACP,cAAcO,AAAW,SAAXA,SAAkB;gBAAC,GAAGA;YAAM,IAAI,CAAC,CAAC;QACvD,IACA;QAACP;QAAYC;KAAW;IAG1B,MAAMO,gBAAgBpB,QACpB,IAAO;YACL,SAASgB,aAAa,GAAG,GAAG;YAC5B,OAAOA,aAAa,GAAG,IAAIF;QAC7B,IACA;QAACE;QAAcF;KAAY;IAG7B,MAAMO,eAAerB,QACnB,IAAO;YACL,SAASgB,aAAa,GAAG,IAAID;YAC7B,OAAOC,aAAa,GAAG,GAAG;QAC5B,IACA;QAACD;QAAYC;KAAa;IAG5B,OAAO,WAAP,GACE,KAACM,OAAO,MAAM;QACZ,KAAKb;QACL,SAAQ;QACR,YAAW;QACX,UAAU;YAAC,OAAO;QAAI;QACtB,WAAWc,GAAGC,mBAAAA,MAAa,EAAEpB;QAC5B,GAAGO,SAAS;;0BACb,IAACW,OAAO,IAAI;gBACV,UAAUF;gBACV,YAAYjB;gBACZ,WAAWoB,GAAGC,mBAAAA,IAAW,EAAEA,mBAAAA,KAAY,EAAEnB;0BACxCJ;;0BAEH,IAACqB,OAAO,IAAI;gBACV,UAAUD;gBACV,YAAYlB;gBACZ,WAAWoB,GAAGC,mBAAAA,IAAW,EAAEA,mBAAAA,IAAW,EAAElB;0BACvCJ;;0BAEH,IAAC;gBAAK,WAAWsB,mBAAAA,OAAc;0BAAGvB;;;;AAGxC;AAGFF,WAAW,WAAW,GAAG"}
1
+ {"version":3,"file":"components/ui/flip-button.js","sources":["../../../src/components/ui/flip-button.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport {type HTMLMotionProps, motion, type Transition, type Variant} from \"motion/react\";\r\nimport * as React from \"react\";\r\n\r\nimport {cn} from \"@/lib/utilities\";\r\nimport styles from \"./flip-button.module.css\";\r\n\r\n/** Supported flip origins for the button animation. */\r\nexport type FlipDirection = \"top\" | \"bottom\" | \"left\" | \"righ\";\r\n\r\n/** Props accepted by {@link FlipButton}. */\r\nexport interface FlipButtonProps extends HTMLMotionProps<\"button\"> {\r\n /** Label rendered on the default face of the button. @default undefined */\r\n frontText: string;\r\n /** Label revealed after the flip animation completes. @default undefined */\r\n backText: string;\r\n /** Motion transition applied to both button faces. @default {type: \"spring\", stiffness: 280, damping: 20} */\r\n transition?: Transition;\r\n /** Additional CSS classes merged with the front face. @default undefined */\r\n frontClassName?: string;\r\n /** Additional CSS classes merged with the back face. @default undefined */\r\n backClassName?: string;\r\n /** Direction from which the back face flips into view. @default \"top\" */\r\n from?: FlipDirection;\r\n}\r\n\r\n/**\r\n * Renders a two-sided button that flips between front and back labels on hover.\r\n *\r\n * @remarks\r\n * - Animated component using the `motion` library\r\n * - Renders a `<button>` 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 * <FlipButton frontText=\"Learn more\" backText=\"Open\" />\r\n * ```\r\n *\r\n * @see {@link FlipButtonProps} for available props\r\n */\r\nconst FlipButton = React.forwardRef<HTMLButtonElement, FlipButtonProps>(\r\n (\r\n {\r\n frontText,\r\n backText,\r\n transition = {type: \"spring\", stiffness: 280, damping: 20},\r\n className,\r\n frontClassName,\r\n backClassName,\r\n from = \"top\",\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n // eslint-disable-next-line sonarjs/no-unused-vars -- removing React key avoids implicit key spreading\r\n const {key: _ignoredKey, ...restProps} = props;\r\n const isVertical = from === \"top\" || from === \"bottom\";\r\n const rotateAxis = isVertical ? \"rotateX\" : \"rotateY\";\r\n\r\n const frontOffset = from === \"top\" || from === \"left\" ? \"50%\" : \"-50%\";\r\n const backOffset = from === \"top\" || from === \"left\" ? \"-50%\" : \"50%\";\r\n\r\n const buildVariant = React.useCallback(\r\n (opacity: number, rotation: number, offset: string | null = null): Variant => ({\r\n opacity,\r\n [rotateAxis]: rotation,\r\n ...(isVertical && offset !== null ? {y: offset} : {}),\r\n ...(!isVertical && offset !== null ? {x: offset} : {}),\r\n }),\r\n [isVertical, rotateAxis],\r\n );\r\n\r\n const frontVariants = React.useMemo(\r\n () => ({\r\n initial: buildVariant(1, 0, \"0%\"),\r\n hover: buildVariant(0, 90, frontOffset),\r\n }),\r\n [buildVariant, frontOffset],\r\n );\r\n\r\n const backVariants = React.useMemo(\r\n () => ({\r\n initial: buildVariant(0, 90, backOffset),\r\n hover: buildVariant(1, 0, \"0%\"),\r\n }),\r\n [backOffset, buildVariant],\r\n );\r\n\r\n return (\r\n <motion.button\r\n ref={ref}\r\n initial='initial'\r\n whileHover='hover'\r\n whileTap={{scale: 0.95}}\r\n className={cn(styles.button, className)}\r\n {...restProps}>\r\n <motion.span\r\n variants={frontVariants}\r\n transition={transition}\r\n className={cn(styles.face, styles.front, frontClassName)}>\r\n {frontText}\r\n </motion.span>\r\n <motion.span\r\n variants={backVariants}\r\n transition={transition}\r\n className={cn(styles.face, styles.back, backClassName)}>\r\n {backText}\r\n </motion.span>\r\n <span className={styles.measure}>{frontText}</span>\r\n </motion.button>\r\n );\r\n },\r\n);\r\n\r\nFlipButton.displayName = \"FlipButton\";\r\n\r\nexport {FlipButton};\r\n"],"names":["FlipButton","React","frontText","backText","transition","className","frontClassName","backClassName","from","props","ref","_ignoredKey","restProps","isVertical","rotateAxis","frontOffset","backOffset","buildVariant","opacity","rotation","offset","frontVariants","backVariants","motion","cn","styles"],"mappings":";;;;;;AA2CA,MAAMA,aAAa,WAAHA,GAAGC,wBAAAA,UAAgB,CACjC,CACE,EACEC,SAAS,EACTC,QAAQ,EACRC,aAAa;IAAC,MAAM;IAAU,WAAW;IAAK,SAAS;AAAE,CAAC,EAC1DC,SAAS,EACTC,cAAc,EACdC,aAAa,EACbC,OAAO,KAAK,EACZ,GAAGC,OACJ,EACDC;IAGA,MAAM,EAAC,KAAKC,WAAW,EAAE,GAAGC,WAAU,GAAGH;IACzC,MAAMI,aAAaL,AAAS,UAATA,QAAkBA,AAAS,aAATA;IACrC,MAAMM,aAAaD,aAAa,YAAY;IAE5C,MAAME,cAAcP,AAAS,UAATA,QAAkBA,AAAS,WAATA,OAAkB,QAAQ;IAChE,MAAMQ,aAAaR,AAAS,UAATA,QAAkBA,AAAS,WAATA,OAAkB,SAAS;IAEhE,MAAMS,eAAehB,wBAAAA,WAAiB,CACpC,CAACiB,SAAiBC,UAAkBC,SAAwB,IAAI,GAAe;YAC7EF;YACA,CAACJ,WAAW,EAAEK;YACd,GAAIN,cAAcO,AAAW,SAAXA,SAAkB;gBAAC,GAAGA;YAAM,IAAI,CAAC,CAAC;YACpD,GAAI,CAACP,cAAcO,AAAW,SAAXA,SAAkB;gBAAC,GAAGA;YAAM,IAAI,CAAC,CAAC;QACvD,IACA;QAACP;QAAYC;KAAW;IAG1B,MAAMO,gBAAgBpB,wBAAAA,OAAa,CACjC,IAAO;YACL,SAASgB,aAAa,GAAG,GAAG;YAC5B,OAAOA,aAAa,GAAG,IAAIF;QAC7B,IACA;QAACE;QAAcF;KAAY;IAG7B,MAAMO,eAAerB,wBAAAA,OAAa,CAChC,IAAO;YACL,SAASgB,aAAa,GAAG,IAAID;YAC7B,OAAOC,aAAa,GAAG,GAAG;QAC5B,IACA;QAACD;QAAYC;KAAa;IAG5B,OAAO,WAAP,GACE,KAACM,OAAO,MAAM;QACZ,KAAKb;QACL,SAAQ;QACR,YAAW;QACX,UAAU;YAAC,OAAO;QAAI;QACtB,WAAWc,GAAGC,mBAAAA,MAAa,EAAEpB;QAC5B,GAAGO,SAAS;;0BACb,IAACW,OAAO,IAAI;gBACV,UAAUF;gBACV,YAAYjB;gBACZ,WAAWoB,GAAGC,mBAAAA,IAAW,EAAEA,mBAAAA,KAAY,EAAEnB;0BACxCJ;;0BAEH,IAACqB,OAAO,IAAI;gBACV,UAAUD;gBACV,YAAYlB;gBACZ,WAAWoB,GAAGC,mBAAAA,IAAW,EAAEA,mBAAAA,IAAW,EAAElB;0BACvCJ;;0BAEH,IAAC;gBAAK,WAAWsB,mBAAAA,OAAc;0BAAGvB;;;;AAGxC;AAGFF,WAAW,WAAW,GAAG"}
@@ -1 +1 @@
1
- {"version":3,"sources":["webpack://./home/runner/work/arolariu.ro/arolariu.ro/packages/components/src/components/ui/flip-button.module.css","webpack://./src/components/ui/flip-button.module.css"],"names":[],"mappings":"AADA;ECEE,cAAc;EACd,eAAe;EACf,4BAA4B;EAC5B,mBAAmB;EACnB,gBAAgB;EAChB,SAAS;EACT,cAAc;EACd,mBAAmB;EACnB,gBAAgB;EAChB,oBAAoB;EACpB,qBAAqB;EACrB,kBAAkB;AACpB;;AAEA;EACE,iCAAiC;EACjC,mBAAmB;AACrB;;AAEA;EACE,2BAA2B;EAC3B,kCAAkC;EAClC,4BAA4B;EAC5B,uBAAuB;EACvB,mBAAmB;EACnB,aAAa;EACb,kBAAkB;EAClB,QAAQ;AACV;;AAEA;EACE,2BAA2B;EAC3B,2BAA2B;AAC7B;;AAEA;EACE,6BAA6B;EAC7B,mCAAmC;AACrC;;AAEA;EACE,kBAAkB;AACpB","sourcesContent":[".button{background:transparent;border:0;color:inherit;cursor:pointer;display:inline-block;font-size:var(--ac-text-sm);font-weight:500;height:2.5rem;line-height:1.25rem;padding:.5rem 1rem;perspective:1000px;position:relative}.button:focus-visible{outline:2px solid var(--ac-ring);outline-offset:2px}.face{align-items:center;backface-visibility:hidden;border-radius:var(--ac-radius-lg);display:flex;inset:0;justify-content:center;position:absolute;transform-style:preserve-3d}.front{background:var(--ac-muted);color:var(--ac-foreground)}.back{background:var(--ac-primary);color:var(--ac-primary-foreground)}.measure{visibility:hidden}",".button {\n color: inherit;\n cursor: pointer;\n font-size: var(--ac-text-sm);\n perspective: 1000px;\n background: none;\n border: 0;\n height: 2.5rem;\n padding: .5rem 1rem;\n font-weight: 500;\n line-height: 1.25rem;\n display: inline-block;\n position: relative;\n}\n\n.button:focus-visible {\n outline: 2px solid var(--ac-ring);\n outline-offset: 2px;\n}\n\n.face {\n backface-visibility: hidden;\n border-radius: var(--ac-radius-lg);\n transform-style: preserve-3d;\n justify-content: center;\n align-items: center;\n display: flex;\n position: absolute;\n inset: 0;\n}\n\n.front {\n background: var(--ac-muted);\n color: var(--ac-foreground);\n}\n\n.back {\n background: var(--ac-primary);\n color: var(--ac-primary-foreground);\n}\n\n.measure {\n visibility: 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/flip-button.module.css","webpack://./src/components/ui/flip-button.module.css"],"names":[],"mappings":"AAAA;ECCE,cAAc;EACd,eAAe;EACf,4BAA4B;EAC5B,mBAAmB;EACnB,gBAAgB;EAChB,SAAS;EACT,cAAc;EACd,mBAAmB;EACnB,gBAAgB;EAChB,oBAAoB;EACpB,qBAAqB;EACrB,kBAAkB;AACpB;;ADbgO;ECgB9N,iCAAiC;EACjC,mBAAmB;AACrB;;ADlB0S;ECqBxS,2BAA2B;EAC3B,kCAAkC;EAClC,4BAA4B;EAC5B,uBAAuB;EACvB,mBAAmB;EACnB,aAAa;EACb,kBAAkB;EAClB,QAAQ;AACV;;AD7B0d;ECgCxd,2BAA2B;EAC3B,2BAA2B;AAC7B;;ADlCuhB;ECqCrhB,6BAA6B;EAC7B,mCAAmC;AACrC;;ADvC6lB;EC0C3lB,kBAAkB;AACpB","sourcesContent":[".button{background:transparent;border:0;color:inherit;cursor:pointer;display:inline-block;font-size:var(--ac-text-sm);font-weight:500;height:2.5rem;line-height:1.25rem;padding:.5rem 1rem;perspective:1000px;position:relative}.button:focus-visible{outline:2px solid var(--ac-ring);outline-offset:2px}.face{align-items:center;backface-visibility:hidden;border-radius:var(--ac-radius-lg);display:flex;inset:0;justify-content:center;position:absolute;transform-style:preserve-3d}.front{background:var(--ac-muted);color:var(--ac-foreground)}.back{background:var(--ac-primary);color:var(--ac-primary-foreground)}.measure{visibility:hidden}",".button {\n color: inherit;\n cursor: pointer;\n font-size: var(--ac-text-sm);\n perspective: 1000px;\n background: none;\n border: 0;\n height: 2.5rem;\n padding: .5rem 1rem;\n font-weight: 500;\n line-height: 1.25rem;\n display: inline-block;\n position: relative;\n}\n\n.button:focus-visible {\n outline: 2px solid var(--ac-ring);\n outline-offset: 2px;\n}\n\n.face {\n backface-visibility: hidden;\n border-radius: var(--ac-radius-lg);\n transform-style: preserve-3d;\n justify-content: center;\n align-items: center;\n display: flex;\n position: absolute;\n inset: 0;\n}\n\n.front {\n background: var(--ac-muted);\n color: var(--ac-foreground);\n}\n\n.back {\n background: var(--ac-primary);\n color: var(--ac-primary-foreground);\n}\n\n.measure {\n visibility: hidden;\n}\n"],"sourceRoot":""}
@@ -1,18 +1,18 @@
1
1
  "use client";
2
2
  import { jsx } from "react/jsx-runtime";
3
- import { forwardRef, useEffect, useRef } from "react";
4
3
  import { cn } from "../../lib/utilities.js";
5
4
  import focus_scope_module from "./focus-scope.module.js";
5
+ import * as __rspack_external_react from "react";
6
6
  const FOCUSABLE_SELECTOR = 'a[href], button:not(:disabled), input:not(:disabled), select:not(:disabled), textarea:not(:disabled), [tabindex]:not([tabindex="-1"]), [contenteditable]';
7
7
  function getFocusableElements(container) {
8
8
  return [
9
9
  ...container.querySelectorAll(FOCUSABLE_SELECTOR)
10
10
  ].filter((element)=>!element.hasAttribute("disabled") && element.tabIndex >= 0);
11
11
  }
12
- const FocusScope = /*#__PURE__*/ forwardRef(({ contain = true, restoreFocus = true, autoFocus = false, children, className, ...props }, ref)=>{
13
- const containerRef = useRef(null);
14
- const previousFocusRef = useRef(null);
15
- useEffect(()=>{
12
+ const FocusScope = /*#__PURE__*/ __rspack_external_react.forwardRef(({ contain = true, restoreFocus = true, autoFocus = false, children, className, ...props }, ref)=>{
13
+ const containerRef = __rspack_external_react.useRef(null);
14
+ const previousFocusRef = __rspack_external_react.useRef(null);
15
+ __rspack_external_react.useEffect(()=>{
16
16
  previousFocusRef.current = document.activeElement;
17
17
  if (autoFocus && containerRef.current) {
18
18
  const focusable = getFocusableElements(containerRef.current);
@@ -25,7 +25,7 @@ const FocusScope = /*#__PURE__*/ forwardRef(({ contain = true, restoreFocus = tr
25
25
  autoFocus,
26
26
  restoreFocus
27
27
  ]);
28
- useEffect(()=>{
28
+ __rspack_external_react.useEffect(()=>{
29
29
  const container = containerRef.current;
30
30
  if (!container) return;
31
31
  const handleKeyDown = (event)=>{
@@ -1 +1 @@
1
- {"version":3,"file":"components/ui/focus-scope.js","sources":["../../../src/components/ui/focus-scope.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport * as React from \"react\";\r\n\r\nimport {cn} from \"@/lib/utilities\";\r\n\r\nimport styles from \"./focus-scope.module.css\";\r\n\r\n/**\r\n * Represents the configurable props for the {@link FocusScope} component.\r\n */\r\ninterface FocusScopeProps extends React.HTMLAttributes<HTMLDivElement> {\r\n /**\r\n * Whether focus should be trapped within the scope.\r\n *\r\n * @defaultValue true\r\n */\r\n contain?: boolean;\r\n /**\r\n * Whether to restore focus to the previously focused element on unmount.\r\n *\r\n * @defaultValue true\r\n */\r\n restoreFocus?: boolean;\r\n /**\r\n * Whether to auto-focus the first focusable element on mount.\r\n *\r\n * @defaultValue false\r\n */\r\n autoFocus?: boolean;\r\n /**\r\n * Content rendered within the focus scope.\r\n */\r\n children: React.ReactNode;\r\n}\r\n\r\nconst FOCUSABLE_SELECTOR = [\r\n \"a[href]\",\r\n \"button:not(:disabled)\",\r\n \"input:not(:disabled)\",\r\n \"select:not(:disabled)\",\r\n \"textarea:not(:disabled)\",\r\n '[tabindex]:not([tabindex=\"-1\"])',\r\n \"[contenteditable]\",\r\n].join(\", \");\r\n\r\nfunction getFocusableElements(container: HTMLElement): HTMLElement[] {\r\n return [...container.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTOR)].filter(\r\n (element) => !element.hasAttribute(\"disabled\") && element.tabIndex >= 0,\r\n );\r\n}\r\n\r\n/**\r\n * Traps keyboard focus within a container element.\r\n *\r\n * @remarks\r\n * Renders a `<div>` and cycles `Tab` and `Shift+Tab` navigation through its focusable\r\n * descendants without allowing focus to escape the scope. Use it for custom dialogs,\r\n * drawers, and composite widgets that need explicit focus containment and restoration.\r\n *\r\n * Base UI dialog-style primitives already manage focus internally, so prefer those\r\n * built-in mechanisms when available.\r\n *\r\n * @example\r\n * ```tsx\r\n * <FocusScope contain autoFocus>\r\n * <input placeholder='First' />\r\n * <input placeholder='Second' />\r\n * <button type='submit'>Submit</button>\r\n * </FocusScope>\r\n * ```\r\n */\r\nconst FocusScope = React.forwardRef<HTMLDivElement, FocusScopeProps>(\r\n ({contain = true, restoreFocus = true, autoFocus = false, children, className, ...props}, ref) => {\r\n const containerRef = React.useRef<HTMLDivElement | null>(null);\r\n const previousFocusRef = React.useRef<Element | null>(null);\r\n\r\n React.useEffect(() => {\r\n previousFocusRef.current = document.activeElement;\r\n\r\n if (autoFocus && containerRef.current) {\r\n const focusable = getFocusableElements(containerRef.current);\r\n\r\n focusable[0]?.focus();\r\n }\r\n\r\n return () => {\r\n if (restoreFocus && previousFocusRef.current instanceof HTMLElement) {\r\n previousFocusRef.current.focus();\r\n }\r\n };\r\n }, [autoFocus, restoreFocus]);\r\n\r\n React.useEffect(() => {\r\n const container = containerRef.current;\r\n\r\n if (!container) {\r\n return;\r\n }\r\n\r\n const handleKeyDown = (event: KeyboardEvent): void => {\r\n if (!contain || event.key !== \"Tab\") {\r\n return;\r\n }\r\n\r\n const focusable = getFocusableElements(container);\r\n\r\n if (focusable.length === 0) {\r\n return;\r\n }\r\n\r\n const [first] = focusable;\r\n const last = focusable.at(-1);\r\n\r\n if (event.shiftKey && first?.isSameNode(document.activeElement)) {\r\n event.preventDefault();\r\n last?.focus();\r\n return;\r\n }\r\n\r\n if (!event.shiftKey && last?.isSameNode(document.activeElement)) {\r\n event.preventDefault();\r\n first?.focus();\r\n }\r\n };\r\n\r\n container.addEventListener(\"keydown\", handleKeyDown);\r\n\r\n return () => {\r\n container.removeEventListener(\"keydown\", handleKeyDown);\r\n };\r\n }, [contain]);\r\n\r\n return (\r\n <div\r\n ref={(node) => {\r\n containerRef.current = node;\r\n\r\n if (typeof ref === \"function\") {\r\n ref(node);\r\n return;\r\n }\r\n\r\n if (ref) {\r\n ref.current = node;\r\n }\r\n }}\r\n className={cn(styles.scope, className)}\r\n role={props.role ?? \"group\"}\r\n tabIndex={props.tabIndex ?? -1}\r\n {...props}>\r\n {children}\r\n </div>\r\n );\r\n },\r\n);\r\nFocusScope.displayName = \"FocusScope\";\r\n\r\nexport {FocusScope};\r\nexport type {FocusScopeProps};\r\n"],"names":["FOCUSABLE_SELECTOR","getFocusableElements","container","element","FocusScope","React","contain","restoreFocus","autoFocus","children","className","props","ref","containerRef","previousFocusRef","document","focusable","HTMLElement","handleKeyDown","event","first","last","node","cn","styles"],"mappings":";;;;;AAoCA,MAAMA,qBAAqB;AAU3B,SAASC,qBAAqBC,SAAsB;IAClD,OAAO;WAAIA,UAAU,gBAAgB,CAAcF;KAAoB,CAAC,MAAM,CAC5E,CAACG,UAAY,CAACA,QAAQ,YAAY,CAAC,eAAeA,QAAQ,QAAQ,IAAI;AAE1E;AAsBA,MAAMC,aAAa,WAAHA,GAAGC,WACjB,CAAC,EAACC,UAAU,IAAI,EAAEC,eAAe,IAAI,EAAEC,YAAY,KAAK,EAAEC,QAAQ,EAAEC,SAAS,EAAE,GAAGC,OAAM,EAAEC;IACxF,MAAMC,eAAeR,OAAoC;IACzD,MAAMS,mBAAmBT,OAA6B;IAEtDA,UAAgB;QACdS,iBAAiB,OAAO,GAAGC,SAAS,aAAa;QAEjD,IAAIP,aAAaK,aAAa,OAAO,EAAE;YACrC,MAAMG,YAAYf,qBAAqBY,aAAa,OAAO;YAE3DG,SAAS,CAAC,EAAE,EAAE;QAChB;QAEA,OAAO;YACL,IAAIT,gBAAgBO,iBAAiB,OAAO,YAAYG,aACtDH,iBAAiB,OAAO,CAAC,KAAK;QAElC;IACF,GAAG;QAACN;QAAWD;KAAa;IAE5BF,UAAgB;QACd,MAAMH,YAAYW,aAAa,OAAO;QAEtC,IAAI,CAACX,WACH;QAGF,MAAMgB,gBAAgB,CAACC;YACrB,IAAI,CAACb,WAAWa,AAAc,UAAdA,MAAM,GAAG,EACvB;YAGF,MAAMH,YAAYf,qBAAqBC;YAEvC,IAAIc,AAAqB,MAArBA,UAAU,MAAM,EAClB;YAGF,MAAM,CAACI,MAAM,GAAGJ;YAChB,MAAMK,OAAOL,UAAU,EAAE,CAAC;YAE1B,IAAIG,MAAM,QAAQ,IAAIC,OAAO,WAAWL,SAAS,aAAa,GAAG;gBAC/DI,MAAM,cAAc;gBACpBE,MAAM;gBACN;YACF;YAEA,IAAI,CAACF,MAAM,QAAQ,IAAIE,MAAM,WAAWN,SAAS,aAAa,GAAG;gBAC/DI,MAAM,cAAc;gBACpBC,OAAO;YACT;QACF;QAEAlB,UAAU,gBAAgB,CAAC,WAAWgB;QAEtC,OAAO;YACLhB,UAAU,mBAAmB,CAAC,WAAWgB;QAC3C;IACF,GAAG;QAACZ;KAAQ;IAEZ,OAAO,WAAP,GACE,IAAC;QACC,KAAK,CAACgB;YACJT,aAAa,OAAO,GAAGS;YAEvB,IAAI,AAAe,cAAf,OAAOV,KAAoB,YAC7BA,IAAIU;YAIN,IAAIV,KACFA,IAAI,OAAO,GAAGU;QAElB;QACA,WAAWC,GAAGC,mBAAAA,KAAY,EAAEd;QAC5B,MAAMC,MAAM,IAAI,IAAI;QACpB,UAAUA,MAAM,QAAQ,IAAI;QAC3B,GAAGA,KAAK;kBACRF;;AAGP;AAEFL,WAAW,WAAW,GAAG"}
1
+ {"version":3,"file":"components/ui/focus-scope.js","sources":["../../../src/components/ui/focus-scope.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport * as React from \"react\";\r\n\r\nimport {cn} from \"@/lib/utilities\";\r\n\r\nimport styles from \"./focus-scope.module.css\";\r\n\r\n/**\r\n * Represents the configurable props for the {@link FocusScope} component.\r\n */\r\ninterface FocusScopeProps extends React.HTMLAttributes<HTMLDivElement> {\r\n /**\r\n * Whether focus should be trapped within the scope.\r\n *\r\n * @defaultValue true\r\n */\r\n contain?: boolean;\r\n /**\r\n * Whether to restore focus to the previously focused element on unmount.\r\n *\r\n * @defaultValue true\r\n */\r\n restoreFocus?: boolean;\r\n /**\r\n * Whether to auto-focus the first focusable element on mount.\r\n *\r\n * @defaultValue false\r\n */\r\n autoFocus?: boolean;\r\n /**\r\n * Content rendered within the focus scope.\r\n */\r\n children: React.ReactNode;\r\n}\r\n\r\nconst FOCUSABLE_SELECTOR = [\r\n \"a[href]\",\r\n \"button:not(:disabled)\",\r\n \"input:not(:disabled)\",\r\n \"select:not(:disabled)\",\r\n \"textarea:not(:disabled)\",\r\n '[tabindex]:not([tabindex=\"-1\"])',\r\n \"[contenteditable]\",\r\n].join(\", \");\r\n\r\nfunction getFocusableElements(container: HTMLElement): HTMLElement[] {\r\n return [...container.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTOR)].filter(\r\n (element) => !element.hasAttribute(\"disabled\") && element.tabIndex >= 0,\r\n );\r\n}\r\n\r\n/**\r\n * Traps keyboard focus within a container element.\r\n *\r\n * @remarks\r\n * Renders a `<div>` and cycles `Tab` and `Shift+Tab` navigation through its focusable\r\n * descendants without allowing focus to escape the scope. Use it for custom dialogs,\r\n * drawers, and composite widgets that need explicit focus containment and restoration.\r\n *\r\n * Base UI dialog-style primitives already manage focus internally, so prefer those\r\n * built-in mechanisms when available.\r\n *\r\n * @example\r\n * ```tsx\r\n * <FocusScope contain autoFocus>\r\n * <input placeholder='First' />\r\n * <input placeholder='Second' />\r\n * <button type='submit'>Submit</button>\r\n * </FocusScope>\r\n * ```\r\n */\r\nconst FocusScope = React.forwardRef<HTMLDivElement, FocusScopeProps>(\r\n ({contain = true, restoreFocus = true, autoFocus = false, children, className, ...props}, ref) => {\r\n const containerRef = React.useRef<HTMLDivElement | null>(null);\r\n const previousFocusRef = React.useRef<Element | null>(null);\r\n\r\n React.useEffect(() => {\r\n previousFocusRef.current = document.activeElement;\r\n\r\n if (autoFocus && containerRef.current) {\r\n const focusable = getFocusableElements(containerRef.current);\r\n\r\n focusable[0]?.focus();\r\n }\r\n\r\n return () => {\r\n if (restoreFocus && previousFocusRef.current instanceof HTMLElement) {\r\n previousFocusRef.current.focus();\r\n }\r\n };\r\n }, [autoFocus, restoreFocus]);\r\n\r\n React.useEffect(() => {\r\n const container = containerRef.current;\r\n\r\n if (!container) {\r\n return;\r\n }\r\n\r\n const handleKeyDown = (event: KeyboardEvent): void => {\r\n if (!contain || event.key !== \"Tab\") {\r\n return;\r\n }\r\n\r\n const focusable = getFocusableElements(container);\r\n\r\n if (focusable.length === 0) {\r\n return;\r\n }\r\n\r\n const [first] = focusable;\r\n const last = focusable.at(-1);\r\n\r\n if (event.shiftKey && first?.isSameNode(document.activeElement)) {\r\n event.preventDefault();\r\n last?.focus();\r\n return;\r\n }\r\n\r\n if (!event.shiftKey && last?.isSameNode(document.activeElement)) {\r\n event.preventDefault();\r\n first?.focus();\r\n }\r\n };\r\n\r\n container.addEventListener(\"keydown\", handleKeyDown);\r\n\r\n return () => {\r\n container.removeEventListener(\"keydown\", handleKeyDown);\r\n };\r\n }, [contain]);\r\n\r\n return (\r\n <div\r\n ref={(node) => {\r\n containerRef.current = node;\r\n\r\n if (typeof ref === \"function\") {\r\n ref(node);\r\n return;\r\n }\r\n\r\n if (ref) {\r\n ref.current = node;\r\n }\r\n }}\r\n className={cn(styles.scope, className)}\r\n role={props.role ?? \"group\"}\r\n tabIndex={props.tabIndex ?? -1}\r\n {...props}>\r\n {children}\r\n </div>\r\n );\r\n },\r\n);\r\nFocusScope.displayName = \"FocusScope\";\r\n\r\nexport {FocusScope};\r\nexport type {FocusScopeProps};\r\n"],"names":["FOCUSABLE_SELECTOR","getFocusableElements","container","element","FocusScope","React","contain","restoreFocus","autoFocus","children","className","props","ref","containerRef","previousFocusRef","document","focusable","HTMLElement","handleKeyDown","event","first","last","node","cn","styles"],"mappings":";;;;;AAoCA,MAAMA,qBAAqB;AAU3B,SAASC,qBAAqBC,SAAsB;IAClD,OAAO;WAAIA,UAAU,gBAAgB,CAAcF;KAAoB,CAAC,MAAM,CAC5E,CAACG,UAAY,CAACA,QAAQ,YAAY,CAAC,eAAeA,QAAQ,QAAQ,IAAI;AAE1E;AAsBA,MAAMC,aAAa,WAAHA,GAAGC,wBAAAA,UAAgB,CACjC,CAAC,EAACC,UAAU,IAAI,EAAEC,eAAe,IAAI,EAAEC,YAAY,KAAK,EAAEC,QAAQ,EAAEC,SAAS,EAAE,GAAGC,OAAM,EAAEC;IACxF,MAAMC,eAAeR,wBAAAA,MAAY,CAAwB;IACzD,MAAMS,mBAAmBT,wBAAAA,MAAY,CAAiB;IAEtDA,wBAAAA,SAAe,CAAC;QACdS,iBAAiB,OAAO,GAAGC,SAAS,aAAa;QAEjD,IAAIP,aAAaK,aAAa,OAAO,EAAE;YACrC,MAAMG,YAAYf,qBAAqBY,aAAa,OAAO;YAE3DG,SAAS,CAAC,EAAE,EAAE;QAChB;QAEA,OAAO;YACL,IAAIT,gBAAgBO,iBAAiB,OAAO,YAAYG,aACtDH,iBAAiB,OAAO,CAAC,KAAK;QAElC;IACF,GAAG;QAACN;QAAWD;KAAa;IAE5BF,wBAAAA,SAAe,CAAC;QACd,MAAMH,YAAYW,aAAa,OAAO;QAEtC,IAAI,CAACX,WACH;QAGF,MAAMgB,gBAAgB,CAACC;YACrB,IAAI,CAACb,WAAWa,AAAc,UAAdA,MAAM,GAAG,EACvB;YAGF,MAAMH,YAAYf,qBAAqBC;YAEvC,IAAIc,AAAqB,MAArBA,UAAU,MAAM,EAClB;YAGF,MAAM,CAACI,MAAM,GAAGJ;YAChB,MAAMK,OAAOL,UAAU,EAAE,CAAC;YAE1B,IAAIG,MAAM,QAAQ,IAAIC,OAAO,WAAWL,SAAS,aAAa,GAAG;gBAC/DI,MAAM,cAAc;gBACpBE,MAAM;gBACN;YACF;YAEA,IAAI,CAACF,MAAM,QAAQ,IAAIE,MAAM,WAAWN,SAAS,aAAa,GAAG;gBAC/DI,MAAM,cAAc;gBACpBC,OAAO;YACT;QACF;QAEAlB,UAAU,gBAAgB,CAAC,WAAWgB;QAEtC,OAAO;YACLhB,UAAU,mBAAmB,CAAC,WAAWgB;QAC3C;IACF,GAAG;QAACZ;KAAQ;IAEZ,OAAO,WAAP,GACE,IAAC;QACC,KAAK,CAACgB;YACJT,aAAa,OAAO,GAAGS;YAEvB,IAAI,AAAe,cAAf,OAAOV,KAAoB,YAC7BA,IAAIU;YAIN,IAAIV,KACFA,IAAI,OAAO,GAAGU;QAElB;QACA,WAAWC,GAAGC,mBAAAA,KAAY,EAAEd;QAC5B,MAAMC,MAAM,IAAI,IAAI;QACpB,UAAUA,MAAM,QAAQ,IAAI;QAC3B,GAAGA,KAAK;kBACRF;;AAGP;AAEFL,WAAW,WAAW,GAAG"}
@@ -1 +1 @@
1
- {"version":3,"sources":["webpack://./home/runner/work/arolariu.ro/arolariu.ro/packages/components/src/components/ui/focus-scope.module.css","webpack://./src/components/ui/focus-scope.module.css"],"names":[],"mappings":"AADA;ECEE,aAAa;AACf","sourcesContent":[".scope{outline:none}",".scope {\n outline: none;\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/focus-scope.module.css","webpack://./src/components/ui/focus-scope.module.css"],"names":[],"mappings":"AAAA;ECCE,aAAa;AACf","sourcesContent":[".scope{outline:none}",".scope {\n outline: none;\n}\n"],"sourceRoot":""}
@@ -1,9 +1,9 @@
1
1
  import { jsx, jsxs } from "react/jsx-runtime";
2
- import { forwardRef } from "react";
3
2
  import { cn } from "../../lib/utilities.js";
4
3
  import form_skeleton_module from "./form-skeleton.module.js";
5
4
  import { Skeleton } from "./skeleton.js";
6
- const FormSkeleton = /*#__PURE__*/ forwardRef(({ fields = 4, className, ...props }, ref)=>/*#__PURE__*/ jsxs("div", {
5
+ import * as __rspack_external_react from "react";
6
+ const FormSkeleton = /*#__PURE__*/ __rspack_external_react.forwardRef(({ fields = 4, className, ...props }, ref)=>/*#__PURE__*/ jsxs("div", {
7
7
  ref: ref,
8
8
  className: cn(form_skeleton_module.form, className),
9
9
  ...props,
@@ -1 +1 @@
1
- {"version":3,"file":"components/ui/form-skeleton.js","sources":["../../../src/components/ui/form-skeleton.tsx"],"sourcesContent":["import * as React from \"react\";\r\n\r\nimport {cn} from \"@/lib/utilities\";\r\n\r\nimport styles from \"./form-skeleton.module.css\";\r\nimport {Skeleton} from \"./skeleton\";\r\n\r\n/**\r\n * Represents the configurable props for the {@link FormSkeleton} component.\r\n *\r\n * @remarks\r\n * Extends native `<div>` attributes so form-shaped placeholders can be composed into\r\n * dialogs, cards, and pages while still supporting accessibility annotations.\r\n */\r\ninterface FormSkeletonProps extends React.HTMLAttributes<HTMLDivElement> {\r\n /**\r\n * Number of labeled field placeholders rendered before the submit action.\r\n *\r\n * @default 4\r\n */\r\n fields?: number;\r\n}\r\n\r\n/**\r\n * Renders a skeleton placeholder shaped like a labeled form.\r\n *\r\n * @remarks\r\n * **Rendering Context**: Server- and client-compatible presentational component.\r\n *\r\n * Uses stacked label and input placeholders plus a trailing submit action placeholder to\r\n * preserve form layout during async initialization or schema-driven rendering.\r\n *\r\n * @example\r\n * ```tsx\r\n * <FormSkeleton fields={5} aria-label=\"Loading profile form\" />\r\n * ```\r\n *\r\n * @see {@link FormSkeletonProps} for available props\r\n */\r\nconst FormSkeleton = React.forwardRef<HTMLDivElement, FormSkeletonProps>(\r\n ({fields = 4, className, ...props}: Readonly<FormSkeletonProps>, ref): React.JSX.Element => (\r\n <div\r\n ref={ref}\r\n className={cn(styles.form, className)}\r\n {...props}>\r\n {Array.from({length: fields}, (_, index) => (\r\n <div\r\n key={index}\r\n className={styles.field}>\r\n <Skeleton className={styles.label} />\r\n <Skeleton className={styles.input} />\r\n </div>\r\n ))}\r\n <Skeleton className={styles.submit} />\r\n </div>\r\n ),\r\n);\r\n\r\nFormSkeleton.displayName = \"FormSkeleton\";\r\n\r\nexport {FormSkeleton};\r\nexport type {FormSkeletonProps};\r\n"],"names":["FormSkeleton","React","fields","className","props","ref","cn","styles","Array","_","index","Skeleton"],"mappings":";;;;;AAuCA,MAAMA,eAAe,WAAHA,GAAGC,WACnB,CAAC,EAACC,SAAS,CAAC,EAAEC,SAAS,EAAE,GAAGC,OAAmC,EAAEC,MAAAA,WAAAA,GAC/D,KAAC;QACC,KAAKA;QACL,WAAWC,GAAGC,qBAAAA,IAAW,EAAEJ;QAC1B,GAAGC,KAAK;;YACRI,MAAM,IAAI,CAAC;gBAAC,QAAQN;YAAM,GAAG,CAACO,GAAGC,QAAAA,WAAAA,GAChC,KAAC;oBAEC,WAAWH,qBAAAA,KAAY;;sCACvB,IAACI,UAAQA;4BAAC,WAAWJ,qBAAAA,KAAY;;sCACjC,IAACI,UAAQA;4BAAC,WAAWJ,qBAAAA,KAAY;;;mBAH5BG;0BAMT,IAACC,UAAQA;gBAAC,WAAWJ,qBAAAA,MAAa;;;;AAKxCP,aAAa,WAAW,GAAG"}
1
+ {"version":3,"file":"components/ui/form-skeleton.js","sources":["../../../src/components/ui/form-skeleton.tsx"],"sourcesContent":["import * as React from \"react\";\r\n\r\nimport {cn} from \"@/lib/utilities\";\r\n\r\nimport styles from \"./form-skeleton.module.css\";\r\nimport {Skeleton} from \"./skeleton\";\r\n\r\n/**\r\n * Represents the configurable props for the {@link FormSkeleton} component.\r\n *\r\n * @remarks\r\n * Extends native `<div>` attributes so form-shaped placeholders can be composed into\r\n * dialogs, cards, and pages while still supporting accessibility annotations.\r\n */\r\ninterface FormSkeletonProps extends React.HTMLAttributes<HTMLDivElement> {\r\n /**\r\n * Number of labeled field placeholders rendered before the submit action.\r\n *\r\n * @default 4\r\n */\r\n fields?: number;\r\n}\r\n\r\n/**\r\n * Renders a skeleton placeholder shaped like a labeled form.\r\n *\r\n * @remarks\r\n * **Rendering Context**: Server- and client-compatible presentational component.\r\n *\r\n * Uses stacked label and input placeholders plus a trailing submit action placeholder to\r\n * preserve form layout during async initialization or schema-driven rendering.\r\n *\r\n * @example\r\n * ```tsx\r\n * <FormSkeleton fields={5} aria-label=\"Loading profile form\" />\r\n * ```\r\n *\r\n * @see {@link FormSkeletonProps} for available props\r\n */\r\nconst FormSkeleton = React.forwardRef<HTMLDivElement, FormSkeletonProps>(\r\n ({fields = 4, className, ...props}: Readonly<FormSkeletonProps>, ref): React.JSX.Element => (\r\n <div\r\n ref={ref}\r\n className={cn(styles.form, className)}\r\n {...props}>\r\n {Array.from({length: fields}, (_, index) => (\r\n <div\r\n key={index}\r\n className={styles.field}>\r\n <Skeleton className={styles.label} />\r\n <Skeleton className={styles.input} />\r\n </div>\r\n ))}\r\n <Skeleton className={styles.submit} />\r\n </div>\r\n ),\r\n);\r\n\r\nFormSkeleton.displayName = \"FormSkeleton\";\r\n\r\nexport {FormSkeleton};\r\nexport type {FormSkeletonProps};\r\n"],"names":["FormSkeleton","React","fields","className","props","ref","cn","styles","Array","_","index","Skeleton"],"mappings":";;;;;AAuCA,MAAMA,eAAe,WAAHA,GAAGC,wBAAAA,UAAgB,CACnC,CAAC,EAACC,SAAS,CAAC,EAAEC,SAAS,EAAE,GAAGC,OAAmC,EAAEC,MAAAA,WAAAA,GAC/D,KAAC;QACC,KAAKA;QACL,WAAWC,GAAGC,qBAAAA,IAAW,EAAEJ;QAC1B,GAAGC,KAAK;;YACRI,MAAM,IAAI,CAAC;gBAAC,QAAQN;YAAM,GAAG,CAACO,GAAGC,QAAAA,WAAAA,GAChC,KAAC;oBAEC,WAAWH,qBAAAA,KAAY;;sCACvB,IAACI,UAAQA;4BAAC,WAAWJ,qBAAAA,KAAY;;sCACjC,IAACI,UAAQA;4BAAC,WAAWJ,qBAAAA,KAAY;;;mBAH5BG;0BAMT,IAACC,UAAQA;gBAAC,WAAWJ,qBAAAA,MAAa;;;;AAKxCP,aAAa,WAAW,GAAG"}
@@ -1 +1 @@
1
- {"version":3,"sources":["webpack://./home/runner/work/arolariu.ro/arolariu.ro/packages/components/src/components/ui/form-skeleton.module.css","webpack://./src/components/ui/form-skeleton.module.css"],"names":[],"mappings":"AADA;ECEE,sBAAsB;AACxB;;AAEA;EACE,sBAAsB;EACtB,aAAa;AACf;;AAEA;EACE,sBAAsB;AACxB;;AAEA;EACE,UAAU;EACV,eAAe;AACjB;;AAEA;EACE,kCAAkC;EAClC,cAAc;AAChB;;AAEA;EACE,oBAAoB;EACpB,WAAW;AACb","sourcesContent":[".form{gap:var(--ac-space-4)}.field,.form{display:flex;flex-direction:column}.field{gap:var(--ac-space-1)}.label{height:.875rem;width:30%}.input,.submit{border-radius:var(--ac-radius-md);height:2.5rem}.submit{align-self:flex-end;width:8rem}",".form {\n gap: var(--ac-space-4);\n}\n\n.field, .form {\n flex-direction: column;\n display: flex;\n}\n\n.field {\n gap: var(--ac-space-1);\n}\n\n.label {\n width: 30%;\n height: .875rem;\n}\n\n.input, .submit {\n border-radius: var(--ac-radius-md);\n height: 2.5rem;\n}\n\n.submit {\n align-self: flex-end;\n width: 8rem;\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/form-skeleton.module.css","webpack://./src/components/ui/form-skeleton.module.css"],"names":[],"mappings":"AAAA;ECCE,sBAAsB;AACxB;;ADF4B;ECK1B,sBAAsB;EACtB,aAAa;AACf;;ADP4E;ECU1E,sBAAsB;AACxB;;ADXyG;ECcvG,UAAU;EACV,eAAe;AACjB;;ADhByI;ECmBvI,kCAAkC;EAClC,cAAc;AAChB;;ADrBwM;ECwBtM,oBAAoB;EACpB,WAAW;AACb","sourcesContent":[".form{gap:var(--ac-space-4)}.field,.form{display:flex;flex-direction:column}.field{gap:var(--ac-space-1)}.label{height:.875rem;width:30%}.input,.submit{border-radius:var(--ac-radius-md);height:2.5rem}.submit{align-self:flex-end;width:8rem}",".form {\n gap: var(--ac-space-4);\n}\n\n.field, .form {\n flex-direction: column;\n display: flex;\n}\n\n.field {\n gap: var(--ac-space-1);\n}\n\n.label {\n width: 30%;\n height: .875rem;\n}\n\n.input, .submit {\n border-radius: var(--ac-radius-md);\n height: 2.5rem;\n}\n\n.submit {\n align-self: flex-end;\n width: 8rem;\n}\n"],"sourceRoot":""}
@@ -1,5 +1,5 @@
1
1
  import * as React from "react";
2
- import { useFormContext, type ControllerProps, type FieldPath, type FieldValues } from "react-hook-form";
2
+ import { Controller, useController, useFieldArray, useForm, useFormContext, useFormState, useWatch, type Control, type ControllerFieldState, type ControllerProps, type ControllerRenderProps, type DefaultValues, type FieldError, type FieldErrors, type FieldPath, type FieldValues, type Path, type RegisterOptions, type Resolver, type SubmitHandler, type UseControllerReturn, type UseFieldArrayReturn, type UseFormReturn } from "react-hook-form";
3
3
  /**
4
4
  * Provides the `react-hook-form` context to nested form primitives.
5
5
  *
@@ -147,8 +147,8 @@ declare const FormDescription: React.ForwardRefExoticComponent<React.HTMLAttribu
147
147
  * @see {@link https://developer.mozilla.org/docs/Web/Accessibility/ARIA/Reference/Attributes/aria-invalid | ARIA invalid state}
148
148
  */
149
149
  declare const FormMessage: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLParagraphElement> & React.RefAttributes<HTMLParagraphElement>>;
150
- export { Controller, useController, useFieldArray, useForm, useFormContext, useFormState, useWatch } from "react-hook-form";
151
- export type { Control, ControllerFieldState, ControllerProps, ControllerRenderProps, DefaultValues, FieldError, FieldErrors, FieldPath, FieldValues, Path, RegisterOptions, Resolver, SubmitHandler, UseControllerReturn, UseFieldArrayReturn, UseFormReturn, } from "react-hook-form";
150
+ export { Controller, useController, useFieldArray, useForm, useFormContext, useFormState, useWatch };
151
+ export type { Control, ControllerFieldState, ControllerProps, ControllerRenderProps, DefaultValues, FieldError, FieldErrors, FieldPath, FieldValues, Path, RegisterOptions, Resolver, SubmitHandler, UseControllerReturn, UseFieldArrayReturn, UseFormReturn, };
152
152
  export { Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, useFormField };
153
153
  export type { FormControlProps };
154
154
  //# sourceMappingURL=form.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"form.d.ts","sourceRoot":"","sources":["../../../src/components/ui/form.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAA2B,cAAc,EAAE,KAAK,eAAe,EAAE,KAAK,SAAS,EAAE,KAAK,WAAW,EAAC,MAAM,iBAAiB,CAAC;AAMjI;;;;;;;;;;;;;;;GAeG;AACH,QAAA,MAAM,IAAI;;CAAqD,CAAC;AAMhE,UAAU,gBAAiB,SAAQ,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,UAAU,CAAC;IACpF;;;OAGG;IACH,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAsCD;;;;;;;;;;;;;;;;;GAiBG;AACH,QAAA,MAAM,SAAS;KAAI,YAAY,SAAS,WAAW,gBAAgB,KAAK,SAAS,SAAS,CAAC,YAAY,CAAC,0CAErG,eAAe,CAAC,YAAY,EAAE,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO;;CAM1D,CAAC;AAEF,KAAK,kBAAkB,GAAG;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,SAAS,CAAC,WAAW,CAAC,CAAC;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,OAAO,CAAC;IACtB,KAAK,CAAC,EAAE,UAAU,CAAC,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;CACjF,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,QAAA,MAAM,YAAY,QAAO,kBA4BxB,CAAC;AAQF;;;;;;;;;;;;;;;GAeG;AACH,QAAA,MAAM,QAAQ,6GAYZ,CAAC;AAGH;;;;;;;;;;;;;GAaG;AACH,QAAA,MAAM,SAAS,sHAWb,CAAC;AAGH;;;;;;;;GAQG;AACH,QAAA,MAAM,WAAW,sFAkChB,CAAC;AAGF;;;;;;;;;;;;;GAaG;AACH,QAAA,MAAM,eAAe,yHAWnB,CAAC;AAGH;;;;;;;;;;;;;GAaG;AACH,QAAA,MAAM,WAAW,yHAmBhB,CAAC;AAIF,OAAO,EAAC,UAAU,EAAE,aAAa,EAAE,aAAa,EAAE,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,QAAQ,EAAC,MAAM,iBAAiB,CAAC;AAC1H,YAAY,EACV,OAAO,EACP,oBAAoB,EACpB,eAAe,EACf,qBAAqB,EACrB,aAAa,EACb,UAAU,EACV,WAAW,EACX,SAAS,EACT,WAAW,EACX,IAAI,EACJ,eAAe,EACf,QAAQ,EACR,aAAa,EACb,mBAAmB,EACnB,mBAAmB,EACnB,aAAa,GACd,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAC,IAAI,EAAE,WAAW,EAAE,eAAe,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAC,CAAC;AACvG,YAAY,EAAC,gBAAgB,EAAC,CAAC"}
1
+ {"version":3,"file":"form.d.ts","sourceRoot":"","sources":["../../../src/components/ui/form.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EACL,UAAU,EAEV,aAAa,EACb,aAAa,EACb,OAAO,EACP,cAAc,EACd,YAAY,EACZ,QAAQ,EACR,KAAK,OAAO,EACZ,KAAK,oBAAoB,EACzB,KAAK,eAAe,EACpB,KAAK,qBAAqB,EAC1B,KAAK,aAAa,EAClB,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,SAAS,EACd,KAAK,WAAW,EAChB,KAAK,IAAI,EACT,KAAK,eAAe,EACpB,KAAK,QAAQ,EACb,KAAK,aAAa,EAClB,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACxB,KAAK,aAAa,EACnB,MAAM,iBAAiB,CAAC;AAMzB;;;;;;;;;;;;;;;GAeG;AACH,QAAA,MAAM,IAAI;;CAAqD,CAAC;AAMhE,UAAU,gBAAiB,SAAQ,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,UAAU,CAAC;IACpF;;;OAGG;IACH,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAsCD;;;;;;;;;;;;;;;;;GAiBG;AACH,QAAA,MAAM,SAAS;KAAI,YAAY,SAAS,WAAW,gBAAgB,KAAK,SAAS,SAAS,CAAC,YAAY,CAAC,0CAErG,eAAe,CAAC,YAAY,EAAE,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO;;CAM1D,CAAC;AAEF,KAAK,kBAAkB,GAAG;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,SAAS,CAAC,WAAW,CAAC,CAAC;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,OAAO,CAAC;IACtB,KAAK,CAAC,EAAE,UAAU,CAAC,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;CACjF,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,QAAA,MAAM,YAAY,QAAO,kBA4BxB,CAAC;AAQF;;;;;;;;;;;;;;;GAeG;AACH,QAAA,MAAM,QAAQ,6GAYZ,CAAC;AAGH;;;;;;;;;;;;;GAaG;AACH,QAAA,MAAM,SAAS,sHAWb,CAAC;AAGH;;;;;;;;GAQG;AACH,QAAA,MAAM,WAAW,sFAkChB,CAAC;AAGF;;;;;;;;;;;;;GAaG;AACH,QAAA,MAAM,eAAe,yHAWnB,CAAC;AAGH;;;;;;;;;;;;;GAaG;AACH,QAAA,MAAM,WAAW,yHAmBhB,CAAC;AAIF,OAAO,EAAC,UAAU,EAAE,aAAa,EAAE,aAAa,EAAE,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,QAAQ,EAAC,CAAC;AACnG,YAAY,EACV,OAAO,EACP,oBAAoB,EACpB,eAAe,EACf,qBAAqB,EACrB,aAAa,EACb,UAAU,EACV,WAAW,EACX,SAAS,EACT,WAAW,EACX,IAAI,EACJ,eAAe,EACf,QAAQ,EACR,aAAa,EACb,mBAAmB,EACnB,mBAAmB,EACnB,aAAa,GACd,CAAC;AACF,OAAO,EAAC,IAAI,EAAE,WAAW,EAAE,eAAe,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAC,CAAC;AACvG,YAAY,EAAC,gBAAgB,EAAC,CAAC"}
@@ -1,9 +1,9 @@
1
1
  "use client";
2
2
  import { jsx } from "react/jsx-runtime";
3
- import { cloneElement, createContext, forwardRef, isValidElement, useContext, useId } from "react";
4
3
  import { Controller, FormProvider, useController, useFieldArray, useForm, useFormContext, useFormState, useWatch } from "react-hook-form";
5
4
  import { cn } from "../../lib/utilities.js";
6
5
  import form_module from "./form.module.js";
6
+ import * as __rspack_external_react from "react";
7
7
  const Form = Object.assign(FormProvider, {
8
8
  displayName: "Form"
9
9
  });
@@ -22,7 +22,7 @@ function mergeAriaDescribedBy(...describedByValues) {
22
22
  ...new Set(tokens)
23
23
  ].join(" ") : void 0;
24
24
  }
25
- const FormFieldContext = /*#__PURE__*/ createContext(null);
25
+ const FormFieldContext = /*#__PURE__*/ __rspack_external_react.createContext(null);
26
26
  const FormField = ({ ...props })=>/*#__PURE__*/ jsx(FormFieldContext.Provider, {
27
27
  value: {
28
28
  name: props.name
@@ -32,8 +32,8 @@ const FormField = ({ ...props })=>/*#__PURE__*/ jsx(FormFieldContext.Provider, {
32
32
  })
33
33
  });
34
34
  const useFormField = ()=>{
35
- const fieldContext = useContext(FormFieldContext);
36
- const itemContext = useContext(FormItemContext);
35
+ const fieldContext = __rspack_external_react.useContext(FormFieldContext);
36
+ const itemContext = __rspack_external_react.useContext(FormItemContext);
37
37
  const { getFieldState, formState } = useFormContext();
38
38
  if (!fieldContext) throw new Error("useFormField should be used within <FormField>");
39
39
  if (!itemContext) throw new Error("useFormField should be used within <FormItem>");
@@ -52,9 +52,9 @@ const useFormField = ()=>{
52
52
  name: fieldContext.name
53
53
  };
54
54
  };
55
- const FormItemContext = /*#__PURE__*/ createContext(null);
56
- const FormItem = /*#__PURE__*/ forwardRef(({ className, ...props }, ref)=>{
57
- const id = useId();
55
+ const FormItemContext = /*#__PURE__*/ __rspack_external_react.createContext(null);
56
+ const FormItem = /*#__PURE__*/ __rspack_external_react.forwardRef(({ className, ...props }, ref)=>{
57
+ const id = __rspack_external_react.useId();
58
58
  return /*#__PURE__*/ jsx(FormItemContext.Provider, {
59
59
  value: {
60
60
  id
@@ -67,7 +67,7 @@ const FormItem = /*#__PURE__*/ forwardRef(({ className, ...props }, ref)=>{
67
67
  });
68
68
  });
69
69
  FormItem.displayName = "FormItem";
70
- const FormLabel = /*#__PURE__*/ forwardRef(({ className, ...props }, ref)=>{
70
+ const FormLabel = /*#__PURE__*/ __rspack_external_react.forwardRef(({ className, ...props }, ref)=>{
71
71
  const { error, formItemId } = useFormField();
72
72
  return /*#__PURE__*/ jsx("label", {
73
73
  ref: ref,
@@ -77,13 +77,13 @@ const FormLabel = /*#__PURE__*/ forwardRef(({ className, ...props }, ref)=>{
77
77
  });
78
78
  });
79
79
  FormLabel.displayName = "FormLabel";
80
- const FormControl = /*#__PURE__*/ forwardRef(({ children, ...props }, ref)=>{
80
+ const FormControl = /*#__PURE__*/ __rspack_external_react.forwardRef(({ children, ...props }, ref)=>{
81
81
  const { error, formDescriptionId, formItemId, formMessageId } = useFormField();
82
82
  const describedBy = mergeAriaDescribedBy("string" == typeof props["aria-describedby"] ? props["aria-describedby"] : void 0, formDescriptionId, error ? formMessageId : void 0);
83
- if (/*#__PURE__*/ isValidElement(children)) {
83
+ if (/*#__PURE__*/ __rspack_external_react.isValidElement(children)) {
84
84
  const child = children;
85
85
  const childDescribedBy = "string" == typeof child.props["aria-describedby"] ? child.props["aria-describedby"] : void 0;
86
- return /*#__PURE__*/ cloneElement(child, {
86
+ return /*#__PURE__*/ __rspack_external_react.cloneElement(child, {
87
87
  ...props,
88
88
  ref: composeRefs(ref, child.props.ref),
89
89
  id: formItemId,
@@ -101,7 +101,7 @@ const FormControl = /*#__PURE__*/ forwardRef(({ children, ...props }, ref)=>{
101
101
  });
102
102
  });
103
103
  FormControl.displayName = "FormControl";
104
- const FormDescription = /*#__PURE__*/ forwardRef(({ className, ...props }, ref)=>{
104
+ const FormDescription = /*#__PURE__*/ __rspack_external_react.forwardRef(({ className, ...props }, ref)=>{
105
105
  const { formDescriptionId } = useFormField();
106
106
  return /*#__PURE__*/ jsx("p", {
107
107
  ref: ref,
@@ -111,7 +111,7 @@ const FormDescription = /*#__PURE__*/ forwardRef(({ className, ...props }, ref)=
111
111
  });
112
112
  });
113
113
  FormDescription.displayName = "FormDescription";
114
- const FormMessage = /*#__PURE__*/ forwardRef(({ className, children, ...props }, ref)=>{
114
+ const FormMessage = /*#__PURE__*/ __rspack_external_react.forwardRef(({ className, children, ...props }, ref)=>{
115
115
  const { error, formMessageId } = useFormField();
116
116
  const body = error ? String(error.message ?? "") : children;
117
117
  if (!body) return null;
@@ -1 +1 @@
1
- {"version":3,"file":"components/ui/form.js","sources":["../../../src/components/ui/form.tsx"],"sourcesContent":["\"use client\";\r\n\r\n/* eslint-disable react/prop-types */\r\n\r\nimport * as React from \"react\";\r\nimport {Controller, FormProvider, useFormContext, type ControllerProps, type FieldPath, type FieldValues} from \"react-hook-form\";\r\n\r\nimport {cn} from \"@/lib/utilities\";\r\n\r\nimport styles from \"./form.module.css\";\r\n\r\n/**\r\n * Provides the `react-hook-form` context to nested form primitives.\r\n *\r\n * @remarks\r\n * - Renders the `FormProvider` component from `react-hook-form`\r\n * - Built on `react-hook-form`\r\n *\r\n * @example\r\n * ```tsx\r\n * <Form {...form}>\r\n * <form>...</form>\r\n * </Form>\r\n * ```\r\n *\r\n * @see {@link https://react-hook-form.com/docs/formprovider | React Hook Form FormProvider Docs}\r\n */\r\nconst Form = Object.assign(FormProvider, {displayName: \"Form\"});\r\n\r\ntype FormControlElementProps = React.HTMLAttributes<HTMLElement> & {\r\n ref?: React.Ref<HTMLElement>;\r\n};\r\n\r\ninterface FormControlProps extends Omit<React.HTMLAttributes<HTMLElement>, \"children\"> {\r\n /**\r\n * Single form control element or fallback content to receive field accessibility attributes.\r\n * @default undefined\r\n */\r\n children: React.ReactNode;\r\n}\r\n\r\nfunction assignRef<TValue>(ref: React.Ref<TValue> | undefined, value: TValue | null): void {\r\n if (typeof ref === \"function\") {\r\n ref(value);\r\n return;\r\n }\r\n\r\n if (ref) {\r\n ref.current = value;\r\n }\r\n}\r\n\r\nfunction composeRefs<TValue>(...refs: Array<React.Ref<TValue> | undefined>): React.RefCallback<TValue> {\r\n return (value: TValue | null): void => {\r\n for (const ref of refs) {\r\n assignRef(ref, value);\r\n }\r\n };\r\n}\r\n\r\nfunction mergeAriaDescribedBy(...describedByValues: Array<string | undefined>): string | undefined {\r\n const tokens = describedByValues\r\n .flatMap((describedByValue) => describedByValue?.split(/\\s+/u) ?? [])\r\n .filter((token): token is string => token.length > 0);\r\n\r\n return tokens.length > 0 ? [...new Set(tokens)].join(\" \") : undefined;\r\n}\r\n\r\ntype FormFieldContextValue<\r\n TFieldValues extends FieldValues = FieldValues,\r\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\r\n> = {\r\n name: TName;\r\n};\r\n\r\nconst FormFieldContext = React.createContext<FormFieldContextValue | null>(null);\r\n\r\n/**\r\n * Binds a single field name to the shared form field context.\r\n *\r\n * @remarks\r\n * - Renders the `Controller` component from `react-hook-form`\r\n * - Built on `react-hook-form` controller primitives\r\n *\r\n * @example\r\n * ```tsx\r\n * <FormField\r\n * control={form.control}\r\n * name='email'\r\n * render={({field}) => <input {...field} />}\r\n * />\r\n * ```\r\n *\r\n * @see {@link https://react-hook-form.com/docs/usecontroller/controller | React Hook Form Controller Docs}\r\n */\r\nconst FormField = <TFieldValues extends FieldValues = FieldValues, TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>>({\r\n ...props\r\n}: ControllerProps<TFieldValues, TName>): React.JSX.Element => {\r\n return (\r\n <FormFieldContext.Provider value={{name: props.name}}>\r\n <Controller {...props} />\r\n </FormFieldContext.Provider>\r\n );\r\n};\r\n\r\ntype UseFormFieldReturn = {\r\n id: string;\r\n name: FieldPath<FieldValues>;\r\n formItemId: string;\r\n formDescriptionId: string;\r\n formMessageId: string;\r\n invalid: boolean;\r\n isDirty: boolean;\r\n isTouched: boolean;\r\n isValidating: boolean;\r\n error?: ReturnType<ReturnType<typeof useFormContext>[\"getFieldState\"]>[\"error\"];\r\n};\r\n\r\n/**\r\n * Returns the resolved form field metadata for nested form primitives.\r\n *\r\n * @remarks\r\n * Reads the nearest {@link FormField} and {@link FormItem} contexts, then combines them\r\n * with `react-hook-form` field state to expose stable IDs and validation metadata.\r\n *\r\n * @example\r\n * ```tsx\r\n * const field = useFormField();\r\n * ```\r\n *\r\n * @see {@link https://react-hook-form.com/docs/useformcontext | React Hook Form useFormContext Docs}\r\n */\r\nconst useFormField = (): UseFormFieldReturn => {\r\n const fieldContext = React.useContext(FormFieldContext);\r\n const itemContext = React.useContext(FormItemContext);\r\n const {getFieldState, formState} = useFormContext();\r\n\r\n if (!fieldContext) {\r\n throw new Error(\"useFormField should be used within <FormField>\");\r\n }\r\n\r\n if (!itemContext) {\r\n throw new Error(\"useFormField should be used within <FormItem>\");\r\n }\r\n\r\n const fieldState = getFieldState(fieldContext.name, formState);\r\n const {id} = itemContext;\r\n\r\n return {\r\n error: fieldState.error,\r\n formDescriptionId: `${id}-form-item-description`,\r\n formItemId: `${id}-form-item`,\r\n formMessageId: `${id}-form-item-message`,\r\n id,\r\n invalid: fieldState.invalid,\r\n isDirty: fieldState.isDirty,\r\n isTouched: fieldState.isTouched,\r\n isValidating: fieldState.isValidating,\r\n name: fieldContext.name as FieldPath<FieldValues>,\r\n };\r\n};\r\n\r\ntype FormItemContextValue = {\r\n id: string;\r\n};\r\n\r\nconst FormItemContext = React.createContext<FormItemContextValue | null>(null);\r\n\r\n/**\r\n * Wraps a label, control, description, and message into a single form item.\r\n *\r\n * @remarks\r\n * - Renders a `<div>` element\r\n * - Built on the shared form item context\r\n *\r\n * @example\r\n * ```tsx\r\n * <FormItem>\r\n * <FormLabel>Email</FormLabel>\r\n * </FormItem>\r\n * ```\r\n *\r\n * @see {@link https://react-hook-form.com/docs/useformcontext | React Hook Form Docs}\r\n */\r\nconst FormItem = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(({className, ...props}, ref) => {\r\n const id = React.useId();\r\n\r\n return (\r\n <FormItemContext.Provider value={{id}}>\r\n <div\r\n ref={ref}\r\n className={cn(styles.item, className)}\r\n {...props}\r\n />\r\n </FormItemContext.Provider>\r\n );\r\n});\r\nFormItem.displayName = \"FormItem\";\r\n\r\n/**\r\n * Renders the accessible label for the current form item.\r\n *\r\n * @remarks\r\n * - Renders a `<label>` element\r\n * - Built on the shared form field metadata hook\r\n *\r\n * @example\r\n * ```tsx\r\n * <FormLabel>Email</FormLabel>\r\n * ```\r\n *\r\n * @see {@link https://developer.mozilla.org/docs/Web/HTML/Element/label | HTML label element}\r\n */\r\nconst FormLabel = React.forwardRef<HTMLLabelElement, React.LabelHTMLAttributes<HTMLLabelElement>>(({className, ...props}, ref) => {\r\n const {error, formItemId} = useFormField();\r\n\r\n return (\r\n <label\r\n ref={ref}\r\n className={cn(error && styles.labelError, className)}\r\n htmlFor={formItemId}\r\n {...props}\r\n />\r\n );\r\n});\r\nFormLabel.displayName = \"FormLabel\";\r\n\r\n/**\r\n * Provides react-hook-form field metadata to a single control element.\r\n *\r\n * @remarks\r\n * This replaces the former Radix Slot-based implementation by cloning the\r\n * direct child element and merging the accessibility attributes required by the\r\n * surrounding form primitives. A fallback wrapper is rendered only when the\r\n * child is not a valid React element.\r\n */\r\nconst FormControl = React.forwardRef<HTMLElement, FormControlProps>(\r\n ({children, ...props}: Readonly<FormControlProps>, ref): React.JSX.Element => {\r\n const {error, formDescriptionId, formItemId, formMessageId} = useFormField();\r\n const describedBy = mergeAriaDescribedBy(\r\n typeof props[\"aria-describedby\"] === \"string\" ? props[\"aria-describedby\"] : undefined,\r\n formDescriptionId,\r\n error ? formMessageId : undefined,\r\n );\r\n\r\n if (React.isValidElement(children)) {\r\n const child = children as React.ReactElement<FormControlElementProps>;\r\n const childDescribedBy = typeof child.props[\"aria-describedby\"] === \"string\" ? child.props[\"aria-describedby\"] : undefined;\r\n\r\n // eslint-disable-next-line react-x/no-clone-element -- removes Radix Slot while preserving child element semantics\r\n return React.cloneElement(child, {\r\n ...props,\r\n ref: composeRefs(ref, child.props.ref),\r\n id: formItemId,\r\n \"aria-describedby\": mergeAriaDescribedBy(childDescribedBy, describedBy),\r\n \"aria-invalid\": Boolean(error),\r\n });\r\n }\r\n\r\n return (\r\n <div\r\n ref={ref as React.Ref<HTMLDivElement>}\r\n id={formItemId}\r\n aria-describedby={describedBy}\r\n aria-invalid={Boolean(error)}\r\n {...props}>\r\n {children}\r\n </div>\r\n );\r\n },\r\n);\r\nFormControl.displayName = \"FormControl\";\r\n\r\n/**\r\n * Renders helper text that describes the current form control.\r\n *\r\n * @remarks\r\n * - Renders a `<p>` element\r\n * - Built on the shared form field metadata hook\r\n *\r\n * @example\r\n * ```tsx\r\n * <FormDescription>We'll never share your email.</FormDescription>\r\n * ```\r\n *\r\n * @see {@link https://developer.mozilla.org/docs/Web/HTML/Element/p | HTML paragraph element}\r\n */\r\nconst FormDescription = React.forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLParagraphElement>>(({className, ...props}, ref) => {\r\n const {formDescriptionId} = useFormField();\r\n\r\n return (\r\n <p\r\n ref={ref}\r\n id={formDescriptionId}\r\n className={cn(styles.description, className)}\r\n {...props}\r\n />\r\n );\r\n});\r\nFormDescription.displayName = \"FormDescription\";\r\n\r\n/**\r\n * Renders the validation message or fallback message for the current form control.\r\n *\r\n * @remarks\r\n * - Renders a `<p>` element when content is available\r\n * - Built on the shared form field metadata hook\r\n *\r\n * @example\r\n * ```tsx\r\n * <FormMessage />\r\n * ```\r\n *\r\n * @see {@link https://developer.mozilla.org/docs/Web/Accessibility/ARIA/Reference/Attributes/aria-invalid | ARIA invalid state}\r\n */\r\nconst FormMessage = React.forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLParagraphElement>>(\r\n ({className, children, ...props}, ref) => {\r\n const {error, formMessageId} = useFormField();\r\n const body = error ? String(error.message ?? \"\") : children;\r\n\r\n if (!body) {\r\n return null;\r\n }\r\n\r\n return (\r\n <p\r\n ref={ref}\r\n id={formMessageId}\r\n className={cn(styles.message, className)}\r\n {...props}>\r\n {body}\r\n </p>\r\n );\r\n },\r\n);\r\nFormMessage.displayName = \"FormMessage\";\r\nFormField.displayName = \"FormField\";\r\n\r\nexport {Controller, useController, useFieldArray, useForm, useFormContext, useFormState, useWatch} from \"react-hook-form\";\r\nexport type {\r\n Control,\r\n ControllerFieldState,\r\n ControllerProps,\r\n ControllerRenderProps,\r\n DefaultValues,\r\n FieldError,\r\n FieldErrors,\r\n FieldPath,\r\n FieldValues,\r\n Path,\r\n RegisterOptions,\r\n Resolver,\r\n SubmitHandler,\r\n UseControllerReturn,\r\n UseFieldArrayReturn,\r\n UseFormReturn,\r\n} from \"react-hook-form\";\r\nexport {Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, useFormField};\r\nexport type {FormControlProps};\r\n"],"names":["Form","Object","FormProvider","assignRef","ref","value","composeRefs","refs","mergeAriaDescribedBy","describedByValues","tokens","describedByValue","token","Set","undefined","FormFieldContext","React","FormField","props","Controller","useFormField","fieldContext","itemContext","FormItemContext","getFieldState","formState","useFormContext","Error","fieldState","id","FormItem","className","cn","styles","FormLabel","error","formItemId","FormControl","children","formDescriptionId","formMessageId","describedBy","child","childDescribedBy","Boolean","FormDescription","FormMessage","body","String"],"mappings":";;;;;;AA2BA,MAAMA,OAAOC,OAAO,MAAM,CAACC,cAAc;IAAC,aAAa;AAAM;AAc7D,SAASC,UAAkBC,GAAkC,EAAEC,KAAoB;IACjF,IAAI,AAAe,cAAf,OAAOD,KAAoB,YAC7BA,IAAIC;IAIN,IAAID,KACFA,IAAI,OAAO,GAAGC;AAElB;AAEA,SAASC,YAAoB,GAAGC,IAA0C;IACxE,OAAO,CAACF;QACN,KAAK,MAAMD,OAAOG,KAChBJ,UAAUC,KAAKC;IAEnB;AACF;AAEA,SAASG,qBAAqB,GAAGC,iBAA4C;IAC3E,MAAMC,SAASD,kBACZ,OAAO,CAAC,CAACE,mBAAqBA,kBAAkB,MAAM,WAAW,EAAE,EACnE,MAAM,CAAC,CAACC,QAA2BA,MAAM,MAAM,GAAG;IAErD,OAAOF,OAAO,MAAM,GAAG,IAAI;WAAI,IAAIG,IAAIH;KAAQ,CAAC,IAAI,CAAC,OAAOI;AAC9D;AASA,MAAMC,mBAAmB,WAAHA,GAAGC,cAAkD;AAoB3E,MAAMC,YAAY,CAAkH,EAClI,GAAGC,OACkC,GAC9B,WAAP,GACE,IAACH,iBAAiB,QAAQ;QAAC,OAAO;YAAC,MAAMG,MAAM,IAAI;QAAA;kBACjD,kBAACC,YAAUA;YAAE,GAAGD,KAAK;;;AAgC3B,MAAME,eAAe;IACnB,MAAMC,eAAeL,WAAiBD;IACtC,MAAMO,cAAcN,WAAiBO;IACrC,MAAM,EAACC,aAAa,EAAEC,SAAS,EAAC,GAAGC;IAEnC,IAAI,CAACL,cACH,MAAM,IAAIM,MAAM;IAGlB,IAAI,CAACL,aACH,MAAM,IAAIK,MAAM;IAGlB,MAAMC,aAAaJ,cAAcH,aAAa,IAAI,EAAEI;IACpD,MAAM,EAACI,EAAE,EAAC,GAAGP;IAEb,OAAO;QACL,OAAOM,WAAW,KAAK;QACvB,mBAAmB,GAAGC,GAAG,sBAAsB,CAAC;QAChD,YAAY,GAAGA,GAAG,UAAU,CAAC;QAC7B,eAAe,GAAGA,GAAG,kBAAkB,CAAC;QACxCA;QACA,SAASD,WAAW,OAAO;QAC3B,SAASA,WAAW,OAAO;QAC3B,WAAWA,WAAW,SAAS;QAC/B,cAAcA,WAAW,YAAY;QACrC,MAAMP,aAAa,IAAI;IACzB;AACF;AAMA,MAAME,kBAAkB,WAAHA,GAAGP,cAAiD;AAkBzE,MAAMc,WAAW,WAAHA,GAAGd,WAAuE,CAAC,EAACe,SAAS,EAAE,GAAGb,OAAM,EAAEd;IAC9G,MAAMyB,KAAKb;IAEX,OAAO,WAAP,GACE,IAACO,gBAAgB,QAAQ;QAAC,OAAO;YAACM;QAAE;kBAClC,kBAAC;YACC,KAAKzB;YACL,WAAW4B,GAAGC,YAAAA,IAAW,EAAEF;YAC1B,GAAGb,KAAK;;;AAIjB;AACAY,SAAS,WAAW,GAAG;AAgBvB,MAAMI,YAAY,WAAHA,GAAGlB,WAAgF,CAAC,EAACe,SAAS,EAAE,GAAGb,OAAM,EAAEd;IACxH,MAAM,EAAC+B,KAAK,EAAEC,UAAU,EAAC,GAAGhB;IAE5B,OAAO,WAAP,GACE,IAAC;QACC,KAAKhB;QACL,WAAW4B,GAAGG,SAASF,YAAAA,UAAiB,EAAEF;QAC1C,SAASK;QACR,GAAGlB,KAAK;;AAGf;AACAgB,UAAU,WAAW,GAAG;AAWxB,MAAMG,cAAc,WAAHA,GAAGrB,WAClB,CAAC,EAACsB,QAAQ,EAAE,GAAGpB,OAAkC,EAAEd;IACjD,MAAM,EAAC+B,KAAK,EAAEI,iBAAiB,EAAEH,UAAU,EAAEI,aAAa,EAAC,GAAGpB;IAC9D,MAAMqB,cAAcjC,qBAClB,AAAqC,YAArC,OAAOU,KAAK,CAAC,mBAAmB,GAAgBA,KAAK,CAAC,mBAAmB,GAAGJ,QAC5EyB,mBACAJ,QAAQK,gBAAgB1B;IAG1B,IAAI,WAAJ,GAAIE,eAAqBsB,WAAW;QAClC,MAAMI,QAAQJ;QACd,MAAMK,mBAAmB,AAA2C,YAA3C,OAAOD,MAAM,KAAK,CAAC,mBAAmB,GAAgBA,MAAM,KAAK,CAAC,mBAAmB,GAAG5B;QAGjH,OAAO,WAAP,GAAOE,aAAmB0B,OAAO;YAC/B,GAAGxB,KAAK;YACR,KAAKZ,YAAYF,KAAKsC,MAAM,KAAK,CAAC,GAAG;YACrC,IAAIN;YACJ,oBAAoB5B,qBAAqBmC,kBAAkBF;YAC3D,gBAAgBG,QAAQT;QAC1B;IACF;IAEA,OAAO,WAAP,GACE,IAAC;QACC,KAAK/B;QACL,IAAIgC;QACJ,oBAAkBK;QAClB,gBAAcG,QAAQT;QACrB,GAAGjB,KAAK;kBACRoB;;AAGP;AAEFD,YAAY,WAAW,GAAG;AAgB1B,MAAMQ,kBAAkB,WAAHA,GAAG7B,WAAmF,CAAC,EAACe,SAAS,EAAE,GAAGb,OAAM,EAAEd;IACjI,MAAM,EAACmC,iBAAiB,EAAC,GAAGnB;IAE5B,OAAO,WAAP,GACE,IAAC;QACC,KAAKhB;QACL,IAAImC;QACJ,WAAWP,GAAGC,YAAAA,WAAkB,EAAEF;QACjC,GAAGb,KAAK;;AAGf;AACA2B,gBAAgB,WAAW,GAAG;AAgB9B,MAAMC,cAAc,WAAHA,GAAG9B,WAClB,CAAC,EAACe,SAAS,EAAEO,QAAQ,EAAE,GAAGpB,OAAM,EAAEd;IAChC,MAAM,EAAC+B,KAAK,EAAEK,aAAa,EAAC,GAAGpB;IAC/B,MAAM2B,OAAOZ,QAAQa,OAAOb,MAAM,OAAO,IAAI,MAAMG;IAEnD,IAAI,CAACS,MACH,OAAO;IAGT,OAAO,WAAP,GACE,IAAC;QACC,KAAK3C;QACL,IAAIoC;QACJ,WAAWR,GAAGC,YAAAA,OAAc,EAAEF;QAC7B,GAAGb,KAAK;kBACR6B;;AAGP;AAEFD,YAAY,WAAW,GAAG;AAC1B7B,UAAU,WAAW,GAAG"}
1
+ {"version":3,"file":"components/ui/form.js","sources":["../../../src/components/ui/form.tsx"],"sourcesContent":["\"use client\";\r\n\r\n/* eslint-disable react/prop-types */\r\n\r\nimport * as React from \"react\";\r\nimport {\r\n Controller,\r\n FormProvider,\r\n useController,\r\n useFieldArray,\r\n useForm,\r\n useFormContext,\r\n useFormState,\r\n useWatch,\r\n type Control,\r\n type ControllerFieldState,\r\n type ControllerProps,\r\n type ControllerRenderProps,\r\n type DefaultValues,\r\n type FieldError,\r\n type FieldErrors,\r\n type FieldPath,\r\n type FieldValues,\r\n type Path,\r\n type RegisterOptions,\r\n type Resolver,\r\n type SubmitHandler,\r\n type UseControllerReturn,\r\n type UseFieldArrayReturn,\r\n type UseFormReturn,\r\n} from \"react-hook-form\";\r\n\r\nimport {cn} from \"@/lib/utilities\";\r\n\r\nimport styles from \"./form.module.css\";\r\n\r\n/**\r\n * Provides the `react-hook-form` context to nested form primitives.\r\n *\r\n * @remarks\r\n * - Renders the `FormProvider` component from `react-hook-form`\r\n * - Built on `react-hook-form`\r\n *\r\n * @example\r\n * ```tsx\r\n * <Form {...form}>\r\n * <form>...</form>\r\n * </Form>\r\n * ```\r\n *\r\n * @see {@link https://react-hook-form.com/docs/formprovider | React Hook Form FormProvider Docs}\r\n */\r\nconst Form = Object.assign(FormProvider, {displayName: \"Form\"});\r\n\r\ntype FormControlElementProps = React.HTMLAttributes<HTMLElement> & {\r\n ref?: React.Ref<HTMLElement>;\r\n};\r\n\r\ninterface FormControlProps extends Omit<React.HTMLAttributes<HTMLElement>, \"children\"> {\r\n /**\r\n * Single form control element or fallback content to receive field accessibility attributes.\r\n * @default undefined\r\n */\r\n children: React.ReactNode;\r\n}\r\n\r\nfunction assignRef<TValue>(ref: React.Ref<TValue> | undefined, value: TValue | null): void {\r\n if (typeof ref === \"function\") {\r\n ref(value);\r\n return;\r\n }\r\n\r\n if (ref) {\r\n ref.current = value;\r\n }\r\n}\r\n\r\nfunction composeRefs<TValue>(...refs: Array<React.Ref<TValue> | undefined>): React.RefCallback<TValue> {\r\n return (value: TValue | null): void => {\r\n for (const ref of refs) {\r\n assignRef(ref, value);\r\n }\r\n };\r\n}\r\n\r\nfunction mergeAriaDescribedBy(...describedByValues: Array<string | undefined>): string | undefined {\r\n const tokens = describedByValues\r\n .flatMap((describedByValue) => describedByValue?.split(/\\s+/u) ?? [])\r\n .filter((token): token is string => token.length > 0);\r\n\r\n return tokens.length > 0 ? [...new Set(tokens)].join(\" \") : undefined;\r\n}\r\n\r\ntype FormFieldContextValue<\r\n TFieldValues extends FieldValues = FieldValues,\r\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\r\n> = {\r\n name: TName;\r\n};\r\n\r\nconst FormFieldContext = React.createContext<FormFieldContextValue | null>(null);\r\n\r\n/**\r\n * Binds a single field name to the shared form field context.\r\n *\r\n * @remarks\r\n * - Renders the `Controller` component from `react-hook-form`\r\n * - Built on `react-hook-form` controller primitives\r\n *\r\n * @example\r\n * ```tsx\r\n * <FormField\r\n * control={form.control}\r\n * name='email'\r\n * render={({field}) => <input {...field} />}\r\n * />\r\n * ```\r\n *\r\n * @see {@link https://react-hook-form.com/docs/usecontroller/controller | React Hook Form Controller Docs}\r\n */\r\nconst FormField = <TFieldValues extends FieldValues = FieldValues, TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>>({\r\n ...props\r\n}: ControllerProps<TFieldValues, TName>): React.JSX.Element => {\r\n return (\r\n <FormFieldContext.Provider value={{name: props.name}}>\r\n <Controller {...props} />\r\n </FormFieldContext.Provider>\r\n );\r\n};\r\n\r\ntype UseFormFieldReturn = {\r\n id: string;\r\n name: FieldPath<FieldValues>;\r\n formItemId: string;\r\n formDescriptionId: string;\r\n formMessageId: string;\r\n invalid: boolean;\r\n isDirty: boolean;\r\n isTouched: boolean;\r\n isValidating: boolean;\r\n error?: ReturnType<ReturnType<typeof useFormContext>[\"getFieldState\"]>[\"error\"];\r\n};\r\n\r\n/**\r\n * Returns the resolved form field metadata for nested form primitives.\r\n *\r\n * @remarks\r\n * Reads the nearest {@link FormField} and {@link FormItem} contexts, then combines them\r\n * with `react-hook-form` field state to expose stable IDs and validation metadata.\r\n *\r\n * @example\r\n * ```tsx\r\n * const field = useFormField();\r\n * ```\r\n *\r\n * @see {@link https://react-hook-form.com/docs/useformcontext | React Hook Form useFormContext Docs}\r\n */\r\nconst useFormField = (): UseFormFieldReturn => {\r\n const fieldContext = React.useContext(FormFieldContext);\r\n const itemContext = React.useContext(FormItemContext);\r\n const {getFieldState, formState} = useFormContext();\r\n\r\n if (!fieldContext) {\r\n throw new Error(\"useFormField should be used within <FormField>\");\r\n }\r\n\r\n if (!itemContext) {\r\n throw new Error(\"useFormField should be used within <FormItem>\");\r\n }\r\n\r\n const fieldState = getFieldState(fieldContext.name, formState);\r\n const {id} = itemContext;\r\n\r\n return {\r\n error: fieldState.error,\r\n formDescriptionId: `${id}-form-item-description`,\r\n formItemId: `${id}-form-item`,\r\n formMessageId: `${id}-form-item-message`,\r\n id,\r\n invalid: fieldState.invalid,\r\n isDirty: fieldState.isDirty,\r\n isTouched: fieldState.isTouched,\r\n isValidating: fieldState.isValidating,\r\n name: fieldContext.name as FieldPath<FieldValues>,\r\n };\r\n};\r\n\r\ntype FormItemContextValue = {\r\n id: string;\r\n};\r\n\r\nconst FormItemContext = React.createContext<FormItemContextValue | null>(null);\r\n\r\n/**\r\n * Wraps a label, control, description, and message into a single form item.\r\n *\r\n * @remarks\r\n * - Renders a `<div>` element\r\n * - Built on the shared form item context\r\n *\r\n * @example\r\n * ```tsx\r\n * <FormItem>\r\n * <FormLabel>Email</FormLabel>\r\n * </FormItem>\r\n * ```\r\n *\r\n * @see {@link https://react-hook-form.com/docs/useformcontext | React Hook Form Docs}\r\n */\r\nconst FormItem = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(({className, ...props}, ref) => {\r\n const id = React.useId();\r\n\r\n return (\r\n <FormItemContext.Provider value={{id}}>\r\n <div\r\n ref={ref}\r\n className={cn(styles.item, className)}\r\n {...props}\r\n />\r\n </FormItemContext.Provider>\r\n );\r\n});\r\nFormItem.displayName = \"FormItem\";\r\n\r\n/**\r\n * Renders the accessible label for the current form item.\r\n *\r\n * @remarks\r\n * - Renders a `<label>` element\r\n * - Built on the shared form field metadata hook\r\n *\r\n * @example\r\n * ```tsx\r\n * <FormLabel>Email</FormLabel>\r\n * ```\r\n *\r\n * @see {@link https://developer.mozilla.org/docs/Web/HTML/Element/label | HTML label element}\r\n */\r\nconst FormLabel = React.forwardRef<HTMLLabelElement, React.LabelHTMLAttributes<HTMLLabelElement>>(({className, ...props}, ref) => {\r\n const {error, formItemId} = useFormField();\r\n\r\n return (\r\n <label\r\n ref={ref}\r\n className={cn(error && styles.labelError, className)}\r\n htmlFor={formItemId}\r\n {...props}\r\n />\r\n );\r\n});\r\nFormLabel.displayName = \"FormLabel\";\r\n\r\n/**\r\n * Provides react-hook-form field metadata to a single control element.\r\n *\r\n * @remarks\r\n * This replaces the former Radix Slot-based implementation by cloning the\r\n * direct child element and merging the accessibility attributes required by the\r\n * surrounding form primitives. A fallback wrapper is rendered only when the\r\n * child is not a valid React element.\r\n */\r\nconst FormControl = React.forwardRef<HTMLElement, FormControlProps>(\r\n ({children, ...props}: Readonly<FormControlProps>, ref): React.JSX.Element => {\r\n const {error, formDescriptionId, formItemId, formMessageId} = useFormField();\r\n const describedBy = mergeAriaDescribedBy(\r\n typeof props[\"aria-describedby\"] === \"string\" ? props[\"aria-describedby\"] : undefined,\r\n formDescriptionId,\r\n error ? formMessageId : undefined,\r\n );\r\n\r\n if (React.isValidElement(children)) {\r\n const child = children as React.ReactElement<FormControlElementProps>;\r\n const childDescribedBy = typeof child.props[\"aria-describedby\"] === \"string\" ? child.props[\"aria-describedby\"] : undefined;\r\n\r\n // eslint-disable-next-line react-x/no-clone-element -- removes Radix Slot while preserving child element semantics\r\n return React.cloneElement(child, {\r\n ...props,\r\n ref: composeRefs(ref, child.props.ref),\r\n id: formItemId,\r\n \"aria-describedby\": mergeAriaDescribedBy(childDescribedBy, describedBy),\r\n \"aria-invalid\": Boolean(error),\r\n });\r\n }\r\n\r\n return (\r\n <div\r\n ref={ref as React.Ref<HTMLDivElement>}\r\n id={formItemId}\r\n aria-describedby={describedBy}\r\n aria-invalid={Boolean(error)}\r\n {...props}>\r\n {children}\r\n </div>\r\n );\r\n },\r\n);\r\nFormControl.displayName = \"FormControl\";\r\n\r\n/**\r\n * Renders helper text that describes the current form control.\r\n *\r\n * @remarks\r\n * - Renders a `<p>` element\r\n * - Built on the shared form field metadata hook\r\n *\r\n * @example\r\n * ```tsx\r\n * <FormDescription>We'll never share your email.</FormDescription>\r\n * ```\r\n *\r\n * @see {@link https://developer.mozilla.org/docs/Web/HTML/Element/p | HTML paragraph element}\r\n */\r\nconst FormDescription = React.forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLParagraphElement>>(({className, ...props}, ref) => {\r\n const {formDescriptionId} = useFormField();\r\n\r\n return (\r\n <p\r\n ref={ref}\r\n id={formDescriptionId}\r\n className={cn(styles.description, className)}\r\n {...props}\r\n />\r\n );\r\n});\r\nFormDescription.displayName = \"FormDescription\";\r\n\r\n/**\r\n * Renders the validation message or fallback message for the current form control.\r\n *\r\n * @remarks\r\n * - Renders a `<p>` element when content is available\r\n * - Built on the shared form field metadata hook\r\n *\r\n * @example\r\n * ```tsx\r\n * <FormMessage />\r\n * ```\r\n *\r\n * @see {@link https://developer.mozilla.org/docs/Web/Accessibility/ARIA/Reference/Attributes/aria-invalid | ARIA invalid state}\r\n */\r\nconst FormMessage = React.forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLParagraphElement>>(\r\n ({className, children, ...props}, ref) => {\r\n const {error, formMessageId} = useFormField();\r\n const body = error ? String(error.message ?? \"\") : children;\r\n\r\n if (!body) {\r\n return null;\r\n }\r\n\r\n return (\r\n <p\r\n ref={ref}\r\n id={formMessageId}\r\n className={cn(styles.message, className)}\r\n {...props}>\r\n {body}\r\n </p>\r\n );\r\n },\r\n);\r\nFormMessage.displayName = \"FormMessage\";\r\nFormField.displayName = \"FormField\";\r\n\r\nexport {Controller, useController, useFieldArray, useForm, useFormContext, useFormState, useWatch};\r\nexport type {\r\n Control,\r\n ControllerFieldState,\r\n ControllerProps,\r\n ControllerRenderProps,\r\n DefaultValues,\r\n FieldError,\r\n FieldErrors,\r\n FieldPath,\r\n FieldValues,\r\n Path,\r\n RegisterOptions,\r\n Resolver,\r\n SubmitHandler,\r\n UseControllerReturn,\r\n UseFieldArrayReturn,\r\n UseFormReturn,\r\n};\r\nexport {Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, useFormField};\r\nexport type {FormControlProps};\r\n"],"names":["Form","Object","FormProvider","assignRef","ref","value","composeRefs","refs","mergeAriaDescribedBy","describedByValues","tokens","describedByValue","token","Set","undefined","FormFieldContext","React","FormField","props","Controller","useFormField","fieldContext","itemContext","FormItemContext","getFieldState","formState","useFormContext","Error","fieldState","id","FormItem","className","cn","styles","FormLabel","error","formItemId","FormControl","children","formDescriptionId","formMessageId","describedBy","child","childDescribedBy","Boolean","FormDescription","FormMessage","body","String"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["webpack://./home/runner/work/arolariu.ro/arolariu.ro/packages/components/src/components/ui/form.module.css","webpack://./src/components/ui/form.module.css"],"names":[],"mappings":"AADA;ECEE,sBAAsB;EACtB,aAAa;AACf;;AAEA;EACE,4BAA4B;AAC9B;;AAEA;EACE,iCAAiC;EACjC,gBAAgB;AAClB;;AAEA;EACE,4BAA4B;EAC5B,gBAAgB;EAChB,gBAAgB;AAClB","sourcesContent":[".item{display:grid;gap:var(--ac-space-2)}.labelError{color:var(--ac-destructive)}.description{color:var(--ac-muted-foreground);font-size:.8rem}.message{color:var(--ac-destructive);font-size:.8rem;font-weight:500}",".item {\n gap: var(--ac-space-2);\n display: grid;\n}\n\n.labelError {\n color: var(--ac-destructive);\n}\n\n.description {\n color: var(--ac-muted-foreground);\n font-size: .8rem;\n}\n\n.message {\n color: var(--ac-destructive);\n font-size: .8rem;\n font-weight: 500;\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/form.module.css","webpack://./src/components/ui/form.module.css"],"names":[],"mappings":"AAAA;ECCE,sBAAsB;EACtB,aAAa;AACf;;ADHyC;ECMvC,4BAA4B;AAC9B;;ADPiF;ECU/E,iCAAiC;EACjC,gBAAgB;AAClB;;ADZ+I;ECe7I,4BAA4B;EAC5B,gBAAgB;EAChB,gBAAgB;AAClB","sourcesContent":[".item{display:grid;gap:var(--ac-space-2)}.labelError{color:var(--ac-destructive)}.description{color:var(--ac-muted-foreground);font-size:.8rem}.message{color:var(--ac-destructive);font-size:.8rem;font-weight:500}",".item {\n gap: var(--ac-space-2);\n display: grid;\n}\n\n.labelError {\n color: var(--ac-destructive);\n}\n\n.description {\n color: var(--ac-muted-foreground);\n font-size: .8rem;\n}\n\n.message {\n color: var(--ac-destructive);\n font-size: .8rem;\n font-weight: 500;\n}\n"],"sourceRoot":""}
@@ -1,10 +1,10 @@
1
1
  "use client";
2
2
  import { jsx } from "react/jsx-runtime";
3
3
  import { motion } from "motion/react";
4
- import { forwardRef } from "react";
5
4
  import { cn } from "../../lib/utilities.js";
6
5
  import gradient_background_module from "./gradient-background.module.js";
7
- const GradientBackground = /*#__PURE__*/ forwardRef(({ className, transition = {
6
+ import * as __rspack_external_react from "react";
7
+ const GradientBackground = /*#__PURE__*/ __rspack_external_react.forwardRef(({ className, transition = {
8
8
  duration: 15,
9
9
  ease: "easeInOut",
10
10
  repeat: 1 / 0
@@ -1 +1 @@
1
- {"version":3,"file":"components/ui/gradient-background.js","sources":["../../../src/components/ui/gradient-background.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport {motion, type HTMLMotionProps, type Transition} from \"motion/react\";\r\nimport * as React from \"react\";\r\n\r\nimport {cn} from \"@/lib/utilities\";\r\nimport styles from \"./gradient-background.module.css\";\r\n\r\n/** Props accepted by {@link GradientBackground}. */\r\nexport interface GradientBackgroundProps extends HTMLMotionProps<\"div\"> {\r\n /** Motion timing used for the animated background-position sweep. @default {duration: 15, ease: \"easeInOut\", repeat: Infinity} */\r\n transition?: Transition;\r\n}\r\n\r\n/**\r\n * Renders a continuously shifting multicolor gradient background.\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 * <GradientBackground />\r\n * ```\r\n *\r\n * @see {@link GradientBackgroundProps} for available props\r\n */\r\nconst GradientBackground = React.forwardRef<HTMLDivElement, GradientBackgroundProps>(\r\n ({className, transition = {duration: 15, ease: \"easeInOut\", repeat: Infinity}, ...props}, ref) => {\r\n // eslint-disable-next-line sonarjs/no-unused-vars -- removing React key avoids implicit key spreading\r\n const {key: _ignoredKey, ...restProps} = props;\r\n\r\n return (\r\n <motion.div\r\n ref={ref}\r\n className={cn(styles.root, className)}\r\n animate={{\r\n backgroundPosition: [\"0% 50%\", \"100% 50%\", \"0% 50%\"],\r\n }}\r\n transition={transition}\r\n {...restProps}\r\n />\r\n );\r\n },\r\n);\r\n\r\nGradientBackground.displayName = \"GradientBackground\";\r\n\r\nexport {GradientBackground};\r\n"],"names":["GradientBackground","React","className","transition","Infinity","props","ref","_ignoredKey","restProps","motion","cn","styles"],"mappings":";;;;;;AA8BA,MAAMA,qBAAqB,WAAHA,GAAGC,WACzB,CAAC,EAACC,SAAS,EAAEC,aAAa;IAAC,UAAU;IAAI,MAAM;IAAa,QAAQC;AAAQ,CAAC,EAAE,GAAGC,OAAM,EAAEC;IAExF,MAAM,EAAC,KAAKC,WAAW,EAAE,GAAGC,WAAU,GAAGH;IAEzC,OAAO,WAAP,GACE,IAACI,OAAO,GAAG;QACT,KAAKH;QACL,WAAWI,GAAGC,2BAAAA,IAAW,EAAET;QAC3B,SAAS;YACP,oBAAoB;gBAAC;gBAAU;gBAAY;aAAS;QACtD;QACA,YAAYC;QACX,GAAGK,SAAS;;AAGnB;AAGFR,mBAAmB,WAAW,GAAG"}
1
+ {"version":3,"file":"components/ui/gradient-background.js","sources":["../../../src/components/ui/gradient-background.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport {motion, type HTMLMotionProps, type Transition} from \"motion/react\";\r\nimport * as React from \"react\";\r\n\r\nimport {cn} from \"@/lib/utilities\";\r\nimport styles from \"./gradient-background.module.css\";\r\n\r\n/** Props accepted by {@link GradientBackground}. */\r\nexport interface GradientBackgroundProps extends HTMLMotionProps<\"div\"> {\r\n /** Motion timing used for the animated background-position sweep. @default {duration: 15, ease: \"easeInOut\", repeat: Infinity} */\r\n transition?: Transition;\r\n}\r\n\r\n/**\r\n * Renders a continuously shifting multicolor gradient background.\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 * <GradientBackground />\r\n * ```\r\n *\r\n * @see {@link GradientBackgroundProps} for available props\r\n */\r\nconst GradientBackground = React.forwardRef<HTMLDivElement, GradientBackgroundProps>(\r\n ({className, transition = {duration: 15, ease: \"easeInOut\", repeat: Infinity}, ...props}, ref) => {\r\n // eslint-disable-next-line sonarjs/no-unused-vars -- removing React key avoids implicit key spreading\r\n const {key: _ignoredKey, ...restProps} = props;\r\n\r\n return (\r\n <motion.div\r\n ref={ref}\r\n className={cn(styles.root, className)}\r\n animate={{\r\n backgroundPosition: [\"0% 50%\", \"100% 50%\", \"0% 50%\"],\r\n }}\r\n transition={transition}\r\n {...restProps}\r\n />\r\n );\r\n },\r\n);\r\n\r\nGradientBackground.displayName = \"GradientBackground\";\r\n\r\nexport {GradientBackground};\r\n"],"names":["GradientBackground","React","className","transition","Infinity","props","ref","_ignoredKey","restProps","motion","cn","styles"],"mappings":";;;;;;AA8BA,MAAMA,qBAAqB,WAAHA,GAAGC,wBAAAA,UAAgB,CACzC,CAAC,EAACC,SAAS,EAAEC,aAAa;IAAC,UAAU;IAAI,MAAM;IAAa,QAAQC;AAAQ,CAAC,EAAE,GAAGC,OAAM,EAAEC;IAExF,MAAM,EAAC,KAAKC,WAAW,EAAE,GAAGC,WAAU,GAAGH;IAEzC,OAAO,WAAP,GACE,IAACI,OAAO,GAAG;QACT,KAAKH;QACL,WAAWI,GAAGC,2BAAAA,IAAW,EAAET;QAC3B,SAAS;YACP,oBAAoB;gBAAC;gBAAU;gBAAY;aAAS;QACtD;QACA,YAAYC;QACX,GAAGK,SAAS;;AAGnB;AAGFR,mBAAmB,WAAW,GAAG"}
@@ -1 +1 @@
1
- {"version":3,"sources":["webpack://./home/runner/work/arolariu.ro/arolariu.ro/packages/components/src/components/ui/gradient-background.module.css","webpack://./src/components/ui/gradient-background.module.css"],"names":[],"mappings":"AADA;ECEE,wEAAwE;EACxE,0BAA0B;EAC1B,WAAW;EACX,YAAY;AACd","sourcesContent":[".root{background-image:linear-gradient(135deg,#3b82f6,#a855f7 50%,#ec4899);background-size:400% 400%;height:100%;width:100%}",".root {\n background-image: linear-gradient(135deg, #3b82f6, #a855f7 50%, #ec4899);\n background-size: 400% 400%;\n width: 100%;\n height: 100%;\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/gradient-background.module.css","webpack://./src/components/ui/gradient-background.module.css"],"names":[],"mappings":"AAAA;ECCE,wEAAwE;EACxE,0BAA0B;EAC1B,WAAW;EACX,YAAY;AACd","sourcesContent":[".root{background-image:linear-gradient(135deg,#3b82f6,#a855f7 50%,#ec4899);background-size:400% 400%;height:100%;width:100%}",".root {\n background-image: linear-gradient(135deg, #3b82f6, #a855f7 50%, #ec4899);\n background-size: 400% 400%;\n width: 100%;\n height: 100%;\n}\n"],"sourceRoot":""}
@@ -1,10 +1,10 @@
1
1
  "use client";
2
2
  import { jsx, jsxs } from "react/jsx-runtime";
3
3
  import { motion } from "motion/react";
4
- import { forwardRef } from "react";
5
4
  import { cn } from "../../lib/utilities.js";
6
5
  import gradient_text_module from "./gradient-text.module.js";
7
- const GradientText = /*#__PURE__*/ forwardRef(({ text, className, gradient = "linear-gradient(90deg, #3b82f6 0%, #a855f7 20%, #ec4899 50%, #a855f7 80%, #3b82f6 100%)", neon = false, transition = {
6
+ import * as __rspack_external_react from "react";
7
+ const GradientText = /*#__PURE__*/ __rspack_external_react.forwardRef(({ text, className, gradient = "linear-gradient(90deg, #3b82f6 0%, #a855f7 20%, #ec4899 50%, #a855f7 80%, #3b82f6 100%)", neon = false, transition = {
8
8
  duration: 50,
9
9
  repeat: 1 / 0,
10
10
  ease: "linear"
@@ -1 +1 @@
1
- {"version":3,"file":"components/ui/gradient-text.js","sources":["../../../src/components/ui/gradient-text.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport {motion, type Transition} from \"motion/react\";\r\nimport * as React from \"react\";\r\n\r\nimport {cn} from \"@/lib/utilities\";\r\nimport styles from \"./gradient-text.module.css\";\r\n\r\n/** Props accepted by {@link GradientText}. */\r\nexport interface GradientTextProps extends React.HTMLAttributes<HTMLSpanElement> {\r\n /** Text content rendered with the animated gradient fill. @default undefined */\r\n text: string;\r\n /** CSS gradient string assigned to the animated text fill. @default \"linear-gradient(90deg, #3b82f6 0%, #a855f7 20%, #ec4899 50%, #a855f7 80%, #3b82f6 100%)\" */\r\n gradient?: string;\r\n /** Adds a blurred neon duplicate behind the primary text layer. @default false */\r\n neon?: boolean;\r\n /** Motion timing used for the animated gradient background. @default {duration: 50, repeat: Infinity, ease: \"linear\"} */\r\n transition?: Transition;\r\n}\r\n\r\ntype GradientStyleProperties = React.CSSProperties & {\r\n \"--ac-gradient-text-background\": string;\r\n};\r\n\r\n/**\r\n * Renders animated gradient-filled text with an optional neon glow layer.\r\n *\r\n * @remarks\r\n * - Animated component using the `motion` library\r\n * - Renders a `<span>` 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 * <GradientText text=\"Launch ready\" />\r\n * ```\r\n *\r\n * @see {@link GradientTextProps} for available props\r\n */\r\nconst GradientText = React.forwardRef<HTMLSpanElement, GradientTextProps>(\r\n (\r\n {\r\n text,\r\n className,\r\n gradient = \"linear-gradient(90deg, #3b82f6 0%, #a855f7 20%, #ec4899 50%, #a855f7 80%, #3b82f6 100%)\",\r\n neon = false,\r\n transition = {duration: 50, repeat: Infinity, ease: \"linear\"},\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n const baseStyle: GradientStyleProperties = {\r\n \"--ac-gradient-text-background\": gradient,\r\n };\r\n\r\n return (\r\n <span\r\n ref={ref}\r\n className={cn(styles.root, className)}\r\n {...props}>\r\n <motion.span\r\n className={styles.text}\r\n style={baseStyle}\r\n initial={{backgroundPosition: \"0% 0%\"}}\r\n animate={{backgroundPosition: \"500% 100%\"}}\r\n transition={transition}>\r\n {text}\r\n </motion.span>\r\n\r\n {neon ? (\r\n <motion.span\r\n aria-hidden='true'\r\n className={styles.neon}\r\n style={baseStyle}\r\n initial={{backgroundPosition: \"0% 0%\"}}\r\n animate={{backgroundPosition: \"500% 100%\"}}\r\n transition={transition}>\r\n {text}\r\n </motion.span>\r\n ) : null}\r\n </span>\r\n );\r\n },\r\n);\r\n\r\nGradientText.displayName = \"GradientText\";\r\n\r\nexport {GradientText};\r\n"],"names":["GradientText","React","text","className","gradient","neon","transition","Infinity","props","ref","baseStyle","cn","styles","motion"],"mappings":";;;;;;AAwCA,MAAMA,eAAe,WAAHA,GAAGC,WACnB,CACE,EACEC,IAAI,EACJC,SAAS,EACTC,WAAW,yFAAyF,EACpGC,OAAO,KAAK,EACZC,aAAa;IAAC,UAAU;IAAI,QAAQC;IAAU,MAAM;AAAQ,CAAC,EAC7D,GAAGC,OACJ,EACDC;IAEA,MAAMC,YAAqC;QACzC,iCAAiCN;IACnC;IAEA,OAAO,WAAP,GACE,KAAC;QACC,KAAKK;QACL,WAAWE,GAAGC,qBAAAA,IAAW,EAAET;QAC1B,GAAGK,KAAK;;0BACT,IAACK,OAAO,IAAI;gBACV,WAAWD,qBAAAA,IAAW;gBACtB,OAAOF;gBACP,SAAS;oBAAC,oBAAoB;gBAAO;gBACrC,SAAS;oBAAC,oBAAoB;gBAAW;gBACzC,YAAYJ;0BACXJ;;YAGFG,OAAO,WAAPA,GACC,IAACQ,OAAO,IAAI;gBACV,eAAY;gBACZ,WAAWD,qBAAAA,IAAW;gBACtB,OAAOF;gBACP,SAAS;oBAAC,oBAAoB;gBAAO;gBACrC,SAAS;oBAAC,oBAAoB;gBAAW;gBACzC,YAAYJ;0BACXJ;iBAED;;;AAGV;AAGFF,aAAa,WAAW,GAAG"}
1
+ {"version":3,"file":"components/ui/gradient-text.js","sources":["../../../src/components/ui/gradient-text.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport {motion, type Transition} from \"motion/react\";\r\nimport * as React from \"react\";\r\n\r\nimport {cn} from \"@/lib/utilities\";\r\nimport styles from \"./gradient-text.module.css\";\r\n\r\n/** Props accepted by {@link GradientText}. */\r\nexport interface GradientTextProps extends React.HTMLAttributes<HTMLSpanElement> {\r\n /** Text content rendered with the animated gradient fill. @default undefined */\r\n text: string;\r\n /** CSS gradient string assigned to the animated text fill. @default \"linear-gradient(90deg, #3b82f6 0%, #a855f7 20%, #ec4899 50%, #a855f7 80%, #3b82f6 100%)\" */\r\n gradient?: string;\r\n /** Adds a blurred neon duplicate behind the primary text layer. @default false */\r\n neon?: boolean;\r\n /** Motion timing used for the animated gradient background. @default {duration: 50, repeat: Infinity, ease: \"linear\"} */\r\n transition?: Transition;\r\n}\r\n\r\ntype GradientStyleProperties = React.CSSProperties & {\r\n \"--ac-gradient-text-background\": string;\r\n};\r\n\r\n/**\r\n * Renders animated gradient-filled text with an optional neon glow layer.\r\n *\r\n * @remarks\r\n * - Animated component using the `motion` library\r\n * - Renders a `<span>` 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 * <GradientText text=\"Launch ready\" />\r\n * ```\r\n *\r\n * @see {@link GradientTextProps} for available props\r\n */\r\nconst GradientText = React.forwardRef<HTMLSpanElement, GradientTextProps>(\r\n (\r\n {\r\n text,\r\n className,\r\n gradient = \"linear-gradient(90deg, #3b82f6 0%, #a855f7 20%, #ec4899 50%, #a855f7 80%, #3b82f6 100%)\",\r\n neon = false,\r\n transition = {duration: 50, repeat: Infinity, ease: \"linear\"},\r\n ...props\r\n },\r\n ref,\r\n ) => {\r\n const baseStyle: GradientStyleProperties = {\r\n \"--ac-gradient-text-background\": gradient,\r\n };\r\n\r\n return (\r\n <span\r\n ref={ref}\r\n className={cn(styles.root, className)}\r\n {...props}>\r\n <motion.span\r\n className={styles.text}\r\n style={baseStyle}\r\n initial={{backgroundPosition: \"0% 0%\"}}\r\n animate={{backgroundPosition: \"500% 100%\"}}\r\n transition={transition}>\r\n {text}\r\n </motion.span>\r\n\r\n {neon ? (\r\n <motion.span\r\n aria-hidden='true'\r\n className={styles.neon}\r\n style={baseStyle}\r\n initial={{backgroundPosition: \"0% 0%\"}}\r\n animate={{backgroundPosition: \"500% 100%\"}}\r\n transition={transition}>\r\n {text}\r\n </motion.span>\r\n ) : null}\r\n </span>\r\n );\r\n },\r\n);\r\n\r\nGradientText.displayName = \"GradientText\";\r\n\r\nexport {GradientText};\r\n"],"names":["GradientText","React","text","className","gradient","neon","transition","Infinity","props","ref","baseStyle","cn","styles","motion"],"mappings":";;;;;;AAwCA,MAAMA,eAAe,WAAHA,GAAGC,wBAAAA,UAAgB,CACnC,CACE,EACEC,IAAI,EACJC,SAAS,EACTC,WAAW,yFAAyF,EACpGC,OAAO,KAAK,EACZC,aAAa;IAAC,UAAU;IAAI,QAAQC;IAAU,MAAM;AAAQ,CAAC,EAC7D,GAAGC,OACJ,EACDC;IAEA,MAAMC,YAAqC;QACzC,iCAAiCN;IACnC;IAEA,OAAO,WAAP,GACE,KAAC;QACC,KAAKK;QACL,WAAWE,GAAGC,qBAAAA,IAAW,EAAET;QAC1B,GAAGK,KAAK;;0BACT,IAACK,OAAO,IAAI;gBACV,WAAWD,qBAAAA,IAAW;gBACtB,OAAOF;gBACP,SAAS;oBAAC,oBAAoB;gBAAO;gBACrC,SAAS;oBAAC,oBAAoB;gBAAW;gBACzC,YAAYJ;0BACXJ;;YAGFG,OAAO,WAAPA,GACC,IAACQ,OAAO,IAAI;gBACV,eAAY;gBACZ,WAAWD,qBAAAA,IAAW;gBACtB,OAAOF;gBACP,SAAS;oBAAC,oBAAoB;gBAAO;gBACrC,SAAS;oBAAC,oBAAoB;gBAAW;gBACzC,YAAYJ;0BACXJ;iBAED;;;AAGV;AAGFF,aAAa,WAAW,GAAG"}
@@ -1 +1 @@
1
- {"version":3,"sources":["webpack://./home/runner/work/arolariu.ro/arolariu.ro/packages/components/src/components/ui/gradient-text.module.css","webpack://./src/components/ui/gradient-text.module.css"],"names":[],"mappings":"AADA;ECEE,qBAAqB;EACrB,kBAAkB;AACpB;;AAEA;EACE,qBAAqB;EACrB,oDAAoD;EACpD,YAAY;EACZ,wBAAwB;EACxB,0BAA0B;EAC1B,SAAS;AACX;;AAEA;EACE,iBAAiB;EACjB,4BAA4B;EAC5B,oBAAoB;EACpB,kBAAkB;EAClB,QAAQ;AACV","sourcesContent":[".root{display:inline-block;position:relative}.neon,.text{-webkit-background-clip:text;background-clip:text;background-image:var(--ac-gradient-text-background);background-position:0 0;background-size:700% 100%;color:transparent;margin:0}.neon{filter:blur(8px);inset:0;mix-blend-mode:plus-lighter;pointer-events:none;position:absolute}",".root {\n display: inline-block;\n position: relative;\n}\n\n.neon, .text {\n background-clip: text;\n background-image: var(--ac-gradient-text-background);\n color: #0000;\n background-position: 0 0;\n background-size: 700% 100%;\n margin: 0;\n}\n\n.neon {\n filter: blur(8px);\n mix-blend-mode: plus-lighter;\n pointer-events: none;\n position: absolute;\n inset: 0;\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/gradient-text.module.css","webpack://./src/components/ui/gradient-text.module.css"],"names":[],"mappings":"AAAA;ECCE,qBAAqB;EACrB,kBAAkB;AACpB;;ADH6C;ECM3C,qBAAqB;EACrB,oDAAoD;EACpD,YAAY;EACZ,wBAAwB;EACxB,0BAA0B;EAC1B,SAAS;AACX;;ADZ4O;ECe1O,iBAAiB;EACjB,4BAA4B;EAC5B,oBAAoB;EACpB,kBAAkB;EAClB,QAAQ;AACV","sourcesContent":[".root{display:inline-block;position:relative}.neon,.text{-webkit-background-clip:text;background-clip:text;background-image:var(--ac-gradient-text-background);background-position:0 0;background-size:700% 100%;color:transparent;margin:0}.neon{filter:blur(8px);inset:0;mix-blend-mode:plus-lighter;pointer-events:none;position:absolute}",".root {\n display: inline-block;\n position: relative;\n}\n\n.neon, .text {\n background-clip: text;\n background-image: var(--ac-gradient-text-background);\n color: #0000;\n background-position: 0 0;\n background-size: 700% 100%;\n margin: 0;\n}\n\n.neon {\n filter: blur(8px);\n mix-blend-mode: plus-lighter;\n pointer-events: none;\n position: absolute;\n inset: 0;\n}\n"],"sourceRoot":""}
@@ -1,19 +1,19 @@
1
1
  "use client";
2
2
  import { jsx } from "react/jsx-runtime";
3
3
  import { motion, useInView } from "motion/react";
4
- import { forwardRef, useImperativeHandle, useRef } from "react";
5
4
  import { cn } from "../../lib/utilities.js";
6
5
  import highlight_text_module from "./highlight-text.module.js";
6
+ import * as __rspack_external_react from "react";
7
7
  const animation = {
8
8
  backgroundSize: "100% 100%"
9
9
  };
10
- const HighlightText = /*#__PURE__*/ forwardRef(({ text, className, inView = false, inViewMargin = "0px", inViewOnce = true, transition = {
10
+ const HighlightText = /*#__PURE__*/ __rspack_external_react.forwardRef(({ text, className, inView = false, inViewMargin = "0px", inViewOnce = true, transition = {
11
11
  duration: 2,
12
12
  ease: "easeInOut"
13
13
  }, ...props }, ref)=>{
14
14
  const { key: _ignoredKey, ...restProps } = props;
15
- const localRef = useRef(null);
16
- useImperativeHandle(ref, ()=>localRef.current, []);
15
+ const localRef = __rspack_external_react.useRef(null);
16
+ __rspack_external_react.useImperativeHandle(ref, ()=>localRef.current, []);
17
17
  const inViewResult = useInView(localRef, {
18
18
  once: inViewOnce,
19
19
  margin: inViewMargin
@@ -1 +1 @@
1
- {"version":3,"file":"components/ui/highlight-text.js","sources":["../../../src/components/ui/highlight-text.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport {motion, useInView, type HTMLMotionProps, type Transition, type UseInViewOptions} from \"motion/react\";\r\nimport * as React from \"react\";\r\n\r\nimport {cn} from \"@/lib/utilities\";\r\nimport styles from \"./highlight-text.module.css\";\r\n\r\n/** Props accepted by {@link HighlightText}. */\r\nexport interface HighlightTextProps extends HTMLMotionProps<\"span\"> {\r\n /** Inline text content that receives the animated highlight sweep. @default undefined */\r\n text: string;\r\n /** Delays the highlight animation until the text enters the viewport. @default false */\r\n inView?: boolean;\r\n /** Margin passed to the in-view observer when `inView` is enabled. @default \"0px\" */\r\n inViewMargin?: UseInViewOptions[\"margin\"];\r\n /** Prevents the in-view animation from replaying after the first reveal. @default true */\r\n inViewOnce?: boolean;\r\n /** Motion timing used for the highlight fill animation. @default {duration: 2, ease: \"easeInOut\"} */\r\n transition?: Transition;\r\n}\r\n\r\nconst animation = {backgroundSize: \"100% 100%\"};\r\n\r\n/**\r\n * Animates a gradient highlight fill behind inline text content.\r\n *\r\n * @remarks\r\n * - Animated component using the `motion` library\r\n * - Renders a `<span>` 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 * <HighlightText text=\"Highlighted copy\" />\r\n * ```\r\n *\r\n * @see {@link HighlightTextProps} for available props\r\n */\r\nconst HighlightText = React.forwardRef<HTMLSpanElement, HighlightTextProps>(\r\n (\r\n {text, className, inView = false, inViewMargin = \"0px\", inViewOnce = true, transition = {duration: 2, ease: \"easeInOut\"}, ...props},\r\n ref,\r\n ) => {\r\n // eslint-disable-next-line sonarjs/no-unused-vars -- removing React key avoids implicit key spreading\r\n const {key: _ignoredKey, ...restProps} = props;\r\n const localRef = React.useRef<HTMLSpanElement>(null);\r\n\r\n React.useImperativeHandle(ref, () => localRef.current!, []);\r\n\r\n const inViewResult = useInView(localRef, {\r\n once: inViewOnce,\r\n margin: inViewMargin,\r\n });\r\n const isInView = !inView || inViewResult;\r\n\r\n return (\r\n <motion.span\r\n ref={localRef}\r\n initial={{\r\n backgroundSize: \"0% 100%\",\r\n }}\r\n animate={isInView ? animation : undefined}\r\n transition={transition}\r\n className={cn(styles.highlight, className)}\r\n {...restProps}>\r\n {text}\r\n </motion.span>\r\n );\r\n },\r\n);\r\n\r\nHighlightText.displayName = \"HighlightText\";\r\n\r\nexport {HighlightText};\r\n"],"names":["animation","HighlightText","React","text","className","inView","inViewMargin","inViewOnce","transition","props","ref","_ignoredKey","restProps","localRef","inViewResult","useInView","isInView","motion","undefined","cn","styles"],"mappings":";;;;;;AAsBA,MAAMA,YAAY;IAAC,gBAAgB;AAAW;AAkB9C,MAAMC,gBAAgB,WAAHA,GAAGC,WACpB,CACE,EAACC,IAAI,EAAEC,SAAS,EAAEC,SAAS,KAAK,EAAEC,eAAe,KAAK,EAAEC,aAAa,IAAI,EAAEC,aAAa;IAAC,UAAU;IAAG,MAAM;AAAW,CAAC,EAAE,GAAGC,OAAM,EACnIC;IAGA,MAAM,EAAC,KAAKC,WAAW,EAAE,GAAGC,WAAU,GAAGH;IACzC,MAAMI,WAAWX,OAA8B;IAE/CA,oBAA0BQ,KAAK,IAAMG,SAAS,OAAO,EAAG,EAAE;IAE1D,MAAMC,eAAeC,UAAUF,UAAU;QACvC,MAAMN;QACN,QAAQD;IACV;IACA,MAAMU,WAAW,CAACX,UAAUS;IAE5B,OAAO,WAAP,GACE,IAACG,OAAO,IAAI;QACV,KAAKJ;QACL,SAAS;YACP,gBAAgB;QAClB;QACA,SAASG,WAAWhB,YAAYkB;QAChC,YAAYV;QACZ,WAAWW,GAAGC,sBAAAA,SAAgB,EAAEhB;QAC/B,GAAGQ,SAAS;kBACZT;;AAGP;AAGFF,cAAc,WAAW,GAAG"}
1
+ {"version":3,"file":"components/ui/highlight-text.js","sources":["../../../src/components/ui/highlight-text.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport {motion, useInView, type HTMLMotionProps, type Transition, type UseInViewOptions} from \"motion/react\";\r\nimport * as React from \"react\";\r\n\r\nimport {cn} from \"@/lib/utilities\";\r\nimport styles from \"./highlight-text.module.css\";\r\n\r\n/** Props accepted by {@link HighlightText}. */\r\nexport interface HighlightTextProps extends HTMLMotionProps<\"span\"> {\r\n /** Inline text content that receives the animated highlight sweep. @default undefined */\r\n text: string;\r\n /** Delays the highlight animation until the text enters the viewport. @default false */\r\n inView?: boolean;\r\n /** Margin passed to the in-view observer when `inView` is enabled. @default \"0px\" */\r\n inViewMargin?: UseInViewOptions[\"margin\"];\r\n /** Prevents the in-view animation from replaying after the first reveal. @default true */\r\n inViewOnce?: boolean;\r\n /** Motion timing used for the highlight fill animation. @default {duration: 2, ease: \"easeInOut\"} */\r\n transition?: Transition;\r\n}\r\n\r\nconst animation = {backgroundSize: \"100% 100%\"};\r\n\r\n/**\r\n * Animates a gradient highlight fill behind inline text content.\r\n *\r\n * @remarks\r\n * - Animated component using the `motion` library\r\n * - Renders a `<span>` 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 * <HighlightText text=\"Highlighted copy\" />\r\n * ```\r\n *\r\n * @see {@link HighlightTextProps} for available props\r\n */\r\nconst HighlightText = React.forwardRef<HTMLSpanElement, HighlightTextProps>(\r\n (\r\n {text, className, inView = false, inViewMargin = \"0px\", inViewOnce = true, transition = {duration: 2, ease: \"easeInOut\"}, ...props},\r\n ref,\r\n ) => {\r\n // eslint-disable-next-line sonarjs/no-unused-vars -- removing React key avoids implicit key spreading\r\n const {key: _ignoredKey, ...restProps} = props;\r\n const localRef = React.useRef<HTMLSpanElement>(null);\r\n\r\n React.useImperativeHandle(ref, () => localRef.current!, []);\r\n\r\n const inViewResult = useInView(localRef, {\r\n once: inViewOnce,\r\n margin: inViewMargin,\r\n });\r\n const isInView = !inView || inViewResult;\r\n\r\n return (\r\n <motion.span\r\n ref={localRef}\r\n initial={{\r\n backgroundSize: \"0% 100%\",\r\n }}\r\n animate={isInView ? animation : undefined}\r\n transition={transition}\r\n className={cn(styles.highlight, className)}\r\n {...restProps}>\r\n {text}\r\n </motion.span>\r\n );\r\n },\r\n);\r\n\r\nHighlightText.displayName = \"HighlightText\";\r\n\r\nexport {HighlightText};\r\n"],"names":["animation","HighlightText","React","text","className","inView","inViewMargin","inViewOnce","transition","props","ref","_ignoredKey","restProps","localRef","inViewResult","useInView","isInView","motion","undefined","cn","styles"],"mappings":";;;;;;AAsBA,MAAMA,YAAY;IAAC,gBAAgB;AAAW;AAkB9C,MAAMC,gBAAgB,WAAHA,GAAGC,wBAAAA,UAAgB,CACpC,CACE,EAACC,IAAI,EAAEC,SAAS,EAAEC,SAAS,KAAK,EAAEC,eAAe,KAAK,EAAEC,aAAa,IAAI,EAAEC,aAAa;IAAC,UAAU;IAAG,MAAM;AAAW,CAAC,EAAE,GAAGC,OAAM,EACnIC;IAGA,MAAM,EAAC,KAAKC,WAAW,EAAE,GAAGC,WAAU,GAAGH;IACzC,MAAMI,WAAWX,wBAAAA,MAAY,CAAkB;IAE/CA,wBAAAA,mBAAyB,CAACQ,KAAK,IAAMG,SAAS,OAAO,EAAG,EAAE;IAE1D,MAAMC,eAAeC,UAAUF,UAAU;QACvC,MAAMN;QACN,QAAQD;IACV;IACA,MAAMU,WAAW,CAACX,UAAUS;IAE5B,OAAO,WAAP,GACE,IAACG,OAAO,IAAI;QACV,KAAKJ;QACL,SAAS;YACP,gBAAgB;QAClB;QACA,SAASG,WAAWhB,YAAYkB;QAChC,YAAYV;QACZ,WAAWW,GAAGC,sBAAAA,SAAgB,EAAEhB;QAC/B,GAAGQ,SAAS;kBACZT;;AAGP;AAGFF,cAAc,WAAW,GAAG"}
@@ -1 +1 @@
1
- {"version":3,"sources":["webpack://./home/runner/work/arolariu.ro/arolariu.ro/packages/components/src/components/ui/highlight-text.module.css","webpack://./src/components/ui/highlight-text.module.css"],"names":[],"mappings":"AADA;ECEE,kCAAkC;EAClC,0DAA0D;EAC1D,sBAAsB;EACtB,4BAA4B;EAC5B,qBAAqB;EACrB,eAAe;EACf,kBAAkB;AACpB;;AAEA;EACE,8HAA8H;AAChI","sourcesContent":[".highlight{background-image:linear-gradient(90deg,#dbeafe,#f3e8ff);background-position:0;background-repeat:no-repeat;border-radius:var(--ac-radius-lg);display:inline;padding:.25rem .5rem;position:relative}:global(.dark) .highlight,:global([data-theme=dark]) .highlight{background-image:linear-gradient(90deg,color-mix(in oklch,var(--ac-primary),#fff 35%) 0,color-mix(in oklch,#a855f7,#fff 15%) 100%)}",".highlight {\n border-radius: var(--ac-radius-lg);\n background-image: linear-gradient(90deg, #dbeafe, #f3e8ff);\n background-position: 0;\n background-repeat: no-repeat;\n padding: .25rem .5rem;\n display: inline;\n position: relative;\n}\n\n:is(:global(.dark) .highlight, :global([data-theme=dark]) .highlight) {\n background-image: linear-gradient(90deg,color-mix(in oklch,var(--ac-primary),#fff 35%) 0,oklch(68.2819% .197661 303.901) 100%);\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/highlight-text.module.css","webpack://./src/components/ui/highlight-text.module.css"],"names":[],"mappings":"AAAA;ECCE,kCAAkC;EAClC,0DAA0D;EAC1D,sBAAsB;EACtB,4BAA4B;EAC5B,qBAAqB;EACrB,eAAe;EACf,kBAAkB;AACpB;;ADR6M;ECW3M,8HAA8H;AAChI","sourcesContent":[".highlight{background-image:linear-gradient(90deg,#dbeafe,#f3e8ff);background-position:0;background-repeat:no-repeat;border-radius:var(--ac-radius-lg);display:inline;padding:.25rem .5rem;position:relative}:global(.dark) .highlight,:global([data-theme=dark]) .highlight{background-image:linear-gradient(90deg,color-mix(in oklch,var(--ac-primary),#fff 35%) 0,color-mix(in oklch,#a855f7,#fff 15%) 100%)}",".highlight {\n border-radius: var(--ac-radius-lg);\n background-image: linear-gradient(90deg, #dbeafe, #f3e8ff);\n background-position: 0;\n background-repeat: no-repeat;\n padding: .25rem .5rem;\n display: inline;\n position: relative;\n}\n\n:is(:global(.dark) .highlight, :global([data-theme=dark]) .highlight) {\n background-image: linear-gradient(90deg,color-mix(in oklch,var(--ac-primary),#fff 35%) 0,oklch(68.2819% .197661 303.901) 100%);\n}\n"],"sourceRoot":""}