@glyphui/ui 0.4.0 → 0.5.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 (546) hide show
  1. package/README.md +9 -6
  2. package/dist/chart.d.ts +14 -202
  3. package/dist/chart.js +14 -465
  4. package/dist/components/accordion/accordion.d.ts +15 -0
  5. package/dist/components/accordion/accordion.js +69 -0
  6. package/dist/components/accordion/accordion.styles.d.ts +65 -0
  7. package/dist/components/accordion/accordion.styles.js +30 -0
  8. package/dist/components/accordion/index.d.ts +3 -0
  9. package/dist/components/alert/alert-icons.js +62 -0
  10. package/dist/components/alert/alert.d.ts +19 -0
  11. package/dist/components/alert/alert.js +64 -0
  12. package/dist/components/alert/alert.styles.d.ts +107 -0
  13. package/dist/components/alert/alert.styles.js +86 -0
  14. package/dist/components/alert/index.d.ts +3 -0
  15. package/dist/components/alert-dialog/alert-dialog.d.ts +29 -0
  16. package/dist/components/alert-dialog/alert-dialog.js +89 -0
  17. package/dist/components/alert-dialog/alert-dialog.styles.d.ts +63 -0
  18. package/dist/components/alert-dialog/alert-dialog.styles.js +19 -0
  19. package/dist/components/alert-dialog/confirm-dialog.js +22 -0
  20. package/dist/components/alert-dialog/confirm.d.ts +30 -0
  21. package/dist/components/alert-dialog/confirm.js +62 -0
  22. package/dist/components/alert-dialog/index.d.ts +4 -0
  23. package/dist/components/aspect-ratio/aspect-ratio.d.ts +55 -0
  24. package/dist/components/aspect-ratio/aspect-ratio.js +28 -0
  25. package/dist/components/aspect-ratio/index.d.ts +2 -0
  26. package/dist/components/avatar/avatar.d.ts +13 -0
  27. package/dist/components/avatar/avatar.js +50 -0
  28. package/dist/components/avatar/avatar.styles.d.ts +77 -0
  29. package/dist/components/avatar/avatar.styles.js +32 -0
  30. package/dist/components/avatar/index.d.ts +3 -0
  31. package/dist/components/badge/badge.d.ts +10 -0
  32. package/dist/components/badge/badge.js +28 -0
  33. package/dist/components/badge/badge.styles.d.ts +62 -0
  34. package/dist/components/badge/badge.styles.js +72 -0
  35. package/dist/components/badge/index.d.ts +3 -0
  36. package/dist/components/banner/banner.d.ts +17 -0
  37. package/dist/components/banner/banner.js +71 -0
  38. package/dist/components/banner/banner.styles.d.ts +98 -0
  39. package/dist/components/banner/banner.styles.js +27 -0
  40. package/dist/components/banner/index.d.ts +3 -0
  41. package/dist/components/blockquote/blockquote.d.ts +72 -0
  42. package/dist/components/blockquote/blockquote.js +47 -0
  43. package/dist/components/blockquote/index.d.ts +2 -0
  44. package/dist/components/breadcrumb/breadcrumb.d.ts +28 -0
  45. package/dist/components/breadcrumb/breadcrumb.js +85 -0
  46. package/dist/components/breadcrumb/breadcrumb.styles.d.ts +63 -0
  47. package/dist/components/breadcrumb/breadcrumb.styles.js +18 -0
  48. package/dist/components/breadcrumb/index.d.ts +3 -0
  49. package/dist/components/button/button.d.ts +20 -0
  50. package/dist/components/button/button.js +52 -0
  51. package/dist/components/button/button.styles.d.ts +146 -0
  52. package/dist/components/button/button.styles.js +64 -0
  53. package/dist/components/button/index.d.ts +3 -0
  54. package/dist/components/calendar/calendar.d.ts +9 -0
  55. package/dist/components/calendar/calendar.js +75 -0
  56. package/dist/components/calendar/calendar.styles.d.ts +171 -0
  57. package/dist/components/calendar/calendar.styles.js +42 -0
  58. package/dist/components/calendar/index.d.ts +4 -0
  59. package/dist/components/card/card.d.ts +17 -0
  60. package/dist/components/card/card.js +79 -0
  61. package/dist/components/card/card.styles.d.ts +113 -0
  62. package/dist/components/card/card.styles.js +38 -0
  63. package/dist/components/card/index.d.ts +3 -0
  64. package/dist/components/carousel/carousel.d.ts +37 -0
  65. package/dist/components/carousel/carousel.js +190 -0
  66. package/dist/components/carousel/carousel.styles.d.ts +74 -0
  67. package/dist/components/carousel/carousel.styles.js +35 -0
  68. package/dist/components/carousel/index.d.ts +3 -0
  69. package/dist/components/checkbox/checkbox.d.ts +37 -0
  70. package/dist/components/checkbox/checkbox.js +44 -0
  71. package/dist/components/checkbox/index.d.ts +2 -0
  72. package/dist/components/code/code.d.ts +18 -0
  73. package/dist/components/code/code.js +75 -0
  74. package/dist/components/code/code.styles.d.ts +76 -0
  75. package/dist/components/code/code.styles.js +18 -0
  76. package/dist/components/code/index.d.ts +3 -0
  77. package/dist/components/collapsible/collapsible.d.ts +56 -0
  78. package/dist/components/collapsible/collapsible.js +43 -0
  79. package/dist/components/collapsible/index.d.ts +2 -0
  80. package/dist/components/combobox/combobox.d.ts +50 -0
  81. package/dist/components/combobox/combobox.js +141 -0
  82. package/dist/components/combobox/combobox.styles.d.ts +110 -0
  83. package/dist/components/combobox/combobox.styles.js +42 -0
  84. package/dist/components/combobox/index.d.ts +3 -0
  85. package/dist/components/command-menu/command-menu.d.ts +40 -0
  86. package/dist/components/command-menu/command-menu.js +148 -0
  87. package/dist/components/command-menu/command-menu.styles.d.ts +105 -0
  88. package/dist/components/command-menu/command-menu.styles.js +30 -0
  89. package/dist/components/command-menu/index.d.ts +3 -0
  90. package/dist/components/container/container.d.ts +34 -0
  91. package/dist/components/container/container.js +30 -0
  92. package/dist/components/container/index.d.ts +2 -0
  93. package/dist/components/context-menu/context-menu.d.ts +34 -0
  94. package/dist/components/context-menu/context-menu.js +157 -0
  95. package/dist/components/context-menu/context-menu.styles.d.ts +135 -0
  96. package/dist/components/context-menu/context-menu.styles.js +14 -0
  97. package/dist/components/context-menu/index.d.ts +3 -0
  98. package/dist/components/copy-button/copy-button.d.ts +61 -0
  99. package/dist/components/copy-button/copy-button.js +79 -0
  100. package/dist/components/copy-button/index.d.ts +2 -0
  101. package/dist/components/date-picker/date-picker.d.ts +51 -0
  102. package/dist/components/date-picker/date-picker.js +235 -0
  103. package/dist/components/date-picker/date-picker.styles.d.ts +77 -0
  104. package/dist/components/date-picker/date-picker.styles.js +31 -0
  105. package/dist/components/date-picker/index.d.ts +3 -0
  106. package/dist/components/description-list/description-list.d.ts +15 -0
  107. package/dist/components/description-list/description-list.js +51 -0
  108. package/dist/components/description-list/description-list.styles.d.ts +74 -0
  109. package/dist/components/description-list/description-list.styles.js +35 -0
  110. package/dist/components/description-list/index.d.ts +3 -0
  111. package/dist/components/dialog/close-icon.js +22 -0
  112. package/dist/components/dialog/dialog.d.ts +21 -0
  113. package/dist/components/dialog/dialog.js +79 -0
  114. package/dist/components/dialog/dialog.styles.d.ts +83 -0
  115. package/dist/components/dialog/dialog.styles.js +34 -0
  116. package/dist/components/dialog/index.d.ts +3 -0
  117. package/dist/components/dropdown-menu/dropdown-menu.d.ts +34 -0
  118. package/dist/components/dropdown-menu/dropdown-menu.js +160 -0
  119. package/dist/components/dropdown-menu/dropdown-menu.styles.d.ts +83 -0
  120. package/dist/components/dropdown-menu/dropdown-menu.styles.js +38 -0
  121. package/dist/components/dropdown-menu/index.d.ts +3 -0
  122. package/dist/components/eyebrow/eyebrow.d.ts +9 -0
  123. package/dist/components/eyebrow/eyebrow.js +20 -0
  124. package/dist/components/eyebrow/eyebrow.styles.d.ts +38 -0
  125. package/dist/components/eyebrow/eyebrow.styles.js +13 -0
  126. package/dist/components/eyebrow/index.d.ts +3 -0
  127. package/dist/components/field/field-context.d.ts +25 -0
  128. package/dist/components/field/field-context.js +27 -0
  129. package/dist/components/field/field.d.ts +28 -0
  130. package/dist/{field-CVbywksE.js → components/field/field.js} +6 -35
  131. package/dist/components/field/field.styles.d.ts +53 -0
  132. package/dist/components/field/field.styles.js +22 -0
  133. package/dist/components/field/index.d.ts +4 -0
  134. package/dist/components/file-upload/file-upload.d.ts +52 -0
  135. package/dist/components/file-upload/file-upload.js +266 -0
  136. package/dist/components/file-upload/file-upload.styles.d.ts +123 -0
  137. package/dist/components/file-upload/file-upload.styles.js +32 -0
  138. package/dist/components/file-upload/index.d.ts +3 -0
  139. package/dist/components/grid/grid.d.ts +168 -0
  140. package/dist/components/grid/grid.js +126 -0
  141. package/dist/components/grid/index.d.ts +2 -0
  142. package/dist/components/heading/heading.d.ts +12 -0
  143. package/dist/components/heading/heading.js +28 -0
  144. package/dist/components/heading/heading.styles.d.ts +65 -0
  145. package/dist/components/heading/heading.styles.js +15 -0
  146. package/dist/components/heading/index.d.ts +3 -0
  147. package/dist/components/hover-card/hover-card.d.ts +43 -0
  148. package/dist/components/hover-card/hover-card.js +27 -0
  149. package/dist/components/hover-card/index.d.ts +2 -0
  150. package/dist/components/input/index.d.ts +3 -0
  151. package/dist/components/input/input.d.ts +13 -0
  152. package/dist/components/input/input.js +33 -0
  153. package/dist/components/input/input.styles.d.ts +55 -0
  154. package/dist/components/input/input.styles.js +33 -0
  155. package/dist/components/input-otp/index.d.ts +4 -0
  156. package/dist/components/input-otp/index.js +5 -0
  157. package/dist/components/input-otp/input-otp.d.ts +23 -0
  158. package/dist/components/input-otp/input-otp.js +86 -0
  159. package/dist/components/input-otp/input-otp.styles.d.ts +71 -0
  160. package/dist/components/input-otp/input-otp.styles.js +30 -0
  161. package/dist/components/kbd/index.d.ts +2 -0
  162. package/dist/components/kbd/kbd.d.ts +30 -0
  163. package/dist/components/kbd/kbd.js +17 -0
  164. package/dist/components/label/index.d.ts +2 -0
  165. package/dist/components/label/label.d.ts +31 -0
  166. package/dist/components/label/label.js +17 -0
  167. package/dist/components/link/index.d.ts +3 -0
  168. package/dist/components/link/link.d.ts +14 -0
  169. package/dist/components/link/link.js +57 -0
  170. package/dist/components/link/link.styles.d.ts +89 -0
  171. package/dist/components/link/link.styles.js +33 -0
  172. package/dist/components/modal/index.d.ts +3 -0
  173. package/dist/components/modal/modal.d.ts +33 -0
  174. package/dist/components/modal/modal.js +56 -0
  175. package/dist/components/modal/modal.styles.d.ts +61 -0
  176. package/dist/components/modal/modal.styles.js +14 -0
  177. package/dist/components/navigation-menu/index.d.ts +3 -0
  178. package/dist/components/navigation-menu/navigation-menu.d.ts +37 -0
  179. package/dist/components/navigation-menu/navigation-menu.js +138 -0
  180. package/dist/components/navigation-menu/navigation-menu.styles.d.ts +111 -0
  181. package/dist/components/navigation-menu/navigation-menu.styles.js +39 -0
  182. package/dist/components/number-input/index.d.ts +3 -0
  183. package/dist/components/number-input/number-input.d.ts +30 -0
  184. package/dist/components/number-input/number-input.js +151 -0
  185. package/dist/components/number-input/number-input.styles.d.ts +68 -0
  186. package/dist/components/number-input/number-input.styles.js +35 -0
  187. package/dist/components/pagination/index.d.ts +4 -0
  188. package/dist/components/pagination/pagination-range.d.ts +11 -0
  189. package/dist/components/pagination/pagination-range.js +42 -0
  190. package/dist/components/pagination/pagination.d.ts +18 -0
  191. package/dist/components/pagination/pagination.js +94 -0
  192. package/dist/components/pagination/pagination.styles.d.ts +65 -0
  193. package/dist/components/pagination/pagination.styles.js +35 -0
  194. package/dist/components/password-input/index.d.ts +3 -0
  195. package/dist/components/password-input/password-input.d.ts +20 -0
  196. package/dist/components/password-input/password-input.js +106 -0
  197. package/dist/components/password-input/password-input.styles.d.ts +66 -0
  198. package/dist/components/password-input/password-input.styles.js +21 -0
  199. package/dist/components/popover/index.d.ts +2 -0
  200. package/dist/components/popover/popover.d.ts +52 -0
  201. package/dist/components/popover/popover.js +35 -0
  202. package/dist/components/progress/index.d.ts +3 -0
  203. package/dist/components/progress/progress.d.ts +29 -0
  204. package/dist/components/progress/progress.js +108 -0
  205. package/dist/components/progress/progress.styles.d.ts +236 -0
  206. package/dist/components/progress/progress.styles.js +69 -0
  207. package/dist/components/prose/index.d.ts +2 -0
  208. package/dist/components/prose/prose.d.ts +90 -0
  209. package/dist/components/prose/prose.js +67 -0
  210. package/dist/components/radio-group/index.d.ts +3 -0
  211. package/dist/components/radio-group/radio-group.d.ts +26 -0
  212. package/dist/components/radio-group/radio-group.js +102 -0
  213. package/dist/components/radio-group/radio-group.styles.d.ts +80 -0
  214. package/dist/components/radio-group/radio-group.styles.js +56 -0
  215. package/dist/components/resizable/index.d.ts +3 -0
  216. package/dist/components/resizable/resizable.d.ts +17 -0
  217. package/dist/components/resizable/resizable.js +81 -0
  218. package/dist/components/resizable/resizable.styles.d.ts +53 -0
  219. package/dist/components/resizable/resizable.styles.js +19 -0
  220. package/dist/components/scroll-area/index.d.ts +2 -0
  221. package/dist/components/scroll-area/scroll-area.d.ts +70 -0
  222. package/dist/components/scroll-area/scroll-area.js +70 -0
  223. package/dist/components/section/index.d.ts +2 -0
  224. package/dist/components/section/section.d.ts +52 -0
  225. package/dist/components/section/section.js +41 -0
  226. package/dist/components/segmented-control/index.d.ts +2 -0
  227. package/dist/components/segmented-control/segmented-control.d.ts +92 -0
  228. package/dist/components/segmented-control/segmented-control.js +86 -0
  229. package/dist/components/select/index.d.ts +2 -0
  230. package/dist/components/select/select.d.ts +85 -0
  231. package/dist/components/select/select.js +81 -0
  232. package/dist/components/separator/index.d.ts +2 -0
  233. package/dist/components/separator/separator.d.ts +40 -0
  234. package/dist/components/separator/separator.js +27 -0
  235. package/dist/components/sheet/index.d.ts +3 -0
  236. package/dist/components/sheet/sheet.d.ts +20 -0
  237. package/dist/components/sheet/sheet.js +83 -0
  238. package/dist/components/sheet/sheet.styles.d.ts +101 -0
  239. package/dist/components/sheet/sheet.styles.js +62 -0
  240. package/dist/components/skeleton/index.d.ts +2 -0
  241. package/dist/components/skeleton/skeleton.d.ts +30 -0
  242. package/dist/components/skeleton/skeleton.js +18 -0
  243. package/dist/components/slider/index.d.ts +3 -0
  244. package/dist/components/slider/slider.d.ts +38 -0
  245. package/dist/components/slider/slider.js +68 -0
  246. package/dist/components/slider/slider.styles.d.ts +56 -0
  247. package/dist/components/slider/slider.styles.js +23 -0
  248. package/dist/components/spinner/index.d.ts +3 -0
  249. package/dist/components/spinner/spinner.d.ts +9 -0
  250. package/dist/components/spinner/spinner.js +36 -0
  251. package/dist/components/spinner/spinner.styles.d.ts +53 -0
  252. package/dist/components/spinner/spinner.styles.js +18 -0
  253. package/dist/components/stack/index.d.ts +2 -0
  254. package/dist/components/stack/stack.d.ts +109 -0
  255. package/dist/components/stack/stack.js +62 -0
  256. package/dist/components/stat-card/index.d.ts +3 -0
  257. package/dist/components/stat-card/stat-card.d.ts +22 -0
  258. package/dist/components/stat-card/stat-card.js +82 -0
  259. package/dist/components/stat-card/stat-card.styles.d.ts +83 -0
  260. package/dist/components/stat-card/stat-card.styles.js +16 -0
  261. package/dist/components/stepper/index.d.ts +3 -0
  262. package/dist/components/stepper/stepper.d.ts +20 -0
  263. package/dist/components/stepper/stepper.js +100 -0
  264. package/dist/components/stepper/stepper.styles.d.ts +170 -0
  265. package/dist/components/stepper/stepper.styles.js +67 -0
  266. package/dist/components/switch/index.d.ts +2 -0
  267. package/dist/components/switch/switch.d.ts +51 -0
  268. package/dist/components/switch/switch.js +43 -0
  269. package/dist/components/table/index.d.ts +2 -0
  270. package/dist/components/table/table.d.ts +78 -0
  271. package/dist/components/table/table.js +82 -0
  272. package/dist/components/tabs/index.d.ts +2 -0
  273. package/dist/components/tabs/tabs.d.ts +73 -0
  274. package/dist/components/tabs/tabs.js +103 -0
  275. package/dist/components/tag-input/index.d.ts +3 -0
  276. package/dist/components/tag-input/tag-input.d.ts +30 -0
  277. package/dist/components/tag-input/tag-input.js +149 -0
  278. package/dist/components/tag-input/tag-input.styles.d.ts +71 -0
  279. package/dist/components/tag-input/tag-input.styles.js +29 -0
  280. package/dist/components/text/index.d.ts +3 -0
  281. package/dist/components/text/text.d.ts +9 -0
  282. package/dist/components/text/text.js +25 -0
  283. package/dist/components/text/text.styles.d.ts +188 -0
  284. package/dist/components/text/text.styles.js +36 -0
  285. package/dist/components/textarea/index.d.ts +2 -0
  286. package/dist/components/textarea/textarea.d.ts +29 -0
  287. package/dist/components/textarea/textarea.js +23 -0
  288. package/dist/components/timeline/index.d.ts +3 -0
  289. package/dist/components/timeline/timeline.d.ts +28 -0
  290. package/dist/components/timeline/timeline.js +61 -0
  291. package/dist/components/timeline/timeline.styles.d.ts +110 -0
  292. package/dist/components/timeline/timeline.styles.js +30 -0
  293. package/dist/components/toast/index.d.ts +2 -0
  294. package/dist/components/toast/toast.d.ts +119 -0
  295. package/dist/components/toast/toast.js +75 -0
  296. package/dist/components/toggle/index.d.ts +3 -0
  297. package/dist/components/toggle/toggle.d.ts +20 -0
  298. package/dist/components/toggle/toggle.js +58 -0
  299. package/dist/components/toggle/toggle.styles.d.ts +80 -0
  300. package/dist/components/toggle/toggle.styles.js +34 -0
  301. package/dist/components/tooltip/index.d.ts +2 -0
  302. package/dist/components/tooltip/tooltip.d.ts +39 -0
  303. package/dist/components/tooltip/tooltip.js +29 -0
  304. package/dist/components/tree-view/index.d.ts +3 -0
  305. package/dist/components/tree-view/tree-view.d.ts +31 -0
  306. package/dist/components/tree-view/tree-view.js +192 -0
  307. package/dist/components/tree-view/tree-view.styles.d.ts +59 -0
  308. package/dist/components/tree-view/tree-view.styles.js +32 -0
  309. package/dist/components/visually-hidden/index.d.ts +2 -0
  310. package/dist/components/visually-hidden/visually-hidden.d.ts +10 -0
  311. package/dist/components/visually-hidden/visually-hidden.js +16 -0
  312. package/dist/data-table.d.ts +3 -110
  313. package/dist/data-table.js +2 -224
  314. package/dist/form.d.ts +2 -86
  315. package/dist/form.js +1 -108
  316. package/dist/hooks/index.d.ts +5 -0
  317. package/dist/hooks/use-component-config.d.ts +13 -0
  318. package/dist/hooks/use-component-config.js +22 -0
  319. package/dist/hooks/use-controllable-state.d.ts +9 -0
  320. package/dist/hooks/use-controllable-state.js +18 -0
  321. package/dist/hooks/use-media-query.d.ts +4 -0
  322. package/dist/hooks/use-media-query.js +13 -0
  323. package/dist/hooks/use-scrolled.d.ts +4 -0
  324. package/dist/hooks/use-scrolled.js +17 -0
  325. package/dist/index.d.ts +223 -6856
  326. package/dist/index.js +148 -6791
  327. package/dist/internal/dev.js +12 -0
  328. package/dist/internal/icons.js +91 -0
  329. package/dist/motion/active-indicator.d.ts +12 -0
  330. package/dist/motion/active-indicator.js +26 -0
  331. package/dist/motion/animated-number.d.ts +21 -0
  332. package/dist/motion/animated-number.js +88 -0
  333. package/dist/motion/features.js +10 -0
  334. package/dist/motion/index.d.ts +10 -0
  335. package/dist/motion/index.js +10 -0
  336. package/dist/motion/motion-root.js +48 -0
  337. package/dist/motion/page-transition.d.ts +16 -0
  338. package/dist/motion/page-transition.js +23 -0
  339. package/dist/motion/presence-list.js +46 -0
  340. package/dist/motion/presence.d.ts +11 -0
  341. package/dist/motion/presence.js +17 -0
  342. package/dist/motion/reveal.d.ts +18 -0
  343. package/dist/motion/reveal.js +37 -0
  344. package/dist/motion/stagger.d.ts +29 -0
  345. package/dist/motion/stagger.js +52 -0
  346. package/dist/motion/use-motion-settings.d.ts +25 -0
  347. package/dist/motion/use-motion-settings.js +47 -0
  348. package/dist/motion/use-reveal.d.ts +11 -0
  349. package/dist/motion/use-reveal.js +41 -0
  350. package/dist/patterns/app-shell/app-shell-context.d.ts +14 -0
  351. package/dist/patterns/app-shell/app-shell-context.js +16 -0
  352. package/dist/patterns/app-shell/app-shell.d.ts +21 -0
  353. package/dist/patterns/app-shell/app-shell.js +82 -0
  354. package/dist/patterns/app-shell/app-shell.styles.d.ts +302 -0
  355. package/dist/patterns/app-shell/app-shell.styles.js +106 -0
  356. package/dist/patterns/app-shell/index.d.ts +7 -0
  357. package/dist/patterns/app-shell/navbar.d.ts +29 -0
  358. package/dist/patterns/app-shell/navbar.js +116 -0
  359. package/dist/patterns/app-shell/page-header.d.ts +12 -0
  360. package/dist/patterns/app-shell/page-header.js +38 -0
  361. package/dist/patterns/app-shell/sidebar.d.ts +31 -0
  362. package/dist/patterns/app-shell/sidebar.js +141 -0
  363. package/dist/patterns/async/async.d.ts +40 -0
  364. package/dist/patterns/async/async.js +61 -0
  365. package/dist/patterns/async/index.d.ts +3 -0
  366. package/dist/patterns/async/states.d.ts +68 -0
  367. package/dist/patterns/async/states.js +116 -0
  368. package/dist/patterns/chart/cartesian.d.ts +128 -0
  369. package/dist/patterns/chart/cartesian.js +552 -0
  370. package/dist/patterns/chart/chart-card.d.ts +39 -0
  371. package/dist/patterns/chart/chart-card.js +103 -0
  372. package/dist/patterns/chart/chart-parts.d.ts +53 -0
  373. package/dist/patterns/chart/chart-parts.js +282 -0
  374. package/dist/patterns/chart/chart.styles.d.ts +200 -0
  375. package/dist/patterns/chart/chart.styles.js +43 -0
  376. package/dist/patterns/chart/export.d.ts +45 -0
  377. package/dist/patterns/chart/export.js +293 -0
  378. package/dist/patterns/chart/funnel.d.ts +23 -0
  379. package/dist/patterns/chart/funnel.js +129 -0
  380. package/dist/patterns/chart/heatmap.d.ts +37 -0
  381. package/dist/patterns/chart/heatmap.js +258 -0
  382. package/dist/patterns/chart/icons.js +39 -0
  383. package/dist/patterns/chart/pie.d.ts +36 -0
  384. package/dist/patterns/chart/pie.js +120 -0
  385. package/dist/patterns/chart/radial.d.ts +75 -0
  386. package/dist/patterns/chart/radial.js +282 -0
  387. package/dist/patterns/chart/sankey.d.ts +29 -0
  388. package/dist/patterns/chart/sankey.js +136 -0
  389. package/dist/patterns/chart/scatter.d.ts +42 -0
  390. package/dist/patterns/chart/scatter.js +203 -0
  391. package/dist/patterns/chart/sparkline.d.ts +20 -0
  392. package/dist/patterns/chart/sparkline.js +102 -0
  393. package/dist/patterns/chart/treemap.d.ts +25 -0
  394. package/dist/patterns/chart/treemap.js +128 -0
  395. package/dist/patterns/chart/use-element-width.js +23 -0
  396. package/dist/patterns/data-table/data-table.d.ts +109 -0
  397. package/dist/patterns/data-table/data-table.js +233 -0
  398. package/dist/patterns/form/form.d.ts +89 -0
  399. package/dist/patterns/form/form.js +111 -0
  400. package/dist/{color-mode-script-KdwItKN2.d.ts → provider/color-mode-script.d.ts} +4 -5
  401. package/dist/{color-mode-script-Bf7LYkOj.js → provider/color-mode-script.js} +1 -1
  402. package/dist/provider/color-mode.d.ts +24 -0
  403. package/dist/provider/color-mode.js +87 -0
  404. package/dist/{glyph-context-DxGJrdvr.d.ts → provider/glyph-context.d.ts} +13 -12
  405. package/dist/provider/glyph-context.js +28 -0
  406. package/dist/provider/glyph-provider.d.ts +37 -0
  407. package/dist/provider/glyph-provider.js +48 -0
  408. package/dist/provider/index.d.ts +6 -0
  409. package/dist/provider/theme-scope.d.ts +12 -0
  410. package/dist/provider/theme-scope.js +42 -0
  411. package/dist/provider/theme-style.js +15 -0
  412. package/dist/react-router.d.ts +1 -1
  413. package/dist/register.d.ts +57 -0
  414. package/dist/themes.d.ts +22 -0
  415. package/dist/themes.js +49 -0
  416. package/dist/utils/cn.d.ts +6 -0
  417. package/dist/utils/cn.js +12 -0
  418. package/dist/utils/compose-refs.js +11 -0
  419. package/dist/{registry-BGSJoiLq.d.ts → utils/registry.d.ts} +2 -3
  420. package/dist/utils/styles.js +20 -0
  421. package/dist/{tv-DuMh7UH2.d.ts → utils/tv.d.ts} +2 -2
  422. package/dist/utils/tv.js +8 -0
  423. package/dist/utils/tw-merge-config.js +13 -0
  424. package/dist/vite.d.ts +1 -1
  425. package/dist/vite.js +1 -1
  426. package/package.json +3 -2
  427. package/src/components/accordion/accordion.styles.ts +1 -1
  428. package/src/components/alert/alert.styles.ts +1 -1
  429. package/src/components/alert-dialog/alert-dialog.styles.ts +5 -4
  430. package/src/components/alert-dialog/confirm-dialog.tsx +42 -0
  431. package/src/components/alert-dialog/confirm.tsx +12 -31
  432. package/src/components/aspect-ratio/aspect-ratio.tsx +1 -1
  433. package/src/components/avatar/avatar.styles.ts +1 -1
  434. package/src/components/badge/badge.styles.ts +1 -1
  435. package/src/components/banner/banner.styles.ts +1 -1
  436. package/src/components/blockquote/blockquote.tsx +1 -1
  437. package/src/components/breadcrumb/breadcrumb.styles.ts +1 -1
  438. package/src/components/button/button.styles.ts +4 -2
  439. package/src/components/calendar/calendar.styles.ts +1 -1
  440. package/src/components/card/card.styles.ts +1 -1
  441. package/src/components/carousel/carousel.styles.ts +1 -1
  442. package/src/components/checkbox/checkbox.tsx +20 -5
  443. package/src/components/code/code.styles.ts +2 -2
  444. package/src/components/collapsible/collapsible.tsx +1 -1
  445. package/src/components/combobox/combobox.styles.ts +5 -2
  446. package/src/components/command-menu/command-menu.styles.ts +6 -4
  447. package/src/components/container/container.tsx +1 -1
  448. package/src/components/context-menu/context-menu.styles.ts +4 -2
  449. package/src/components/copy-button/copy-button.tsx +1 -1
  450. package/src/components/date-picker/date-picker.styles.ts +2 -2
  451. package/src/components/description-list/description-list.styles.ts +1 -1
  452. package/src/components/dialog/dialog.styles.ts +11 -4
  453. package/src/components/dropdown-menu/dropdown-menu.styles.ts +3 -3
  454. package/src/components/eyebrow/eyebrow.styles.ts +1 -1
  455. package/src/components/field/field.styles.ts +1 -1
  456. package/src/components/file-upload/file-upload.styles.ts +1 -1
  457. package/src/components/file-upload/file-upload.tsx +51 -48
  458. package/src/components/grid/grid.tsx +1 -1
  459. package/src/components/heading/heading.styles.ts +1 -1
  460. package/src/components/hover-card/hover-card.tsx +5 -2
  461. package/src/components/input/input.styles.ts +1 -1
  462. package/src/components/input-otp/input-otp.styles.ts +1 -1
  463. package/src/components/kbd/kbd.tsx +1 -1
  464. package/src/components/label/label.tsx +1 -1
  465. package/src/components/link/link.styles.ts +1 -1
  466. package/src/components/modal/modal.styles.ts +1 -1
  467. package/src/components/navigation-menu/navigation-menu.styles.ts +2 -2
  468. package/src/components/number-input/number-input.styles.ts +1 -1
  469. package/src/components/pagination/pagination.styles.ts +6 -4
  470. package/src/components/pagination/pagination.tsx +14 -1
  471. package/src/components/password-input/password-input.styles.ts +1 -1
  472. package/src/components/popover/popover.tsx +1 -1
  473. package/src/components/progress/progress.styles.ts +2 -2
  474. package/src/components/prose/prose.tsx +1 -1
  475. package/src/components/radio-group/radio-group.styles.ts +1 -1
  476. package/src/components/resizable/resizable.styles.ts +1 -1
  477. package/src/components/scroll-area/scroll-area.tsx +1 -1
  478. package/src/components/section/section.tsx +1 -1
  479. package/src/components/segmented-control/segmented-control.tsx +24 -8
  480. package/src/components/select/select.tsx +2 -2
  481. package/src/components/separator/separator.tsx +1 -1
  482. package/src/components/sheet/sheet.styles.ts +1 -1
  483. package/src/components/skeleton/skeleton.tsx +1 -1
  484. package/src/components/slider/slider.styles.ts +1 -1
  485. package/src/components/spinner/spinner.styles.ts +1 -1
  486. package/src/components/stack/stack.tsx +1 -1
  487. package/src/components/stat-card/stat-card.styles.ts +1 -1
  488. package/src/components/stepper/stepper.styles.ts +1 -1
  489. package/src/components/switch/switch.tsx +2 -2
  490. package/src/components/table/table.tsx +1 -1
  491. package/src/components/tabs/tabs.tsx +46 -15
  492. package/src/components/tag-input/tag-input.styles.ts +1 -1
  493. package/src/components/tag-input/tag-input.tsx +27 -18
  494. package/src/components/text/text.styles.ts +1 -1
  495. package/src/components/textarea/textarea.tsx +1 -1
  496. package/src/components/timeline/timeline.styles.ts +1 -1
  497. package/src/components/toast/toast.tsx +1 -1
  498. package/src/components/toggle/toggle.styles.ts +1 -1
  499. package/src/components/tooltip/tooltip.tsx +6 -3
  500. package/src/components/tree-view/tree-view.styles.ts +1 -1
  501. package/src/index.ts +3 -0
  502. package/src/motion/active-indicator.tsx +26 -0
  503. package/src/motion/animated-number.tsx +113 -0
  504. package/src/motion/features.ts +7 -0
  505. package/src/motion/index.ts +9 -0
  506. package/src/motion/motion-root.tsx +46 -0
  507. package/src/motion/page-transition.tsx +30 -0
  508. package/src/motion/presence-list.tsx +42 -0
  509. package/src/motion/presence.tsx +13 -0
  510. package/src/motion/reveal.tsx +50 -0
  511. package/src/motion/stagger.tsx +81 -0
  512. package/src/motion/use-motion-settings.ts +52 -0
  513. package/src/motion/use-reveal.ts +54 -0
  514. package/src/patterns/app-shell/app-shell.styles.ts +18 -11
  515. package/src/patterns/app-shell/sidebar.tsx +28 -7
  516. package/src/patterns/async/states.tsx +1 -1
  517. package/src/patterns/chart/cartesian.tsx +755 -0
  518. package/src/patterns/chart/chart-card.tsx +148 -0
  519. package/src/patterns/chart/chart-parts.tsx +323 -58
  520. package/src/patterns/chart/chart.styles.ts +29 -3
  521. package/src/patterns/chart/export.ts +334 -0
  522. package/src/patterns/chart/funnel.tsx +171 -0
  523. package/src/patterns/chart/heatmap.tsx +339 -0
  524. package/src/patterns/chart/icons.tsx +44 -0
  525. package/src/patterns/chart/index.ts +52 -7
  526. package/src/patterns/chart/pie.tsx +169 -0
  527. package/src/patterns/chart/radial.tsx +361 -0
  528. package/src/patterns/chart/sankey.tsx +197 -0
  529. package/src/patterns/chart/scatter.tsx +254 -0
  530. package/src/patterns/chart/sparkline.tsx +111 -0
  531. package/src/patterns/chart/test-utils.tsx +35 -0
  532. package/src/patterns/chart/treemap.tsx +198 -0
  533. package/src/patterns/chart/use-element-width.ts +20 -0
  534. package/src/patterns/data-table/data-table.tsx +1 -1
  535. package/src/patterns/form/form.tsx +1 -1
  536. package/src/provider/glyph-context.ts +3 -1
  537. package/src/provider/glyph-provider.tsx +31 -12
  538. package/src/provider/theme-scope.tsx +14 -9
  539. package/src/themes.ts +3 -3
  540. package/src/utils/styles.ts +17 -3
  541. package/styles.css +122 -3
  542. package/dist/field-context-7I-cWvvS.js +0 -267
  543. package/dist/index-Bi7rZ6ba.d.ts +0 -244
  544. package/dist/states-IvhjBgna.js +0 -288
  545. package/dist/tv-DLbT66dC.js +0 -70
  546. package/src/patterns/chart/chart.tsx +0 -386
@@ -1,13 +1,19 @@
1
- import type { Theme } from '@glyphui/tokens'
1
+ import type { MotionLevel, Theme } from '@glyphui/tokens'
2
2
  import { Tooltip } from 'radix-ui'
3
- import { type ReactNode, useMemo } from 'react'
3
+ import { lazy, type ReactNode, Suspense, useMemo } from 'react'
4
4
  import { ConfirmProvider } from '../components/alert-dialog/confirm'
5
- import { Toaster, type ToasterProps } from '../components/toast/toast'
5
+ import type { ToasterProps } from '../components/toast/toast'
6
+ import { MotionRootAttribute, MotionScope } from '../motion/motion-root'
6
7
  import { glyph } from '../themes'
7
8
  import { type ColorModePreference, ColorModeProvider } from './color-mode'
8
9
  import { GlyphContext, type GlyphRouter, type LinkComponent, neverActive } from './glyph-context'
9
10
  import { ThemeStyle } from './theme-style'
10
11
 
12
+ // Only apps that turn on `toaster` load the toast UI.
13
+ const Toaster = lazy(() =>
14
+ import('../components/toast/toast').then((m) => ({ default: m.Toaster })),
15
+ )
16
+
11
17
  export interface GlyphProviderProps {
12
18
  children: ReactNode
13
19
  /** The theme for the whole app. Defaults to the `glyph` preset. */
@@ -29,6 +35,11 @@ export interface GlyphProviderProps {
29
35
  * Toaster props (e.g. `{ position: 'top-center' }`). Off by default.
30
36
  */
31
37
  toaster?: boolean | ToasterProps
38
+ /**
39
+ * Overrides the theme's motion level everywhere, e.g. `"none"` in tests or for a user
40
+ * setting. Visitors who ask for reduced motion never get animation either way.
41
+ */
42
+ motion?: MotionLevel
32
43
  }
33
44
 
34
45
  /** Provides the theme, color mode, tooltips, `useConfirm()` and (optionally) toasts. Render once at the root. */
@@ -40,12 +51,13 @@ export function GlyphProvider({
40
51
  router,
41
52
  linkComponent,
42
53
  toaster = false,
54
+ motion,
43
55
  }: GlyphProviderProps) {
44
56
  const Link = router?.Link ?? linkComponent ?? 'a'
45
57
  const useIsActive = router?.useIsActive ?? neverActive
46
58
  const value = useMemo(
47
- () => ({ theme, linkComponent: Link, useIsActive }),
48
- [theme, Link, useIsActive],
59
+ () => ({ theme, linkComponent: Link, useIsActive, motion }),
60
+ [theme, Link, useIsActive, motion],
49
61
  )
50
62
  return (
51
63
  <ColorModeProvider
@@ -54,13 +66,20 @@ export function GlyphProvider({
54
66
  >
55
67
  <GlyphContext.Provider value={value}>
56
68
  <ThemeStyle theme={theme} />
57
- <Tooltip.Provider delayDuration={300}>
58
- {/* useConfirm() works anywhere without setup; the dialog only mounts while open. */}
59
- <ConfirmProvider>
60
- {children}
61
- {toaster && <Toaster {...(toaster === true ? {} : toaster)} />}
62
- </ConfirmProvider>
63
- </Tooltip.Provider>
69
+ <MotionRootAttribute />
70
+ <MotionScope>
71
+ <Tooltip.Provider delayDuration={300}>
72
+ {/* useConfirm() works anywhere without setup; the dialog only mounts while open. */}
73
+ <ConfirmProvider>
74
+ {children}
75
+ {toaster && (
76
+ <Suspense fallback={null}>
77
+ <Toaster {...(toaster === true ? {} : toaster)} />
78
+ </Suspense>
79
+ )}
80
+ </ConfirmProvider>
81
+ </Tooltip.Provider>
82
+ </MotionScope>
64
83
  </GlyphContext.Provider>
65
84
  </ColorModeProvider>
66
85
  )
@@ -1,6 +1,7 @@
1
1
  import { type ColorMode, scopeSelector, type Theme } from '@glyphui/tokens'
2
2
  import { Slot } from 'radix-ui'
3
3
  import { type ComponentProps, useContext, useMemo } from 'react'
4
+ import { ScopedMotionConfig } from '../motion/motion-root'
4
5
  import { cn } from '../utils/cn'
5
6
  import { GlyphContext, neverActive } from './glyph-context'
6
7
  import { ThemeStyle } from './theme-style'
@@ -20,21 +21,25 @@ export function ThemeScope({ theme, mode, asChild, children, ...props }: ThemeSc
20
21
  theme,
21
22
  linkComponent: parent?.linkComponent ?? 'a',
22
23
  useIsActive: parent?.useIsActive ?? neverActive,
24
+ motion: parent?.motion,
23
25
  }),
24
- [theme, parent?.linkComponent, parent?.useIsActive],
26
+ [theme, parent?.linkComponent, parent?.useIsActive, parent?.motion],
25
27
  )
26
28
  const Comp = asChild ? Slot.Root : 'div'
27
29
  return (
28
30
  <GlyphContext.Provider value={value}>
29
31
  <ThemeStyle theme={theme} selector={scopeSelector(theme)} />
30
- <Comp
31
- data-glyph-theme={theme.name}
32
- data-mode={mode}
33
- {...props}
34
- className={cn('bg-background font-sans text-foreground', props.className)}
35
- >
36
- {children}
37
- </Comp>
32
+ <ScopedMotionConfig>
33
+ <Comp
34
+ data-glyph-theme={theme.name}
35
+ data-mode={mode}
36
+ data-motion={parent?.motion ?? theme.motion.level ?? 'subtle'}
37
+ {...props}
38
+ className={cn('bg-background font-sans text-foreground', props.className)}
39
+ >
40
+ {children}
41
+ </Comp>
42
+ </ScopedMotionConfig>
38
43
  </GlyphContext.Provider>
39
44
  )
40
45
  }
package/src/themes.ts CHANGED
@@ -10,7 +10,7 @@ import { defineTheme, presets as tokenPresets } from '@glyphui/tokens'
10
10
  export const glyph = tokenPresets.glyph
11
11
 
12
12
  /** Zero radius, heavy borders, hard offset shadows, loud color. */
13
- export const brutalist = defineTheme({
13
+ export const brutalist = /* @__PURE__ */ defineTheme({
14
14
  name: 'brutalist',
15
15
  extends: tokenPresets.brutalist,
16
16
  components: {
@@ -27,7 +27,7 @@ export const brutalist = defineTheme({
27
27
  })
28
28
 
29
29
  /** Serif display type, warm paper neutrals, deep green ink, hairlines instead of shadows. */
30
- export const editorial = defineTheme({
30
+ export const editorial = /* @__PURE__ */ defineTheme({
31
31
  name: 'editorial',
32
32
  extends: tokenPresets.editorial,
33
33
  components: {
@@ -38,7 +38,7 @@ export const editorial = defineTheme({
38
38
  })
39
39
 
40
40
  /** Pill shapes, lavender and mint, chunky rounded type, springy motion. */
41
- export const playful = defineTheme({
41
+ export const playful = /* @__PURE__ */ defineTheme({
42
42
  name: 'playful',
43
43
  extends: tokenPresets.playful,
44
44
  components: {
@@ -6,8 +6,22 @@ export const focusRing =
6
6
  export const themedBorder = 'border-(length:--glyph-border-width)'
7
7
 
8
8
  export const transition =
9
- 'transition-[color,background-color,border-color,box-shadow,transform,opacity] duration-(--glyph-duration-base) ease-standard'
9
+ 'transition-[color,background-color,border-color,box-shadow,transform,translate,scale,opacity] duration-(--glyph-duration-base) ease-standard'
10
+
11
+ /**
12
+ * Enter and exit for anything Radix positions next to a trigger: springs out of the trigger
13
+ * (pair with the primitive's transform-origin class) and leaves quickly. Distance and scale
14
+ * follow the motion level; the side moves it toward the trigger.
15
+ */
16
+ export const popoverMotion =
17
+ 'animate-pop-in data-[state=closed]:animate-pop-out data-[side=bottom]:[--glyph-motion-y:calc(var(--glyph-motion-distance)*-1)] data-[side=top]:[--glyph-motion-y:var(--glyph-motion-distance)] data-[side=left]:[--glyph-motion-x:var(--glyph-motion-distance)] data-[side=right]:[--glyph-motion-x:calc(var(--glyph-motion-distance)*-1)]'
10
18
 
11
19
  /** Popover surfaces: Select, Tooltip-like menus. */
12
- export const popover =
13
- 'z-50 overflow-hidden rounded-[min(var(--radius-md),var(--radius-lg))] border-(length:--glyph-border-width) border-border bg-raised text-foreground shadow-lg animate-pop-in'
20
+ export const popover = `z-50 overflow-hidden rounded-[min(var(--radius-md),var(--radius-lg))] border-(length:--glyph-border-width) border-border bg-raised text-foreground shadow-lg ${popoverMotion}`
21
+
22
+ /** Dimmed backdrop behind dialogs and sheets. */
23
+ export const overlayMotion =
24
+ 'data-[state=open]:animate-fade-in data-[state=closed]:animate-fade-out'
25
+
26
+ /** Centered dialogs: rise and scale in on the theme's spring, settle out quickly. */
27
+ export const dialogMotion = 'animate-dialog-in data-[state=closed]:animate-dialog-out'
package/styles.css CHANGED
@@ -13,6 +13,11 @@
13
13
  @source "./src";
14
14
 
15
15
  @custom-variant dark (&:where([data-mode="dark"], [data-mode="dark"] *));
16
+ /* Motion level from the theme or GlyphProvider's `motion` prop, set as data-motion on <html>. */
17
+ @custom-variant motion-none (&:where([data-motion="none"], [data-motion="none"] *));
18
+ @custom-variant motion-expressive (
19
+ &:where([data-motion="expressive"], [data-motion="expressive"] *)
20
+ );
16
21
 
17
22
  @theme inline {
18
23
  --color-background: var(--glyph-background);
@@ -107,8 +112,19 @@
107
112
 
108
113
  --ease-standard: var(--glyph-ease-standard);
109
114
  --ease-emphasized: var(--glyph-ease-emphasized);
115
+ /* The theme's spring as a CSS linear() curve. Pair with duration-(--glyph-duration-spring). */
116
+ --ease-spring: var(--glyph-ease-spring);
110
117
 
111
- --animate-pop-in: glyph-pop-in var(--glyph-duration-fast) var(--glyph-ease-standard);
118
+ /* Menus, popovers, tooltips: scale and fade from the trigger, on the theme's spring. */
119
+ --animate-pop-in: glyph-pop-in var(--glyph-duration-spring) var(--glyph-ease-spring) both;
120
+ --animate-pop-out: glyph-pop-out var(--glyph-duration-fast) var(--glyph-ease-standard) both;
121
+ /* Dialogs and the command menu: rise and scale in, settle out quickly. */
122
+ --animate-dialog-in: glyph-dialog-in var(--glyph-duration-spring) var(--glyph-ease-spring) both;
123
+ --animate-dialog-out: glyph-dialog-out var(--glyph-duration-fast) var(--glyph-ease-standard) both;
124
+ /* Route changes (PageTransition) and newly inserted content. */
125
+ --animate-page-in: glyph-page-in var(--glyph-duration-slow) var(--glyph-ease-standard) both;
126
+ /* Strokes drawn on, e.g. the Checkbox tick. Set --glyph-draw-length to the path length. */
127
+ --animate-draw: glyph-draw var(--glyph-duration-base) var(--glyph-ease-standard) both;
112
128
  --animate-fade-in: glyph-fade-in var(--glyph-duration-base) var(--glyph-ease-standard);
113
129
  --animate-slide-in-left: glyph-slide-in-left var(--glyph-duration-slow) var(--glyph-ease-standard);
114
130
  --animate-slide-in-top: glyph-slide-in-top var(--glyph-duration-slow) var(--glyph-ease-standard);
@@ -130,10 +146,72 @@
130
146
  --animate-collapse-up: glyph-collapse-up var(--glyph-duration-base) var(--glyph-ease-standard);
131
147
  }
132
148
 
149
+ /*
150
+ * Motion levels. `subtle` (the default) keeps distances short; `expressive` travels further
151
+ * and scales more; `none` collapses every Glyph duration so things appear instantly.
152
+ * Popovers set --glyph-motion-x/y from their side so they grow out of the trigger.
153
+ */
154
+ :root,
155
+ [data-motion="subtle"] {
156
+ --glyph-motion-scale: 0.96;
157
+ --glyph-motion-scale-out: 0.98;
158
+ --glyph-motion-distance: 4px;
159
+ --glyph-motion-rise: 8px;
160
+ }
161
+ [data-motion="expressive"] {
162
+ --glyph-motion-scale: 0.86;
163
+ --glyph-motion-scale-out: 0.94;
164
+ --glyph-motion-distance: 10px;
165
+ --glyph-motion-rise: 28px;
166
+ }
167
+ [data-motion="none"],
168
+ [data-motion="none"] * {
169
+ --glyph-duration-fast: 1ms !important;
170
+ --glyph-duration-base: 1ms !important;
171
+ --glyph-duration-slow: 1ms !important;
172
+ --glyph-duration-spring: 1ms !important;
173
+ }
174
+
133
175
  @keyframes glyph-pop-in {
134
176
  from {
135
177
  opacity: 0;
136
- transform: translateY(-2px) scale(0.98);
178
+ transform: translate(var(--glyph-motion-x, 0), var(--glyph-motion-y, 0))
179
+ scale(var(--glyph-motion-scale));
180
+ }
181
+ }
182
+ @keyframes glyph-pop-out {
183
+ to {
184
+ opacity: 0;
185
+ transform: translate(var(--glyph-motion-x, 0), var(--glyph-motion-y, 0))
186
+ scale(var(--glyph-motion-scale-out));
187
+ }
188
+ }
189
+ @keyframes glyph-dialog-in {
190
+ from {
191
+ opacity: 0;
192
+ transform: translateY(var(--glyph-motion-rise)) scale(var(--glyph-motion-scale));
193
+ }
194
+ }
195
+ @keyframes glyph-dialog-out {
196
+ to {
197
+ opacity: 0;
198
+ transform: scale(var(--glyph-motion-scale-out));
199
+ }
200
+ }
201
+ @keyframes glyph-page-in {
202
+ from {
203
+ opacity: 0;
204
+ transform: translateY(var(--glyph-motion-distance));
205
+ }
206
+ }
207
+ @keyframes glyph-draw {
208
+ from {
209
+ stroke-dasharray: var(--glyph-draw-length, 1);
210
+ stroke-dashoffset: var(--glyph-draw-length, 1);
211
+ }
212
+ to {
213
+ stroke-dasharray: var(--glyph-draw-length, 1);
214
+ stroke-dashoffset: 0;
137
215
  }
138
216
  }
139
217
  @keyframes glyph-fade-in {
@@ -215,6 +293,46 @@
215
293
  }
216
294
  }
217
295
 
296
+ /*
297
+ * Reveal and Stagger. The hidden state is set by JavaScript just before the element comes
298
+ * into view, so content without JavaScript, or with motion off, is never hidden. Revealing
299
+ * plays an animation with backwards fill only: once it ends, the element's own styles
300
+ * (hover transforms, transitions) apply untouched.
301
+ */
302
+ @layer components {
303
+ :root,
304
+ [data-motion="subtle"] {
305
+ --glyph-stagger-step: 55ms;
306
+ }
307
+ [data-motion="expressive"] {
308
+ --glyph-stagger-step: 90ms;
309
+ }
310
+ [data-reveal="hidden"],
311
+ [data-stagger="hidden"] [data-stagger-item] {
312
+ opacity: 0;
313
+ }
314
+ [data-reveal="shown"],
315
+ [data-stagger="shown"] [data-stagger-item] {
316
+ animation: glyph-reveal var(--glyph-duration-spring) var(--glyph-ease-spring) backwards;
317
+ animation-delay: var(--glyph-reveal-delay, 0ms);
318
+ }
319
+ [data-stagger="shown"] [data-stagger-item] {
320
+ animation-delay: calc(
321
+ var(--glyph-stagger-delay, 0ms) +
322
+ var(--glyph-stagger-index, 0) *
323
+ var(--glyph-stagger-step)
324
+ );
325
+ }
326
+ }
327
+
328
+ @keyframes glyph-reveal {
329
+ from {
330
+ opacity: 0;
331
+ transform: translateY(var(--glyph-reveal-y, var(--glyph-motion-rise)))
332
+ scale(var(--glyph-reveal-scale, 1));
333
+ }
334
+ }
335
+
218
336
  @layer base {
219
337
  *,
220
338
  ::before,
@@ -254,8 +372,9 @@
254
372
  background-color: color-mix(in oklab, var(--color-primary) 30%, transparent);
255
373
  }
256
374
 
375
+ /* Loading spinners keep turning: they are essential feedback, not decoration. */
257
376
  @media (prefers-reduced-motion: reduce) {
258
- *,
377
+ *:not([data-slot="spinner"], [data-slot="spinner"] *),
259
378
  ::before,
260
379
  ::after {
261
380
  animation-duration: 0.01ms !important;
@@ -1,267 +0,0 @@
1
- "use client";
2
- import { a as themedBorder, o as transition, r as focusRing, s as useComponentConfig, t as tv } from "./tv-DLbT66dC.js";
3
- import { Slot } from "radix-ui";
4
- import { Fragment, createContext, useContext } from "react";
5
- import { jsx, jsxs } from "react/jsx-runtime";
6
- //#region src/internal/icons.tsx
7
- function Icon({ children, ...props }) {
8
- return /* @__PURE__ */ jsx("svg", {
9
- xmlns: "http://www.w3.org/2000/svg",
10
- width: "16",
11
- height: "16",
12
- viewBox: "0 0 24 24",
13
- fill: "none",
14
- stroke: "currentColor",
15
- strokeWidth: "2",
16
- strokeLinecap: "round",
17
- strokeLinejoin: "round",
18
- "aria-hidden": "true",
19
- ...props,
20
- children
21
- });
22
- }
23
- const CheckIcon = (p) => /* @__PURE__ */ jsx(Icon, {
24
- ...p,
25
- children: /* @__PURE__ */ jsx("path", { d: "M20 6 9 17l-5-5" })
26
- });
27
- const MinusIcon = (p) => /* @__PURE__ */ jsx(Icon, {
28
- ...p,
29
- children: /* @__PURE__ */ jsx("path", { d: "M5 12h14" })
30
- });
31
- const ChevronDownIcon = (p) => /* @__PURE__ */ jsx(Icon, {
32
- ...p,
33
- children: /* @__PURE__ */ jsx("path", { d: "m6 9 6 6 6-6" })
34
- });
35
- const ChevronLeftIcon = (p) => /* @__PURE__ */ jsx(Icon, {
36
- ...p,
37
- children: /* @__PURE__ */ jsx("path", { d: "m15 18-6-6 6-6" })
38
- });
39
- const ChevronRightIcon = (p) => /* @__PURE__ */ jsx(Icon, {
40
- ...p,
41
- children: /* @__PURE__ */ jsx("path", { d: "m9 18 6-6-6-6" })
42
- });
43
- const ArrowUpIcon = (p) => /* @__PURE__ */ jsx(Icon, {
44
- ...p,
45
- children: /* @__PURE__ */ jsx("path", { d: "m5 12 7-7 7 7M12 19V5" })
46
- });
47
- const ArrowDownIcon = (p) => /* @__PURE__ */ jsx(Icon, {
48
- ...p,
49
- children: /* @__PURE__ */ jsx("path", { d: "M12 5v14M19 12l-7 7-7-7" })
50
- });
51
- const ChevronsUpDownIcon = (p) => /* @__PURE__ */ jsx(Icon, {
52
- ...p,
53
- children: /* @__PURE__ */ jsx("path", { d: "m7 15 5 5 5-5M7 9l5-5 5 5" })
54
- });
55
- const XIcon = (p) => /* @__PURE__ */ jsx(Icon, {
56
- ...p,
57
- children: /* @__PURE__ */ jsx("path", { d: "M18 6 6 18M6 6l12 12" })
58
- });
59
- const MenuIcon = (p) => /* @__PURE__ */ jsx(Icon, {
60
- ...p,
61
- children: /* @__PURE__ */ jsx("path", { d: "M4 6h16M4 12h16M4 18h16" })
62
- });
63
- const PanelLeftIcon = (p) => /* @__PURE__ */ jsxs(Icon, {
64
- ...p,
65
- children: [/* @__PURE__ */ jsx("rect", {
66
- width: "18",
67
- height: "18",
68
- x: "3",
69
- y: "3",
70
- rx: "2"
71
- }), /* @__PURE__ */ jsx("path", { d: "M9 3v18" })]
72
- });
73
- const SearchIcon = (p) => /* @__PURE__ */ jsxs(Icon, {
74
- ...p,
75
- children: [/* @__PURE__ */ jsx("circle", {
76
- cx: "11",
77
- cy: "11",
78
- r: "7"
79
- }), /* @__PURE__ */ jsx("path", { d: "m20 20-3.5-3.5" })]
80
- });
81
- const InboxIcon = (p) => /* @__PURE__ */ jsxs(Icon, {
82
- ...p,
83
- children: [/* @__PURE__ */ jsx("path", { d: "M22 12h-6l-2 3h-4l-2-3H2" }), /* @__PURE__ */ jsx("path", { d: "M5.45 5.11 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z" })]
84
- });
85
- const AlertIcon = (p) => /* @__PURE__ */ jsxs(Icon, {
86
- ...p,
87
- children: [/* @__PURE__ */ jsx("circle", {
88
- cx: "12",
89
- cy: "12",
90
- r: "10"
91
- }), /* @__PURE__ */ jsx("path", { d: "M12 8v4M12 16h.01" })]
92
- });
93
- //#endregion
94
- //#region src/components/spinner/spinner.styles.ts
95
- const spinnerStyles = tv({
96
- slots: {
97
- base: "inline-block shrink-0 animate-spin",
98
- track: "opacity-20",
99
- arc: ""
100
- },
101
- variants: { size: {
102
- sm: { base: "size-3.5" },
103
- md: { base: "size-4" },
104
- lg: { base: "size-6" }
105
- } },
106
- defaultVariants: { size: "md" }
107
- });
108
- //#endregion
109
- //#region src/components/spinner/spinner.tsx
110
- function Spinner(inProps) {
111
- const [props, slots] = useComponentConfig("Spinner", inProps);
112
- const { size, label, className, ...rest } = props;
113
- const s = spinnerStyles({ size });
114
- return /* @__PURE__ */ jsxs("svg", {
115
- "data-slot": "spinner",
116
- viewBox: "0 0 24 24",
117
- fill: "none",
118
- role: label ? "status" : void 0,
119
- "aria-label": label,
120
- "aria-hidden": label ? void 0 : true,
121
- className: s.base({ class: [slots.base, className] }),
122
- ...rest,
123
- children: [/* @__PURE__ */ jsx("circle", {
124
- className: s.track({ class: slots.track }),
125
- cx: "12",
126
- cy: "12",
127
- r: "9",
128
- stroke: "currentColor",
129
- strokeWidth: "3"
130
- }), /* @__PURE__ */ jsx("path", {
131
- className: s.arc({ class: slots.arc }),
132
- d: "M21 12a9 9 0 0 0-9-9",
133
- stroke: "currentColor",
134
- strokeWidth: "3",
135
- strokeLinecap: "round"
136
- })]
137
- });
138
- }
139
- //#endregion
140
- //#region src/components/button/button.styles.ts
141
- const buttonStyles = tv({
142
- slots: {
143
- base: [
144
- "relative inline-flex shrink-0 cursor-pointer select-none items-center justify-center gap-2 whitespace-nowrap",
145
- "rounded-md border-transparent font-medium",
146
- themedBorder,
147
- transition,
148
- focusRing,
149
- "disabled:pointer-events-none disabled:opacity-50 aria-busy:cursor-progress"
150
- ],
151
- icon: "inline-flex size-4 shrink-0 items-center justify-center [&>svg]:size-full"
152
- },
153
- variants: {
154
- variant: {
155
- primary: { base: "bg-primary text-primary-foreground shadow-sm hover:bg-primary/88" },
156
- secondary: { base: "bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/88" },
157
- outline: { base: "border-border bg-surface text-foreground shadow-xs hover:border-border-strong hover:bg-muted" },
158
- ghost: { base: "text-muted-foreground hover:bg-muted hover:text-foreground" },
159
- danger: { base: "bg-danger text-danger-foreground shadow-sm hover:bg-danger/88" },
160
- link: { base: "h-auto px-0 text-primary-text underline-offset-4 shadow-none hover:underline" }
161
- },
162
- size: {
163
- sm: {
164
- base: "h-(--glyph-control-sm) px-3 text-small",
165
- icon: "size-3.5"
166
- },
167
- md: { base: "h-(--glyph-control-md) px-4 text-small" },
168
- lg: {
169
- base: "h-(--glyph-control-lg) px-5 text-body",
170
- icon: "size-[1.125rem]"
171
- }
172
- },
173
- iconOnly: { true: { base: "px-0" } },
174
- fullWidth: { true: { base: "w-full" } }
175
- },
176
- compoundVariants: [
177
- {
178
- iconOnly: true,
179
- size: "sm",
180
- class: { base: "w-(--glyph-control-sm)" }
181
- },
182
- {
183
- iconOnly: true,
184
- size: "md",
185
- class: { base: "w-(--glyph-control-md)" }
186
- },
187
- {
188
- iconOnly: true,
189
- size: "lg",
190
- class: { base: "w-(--glyph-control-lg)" }
191
- }
192
- ],
193
- defaultVariants: {
194
- variant: "primary",
195
- size: "md"
196
- }
197
- });
198
- //#endregion
199
- //#region src/components/button/button.tsx
200
- function Button(inProps) {
201
- const [props, slots] = useComponentConfig("Button", inProps);
202
- const { variant, size, iconOnly, fullWidth, asChild = false, loading = false, leftIcon, rightIcon, disabled, type, className, children, ...rest } = props;
203
- const s = buttonStyles({
204
- variant,
205
- size,
206
- iconOnly,
207
- fullWidth
208
- });
209
- const Comp = asChild ? Slot.Root : "button";
210
- const icon = (node) => node ? /* @__PURE__ */ jsx("span", {
211
- "data-slot": "button-icon",
212
- className: s.icon({ class: slots.icon }),
213
- "aria-hidden": "true",
214
- children: node
215
- }) : null;
216
- return /* @__PURE__ */ jsx(Comp, {
217
- "data-slot": "button",
218
- "data-variant": variant ?? "primary",
219
- className: s.base({ class: [slots.base, className] }),
220
- "aria-busy": loading || void 0,
221
- ...!asChild && {
222
- type: type ?? "button",
223
- disabled: disabled || loading
224
- },
225
- ...rest,
226
- children: iconOnly && asChild ? children : iconOnly ? icon(loading ? /* @__PURE__ */ jsx(Spinner, { size: size === "lg" ? "md" : "sm" }) : children) : [
227
- /* @__PURE__ */ jsx(Fragment, { children: icon(loading ? /* @__PURE__ */ jsx(Spinner, { size: "sm" }) : leftIcon) }, "start"),
228
- /* @__PURE__ */ jsx(Slot.Slottable, { children }, "content"),
229
- /* @__PURE__ */ jsx(Fragment, { children: icon(rightIcon) }, "end")
230
- ]
231
- });
232
- }
233
- /** A square button holding one icon. Shares Button's variants and theme overrides. */
234
- function IconButton({ icon, variant = "ghost", ...props }) {
235
- return /* @__PURE__ */ jsx(Button, {
236
- variant,
237
- ...props,
238
- iconOnly: true,
239
- children: icon
240
- });
241
- }
242
- //#endregion
243
- //#region src/components/field/field-context.ts
244
- const FieldContext = createContext(null);
245
- /**
246
- * Connects a form control to the surrounding `Field`: id for the label, `aria-describedby`
247
- * for description and error, `aria-invalid`, `required`, `disabled`. Props passed directly win.
248
- */
249
- function useFieldControl(props) {
250
- const field = useContext(FieldContext);
251
- if (!field) return props;
252
- const describedBy = [
253
- field.descriptionId,
254
- field.errorId,
255
- props["aria-describedby"]
256
- ].filter(Boolean).join(" ");
257
- return {
258
- ...props,
259
- id: props.id ?? field.id,
260
- disabled: props.disabled ?? (field.disabled || void 0),
261
- required: props.required ?? (field.required || void 0),
262
- "aria-describedby": describedBy || void 0,
263
- "aria-invalid": props["aria-invalid"] ?? (field.invalid || void 0)
264
- };
265
- }
266
- //#endregion
267
- export { MenuIcon as _, buttonStyles as a, SearchIcon as b, AlertIcon as c, CheckIcon as d, ChevronDownIcon as f, InboxIcon as g, ChevronsUpDownIcon as h, IconButton as i, ArrowDownIcon as l, ChevronRightIcon as m, useFieldControl as n, Spinner as o, ChevronLeftIcon as p, Button as r, spinnerStyles as s, FieldContext as t, ArrowUpIcon as u, MinusIcon as v, XIcon as x, PanelLeftIcon as y };