@beautinique/frontend-components 1.0.7 → 1.0.9

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 (472) hide show
  1. package/README.md +389 -14
  2. package/dist/auth/AuthBottomInstructions.d.cts +42 -0
  3. package/dist/auth/AuthBottomInstructions.d.cts.map +1 -0
  4. package/dist/auth/AuthBottomInstructions.d.ts +42 -0
  5. package/dist/auth/AuthBottomInstructions.d.ts.map +1 -0
  6. package/dist/auth/SocialAuth.d.cts +33 -0
  7. package/dist/auth/SocialAuth.d.cts.map +1 -0
  8. package/dist/auth/SocialAuth.d.ts +33 -0
  9. package/dist/auth/SocialAuth.d.ts.map +1 -0
  10. package/dist/auth/index.cjs +84 -0
  11. package/dist/auth/index.cjs.map +1 -0
  12. package/dist/auth/index.d.cts +3 -0
  13. package/dist/auth/index.d.cts.map +1 -0
  14. package/dist/auth/index.d.ts +3 -0
  15. package/dist/auth/index.d.ts.map +1 -0
  16. package/dist/auth/index.js +81 -0
  17. package/dist/auth/index.js.map +1 -0
  18. package/dist/breadcrumb/Breadcrumb.d.cts +34 -0
  19. package/dist/breadcrumb/Breadcrumb.d.cts.map +1 -0
  20. package/dist/breadcrumb/Breadcrumb.d.ts +34 -0
  21. package/dist/breadcrumb/Breadcrumb.d.ts.map +1 -0
  22. package/dist/breadcrumb/breadcrumb-icons.d.cts +6 -0
  23. package/dist/breadcrumb/breadcrumb-icons.d.cts.map +1 -0
  24. package/dist/breadcrumb/breadcrumb-icons.d.ts +6 -0
  25. package/dist/breadcrumb/breadcrumb-icons.d.ts.map +1 -0
  26. package/dist/breadcrumb/getBreadcrumbItems.d.cts +16 -0
  27. package/dist/breadcrumb/getBreadcrumbItems.d.cts.map +1 -0
  28. package/dist/breadcrumb/getBreadcrumbItems.d.ts +16 -0
  29. package/dist/breadcrumb/getBreadcrumbItems.d.ts.map +1 -0
  30. package/dist/breadcrumb/index.cjs +110 -0
  31. package/dist/breadcrumb/index.cjs.map +1 -0
  32. package/dist/breadcrumb/index.d.cts +3 -0
  33. package/dist/breadcrumb/index.d.cts.map +1 -0
  34. package/dist/breadcrumb/index.d.ts +3 -0
  35. package/dist/breadcrumb/index.d.ts.map +1 -0
  36. package/dist/breadcrumb/index.js +107 -0
  37. package/dist/breadcrumb/index.js.map +1 -0
  38. package/dist/color-input/ColorInput.d.cts +33 -0
  39. package/dist/color-input/ColorInput.d.cts.map +1 -0
  40. package/dist/color-input/ColorInput.d.ts +33 -0
  41. package/dist/color-input/ColorInput.d.ts.map +1 -0
  42. package/dist/color-input/color-input-icons.d.cts +6 -0
  43. package/dist/color-input/color-input-icons.d.cts.map +1 -0
  44. package/dist/color-input/color-input-icons.d.ts +6 -0
  45. package/dist/color-input/color-input-icons.d.ts.map +1 -0
  46. package/dist/color-input/color.d.cts +10 -0
  47. package/dist/color-input/color.d.cts.map +1 -0
  48. package/dist/color-input/color.d.ts +10 -0
  49. package/dist/color-input/color.d.ts.map +1 -0
  50. package/dist/color-input/index.cjs +375 -0
  51. package/dist/color-input/index.cjs.map +1 -0
  52. package/dist/color-input/index.d.cts +2 -0
  53. package/dist/color-input/index.d.cts.map +1 -0
  54. package/dist/color-input/index.d.ts +2 -0
  55. package/dist/color-input/index.d.ts.map +1 -0
  56. package/dist/color-input/index.js +373 -0
  57. package/dist/color-input/index.js.map +1 -0
  58. package/dist/file-input/FileInput.d.cts +53 -0
  59. package/dist/file-input/FileInput.d.cts.map +1 -0
  60. package/dist/file-input/FileInput.d.ts +53 -0
  61. package/dist/file-input/FileInput.d.ts.map +1 -0
  62. package/dist/file-input/file-input-icons.d.cts +6 -0
  63. package/dist/file-input/file-input-icons.d.cts.map +1 -0
  64. package/dist/file-input/file-input-icons.d.ts +6 -0
  65. package/dist/file-input/file-input-icons.d.ts.map +1 -0
  66. package/dist/file-input/index.cjs +259 -0
  67. package/dist/file-input/index.cjs.map +1 -0
  68. package/dist/file-input/index.d.cts +3 -0
  69. package/dist/file-input/index.d.cts.map +1 -0
  70. package/dist/file-input/index.d.ts +3 -0
  71. package/dist/file-input/index.d.ts.map +1 -0
  72. package/dist/file-input/index.js +256 -0
  73. package/dist/file-input/index.js.map +1 -0
  74. package/dist/file-input/media-type.d.cts +8 -0
  75. package/dist/file-input/media-type.d.cts.map +1 -0
  76. package/dist/file-input/media-type.d.ts +8 -0
  77. package/dist/file-input/media-type.d.ts.map +1 -0
  78. package/dist/file-input/useObjectUrls.d.cts +10 -0
  79. package/dist/file-input/useObjectUrls.d.cts.map +1 -0
  80. package/dist/file-input/useObjectUrls.d.ts +10 -0
  81. package/dist/file-input/useObjectUrls.d.ts.map +1 -0
  82. package/dist/hierarchy-select/HierarchySelect.d.cts +58 -0
  83. package/dist/hierarchy-select/HierarchySelect.d.cts.map +1 -0
  84. package/dist/hierarchy-select/HierarchySelect.d.ts +58 -0
  85. package/dist/hierarchy-select/HierarchySelect.d.ts.map +1 -0
  86. package/dist/hierarchy-select/hierarchy-select-icons.d.cts +6 -0
  87. package/dist/hierarchy-select/hierarchy-select-icons.d.cts.map +1 -0
  88. package/dist/hierarchy-select/hierarchy-select-icons.d.ts +6 -0
  89. package/dist/hierarchy-select/hierarchy-select-icons.d.ts.map +1 -0
  90. package/dist/hierarchy-select/index.cjs +596 -0
  91. package/dist/hierarchy-select/index.cjs.map +1 -0
  92. package/dist/hierarchy-select/index.d.cts +2 -0
  93. package/dist/hierarchy-select/index.d.cts.map +1 -0
  94. package/dist/hierarchy-select/index.d.ts +2 -0
  95. package/dist/hierarchy-select/index.d.ts.map +1 -0
  96. package/dist/hierarchy-select/index.js +594 -0
  97. package/dist/hierarchy-select/index.js.map +1 -0
  98. package/dist/hierarchy-select/tree.d.cts +38 -0
  99. package/dist/hierarchy-select/tree.d.cts.map +1 -0
  100. package/dist/hierarchy-select/tree.d.ts +38 -0
  101. package/dist/hierarchy-select/tree.d.ts.map +1 -0
  102. package/dist/index.cjs +21 -0
  103. package/dist/index.d.cts +3 -0
  104. package/dist/index.d.cts.map +1 -1
  105. package/dist/index.d.ts +3 -0
  106. package/dist/index.d.ts.map +1 -1
  107. package/dist/index.js +3 -0
  108. package/dist/inputs/Checkbox.d.cts +21 -0
  109. package/dist/inputs/Checkbox.d.cts.map +1 -0
  110. package/dist/inputs/Checkbox.d.ts +21 -0
  111. package/dist/inputs/Checkbox.d.ts.map +1 -0
  112. package/dist/inputs/Input.d.cts +26 -0
  113. package/dist/inputs/Input.d.cts.map +1 -0
  114. package/dist/inputs/Input.d.ts +26 -0
  115. package/dist/inputs/Input.d.ts.map +1 -0
  116. package/dist/inputs/InputError.d.cts +11 -0
  117. package/dist/inputs/InputError.d.cts.map +1 -0
  118. package/dist/inputs/InputError.d.ts +11 -0
  119. package/dist/inputs/InputError.d.ts.map +1 -0
  120. package/dist/inputs/InputIcon.d.cts +9 -0
  121. package/dist/inputs/InputIcon.d.cts.map +1 -0
  122. package/dist/inputs/InputIcon.d.ts +9 -0
  123. package/dist/inputs/InputIcon.d.ts.map +1 -0
  124. package/dist/inputs/InputLabel.d.cts +8 -0
  125. package/dist/inputs/InputLabel.d.cts.map +1 -0
  126. package/dist/inputs/InputLabel.d.ts +8 -0
  127. package/dist/inputs/InputLabel.d.ts.map +1 -0
  128. package/dist/inputs/Radio.d.cts +25 -0
  129. package/dist/inputs/Radio.d.cts.map +1 -0
  130. package/dist/inputs/Radio.d.ts +25 -0
  131. package/dist/inputs/Radio.d.ts.map +1 -0
  132. package/dist/inputs/Select.d.cts +53 -0
  133. package/dist/inputs/Select.d.cts.map +1 -0
  134. package/dist/inputs/Select.d.ts +53 -0
  135. package/dist/inputs/Select.d.ts.map +1 -0
  136. package/dist/inputs/Textarea.d.cts +19 -0
  137. package/dist/inputs/Textarea.d.cts.map +1 -0
  138. package/dist/inputs/Textarea.d.ts +19 -0
  139. package/dist/inputs/Textarea.d.ts.map +1 -0
  140. package/dist/inputs/index.cjs +746 -0
  141. package/dist/inputs/index.cjs.map +1 -0
  142. package/dist/inputs/index.d.cts +10 -0
  143. package/dist/inputs/index.d.cts.map +1 -0
  144. package/dist/inputs/index.d.ts +10 -0
  145. package/dist/inputs/index.d.ts.map +1 -0
  146. package/dist/inputs/index.js +737 -0
  147. package/dist/inputs/index.js.map +1 -0
  148. package/dist/inputs/inputs-icons.d.cts +6 -0
  149. package/dist/inputs/inputs-icons.d.cts.map +1 -0
  150. package/dist/inputs/inputs-icons.d.ts +6 -0
  151. package/dist/inputs/inputs-icons.d.ts.map +1 -0
  152. package/dist/inputs/types.d.cts +48 -0
  153. package/dist/inputs/types.d.cts.map +1 -0
  154. package/dist/inputs/types.d.ts +48 -0
  155. package/dist/inputs/types.d.ts.map +1 -0
  156. package/dist/inputs/useFieldIds.d.cts +24 -0
  157. package/dist/inputs/useFieldIds.d.cts.map +1 -0
  158. package/dist/inputs/useFieldIds.d.ts +24 -0
  159. package/dist/inputs/useFieldIds.d.ts.map +1 -0
  160. package/dist/layout/ApiStatus.d.cts +20 -0
  161. package/dist/layout/ApiStatus.d.cts.map +1 -0
  162. package/dist/layout/ApiStatus.d.ts +20 -0
  163. package/dist/layout/ApiStatus.d.ts.map +1 -0
  164. package/dist/layout/BorderGradient.d.cts +11 -0
  165. package/dist/layout/BorderGradient.d.cts.map +1 -0
  166. package/dist/layout/BorderGradient.d.ts +11 -0
  167. package/dist/layout/BorderGradient.d.ts.map +1 -0
  168. package/dist/layout/ConfirmModal.d.cts +44 -0
  169. package/dist/layout/ConfirmModal.d.cts.map +1 -0
  170. package/dist/layout/ConfirmModal.d.ts +44 -0
  171. package/dist/layout/ConfirmModal.d.ts.map +1 -0
  172. package/dist/layout/Dropdown.d.cts +33 -0
  173. package/dist/layout/Dropdown.d.cts.map +1 -0
  174. package/dist/layout/Dropdown.d.ts +33 -0
  175. package/dist/layout/Dropdown.d.ts.map +1 -0
  176. package/dist/layout/LoadingPage.d.cts +11 -0
  177. package/dist/layout/LoadingPage.d.cts.map +1 -0
  178. package/dist/layout/LoadingPage.d.ts +11 -0
  179. package/dist/layout/LoadingPage.d.ts.map +1 -0
  180. package/dist/layout/LoadingRings.d.cts +12 -0
  181. package/dist/layout/LoadingRings.d.cts.map +1 -0
  182. package/dist/layout/LoadingRings.d.ts +12 -0
  183. package/dist/layout/LoadingRings.d.ts.map +1 -0
  184. package/dist/layout/LoadingText.d.cts +13 -0
  185. package/dist/layout/LoadingText.d.cts.map +1 -0
  186. package/dist/layout/LoadingText.d.ts +13 -0
  187. package/dist/layout/LoadingText.d.ts.map +1 -0
  188. package/dist/layout/ModalWrapper.d.cts +48 -0
  189. package/dist/layout/ModalWrapper.d.cts.map +1 -0
  190. package/dist/layout/ModalWrapper.d.ts +48 -0
  191. package/dist/layout/ModalWrapper.d.ts.map +1 -0
  192. package/dist/layout/NetworkStatusToaster.d.cts +39 -0
  193. package/dist/layout/NetworkStatusToaster.d.cts.map +1 -0
  194. package/dist/layout/NetworkStatusToaster.d.ts +39 -0
  195. package/dist/layout/NetworkStatusToaster.d.ts.map +1 -0
  196. package/dist/layout/ScrollToTop.d.cts +36 -0
  197. package/dist/layout/ScrollToTop.d.cts.map +1 -0
  198. package/dist/layout/ScrollToTop.d.ts +36 -0
  199. package/dist/layout/ScrollToTop.d.ts.map +1 -0
  200. package/dist/layout/ScrollableGradientContainer.d.cts +28 -0
  201. package/dist/layout/ScrollableGradientContainer.d.cts.map +1 -0
  202. package/dist/layout/ScrollableGradientContainer.d.ts +28 -0
  203. package/dist/layout/ScrollableGradientContainer.d.ts.map +1 -0
  204. package/dist/layout/Skeleton.d.cts +9 -0
  205. package/dist/layout/Skeleton.d.cts.map +1 -0
  206. package/dist/layout/Skeleton.d.ts +9 -0
  207. package/dist/layout/Skeleton.d.ts.map +1 -0
  208. package/dist/layout/Table.d.cts +9 -0
  209. package/dist/layout/Table.d.cts.map +1 -0
  210. package/dist/layout/Table.d.ts +9 -0
  211. package/dist/layout/Table.d.ts.map +1 -0
  212. package/dist/layout/index.cjs +773 -0
  213. package/dist/layout/index.cjs.map +1 -0
  214. package/dist/layout/index.d.cts +14 -0
  215. package/dist/layout/index.d.cts.map +1 -0
  216. package/dist/layout/index.d.ts +14 -0
  217. package/dist/layout/index.d.ts.map +1 -0
  218. package/dist/layout/index.js +753 -0
  219. package/dist/layout/index.js.map +1 -0
  220. package/dist/layout/layout-icons.d.cts +6 -0
  221. package/dist/layout/layout-icons.d.cts.map +1 -0
  222. package/dist/layout/layout-icons.d.ts +6 -0
  223. package/dist/layout/layout-icons.d.ts.map +1 -0
  224. package/dist/lib/content.d.cts +7 -0
  225. package/dist/lib/content.d.cts.map +1 -0
  226. package/dist/lib/content.d.ts +7 -0
  227. package/dist/lib/content.d.ts.map +1 -0
  228. package/dist/lib/countdown.d.cts +13 -0
  229. package/dist/lib/countdown.d.cts.map +1 -0
  230. package/dist/lib/countdown.d.ts +13 -0
  231. package/dist/lib/countdown.d.ts.map +1 -0
  232. package/dist/lib/dropdown-position.d.cts +33 -0
  233. package/dist/lib/dropdown-position.d.cts.map +1 -0
  234. package/dist/lib/dropdown-position.d.ts +33 -0
  235. package/dist/lib/dropdown-position.d.ts.map +1 -0
  236. package/dist/lib/focus.d.cts +3 -0
  237. package/dist/lib/focus.d.cts.map +1 -0
  238. package/dist/lib/focus.d.ts +3 -0
  239. package/dist/lib/focus.d.ts.map +1 -0
  240. package/dist/lib/icon-registry.d.cts +14 -0
  241. package/dist/lib/icon-registry.d.cts.map +1 -0
  242. package/dist/lib/icon-registry.d.ts +14 -0
  243. package/dist/lib/icon-registry.d.ts.map +1 -0
  244. package/dist/lib/mergeRefs.d.cts +10 -0
  245. package/dist/lib/mergeRefs.d.cts.map +1 -0
  246. package/dist/lib/mergeRefs.d.ts +10 -0
  247. package/dist/lib/mergeRefs.d.ts.map +1 -0
  248. package/dist/lib/scrollRowIntoView.d.cts +7 -0
  249. package/dist/lib/scrollRowIntoView.d.cts.map +1 -0
  250. package/dist/lib/scrollRowIntoView.d.ts +7 -0
  251. package/dist/lib/scrollRowIntoView.d.ts.map +1 -0
  252. package/dist/lib/stepper.d.cts +9 -0
  253. package/dist/lib/stepper.d.cts.map +1 -0
  254. package/dist/lib/stepper.d.ts +9 -0
  255. package/dist/lib/stepper.d.ts.map +1 -0
  256. package/dist/lib/typeahead.d.cts +21 -0
  257. package/dist/lib/typeahead.d.cts.map +1 -0
  258. package/dist/lib/typeahead.d.ts +21 -0
  259. package/dist/lib/typeahead.d.ts.map +1 -0
  260. package/dist/lib/useAnchoredBox.d.cts +26 -0
  261. package/dist/lib/useAnchoredBox.d.cts.map +1 -0
  262. package/dist/lib/useAnchoredBox.d.ts +26 -0
  263. package/dist/lib/useAnchoredBox.d.ts.map +1 -0
  264. package/dist/lib/useDismiss.d.cts +34 -0
  265. package/dist/lib/useDismiss.d.cts.map +1 -0
  266. package/dist/lib/useDismiss.d.ts +34 -0
  267. package/dist/lib/useDismiss.d.ts.map +1 -0
  268. package/dist/lib/useFocusTrap.d.cts +24 -0
  269. package/dist/lib/useFocusTrap.d.cts.map +1 -0
  270. package/dist/lib/useFocusTrap.d.ts +24 -0
  271. package/dist/lib/useFocusTrap.d.ts.map +1 -0
  272. package/dist/lib/useIsClient.d.cts +7 -0
  273. package/dist/lib/useIsClient.d.cts.map +1 -0
  274. package/dist/lib/useIsClient.d.ts +7 -0
  275. package/dist/lib/useIsClient.d.ts.map +1 -0
  276. package/dist/lib/usePrefersReducedMotion.d.cts +7 -0
  277. package/dist/lib/usePrefersReducedMotion.d.cts.map +1 -0
  278. package/dist/lib/usePrefersReducedMotion.d.ts +7 -0
  279. package/dist/lib/usePrefersReducedMotion.d.ts.map +1 -0
  280. package/dist/lib/useScrollLock.d.cts +7 -0
  281. package/dist/lib/useScrollLock.d.cts.map +1 -0
  282. package/dist/lib/useScrollLock.d.ts +7 -0
  283. package/dist/lib/useScrollLock.d.ts.map +1 -0
  284. package/dist/lib/useScrollable.d.cts +17 -0
  285. package/dist/lib/useScrollable.d.cts.map +1 -0
  286. package/dist/lib/useScrollable.d.ts +17 -0
  287. package/dist/lib/useScrollable.d.ts.map +1 -0
  288. package/dist/linear-gradient/LinearGradient.d.cts +13 -0
  289. package/dist/linear-gradient/LinearGradient.d.cts.map +1 -0
  290. package/dist/linear-gradient/LinearGradient.d.ts +13 -0
  291. package/dist/linear-gradient/LinearGradient.d.ts.map +1 -0
  292. package/dist/linear-gradient/index.cjs +25 -0
  293. package/dist/linear-gradient/index.cjs.map +1 -0
  294. package/dist/linear-gradient/index.d.cts +2 -0
  295. package/dist/linear-gradient/index.d.cts.map +1 -0
  296. package/dist/linear-gradient/index.d.ts +2 -0
  297. package/dist/linear-gradient/index.d.ts.map +1 -0
  298. package/dist/linear-gradient/index.js +23 -0
  299. package/dist/linear-gradient/index.js.map +1 -0
  300. package/dist/loading-screen/LoadingScreen.d.cts +21 -0
  301. package/dist/loading-screen/LoadingScreen.d.cts.map +1 -0
  302. package/dist/loading-screen/LoadingScreen.d.ts +21 -0
  303. package/dist/loading-screen/LoadingScreen.d.ts.map +1 -0
  304. package/dist/loading-screen/Teddy.d.cts +10 -0
  305. package/dist/loading-screen/Teddy.d.cts.map +1 -0
  306. package/dist/loading-screen/Teddy.d.ts +10 -0
  307. package/dist/loading-screen/Teddy.d.ts.map +1 -0
  308. package/dist/loading-screen/WakeUpProgress.d.cts +16 -0
  309. package/dist/loading-screen/WakeUpProgress.d.cts.map +1 -0
  310. package/dist/loading-screen/WakeUpProgress.d.ts +16 -0
  311. package/dist/loading-screen/WakeUpProgress.d.ts.map +1 -0
  312. package/dist/loading-screen/beauty-facts.d.cts +4 -0
  313. package/dist/loading-screen/beauty-facts.d.cts.map +1 -0
  314. package/dist/loading-screen/beauty-facts.d.ts +4 -0
  315. package/dist/loading-screen/beauty-facts.d.ts.map +1 -0
  316. package/dist/loading-screen/index.cjs +405 -0
  317. package/dist/loading-screen/index.cjs.map +1 -0
  318. package/dist/loading-screen/index.d.cts +5 -0
  319. package/dist/loading-screen/index.d.cts.map +1 -0
  320. package/dist/loading-screen/index.d.ts +5 -0
  321. package/dist/loading-screen/index.d.ts.map +1 -0
  322. package/dist/loading-screen/index.js +400 -0
  323. package/dist/loading-screen/index.js.map +1 -0
  324. package/dist/loading-screen/loading-screen-icons.d.cts +6 -0
  325. package/dist/loading-screen/loading-screen-icons.d.cts.map +1 -0
  326. package/dist/loading-screen/loading-screen-icons.d.ts +6 -0
  327. package/dist/loading-screen/loading-screen-icons.d.ts.map +1 -0
  328. package/dist/media/MediaCarousel.d.cts +30 -0
  329. package/dist/media/MediaCarousel.d.cts.map +1 -0
  330. package/dist/media/MediaCarousel.d.ts +30 -0
  331. package/dist/media/MediaCarousel.d.ts.map +1 -0
  332. package/dist/media/MediaCarouselWithModal.d.cts +17 -0
  333. package/dist/media/MediaCarouselWithModal.d.cts.map +1 -0
  334. package/dist/media/MediaCarouselWithModal.d.ts +17 -0
  335. package/dist/media/MediaCarouselWithModal.d.ts.map +1 -0
  336. package/dist/media/MediaCarouselWithParentMedia.d.cts +30 -0
  337. package/dist/media/MediaCarouselWithParentMedia.d.cts.map +1 -0
  338. package/dist/media/MediaCarouselWithParentMedia.d.ts +30 -0
  339. package/dist/media/MediaCarouselWithParentMedia.d.ts.map +1 -0
  340. package/dist/media/MediaModal.d.cts +27 -0
  341. package/dist/media/MediaModal.d.cts.map +1 -0
  342. package/dist/media/MediaModal.d.ts +27 -0
  343. package/dist/media/MediaModal.d.ts.map +1 -0
  344. package/dist/media/VideoPlayer.d.cts +37 -0
  345. package/dist/media/VideoPlayer.d.cts.map +1 -0
  346. package/dist/media/VideoPlayer.d.ts +37 -0
  347. package/dist/media/VideoPlayer.d.ts.map +1 -0
  348. package/dist/media/captureVideoPoster.d.cts +20 -0
  349. package/dist/media/captureVideoPoster.d.cts.map +1 -0
  350. package/dist/media/captureVideoPoster.d.ts +20 -0
  351. package/dist/media/captureVideoPoster.d.ts.map +1 -0
  352. package/dist/media/index.cjs +613 -0
  353. package/dist/media/index.cjs.map +1 -0
  354. package/dist/media/index.d.cts +8 -0
  355. package/dist/media/index.d.cts.map +1 -0
  356. package/dist/media/index.d.ts +8 -0
  357. package/dist/media/index.d.ts.map +1 -0
  358. package/dist/media/index.js +605 -0
  359. package/dist/media/index.js.map +1 -0
  360. package/dist/media/labels.d.cts +33 -0
  361. package/dist/media/labels.d.cts.map +1 -0
  362. package/dist/media/labels.d.ts +33 -0
  363. package/dist/media/labels.d.ts.map +1 -0
  364. package/dist/media/media-icons.d.cts +6 -0
  365. package/dist/media/media-icons.d.cts.map +1 -0
  366. package/dist/media/media-icons.d.ts +6 -0
  367. package/dist/media/media-icons.d.ts.map +1 -0
  368. package/dist/media/streaming.d.cts +18 -0
  369. package/dist/media/streaming.d.cts.map +1 -0
  370. package/dist/media/streaming.d.ts +18 -0
  371. package/dist/media/streaming.d.ts.map +1 -0
  372. package/dist/resend/Resend.d.cts +37 -0
  373. package/dist/resend/Resend.d.cts.map +1 -0
  374. package/dist/resend/Resend.d.ts +37 -0
  375. package/dist/resend/Resend.d.ts.map +1 -0
  376. package/dist/resend/index.cjs +115 -0
  377. package/dist/resend/index.cjs.map +1 -0
  378. package/dist/resend/index.d.cts +2 -0
  379. package/dist/resend/index.d.cts.map +1 -0
  380. package/dist/resend/index.d.ts +2 -0
  381. package/dist/resend/index.d.ts.map +1 -0
  382. package/dist/resend/index.js +113 -0
  383. package/dist/resend/index.js.map +1 -0
  384. package/dist/static-page/StaticPage.d.cts +91 -0
  385. package/dist/static-page/StaticPage.d.cts.map +1 -0
  386. package/dist/static-page/StaticPage.d.ts +91 -0
  387. package/dist/static-page/StaticPage.d.ts.map +1 -0
  388. package/dist/static-page/index.cjs +247 -0
  389. package/dist/static-page/index.cjs.map +1 -0
  390. package/dist/static-page/index.d.cts +2 -0
  391. package/dist/static-page/index.d.cts.map +1 -0
  392. package/dist/static-page/index.d.ts +2 -0
  393. package/dist/static-page/index.d.ts.map +1 -0
  394. package/dist/static-page/index.js +235 -0
  395. package/dist/static-page/index.js.map +1 -0
  396. package/dist/static-page/static-page-icons.d.cts +6 -0
  397. package/dist/static-page/static-page-icons.d.cts.map +1 -0
  398. package/dist/static-page/static-page-icons.d.ts +6 -0
  399. package/dist/static-page/static-page-icons.d.ts.map +1 -0
  400. package/dist/stepper/Stepper.d.cts +35 -0
  401. package/dist/stepper/Stepper.d.cts.map +1 -0
  402. package/dist/stepper/Stepper.d.ts +35 -0
  403. package/dist/stepper/Stepper.d.ts.map +1 -0
  404. package/dist/stepper/index.cjs +149 -0
  405. package/dist/stepper/index.cjs.map +1 -0
  406. package/dist/stepper/index.d.cts +2 -0
  407. package/dist/stepper/index.d.cts.map +1 -0
  408. package/dist/stepper/index.d.ts +2 -0
  409. package/dist/stepper/index.d.ts.map +1 -0
  410. package/dist/stepper/index.js +147 -0
  411. package/dist/stepper/index.js.map +1 -0
  412. package/dist/stepper/stepper-icons.d.cts +10 -0
  413. package/dist/stepper/stepper-icons.d.cts.map +1 -0
  414. package/dist/stepper/stepper-icons.d.ts +10 -0
  415. package/dist/stepper/stepper-icons.d.ts.map +1 -0
  416. package/dist/testimonials/TestimonialCarousel.d.cts +40 -0
  417. package/dist/testimonials/TestimonialCarousel.d.cts.map +1 -0
  418. package/dist/testimonials/TestimonialCarousel.d.ts +40 -0
  419. package/dist/testimonials/TestimonialCarousel.d.ts.map +1 -0
  420. package/dist/testimonials/index.cjs +246 -0
  421. package/dist/testimonials/index.cjs.map +1 -0
  422. package/dist/testimonials/index.d.cts +2 -0
  423. package/dist/testimonials/index.d.cts.map +1 -0
  424. package/dist/testimonials/index.d.ts +2 -0
  425. package/dist/testimonials/index.d.ts.map +1 -0
  426. package/dist/testimonials/index.js +244 -0
  427. package/dist/testimonials/index.js.map +1 -0
  428. package/dist/testimonials/testimonials-icons.d.cts +6 -0
  429. package/dist/testimonials/testimonials-icons.d.cts.map +1 -0
  430. package/dist/testimonials/testimonials-icons.d.ts +6 -0
  431. package/dist/testimonials/testimonials-icons.d.ts.map +1 -0
  432. package/dist/theme/Theme.d.cts +23 -0
  433. package/dist/theme/Theme.d.cts.map +1 -0
  434. package/dist/theme/Theme.d.ts +23 -0
  435. package/dist/theme/Theme.d.ts.map +1 -0
  436. package/dist/theme/index.cjs +76 -0
  437. package/dist/theme/index.cjs.map +1 -0
  438. package/dist/theme/index.d.cts +2 -0
  439. package/dist/theme/index.d.cts.map +1 -0
  440. package/dist/theme/index.d.ts +2 -0
  441. package/dist/theme/index.d.ts.map +1 -0
  442. package/dist/theme/index.js +74 -0
  443. package/dist/theme/index.js.map +1 -0
  444. package/dist/theme/theme-icons.d.cts +21 -0
  445. package/dist/theme/theme-icons.d.cts.map +1 -0
  446. package/dist/theme/theme-icons.d.ts +21 -0
  447. package/dist/theme/theme-icons.d.ts.map +1 -0
  448. package/dist/toast/index.cjs +2 -38
  449. package/dist/toast/index.cjs.map +1 -1
  450. package/dist/toast/index.js +1 -37
  451. package/dist/toast/index.js.map +1 -1
  452. package/dist/ui/Badge.d.cts +12 -0
  453. package/dist/ui/Badge.d.cts.map +1 -0
  454. package/dist/ui/Badge.d.ts +12 -0
  455. package/dist/ui/Badge.d.ts.map +1 -0
  456. package/dist/ui/Divider.d.cts +12 -0
  457. package/dist/ui/Divider.d.cts.map +1 -0
  458. package/dist/ui/Divider.d.ts +12 -0
  459. package/dist/ui/Divider.d.ts.map +1 -0
  460. package/dist/ui/GradientText.d.cts +30 -0
  461. package/dist/ui/GradientText.d.cts.map +1 -0
  462. package/dist/ui/GradientText.d.ts +30 -0
  463. package/dist/ui/GradientText.d.ts.map +1 -0
  464. package/dist/ui/index.cjs +37 -3
  465. package/dist/ui/index.cjs.map +1 -1
  466. package/dist/ui/index.d.cts +3 -0
  467. package/dist/ui/index.d.cts.map +1 -1
  468. package/dist/ui/index.d.ts +3 -0
  469. package/dist/ui/index.d.ts.map +1 -1
  470. package/dist/ui/index.js +35 -4
  471. package/dist/ui/index.js.map +1 -1
  472. package/package.json +108 -6
@@ -0,0 +1,2 @@
1
+ export { Checklist, EmailUsAction, HighlightNote, type IChecklist, type IEmailUsAction, type IHighlightNote, type IInfoCard, type IInfoCardGrid, type ILastUpdatedBadge, InfoCard, InfoCardGrid, type INumberedStep, type INumberedSteps, type IStaticPageCTA, type IStaticPageHeader, type IStaticPageSection, LastUpdatedBadge, NumberedSteps, StaticPageCTA, StaticPageHeader, StaticPageLayout, StaticPageSection, } from './StaticPage.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/static-page/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,aAAa,EACb,aAAa,EACb,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,SAAS,EACd,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACtB,QAAQ,EACR,YAAY,EACZ,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,gBAAgB,EAChB,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,235 @@
1
+ import { addCollection, Icon } from '@iconify/react';
2
+ import { useId } from 'react';
3
+ import { GradientText } from '@beautinique/frontend-components/ui';
4
+ import { jsx, jsxs } from 'react/jsx-runtime';
5
+
6
+ var __defProp = Object.defineProperty;
7
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
8
+ var createIconRegistry = /* @__PURE__ */ __name((sets) => {
9
+ let registered = false;
10
+ return {
11
+ register: /* @__PURE__ */ __name(() => {
12
+ if (registered) return;
13
+ for (const set of sets) addCollection(set);
14
+ registered = true;
15
+ }, "register"),
16
+ names: sets.flatMap(
17
+ ({ prefix, icons, aliases }) => [...Object.keys(icons), ...Object.keys(aliases ?? {})].map((name) => `${prefix}:${name}`)
18
+ )
19
+ };
20
+ }, "createIconRegistry");
21
+
22
+ // src/static-page/static-page-icons.ts
23
+ var ICON_SETS = [
24
+ {
25
+ prefix: "solar",
26
+ width: 24,
27
+ height: 24,
28
+ icons: {
29
+ "calendar-mark-linear": {
30
+ body: '<g fill="none" stroke="currentColor" stroke-linecap="round" stroke-width="1.5"><path d="M2 12C2 8.22876 2 6.34315 3.17157 5.17157C4.34315 4 6.22876 4 10 4H14C17.7712 4 19.6569 4 20.8284 5.17157C22 6.34315 22 8.22876 22 12V14C22 17.7712 22 19.6569 20.8284 20.8284C19.6569 22 17.7712 22 14 22H10C6.22876 22 4.34315 22 3.17157 20.8284C2 19.6569 2 17.7712 2 14V12Z"/><path d="M7 4V2.5"/><path d="M17 4V2.5"/><circle cx="16.5" cy="16.5" r="1.5"/><path d="M2.5 9H21.5"/></g>'
31
+ },
32
+ "check-circle-linear": {
33
+ body: '<g fill="none" stroke="currentColor" stroke-linecap="round" stroke-width="1.5"><circle cx="12" cy="12" r="10"/><path stroke-linejoin="round" d="M8.5 12.5L10.5 14.5L15.5 9.5"/></g>'
34
+ },
35
+ "danger-triangle-linear": {
36
+ body: '<g fill="none" stroke="currentColor" stroke-linecap="round" stroke-width="1.5"><path d="M5.31171 10.7615C8.23007 5.58716 9.68925 3 12 3C14.3107 3 15.7699 5.58716 18.6883 10.7615L19.0519 11.4063C21.4771 15.7061 22.6897 17.856 21.5937 19.428C20.4978 21 17.7864 21 12.3637 21H11.6363C6.21356 21 3.50217 21 2.40626 19.428C1.31034 17.856 2.52291 15.7061 4.94805 11.4063L5.31171 10.7615Z"/><path d="M12 8V13"/><path stroke-linejoin="round" d="M12 16H12.0001"/></g>'
37
+ },
38
+ "letter-linear": {
39
+ body: '<g fill="none" stroke="currentColor" stroke-linecap="round" stroke-width="1.5"><path d="M2 12C2 8.22876 2 6.34315 3.17157 5.17157C4.34315 4 6.22876 4 10 4H14C17.7712 4 19.6569 4 20.8284 5.17157C22 6.34315 22 8.22876 22 12C22 15.7712 22 17.6569 20.8284 18.8284C19.6569 20 17.7712 20 14 20H10C6.22876 20 4.34315 20 3.17157 18.8284C2 17.6569 2 15.7712 2 12Z"/><path d="M6 8L8.1589 9.79908C9.99553 11.3296 10.9139 12.0949 12 12.0949C13.0861 12.0949 14.0045 11.3296 15.8411 9.79908L18 8"/></g>'
40
+ }
41
+ }
42
+ }
43
+ ];
44
+ var { register: registerStaticPageIcons, names: STATIC_PAGE_ICON_NAMES } = createIconRegistry(ICON_SETS);
45
+ var StaticPageLayout = /* @__PURE__ */ __name(({ children }) => /* @__PURE__ */ jsx("div", { className: "mx-auto flex w-full max-w-4xl flex-col gap-10 px-4 py-10 sm:px-6 sm:py-14", children }), "StaticPageLayout");
46
+ var StaticPageHeader = /* @__PURE__ */ __name(({ icon, title, description, meta }) => /* @__PURE__ */ jsxs("header", { className: "flex flex-col items-center gap-4 text-center", children: [
47
+ /* @__PURE__ */ jsx(
48
+ "span",
49
+ {
50
+ "aria-hidden": "true",
51
+ className: "bg-accent-duo flex size-16 items-center justify-center rounded-full shadow-lg sm:size-20",
52
+ children: /* @__PURE__ */ jsx(Icon, { icon, className: "size-8 text-white sm:size-10" })
53
+ }
54
+ ),
55
+ /* @__PURE__ */ jsx(
56
+ GradientText,
57
+ {
58
+ as: "h1",
59
+ type: "accent",
60
+ text: title,
61
+ className: "text-3xl font-bold tracking-tight sm:text-4xl md:text-5xl"
62
+ }
63
+ ),
64
+ /* @__PURE__ */ jsx("p", { className: "text-secondary max-w-2xl text-sm sm:text-base", children: description }),
65
+ meta
66
+ ] }), "StaticPageHeader");
67
+ var LastUpdatedBadge = /* @__PURE__ */ __name(({
68
+ date,
69
+ label = "Last updated",
70
+ locale = "en-US"
71
+ }) => {
72
+ registerStaticPageIcons();
73
+ const value = new Date(date);
74
+ if (Number.isNaN(value.getTime())) return null;
75
+ return /* @__PURE__ */ jsxs("span", { className: "text-primary/50 flex items-center gap-1 text-xs sm:text-sm", children: [
76
+ /* @__PURE__ */ jsx(Icon, { "aria-hidden": "true", icon: "solar:calendar-mark-linear", className: "size-3.5" }),
77
+ label,
78
+ " ",
79
+ /* @__PURE__ */ jsx("time", { dateTime: value.toISOString().slice(0, 10), children: new Intl.DateTimeFormat(locale, { dateStyle: "medium", timeZone: "UTC" }).format(value) })
80
+ ] });
81
+ }, "LastUpdatedBadge");
82
+ var StaticPageSection = /* @__PURE__ */ __name(({ title, children, className = "gap-4" }) => {
83
+ const titleId = useId();
84
+ return /* @__PURE__ */ jsxs("section", { "aria-labelledby": title ? titleId : void 0, className: `flex flex-col ${className}`, children: [
85
+ title && /* @__PURE__ */ jsx(
86
+ GradientText,
87
+ {
88
+ as: "h2",
89
+ id: titleId,
90
+ type: "accent",
91
+ text: title,
92
+ className: "text-xl font-semibold sm:text-2xl"
93
+ }
94
+ ),
95
+ children
96
+ ] });
97
+ }, "StaticPageSection");
98
+ var InfoCard = /* @__PURE__ */ __name(({ icon, title, description }) => /* @__PURE__ */ jsxs("div", { className: "border-primary/10 bg-secondary-invert hover:border-primary/20 flex items-start gap-3 rounded-xl border p-4 transition-colors motion-reduce:transition-none", children: [
99
+ /* @__PURE__ */ jsx(
100
+ "span",
101
+ {
102
+ "aria-hidden": "true",
103
+ className: "bg-accent-duo flex size-9 shrink-0 items-center justify-center rounded-lg",
104
+ children: /* @__PURE__ */ jsx(Icon, { icon, className: "size-5 text-white" })
105
+ }
106
+ ),
107
+ /* @__PURE__ */ jsxs("div", { children: [
108
+ /* @__PURE__ */ jsx("h3", { className: "text-primary text-sm font-semibold sm:text-base", children: title }),
109
+ /* @__PURE__ */ jsx("p", { className: "text-secondary text-xs sm:text-sm", children: description })
110
+ ] })
111
+ ] }), "InfoCard");
112
+ var InfoCardGrid = /* @__PURE__ */ __name(({ items, columns = 2 }) => /* @__PURE__ */ jsx("div", { className: `grid grid-cols-1 gap-4 ${columns === 3 ? "sm:grid-cols-3" : "sm:grid-cols-2"}`, children: items.map((item) => /* @__PURE__ */ jsx(InfoCard, { ...item }, item.title)) }), "InfoCardGrid");
113
+ var Checklist = /* @__PURE__ */ __name(({
114
+ items,
115
+ icon = "solar:check-circle-linear",
116
+ iconClassName = "text-primary-green"
117
+ }) => {
118
+ registerStaticPageIcons();
119
+ return /* @__PURE__ */ jsx("ul", { className: "flex flex-col gap-3", children: items.map((item) => /* @__PURE__ */ jsxs(
120
+ "li",
121
+ {
122
+ className: "border-primary/10 bg-secondary-invert flex items-start gap-3 rounded-xl border p-3 sm:p-4",
123
+ children: [
124
+ /* @__PURE__ */ jsx(
125
+ Icon,
126
+ {
127
+ "aria-hidden": "true",
128
+ icon,
129
+ className: `mt-0.5 size-4.5 shrink-0 ${iconClassName}`
130
+ }
131
+ ),
132
+ /* @__PURE__ */ jsx("span", { className: "text-secondary text-xs sm:text-sm", children: item })
133
+ ]
134
+ },
135
+ item
136
+ )) });
137
+ }, "Checklist");
138
+ var HighlightNote = /* @__PURE__ */ __name(({
139
+ icon = "solar:danger-triangle-linear",
140
+ title,
141
+ children
142
+ }) => {
143
+ registerStaticPageIcons();
144
+ const titleId = useId();
145
+ return /* @__PURE__ */ jsxs(
146
+ "div",
147
+ {
148
+ role: "note",
149
+ "aria-labelledby": titleId,
150
+ className: "border-primary/10 bg-secondary-invert flex items-start gap-3 rounded-xl border p-4 sm:p-5",
151
+ children: [
152
+ /* @__PURE__ */ jsx(Icon, { "aria-hidden": "true", icon, className: "text-primary/60 mt-0.5 size-5 shrink-0" }),
153
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-1.5", children: [
154
+ /* @__PURE__ */ jsx("p", { id: titleId, className: "text-primary text-sm font-semibold sm:text-base", children: title }),
155
+ /* @__PURE__ */ jsx("p", { className: "text-secondary text-xs leading-relaxed sm:text-sm", children })
156
+ ] })
157
+ ]
158
+ }
159
+ );
160
+ }, "HighlightNote");
161
+ var NumberedSteps = /* @__PURE__ */ __name(({ steps }) => (
162
+ // `list-none` takes the list away for some screen readers; `role="list"` gives it back
163
+ /* @__PURE__ */ jsx("ol", { role: "list", className: "flex list-none flex-col gap-3", children: steps.map((step, index) => /* @__PURE__ */ jsxs(
164
+ "li",
165
+ {
166
+ className: "border-primary/10 bg-secondary-invert flex items-start gap-3 rounded-xl border p-4",
167
+ children: [
168
+ /* @__PURE__ */ jsx(
169
+ "span",
170
+ {
171
+ "aria-hidden": "true",
172
+ className: "bg-accent-duo flex size-7 shrink-0 items-center justify-center rounded-full text-xs font-semibold text-white",
173
+ children: index + 1
174
+ }
175
+ ),
176
+ /* @__PURE__ */ jsxs("div", { children: [
177
+ /* @__PURE__ */ jsx("p", { className: "text-primary text-sm font-semibold sm:text-base", children: step.title }),
178
+ /* @__PURE__ */ jsx("p", { className: "text-secondary text-xs sm:text-sm", children: step.description })
179
+ ] })
180
+ ]
181
+ },
182
+ step.title
183
+ )) })
184
+ ), "NumberedSteps");
185
+ var StaticPageCTA = /* @__PURE__ */ __name(({
186
+ title,
187
+ description,
188
+ actions,
189
+ footer,
190
+ layout = "row",
191
+ className = ""
192
+ }) => {
193
+ const titleId = useId();
194
+ return /* @__PURE__ */ jsxs(
195
+ "section",
196
+ {
197
+ "aria-labelledby": titleId,
198
+ className: `border-primary/10 bg-secondary-invert flex flex-col gap-4 rounded-2xl border p-4 sm:p-6 ${className}`,
199
+ children: [
200
+ /* @__PURE__ */ jsxs(
201
+ "div",
202
+ {
203
+ className: `flex flex-col gap-4 ${layout === "row" ? "items-start justify-between sm:flex-row sm:items-center" : ""}`,
204
+ children: [
205
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-1", children: [
206
+ /* @__PURE__ */ jsx("h2", { id: titleId, className: "text-primary text-base font-semibold sm:text-lg", children: title }),
207
+ /* @__PURE__ */ jsx("p", { className: "text-secondary text-xs sm:text-sm", children: description })
208
+ ] }),
209
+ actions
210
+ ]
211
+ }
212
+ ),
213
+ footer
214
+ ]
215
+ }
216
+ );
217
+ }, "StaticPageCTA");
218
+ var EmailUsAction = /* @__PURE__ */ __name(({ email, children }) => {
219
+ registerStaticPageIcons();
220
+ return /* @__PURE__ */ jsxs(
221
+ "a",
222
+ {
223
+ href: `mailto:${email}`,
224
+ className: "border-primary/20 hover:bg-primary-invert/60 text-primary flex shrink-0 items-center gap-2 rounded-lg border px-4 py-2.5 text-sm font-medium transition-colors focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-crayola-c motion-reduce:transition-none",
225
+ children: [
226
+ /* @__PURE__ */ jsx(Icon, { "aria-hidden": "true", icon: "solar:letter-linear", className: "size-4.5" }),
227
+ children ?? email
228
+ ]
229
+ }
230
+ );
231
+ }, "EmailUsAction");
232
+
233
+ export { Checklist, EmailUsAction, HighlightNote, InfoCard, InfoCardGrid, LastUpdatedBadge, NumberedSteps, StaticPageCTA, StaticPageHeader, StaticPageLayout, StaticPageSection };
234
+ //# sourceMappingURL=index.js.map
235
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/lib/icon-registry.ts","../../src/static-page/static-page-icons.ts","../../src/static-page/StaticPage.tsx"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import { addCollection, type IconifyJSON } from '@iconify/react';\n\n/**\n * Makes the registration of a bundled icon set: `register` puts the sets in Iconify (once, calling it\n * again does nothing) and `names` lists every icon, e.g. `solar:info-circle-linear`.\n *\n * A component calls `register` when it renders, not when its file is imported: an app that never\n * renders the component never runs it, and nothing depends on the bundler keeping an import that is\n * only there for its effect (the build says \"ignored-bare-import\" for those).\n */\nexport const createIconRegistry = (sets: readonly IconifyJSON[]) => {\n let registered = false;\n\n return {\n register: () => {\n if (registered) return;\n\n for (const set of sets) addCollection(set);\n registered = true;\n },\n names: sets.flatMap(({ prefix, icons, aliases }) =>\n [...Object.keys(icons), ...Object.keys(aliases ?? {})].map((name) => `${prefix}:${name}`),\n ),\n };\n};\n","import type { IconifyJSON } from '@iconify/react';\n\nimport { createIconRegistry } from '../lib/icon-registry.js';\n\n/*\n * The icons of the parts of a static page, bundled so they show without a network and without waiting for the\n * Iconify API (see `toast/toast-icons.ts`). The data is what\n * `https://api.iconify.design/<prefix>.json?icons=<name>` answers.\n */\nconst ICON_SETS: IconifyJSON[] = [\n {\n prefix: 'solar',\n width: 24,\n height: 24,\n icons: {\n 'calendar-mark-linear': {\n body: '<g fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-width=\"1.5\"><path d=\"M2 12C2 8.22876 2 6.34315 3.17157 5.17157C4.34315 4 6.22876 4 10 4H14C17.7712 4 19.6569 4 20.8284 5.17157C22 6.34315 22 8.22876 22 12V14C22 17.7712 22 19.6569 20.8284 20.8284C19.6569 22 17.7712 22 14 22H10C6.22876 22 4.34315 22 3.17157 20.8284C2 19.6569 2 17.7712 2 14V12Z\"/><path d=\"M7 4V2.5\"/><path d=\"M17 4V2.5\"/><circle cx=\"16.5\" cy=\"16.5\" r=\"1.5\"/><path d=\"M2.5 9H21.5\"/></g>',\n },\n 'check-circle-linear': {\n body: '<g fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-width=\"1.5\"><circle cx=\"12\" cy=\"12\" r=\"10\"/><path stroke-linejoin=\"round\" d=\"M8.5 12.5L10.5 14.5L15.5 9.5\"/></g>',\n },\n 'danger-triangle-linear': {\n body: '<g fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-width=\"1.5\"><path d=\"M5.31171 10.7615C8.23007 5.58716 9.68925 3 12 3C14.3107 3 15.7699 5.58716 18.6883 10.7615L19.0519 11.4063C21.4771 15.7061 22.6897 17.856 21.5937 19.428C20.4978 21 17.7864 21 12.3637 21H11.6363C6.21356 21 3.50217 21 2.40626 19.428C1.31034 17.856 2.52291 15.7061 4.94805 11.4063L5.31171 10.7615Z\"/><path d=\"M12 8V13\"/><path stroke-linejoin=\"round\" d=\"M12 16H12.0001\"/></g>',\n },\n 'letter-linear': {\n body: '<g fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-width=\"1.5\"><path d=\"M2 12C2 8.22876 2 6.34315 3.17157 5.17157C4.34315 4 6.22876 4 10 4H14C17.7712 4 19.6569 4 20.8284 5.17157C22 6.34315 22 8.22876 22 12C22 15.7712 22 17.6569 20.8284 18.8284C19.6569 20 17.7712 20 14 20H10C6.22876 20 4.34315 20 3.17157 18.8284C2 17.6569 2 15.7712 2 12Z\"/><path d=\"M6 8L8.1589 9.79908C9.99553 11.3296 10.9139 12.0949 12 12.0949C13.0861 12.0949 14.0045 11.3296 15.8411 9.79908L18 8\"/></g>',\n },\n },\n },\n];\n\n/**\n * Registers the icons above with Iconify; the components of this entry call it when they render\n * (calling it again is harmless).\n */\nexport const { register: registerStaticPageIcons, names: STATIC_PAGE_ICON_NAMES } =\n createIconRegistry(ICON_SETS);\n","import { Icon } from '@iconify/react';\nimport { type ReactNode, useId } from 'react';\n\nimport type { IChildren, IClassName } from '../types/component.js';\nimport { GradientText } from '../ui/index.js';\nimport { registerStaticPageIcons } from './static-page-icons.js';\n\n/*\n * The parts of a page that is only content (company, legal and information pages): a header, some\n * sections, and a closing call to action, in the same column. The headings are real headings\n * (the page `h1`, each section `h2`, each card `h3`), the lists are lists, and the icons are decoration\n * that assistive technology skips. The icons are given by name: they come from the Iconify API unless\n * the app has them registered.\n */\n\n/** The column all the parts sit in. */\nexport const StaticPageLayout = ({ children }: IChildren) => (\n <div className=\"mx-auto flex w-full max-w-4xl flex-col gap-10 px-4 py-10 sm:px-6 sm:py-14\">\n {children}\n </div>\n);\n\nexport interface IStaticPageHeader {\n /** An icon of Iconify, in a circle above the title. */\n icon: string;\n /** The title of the page: it is the `h1`. */\n title: string;\n description: ReactNode;\n /** Something under the description, e.g. `LastUpdatedBadge`. */\n meta?: ReactNode;\n}\n\nexport const StaticPageHeader = ({ icon, title, description, meta }: IStaticPageHeader) => (\n <header className=\"flex flex-col items-center gap-4 text-center\">\n <span\n aria-hidden=\"true\"\n className=\"bg-accent-duo flex size-16 items-center justify-center rounded-full shadow-lg sm:size-20\"\n >\n <Icon icon={icon} className=\"size-8 text-white sm:size-10\" />\n </span>\n <GradientText\n as=\"h1\"\n type=\"accent\"\n text={title}\n className=\"text-3xl font-bold tracking-tight sm:text-4xl md:text-5xl\"\n />\n <p className=\"text-secondary max-w-2xl text-sm sm:text-base\">{description}</p>\n {meta}\n </header>\n);\n\nexport interface ILastUpdatedBadge {\n /** When the page was changed. */\n date: Date | string | number;\n /** @default 'Last updated' */\n label?: string;\n /** The language of the date. It is fixed (not the one of the machine) so a server and a browser write the same. @default 'en-US' */\n locale?: string;\n}\n\n/**\n * \"Last updated 15 Oct 2026\", with the date in a `<time>`. The day is the day of the date in UTC, so\n * it does not depend on where the page is drawn.\n */\nexport const LastUpdatedBadge = ({\n date,\n label = 'Last updated',\n locale = 'en-US',\n}: ILastUpdatedBadge) => {\n registerStaticPageIcons();\n\n const value = new Date(date);\n\n if (Number.isNaN(value.getTime())) return null;\n\n return (\n <span className=\"text-primary/50 flex items-center gap-1 text-xs sm:text-sm\">\n <Icon aria-hidden=\"true\" icon=\"solar:calendar-mark-linear\" className=\"size-3.5\" />\n {label}{' '}\n <time dateTime={value.toISOString().slice(0, 10)}>\n {new Intl.DateTimeFormat(locale, { dateStyle: 'medium', timeZone: 'UTC' }).format(value)}\n </time>\n </span>\n );\n};\n\nexport interface IStaticPageSection extends IClassName {\n /** The heading of the section: an `h2`. Without it the section has none. */\n title?: string;\n children: ReactNode;\n}\n\nexport const StaticPageSection = ({ title, children, className = 'gap-4' }: IStaticPageSection) => {\n const titleId = useId();\n\n return (\n <section aria-labelledby={title ? titleId : undefined} className={`flex flex-col ${className}`}>\n {title && (\n <GradientText\n as=\"h2\"\n id={titleId}\n type=\"accent\"\n text={title}\n className=\"text-xl font-semibold sm:text-2xl\"\n />\n )}\n {children}\n </section>\n );\n};\n\nexport interface IInfoCard {\n icon: string;\n /** A heading (an `h3`). */\n title: string;\n description: string;\n}\n\nexport const InfoCard = ({ icon, title, description }: IInfoCard) => (\n <div className=\"border-primary/10 bg-secondary-invert hover:border-primary/20 flex items-start gap-3 rounded-xl border p-4 transition-colors motion-reduce:transition-none\">\n <span\n aria-hidden=\"true\"\n className=\"bg-accent-duo flex size-9 shrink-0 items-center justify-center rounded-lg\"\n >\n <Icon icon={icon} className=\"size-5 text-white\" />\n </span>\n <div>\n <h3 className=\"text-primary text-sm font-semibold sm:text-base\">{title}</h3>\n <p className=\"text-secondary text-xs sm:text-sm\">{description}</p>\n </div>\n </div>\n);\n\nexport interface IInfoCardGrid {\n items: readonly IInfoCard[];\n /** How many cards in a row from `sm:` up. @default 2 */\n columns?: 2 | 3;\n}\n\nexport const InfoCardGrid = ({ items, columns = 2 }: IInfoCardGrid) => (\n <div className={`grid grid-cols-1 gap-4 ${columns === 3 ? 'sm:grid-cols-3' : 'sm:grid-cols-2'}`}>\n {items.map((item) => (\n <InfoCard key={item.title} {...item} />\n ))}\n </div>\n);\n\nexport interface IChecklist {\n items: readonly string[];\n /** @default 'solar:check-circle-linear' */\n icon?: string;\n iconClassName?: string;\n}\n\n/** Short statements in a list, each in its own bordered row with an icon. */\nexport const Checklist = ({\n items,\n icon = 'solar:check-circle-linear',\n iconClassName = 'text-primary-green',\n}: IChecklist) => {\n registerStaticPageIcons();\n\n return (\n <ul className=\"flex flex-col gap-3\">\n {items.map((item) => (\n <li\n key={item}\n className=\"border-primary/10 bg-secondary-invert flex items-start gap-3 rounded-xl border p-3 sm:p-4\"\n >\n <Icon\n aria-hidden=\"true\"\n icon={icon}\n className={`mt-0.5 size-4.5 shrink-0 ${iconClassName}`}\n />\n <span className=\"text-secondary text-xs sm:text-sm\">{item}</span>\n </li>\n ))}\n </ul>\n );\n};\n\nexport interface IHighlightNote {\n /** @default 'solar:danger-triangle-linear' */\n icon?: string;\n title: string;\n children: ReactNode;\n}\n\n/** A note that stands out: an icon beside a title and a text. It is a `note`, named by its title. */\nexport const HighlightNote = ({\n icon = 'solar:danger-triangle-linear',\n title,\n children,\n}: IHighlightNote) => {\n registerStaticPageIcons();\n\n const titleId = useId();\n\n return (\n <div\n role=\"note\"\n aria-labelledby={titleId}\n className=\"border-primary/10 bg-secondary-invert flex items-start gap-3 rounded-xl border p-4 sm:p-5\"\n >\n <Icon aria-hidden=\"true\" icon={icon} className=\"text-primary/60 mt-0.5 size-5 shrink-0\" />\n <div className=\"flex flex-col gap-1.5\">\n <p id={titleId} className=\"text-primary text-sm font-semibold sm:text-base\">\n {title}\n </p>\n <p className=\"text-secondary text-xs leading-relaxed sm:text-sm\">{children}</p>\n </div>\n </div>\n );\n};\n\nexport interface INumberedStep {\n title: string;\n description: string;\n}\n\nexport interface INumberedSteps {\n steps: readonly INumberedStep[];\n}\n\n/** The steps of a process in an ordered list, each with its number. */\nexport const NumberedSteps = ({ steps }: INumberedSteps) => (\n // `list-none` takes the list away for some screen readers; `role=\"list\"` gives it back\n <ol role=\"list\" className=\"flex list-none flex-col gap-3\">\n {steps.map((step, index) => (\n <li\n key={step.title}\n className=\"border-primary/10 bg-secondary-invert flex items-start gap-3 rounded-xl border p-4\"\n >\n <span\n aria-hidden=\"true\"\n className=\"bg-accent-duo flex size-7 shrink-0 items-center justify-center rounded-full text-xs font-semibold text-white\"\n >\n {index + 1}\n </span>\n <div>\n <p className=\"text-primary text-sm font-semibold sm:text-base\">{step.title}</p>\n <p className=\"text-secondary text-xs sm:text-sm\">{step.description}</p>\n </div>\n </li>\n ))}\n </ol>\n);\n\nexport interface IStaticPageCTA extends IClassName {\n /** The heading of the block: an `h2`. */\n title: string;\n description: ReactNode;\n /** The buttons or links. */\n actions: ReactNode;\n footer?: ReactNode;\n /** `'row'` puts the text and the actions side by side from `sm:` up; `'stack'` keeps them stacked. @default 'row' */\n layout?: 'row' | 'stack';\n}\n\n/** The closing block of a page (\"Get in touch\"): a heading, a text and the actions. */\nexport const StaticPageCTA = ({\n title,\n description,\n actions,\n footer,\n layout = 'row',\n className = '',\n}: IStaticPageCTA) => {\n const titleId = useId();\n\n return (\n <section\n aria-labelledby={titleId}\n className={`border-primary/10 bg-secondary-invert flex flex-col gap-4 rounded-2xl border p-4 sm:p-6 ${className}`}\n >\n <div\n className={`flex flex-col gap-4 ${\n layout === 'row' ? 'items-start justify-between sm:flex-row sm:items-center' : ''\n }`}\n >\n <div className=\"flex flex-col gap-1\">\n <h2 id={titleId} className=\"text-primary text-base font-semibold sm:text-lg\">\n {title}\n </h2>\n <p className=\"text-secondary text-xs sm:text-sm\">{description}</p>\n </div>\n {actions}\n </div>\n {footer}\n </section>\n );\n};\n\nexport interface IEmailUsAction {\n /** The address; it is also the text, unless `children` says another. */\n email: string;\n children?: ReactNode;\n}\n\n/** A pill that writes an e-mail to an address: the usual action of `StaticPageCTA`. */\nexport const EmailUsAction = ({ email, children }: IEmailUsAction) => {\n registerStaticPageIcons();\n\n return (\n <a\n href={`mailto:${email}`}\n className=\"border-primary/20 hover:bg-primary-invert/60 text-primary flex shrink-0 items-center gap-2 rounded-lg border px-4 py-2.5 text-sm font-medium transition-colors focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-crayola-c motion-reduce:transition-none\"\n >\n <Icon aria-hidden=\"true\" icon=\"solar:letter-linear\" className=\"size-4.5\" />\n {children ?? email}\n </a>\n );\n};\n"]}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Registers the icons above with Iconify; the components of this entry call it when they render
3
+ * (calling it again is harmless).
4
+ */
5
+ export declare const registerStaticPageIcons: () => void, STATIC_PAGE_ICON_NAMES: string[];
6
+ //# sourceMappingURL=static-page-icons.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"static-page-icons.d.cts","sourceRoot":"","sources":["../../src/static-page/static-page-icons.ts"],"names":[],"mappings":"AA+BA;;;GAGG;AACH,eAAO,MAAkB,uBAAuB,cAAS,sBAAsB,UAChD,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Registers the icons above with Iconify; the components of this entry call it when they render
3
+ * (calling it again is harmless).
4
+ */
5
+ export declare const registerStaticPageIcons: () => void, STATIC_PAGE_ICON_NAMES: string[];
6
+ //# sourceMappingURL=static-page-icons.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"static-page-icons.d.ts","sourceRoot":"","sources":["../../src/static-page/static-page-icons.ts"],"names":[],"mappings":"AA+BA;;;GAGG;AACH,eAAO,MAAkB,uBAAuB,cAAS,sBAAsB,UAChD,CAAC"}
@@ -0,0 +1,35 @@
1
+ import type { ComponentProps } from 'react';
2
+ export interface IStepperStep {
3
+ title: string;
4
+ description?: string;
5
+ /**
6
+ * An Iconify name (`'solar:user-linear'`) shown in the circle while the step is not completed; the
7
+ * step's number if left out. Iconify downloads it the first time it is shown and draws it in the
8
+ * browser, not on a server: to have it without a network, bundle it in the app (`addCollection`).
9
+ */
10
+ icon?: string;
11
+ /** Cannot be clicked. Only matters when `onStepClick` is given. */
12
+ disabled?: boolean;
13
+ }
14
+ export interface IStepper extends ComponentProps<'div'> {
15
+ steps: readonly IStepperStep[];
16
+ /** The index of the current step: the ones before it are completed, the ones after it are upcoming. */
17
+ activeStep: number;
18
+ /** Makes the steps buttons. It gets the index of the step that was clicked. */
19
+ onStepClick?: (step: number) => void;
20
+ /** Names the list of steps for assistive technology, e.g. `"Checkout progress"`. */
21
+ label?: string;
22
+ /**
23
+ * What assistive technology reads before the title of a completed step, which otherwise only shows
24
+ * a tick.
25
+ * @default 'Completed'
26
+ */
27
+ completedLabel?: string;
28
+ }
29
+ /**
30
+ * A row of steps with the current one marked, for a checkout, a sign-up or any other wizard. The
31
+ * steps are an ordered list; the current one has `aria-current="step"`. With `onStepClick` the steps
32
+ * are buttons, and the content in `children` is shown under them.
33
+ */
34
+ export declare const Stepper: ({ steps, activeStep, onStepClick, label, completedLabel, className, children, ...divProps }: IStepper) => import("react").JSX.Element;
35
+ //# sourceMappingURL=Stepper.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Stepper.d.cts","sourceRoot":"","sources":["../../src/stepper/Stepper.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAiB,MAAM,OAAO,CAAC;AAM3D,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,mEAAmE;IACnE,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,QAAS,SAAQ,cAAc,CAAC,KAAK,CAAC;IACrD,KAAK,EAAE,SAAS,YAAY,EAAE,CAAC;IAC/B,uGAAuG;IACvG,UAAU,EAAE,MAAM,CAAC;IACnB,+EAA+E;IAC/E,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,oFAAoF;IACpF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAuCD;;;;GAIG;AACH,eAAO,MAAM,OAAO,GAAI,6FASrB,QAAQ,gCA8FV,CAAC"}
@@ -0,0 +1,35 @@
1
+ import type { ComponentProps } from 'react';
2
+ export interface IStepperStep {
3
+ title: string;
4
+ description?: string;
5
+ /**
6
+ * An Iconify name (`'solar:user-linear'`) shown in the circle while the step is not completed; the
7
+ * step's number if left out. Iconify downloads it the first time it is shown and draws it in the
8
+ * browser, not on a server: to have it without a network, bundle it in the app (`addCollection`).
9
+ */
10
+ icon?: string;
11
+ /** Cannot be clicked. Only matters when `onStepClick` is given. */
12
+ disabled?: boolean;
13
+ }
14
+ export interface IStepper extends ComponentProps<'div'> {
15
+ steps: readonly IStepperStep[];
16
+ /** The index of the current step: the ones before it are completed, the ones after it are upcoming. */
17
+ activeStep: number;
18
+ /** Makes the steps buttons. It gets the index of the step that was clicked. */
19
+ onStepClick?: (step: number) => void;
20
+ /** Names the list of steps for assistive technology, e.g. `"Checkout progress"`. */
21
+ label?: string;
22
+ /**
23
+ * What assistive technology reads before the title of a completed step, which otherwise only shows
24
+ * a tick.
25
+ * @default 'Completed'
26
+ */
27
+ completedLabel?: string;
28
+ }
29
+ /**
30
+ * A row of steps with the current one marked, for a checkout, a sign-up or any other wizard. The
31
+ * steps are an ordered list; the current one has `aria-current="step"`. With `onStepClick` the steps
32
+ * are buttons, and the content in `children` is shown under them.
33
+ */
34
+ export declare const Stepper: ({ steps, activeStep, onStepClick, label, completedLabel, className, children, ...divProps }: IStepper) => import("react").JSX.Element;
35
+ //# sourceMappingURL=Stepper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Stepper.d.ts","sourceRoot":"","sources":["../../src/stepper/Stepper.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAiB,MAAM,OAAO,CAAC;AAM3D,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,mEAAmE;IACnE,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,QAAS,SAAQ,cAAc,CAAC,KAAK,CAAC;IACrD,KAAK,EAAE,SAAS,YAAY,EAAE,CAAC;IAC/B,uGAAuG;IACvG,UAAU,EAAE,MAAM,CAAC;IACnB,+EAA+E;IAC/E,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,oFAAoF;IACpF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAuCD;;;;GAIG;AACH,eAAO,MAAM,OAAO,GAAI,6FASrB,QAAQ,gCA8FV,CAAC"}
@@ -0,0 +1,149 @@
1
+ 'use strict';
2
+
3
+ var react = require('@iconify/react');
4
+ var jsxRuntime = require('react/jsx-runtime');
5
+
6
+ var __defProp = Object.defineProperty;
7
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
8
+
9
+ // src/lib/content.ts
10
+ var hasContent = /* @__PURE__ */ __name((content) => content !== null && content !== void 0 && content !== false && content !== true && content !== "", "hasContent");
11
+
12
+ // src/lib/stepper.ts
13
+ var getCurrentStep = /* @__PURE__ */ __name((activeStep, count) => Number.isNaN(activeStep) ? 0 : Math.min(Math.max(Math.trunc(activeStep), 0), Math.max(count - 1, 0)), "getCurrentStep");
14
+ var getStepState = /* @__PURE__ */ __name((index, currentStep) => {
15
+ if (index < currentStep) return "completed";
16
+ return index === currentStep ? "active" : "upcoming";
17
+ }, "getStepState");
18
+ var STEPPER_ICON_SETS = [
19
+ {
20
+ prefix: "solar",
21
+ width: 24,
22
+ height: 24,
23
+ icons: {
24
+ "check-read-linear": {
25
+ body: '<g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"><path d="M4 12.9L7.14286 16.5L15 7.5"/><path d="M20 7.5625L11.4283 16.5625L11 16"/></g>'
26
+ }
27
+ }
28
+ }
29
+ ];
30
+ var registered = false;
31
+ var registerStepperIcons = /* @__PURE__ */ __name(() => {
32
+ if (registered) return;
33
+ for (const iconSet of STEPPER_ICON_SETS) react.addCollection(iconSet);
34
+ registered = true;
35
+ }, "registerStepperIcons");
36
+ STEPPER_ICON_SETS.flatMap(
37
+ ({ prefix, icons }) => Object.keys(icons).map((name) => `${prefix}:${name}`)
38
+ );
39
+ var ITEM_CSS = "group relative flex min-w-0 items-start gap-3 text-left md:flex-col md:items-center md:gap-3 md:px-2";
40
+ var CLICKABLE_CSS = "cursor-pointer rounded-lg focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-blue-crayola-c disabled:cursor-not-allowed disabled:opacity-50";
41
+ var CIRCLE_CSS = "relative z-1 flex size-10 shrink-0 items-center justify-center rounded-full border text-sm font-semibold transition-all duration-300 motion-reduce:transition-none md:size-11";
42
+ var CIRCLE_STATE_CSS = {
43
+ completed: "border-blue-crayola-c bg-accent-duo text-white shadow-[0_8px_24px_rgba(var(--blue-crayola-c-rgb),0.28)] forced-colors:border-[Highlight] forced-colors:bg-[Highlight] forced-colors:bg-none forced-colors:text-[HighlightText]",
44
+ active: "border-blue-crayola-c bg-primary-invert text-primary shadow-[0_0_0_5px_rgba(var(--blue-crayola-c-rgb),0.12)] forced-colors:border-[Highlight] forced-colors:border-4",
45
+ upcoming: "border-primary/20 bg-primary-invert text-primary/60 forced-colors:border-[GrayText] forced-colors:text-[GrayText]"
46
+ };
47
+ var TITLE_STATE_CSS = {
48
+ completed: "text-primary/80",
49
+ active: "text-primary",
50
+ upcoming: "text-primary/45 forced-colors:text-[GrayText]"
51
+ };
52
+ var DESCRIPTION_STATE_CSS = {
53
+ completed: "text-primary/35",
54
+ active: "text-secondary",
55
+ upcoming: "text-primary/35 forced-colors:text-[GrayText]"
56
+ };
57
+ var CONNECTOR_BASE_CSS = "absolute top-10 left-5 h-4 w-0.5 -translate-x-1/2 md:top-5 md:left-[calc(50%+1.375rem)] md:h-0.5 md:w-[calc(100%-2.75rem)] md:translate-x-0";
58
+ var Stepper = /* @__PURE__ */ __name(({
59
+ steps,
60
+ activeStep,
61
+ onStepClick,
62
+ label,
63
+ completedLabel = "Completed",
64
+ className = "",
65
+ children,
66
+ ...divProps
67
+ }) => {
68
+ registerStepperIcons();
69
+ const currentStep = getCurrentStep(activeStep, steps.length);
70
+ return /* @__PURE__ */ jsxRuntime.jsxs(
71
+ "div",
72
+ {
73
+ ...divProps,
74
+ className: `flex w-full flex-col gap-6 p-4 shadow-sm sm:p-5 lg:p-6 ${className}`,
75
+ children: [
76
+ steps.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(
77
+ "ol",
78
+ {
79
+ "aria-label": label,
80
+ style: { "--steps-count": steps.length },
81
+ className: "m-0 flex list-none flex-col gap-4 p-0 md:grid md:grid-cols-[repeat(var(--steps-count),minmax(0,1fr))] md:gap-0",
82
+ children: steps.map((step, index) => {
83
+ const state = getStepState(index, currentStep);
84
+ const hasNextStep = index < steps.length - 1;
85
+ const content = /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
86
+ hasNextStep && /* @__PURE__ */ jsxRuntime.jsx(
87
+ "span",
88
+ {
89
+ "aria-hidden": "true",
90
+ className: `${CONNECTOR_BASE_CSS} ${state === "completed" ? "bg-accent-duo forced-colors:bg-[Highlight] forced-colors:bg-none" : "bg-primary/20 forced-colors:bg-[GrayText]"}`
91
+ }
92
+ ),
93
+ /* @__PURE__ */ jsxRuntime.jsx("span", { "aria-hidden": "true", className: `${CIRCLE_CSS} ${CIRCLE_STATE_CSS[state]}`, children: state === "completed" ? /* @__PURE__ */ jsxRuntime.jsx(react.Icon, { icon: "solar:check-read-linear", className: "size-5" }) : step.icon ? /* @__PURE__ */ jsxRuntime.jsx(react.Icon, { icon: step.icon, className: "size-5" }) : index + 1 }),
94
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex min-w-0 flex-1 flex-col gap-1 pt-0.5 md:items-center md:pt-0 md:text-center", children: [
95
+ /* @__PURE__ */ jsxRuntime.jsxs(
96
+ "span",
97
+ {
98
+ className: `line-clamp-1 text-sm font-semibold md:text-[13px] lg:text-sm ${TITLE_STATE_CSS[state]}`,
99
+ children: [
100
+ state === "completed" && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "sr-only", children: `${completedLabel}: ` }),
101
+ step.title
102
+ ]
103
+ }
104
+ ),
105
+ hasContent(step.description) && /* @__PURE__ */ jsxRuntime.jsx(
106
+ "span",
107
+ {
108
+ className: `line-clamp-1 text-xs leading-4 md:line-clamp-2 ${DESCRIPTION_STATE_CSS[state]}`,
109
+ children: step.description
110
+ }
111
+ )
112
+ ] })
113
+ ] });
114
+ return (
115
+ // The steps are a fixed order that is never sorted or filtered, and two can have the
116
+ // same title: the place is what tells them apart.
117
+ /* @__PURE__ */ jsxRuntime.jsx(
118
+ "li",
119
+ {
120
+ "data-state": state,
121
+ "aria-current": state === "active" ? "step" : void 0,
122
+ children: onStepClick ? /* @__PURE__ */ jsxRuntime.jsx(
123
+ "button",
124
+ {
125
+ type: "button",
126
+ disabled: step.disabled,
127
+ onClick: () => {
128
+ onStepClick(index);
129
+ },
130
+ className: `${ITEM_CSS} ${CLICKABLE_CSS} w-full`,
131
+ children: content
132
+ }
133
+ ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: `${ITEM_CSS} cursor-default`, children: content })
134
+ },
135
+ index
136
+ )
137
+ );
138
+ })
139
+ }
140
+ ),
141
+ hasContent(children) && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "border-primary/10 border-t pt-5", children })
142
+ ]
143
+ }
144
+ );
145
+ }, "Stepper");
146
+
147
+ exports.Stepper = Stepper;
148
+ //# sourceMappingURL=index.cjs.map
149
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/lib/content.ts","../../src/lib/stepper.ts","../../src/stepper/stepper-icons.ts","../../src/stepper/Stepper.tsx"],"names":["addCollection","jsxs","jsx","Fragment","Icon"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { ReactNode } from 'react';\n\n/**\n * Whether React would show something for `content`. `null`, `undefined`, booleans and an empty string\n * show nothing; `0` does show (the text \"0\"), which is why this is not a plain truthiness check.\n */\nexport const hasContent = (content: ReactNode) =>\n content !== null &&\n content !== undefined &&\n content !== false &&\n content !== true &&\n content !== '';\n","export type TStepState = 'completed' | 'active' | 'upcoming';\n\n/**\n * The step that is the current one: `activeStep` kept inside the steps. A number past the ends (or\n * with a fraction) is put on the nearest step, and `NaN` is the first, so a wrong value never makes\n * every step look completed or none look current.\n */\nexport const getCurrentStep = (activeStep: number, count: number) =>\n Number.isNaN(activeStep)\n ? 0\n : Math.min(Math.max(Math.trunc(activeStep), 0), Math.max(count - 1, 0));\n\nexport const getStepState = (index: number, currentStep: number): TStepState => {\n if (index < currentStep) return 'completed';\n\n return index === currentStep ? 'active' : 'upcoming';\n};\n","import { addCollection, type IconifyJSON } from '@iconify/react';\n\n/*\n * The tick of a completed step. Iconify downloads an icon from its API the first time it is shown,\n * which cannot work offline and leaves an empty circle until it arrives, so the icon is bundled here\n * and registered with Iconify (the same way as the toast icons, see `toast-icons.ts`).\n *\n * An icon a step asks for with `icon: 'solar:...'` is the app's and is downloaded as usual; add it to\n * the app with `addCollection` when it has to show without a network.\n *\n * The data is what `https://api.iconify.design/<prefix>.json?icons=<name>` answers.\n */\nconst STEPPER_ICON_SETS: IconifyJSON[] = [\n {\n prefix: 'solar',\n width: 24,\n height: 24,\n icons: {\n 'check-read-linear': {\n body: '<g fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"><path d=\"M4 12.9L7.14286 16.5L15 7.5\"/><path d=\"M20 7.5625L11.4283 16.5625L11 16\"/></g>',\n },\n },\n },\n];\n\nlet registered = false;\n\n/**\n * Registers the icons above with Iconify. `Stepper` calls it when it renders, not when this file is\n * imported: an app that never renders a stepper never runs it, and nothing depends on the bundler\n * keeping an import that is only there for its effect (see `toast-icons.ts`). Calling it again is\n * harmless.\n */\nexport const registerStepperIcons = () => {\n if (registered) return;\n\n for (const iconSet of STEPPER_ICON_SETS) addCollection(iconSet);\n registered = true;\n};\n\n/** Every icon name registered above, e.g. `solar:check-read-linear`. */\nexport const STEPPER_ICON_NAMES = STEPPER_ICON_SETS.flatMap(({ prefix, icons }) =>\n Object.keys(icons).map((name) => `${prefix}:${name}`),\n);\n","import { Icon } from '@iconify/react';\nimport type { ComponentProps, CSSProperties } from 'react';\n\nimport { hasContent } from '../lib/content.js';\nimport { getCurrentStep, getStepState, type TStepState } from '../lib/stepper.js';\nimport { registerStepperIcons } from './stepper-icons.js';\n\nexport interface IStepperStep {\n title: string;\n description?: string;\n /**\n * An Iconify name (`'solar:user-linear'`) shown in the circle while the step is not completed; the\n * step's number if left out. Iconify downloads it the first time it is shown and draws it in the\n * browser, not on a server: to have it without a network, bundle it in the app (`addCollection`).\n */\n icon?: string;\n /** Cannot be clicked. Only matters when `onStepClick` is given. */\n disabled?: boolean;\n}\n\nexport interface IStepper extends ComponentProps<'div'> {\n steps: readonly IStepperStep[];\n /** The index of the current step: the ones before it are completed, the ones after it are upcoming. */\n activeStep: number;\n /** Makes the steps buttons. It gets the index of the step that was clicked. */\n onStepClick?: (step: number) => void;\n /** Names the list of steps for assistive technology, e.g. `\"Checkout progress\"`. */\n label?: string;\n /**\n * What assistive technology reads before the title of a completed step, which otherwise only shows\n * a tick.\n * @default 'Completed'\n */\n completedLabel?: string;\n}\n\nconst ITEM_CSS =\n 'group relative flex min-w-0 items-start gap-3 text-left md:flex-col md:items-center md:gap-3 md:px-2';\n// No `outline-hidden`: in Tailwind v4 it sets `--tw-outline-style: none`, which the\n// `focus-visible:outline-2` below uses for its style, so the ring would never be drawn. A button only\n// shows the browser's own ring for the keyboard anyway (`:focus-visible`), never for a click.\nconst CLICKABLE_CSS =\n 'cursor-pointer rounded-lg focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-blue-crayola-c disabled:cursor-not-allowed disabled:opacity-50';\n\nconst CIRCLE_CSS =\n 'relative z-1 flex size-10 shrink-0 items-center justify-center rounded-full border text-sm font-semibold transition-all duration-300 motion-reduce:transition-none md:size-11';\n\n// `Record`s: a new state is a type error here until it has a look. Every state also looks different\n// in forced-colors mode (Windows high contrast), where backgrounds and shadows are not drawn.\nconst CIRCLE_STATE_CSS: Record<TStepState, string> = {\n completed:\n 'border-blue-crayola-c bg-accent-duo text-white shadow-[0_8px_24px_rgba(var(--blue-crayola-c-rgb),0.28)] forced-colors:border-[Highlight] forced-colors:bg-[Highlight] forced-colors:bg-none forced-colors:text-[HighlightText]',\n active:\n 'border-blue-crayola-c bg-primary-invert text-primary shadow-[0_0_0_5px_rgba(var(--blue-crayola-c-rgb),0.12)] forced-colors:border-[Highlight] forced-colors:border-4',\n upcoming:\n 'border-primary/20 bg-primary-invert text-primary/60 forced-colors:border-[GrayText] forced-colors:text-[GrayText]',\n};\n\nconst TITLE_STATE_CSS: Record<TStepState, string> = {\n completed: 'text-primary/80',\n active: 'text-primary',\n upcoming: 'text-primary/45 forced-colors:text-[GrayText]',\n};\n\nconst DESCRIPTION_STATE_CSS: Record<TStepState, string> = {\n completed: 'text-primary/35',\n active: 'text-secondary',\n upcoming: 'text-primary/35 forced-colors:text-[GrayText]',\n};\n\nconst CONNECTOR_BASE_CSS =\n 'absolute top-10 left-5 h-4 w-0.5 -translate-x-1/2 md:top-5 md:left-[calc(50%+1.375rem)] md:h-0.5 md:w-[calc(100%-2.75rem)] md:translate-x-0';\n\n/**\n * A row of steps with the current one marked, for a checkout, a sign-up or any other wizard. The\n * steps are an ordered list; the current one has `aria-current=\"step\"`. With `onStepClick` the steps\n * are buttons, and the content in `children` is shown under them.\n */\nexport const Stepper = ({\n steps,\n activeStep,\n onStepClick,\n label,\n completedLabel = 'Completed',\n className = '',\n children,\n ...divProps\n}: IStepper) => {\n registerStepperIcons();\n\n const currentStep = getCurrentStep(activeStep, steps.length);\n\n return (\n <div\n {...divProps}\n className={`flex w-full flex-col gap-6 p-4 shadow-sm sm:p-5 lg:p-6 ${className}`}\n >\n {steps.length > 0 && (\n <ol\n aria-label={label}\n style={{ '--steps-count': steps.length } as CSSProperties}\n className=\"m-0 flex list-none flex-col gap-4 p-0 md:grid md:grid-cols-[repeat(var(--steps-count),minmax(0,1fr))] md:gap-0\"\n >\n {steps.map((step, index) => {\n const state = getStepState(index, currentStep);\n const hasNextStep = index < steps.length - 1;\n\n const content = (\n <>\n {hasNextStep && (\n <span\n aria-hidden=\"true\"\n className={`${CONNECTOR_BASE_CSS} ${\n state === 'completed'\n ? 'bg-accent-duo forced-colors:bg-[Highlight] forced-colors:bg-none'\n : 'bg-primary/20 forced-colors:bg-[GrayText]'\n }`}\n />\n )}\n\n <span aria-hidden=\"true\" className={`${CIRCLE_CSS} ${CIRCLE_STATE_CSS[state]}`}>\n {state === 'completed' ? (\n <Icon icon=\"solar:check-read-linear\" className=\"size-5\" />\n ) : step.icon ? (\n <Icon icon={step.icon} className=\"size-5\" />\n ) : (\n index + 1\n )}\n </span>\n\n <span className=\"flex min-w-0 flex-1 flex-col gap-1 pt-0.5 md:items-center md:pt-0 md:text-center\">\n <span\n className={`line-clamp-1 text-sm font-semibold md:text-[13px] lg:text-sm ${TITLE_STATE_CSS[state]}`}\n >\n {state === 'completed' && (\n <span className=\"sr-only\">{`${completedLabel}: `}</span>\n )}\n {step.title}\n </span>\n {hasContent(step.description) && (\n <span\n className={`line-clamp-1 text-xs leading-4 md:line-clamp-2 ${DESCRIPTION_STATE_CSS[state]}`}\n >\n {step.description}\n </span>\n )}\n </span>\n </>\n );\n\n return (\n // The steps are a fixed order that is never sorted or filtered, and two can have the\n // same title: the place is what tells them apart.\n <li\n key={index}\n data-state={state}\n aria-current={state === 'active' ? 'step' : undefined}\n >\n {onStepClick ? (\n <button\n type=\"button\"\n disabled={step.disabled}\n onClick={() => {\n onStepClick(index);\n }}\n className={`${ITEM_CSS} ${CLICKABLE_CSS} w-full`}\n >\n {content}\n </button>\n ) : (\n <div className={`${ITEM_CSS} cursor-default`}>{content}</div>\n )}\n </li>\n );\n })}\n </ol>\n )}\n\n {hasContent(children) && <div className=\"border-primary/10 border-t pt-5\">{children}</div>}\n </div>\n );\n};\n"]}
@@ -0,0 +1,2 @@
1
+ export { type IStepper, type IStepperStep, Stepper } from './Stepper.js';
2
+ //# sourceMappingURL=index.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.cts","sourceRoot":"","sources":["../../src/stepper/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,YAAY,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { type IStepper, type IStepperStep, Stepper } from './Stepper.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/stepper/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,YAAY,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC"}