@tetherto/dev-websites-core 0.2.1 → 0.3.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 (304) hide show
  1. package/README.md +62 -9
  2. package/dist/cms/index.d.mts +2 -2
  3. package/dist/cms/index.mjs +2 -2
  4. package/dist/{cms-5bS91IRZ.mjs → cms.mjs} +2 -2
  5. package/dist/cms.mjs.map +1 -0
  6. package/dist/i18n/index.d.mts +1 -1
  7. package/dist/i18n/index.mjs +1 -1
  8. package/dist/{i18n-Dy3VrbBw.mjs → i18n.mjs} +1 -1
  9. package/dist/i18n.mjs.map +1 -0
  10. package/dist/index.d.mts +214 -6
  11. package/dist/index.d.mts.map +1 -0
  12. package/dist/index.mjs +6 -6
  13. package/dist/{index-D36IEwUg.d.mts → index2.d.mts} +1 -1
  14. package/dist/index2.d.mts.map +1 -0
  15. package/dist/{index-tTs9h9BS.d.mts → index3.d.mts} +2 -2
  16. package/dist/index3.d.mts.map +1 -0
  17. package/dist/{index-Dyi7DDoO.d.mts → index4.d.mts} +1 -1
  18. package/dist/index4.d.mts.map +1 -0
  19. package/dist/index5.d.mts +6 -0
  20. package/dist/{logger-BPURnavq.mjs → logger.mjs} +1 -1
  21. package/dist/logger.mjs.map +1 -0
  22. package/dist/{readMediaBuffer-1C3QTpkO.d.mts → readMediaBuffer.d.mts} +1 -1
  23. package/dist/readMediaBuffer.d.mts.map +1 -0
  24. package/dist/{readMediaBuffer-DWkTbYVn.mjs → readMediaBuffer.mjs} +2 -2
  25. package/dist/readMediaBuffer.mjs.map +1 -0
  26. package/dist/seo/index.d.mts +1 -1
  27. package/dist/seo/index.mjs +1 -1
  28. package/dist/{seo-e5XjgQ7l.mjs → seo.mjs} +3 -3
  29. package/dist/seo.mjs.map +1 -0
  30. package/dist/ui/a11y/focus.d.mts +6 -0
  31. package/dist/ui/a11y/focus.d.mts.map +1 -0
  32. package/dist/ui/a11y/focus.mjs +7 -0
  33. package/dist/ui/a11y/focus.mjs.map +1 -0
  34. package/dist/ui/a11y/index.d.mts +4 -0
  35. package/dist/ui/a11y/index.mjs +4 -0
  36. package/dist/ui/carousel/index.d.mts +3 -0
  37. package/dist/ui/carousel/index.mjs +3 -0
  38. package/dist/ui/components/Accordion/Accordion.d.mts +16 -0
  39. package/dist/ui/components/Accordion/Accordion.d.mts.map +1 -0
  40. package/dist/ui/components/Accordion/Accordion.mjs +51 -0
  41. package/dist/ui/components/Accordion/Accordion.mjs.map +1 -0
  42. package/dist/ui/components/Accordion/index.d.mts +2 -0
  43. package/dist/ui/components/Accordion/index.mjs +2 -0
  44. package/dist/ui/components/Avatar/Avatar.d.mts +9 -0
  45. package/dist/ui/components/Avatar/Avatar.d.mts.map +1 -0
  46. package/dist/ui/components/Avatar/Avatar.mjs +15 -0
  47. package/dist/ui/components/Avatar/Avatar.mjs.map +1 -0
  48. package/dist/ui/components/Avatar/index.d.mts +2 -0
  49. package/dist/ui/components/Avatar/index.mjs +2 -0
  50. package/dist/ui/components/Badge/Badge.d.mts +14 -0
  51. package/dist/ui/components/Badge/Badge.d.mts.map +1 -0
  52. package/dist/ui/components/Badge/Badge.mjs +30 -0
  53. package/dist/ui/components/Badge/Badge.mjs.map +1 -0
  54. package/dist/ui/components/Badge/index.d.mts +2 -0
  55. package/dist/ui/components/Badge/index.mjs +2 -0
  56. package/dist/ui/components/BadgeVersion/BadgeVersion.d.mts +24 -0
  57. package/dist/ui/components/BadgeVersion/BadgeVersion.d.mts.map +1 -0
  58. package/dist/ui/components/BadgeVersion/BadgeVersion.mjs +66 -0
  59. package/dist/ui/components/BadgeVersion/BadgeVersion.mjs.map +1 -0
  60. package/dist/ui/components/BadgeVersion/index.d.mts +2 -0
  61. package/dist/ui/components/BadgeVersion/index.mjs +2 -0
  62. package/dist/ui/components/Button/Button.d.mts +14 -0
  63. package/dist/ui/components/Button/Button.d.mts.map +1 -0
  64. package/dist/ui/components/Button/Button.mjs +48 -0
  65. package/dist/ui/components/Button/Button.mjs.map +1 -0
  66. package/dist/ui/components/Button/index.d.mts +2 -0
  67. package/dist/ui/components/Button/index.mjs +2 -0
  68. package/dist/ui/components/Card/Card.d.mts +14 -0
  69. package/dist/ui/components/Card/Card.d.mts.map +1 -0
  70. package/dist/ui/components/Card/Card.mjs +40 -0
  71. package/dist/ui/components/Card/Card.mjs.map +1 -0
  72. package/dist/ui/components/Card/index.d.mts +2 -0
  73. package/dist/ui/components/Card/index.mjs +2 -0
  74. package/dist/ui/components/Carousel/Carousel.d.mts +42 -0
  75. package/dist/ui/components/Carousel/Carousel.d.mts.map +1 -0
  76. package/dist/ui/components/Carousel/Carousel.mjs +164 -0
  77. package/dist/ui/components/Carousel/Carousel.mjs.map +1 -0
  78. package/dist/ui/components/Carousel/index.d.mts +2 -0
  79. package/dist/ui/components/Carousel/index.mjs +2 -0
  80. package/dist/ui/components/Checkbox/Checkbox.d.mts +8 -0
  81. package/dist/ui/components/Checkbox/Checkbox.d.mts.map +1 -0
  82. package/dist/ui/components/Checkbox/Checkbox.mjs +39 -0
  83. package/dist/ui/components/Checkbox/Checkbox.mjs.map +1 -0
  84. package/dist/ui/components/Checkbox/index.d.mts +2 -0
  85. package/dist/ui/components/Checkbox/index.mjs +2 -0
  86. package/dist/ui/components/CodeBlock/CodeBlock.d.mts +22 -0
  87. package/dist/ui/components/CodeBlock/CodeBlock.d.mts.map +1 -0
  88. package/dist/ui/components/CodeBlock/CodeBlock.mjs +66 -0
  89. package/dist/ui/components/CodeBlock/CodeBlock.mjs.map +1 -0
  90. package/dist/ui/components/CodeBlock/index.d.mts +2 -0
  91. package/dist/ui/components/CodeBlock/index.mjs +2 -0
  92. package/dist/ui/components/CodeBlockTabs/CodeBlockTabs.d.mts +19 -0
  93. package/dist/ui/components/CodeBlockTabs/CodeBlockTabs.d.mts.map +1 -0
  94. package/dist/ui/components/CodeBlockTabs/CodeBlockTabs.mjs +59 -0
  95. package/dist/ui/components/CodeBlockTabs/CodeBlockTabs.mjs.map +1 -0
  96. package/dist/ui/components/CodeBlockTabs/index.d.mts +2 -0
  97. package/dist/ui/components/CodeBlockTabs/index.mjs +2 -0
  98. package/dist/ui/components/CollapsibleSection/CollapsibleSection.d.mts +13 -0
  99. package/dist/ui/components/CollapsibleSection/CollapsibleSection.d.mts.map +1 -0
  100. package/dist/ui/components/CollapsibleSection/CollapsibleSection.mjs +55 -0
  101. package/dist/ui/components/CollapsibleSection/CollapsibleSection.mjs.map +1 -0
  102. package/dist/ui/components/CollapsibleSection/index.d.mts +2 -0
  103. package/dist/ui/components/CollapsibleSection/index.mjs +2 -0
  104. package/dist/ui/components/CopyButton/CopyButton.d.mts +12 -0
  105. package/dist/ui/components/CopyButton/CopyButton.d.mts.map +1 -0
  106. package/dist/ui/components/CopyButton/CopyButton.mjs +45 -0
  107. package/dist/ui/components/CopyButton/CopyButton.mjs.map +1 -0
  108. package/dist/ui/components/CopyButton/index.d.mts +2 -0
  109. package/dist/ui/components/CopyButton/index.mjs +2 -0
  110. package/dist/ui/components/Dialog/Dialog.d.mts +26 -0
  111. package/dist/ui/components/Dialog/Dialog.d.mts.map +1 -0
  112. package/dist/ui/components/Dialog/Dialog.mjs +79 -0
  113. package/dist/ui/components/Dialog/Dialog.mjs.map +1 -0
  114. package/dist/ui/components/Dialog/index.d.mts +2 -0
  115. package/dist/ui/components/Dialog/index.mjs +2 -0
  116. package/dist/ui/components/EmptyState/EmptyState.d.mts +18 -0
  117. package/dist/ui/components/EmptyState/EmptyState.d.mts.map +1 -0
  118. package/dist/ui/components/EmptyState/EmptyState.mjs +36 -0
  119. package/dist/ui/components/EmptyState/EmptyState.mjs.map +1 -0
  120. package/dist/ui/components/EmptyState/index.d.mts +2 -0
  121. package/dist/ui/components/EmptyState/index.mjs +2 -0
  122. package/dist/ui/components/FieldError/FieldError.d.mts +14 -0
  123. package/dist/ui/components/FieldError/FieldError.d.mts.map +1 -0
  124. package/dist/ui/components/FieldError/FieldError.mjs +19 -0
  125. package/dist/ui/components/FieldError/FieldError.mjs.map +1 -0
  126. package/dist/ui/components/FieldError/index.d.mts +2 -0
  127. package/dist/ui/components/FieldError/index.mjs +2 -0
  128. package/dist/ui/components/FormattedDate/FormattedDate.d.mts +15 -0
  129. package/dist/ui/components/FormattedDate/FormattedDate.d.mts.map +1 -0
  130. package/dist/ui/components/FormattedDate/FormattedDate.mjs +23 -0
  131. package/dist/ui/components/FormattedDate/FormattedDate.mjs.map +1 -0
  132. package/dist/ui/components/FormattedDate/index.d.mts +2 -0
  133. package/dist/ui/components/FormattedDate/index.mjs +2 -0
  134. package/dist/ui/components/IconButton/IconButton.d.mts +10 -0
  135. package/dist/ui/components/IconButton/IconButton.d.mts.map +1 -0
  136. package/dist/ui/components/IconButton/IconButton.mjs +19 -0
  137. package/dist/ui/components/IconButton/IconButton.mjs.map +1 -0
  138. package/dist/ui/components/IconButton/index.d.mts +2 -0
  139. package/dist/ui/components/IconButton/index.mjs +2 -0
  140. package/dist/ui/components/Input/Input.d.mts +12 -0
  141. package/dist/ui/components/Input/Input.d.mts.map +1 -0
  142. package/dist/ui/components/Input/Input.mjs +43 -0
  143. package/dist/ui/components/Input/Input.mjs.map +1 -0
  144. package/dist/ui/components/Input/index.d.mts +2 -0
  145. package/dist/ui/components/Input/index.mjs +2 -0
  146. package/dist/ui/components/Label/Label.d.mts +11 -0
  147. package/dist/ui/components/Label/Label.d.mts.map +1 -0
  148. package/dist/ui/components/Label/Label.mjs +18 -0
  149. package/dist/ui/components/Label/Label.mjs.map +1 -0
  150. package/dist/ui/components/Label/index.d.mts +2 -0
  151. package/dist/ui/components/Label/index.mjs +2 -0
  152. package/dist/ui/components/LazyVideo/LazyVideo.d.mts +23 -0
  153. package/dist/ui/components/LazyVideo/LazyVideo.d.mts.map +1 -0
  154. package/dist/ui/components/LazyVideo/LazyVideo.mjs +57 -0
  155. package/dist/ui/components/LazyVideo/LazyVideo.mjs.map +1 -0
  156. package/dist/ui/components/LazyVideo/index.d.mts +2 -0
  157. package/dist/ui/components/LazyVideo/index.mjs +2 -0
  158. package/dist/ui/components/Pagination/Pagination.d.mts +38 -0
  159. package/dist/ui/components/Pagination/Pagination.d.mts.map +1 -0
  160. package/dist/ui/components/Pagination/Pagination.mjs +110 -0
  161. package/dist/ui/components/Pagination/Pagination.mjs.map +1 -0
  162. package/dist/ui/components/Pagination/index.d.mts +2 -0
  163. package/dist/ui/components/Pagination/index.mjs +2 -0
  164. package/dist/ui/components/PaginationItem/PaginationItem.d.mts +15 -0
  165. package/dist/ui/components/PaginationItem/PaginationItem.d.mts.map +1 -0
  166. package/dist/ui/components/PaginationItem/PaginationItem.mjs +34 -0
  167. package/dist/ui/components/PaginationItem/PaginationItem.mjs.map +1 -0
  168. package/dist/ui/components/PaginationItem/index.d.mts +2 -0
  169. package/dist/ui/components/PaginationItem/index.mjs +2 -0
  170. package/dist/ui/components/PasswordInput/PasswordInput.d.mts +10 -0
  171. package/dist/ui/components/PasswordInput/PasswordInput.d.mts.map +1 -0
  172. package/dist/ui/components/PasswordInput/PasswordInput.mjs +39 -0
  173. package/dist/ui/components/PasswordInput/PasswordInput.mjs.map +1 -0
  174. package/dist/ui/components/PasswordInput/index.d.mts +2 -0
  175. package/dist/ui/components/PasswordInput/index.mjs +2 -0
  176. package/dist/ui/components/ProgressStepper/ProgressStepper.d.mts +20 -0
  177. package/dist/ui/components/ProgressStepper/ProgressStepper.d.mts.map +1 -0
  178. package/dist/ui/components/ProgressStepper/ProgressStepper.mjs +39 -0
  179. package/dist/ui/components/ProgressStepper/ProgressStepper.mjs.map +1 -0
  180. package/dist/ui/components/ProgressStepper/index.d.mts +2 -0
  181. package/dist/ui/components/ProgressStepper/index.mjs +2 -0
  182. package/dist/ui/components/Prose/Prose.d.mts +10 -0
  183. package/dist/ui/components/Prose/Prose.d.mts.map +1 -0
  184. package/dist/ui/components/Prose/Prose.mjs +19 -0
  185. package/dist/ui/components/Prose/Prose.mjs.map +1 -0
  186. package/dist/ui/components/Prose/index.d.mts +2 -0
  187. package/dist/ui/components/Prose/index.mjs +2 -0
  188. package/dist/ui/components/Radio/Radio.d.mts +8 -0
  189. package/dist/ui/components/Radio/Radio.d.mts.map +1 -0
  190. package/dist/ui/components/Radio/Radio.mjs +25 -0
  191. package/dist/ui/components/Radio/Radio.mjs.map +1 -0
  192. package/dist/ui/components/Radio/index.d.mts +2 -0
  193. package/dist/ui/components/Radio/index.mjs +2 -0
  194. package/dist/ui/components/Reveal/Reveal.d.mts +10 -0
  195. package/dist/ui/components/Reveal/Reveal.d.mts.map +1 -0
  196. package/dist/ui/components/Reveal/Reveal.mjs +18 -0
  197. package/dist/ui/components/Reveal/Reveal.mjs.map +1 -0
  198. package/dist/ui/components/Reveal/index.d.mts +2 -0
  199. package/dist/ui/components/Reveal/index.mjs +2 -0
  200. package/dist/ui/components/SearchInput/SearchInput.d.mts +15 -0
  201. package/dist/ui/components/SearchInput/SearchInput.d.mts.map +1 -0
  202. package/dist/ui/components/SearchInput/SearchInput.mjs +28 -0
  203. package/dist/ui/components/SearchInput/SearchInput.mjs.map +1 -0
  204. package/dist/ui/components/SearchInput/index.d.mts +2 -0
  205. package/dist/ui/components/SearchInput/index.mjs +2 -0
  206. package/dist/ui/components/Select/Select.d.mts +34 -0
  207. package/dist/ui/components/Select/Select.d.mts.map +1 -0
  208. package/dist/ui/components/Select/Select.mjs +167 -0
  209. package/dist/ui/components/Select/Select.mjs.map +1 -0
  210. package/dist/ui/components/Select/index.d.mts +2 -0
  211. package/dist/ui/components/Select/index.mjs +2 -0
  212. package/dist/ui/components/Sheet/Sheet.d.mts +19 -0
  213. package/dist/ui/components/Sheet/Sheet.d.mts.map +1 -0
  214. package/dist/ui/components/Sheet/Sheet.mjs +59 -0
  215. package/dist/ui/components/Sheet/Sheet.mjs.map +1 -0
  216. package/dist/ui/components/Sheet/index.d.mts +2 -0
  217. package/dist/ui/components/Sheet/index.mjs +2 -0
  218. package/dist/ui/components/StaggerReveal/StaggerReveal.d.mts +10 -0
  219. package/dist/ui/components/StaggerReveal/StaggerReveal.d.mts.map +1 -0
  220. package/dist/ui/components/StaggerReveal/StaggerReveal.mjs +31 -0
  221. package/dist/ui/components/StaggerReveal/StaggerReveal.mjs.map +1 -0
  222. package/dist/ui/components/StaggerReveal/index.d.mts +2 -0
  223. package/dist/ui/components/StaggerReveal/index.mjs +2 -0
  224. package/dist/ui/components/Stepper/Stepper.d.mts +15 -0
  225. package/dist/ui/components/Stepper/Stepper.d.mts.map +1 -0
  226. package/dist/ui/components/Stepper/Stepper.mjs +38 -0
  227. package/dist/ui/components/Stepper/Stepper.mjs.map +1 -0
  228. package/dist/ui/components/Stepper/index.d.mts +2 -0
  229. package/dist/ui/components/Stepper/index.mjs +2 -0
  230. package/dist/ui/components/Switch/Switch.d.mts +12 -0
  231. package/dist/ui/components/Switch/Switch.d.mts.map +1 -0
  232. package/dist/ui/components/Switch/Switch.mjs +34 -0
  233. package/dist/ui/components/Switch/Switch.mjs.map +1 -0
  234. package/dist/ui/components/Switch/index.d.mts +2 -0
  235. package/dist/ui/components/Switch/index.mjs +2 -0
  236. package/dist/ui/components/TextButton/TextButton.d.mts +9 -0
  237. package/dist/ui/components/TextButton/TextButton.d.mts.map +1 -0
  238. package/dist/ui/components/TextButton/TextButton.mjs +16 -0
  239. package/dist/ui/components/TextButton/TextButton.mjs.map +1 -0
  240. package/dist/ui/components/TextButton/index.d.mts +2 -0
  241. package/dist/ui/components/TextButton/index.mjs +2 -0
  242. package/dist/ui/components/Textarea/Textarea.d.mts +9 -0
  243. package/dist/ui/components/Textarea/Textarea.d.mts.map +1 -0
  244. package/dist/ui/components/Textarea/Textarea.mjs +27 -0
  245. package/dist/ui/components/Textarea/Textarea.mjs.map +1 -0
  246. package/dist/ui/components/Textarea/index.d.mts +2 -0
  247. package/dist/ui/components/Textarea/index.mjs +2 -0
  248. package/dist/ui/components/Toast/Toast.d.mts +20 -0
  249. package/dist/ui/components/Toast/Toast.d.mts.map +1 -0
  250. package/dist/ui/components/Toast/Toast.mjs +128 -0
  251. package/dist/ui/components/Toast/Toast.mjs.map +1 -0
  252. package/dist/ui/components/Toast/index.d.mts +2 -0
  253. package/dist/ui/components/Toast/index.mjs +2 -0
  254. package/dist/ui/components/Tooltip/Tooltip.d.mts +11 -0
  255. package/dist/ui/components/Tooltip/Tooltip.d.mts.map +1 -0
  256. package/dist/ui/components/Tooltip/Tooltip.mjs +20 -0
  257. package/dist/ui/components/Tooltip/Tooltip.mjs.map +1 -0
  258. package/dist/ui/components/Tooltip/index.d.mts +2 -0
  259. package/dist/ui/components/Tooltip/index.mjs +2 -0
  260. package/dist/ui/components/VisuallyHidden/VisuallyHidden.d.mts +7 -0
  261. package/dist/ui/components/VisuallyHidden/VisuallyHidden.d.mts.map +1 -0
  262. package/dist/ui/components/VisuallyHidden/VisuallyHidden.mjs +13 -0
  263. package/dist/ui/components/VisuallyHidden/VisuallyHidden.mjs.map +1 -0
  264. package/dist/ui/components/VisuallyHidden/index.d.mts +2 -0
  265. package/dist/ui/components/VisuallyHidden/index.mjs +2 -0
  266. package/dist/ui/hooks/index.d.mts +2 -0
  267. package/dist/ui/hooks/index.mjs +2 -0
  268. package/dist/ui/hooks/useInView.d.mts +13 -0
  269. package/dist/ui/hooks/useInView.d.mts.map +1 -0
  270. package/dist/ui/hooks/useInView.mjs +37 -0
  271. package/dist/ui/hooks/useInView.mjs.map +1 -0
  272. package/dist/ui/index.d.mts +81 -0
  273. package/dist/ui/index.mjs +40 -0
  274. package/dist/ui/theme/preset.d.mts +170 -0
  275. package/dist/ui/theme/preset.d.mts.map +1 -0
  276. package/dist/ui/theme/preset.mjs +143 -0
  277. package/dist/ui/theme/preset.mjs.map +1 -0
  278. package/dist/ui/utils/cn.d.mts +6 -0
  279. package/dist/ui/utils/cn.d.mts.map +1 -0
  280. package/dist/ui/utils/cn.mjs +42 -0
  281. package/dist/ui/utils/cn.mjs.map +1 -0
  282. package/dist/ui/utils/index.d.mts +2 -0
  283. package/dist/ui/utils/index.mjs +2 -0
  284. package/dist/utils/index.d.mts +1 -1
  285. package/dist/utils/index.mjs +2 -2
  286. package/dist/{utils-CVVQQltg.mjs → utils.mjs} +1 -1
  287. package/dist/utils.mjs.map +1 -0
  288. package/package.json +66 -7
  289. package/src/ui/theme/preset.css +53 -0
  290. package/src/ui/theme/preset.ts +131 -0
  291. package/src/ui/theme/theme.css +12 -0
  292. package/src/ui/theme/tokens.css +57 -0
  293. package/dist/cms-5bS91IRZ.mjs.map +0 -1
  294. package/dist/i18n-Dy3VrbBw.mjs.map +0 -1
  295. package/dist/index-9B8SfwdR.d.mts +0 -214
  296. package/dist/index-9B8SfwdR.d.mts.map +0 -1
  297. package/dist/index-D36IEwUg.d.mts.map +0 -1
  298. package/dist/index-Dyi7DDoO.d.mts.map +0 -1
  299. package/dist/index-tTs9h9BS.d.mts.map +0 -1
  300. package/dist/logger-BPURnavq.mjs.map +0 -1
  301. package/dist/readMediaBuffer-1C3QTpkO.d.mts.map +0 -1
  302. package/dist/readMediaBuffer-DWkTbYVn.mjs.map +0 -1
  303. package/dist/seo-e5XjgQ7l.mjs.map +0 -1
  304. package/dist/utils-CVVQQltg.mjs.map +0 -1
@@ -0,0 +1,25 @@
1
+ "use client";
2
+ import { cn } from "../../utils/cn.mjs";
3
+ import { focusRingClassName } from "../../a11y/focus.mjs";
4
+ import { jsx, jsxs } from "react/jsx-runtime";
5
+ import { Primitive } from "@radix-ui/react-primitive";
6
+ //#region src/ui/components/Radio/Radio.tsx
7
+ function Radio({ className, ref, ...props }) {
8
+ return /* @__PURE__ */ jsxs("span", {
9
+ className: "relative inline-flex shrink-0 items-center justify-center",
10
+ children: [/* @__PURE__ */ jsx(Primitive.input, {
11
+ type: "radio",
12
+ ref,
13
+ "data-slot": "radio",
14
+ className: cn("peer size-5 shrink-0 appearance-none rounded-full border border-border bg-surface", "cursor-pointer transition-colors", "hover:border-accent", "checked:border-2 checked:border-accent", "disabled:cursor-not-allowed disabled:opacity-50", focusRingClassName, className),
15
+ ...props
16
+ }), /* @__PURE__ */ jsx("span", {
17
+ "aria-hidden": true,
18
+ className: "pointer-events-none absolute size-2 rounded-full bg-accent opacity-0 transition-opacity peer-checked:opacity-100"
19
+ })]
20
+ });
21
+ }
22
+ //#endregion
23
+ export { Radio };
24
+
25
+ //# sourceMappingURL=Radio.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Radio.mjs","names":[],"sources":["../../../../src/ui/components/Radio/Radio.tsx"],"sourcesContent":["'use client'\n\nimport { Primitive } from '@radix-ui/react-primitive'\n\nimport { focusRingClassName } from '../../a11y/focus.js'\nimport { cn } from '../../utils/cn.js'\n\nimport type { ComponentProps } from 'react'\n\nexport type RadioProps = Omit<ComponentProps<typeof Primitive.input>, 'type'>\n\nfunction Radio({ className, ref, ...props }: RadioProps) {\n return (\n <span className=\"relative inline-flex shrink-0 items-center justify-center\">\n <Primitive.input\n type=\"radio\"\n ref={ref}\n data-slot=\"radio\"\n className={cn(\n 'peer size-5 shrink-0 appearance-none rounded-full border border-border bg-surface',\n 'cursor-pointer transition-colors',\n 'hover:border-accent',\n 'checked:border-2 checked:border-accent',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n focusRingClassName,\n className\n )}\n {...props}\n />\n <span\n aria-hidden\n className=\"pointer-events-none absolute size-2 rounded-full bg-accent opacity-0 transition-opacity peer-checked:opacity-100\"\n />\n </span>\n )\n}\n\nexport { Radio }\n"],"mappings":";;;;;;AAWA,SAAS,MAAM,EAAE,WAAW,KAAK,GAAG,SAAqB;CACvD,OACE,qBAAC,QAAD;EAAM,WAAU;EAAhB,UAAA,CACE,oBAAC,UAAU,OAAX;GACE,MAAK;GACA;GACL,aAAU;GACV,WAAW,GACT,qFACA,oCACA,uBACA,0CACA,mDACA,oBACA,SACF;GACA,GAAI;EACL,CAAA,GACD,oBAAC,QAAD;GACE,eAAA;GACA,WAAU;EACX,CAAA,CACG;;AAEV"}
@@ -0,0 +1,2 @@
1
+ import { Radio, RadioProps } from "./Radio.mjs";
2
+ export { Radio, type RadioProps };
@@ -0,0 +1,2 @@
1
+ import { Radio } from "./Radio.mjs";
2
+ export { Radio };
@@ -0,0 +1,10 @@
1
+ import { ComponentProps } from "react";
2
+ //#region src/ui/components/Reveal/Reveal.d.ts
3
+ type RevealProps = ComponentProps<'div'> & {
4
+ asChild?: boolean;
5
+ delay?: string;
6
+ };
7
+ declare function Reveal({ asChild, delay, className, ...props }: RevealProps): import("react").JSX.Element;
8
+ //#endregion
9
+ export { Reveal, RevealProps };
10
+ //# sourceMappingURL=Reveal.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Reveal.d.mts","names":[],"sources":["../../../../src/ui/components/Reveal/Reveal.tsx"],"mappings":";;KASY,cAAc;EACxB;EACA;;iBAGO,SAAS,SAAiB,OAAO,cAAc,SAAS,8BAAW,IAAA"}
@@ -0,0 +1,18 @@
1
+ "use client";
2
+ import { cn } from "../../utils/cn.mjs";
3
+ import { useInView } from "../../hooks/useInView.mjs";
4
+ import { jsx } from "react/jsx-runtime";
5
+ import { Slot } from "@radix-ui/react-slot";
6
+ //#region src/ui/components/Reveal/Reveal.tsx
7
+ function Reveal({ asChild = false, delay, className, ...props }) {
8
+ const { ref, inView } = useInView();
9
+ return /* @__PURE__ */ jsx(asChild ? Slot : "div", {
10
+ ref,
11
+ className: cn("transition-all duration-[550ms] ease-[cubic-bezier(0.16,1,0.3,1)] motion-reduce:transition-none", delay, inView ? "translate-y-0 opacity-100" : "translate-y-6 opacity-0 motion-reduce:translate-y-0 motion-reduce:opacity-100", className),
12
+ ...props
13
+ });
14
+ }
15
+ //#endregion
16
+ export { Reveal };
17
+
18
+ //# sourceMappingURL=Reveal.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Reveal.mjs","names":[],"sources":["../../../../src/ui/components/Reveal/Reveal.tsx"],"sourcesContent":["'use client'\n\nimport { Slot } from '@radix-ui/react-slot'\n\nimport { useInView } from '../../hooks/useInView.js'\nimport { cn } from '../../utils/cn.js'\n\nimport type { ComponentProps } from 'react'\n\nexport type RevealProps = ComponentProps<'div'> & {\n asChild?: boolean\n delay?: string\n}\n\nfunction Reveal({ asChild = false, delay, className, ...props }: RevealProps) {\n const { ref, inView } = useInView<HTMLDivElement>()\n const Comp = asChild ? Slot : 'div'\n\n return (\n <Comp\n ref={ref}\n className={cn(\n 'transition-all duration-[550ms] ease-[cubic-bezier(0.16,1,0.3,1)] motion-reduce:transition-none',\n delay,\n inView\n ? 'translate-y-0 opacity-100'\n : 'translate-y-6 opacity-0 motion-reduce:translate-y-0 motion-reduce:opacity-100',\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Reveal }\n"],"mappings":";;;;;;AAcA,SAAS,OAAO,EAAE,UAAU,OAAO,OAAO,WAAW,GAAG,SAAsB;CAC5E,MAAM,EAAE,KAAK,WAAW,UAA0B;CAGlD,OACE,oBAHW,UAAU,OAAO,OAG5B;EACO;EACL,WAAW,GACT,mGACA,OACA,SACI,8BACA,iFACJ,SACF;EACA,GAAI;CACL,CAAA;AAEL"}
@@ -0,0 +1,2 @@
1
+ import { Reveal, RevealProps } from "./Reveal.mjs";
2
+ export { Reveal, type RevealProps };
@@ -0,0 +1,2 @@
1
+ import { Reveal } from "./Reveal.mjs";
2
+ export { Reveal };
@@ -0,0 +1,15 @@
1
+ //#region src/ui/components/SearchInput/SearchInput.d.ts
2
+ type SearchInputProps = {
3
+ 'value': string;
4
+ 'onChange': (value: string) => void;
5
+ 'placeholder'?: string;
6
+ 'className'?: string;
7
+ 'id'?: string;
8
+ 'name'?: string;
9
+ 'disabled'?: boolean;
10
+ 'aria-label'?: string;
11
+ };
12
+ declare function SearchInput({ value, onChange, placeholder, className, id, name, disabled, 'aria-label': ariaLabel }: SearchInputProps): import("react").JSX.Element;
13
+ //#endregion
14
+ export { SearchInput, SearchInputProps };
15
+ //# sourceMappingURL=SearchInput.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SearchInput.d.mts","names":[],"sources":["../../../../src/ui/components/SearchInput/SearchInput.tsx"],"mappings":";KAOY;EACV;EACA,aAAa;EACb;EACA;EACA;EACA;EACA;EACA;;iBAGO,cACP,OACA,UACA,aACA,WACA,IACA,MACA,wBACc,aACb,mCAAgB,IAAA"}
@@ -0,0 +1,28 @@
1
+ "use client";
2
+ import { cn } from "../../utils/cn.mjs";
3
+ import { Input } from "../Input/Input.mjs";
4
+ import { jsx } from "react/jsx-runtime";
5
+ import { MdSearch } from "react-icons/md";
6
+ //#region src/ui/components/SearchInput/SearchInput.tsx
7
+ function SearchInput({ value, onChange, placeholder, className, id, name, disabled, "aria-label": ariaLabel }) {
8
+ return /* @__PURE__ */ jsx(Input, {
9
+ id,
10
+ name,
11
+ type: "search",
12
+ value,
13
+ disabled,
14
+ "aria-label": ariaLabel,
15
+ placeholder,
16
+ onChange: (e) => onChange(e.target.value),
17
+ className: cn("font-semibold placeholder:font-normal", className),
18
+ leftIcon: /* @__PURE__ */ jsx(MdSearch, {
19
+ size: 16,
20
+ className: "text-muted",
21
+ "aria-hidden": "true"
22
+ })
23
+ });
24
+ }
25
+ //#endregion
26
+ export { SearchInput };
27
+
28
+ //# sourceMappingURL=SearchInput.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SearchInput.mjs","names":[],"sources":["../../../../src/ui/components/SearchInput/SearchInput.tsx"],"sourcesContent":["'use client'\n\nimport { MdSearch } from 'react-icons/md'\n\nimport { Input } from '../Input/Input.js'\nimport { cn } from '../../utils/cn.js'\n\nexport type SearchInputProps = {\n 'value': string\n 'onChange': (value: string) => void\n 'placeholder'?: string\n 'className'?: string\n 'id'?: string\n 'name'?: string\n 'disabled'?: boolean\n 'aria-label'?: string\n}\n\nfunction SearchInput({\n value,\n onChange,\n placeholder,\n className,\n id,\n name,\n disabled,\n 'aria-label': ariaLabel,\n}: SearchInputProps) {\n return (\n <Input\n id={id}\n name={name}\n type=\"search\"\n value={value}\n disabled={disabled}\n aria-label={ariaLabel}\n placeholder={placeholder}\n onChange={(e) => onChange(e.target.value)}\n className={cn('font-semibold placeholder:font-normal', className)}\n leftIcon={<MdSearch size={16} className=\"text-muted\" aria-hidden=\"true\" />}\n />\n )\n}\n\nexport { SearchInput }\n"],"mappings":";;;;;;AAkBA,SAAS,YAAY,EACnB,OACA,UACA,aACA,WACA,IACA,MACA,UACA,cAAc,aACK;CACnB,OACE,oBAAC,OAAD;EACM;EACE;EACN,MAAK;EACE;EACG;EACV,cAAY;EACC;EACb,WAAW,MAAM,SAAS,EAAE,OAAO,KAAK;EACxC,WAAW,GAAG,yCAAyC,SAAS;EAChE,UAAU,oBAAC,UAAD;GAAU,MAAM;GAAI,WAAU;GAAa,eAAY;EAAQ,CAAA;CAC1E,CAAA;AAEL"}
@@ -0,0 +1,2 @@
1
+ import { SearchInput, SearchInputProps } from "./SearchInput.mjs";
2
+ export { SearchInput, type SearchInputProps };
@@ -0,0 +1,2 @@
1
+ import { SearchInput } from "./SearchInput.mjs";
2
+ export { SearchInput };
@@ -0,0 +1,34 @@
1
+ //#region src/ui/components/Select/Select.d.ts
2
+ type SelectOption = {
3
+ value: string;
4
+ label: string;
5
+ };
6
+ type CommonProps = {
7
+ 'id'?: string;
8
+ 'options': SelectOption[];
9
+ 'aria-label'?: string;
10
+ 'disabled'?: boolean;
11
+ 'error'?: boolean | string;
12
+ 'className'?: string;
13
+ 'triggerClassName'?: string;
14
+ };
15
+ type SingleProps = CommonProps & {
16
+ multiple?: false;
17
+ value: string;
18
+ onChange: (value: string) => void;
19
+ label?: string;
20
+ placeholder?: string;
21
+ };
22
+ type MultiProps = CommonProps & {
23
+ multiple: true;
24
+ value: string[];
25
+ onChange: (value: string[]) => void;
26
+ addLabel: string;
27
+ emptyLabel?: string;
28
+ removeChipLabel: (label: string) => string;
29
+ };
30
+ type SelectProps = SingleProps | MultiProps;
31
+ declare function Select(props: SelectProps): import("react").JSX.Element;
32
+ //#endregion
33
+ export { Select, SelectOption, SelectProps };
34
+ //# sourceMappingURL=Select.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Select.d.mts","names":[],"sources":["../../../../src/ui/components/Select/Select.tsx"],"mappings":";KAOY;EACV;EACA;;KAGG;EACH;EACA,WAAW;EACX;EACA;EACA;EACA;EACA;;KAGG,cAAc;EACjB;EACA;EACA,WAAW;EACX;EACA;;KAGG,aAAa;EAChB;EACA;EACA,WAAW;EACX;EACA;EACA,kBAAkB;;KAGR,cAAc,cAAc;iBAoD/B,OAAO,OAAO,8BAAW,IAAA"}
@@ -0,0 +1,167 @@
1
+ "use client";
2
+ import { cn } from "../../utils/cn.mjs";
3
+ import { jsx, jsxs } from "react/jsx-runtime";
4
+ import { useRef, useState } from "react";
5
+ import * as DropdownMenu from "@radix-ui/react-dropdown-menu";
6
+ //#region src/ui/components/Select/Select.tsx
7
+ function ChevronIcon({ className }) {
8
+ return /* @__PURE__ */ jsx("svg", {
9
+ "aria-hidden": "true",
10
+ viewBox: "0 0 18 18",
11
+ width: "18",
12
+ height: "18",
13
+ fill: "none",
14
+ className,
15
+ children: /* @__PURE__ */ jsx("path", {
16
+ d: "M4.5 6.75 9 11.25l4.5-4.5",
17
+ stroke: "currentColor",
18
+ strokeWidth: "1.5",
19
+ strokeLinecap: "round",
20
+ strokeLinejoin: "round"
21
+ })
22
+ });
23
+ }
24
+ function CheckIcon() {
25
+ return /* @__PURE__ */ jsx("svg", {
26
+ "aria-hidden": "true",
27
+ viewBox: "0 0 16 16",
28
+ width: "16",
29
+ height: "16",
30
+ fill: "none",
31
+ className: "shrink-0 text-accent",
32
+ children: /* @__PURE__ */ jsx("path", {
33
+ d: "M3 8.2 6.2 11l6.5-7",
34
+ stroke: "currentColor",
35
+ strokeWidth: "1.5",
36
+ strokeLinecap: "round",
37
+ strokeLinejoin: "round"
38
+ })
39
+ });
40
+ }
41
+ function CloseIcon() {
42
+ return /* @__PURE__ */ jsx("svg", {
43
+ "aria-hidden": "true",
44
+ viewBox: "0 0 10 10",
45
+ width: "10",
46
+ height: "10",
47
+ fill: "none",
48
+ children: /* @__PURE__ */ jsx("path", {
49
+ d: "M2 2l6 6M8 2L2 8",
50
+ stroke: "currentColor",
51
+ strokeWidth: "1.25",
52
+ strokeLinecap: "round"
53
+ })
54
+ });
55
+ }
56
+ function Select(props) {
57
+ const { id, options, disabled, error, className, triggerClassName } = props;
58
+ const ariaLabel = props["aria-label"];
59
+ const multiContainerRef = useRef(null);
60
+ const [multiMenuWidth, setMultiMenuWidth] = useState();
61
+ const errorId = id ? `${id}-error` : void 0;
62
+ const hasError = Boolean(error);
63
+ const errorMessage = typeof error === "string" ? error : void 0;
64
+ const selectedSet = new Set(props.multiple ? props.value : props.value ? [props.value] : []);
65
+ const selectedChips = props.multiple ? props.value.map((v) => options.find((o) => o.value === v) ?? {
66
+ value: v,
67
+ label: v
68
+ }) : [];
69
+ const availableOptions = props.multiple ? options.filter((o) => !selectedSet.has(o.value)) : options;
70
+ const allSelected = Boolean(props.multiple && availableOptions.length === 0);
71
+ return /* @__PURE__ */ jsxs("div", {
72
+ className: cn("flex w-full flex-col gap-1", !props.multiple && className),
73
+ children: [/* @__PURE__ */ jsxs(DropdownMenu.Root, {
74
+ modal: false,
75
+ onOpenChange: (open) => {
76
+ if (!props.multiple || !open) return;
77
+ const width = multiContainerRef.current?.getBoundingClientRect().width;
78
+ if (width) setMultiMenuWidth(width);
79
+ },
80
+ children: [props.multiple ? /* @__PURE__ */ jsxs("div", {
81
+ ref: multiContainerRef,
82
+ "data-slot": "select-multi",
83
+ "aria-describedby": hasError && errorId ? errorId : void 0,
84
+ className: cn("group/select flex w-full flex-wrap items-center gap-2 rounded-btn border border-border bg-background px-3 py-2.5 text-left transition-colors", "hover:border-accent/60", hasError && "border-destructive", disabled && "cursor-not-allowed opacity-50", className),
85
+ children: [selectedChips.map((option, idx) => /* @__PURE__ */ jsxs("span", {
86
+ "data-slot": "select-chip",
87
+ className: "inline-flex items-center gap-1.5 rounded-btn border border-border bg-card py-1 pr-2 pl-2.5 text-xs font-medium text-foreground",
88
+ children: [option.label, /* @__PURE__ */ jsx("button", {
89
+ type: "button",
90
+ "aria-label": props.removeChipLabel(option.label),
91
+ disabled,
92
+ onClick: () => {
93
+ if (disabled) return;
94
+ props.onChange(props.value.filter((_, i) => i !== idx));
95
+ },
96
+ className: "inline-flex cursor-pointer items-center justify-center text-muted transition-colors hover:text-foreground disabled:pointer-events-none",
97
+ children: /* @__PURE__ */ jsx(CloseIcon, {})
98
+ })]
99
+ }, `${option.value}-${idx}`)), /* @__PURE__ */ jsx(DropdownMenu.Trigger, {
100
+ asChild: true,
101
+ disabled: disabled || allSelected,
102
+ children: /* @__PURE__ */ jsx("button", {
103
+ id,
104
+ type: "button",
105
+ "data-slot": "select-multi-add",
106
+ "aria-label": ariaLabel,
107
+ className: "cursor-pointer text-sm font-normal text-muted transition-colors hover:text-foreground data-[state=open]:text-foreground focus-visible:outline-none",
108
+ children: allSelected && props.emptyLabel ? props.emptyLabel : props.addLabel
109
+ })
110
+ })]
111
+ }) : /* @__PURE__ */ jsx(DropdownMenu.Trigger, {
112
+ asChild: true,
113
+ children: /* @__PURE__ */ jsxs("button", {
114
+ id,
115
+ type: "button",
116
+ disabled,
117
+ "aria-label": ariaLabel,
118
+ "aria-describedby": hasError && errorId ? errorId : void 0,
119
+ "data-slot": "select-trigger",
120
+ className: cn("group/select inline-flex h-11 w-full shrink-0 cursor-pointer items-center gap-2 rounded-btn border border-border bg-background pr-3.5 pl-4 text-left transition-colors", "hover:border-accent/60 data-[state=open]:border-accent", "focus-visible:border-accent focus-visible:outline-none", hasError && "border-destructive data-[state=open]:border-destructive", disabled && "cursor-not-allowed opacity-50", triggerClassName),
121
+ children: [
122
+ props.label ? /* @__PURE__ */ jsx("span", {
123
+ className: "shrink-0 text-sm text-muted",
124
+ children: props.label
125
+ }) : null,
126
+ /* @__PURE__ */ jsx("span", {
127
+ className: "flex-1 truncate text-sm font-semibold text-foreground",
128
+ children: options.find((o) => o.value === props.value)?.label ?? props.placeholder ?? ""
129
+ }),
130
+ /* @__PURE__ */ jsx(ChevronIcon, { className: "shrink-0 text-foreground transition-transform group-data-[state=open]/select:rotate-180" })
131
+ ]
132
+ })
133
+ }), /* @__PURE__ */ jsx(DropdownMenu.Portal, { children: /* @__PURE__ */ jsx(DropdownMenu.Content, {
134
+ align: "start",
135
+ sideOffset: 8,
136
+ style: props.multiple && multiMenuWidth ? { width: multiMenuWidth } : void 0,
137
+ className: cn("z-50 overflow-hidden rounded-card border border-border bg-card-elevated py-1.5 shadow-lg", "focus:outline-none", !props.multiple && "w-(--radix-dropdown-menu-trigger-width)"),
138
+ children: availableOptions.map((option) => {
139
+ const isSelected = !props.multiple && props.value === option.value;
140
+ return /* @__PURE__ */ jsxs(DropdownMenu.Item, {
141
+ onSelect: (event) => {
142
+ if (props.multiple) {
143
+ event.preventDefault();
144
+ props.onChange([...props.value, option.value]);
145
+ return;
146
+ }
147
+ props.onChange(option.value);
148
+ },
149
+ className: cn("flex cursor-pointer items-center justify-between gap-3 px-3.5 py-2.5 text-sm font-medium text-secondary transition-colors outline-none", "data-[highlighted]:bg-card data-[highlighted]:text-foreground", isSelected && "bg-card font-semibold text-foreground"),
150
+ children: [/* @__PURE__ */ jsx("span", {
151
+ className: "truncate",
152
+ children: option.label
153
+ }), isSelected ? /* @__PURE__ */ jsx(CheckIcon, {}) : null]
154
+ }, option.value);
155
+ })
156
+ }) })]
157
+ }), errorMessage ? /* @__PURE__ */ jsx("p", {
158
+ id: errorId,
159
+ className: "text-xs text-destructive",
160
+ children: errorMessage
161
+ }) : null]
162
+ });
163
+ }
164
+ //#endregion
165
+ export { Select };
166
+
167
+ //# sourceMappingURL=Select.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Select.mjs","names":[],"sources":["../../../../src/ui/components/Select/Select.tsx"],"sourcesContent":["'use client'\n\nimport { useRef, useState } from 'react'\nimport * as DropdownMenu from '@radix-ui/react-dropdown-menu'\n\nimport { cn } from '../../utils/cn.js'\n\nexport type SelectOption = {\n value: string\n label: string\n}\n\ntype CommonProps = {\n 'id'?: string\n 'options': SelectOption[]\n 'aria-label'?: string\n 'disabled'?: boolean\n 'error'?: boolean | string\n 'className'?: string\n 'triggerClassName'?: string\n}\n\ntype SingleProps = CommonProps & {\n multiple?: false\n value: string\n onChange: (value: string) => void\n label?: string\n placeholder?: string\n}\n\ntype MultiProps = CommonProps & {\n multiple: true\n value: string[]\n onChange: (value: string[]) => void\n addLabel: string\n emptyLabel?: string\n removeChipLabel: (label: string) => string\n}\n\nexport type SelectProps = SingleProps | MultiProps\n\nfunction ChevronIcon({ className }: { className?: string }) {\n return (\n <svg\n aria-hidden=\"true\"\n viewBox=\"0 0 18 18\"\n width=\"18\"\n height=\"18\"\n fill=\"none\"\n className={className}\n >\n <path\n d=\"M4.5 6.75 9 11.25l4.5-4.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n )\n}\n\nfunction CheckIcon() {\n return (\n <svg\n aria-hidden=\"true\"\n viewBox=\"0 0 16 16\"\n width=\"16\"\n height=\"16\"\n fill=\"none\"\n className=\"shrink-0 text-accent\"\n >\n <path\n d=\"M3 8.2 6.2 11l6.5-7\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n )\n}\n\nfunction CloseIcon() {\n return (\n <svg aria-hidden=\"true\" viewBox=\"0 0 10 10\" width=\"10\" height=\"10\" fill=\"none\">\n <path d=\"M2 2l6 6M8 2L2 8\" stroke=\"currentColor\" strokeWidth=\"1.25\" strokeLinecap=\"round\" />\n </svg>\n )\n}\n\nfunction Select(props: SelectProps) {\n const { id, options, disabled, error, className, triggerClassName } = props\n const ariaLabel = props['aria-label']\n const multiContainerRef = useRef<HTMLDivElement>(null)\n const [multiMenuWidth, setMultiMenuWidth] = useState<number>()\n\n const errorId = id ? `${id}-error` : undefined\n const hasError = Boolean(error)\n const errorMessage = typeof error === 'string' ? error : undefined\n\n const selectedSet = new Set(props.multiple ? props.value : props.value ? [props.value] : [])\n const selectedChips = props.multiple\n ? props.value.map((v) => options.find((o) => o.value === v) ?? { value: v, label: v })\n : []\n const availableOptions = props.multiple\n ? options.filter((o) => !selectedSet.has(o.value))\n : options\n const allSelected = Boolean(props.multiple && availableOptions.length === 0)\n\n return (\n <div className={cn('flex w-full flex-col gap-1', !props.multiple && className)}>\n <DropdownMenu.Root\n modal={false}\n onOpenChange={(open) => {\n if (!props.multiple || !open) return\n const width = multiContainerRef.current?.getBoundingClientRect().width\n if (width) setMultiMenuWidth(width)\n }}\n >\n {props.multiple ? (\n <div\n ref={multiContainerRef}\n data-slot=\"select-multi\"\n aria-describedby={hasError && errorId ? errorId : undefined}\n className={cn(\n 'group/select flex w-full flex-wrap items-center gap-2 rounded-btn border border-border bg-background px-3 py-2.5 text-left transition-colors',\n 'hover:border-accent/60',\n hasError && 'border-destructive',\n disabled && 'cursor-not-allowed opacity-50',\n className\n )}\n >\n {selectedChips.map((option, idx) => (\n <span\n key={`${option.value}-${idx}`}\n data-slot=\"select-chip\"\n className=\"inline-flex items-center gap-1.5 rounded-btn border border-border bg-card py-1 pr-2 pl-2.5 text-xs font-medium text-foreground\"\n >\n {option.label}\n <button\n type=\"button\"\n aria-label={props.removeChipLabel(option.label)}\n disabled={disabled}\n onClick={() => {\n if (disabled) return\n props.onChange(props.value.filter((_, i) => i !== idx))\n }}\n className=\"inline-flex cursor-pointer items-center justify-center text-muted transition-colors hover:text-foreground disabled:pointer-events-none\"\n >\n <CloseIcon />\n </button>\n </span>\n ))}\n\n <DropdownMenu.Trigger asChild disabled={disabled || allSelected}>\n <button\n id={id}\n type=\"button\"\n data-slot=\"select-multi-add\"\n aria-label={ariaLabel}\n className=\"cursor-pointer text-sm font-normal text-muted transition-colors hover:text-foreground data-[state=open]:text-foreground focus-visible:outline-none\"\n >\n {allSelected && props.emptyLabel ? props.emptyLabel : props.addLabel}\n </button>\n </DropdownMenu.Trigger>\n </div>\n ) : (\n <DropdownMenu.Trigger asChild>\n <button\n id={id}\n type=\"button\"\n disabled={disabled}\n aria-label={ariaLabel}\n aria-describedby={hasError && errorId ? errorId : undefined}\n data-slot=\"select-trigger\"\n className={cn(\n 'group/select inline-flex h-11 w-full shrink-0 cursor-pointer items-center gap-2 rounded-btn border border-border bg-background pr-3.5 pl-4 text-left transition-colors',\n 'hover:border-accent/60 data-[state=open]:border-accent',\n 'focus-visible:border-accent focus-visible:outline-none',\n hasError && 'border-destructive data-[state=open]:border-destructive',\n disabled && 'cursor-not-allowed opacity-50',\n triggerClassName\n )}\n >\n {props.label ? (\n <span className=\"shrink-0 text-sm text-muted\">{props.label}</span>\n ) : null}\n <span className=\"flex-1 truncate text-sm font-semibold text-foreground\">\n {options.find((o) => o.value === props.value)?.label ?? props.placeholder ?? ''}\n </span>\n <ChevronIcon className=\"shrink-0 text-foreground transition-transform group-data-[state=open]/select:rotate-180\" />\n </button>\n </DropdownMenu.Trigger>\n )}\n\n <DropdownMenu.Portal>\n <DropdownMenu.Content\n align=\"start\"\n sideOffset={8}\n style={props.multiple && multiMenuWidth ? { width: multiMenuWidth } : undefined}\n className={cn(\n 'z-50 overflow-hidden rounded-card border border-border bg-card-elevated py-1.5 shadow-lg',\n 'focus:outline-none',\n !props.multiple && 'w-(--radix-dropdown-menu-trigger-width)'\n )}\n >\n {availableOptions.map((option) => {\n const isSelected = !props.multiple && props.value === option.value\n return (\n <DropdownMenu.Item\n key={option.value}\n onSelect={(event) => {\n if (props.multiple) {\n event.preventDefault()\n props.onChange([...props.value, option.value])\n return\n }\n props.onChange(option.value)\n }}\n className={cn(\n 'flex cursor-pointer items-center justify-between gap-3 px-3.5 py-2.5 text-sm font-medium text-secondary transition-colors outline-none',\n 'data-[highlighted]:bg-card data-[highlighted]:text-foreground',\n isSelected && 'bg-card font-semibold text-foreground'\n )}\n >\n <span className=\"truncate\">{option.label}</span>\n {isSelected ? <CheckIcon /> : null}\n </DropdownMenu.Item>\n )\n })}\n </DropdownMenu.Content>\n </DropdownMenu.Portal>\n </DropdownMenu.Root>\n\n {errorMessage ? (\n <p id={errorId} className=\"text-xs text-destructive\">\n {errorMessage}\n </p>\n ) : null}\n </div>\n )\n}\n\nexport { Select }\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { Select, SelectOption, SelectProps } from "./Select.mjs";
2
+ export { Select, type SelectOption, type SelectProps };
@@ -0,0 +1,2 @@
1
+ import { Select } from "./Select.mjs";
2
+ export { Select };
@@ -0,0 +1,19 @@
1
+ import { ComponentProps, ReactNode } from "react";
2
+ import * as DialogPrimitive from "@radix-ui/react-dialog";
3
+ //#region src/ui/components/Sheet/Sheet.d.ts
4
+ declare const Sheet: import("react").FC<DialogPrimitive.DialogProps>;
5
+ declare const SheetTrigger: import("react").ForwardRefExoticComponent<DialogPrimitive.DialogTriggerProps & import("react").RefAttributes<HTMLButtonElement>>;
6
+ declare const SheetClose: import("react").ForwardRefExoticComponent<DialogPrimitive.DialogCloseProps & import("react").RefAttributes<HTMLButtonElement>>;
7
+ declare const SheetPortal: import("react").FC<DialogPrimitive.DialogPortalProps>;
8
+ type SheetOverlayProps = ComponentProps<typeof DialogPrimitive.Overlay>;
9
+ declare function SheetOverlay({ className, ...props }: SheetOverlayProps): import("react").JSX.Element;
10
+ type SheetContentProps = ComponentProps<typeof DialogPrimitive.Content> & {
11
+ side?: 'left' | 'right';
12
+ closeLabel?: string;
13
+ title?: string;
14
+ children?: ReactNode;
15
+ };
16
+ declare function SheetContent({ side, className, children, closeLabel, title, ...props }: SheetContentProps): import("react").JSX.Element;
17
+ //#endregion
18
+ export { Sheet, SheetClose, SheetContent, SheetContentProps, SheetOverlay, SheetOverlayProps, SheetPortal, SheetTrigger };
19
+ //# sourceMappingURL=Sheet.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Sheet.d.mts","names":[],"sources":["../../../../src/ui/components/Sheet/Sheet.tsx"],"mappings":";;;cASM,uBAAK,GAAA,gBAAA;cACL,8BAAY,0BAAA,gBAAA,qCAAA,cAAA;cACZ,4BAAU,0BAAA,gBAAA,mCAAA,cAAA;cACV,6BAAW,GAAA,gBAAA;KAOL,oBAAoB,sBAAsB,gBAAgB;iBAE7D,eAAe,cAAc,SAAS,oCAAiB,IAAA;KAiBpD,oBAAoB,sBAAsB,gBAAgB;EACpE;EACA;EACA;EACA,WAAW;;iBAGJ,eACP,MACA,WACA,UACA,YACA,UACG,SACF,oCAAiB,IAAA"}
@@ -0,0 +1,59 @@
1
+ "use client";
2
+ import { cn } from "../../utils/cn.mjs";
3
+ import { IconButton } from "../IconButton/IconButton.mjs";
4
+ import { jsx, jsxs } from "react/jsx-runtime";
5
+ import * as DialogPrimitive from "@radix-ui/react-dialog";
6
+ //#region src/ui/components/Sheet/Sheet.tsx
7
+ const Sheet = DialogPrimitive.Root;
8
+ const SheetTrigger = DialogPrimitive.Trigger;
9
+ const SheetClose = DialogPrimitive.Close;
10
+ const SheetPortal = DialogPrimitive.Portal;
11
+ const sheetOverlayClasses = cn("fixed inset-0 z-50 bg-background/75 backdrop-blur-sm", "data-[state=closed]:pointer-events-none");
12
+ function SheetOverlay({ className, ...props }) {
13
+ return /* @__PURE__ */ jsx(DialogPrimitive.Overlay, {
14
+ className: cn(sheetOverlayClasses, className),
15
+ ...props
16
+ });
17
+ }
18
+ function CloseIcon() {
19
+ return /* @__PURE__ */ jsx("svg", {
20
+ "aria-hidden": "true",
21
+ viewBox: "0 0 20 20",
22
+ width: "20",
23
+ height: "20",
24
+ fill: "none",
25
+ children: /* @__PURE__ */ jsx("path", {
26
+ d: "M5 5l10 10M15 5L5 15",
27
+ stroke: "currentColor",
28
+ strokeWidth: "1.5",
29
+ strokeLinecap: "round"
30
+ })
31
+ });
32
+ }
33
+ function SheetContent({ side = "left", className, children, closeLabel, title, ...props }) {
34
+ return /* @__PURE__ */ jsxs(SheetPortal, { children: [/* @__PURE__ */ jsx(SheetOverlay, {}), /* @__PURE__ */ jsxs(DialogPrimitive.Content, {
35
+ "data-side": side,
36
+ className: cn("fixed z-50 flex h-full flex-col bg-background shadow-xl", side === "left" && "inset-y-0 left-0 w-[min(100vw,280px)] border-r border-border", side === "right" && "inset-y-0 right-0 w-[min(100vw,280px)] border-l border-border", className),
37
+ ...props,
38
+ children: [
39
+ title ? /* @__PURE__ */ jsx(DialogPrimitive.Title, {
40
+ className: "sr-only",
41
+ children: title
42
+ }) : null,
43
+ children,
44
+ closeLabel ? /* @__PURE__ */ jsx(SheetClose, {
45
+ asChild: true,
46
+ children: /* @__PURE__ */ jsx(IconButton, {
47
+ type: "button",
48
+ className: "absolute top-3 right-3 lg:hidden",
49
+ "aria-label": closeLabel,
50
+ children: /* @__PURE__ */ jsx(CloseIcon, {})
51
+ })
52
+ }) : null
53
+ ]
54
+ })] });
55
+ }
56
+ //#endregion
57
+ export { Sheet, SheetClose, SheetContent, SheetOverlay, SheetPortal, SheetTrigger };
58
+
59
+ //# sourceMappingURL=Sheet.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Sheet.mjs","names":[],"sources":["../../../../src/ui/components/Sheet/Sheet.tsx"],"sourcesContent":["'use client'\n\nimport * as DialogPrimitive from '@radix-ui/react-dialog'\n\nimport { IconButton } from '../IconButton/IconButton.js'\nimport { cn } from '../../utils/cn.js'\n\nimport type { ComponentProps, ReactNode } from 'react'\n\nconst Sheet = DialogPrimitive.Root\nconst SheetTrigger = DialogPrimitive.Trigger\nconst SheetClose = DialogPrimitive.Close\nconst SheetPortal = DialogPrimitive.Portal\n\nconst sheetOverlayClasses = cn(\n 'fixed inset-0 z-50 bg-background/75 backdrop-blur-sm',\n 'data-[state=closed]:pointer-events-none'\n)\n\nexport type SheetOverlayProps = ComponentProps<typeof DialogPrimitive.Overlay>\n\nfunction SheetOverlay({ className, ...props }: SheetOverlayProps) {\n return <DialogPrimitive.Overlay className={cn(sheetOverlayClasses, className)} {...props} />\n}\n\nfunction CloseIcon() {\n return (\n <svg aria-hidden=\"true\" viewBox=\"0 0 20 20\" width=\"20\" height=\"20\" fill=\"none\">\n <path\n d=\"M5 5l10 10M15 5L5 15\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n />\n </svg>\n )\n}\n\nexport type SheetContentProps = ComponentProps<typeof DialogPrimitive.Content> & {\n side?: 'left' | 'right'\n closeLabel?: string\n title?: string\n children?: ReactNode\n}\n\nfunction SheetContent({\n side = 'left',\n className,\n children,\n closeLabel,\n title,\n ...props\n}: SheetContentProps) {\n return (\n <SheetPortal>\n <SheetOverlay />\n <DialogPrimitive.Content\n data-side={side}\n className={cn(\n 'fixed z-50 flex h-full flex-col bg-background shadow-xl',\n side === 'left' && 'inset-y-0 left-0 w-[min(100vw,280px)] border-r border-border',\n side === 'right' && 'inset-y-0 right-0 w-[min(100vw,280px)] border-l border-border',\n className\n )}\n {...props}\n >\n {title ? <DialogPrimitive.Title className=\"sr-only\">{title}</DialogPrimitive.Title> : null}\n {children}\n {closeLabel ? (\n <SheetClose asChild>\n <IconButton\n type=\"button\"\n className=\"absolute top-3 right-3 lg:hidden\"\n aria-label={closeLabel}\n >\n <CloseIcon />\n </IconButton>\n </SheetClose>\n ) : null}\n </DialogPrimitive.Content>\n </SheetPortal>\n )\n}\n\nexport { Sheet, SheetTrigger, SheetClose, SheetPortal, SheetOverlay, SheetContent }\n"],"mappings":";;;;;;AASA,MAAM,QAAQ,gBAAgB;AAC9B,MAAM,eAAe,gBAAgB;AACrC,MAAM,aAAa,gBAAgB;AACnC,MAAM,cAAc,gBAAgB;AAEpC,MAAM,sBAAsB,GAC1B,wDACA,yCACF;AAIA,SAAS,aAAa,EAAE,WAAW,GAAG,SAA4B;CAChE,OAAO,oBAAC,gBAAgB,SAAjB;EAAyB,WAAW,GAAG,qBAAqB,SAAS;EAAG,GAAI;CAAQ,CAAA;AAC7F;AAEA,SAAS,YAAY;CACnB,OACE,oBAAC,OAAD;EAAK,eAAY;EAAO,SAAQ;EAAY,OAAM;EAAK,QAAO;EAAK,MAAK;EACtE,UAAA,oBAAC,QAAD;GACE,GAAE;GACF,QAAO;GACP,aAAY;GACZ,eAAc;EACf,CAAA;CACE,CAAA;AAET;AASA,SAAS,aAAa,EACpB,OAAO,QACP,WACA,UACA,YACA,OACA,GAAG,SACiB;CACpB,OACE,qBAAC,aAAD,EAAA,UAAA,CACE,oBAAC,cAAD,CAAe,CAAA,GACf,qBAAC,gBAAgB,SAAjB;EACE,aAAW;EACX,WAAW,GACT,2DACA,SAAS,UAAU,gEACnB,SAAS,WAAW,iEACpB,SACF;EACA,GAAI;EARN,UAAA;GAUG,QAAQ,oBAAC,gBAAgB,OAAjB;IAAuB,WAAU;IAAW,UAAA;GAA6B,CAAA,IAAI;GACrF;GACA,aACC,oBAAC,YAAD;IAAY,SAAA;IACV,UAAA,oBAAC,YAAD;KACE,MAAK;KACL,WAAU;KACV,cAAY;KAEZ,UAAA,oBAAC,WAAD,CAAY,CAAA;IACF,CAAA;GACF,CAAA,IACV;EACmB;CACd,CAAA,CAAA,EAAA,CAAA;AAEjB"}
@@ -0,0 +1,2 @@
1
+ import { Sheet, SheetClose, SheetContent, SheetContentProps, SheetOverlay, SheetOverlayProps, SheetPortal, SheetTrigger } from "./Sheet.mjs";
2
+ export { Sheet, SheetClose, SheetContent, type SheetContentProps, SheetOverlay, type SheetOverlayProps, SheetPortal, SheetTrigger };
@@ -0,0 +1,2 @@
1
+ import { Sheet, SheetClose, SheetContent, SheetOverlay, SheetPortal, SheetTrigger } from "./Sheet.mjs";
2
+ export { Sheet, SheetClose, SheetContent, SheetOverlay, SheetPortal, SheetTrigger };
@@ -0,0 +1,10 @@
1
+ import { ReactNode } from "react";
2
+ //#region src/ui/components/StaggerReveal/StaggerReveal.d.ts
3
+ type StaggerRevealProps = {
4
+ className?: string;
5
+ children: ReactNode;
6
+ };
7
+ declare function StaggerReveal({ className, children }: StaggerRevealProps): import("react").JSX.Element;
8
+ //#endregion
9
+ export { StaggerReveal, StaggerRevealProps };
10
+ //# sourceMappingURL=StaggerReveal.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StaggerReveal.d.mts","names":[],"sources":["../../../../src/ui/components/StaggerReveal/StaggerReveal.tsx"],"mappings":";;KASY;EACV;EACA,UAAU;;iBAcH,gBAAgB,WAAW,YAAY,qCAAkB,IAAA"}
@@ -0,0 +1,31 @@
1
+ "use client";
2
+ import { cn } from "../../utils/cn.mjs";
3
+ import { useInView } from "../../hooks/useInView.mjs";
4
+ import { jsx } from "react/jsx-runtime";
5
+ import { Children } from "react";
6
+ //#region src/ui/components/StaggerReveal/StaggerReveal.tsx
7
+ const STAGGER_DELAYS = [
8
+ "delay-[0ms]",
9
+ "delay-[100ms]",
10
+ "delay-[200ms]",
11
+ "delay-[300ms]",
12
+ "delay-[400ms]",
13
+ "delay-[500ms]",
14
+ "delay-[600ms]",
15
+ "delay-[700ms]"
16
+ ];
17
+ function StaggerReveal({ className, children }) {
18
+ const { ref, inView } = useInView();
19
+ return /* @__PURE__ */ jsx("div", {
20
+ ref,
21
+ className,
22
+ children: Children.map(children, (child, index) => /* @__PURE__ */ jsx("div", {
23
+ className: cn("h-full transition-all duration-[550ms] ease-[cubic-bezier(0.16,1,0.3,1)] motion-reduce:transition-none", STAGGER_DELAYS[Math.min(index, STAGGER_DELAYS.length - 1)], inView ? "translate-y-0 opacity-100" : "translate-y-6 opacity-0 motion-reduce:translate-y-0 motion-reduce:opacity-100"),
24
+ children: child
25
+ }))
26
+ });
27
+ }
28
+ //#endregion
29
+ export { StaggerReveal };
30
+
31
+ //# sourceMappingURL=StaggerReveal.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StaggerReveal.mjs","names":[],"sources":["../../../../src/ui/components/StaggerReveal/StaggerReveal.tsx"],"sourcesContent":["'use client'\n\nimport { Children } from 'react'\n\nimport { useInView } from '../../hooks/useInView.js'\nimport { cn } from '../../utils/cn.js'\n\nimport type { ReactNode } from 'react'\n\nexport type StaggerRevealProps = {\n className?: string\n children: ReactNode\n}\n\nconst STAGGER_DELAYS = [\n 'delay-[0ms]',\n 'delay-[100ms]',\n 'delay-[200ms]',\n 'delay-[300ms]',\n 'delay-[400ms]',\n 'delay-[500ms]',\n 'delay-[600ms]',\n 'delay-[700ms]',\n]\n\nfunction StaggerReveal({ className, children }: StaggerRevealProps) {\n const { ref, inView } = useInView<HTMLDivElement>()\n\n return (\n <div ref={ref} className={className}>\n {Children.map(children, (child, index) => (\n <div\n className={cn(\n 'h-full transition-all duration-[550ms] ease-[cubic-bezier(0.16,1,0.3,1)] motion-reduce:transition-none',\n STAGGER_DELAYS[Math.min(index, STAGGER_DELAYS.length - 1)],\n inView\n ? 'translate-y-0 opacity-100'\n : 'translate-y-6 opacity-0 motion-reduce:translate-y-0 motion-reduce:opacity-100'\n )}\n >\n {child}\n </div>\n ))}\n </div>\n )\n}\n\nexport { StaggerReveal }\n"],"mappings":";;;;;;AAcA,MAAM,iBAAiB;CACrB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF;AAEA,SAAS,cAAc,EAAE,WAAW,YAAgC;CAClE,MAAM,EAAE,KAAK,WAAW,UAA0B;CAElD,OACE,oBAAC,OAAD;EAAU;EAAgB;EACvB,UAAA,SAAS,IAAI,WAAW,OAAO,UAC9B,oBAAC,OAAD;GACE,WAAW,GACT,0GACA,eAAe,KAAK,IAAI,OAAO,eAAe,SAAS,CAAC,IACxD,SACI,8BACA,+EACN;GAEC,UAAA;EACE,CAAA,CACN;CACE,CAAA;AAET"}
@@ -0,0 +1,2 @@
1
+ import { StaggerReveal, StaggerRevealProps } from "./StaggerReveal.mjs";
2
+ export { StaggerReveal, type StaggerRevealProps };
@@ -0,0 +1,2 @@
1
+ import { StaggerReveal } from "./StaggerReveal.mjs";
2
+ export { StaggerReveal };
@@ -0,0 +1,15 @@
1
+ import { ReactNode } from "react";
2
+ //#region src/ui/components/Stepper/Stepper.d.ts
3
+ type StepperItem = {
4
+ id: string;
5
+ title: string;
6
+ description?: ReactNode;
7
+ };
8
+ type StepperProps = {
9
+ items: StepperItem[];
10
+ className?: string;
11
+ };
12
+ declare function Stepper({ items, className }: StepperProps): import("react").JSX.Element;
13
+ //#endregion
14
+ export { Stepper, StepperItem, StepperProps };
15
+ //# sourceMappingURL=Stepper.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Stepper.d.mts","names":[],"sources":["../../../../src/ui/components/Stepper/Stepper.tsx"],"mappings":";;KAIY;EACV;EACA;EACA,cAAc;;KAGJ;EACV,OAAO;EACP;;iBAGO,UAAU,OAAO,aAAa,+BAAY,IAAA"}
@@ -0,0 +1,38 @@
1
+ import { cn } from "../../utils/cn.mjs";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
+ //#region src/ui/components/Stepper/Stepper.tsx
4
+ function Stepper({ items, className }) {
5
+ return /* @__PURE__ */ jsx("ol", {
6
+ className: cn("relative flex flex-col gap-8 pl-0", className),
7
+ children: items.map((item, idx) => /* @__PURE__ */ jsxs("li", {
8
+ className: "relative flex items-start gap-2.5",
9
+ children: [
10
+ idx < items.length - 1 ? /* @__PURE__ */ jsx("span", {
11
+ "aria-hidden": true,
12
+ className: "absolute top-8 bottom-[-32px] left-[17px] w-px bg-border"
13
+ }) : null,
14
+ /* @__PURE__ */ jsx("span", {
15
+ className: "relative z-10 flex size-[34px] shrink-0 items-center justify-center rounded-full bg-accent text-sm font-normal text-accent-foreground",
16
+ children: String(idx + 1).padStart(2, "0")
17
+ }),
18
+ /* @__PURE__ */ jsxs("div", {
19
+ className: "flex-1 pt-1",
20
+ children: [/* @__PURE__ */ jsx("p", {
21
+ className: "mb-3 text-base font-bold text-foreground",
22
+ children: item.title
23
+ }), item.description ? typeof item.description === "string" ? /* @__PURE__ */ jsx("div", {
24
+ className: "prose text-base text-secondary",
25
+ dangerouslySetInnerHTML: { __html: item.description }
26
+ }) : /* @__PURE__ */ jsx("div", {
27
+ className: "text-base text-secondary",
28
+ children: item.description
29
+ }) : null]
30
+ })
31
+ ]
32
+ }, item.id))
33
+ });
34
+ }
35
+ //#endregion
36
+ export { Stepper };
37
+
38
+ //# sourceMappingURL=Stepper.mjs.map