@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 @@
1
+ {"version":3,"file":"Stepper.mjs","names":[],"sources":["../../../../src/ui/components/Stepper/Stepper.tsx"],"sourcesContent":["import { cn } from '../../utils/cn.js'\n\nimport type { ReactNode } from 'react'\n\nexport type StepperItem = {\n id: string\n title: string\n description?: ReactNode\n}\n\nexport type StepperProps = {\n items: StepperItem[]\n className?: string\n}\n\nfunction Stepper({ items, className }: StepperProps) {\n return (\n <ol className={cn('relative flex flex-col gap-8 pl-0', className)}>\n {items.map((item, idx) => (\n <li key={item.id} className=\"relative flex items-start gap-2.5\">\n {idx < items.length - 1 ? (\n <span\n aria-hidden\n className=\"absolute top-8 bottom-[-32px] left-[17px] w-px bg-border\"\n />\n ) : null}\n <span className=\"relative z-10 flex size-[34px] shrink-0 items-center justify-center rounded-full bg-accent text-sm font-normal text-accent-foreground\">\n {String(idx + 1).padStart(2, '0')}\n </span>\n <div className=\"flex-1 pt-1\">\n <p className=\"mb-3 text-base font-bold text-foreground\">{item.title}</p>\n {item.description ? (\n typeof item.description === 'string' ? (\n <div\n className=\"prose text-base text-secondary\"\n dangerouslySetInnerHTML={{ __html: item.description }}\n />\n ) : (\n <div className=\"text-base text-secondary\">{item.description}</div>\n )\n ) : null}\n </div>\n </li>\n ))}\n </ol>\n )\n}\n\nexport { Stepper }\n"],"mappings":";;;AAeA,SAAS,QAAQ,EAAE,OAAO,aAA2B;CACnD,OACE,oBAAC,MAAD;EAAI,WAAW,GAAG,qCAAqC,SAAS;EAC7D,UAAA,MAAM,KAAK,MAAM,QAChB,qBAAC,MAAD;GAAkB,WAAU;GAA5B,UAAA;IACG,MAAM,MAAM,SAAS,IACpB,oBAAC,QAAD;KACE,eAAA;KACA,WAAU;IACX,CAAA,IACC;IACJ,oBAAC,QAAD;KAAM,WAAU;KACb,UAAA,OAAO,MAAM,CAAC,CAAC,CAAC,SAAS,GAAG,GAAG;IAC5B,CAAA;IACN,qBAAC,OAAD;KAAK,WAAU;KAAf,UAAA,CACE,oBAAC,KAAD;MAAG,WAAU;MAA4C,UAAA,KAAK;KAAS,CAAA,GACtE,KAAK,cACJ,OAAO,KAAK,gBAAgB,WAC1B,oBAAC,OAAD;MACE,WAAU;MACV,yBAAyB,EAAE,QAAQ,KAAK,YAAY;KACrD,CAAA,IAED,oBAAC,OAAD;MAAK,WAAU;MAA4B,UAAA,KAAK;KAAiB,CAAA,IAEjE,IACD;;GACH;EAvBK,GAAA,KAAK,EAuBV,CACL;CACC,CAAA;AAER"}
@@ -0,0 +1,2 @@
1
+ import { Stepper, StepperItem, StepperProps } from "./Stepper.mjs";
2
+ export { Stepper, type StepperItem, type StepperProps };
@@ -0,0 +1,2 @@
1
+ import { Stepper } from "./Stepper.mjs";
2
+ export { Stepper };
@@ -0,0 +1,12 @@
1
+ import { ComponentProps } from "react";
2
+ import { Primitive } from "@radix-ui/react-primitive";
3
+ //#region src/ui/components/Switch/Switch.d.ts
4
+ type SwitchProps = Omit<ComponentProps<typeof Primitive.button>, 'onChange'> & {
5
+ checked?: boolean;
6
+ defaultChecked?: boolean;
7
+ onCheckedChange?: (checked: boolean) => void;
8
+ };
9
+ declare function Switch({ className, checked: checkedProp, defaultChecked, onCheckedChange, disabled, ...props }: SwitchProps): import("react").JSX.Element;
10
+ //#endregion
11
+ export { Switch, SwitchProps };
12
+ //# sourceMappingURL=Switch.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Switch.d.mts","names":[],"sources":["../../../../src/ui/components/Switch/Switch.tsx"],"mappings":";;;KASY,cAAc,KAAK,sBAAsB,UAAU;EAC7D;EACA;EACA,mBAAmB;;iBAGZ,SACP,WACA,SAAS,aACT,gBACA,iBACA,aACG,SACF,8BAAW,IAAA"}
@@ -0,0 +1,34 @@
1
+ "use client";
2
+ import { cn } from "../../utils/cn.mjs";
3
+ import { jsx } from "react/jsx-runtime";
4
+ import { useState } from "react";
5
+ import { Primitive } from "@radix-ui/react-primitive";
6
+ //#region src/ui/components/Switch/Switch.tsx
7
+ function Switch({ className, checked: checkedProp, defaultChecked = false, onCheckedChange, disabled, ...props }) {
8
+ const isControlled = checkedProp !== void 0;
9
+ const [uncontrolled, setUncontrolled] = useState(defaultChecked);
10
+ const checked = isControlled ? Boolean(checkedProp) : uncontrolled;
11
+ function setChecked(next) {
12
+ if (!isControlled) setUncontrolled(next);
13
+ onCheckedChange?.(next);
14
+ }
15
+ return /* @__PURE__ */ jsx(Primitive.button, {
16
+ type: "button",
17
+ role: "switch",
18
+ "data-slot": "switch",
19
+ "data-state": checked ? "checked" : "unchecked",
20
+ "aria-checked": checked,
21
+ disabled,
22
+ onClick: () => setChecked(!checked),
23
+ className: cn("inline-flex h-6 w-11 shrink-0 cursor-pointer items-center rounded-full px-0.5", "bg-surface data-[state=checked]:bg-accent", "transition-colors duration-200", "focus-visible:ring-2 focus-visible:ring-accent focus-visible:ring-offset-2 focus-visible:ring-offset-background focus-visible:outline-none", "disabled:cursor-not-allowed disabled:opacity-50", className),
24
+ ...props,
25
+ children: /* @__PURE__ */ jsx("span", {
26
+ "data-state": checked ? "checked" : "unchecked",
27
+ className: cn("block size-5 shrink-0 rounded-full bg-foreground shadow-sm", "transition-transform duration-200 ease-in-out", "data-[state=unchecked]:translate-x-0", "data-[state=checked]:translate-x-5")
28
+ })
29
+ });
30
+ }
31
+ //#endregion
32
+ export { Switch };
33
+
34
+ //# sourceMappingURL=Switch.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Switch.mjs","names":[],"sources":["../../../../src/ui/components/Switch/Switch.tsx"],"sourcesContent":["'use client'\n\nimport { useState } from 'react'\nimport { Primitive } from '@radix-ui/react-primitive'\n\nimport { cn } from '../../utils/cn.js'\n\nimport type { ComponentProps } from 'react'\n\nexport type SwitchProps = Omit<ComponentProps<typeof Primitive.button>, 'onChange'> & {\n checked?: boolean\n defaultChecked?: boolean\n onCheckedChange?: (checked: boolean) => void\n}\n\nfunction Switch({\n className,\n checked: checkedProp,\n defaultChecked = false,\n onCheckedChange,\n disabled,\n ...props\n}: SwitchProps) {\n const isControlled = checkedProp !== undefined\n const [uncontrolled, setUncontrolled] = useState(defaultChecked)\n const checked = isControlled ? Boolean(checkedProp) : uncontrolled\n\n function setChecked(next: boolean) {\n if (!isControlled) setUncontrolled(next)\n onCheckedChange?.(next)\n }\n\n return (\n <Primitive.button\n type=\"button\"\n role=\"switch\"\n data-slot=\"switch\"\n data-state={checked ? 'checked' : 'unchecked'}\n aria-checked={checked}\n disabled={disabled}\n onClick={() => setChecked(!checked)}\n className={cn(\n 'inline-flex h-6 w-11 shrink-0 cursor-pointer items-center rounded-full px-0.5',\n 'bg-surface data-[state=checked]:bg-accent',\n 'transition-colors duration-200',\n 'focus-visible:ring-2 focus-visible:ring-accent focus-visible:ring-offset-2 focus-visible:ring-offset-background focus-visible:outline-none',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n className\n )}\n {...props}\n >\n <span\n data-state={checked ? 'checked' : 'unchecked'}\n className={cn(\n 'block size-5 shrink-0 rounded-full bg-foreground shadow-sm',\n 'transition-transform duration-200 ease-in-out',\n 'data-[state=unchecked]:translate-x-0',\n 'data-[state=checked]:translate-x-5'\n )}\n />\n </Primitive.button>\n )\n}\n\nexport { Switch }\n"],"mappings":";;;;;;AAeA,SAAS,OAAO,EACd,WACA,SAAS,aACT,iBAAiB,OACjB,iBACA,UACA,GAAG,SACW;CACd,MAAM,eAAe,gBAAgB;CACrC,MAAM,CAAC,cAAc,mBAAmB,SAAS,cAAc;CAC/D,MAAM,UAAU,eAAe,QAAQ,WAAW,IAAI;CAEtD,SAAS,WAAW,MAAe;EACjC,IAAI,CAAC,cAAc,gBAAgB,IAAI;EACvC,kBAAkB,IAAI;CACxB;CAEA,OACE,oBAAC,UAAU,QAAX;EACE,MAAK;EACL,MAAK;EACL,aAAU;EACV,cAAY,UAAU,YAAY;EAClC,gBAAc;EACJ;EACV,eAAe,WAAW,CAAC,OAAO;EAClC,WAAW,GACT,iFACA,6CACA,kCACA,8IACA,mDACA,SACF;EACA,GAAI;EAEJ,UAAA,oBAAC,QAAD;GACE,cAAY,UAAU,YAAY;GAClC,WAAW,GACT,8DACA,iDACA,wCACA,oCACF;EACD,CAAA;CACe,CAAA;AAEtB"}
@@ -0,0 +1,2 @@
1
+ import { Switch, SwitchProps } from "./Switch.mjs";
2
+ export { Switch, type SwitchProps };
@@ -0,0 +1,2 @@
1
+ import { Switch } from "./Switch.mjs";
2
+ export { Switch };
@@ -0,0 +1,9 @@
1
+ import { ComponentPropsWithoutRef } from "react";
2
+ //#region src/ui/components/TextButton/TextButton.d.ts
3
+ type TextButtonProps = ComponentPropsWithoutRef<'button'> & {
4
+ asChild?: boolean;
5
+ };
6
+ declare function TextButton({ className, asChild, ...props }: TextButtonProps): import("react").JSX.Element;
7
+ //#endregion
8
+ export { TextButton, TextButtonProps };
9
+ //# sourceMappingURL=TextButton.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TextButton.d.mts","names":[],"sources":["../../../../src/ui/components/TextButton/TextButton.tsx"],"mappings":";;KAQY,kBAAkB;EAC5B;;iBAGO,aAAa,WAAW,YAAoB,SAAS,kCAAe,IAAA"}
@@ -0,0 +1,16 @@
1
+ "use client";
2
+ import { cn } from "../../utils/cn.mjs";
3
+ import { jsx } from "react/jsx-runtime";
4
+ import { Slot } from "@radix-ui/react-slot";
5
+ //#region src/ui/components/TextButton/TextButton.tsx
6
+ function TextButton({ className, asChild = false, ...props }) {
7
+ return /* @__PURE__ */ jsx(asChild ? Slot : "button", {
8
+ "data-slot": "text-button",
9
+ className: cn("inline-flex h-auto cursor-pointer items-center justify-start rounded-btn bg-transparent px-3 py-2.5 text-sm font-semibold text-foreground transition-colors hover:text-secondary", className),
10
+ ...props
11
+ });
12
+ }
13
+ //#endregion
14
+ export { TextButton };
15
+
16
+ //# sourceMappingURL=TextButton.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TextButton.mjs","names":[],"sources":["../../../../src/ui/components/TextButton/TextButton.tsx"],"sourcesContent":["'use client'\n\nimport { Slot } from '@radix-ui/react-slot'\n\nimport { cn } from '../../utils/cn.js'\n\nimport type { ComponentPropsWithoutRef } from 'react'\n\nexport type TextButtonProps = ComponentPropsWithoutRef<'button'> & {\n asChild?: boolean\n}\n\nfunction TextButton({ className, asChild = false, ...props }: TextButtonProps) {\n const Comp = asChild ? Slot : 'button'\n\n return (\n <Comp\n data-slot=\"text-button\"\n className={cn(\n 'inline-flex h-auto cursor-pointer items-center justify-start rounded-btn bg-transparent px-3 py-2.5 text-sm font-semibold text-foreground transition-colors hover:text-secondary',\n className\n )}\n {...props}\n />\n )\n}\n\nexport { TextButton }\n"],"mappings":";;;;;AAYA,SAAS,WAAW,EAAE,WAAW,UAAU,OAAO,GAAG,SAA0B;CAG7E,OACE,oBAHW,UAAU,OAAO,UAG5B;EACE,aAAU;EACV,WAAW,GACT,oLACA,SACF;EACA,GAAI;CACL,CAAA;AAEL"}
@@ -0,0 +1,2 @@
1
+ import { TextButton, TextButtonProps } from "./TextButton.mjs";
2
+ export { TextButton, type TextButtonProps };
@@ -0,0 +1,2 @@
1
+ import { TextButton } from "./TextButton.mjs";
2
+ export { TextButton };
@@ -0,0 +1,9 @@
1
+ import { ComponentProps } from "react";
2
+ //#region src/ui/components/Textarea/Textarea.d.ts
3
+ type TextareaProps = Omit<ComponentProps<'textarea'>, 'children'> & {
4
+ error?: boolean | string;
5
+ };
6
+ declare function Textarea({ className, error, id, ref, ...props }: TextareaProps): import("react").JSX.Element;
7
+ //#endregion
8
+ export { Textarea, TextareaProps };
9
+ //# sourceMappingURL=Textarea.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Textarea.d.mts","names":[],"sources":["../../../../src/ui/components/Textarea/Textarea.tsx"],"mappings":";;KAIY,gBAAgB,KAAK;EAC/B;;iBAGO,WAAW,WAAW,OAAO,IAAI,QAAQ,SAAS,gCAAa,IAAA"}
@@ -0,0 +1,27 @@
1
+ import { cn } from "../../utils/cn.mjs";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
+ //#region src/ui/components/Textarea/Textarea.tsx
4
+ function Textarea({ className, error, id, ref, ...props }) {
5
+ const errorId = id ? `${id}-error` : void 0;
6
+ const hasError = Boolean(error);
7
+ return /* @__PURE__ */ jsxs("div", {
8
+ className: "flex w-full flex-col gap-1",
9
+ children: [/* @__PURE__ */ jsx("textarea", {
10
+ ref,
11
+ id,
12
+ "data-slot": "textarea",
13
+ "aria-invalid": hasError || void 0,
14
+ "aria-describedby": hasError && errorId ? errorId : void 0,
15
+ className: cn("min-h-24 w-full resize-y rounded-btn border border-border-subtle bg-background px-3.5 py-3 text-sm text-foreground", "placeholder:text-muted", "transition-colors hover:border-border", "focus-visible:border-accent focus-visible:outline-none", "disabled:cursor-not-allowed disabled:opacity-50", hasError && "border-destructive focus-visible:border-destructive", className),
16
+ ...props
17
+ }), typeof error === "string" ? /* @__PURE__ */ jsx("p", {
18
+ id: errorId,
19
+ className: "text-xs text-destructive",
20
+ children: error
21
+ }) : null]
22
+ });
23
+ }
24
+ //#endregion
25
+ export { Textarea };
26
+
27
+ //# sourceMappingURL=Textarea.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Textarea.mjs","names":[],"sources":["../../../../src/ui/components/Textarea/Textarea.tsx"],"sourcesContent":["import { cn } from '../../utils/cn.js'\n\nimport type { ComponentProps } from 'react'\n\nexport type TextareaProps = Omit<ComponentProps<'textarea'>, 'children'> & {\n error?: boolean | string\n}\n\nfunction Textarea({ className, error, id, ref, ...props }: TextareaProps) {\n const errorId = id ? `${id}-error` : undefined\n const hasError = Boolean(error)\n\n return (\n <div className=\"flex w-full flex-col gap-1\">\n <textarea\n ref={ref}\n id={id}\n data-slot=\"textarea\"\n aria-invalid={hasError || undefined}\n aria-describedby={hasError && errorId ? errorId : undefined}\n className={cn(\n 'min-h-24 w-full resize-y rounded-btn border border-border-subtle bg-background px-3.5 py-3 text-sm text-foreground',\n 'placeholder:text-muted',\n 'transition-colors hover:border-border',\n 'focus-visible:border-accent focus-visible:outline-none',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n hasError && 'border-destructive focus-visible:border-destructive',\n className\n )}\n {...props}\n />\n\n {typeof error === 'string' ? (\n <p id={errorId} className=\"text-xs text-destructive\">\n {error}\n </p>\n ) : null}\n </div>\n )\n}\n\nexport { Textarea }\n"],"mappings":";;;AAQA,SAAS,SAAS,EAAE,WAAW,OAAO,IAAI,KAAK,GAAG,SAAwB;CACxE,MAAM,UAAU,KAAK,GAAG,GAAG,UAAU;CACrC,MAAM,WAAW,QAAQ,KAAK;CAE9B,OACE,qBAAC,OAAD;EAAK,WAAU;EAAf,UAAA,CACE,oBAAC,YAAD;GACO;GACD;GACJ,aAAU;GACV,gBAAc,YAAY;GAC1B,oBAAkB,YAAY,UAAU,UAAU;GAClD,WAAW,GACT,sHACA,0BACA,yCACA,0DACA,mDACA,YAAY,uDACZ,SACF;GACA,GAAI;EACL,CAAA,GAEA,OAAO,UAAU,WAChB,oBAAC,KAAD;GAAG,IAAI;GAAS,WAAU;GACvB,UAAA;EACA,CAAA,IACD,IACD;;AAET"}
@@ -0,0 +1,2 @@
1
+ import { Textarea, TextareaProps } from "./Textarea.mjs";
2
+ export { Textarea, type TextareaProps };
@@ -0,0 +1,2 @@
1
+ import { Textarea } from "./Textarea.mjs";
2
+ export { Textarea };
@@ -0,0 +1,20 @@
1
+ import { ReactNode } from "react";
2
+ //#region src/ui/components/Toast/Toast.d.ts
3
+ type ToastVariant = 'success' | 'error';
4
+ type ShowToastInput = {
5
+ message: string;
6
+ variant?: ToastVariant;
7
+ };
8
+ type ToastContextValue = {
9
+ showToast: (input: ShowToastInput) => void;
10
+ };
11
+ type ToastProviderProps = {
12
+ children: ReactNode;
13
+ /** Accessible label for the dismiss control. Required — apps own i18n. */
14
+ dismissLabel: string;
15
+ };
16
+ declare function ToastProvider({ children, dismissLabel }: ToastProviderProps): import("react").JSX.Element;
17
+ declare function useToast(): ToastContextValue;
18
+ //#endregion
19
+ export { ToastProvider, ToastProviderProps, useToast };
20
+ //# sourceMappingURL=Toast.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Toast.d.mts","names":[],"sources":["../../../../src/ui/components/Toast/Toast.tsx"],"mappings":";;KAMK;KAQA;EACH;EACA,UAAU;;KAGP;EACH,YAAY,OAAO;;KAOT;EACV,UAAU;;EAEV;;iBAsDc,gBAAgB,UAAU,gBAAgB,qCAAkB,IAAA;iBA8D5D,YAAQ"}
@@ -0,0 +1,128 @@
1
+ "use client";
2
+ import { cn } from "../../utils/cn.mjs";
3
+ import { jsx, jsxs } from "react/jsx-runtime";
4
+ import { createContext, useContext, useEffect, useRef, useState } from "react";
5
+ //#region src/ui/components/Toast/Toast.tsx
6
+ const ToastContext = createContext(null);
7
+ const TOAST_DURATION_MS = 4e3;
8
+ function CloseIcon() {
9
+ return /* @__PURE__ */ jsx("svg", {
10
+ "aria-hidden": "true",
11
+ viewBox: "0 0 16 16",
12
+ width: "16",
13
+ height: "16",
14
+ fill: "none",
15
+ children: /* @__PURE__ */ jsx("path", {
16
+ d: "M4 4l8 8M12 4l-8 8",
17
+ stroke: "currentColor",
18
+ strokeWidth: "1.5",
19
+ strokeLinecap: "round"
20
+ })
21
+ });
22
+ }
23
+ function StatusIcon({ variant }) {
24
+ if (variant === "success") return /* @__PURE__ */ jsxs("svg", {
25
+ "aria-hidden": "true",
26
+ viewBox: "0 0 20 20",
27
+ width: "20",
28
+ height: "20",
29
+ fill: "none",
30
+ className: "shrink-0 text-success",
31
+ children: [/* @__PURE__ */ jsx("circle", {
32
+ cx: "10",
33
+ cy: "10",
34
+ r: "8",
35
+ stroke: "currentColor",
36
+ strokeWidth: "1.5"
37
+ }), /* @__PURE__ */ jsx("path", {
38
+ d: "M6.5 10.2 9 12.5l4.5-5",
39
+ stroke: "currentColor",
40
+ strokeWidth: "1.5",
41
+ strokeLinecap: "round",
42
+ strokeLinejoin: "round"
43
+ })]
44
+ });
45
+ return /* @__PURE__ */ jsxs("svg", {
46
+ "aria-hidden": "true",
47
+ viewBox: "0 0 20 20",
48
+ width: "20",
49
+ height: "20",
50
+ fill: "none",
51
+ className: "shrink-0 text-destructive",
52
+ children: [/* @__PURE__ */ jsx("path", {
53
+ d: "M10 3.5 17.5 16.5H2.5L10 3.5Z",
54
+ stroke: "currentColor",
55
+ strokeWidth: "1.5",
56
+ strokeLinejoin: "round"
57
+ }), /* @__PURE__ */ jsx("path", {
58
+ d: "M10 8v4M10 14.5h.01",
59
+ stroke: "currentColor",
60
+ strokeWidth: "1.5",
61
+ strokeLinecap: "round"
62
+ })]
63
+ });
64
+ }
65
+ function ToastProvider({ children, dismissLabel }) {
66
+ const [toasts, setToasts] = useState([]);
67
+ const timersRef = useRef(/* @__PURE__ */ new Map());
68
+ function dismissToast(id) {
69
+ const timer = timersRef.current.get(id);
70
+ if (timer) {
71
+ clearTimeout(timer);
72
+ timersRef.current.delete(id);
73
+ }
74
+ setToasts((current) => current.filter((toast) => toast.id !== id));
75
+ }
76
+ function showToast({ message, variant = "success" }) {
77
+ const id = crypto.randomUUID();
78
+ setToasts((current) => [...current, {
79
+ id,
80
+ message,
81
+ variant
82
+ }]);
83
+ const timer = setTimeout(() => dismissToast(id), TOAST_DURATION_MS);
84
+ timersRef.current.set(id, timer);
85
+ }
86
+ useEffect(() => {
87
+ const timers = timersRef.current;
88
+ return () => {
89
+ timers.forEach((timer) => clearTimeout(timer));
90
+ timers.clear();
91
+ };
92
+ }, []);
93
+ return /* @__PURE__ */ jsxs(ToastContext.Provider, {
94
+ value: { showToast },
95
+ children: [children, /* @__PURE__ */ jsx("div", {
96
+ "aria-live": "polite",
97
+ "aria-relevant": "additions",
98
+ className: "pointer-events-none fixed inset-x-4 bottom-4 z-[100] flex flex-col gap-2 sm:inset-x-auto sm:right-4 sm:max-w-sm",
99
+ children: toasts.map((toast) => /* @__PURE__ */ jsxs("div", {
100
+ role: "status",
101
+ className: cn("pointer-events-auto flex items-center gap-3 rounded-card border border-border-subtle", "bg-card-elevated py-3.5 pr-3.5 pl-4 shadow-lg"),
102
+ children: [
103
+ /* @__PURE__ */ jsx(StatusIcon, { variant: toast.variant }),
104
+ /* @__PURE__ */ jsx("p", {
105
+ className: "min-w-0 flex-1 text-sm font-semibold text-foreground",
106
+ children: toast.message
107
+ }),
108
+ /* @__PURE__ */ jsx("button", {
109
+ type: "button",
110
+ onClick: () => dismissToast(toast.id),
111
+ className: "inline-flex shrink-0 cursor-pointer text-muted transition-colors hover:text-secondary",
112
+ "aria-label": dismissLabel,
113
+ children: /* @__PURE__ */ jsx(CloseIcon, {})
114
+ })
115
+ ]
116
+ }, toast.id))
117
+ })]
118
+ });
119
+ }
120
+ function useToast() {
121
+ const context = useContext(ToastContext);
122
+ if (!context) throw new Error("useToast must be used within ToastProvider");
123
+ return context;
124
+ }
125
+ //#endregion
126
+ export { ToastProvider, useToast };
127
+
128
+ //# sourceMappingURL=Toast.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Toast.mjs","names":[],"sources":["../../../../src/ui/components/Toast/Toast.tsx"],"sourcesContent":["'use client'\n\nimport { createContext, useContext, useEffect, useRef, useState, type ReactNode } from 'react'\n\nimport { cn } from '../../utils/cn.js'\n\ntype ToastVariant = 'success' | 'error'\n\ntype ToastItem = {\n id: string\n message: string\n variant: ToastVariant\n}\n\ntype ShowToastInput = {\n message: string\n variant?: ToastVariant\n}\n\ntype ToastContextValue = {\n showToast: (input: ShowToastInput) => void\n}\n\nconst ToastContext = createContext<ToastContextValue | null>(null)\n\nconst TOAST_DURATION_MS = 4000\n\nexport type ToastProviderProps = {\n children: ReactNode\n /** Accessible label for the dismiss control. Required — apps own i18n. */\n dismissLabel: string\n}\n\nfunction CloseIcon() {\n return (\n <svg aria-hidden=\"true\" viewBox=\"0 0 16 16\" width=\"16\" height=\"16\" fill=\"none\">\n <path d=\"M4 4l8 8M12 4l-8 8\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n )\n}\n\nfunction StatusIcon({ variant }: { variant: ToastVariant }) {\n if (variant === 'success') {\n return (\n <svg\n aria-hidden=\"true\"\n viewBox=\"0 0 20 20\"\n width=\"20\"\n height=\"20\"\n fill=\"none\"\n className=\"shrink-0 text-success\"\n >\n <circle cx=\"10\" cy=\"10\" r=\"8\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path\n d=\"M6.5 10.2 9 12.5l4.5-5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n )\n }\n\n return (\n <svg\n aria-hidden=\"true\"\n viewBox=\"0 0 20 20\"\n width=\"20\"\n height=\"20\"\n fill=\"none\"\n className=\"shrink-0 text-destructive\"\n >\n <path\n d=\"M10 3.5 17.5 16.5H2.5L10 3.5Z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinejoin=\"round\"\n />\n <path d=\"M10 8v4M10 14.5h.01\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n )\n}\n\nexport function ToastProvider({ children, dismissLabel }: ToastProviderProps) {\n const [toasts, setToasts] = useState<ToastItem[]>([])\n const timersRef = useRef<Map<string, ReturnType<typeof setTimeout>>>(new Map())\n\n function dismissToast(id: string) {\n const timer = timersRef.current.get(id)\n if (timer) {\n clearTimeout(timer)\n timersRef.current.delete(id)\n }\n setToasts((current) => current.filter((toast) => toast.id !== id))\n }\n\n function showToast({ message, variant = 'success' }: ShowToastInput) {\n const id = crypto.randomUUID()\n setToasts((current) => [...current, { id, message, variant }])\n const timer = setTimeout(() => dismissToast(id), TOAST_DURATION_MS)\n timersRef.current.set(id, timer)\n }\n\n useEffect(() => {\n const timers = timersRef.current\n return () => {\n timers.forEach((timer) => clearTimeout(timer))\n timers.clear()\n }\n }, [])\n\n return (\n <ToastContext.Provider value={{ showToast }}>\n {children}\n <div\n aria-live=\"polite\"\n aria-relevant=\"additions\"\n className=\"pointer-events-none fixed inset-x-4 bottom-4 z-[100] flex flex-col gap-2 sm:inset-x-auto sm:right-4 sm:max-w-sm\"\n >\n {toasts.map((toast) => (\n <div\n key={toast.id}\n role=\"status\"\n className={cn(\n 'pointer-events-auto flex items-center gap-3 rounded-card border border-border-subtle',\n 'bg-card-elevated py-3.5 pr-3.5 pl-4 shadow-lg'\n )}\n >\n <StatusIcon variant={toast.variant} />\n <p className=\"min-w-0 flex-1 text-sm font-semibold text-foreground\">{toast.message}</p>\n <button\n type=\"button\"\n onClick={() => dismissToast(toast.id)}\n className=\"inline-flex shrink-0 cursor-pointer text-muted transition-colors hover:text-secondary\"\n aria-label={dismissLabel}\n >\n <CloseIcon />\n </button>\n </div>\n ))}\n </div>\n </ToastContext.Provider>\n )\n}\n\nexport function useToast() {\n const context = useContext(ToastContext)\n if (!context) {\n throw new Error('useToast must be used within ToastProvider')\n }\n return context\n}\n"],"mappings":";;;;;AAuBA,MAAM,eAAe,cAAwC,IAAI;AAEjE,MAAM,oBAAoB;AAQ1B,SAAS,YAAY;CACnB,OACE,oBAAC,OAAD;EAAK,eAAY;EAAO,SAAQ;EAAY,OAAM;EAAK,QAAO;EAAK,MAAK;EACtE,UAAA,oBAAC,QAAD;GAAM,GAAE;GAAqB,QAAO;GAAe,aAAY;GAAM,eAAc;EAAS,CAAA;CACzF,CAAA;AAET;AAEA,SAAS,WAAW,EAAE,WAAsC;CAC1D,IAAI,YAAY,WACd,OACE,qBAAC,OAAD;EACE,eAAY;EACZ,SAAQ;EACR,OAAM;EACN,QAAO;EACP,MAAK;EACL,WAAU;EANZ,UAAA,CAQE,oBAAC,UAAD;GAAQ,IAAG;GAAK,IAAG;GAAK,GAAE;GAAI,QAAO;GAAe,aAAY;EAAO,CAAA,GACvE,oBAAC,QAAD;GACE,GAAE;GACF,QAAO;GACP,aAAY;GACZ,eAAc;GACd,gBAAe;EAChB,CAAA,CACE;;CAIT,OACE,qBAAC,OAAD;EACE,eAAY;EACZ,SAAQ;EACR,OAAM;EACN,QAAO;EACP,MAAK;EACL,WAAU;EANZ,UAAA,CAQE,oBAAC,QAAD;GACE,GAAE;GACF,QAAO;GACP,aAAY;GACZ,gBAAe;EAChB,CAAA,GACD,oBAAC,QAAD;GAAM,GAAE;GAAsB,QAAO;GAAe,aAAY;GAAM,eAAc;EAAS,CAAA,CAC1F;;AAET;AAEA,SAAgB,cAAc,EAAE,UAAU,gBAAoC;CAC5E,MAAM,CAAC,QAAQ,aAAa,SAAsB,CAAC,CAAC;CACpD,MAAM,YAAY,uBAAmD,IAAI,IAAI,CAAC;CAE9E,SAAS,aAAa,IAAY;EAChC,MAAM,QAAQ,UAAU,QAAQ,IAAI,EAAE;EACtC,IAAI,OAAO;GACT,aAAa,KAAK;GAClB,UAAU,QAAQ,OAAO,EAAE;EAC7B;EACA,WAAW,YAAY,QAAQ,QAAQ,UAAU,MAAM,OAAO,EAAE,CAAC;CACnE;CAEA,SAAS,UAAU,EAAE,SAAS,UAAU,aAA6B;EACnE,MAAM,KAAK,OAAO,WAAW;EAC7B,WAAW,YAAY,CAAC,GAAG,SAAS;GAAE;GAAI;GAAS;EAAQ,CAAC,CAAC;EAC7D,MAAM,QAAQ,iBAAiB,aAAa,EAAE,GAAG,iBAAiB;EAClE,UAAU,QAAQ,IAAI,IAAI,KAAK;CACjC;CAEA,gBAAgB;EACd,MAAM,SAAS,UAAU;EACzB,aAAa;GACX,OAAO,SAAS,UAAU,aAAa,KAAK,CAAC;GAC7C,OAAO,MAAM;EACf;CACF,GAAG,CAAC,CAAC;CAEL,OACE,qBAAC,aAAa,UAAd;EAAuB,OAAO,EAAE,UAAU;EAA1C,UAAA,CACG,UACD,oBAAC,OAAD;GACE,aAAU;GACV,iBAAc;GACd,WAAU;GAET,UAAA,OAAO,KAAK,UACX,qBAAC,OAAD;IAEE,MAAK;IACL,WAAW,GACT,wFACA,+CACF;IANF,UAAA;KAQE,oBAAC,YAAD,EAAY,SAAS,MAAM,QAAU,CAAA;KACrC,oBAAC,KAAD;MAAG,WAAU;MAAwD,UAAA,MAAM;KAAW,CAAA;KACtF,oBAAC,UAAD;MACE,MAAK;MACL,eAAe,aAAa,MAAM,EAAE;MACpC,WAAU;MACV,cAAY;MAEZ,UAAA,oBAAC,WAAD,CAAY,CAAA;KACN,CAAA;IACL;GAjBE,GAAA,MAAM,EAiBR,CACN;EACE,CAAA,CACgB;;AAE3B;AAEA,SAAgB,WAAW;CACzB,MAAM,UAAU,WAAW,YAAY;CACvC,IAAI,CAAC,SACH,MAAM,IAAI,MAAM,4CAA4C;CAE9D,OAAO;AACT"}
@@ -0,0 +1,2 @@
1
+ import { ToastProvider, ToastProviderProps, useToast } from "./Toast.mjs";
2
+ export { ToastProvider, type ToastProviderProps, useToast };
@@ -0,0 +1,2 @@
1
+ import { ToastProvider, useToast } from "./Toast.mjs";
2
+ export { ToastProvider, useToast };
@@ -0,0 +1,11 @@
1
+ import { ComponentProps } from "react";
2
+ import * as TooltipPrimitive from "@radix-ui/react-tooltip";
3
+ //#region src/ui/components/Tooltip/Tooltip.d.ts
4
+ declare const TooltipProvider: import("react").FC<TooltipPrimitive.TooltipProviderProps>;
5
+ declare const Tooltip: import("react").FC<TooltipPrimitive.TooltipProps>;
6
+ declare const TooltipTrigger: import("react").ForwardRefExoticComponent<TooltipPrimitive.TooltipTriggerProps & import("react").RefAttributes<HTMLButtonElement>>;
7
+ type TooltipContentProps = ComponentProps<typeof TooltipPrimitive.Content>;
8
+ declare function TooltipContent({ className, sideOffset, ...props }: TooltipContentProps): import("react").JSX.Element;
9
+ //#endregion
10
+ export { Tooltip, TooltipContent, TooltipContentProps, TooltipProvider, TooltipTrigger };
11
+ //# sourceMappingURL=Tooltip.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Tooltip.d.mts","names":[],"sources":["../../../../src/ui/components/Tooltip/Tooltip.tsx"],"mappings":";;;cAQM,iCAAe,GAAA,iBAAA;cACf,yBAAO,GAAA,iBAAA;cACP,gCAAc,0BAAA,iBAAA,sCAAA,cAAA;KAER,sBAAsB,sBAAsB,iBAAiB;iBAEhE,iBAAiB,WAAW,eAAmB,SAAS,sCAAmB,IAAA"}
@@ -0,0 +1,20 @@
1
+ "use client";
2
+ import { cn } from "../../utils/cn.mjs";
3
+ import { jsx } from "react/jsx-runtime";
4
+ import * as TooltipPrimitive from "@radix-ui/react-tooltip";
5
+ //#region src/ui/components/Tooltip/Tooltip.tsx
6
+ const TooltipProvider = TooltipPrimitive.Provider;
7
+ const Tooltip = TooltipPrimitive.Root;
8
+ const TooltipTrigger = TooltipPrimitive.Trigger;
9
+ function TooltipContent({ className, sideOffset = 6, ...props }) {
10
+ return /* @__PURE__ */ jsx(TooltipPrimitive.Portal, { children: /* @__PURE__ */ jsx(TooltipPrimitive.Content, {
11
+ "data-slot": "tooltip-content",
12
+ sideOffset,
13
+ className: cn("z-50 overflow-hidden rounded-btn border border-border bg-card px-3 py-1.5 text-body-xs text-foreground shadow-md", "animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95", "data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2", className),
14
+ ...props
15
+ }) });
16
+ }
17
+ //#endregion
18
+ export { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger };
19
+
20
+ //# sourceMappingURL=Tooltip.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Tooltip.mjs","names":[],"sources":["../../../../src/ui/components/Tooltip/Tooltip.tsx"],"sourcesContent":["'use client'\n\nimport * as TooltipPrimitive from '@radix-ui/react-tooltip'\n\nimport { cn } from '../../utils/cn.js'\n\nimport type { ComponentProps } from 'react'\n\nconst TooltipProvider = TooltipPrimitive.Provider\nconst Tooltip = TooltipPrimitive.Root\nconst TooltipTrigger = TooltipPrimitive.Trigger\n\nexport type TooltipContentProps = ComponentProps<typeof TooltipPrimitive.Content>\n\nfunction TooltipContent({ className, sideOffset = 6, ...props }: TooltipContentProps) {\n return (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n data-slot=\"tooltip-content\"\n sideOffset={sideOffset}\n className={cn(\n 'z-50 overflow-hidden rounded-btn border border-border bg-card px-3 py-1.5 text-body-xs text-foreground shadow-md',\n 'animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95',\n 'data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2',\n className\n )}\n {...props}\n />\n </TooltipPrimitive.Portal>\n )\n}\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider }\n"],"mappings":";;;;;AAQA,MAAM,kBAAkB,iBAAiB;AACzC,MAAM,UAAU,iBAAiB;AACjC,MAAM,iBAAiB,iBAAiB;AAIxC,SAAS,eAAe,EAAE,WAAW,aAAa,GAAG,GAAG,SAA8B;CACpF,OACE,oBAAC,iBAAiB,QAAlB,EAAA,UACE,oBAAC,iBAAiB,SAAlB;EACE,aAAU;EACE;EACZ,WAAW,GACT,oHACA,kIACA,+JACA,SACF;EACA,GAAI;CACL,CAAA,EACsB,CAAA;AAE7B"}
@@ -0,0 +1,2 @@
1
+ import { Tooltip, TooltipContent, TooltipContentProps, TooltipProvider, TooltipTrigger } from "./Tooltip.mjs";
2
+ export { Tooltip, TooltipContent, type TooltipContentProps, TooltipProvider, TooltipTrigger };
@@ -0,0 +1,2 @@
1
+ import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "./Tooltip.mjs";
2
+ export { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger };
@@ -0,0 +1,7 @@
1
+ import { HTMLAttributes } from "react";
2
+ //#region src/ui/components/VisuallyHidden/VisuallyHidden.d.ts
3
+ type VisuallyHiddenProps = HTMLAttributes<HTMLSpanElement>;
4
+ declare function VisuallyHidden({ className, ...props }: VisuallyHiddenProps): import("react").JSX.Element;
5
+ //#endregion
6
+ export { VisuallyHidden, VisuallyHiddenProps };
7
+ //# sourceMappingURL=VisuallyHidden.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VisuallyHidden.d.mts","names":[],"sources":["../../../../src/ui/components/VisuallyHidden/VisuallyHidden.tsx"],"mappings":";;KAIY,sBAAsB,eAAe;iBAExC,iBAAiB,cAAc,SAAS,sCAAmB,IAAA"}
@@ -0,0 +1,13 @@
1
+ import { cn } from "../../utils/cn.mjs";
2
+ import { jsx } from "react/jsx-runtime";
3
+ //#region src/ui/components/VisuallyHidden/VisuallyHidden.tsx
4
+ function VisuallyHidden({ className, ...props }) {
5
+ return /* @__PURE__ */ jsx("span", {
6
+ className: cn("absolute h-px w-px overflow-hidden border-0 p-0 whitespace-nowrap [clip:rect(0,0,0,0)]", className),
7
+ ...props
8
+ });
9
+ }
10
+ //#endregion
11
+ export { VisuallyHidden };
12
+
13
+ //# sourceMappingURL=VisuallyHidden.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VisuallyHidden.mjs","names":[],"sources":["../../../../src/ui/components/VisuallyHidden/VisuallyHidden.tsx"],"sourcesContent":["import { cn } from '../../utils/cn.js'\n\nimport type { HTMLAttributes } from 'react'\n\nexport type VisuallyHiddenProps = HTMLAttributes<HTMLSpanElement>\n\nfunction VisuallyHidden({ className, ...props }: VisuallyHiddenProps) {\n return (\n <span\n className={cn(\n 'absolute h-px w-px overflow-hidden border-0 p-0 whitespace-nowrap [clip:rect(0,0,0,0)]',\n className\n )}\n {...props}\n />\n )\n}\n\nexport { VisuallyHidden }\n"],"mappings":";;;AAMA,SAAS,eAAe,EAAE,WAAW,GAAG,SAA8B;CACpE,OACE,oBAAC,QAAD;EACE,WAAW,GACT,0FACA,SACF;EACA,GAAI;CACL,CAAA;AAEL"}
@@ -0,0 +1,2 @@
1
+ import { VisuallyHidden, VisuallyHiddenProps } from "./VisuallyHidden.mjs";
2
+ export { VisuallyHidden, type VisuallyHiddenProps };
@@ -0,0 +1,2 @@
1
+ import { VisuallyHidden } from "./VisuallyHidden.mjs";
2
+ export { VisuallyHidden };
@@ -0,0 +1,2 @@
1
+ import { UseInViewOptions, useInView } from "./useInView.mjs";
2
+ export { type UseInViewOptions, useInView };
@@ -0,0 +1,2 @@
1
+ import { useInView } from "./useInView.mjs";
2
+ export { useInView };
@@ -0,0 +1,13 @@
1
+ //#region src/ui/hooks/useInView.d.ts
2
+ type UseInViewOptions = {
3
+ once?: boolean;
4
+ rootMargin?: string;
5
+ threshold?: number;
6
+ };
7
+ declare function useInView<T extends Element>({ once, rootMargin, threshold }?: UseInViewOptions): {
8
+ ref: import("react").RefObject<T | null>;
9
+ inView: boolean;
10
+ };
11
+ //#endregion
12
+ export { UseInViewOptions, useInView };
13
+ //# sourceMappingURL=useInView.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useInView.d.mts","names":[],"sources":["../../../src/ui/hooks/useInView.ts"],"mappings":";KAIY;EACV;EACA;EACA;;iBAGc,UAAU,UAAU,WAClC,MACA,YACA,cACC"}
@@ -0,0 +1,37 @@
1
+ "use client";
2
+ import { useEffect, useRef, useState } from "react";
3
+ //#region src/ui/hooks/useInView.ts
4
+ function useInView({ once = true, rootMargin = "0px 0px -15% 0px", threshold = 0 } = {}) {
5
+ const ref = useRef(null);
6
+ const [inView, setInView] = useState(false);
7
+ useEffect(() => {
8
+ const el = ref.current;
9
+ if (!el) return;
10
+ if (typeof IntersectionObserver === "undefined") {
11
+ const id = setTimeout(() => setInView(true));
12
+ return () => clearTimeout(id);
13
+ }
14
+ const observer = new IntersectionObserver((entries) => {
15
+ const isIntersecting = entries.some((entry) => entry.isIntersecting);
16
+ setInView(isIntersecting);
17
+ if (isIntersecting && once) observer.disconnect();
18
+ }, {
19
+ rootMargin,
20
+ threshold
21
+ });
22
+ observer.observe(el);
23
+ return () => observer.disconnect();
24
+ }, [
25
+ once,
26
+ rootMargin,
27
+ threshold
28
+ ]);
29
+ return {
30
+ ref,
31
+ inView
32
+ };
33
+ }
34
+ //#endregion
35
+ export { useInView };
36
+
37
+ //# sourceMappingURL=useInView.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useInView.mjs","names":[],"sources":["../../../src/ui/hooks/useInView.ts"],"sourcesContent":["'use client'\n\nimport { useEffect, useRef, useState } from 'react'\n\nexport type UseInViewOptions = {\n once?: boolean\n rootMargin?: string\n threshold?: number\n}\n\nexport function useInView<T extends Element>({\n once = true,\n rootMargin = '0px 0px -15% 0px',\n threshold = 0,\n}: UseInViewOptions = {}) {\n const ref = useRef<T | null>(null)\n const [inView, setInView] = useState(false)\n\n useEffect(() => {\n const el = ref.current\n if (!el) return\n\n if (typeof IntersectionObserver === 'undefined') {\n const id = setTimeout(() => setInView(true))\n return () => clearTimeout(id)\n }\n\n const observer = new IntersectionObserver(\n (entries) => {\n const isIntersecting = entries.some((entry) => entry.isIntersecting)\n setInView(isIntersecting)\n if (isIntersecting && once) observer.disconnect()\n },\n { rootMargin, threshold }\n )\n\n observer.observe(el)\n return () => observer.disconnect()\n }, [once, rootMargin, threshold])\n\n return { ref, inView }\n}\n"],"mappings":";;;AAUA,SAAgB,UAA6B,EAC3C,OAAO,MACP,aAAa,oBACb,YAAY,MACQ,CAAC,GAAG;CACxB,MAAM,MAAM,OAAiB,IAAI;CACjC,MAAM,CAAC,QAAQ,aAAa,SAAS,KAAK;CAE1C,gBAAgB;EACd,MAAM,KAAK,IAAI;EACf,IAAI,CAAC,IAAI;EAET,IAAI,OAAO,yBAAyB,aAAa;GAC/C,MAAM,KAAK,iBAAiB,UAAU,IAAI,CAAC;GAC3C,aAAa,aAAa,EAAE;EAC9B;EAEA,MAAM,WAAW,IAAI,sBAClB,YAAY;GACX,MAAM,iBAAiB,QAAQ,MAAM,UAAU,MAAM,cAAc;GACnE,UAAU,cAAc;GACxB,IAAI,kBAAkB,MAAM,SAAS,WAAW;EAClD,GACA;GAAE;GAAY;EAAU,CAC1B;EAEA,SAAS,QAAQ,EAAE;EACnB,aAAa,SAAS,WAAW;CACnC,GAAG;EAAC;EAAM;EAAY;CAAS,CAAC;CAEhC,OAAO;EAAE;EAAK;CAAO;AACvB"}