@instruments/materia-ui 0.1.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 (1858) hide show
  1. package/LICENSE +18 -0
  2. package/README.md +216 -0
  3. package/agent-docs.md +2104 -0
  4. package/dist/components/accordion/accordion-anatomy.d.ts +5 -0
  5. package/dist/components/accordion/accordion-anatomy.js +29 -0
  6. package/dist/components/accordion/accordion-content.d.ts +6 -0
  7. package/dist/components/accordion/accordion-content.js +13 -0
  8. package/dist/components/accordion/accordion-context.d.ts +28 -0
  9. package/dist/components/accordion/accordion-context.js +26 -0
  10. package/dist/components/accordion/accordion-item.d.ts +8 -0
  11. package/dist/components/accordion/accordion-item.js +14 -0
  12. package/dist/components/accordion/accordion-root.d.ts +23 -0
  13. package/dist/components/accordion/accordion-root.js +23 -0
  14. package/dist/components/accordion/accordion-trigger.d.ts +6 -0
  15. package/dist/components/accordion/accordion-trigger.js +23 -0
  16. package/dist/components/accordion/accordion-variants.d.ts +17 -0
  17. package/dist/components/accordion/accordion-variants.js +63 -0
  18. package/dist/components/accordion.d.ts +5 -0
  19. package/dist/components/accordion.js +5 -0
  20. package/dist/components/alert/alert-anatomy.d.ts +5 -0
  21. package/dist/components/alert/alert-anatomy.js +19 -0
  22. package/dist/components/alert/alert-description.d.ts +7 -0
  23. package/dist/components/alert/alert-description.js +9 -0
  24. package/dist/components/alert/alert-root.d.ts +21 -0
  25. package/dist/components/alert/alert-root.js +31 -0
  26. package/dist/components/alert/alert-title.d.ts +7 -0
  27. package/dist/components/alert/alert-title.js +8 -0
  28. package/dist/components/alert-dialog/alert-dialog-action.d.ts +15 -0
  29. package/dist/components/alert-dialog/alert-dialog-action.js +11 -0
  30. package/dist/components/alert-dialog/alert-dialog-cancel-focus.d.ts +6 -0
  31. package/dist/components/alert-dialog/alert-dialog-cancel-focus.js +7 -0
  32. package/dist/components/alert-dialog/alert-dialog-cancel.d.ts +10 -0
  33. package/dist/components/alert-dialog/alert-dialog-cancel.js +13 -0
  34. package/dist/components/alert-dialog/alert-dialog-content.d.ts +12 -0
  35. package/dist/components/alert-dialog/alert-dialog-content.js +20 -0
  36. package/dist/components/alert-dialog/alert-dialog-description.d.ts +7 -0
  37. package/dist/components/alert-dialog/alert-dialog-description.js +8 -0
  38. package/dist/components/alert-dialog/alert-dialog-footer.d.ts +7 -0
  39. package/dist/components/alert-dialog/alert-dialog-footer.js +15 -0
  40. package/dist/components/alert-dialog/alert-dialog-header.d.ts +4 -0
  41. package/dist/components/alert-dialog/alert-dialog-header.js +7 -0
  42. package/dist/components/alert-dialog/alert-dialog-overlay.d.ts +7 -0
  43. package/dist/components/alert-dialog/alert-dialog-overlay.js +8 -0
  44. package/dist/components/alert-dialog/alert-dialog-portal.d.ts +5 -0
  45. package/dist/components/alert-dialog/alert-dialog-portal.js +6 -0
  46. package/dist/components/alert-dialog/alert-dialog-root.d.ts +15 -0
  47. package/dist/components/alert-dialog/alert-dialog-root.js +16 -0
  48. package/dist/components/alert-dialog/alert-dialog-title.d.ts +7 -0
  49. package/dist/components/alert-dialog/alert-dialog-title.js +7 -0
  50. package/dist/components/alert-dialog/alert-dialog-trigger.d.ts +5 -0
  51. package/dist/components/alert-dialog/alert-dialog-trigger.js +6 -0
  52. package/dist/components/alert-dialog.d.ts +11 -0
  53. package/dist/components/alert-dialog.js +11 -0
  54. package/dist/components/alert.d.ts +4 -0
  55. package/dist/components/alert.js +4 -0
  56. package/dist/components/anchor/anchor-root.d.ts +33 -0
  57. package/dist/components/anchor/anchor-root.js +84 -0
  58. package/dist/components/anchor.d.ts +1 -0
  59. package/dist/components/anchor.js +1 -0
  60. package/dist/components/animated-number/animated-number-root.d.ts +92 -0
  61. package/dist/components/animated-number/animated-number-root.js +89 -0
  62. package/dist/components/animated-number/format-parts.d.ts +41 -0
  63. package/dist/components/animated-number/format-parts.js +91 -0
  64. package/dist/components/animated-number/get-width-in-em.d.ts +5 -0
  65. package/dist/components/animated-number/get-width-in-em.js +11 -0
  66. package/dist/components/animated-number/mask.d.ts +16 -0
  67. package/dist/components/animated-number/mask.js +65 -0
  68. package/dist/components/animated-number/number-digit.d.ts +24 -0
  69. package/dist/components/animated-number/number-digit.js +110 -0
  70. package/dist/components/animated-number/number-section.d.ts +22 -0
  71. package/dist/components/animated-number/number-section.js +93 -0
  72. package/dist/components/animated-number/number-symbol.d.ts +17 -0
  73. package/dist/components/animated-number/number-symbol.js +23 -0
  74. package/dist/components/animated-number/section-context.d.ts +10 -0
  75. package/dist/components/animated-number/section-context.js +10 -0
  76. package/dist/components/animated-number/target-widths.d.ts +7 -0
  77. package/dist/components/animated-number/target-widths.js +8 -0
  78. package/dist/components/animated-number.d.ts +1 -0
  79. package/dist/components/animated-number.js +1 -0
  80. package/dist/components/aspect-ratio/aspect-ratio-anatomy.d.ts +5 -0
  81. package/dist/components/aspect-ratio/aspect-ratio-anatomy.js +10 -0
  82. package/dist/components/aspect-ratio/aspect-ratio-root.d.ts +39 -0
  83. package/dist/components/aspect-ratio/aspect-ratio-root.js +39 -0
  84. package/dist/components/aspect-ratio/aspect-ratio.test-d.d.ts +27 -0
  85. package/dist/components/aspect-ratio/aspect-ratio.test-d.js +1 -0
  86. package/dist/components/aspect-ratio.d.ts +2 -0
  87. package/dist/components/aspect-ratio.js +2 -0
  88. package/dist/components/avatar/avatar-badge.d.ts +28 -0
  89. package/dist/components/avatar/avatar-badge.js +54 -0
  90. package/dist/components/avatar/avatar-context.d.ts +23 -0
  91. package/dist/components/avatar/avatar-context.js +27 -0
  92. package/dist/components/avatar/avatar-fallback.d.ts +19 -0
  93. package/dist/components/avatar/avatar-fallback.js +69 -0
  94. package/dist/components/avatar/avatar-group.d.ts +53 -0
  95. package/dist/components/avatar/avatar-group.js +129 -0
  96. package/dist/components/avatar/avatar-image.d.ts +23 -0
  97. package/dist/components/avatar/avatar-image.js +22 -0
  98. package/dist/components/avatar/avatar-root.d.ts +39 -0
  99. package/dist/components/avatar/avatar-root.js +57 -0
  100. package/dist/components/avatar/avatar-status.d.ts +18 -0
  101. package/dist/components/avatar/avatar-status.js +30 -0
  102. package/dist/components/avatar.d.ts +6 -0
  103. package/dist/components/avatar.js +6 -0
  104. package/dist/components/badge/badge-button.d.ts +15 -0
  105. package/dist/components/badge/badge-button.js +49 -0
  106. package/dist/components/badge/badge-dot.d.ts +6 -0
  107. package/dist/components/badge/badge-dot.js +6 -0
  108. package/dist/components/badge/badge-root.d.ts +70 -0
  109. package/dist/components/badge/badge-root.js +104 -0
  110. package/dist/components/badge.d.ts +7 -0
  111. package/dist/components/badge.js +4 -0
  112. package/dist/components/border-beam/border-beam-root.d.ts +45 -0
  113. package/dist/components/border-beam/border-beam-root.js +77 -0
  114. package/dist/components/border-beam.d.ts +2 -0
  115. package/dist/components/border-beam.js +1 -0
  116. package/dist/components/box/box-root.d.ts +30 -0
  117. package/dist/components/box/box-root.js +33 -0
  118. package/dist/components/box/box.test-d.d.ts +39 -0
  119. package/dist/components/box/box.test-d.js +1 -0
  120. package/dist/components/box.d.ts +1 -0
  121. package/dist/components/box.js +1 -0
  122. package/dist/components/breadcrumb/breadcrumb-anatomy.d.ts +5 -0
  123. package/dist/components/breadcrumb/breadcrumb-anatomy.js +46 -0
  124. package/dist/components/breadcrumb/breadcrumb-root.d.ts +38 -0
  125. package/dist/components/breadcrumb/breadcrumb-root.js +51 -0
  126. package/dist/components/breadcrumb.d.ts +2 -0
  127. package/dist/components/breadcrumb.js +2 -0
  128. package/dist/components/button/button-content.d.ts +32 -0
  129. package/dist/components/button/button-content.js +70 -0
  130. package/dist/components/button/button-helpers.d.ts +16 -0
  131. package/dist/components/button/button-helpers.js +50 -0
  132. package/dist/components/button/button-root.d.ts +27 -0
  133. package/dist/components/button/button-root.js +102 -0
  134. package/dist/components/button/button-sizing.d.ts +40 -0
  135. package/dist/components/button/button-sizing.js +44 -0
  136. package/dist/components/button/button-types.d.ts +58 -0
  137. package/dist/components/button/button-types.js +1 -0
  138. package/dist/components/button/button-variants.d.ts +64 -0
  139. package/dist/components/button/button-variants.js +350 -0
  140. package/dist/components/button/use-has-changed.d.ts +6 -0
  141. package/dist/components/button/use-has-changed.js +16 -0
  142. package/dist/components/button-group/button-group-root.d.ts +32 -0
  143. package/dist/components/button-group/button-group-root.js +153 -0
  144. package/dist/components/button-group.d.ts +1 -0
  145. package/dist/components/button-group.js +1 -0
  146. package/dist/components/button.d.ts +1 -0
  147. package/dist/components/button.js +1 -0
  148. package/dist/components/calendar/calendar-root.d.ts +8 -0
  149. package/dist/components/calendar/calendar-root.js +54 -0
  150. package/dist/components/calendar.d.ts +2 -0
  151. package/dist/components/calendar.js +1 -0
  152. package/dist/components/card/card-action.d.ts +8 -0
  153. package/dist/components/card/card-action.js +9 -0
  154. package/dist/components/card/card-anatomy.d.ts +5 -0
  155. package/dist/components/card/card-anatomy.js +40 -0
  156. package/dist/components/card/card-content.d.ts +20 -0
  157. package/dist/components/card/card-content.js +30 -0
  158. package/dist/components/card/card-description.d.ts +6 -0
  159. package/dist/components/card/card-description.js +7 -0
  160. package/dist/components/card/card-footer.d.ts +8 -0
  161. package/dist/components/card/card-footer.js +10 -0
  162. package/dist/components/card/card-header.d.ts +25 -0
  163. package/dist/components/card/card-header.js +32 -0
  164. package/dist/components/card/card-root.d.ts +67 -0
  165. package/dist/components/card/card-root.js +64 -0
  166. package/dist/components/card/card-title.d.ts +8 -0
  167. package/dist/components/card/card-title.js +18 -0
  168. package/dist/components/card/card.test-d.d.ts +70 -0
  169. package/dist/components/card/card.test-d.js +1 -0
  170. package/dist/components/card.d.ts +8 -0
  171. package/dist/components/card.js +8 -0
  172. package/dist/components/carousel/carousel-root.d.ts +86 -0
  173. package/dist/components/carousel/carousel-root.js +140 -0
  174. package/dist/components/carousel/carousel-store.d.ts +22 -0
  175. package/dist/components/carousel/carousel-store.js +45 -0
  176. package/dist/components/carousel.d.ts +2 -0
  177. package/dist/components/carousel.js +1 -0
  178. package/dist/components/center/center-root.d.ts +62 -0
  179. package/dist/components/center/center-root.js +61 -0
  180. package/dist/components/center.d.ts +1 -0
  181. package/dist/components/center.js +1 -0
  182. package/dist/components/chart/chart-anatomy.d.ts +5 -0
  183. package/dist/components/chart/chart-anatomy.js +34 -0
  184. package/dist/components/chart/chart-context.d.ts +82 -0
  185. package/dist/components/chart/chart-context.js +60 -0
  186. package/dist/components/chart/chart-legend.d.ts +16 -0
  187. package/dist/components/chart/chart-legend.js +26 -0
  188. package/dist/components/chart/chart-root.d.ts +31 -0
  189. package/dist/components/chart/chart-root.js +29 -0
  190. package/dist/components/chart/chart-style.d.ts +13 -0
  191. package/dist/components/chart/chart-style.js +29 -0
  192. package/dist/components/chart/chart-tooltip.d.ts +26 -0
  193. package/dist/components/chart/chart-tooltip.js +62 -0
  194. package/dist/components/chart.d.ts +6 -0
  195. package/dist/components/chart.js +5 -0
  196. package/dist/components/checkbox/checkbox-root.d.ts +40 -0
  197. package/dist/components/checkbox/checkbox-root.js +46 -0
  198. package/dist/components/checkbox-card/checkbox-card-anatomy.d.ts +5 -0
  199. package/dist/components/checkbox-card/checkbox-card-anatomy.js +41 -0
  200. package/dist/components/checkbox-card/checkbox-card-content.d.ts +3 -0
  201. package/dist/components/checkbox-card/checkbox-card-content.js +6 -0
  202. package/dist/components/checkbox-card/checkbox-card-context.d.ts +29 -0
  203. package/dist/components/checkbox-card/checkbox-card-context.js +11 -0
  204. package/dist/components/checkbox-card/checkbox-card-description.d.ts +3 -0
  205. package/dist/components/checkbox-card/checkbox-card-description.js +5 -0
  206. package/dist/components/checkbox-card/checkbox-card-icon.d.ts +8 -0
  207. package/dist/components/checkbox-card/checkbox-card-icon.js +11 -0
  208. package/dist/components/checkbox-card/checkbox-card-item.d.ts +32 -0
  209. package/dist/components/checkbox-card/checkbox-card-item.js +54 -0
  210. package/dist/components/checkbox-card/checkbox-card-root.d.ts +36 -0
  211. package/dist/components/checkbox-card/checkbox-card-root.js +48 -0
  212. package/dist/components/checkbox-card/checkbox-card-title.d.ts +3 -0
  213. package/dist/components/checkbox-card/checkbox-card-title.js +5 -0
  214. package/dist/components/checkbox-card.d.ts +7 -0
  215. package/dist/components/checkbox-card.js +7 -0
  216. package/dist/components/checkbox-field/checkbox-field-root.d.ts +26 -0
  217. package/dist/components/checkbox-field/checkbox-field-root.js +24 -0
  218. package/dist/components/checkbox-field.d.ts +1 -0
  219. package/dist/components/checkbox-field.js +1 -0
  220. package/dist/components/checkbox.d.ts +1 -0
  221. package/dist/components/checkbox.js +1 -0
  222. package/dist/components/code/code-root.d.ts +17 -0
  223. package/dist/components/code/code-root.js +17 -0
  224. package/dist/components/code.d.ts +1 -0
  225. package/dist/components/code.js +1 -0
  226. package/dist/components/collapsible/collapsible-anatomy.d.ts +5 -0
  227. package/dist/components/collapsible/collapsible-anatomy.js +22 -0
  228. package/dist/components/collapsible/collapsible-content.d.ts +9 -0
  229. package/dist/components/collapsible/collapsible-content.js +10 -0
  230. package/dist/components/collapsible/collapsible-root.d.ts +11 -0
  231. package/dist/components/collapsible/collapsible-root.js +13 -0
  232. package/dist/components/collapsible/collapsible-trigger.d.ts +3 -0
  233. package/dist/components/collapsible/collapsible-trigger.js +4 -0
  234. package/dist/components/collapsible.d.ts +4 -0
  235. package/dist/components/collapsible.js +4 -0
  236. package/dist/components/color-wheel/color-wheel-root.d.ts +17 -0
  237. package/dist/components/color-wheel/color-wheel-root.js +205 -0
  238. package/dist/components/color-wheel/color-wheel-utils.d.ts +59 -0
  239. package/dist/components/color-wheel/color-wheel-utils.js +101 -0
  240. package/dist/components/color-wheel.d.ts +3 -0
  241. package/dist/components/color-wheel.js +3 -0
  242. package/dist/components/combobox/combobox-root.d.ts +53 -0
  243. package/dist/components/combobox/combobox-root.js +109 -0
  244. package/dist/components/combobox.d.ts +1 -0
  245. package/dist/components/combobox.js +1 -0
  246. package/dist/components/command/command-anatomy.d.ts +5 -0
  247. package/dist/components/command/command-anatomy.js +56 -0
  248. package/dist/components/command/command-dialog.d.ts +30 -0
  249. package/dist/components/command/command-dialog.js +23 -0
  250. package/dist/components/command/command-empty.d.ts +10 -0
  251. package/dist/components/command/command-empty.js +10 -0
  252. package/dist/components/command/command-group.d.ts +17 -0
  253. package/dist/components/command/command-group.js +15 -0
  254. package/dist/components/command/command-input.d.ts +9 -0
  255. package/dist/components/command/command-input.js +12 -0
  256. package/dist/components/command/command-item.d.ts +11 -0
  257. package/dist/components/command/command-item.js +11 -0
  258. package/dist/components/command/command-list.d.ts +11 -0
  259. package/dist/components/command/command-list.js +11 -0
  260. package/dist/components/command/command-root.d.ts +40 -0
  261. package/dist/components/command/command-root.js +28 -0
  262. package/dist/components/command/command-separator.d.ts +9 -0
  263. package/dist/components/command/command-separator.js +9 -0
  264. package/dist/components/command/command-shortcut.d.ts +6 -0
  265. package/dist/components/command/command-shortcut.js +7 -0
  266. package/dist/components/command.d.ts +14 -0
  267. package/dist/components/command.js +15 -0
  268. package/dist/components/container/container-root.d.ts +57 -0
  269. package/dist/components/container/container-root.js +60 -0
  270. package/dist/components/container.d.ts +1 -0
  271. package/dist/components/container.js +2 -0
  272. package/dist/components/context-menu/context-menu-anatomy.d.ts +5 -0
  273. package/dist/components/context-menu/context-menu-anatomy.js +76 -0
  274. package/dist/components/context-menu/context-menu-checkbox-item.d.ts +6 -0
  275. package/dist/components/context-menu/context-menu-checkbox-item.js +8 -0
  276. package/dist/components/context-menu/context-menu-content.d.ts +8 -0
  277. package/dist/components/context-menu/context-menu-content.js +10 -0
  278. package/dist/components/context-menu/context-menu-context.d.ts +20 -0
  279. package/dist/components/context-menu/context-menu-context.js +16 -0
  280. package/dist/components/context-menu/context-menu-group.d.ts +3 -0
  281. package/dist/components/context-menu/context-menu-group.js +5 -0
  282. package/dist/components/context-menu/context-menu-item.d.ts +8 -0
  283. package/dist/components/context-menu/context-menu-item.js +10 -0
  284. package/dist/components/context-menu/context-menu-label.d.ts +11 -0
  285. package/dist/components/context-menu/context-menu-label.js +9 -0
  286. package/dist/components/context-menu/context-menu-parts.d.ts +2 -0
  287. package/dist/components/context-menu/context-menu-parts.js +14 -0
  288. package/dist/components/context-menu/context-menu-portal.d.ts +6 -0
  289. package/dist/components/context-menu/context-menu-portal.js +8 -0
  290. package/dist/components/context-menu/context-menu-radio-group.d.ts +3 -0
  291. package/dist/components/context-menu/context-menu-radio-group.js +5 -0
  292. package/dist/components/context-menu/context-menu-radio-item.d.ts +6 -0
  293. package/dist/components/context-menu/context-menu-radio-item.js +8 -0
  294. package/dist/components/context-menu/context-menu-root.d.ts +14 -0
  295. package/dist/components/context-menu/context-menu-root.js +15 -0
  296. package/dist/components/context-menu/context-menu-separator.d.ts +3 -0
  297. package/dist/components/context-menu/context-menu-separator.js +5 -0
  298. package/dist/components/context-menu/context-menu-shortcut.d.ts +6 -0
  299. package/dist/components/context-menu/context-menu-shortcut.js +8 -0
  300. package/dist/components/context-menu/context-menu-sub-content.d.ts +7 -0
  301. package/dist/components/context-menu/context-menu-sub-content.js +9 -0
  302. package/dist/components/context-menu/context-menu-sub-trigger.d.ts +7 -0
  303. package/dist/components/context-menu/context-menu-sub-trigger.js +9 -0
  304. package/dist/components/context-menu/context-menu-sub.d.ts +3 -0
  305. package/dist/components/context-menu/context-menu-sub.js +5 -0
  306. package/dist/components/context-menu/context-menu-trigger.d.ts +9 -0
  307. package/dist/components/context-menu/context-menu-trigger.js +10 -0
  308. package/dist/components/context-menu.d.ts +16 -0
  309. package/dist/components/context-menu.js +16 -0
  310. package/dist/components/country-combobox/country-combobox-root.d.ts +34 -0
  311. package/dist/components/country-combobox/country-combobox-root.js +46 -0
  312. package/dist/components/country-combobox.d.ts +1 -0
  313. package/dist/components/country-combobox.js +1 -0
  314. package/dist/components/country-select/country-flags.d.ts +14 -0
  315. package/dist/components/country-select/country-flags.js +20 -0
  316. package/dist/components/country-select/country-select-context.d.ts +6 -0
  317. package/dist/components/country-select/country-select-context.js +8 -0
  318. package/dist/components/country-select/country-select-root.d.ts +74 -0
  319. package/dist/components/country-select/country-select-root.js +92 -0
  320. package/dist/components/country-select.d.ts +1 -0
  321. package/dist/components/country-select.js +1 -0
  322. package/dist/components/description-list/description-list-root.d.ts +46 -0
  323. package/dist/components/description-list/description-list-root.js +50 -0
  324. package/dist/components/description-list.d.ts +1 -0
  325. package/dist/components/description-list.js +1 -0
  326. package/dist/components/dialog/dialog-anatomy.d.ts +5 -0
  327. package/dist/components/dialog/dialog-anatomy.js +46 -0
  328. package/dist/components/dialog/dialog-close.d.ts +5 -0
  329. package/dist/components/dialog/dialog-close.js +10 -0
  330. package/dist/components/dialog/dialog-content.d.ts +32 -0
  331. package/dist/components/dialog/dialog-content.js +23 -0
  332. package/dist/components/dialog/dialog-description.d.ts +10 -0
  333. package/dist/components/dialog/dialog-description.js +10 -0
  334. package/dist/components/dialog/dialog-footer.d.ts +12 -0
  335. package/dist/components/dialog/dialog-footer.js +16 -0
  336. package/dist/components/dialog/dialog-header.d.ts +7 -0
  337. package/dist/components/dialog/dialog-header.js +9 -0
  338. package/dist/components/dialog/dialog-overlay.d.ts +10 -0
  339. package/dist/components/dialog/dialog-overlay.js +10 -0
  340. package/dist/components/dialog/dialog-portal.d.ts +6 -0
  341. package/dist/components/dialog/dialog-portal.js +11 -0
  342. package/dist/components/dialog/dialog-root.d.ts +11 -0
  343. package/dist/components/dialog/dialog-root.js +15 -0
  344. package/dist/components/dialog/dialog-title.d.ts +10 -0
  345. package/dist/components/dialog/dialog-title.js +9 -0
  346. package/dist/components/dialog/dialog-trigger.d.ts +6 -0
  347. package/dist/components/dialog/dialog-trigger.js +11 -0
  348. package/dist/components/dialog.d.ts +16 -0
  349. package/dist/components/dialog.js +17 -0
  350. package/dist/components/dot/dot-root.d.ts +63 -0
  351. package/dist/components/dot/dot-root.js +74 -0
  352. package/dist/components/dot-matrix-loader/dot-matrix-loader-root.d.ts +27 -0
  353. package/dist/components/dot-matrix-loader/dot-matrix-loader-root.js +134 -0
  354. package/dist/components/dot-matrix-loader/registry.d.ts +27 -0
  355. package/dist/components/dot-matrix-loader/registry.js +76 -0
  356. package/dist/components/dot-matrix-loader.d.ts +2 -0
  357. package/dist/components/dot-matrix-loader.js +2 -0
  358. package/dist/components/dot.d.ts +1 -0
  359. package/dist/components/dot.js +1 -0
  360. package/dist/components/drawer/drawer-close.d.ts +7 -0
  361. package/dist/components/drawer/drawer-close.js +7 -0
  362. package/dist/components/drawer/drawer-content.d.ts +24 -0
  363. package/dist/components/drawer/drawer-content.js +41 -0
  364. package/dist/components/drawer/drawer-description.d.ts +9 -0
  365. package/dist/components/drawer/drawer-description.js +9 -0
  366. package/dist/components/drawer/drawer-footer.d.ts +6 -0
  367. package/dist/components/drawer/drawer-footer.js +8 -0
  368. package/dist/components/drawer/drawer-header.d.ts +6 -0
  369. package/dist/components/drawer/drawer-header.js +8 -0
  370. package/dist/components/drawer/drawer-overlay.d.ts +13 -0
  371. package/dist/components/drawer/drawer-overlay.js +18 -0
  372. package/dist/components/drawer/drawer-portal.d.ts +8 -0
  373. package/dist/components/drawer/drawer-portal.js +14 -0
  374. package/dist/components/drawer/drawer-root.d.ts +24 -0
  375. package/dist/components/drawer/drawer-root.js +23 -0
  376. package/dist/components/drawer/drawer-title.d.ts +9 -0
  377. package/dist/components/drawer/drawer-title.js +9 -0
  378. package/dist/components/drawer/drawer-trigger.d.ts +7 -0
  379. package/dist/components/drawer/drawer-trigger.js +7 -0
  380. package/dist/components/drawer.d.ts +11 -0
  381. package/dist/components/drawer.js +12 -0
  382. package/dist/components/dropdown-menu/dropdown-menu-anatomy.d.ts +5 -0
  383. package/dist/components/dropdown-menu/dropdown-menu-anatomy.js +76 -0
  384. package/dist/components/dropdown-menu/dropdown-menu-checkbox-item.d.ts +6 -0
  385. package/dist/components/dropdown-menu/dropdown-menu-checkbox-item.js +8 -0
  386. package/dist/components/dropdown-menu/dropdown-menu-content.d.ts +7 -0
  387. package/dist/components/dropdown-menu/dropdown-menu-content.js +9 -0
  388. package/dist/components/dropdown-menu/dropdown-menu-context.d.ts +20 -0
  389. package/dist/components/dropdown-menu/dropdown-menu-context.js +16 -0
  390. package/dist/components/dropdown-menu/dropdown-menu-group.d.ts +3 -0
  391. package/dist/components/dropdown-menu/dropdown-menu-group.js +5 -0
  392. package/dist/components/dropdown-menu/dropdown-menu-item.d.ts +8 -0
  393. package/dist/components/dropdown-menu/dropdown-menu-item.js +10 -0
  394. package/dist/components/dropdown-menu/dropdown-menu-label.d.ts +11 -0
  395. package/dist/components/dropdown-menu/dropdown-menu-label.js +9 -0
  396. package/dist/components/dropdown-menu/dropdown-menu-parts.d.ts +2 -0
  397. package/dist/components/dropdown-menu/dropdown-menu-parts.js +14 -0
  398. package/dist/components/dropdown-menu/dropdown-menu-portal.d.ts +6 -0
  399. package/dist/components/dropdown-menu/dropdown-menu-portal.js +8 -0
  400. package/dist/components/dropdown-menu/dropdown-menu-radio-group.d.ts +3 -0
  401. package/dist/components/dropdown-menu/dropdown-menu-radio-group.js +5 -0
  402. package/dist/components/dropdown-menu/dropdown-menu-radio-item.d.ts +6 -0
  403. package/dist/components/dropdown-menu/dropdown-menu-radio-item.js +8 -0
  404. package/dist/components/dropdown-menu/dropdown-menu-root.d.ts +14 -0
  405. package/dist/components/dropdown-menu/dropdown-menu-root.js +15 -0
  406. package/dist/components/dropdown-menu/dropdown-menu-separator.d.ts +3 -0
  407. package/dist/components/dropdown-menu/dropdown-menu-separator.js +5 -0
  408. package/dist/components/dropdown-menu/dropdown-menu-shortcut.d.ts +6 -0
  409. package/dist/components/dropdown-menu/dropdown-menu-shortcut.js +8 -0
  410. package/dist/components/dropdown-menu/dropdown-menu-sub-content.d.ts +7 -0
  411. package/dist/components/dropdown-menu/dropdown-menu-sub-content.js +9 -0
  412. package/dist/components/dropdown-menu/dropdown-menu-sub-trigger.d.ts +7 -0
  413. package/dist/components/dropdown-menu/dropdown-menu-sub-trigger.js +9 -0
  414. package/dist/components/dropdown-menu/dropdown-menu-sub.d.ts +3 -0
  415. package/dist/components/dropdown-menu/dropdown-menu-sub.js +5 -0
  416. package/dist/components/dropdown-menu/dropdown-menu-trigger.d.ts +9 -0
  417. package/dist/components/dropdown-menu/dropdown-menu-trigger.js +10 -0
  418. package/dist/components/dropdown-menu.d.ts +16 -0
  419. package/dist/components/dropdown-menu.js +16 -0
  420. package/dist/components/easing-curve/easing-curve-root.d.ts +36 -0
  421. package/dist/components/easing-curve/easing-curve-root.js +23 -0
  422. package/dist/components/easing-curve.d.ts +1 -0
  423. package/dist/components/easing-curve.js +1 -0
  424. package/dist/components/empty/empty-actions.d.ts +6 -0
  425. package/dist/components/empty/empty-actions.js +7 -0
  426. package/dist/components/empty/empty-context.d.ts +17 -0
  427. package/dist/components/empty/empty-context.js +15 -0
  428. package/dist/components/empty/empty-description.d.ts +6 -0
  429. package/dist/components/empty/empty-description.js +36 -0
  430. package/dist/components/empty/empty-header.d.ts +6 -0
  431. package/dist/components/empty/empty-header.js +18 -0
  432. package/dist/components/empty/empty-media.d.ts +26 -0
  433. package/dist/components/empty/empty-media.js +49 -0
  434. package/dist/components/empty/empty-root.d.ts +44 -0
  435. package/dist/components/empty/empty-root.js +70 -0
  436. package/dist/components/empty/empty-title.d.ts +10 -0
  437. package/dist/components/empty/empty-title.js +36 -0
  438. package/dist/components/empty.d.ts +6 -0
  439. package/dist/components/empty.js +7 -0
  440. package/dist/components/error-boundary/error-boundary-root.d.ts +54 -0
  441. package/dist/components/error-boundary/error-boundary-root.js +51 -0
  442. package/dist/components/error-boundary.d.ts +1 -0
  443. package/dist/components/error-boundary.js +1 -0
  444. package/dist/components/expand-button/expand-button-root.d.ts +32 -0
  445. package/dist/components/expand-button/expand-button-root.js +37 -0
  446. package/dist/components/expand-button/plus-minus-morph-icon.d.ts +21 -0
  447. package/dist/components/expand-button/plus-minus-morph-icon.js +35 -0
  448. package/dist/components/expand-button.d.ts +4 -0
  449. package/dist/components/expand-button.js +2 -0
  450. package/dist/components/expandable-text/expandable-text-root.d.ts +25 -0
  451. package/dist/components/expandable-text/expandable-text-root.js +49 -0
  452. package/dist/components/expandable-text.d.ts +1 -0
  453. package/dist/components/expandable-text.js +1 -0
  454. package/dist/components/fade-overlay/fade-overlay-root.d.ts +33 -0
  455. package/dist/components/fade-overlay/fade-overlay-root.js +48 -0
  456. package/dist/components/fade-overlay.d.ts +1 -0
  457. package/dist/components/fade-overlay.js +1 -0
  458. package/dist/components/field/field-anatomy.d.ts +10 -0
  459. package/dist/components/field/field-anatomy.js +50 -0
  460. package/dist/components/field/field-content.d.ts +18 -0
  461. package/dist/components/field/field-content.js +21 -0
  462. package/dist/components/field/field-context.d.ts +22 -0
  463. package/dist/components/field/field-context.js +21 -0
  464. package/dist/components/field/field-description.d.ts +16 -0
  465. package/dist/components/field/field-description.js +25 -0
  466. package/dist/components/field/field-error.d.ts +24 -0
  467. package/dist/components/field/field-error.js +59 -0
  468. package/dist/components/field/field-group.d.ts +17 -0
  469. package/dist/components/field/field-group.js +20 -0
  470. package/dist/components/field/field-label.d.ts +21 -0
  471. package/dist/components/field/field-label.js +29 -0
  472. package/dist/components/field/field-root.d.ts +40 -0
  473. package/dist/components/field/field-root.js +37 -0
  474. package/dist/components/field/field-variants.d.ts +8 -0
  475. package/dist/components/field/field-variants.js +26 -0
  476. package/dist/components/field.d.ts +8 -0
  477. package/dist/components/field.js +8 -0
  478. package/dist/components/flex/flex-root.d.ts +56 -0
  479. package/dist/components/flex/flex-root.js +48 -0
  480. package/dist/components/flex/flex.test-d.d.ts +60 -0
  481. package/dist/components/flex/flex.test-d.js +1 -0
  482. package/dist/components/flex.d.ts +1 -0
  483. package/dist/components/flex.js +1 -0
  484. package/dist/components/gallery/gallery-image.d.ts +70 -0
  485. package/dist/components/gallery/gallery-image.js +121 -0
  486. package/dist/components/gallery/image-skeleton.d.ts +13 -0
  487. package/dist/components/gallery/image-skeleton.js +12 -0
  488. package/dist/components/gallery/loading-image.d.ts +35 -0
  489. package/dist/components/gallery/loading-image.js +36 -0
  490. package/dist/components/gallery.d.ts +3 -0
  491. package/dist/components/gallery.js +3 -0
  492. package/dist/components/grid/grid-col.d.ts +33 -0
  493. package/dist/components/grid/grid-col.js +34 -0
  494. package/dist/components/grid/grid-col.test-d.d.ts +39 -0
  495. package/dist/components/grid/grid-col.test-d.js +1 -0
  496. package/dist/components/grid/grid-root.d.ts +65 -0
  497. package/dist/components/grid/grid-root.js +55 -0
  498. package/dist/components/grid/grid-utils.d.ts +19 -0
  499. package/dist/components/grid/grid-utils.js +44 -0
  500. package/dist/components/grid/grid.test-d.d.ts +36 -0
  501. package/dist/components/grid/grid.test-d.js +1 -0
  502. package/dist/components/grid.d.ts +4 -0
  503. package/dist/components/grid.js +2 -0
  504. package/dist/components/group/group-root.d.ts +60 -0
  505. package/dist/components/group/group-root.js +86 -0
  506. package/dist/components/group/group.test-d.d.ts +27 -0
  507. package/dist/components/group/group.test-d.js +1 -0
  508. package/dist/components/group.d.ts +1 -0
  509. package/dist/components/group.js +1 -0
  510. package/dist/components/heading/heading-root.d.ts +36 -0
  511. package/dist/components/heading/heading-root.js +50 -0
  512. package/dist/components/heading.d.ts +1 -0
  513. package/dist/components/heading.js +1 -0
  514. package/dist/components/hotspot-indicator/hotspot-indicator-root.d.ts +41 -0
  515. package/dist/components/hotspot-indicator/hotspot-indicator-root.js +117 -0
  516. package/dist/components/hotspot-indicator.d.ts +1 -0
  517. package/dist/components/hotspot-indicator.js +1 -0
  518. package/dist/components/hover-card/hover-card-root.d.ts +24 -0
  519. package/dist/components/hover-card/hover-card-root.js +25 -0
  520. package/dist/components/hover-card.d.ts +1 -0
  521. package/dist/components/hover-card.js +1 -0
  522. package/dist/components/icon/icon-root.d.ts +38 -0
  523. package/dist/components/icon/icon-root.js +34 -0
  524. package/dist/components/icon-box/icon-box-root.d.ts +29 -0
  525. package/dist/components/icon-box/icon-box-root.js +86 -0
  526. package/dist/components/icon-box.d.ts +1 -0
  527. package/dist/components/icon-box.js +1 -0
  528. package/dist/components/icon-card/icon-card-root.d.ts +32 -0
  529. package/dist/components/icon-card/icon-card-root.js +27 -0
  530. package/dist/components/icon-card.d.ts +1 -0
  531. package/dist/components/icon-card.js +1 -0
  532. package/dist/components/icon-morph/icon-morph-root.d.ts +69 -0
  533. package/dist/components/icon-morph/icon-morph-root.js +84 -0
  534. package/dist/components/icon-morph.d.ts +2 -0
  535. package/dist/components/icon-morph.js +1 -0
  536. package/dist/components/icon.d.ts +1 -0
  537. package/dist/components/icon.js +1 -0
  538. package/dist/components/identified-surface.d.ts +24 -0
  539. package/dist/components/identified-surface.js +60 -0
  540. package/dist/components/input/input-root.d.ts +37 -0
  541. package/dist/components/input/input-root.js +35 -0
  542. package/dist/components/input/input-types.d.ts +6 -0
  543. package/dist/components/input/input-types.js +1 -0
  544. package/dist/components/input/input-variants.d.ts +17 -0
  545. package/dist/components/input/input-variants.js +44 -0
  546. package/dist/components/input-card/input-card-root.d.ts +45 -0
  547. package/dist/components/input-card/input-card-root.js +101 -0
  548. package/dist/components/input-card.d.ts +2 -0
  549. package/dist/components/input-card.js +1 -0
  550. package/dist/components/input-group/input-group-addon.d.ts +22 -0
  551. package/dist/components/input-group/input-group-addon.js +30 -0
  552. package/dist/components/input-group/input-group-anatomy.d.ts +5 -0
  553. package/dist/components/input-group/input-group-anatomy.js +32 -0
  554. package/dist/components/input-group/input-group-button.d.ts +25 -0
  555. package/dist/components/input-group/input-group-button.js +30 -0
  556. package/dist/components/input-group/input-group-context.d.ts +20 -0
  557. package/dist/components/input-group/input-group-context.js +20 -0
  558. package/dist/components/input-group/input-group-icon.d.ts +19 -0
  559. package/dist/components/input-group/input-group-icon.js +23 -0
  560. package/dist/components/input-group/input-group-input.d.ts +18 -0
  561. package/dist/components/input-group/input-group-input.js +23 -0
  562. package/dist/components/input-group/input-group-root.d.ts +40 -0
  563. package/dist/components/input-group/input-group-root.js +54 -0
  564. package/dist/components/input-group/input-group-textarea.d.ts +22 -0
  565. package/dist/components/input-group/input-group-textarea.js +29 -0
  566. package/dist/components/input-group/input-group-types.d.ts +7 -0
  567. package/dist/components/input-group/input-group-types.js +1 -0
  568. package/dist/components/input-group/input-group-variants.d.ts +45 -0
  569. package/dist/components/input-group/input-group-variants.js +202 -0
  570. package/dist/components/input-group.d.ts +10 -0
  571. package/dist/components/input-group.js +9 -0
  572. package/dist/components/input-otp/input-otp-root.d.ts +41 -0
  573. package/dist/components/input-otp/input-otp-root.js +42 -0
  574. package/dist/components/input-otp/input-otp-separator.d.ts +3 -0
  575. package/dist/components/input-otp/input-otp-separator.js +6 -0
  576. package/dist/components/input-otp/input-otp-slot.d.ts +10 -0
  577. package/dist/components/input-otp/input-otp-slot.js +19 -0
  578. package/dist/components/input-otp.d.ts +1 -0
  579. package/dist/components/input-otp.js +1 -0
  580. package/dist/components/input.d.ts +8 -0
  581. package/dist/components/input.js +6 -0
  582. package/dist/components/item/item-actions.d.ts +6 -0
  583. package/dist/components/item/item-actions.js +7 -0
  584. package/dist/components/item/item-anatomy.d.ts +10 -0
  585. package/dist/components/item/item-anatomy.js +70 -0
  586. package/dist/components/item/item-content.d.ts +7 -0
  587. package/dist/components/item/item-content.js +9 -0
  588. package/dist/components/item/item-description.d.ts +6 -0
  589. package/dist/components/item/item-description.js +7 -0
  590. package/dist/components/item/item-footer.d.ts +6 -0
  591. package/dist/components/item/item-footer.js +8 -0
  592. package/dist/components/item/item-group.d.ts +43 -0
  593. package/dist/components/item/item-group.js +49 -0
  594. package/dist/components/item/item-header.d.ts +6 -0
  595. package/dist/components/item/item-header.js +8 -0
  596. package/dist/components/item/item-media.d.ts +15 -0
  597. package/dist/components/item/item-media.js +29 -0
  598. package/dist/components/item/item-root.d.ts +44 -0
  599. package/dist/components/item/item-root.js +98 -0
  600. package/dist/components/item/item-separator.d.ts +7 -0
  601. package/dist/components/item/item-separator.js +8 -0
  602. package/dist/components/item/item-title.d.ts +6 -0
  603. package/dist/components/item/item-title.js +8 -0
  604. package/dist/components/item.d.ts +11 -0
  605. package/dist/components/item.js +11 -0
  606. package/dist/components/kbd/kbd-root.d.ts +97 -0
  607. package/dist/components/kbd/kbd-root.js +152 -0
  608. package/dist/components/kbd.d.ts +2 -0
  609. package/dist/components/kbd.js +1 -0
  610. package/dist/components/label/label-root.d.ts +22 -0
  611. package/dist/components/label/label-root.js +24 -0
  612. package/dist/components/label.d.ts +1 -0
  613. package/dist/components/label.js +1 -0
  614. package/dist/components/location-input/location-input-root.d.ts +88 -0
  615. package/dist/components/location-input/location-input-root.js +86 -0
  616. package/dist/components/location-input/location-types.d.ts +54 -0
  617. package/dist/components/location-input/location-types.js +1 -0
  618. package/dist/components/location-input/use-location-input.d.ts +25 -0
  619. package/dist/components/location-input/use-location-input.js +71 -0
  620. package/dist/components/location-input/use-location-search.d.ts +19 -0
  621. package/dist/components/location-input/use-location-search.js +65 -0
  622. package/dist/components/location-input.d.ts +2 -0
  623. package/dist/components/location-input.js +1 -0
  624. package/dist/components/logo/logo-root.d.ts +36 -0
  625. package/dist/components/logo/logo-root.js +30 -0
  626. package/dist/components/logo.d.ts +1 -0
  627. package/dist/components/logo.js +1 -0
  628. package/dist/components/marquee-text/marquee-text-root.d.ts +37 -0
  629. package/dist/components/marquee-text/marquee-text-root.js +73 -0
  630. package/dist/components/marquee-text.d.ts +1 -0
  631. package/dist/components/marquee-text.js +1 -0
  632. package/dist/components/media-frame/media-frame-embed.d.ts +29 -0
  633. package/dist/components/media-frame/media-frame-embed.js +19 -0
  634. package/dist/components/media-frame/media-frame-root.d.ts +56 -0
  635. package/dist/components/media-frame/media-frame-root.js +47 -0
  636. package/dist/components/media-frame/media-frame.test-d.d.ts +27 -0
  637. package/dist/components/media-frame/media-frame.test-d.js +1 -0
  638. package/dist/components/media-frame.d.ts +2 -0
  639. package/dist/components/media-frame.js +2 -0
  640. package/dist/components/menu-item/menu-item-checkbox.d.ts +10 -0
  641. package/dist/components/menu-item/menu-item-checkbox.js +13 -0
  642. package/dist/components/menu-item/menu-item-indicators.d.ts +14 -0
  643. package/dist/components/menu-item/menu-item-indicators.js +12 -0
  644. package/dist/components/menu-item/menu-item-radio.d.ts +7 -0
  645. package/dist/components/menu-item/menu-item-radio.js +7 -0
  646. package/dist/components/menu-item/menu-item-root.d.ts +14 -0
  647. package/dist/components/menu-item/menu-item-root.js +85 -0
  648. package/dist/components/menu-item/menu-item-start-glyph.d.ts +17 -0
  649. package/dist/components/menu-item/menu-item-start-glyph.js +23 -0
  650. package/dist/components/menu-item/menu-item-suffix.d.ts +15 -0
  651. package/dist/components/menu-item/menu-item-suffix.js +6 -0
  652. package/dist/components/menu-item/menu-item-types.d.ts +71 -0
  653. package/dist/components/menu-item/menu-item-types.js +1 -0
  654. package/dist/components/menu-item/menu-item-variants.d.ts +43 -0
  655. package/dist/components/menu-item/menu-item-variants.js +157 -0
  656. package/dist/components/menu-item.d.ts +1 -0
  657. package/dist/components/menu-item.js +1 -0
  658. package/dist/components/menu-parts.d.ts +151 -0
  659. package/dist/components/menu-parts.js +304 -0
  660. package/dist/components/menubar/menubar-anatomy.d.ts +5 -0
  661. package/dist/components/menubar/menubar-anatomy.js +83 -0
  662. package/dist/components/menubar/menubar-checkbox-item.d.ts +6 -0
  663. package/dist/components/menubar/menubar-checkbox-item.js +8 -0
  664. package/dist/components/menubar/menubar-content.d.ts +7 -0
  665. package/dist/components/menubar/menubar-content.js +9 -0
  666. package/dist/components/menubar/menubar-context.d.ts +20 -0
  667. package/dist/components/menubar/menubar-context.js +16 -0
  668. package/dist/components/menubar/menubar-group.d.ts +3 -0
  669. package/dist/components/menubar/menubar-group.js +5 -0
  670. package/dist/components/menubar/menubar-item.d.ts +8 -0
  671. package/dist/components/menubar/menubar-item.js +10 -0
  672. package/dist/components/menubar/menubar-label.d.ts +11 -0
  673. package/dist/components/menubar/menubar-label.js +9 -0
  674. package/dist/components/menubar/menubar-menu.d.ts +8 -0
  675. package/dist/components/menubar/menubar-menu.js +9 -0
  676. package/dist/components/menubar/menubar-parts.d.ts +2 -0
  677. package/dist/components/menubar/menubar-parts.js +17 -0
  678. package/dist/components/menubar/menubar-portal.d.ts +6 -0
  679. package/dist/components/menubar/menubar-portal.js +8 -0
  680. package/dist/components/menubar/menubar-radio-group.d.ts +3 -0
  681. package/dist/components/menubar/menubar-radio-group.js +5 -0
  682. package/dist/components/menubar/menubar-radio-item.d.ts +6 -0
  683. package/dist/components/menubar/menubar-radio-item.js +8 -0
  684. package/dist/components/menubar/menubar-root.d.ts +14 -0
  685. package/dist/components/menubar/menubar-root.js +15 -0
  686. package/dist/components/menubar/menubar-separator.d.ts +3 -0
  687. package/dist/components/menubar/menubar-separator.js +5 -0
  688. package/dist/components/menubar/menubar-shortcut.d.ts +6 -0
  689. package/dist/components/menubar/menubar-shortcut.js +8 -0
  690. package/dist/components/menubar/menubar-sub-content.d.ts +7 -0
  691. package/dist/components/menubar/menubar-sub-content.js +9 -0
  692. package/dist/components/menubar/menubar-sub-trigger.d.ts +7 -0
  693. package/dist/components/menubar/menubar-sub-trigger.js +9 -0
  694. package/dist/components/menubar/menubar-sub.d.ts +3 -0
  695. package/dist/components/menubar/menubar-sub.js +5 -0
  696. package/dist/components/menubar/menubar-trigger.d.ts +9 -0
  697. package/dist/components/menubar/menubar-trigger.js +10 -0
  698. package/dist/components/menubar.d.ts +17 -0
  699. package/dist/components/menubar.js +17 -0
  700. package/dist/components/month-year-picker/month-year-picker-root.d.ts +47 -0
  701. package/dist/components/month-year-picker/month-year-picker-root.js +130 -0
  702. package/dist/components/month-year-picker.d.ts +1 -0
  703. package/dist/components/month-year-picker.js +1 -0
  704. package/dist/components/morph-dialog/morph-dialog-root.d.ts +87 -0
  705. package/dist/components/morph-dialog/morph-dialog-root.js +106 -0
  706. package/dist/components/morph-dialog.d.ts +1 -0
  707. package/dist/components/morph-dialog.js +2 -0
  708. package/dist/components/motion-config/motion-config-root.d.ts +20 -0
  709. package/dist/components/motion-config/motion-config-root.js +20 -0
  710. package/dist/components/motion-config.d.ts +1 -0
  711. package/dist/components/motion-config.js +1 -0
  712. package/dist/components/native-select/native-select-optgroup.d.ts +3 -0
  713. package/dist/components/native-select/native-select-optgroup.js +4 -0
  714. package/dist/components/native-select/native-select-option.d.ts +3 -0
  715. package/dist/components/native-select/native-select-option.js +3 -0
  716. package/dist/components/native-select/native-select-root.d.ts +15 -0
  717. package/dist/components/native-select/native-select-root.js +21 -0
  718. package/dist/components/native-select.d.ts +1 -0
  719. package/dist/components/native-select.js +1 -0
  720. package/dist/components/navigation-menu/navigation-menu-anatomy.d.ts +5 -0
  721. package/dist/components/navigation-menu/navigation-menu-anatomy.js +58 -0
  722. package/dist/components/navigation-menu/navigation-menu-content.d.ts +11 -0
  723. package/dist/components/navigation-menu/navigation-menu-content.js +12 -0
  724. package/dist/components/navigation-menu/navigation-menu-indicator.d.ts +12 -0
  725. package/dist/components/navigation-menu/navigation-menu-indicator.js +12 -0
  726. package/dist/components/navigation-menu/navigation-menu-item.d.ts +11 -0
  727. package/dist/components/navigation-menu/navigation-menu-item.js +11 -0
  728. package/dist/components/navigation-menu/navigation-menu-link.d.ts +13 -0
  729. package/dist/components/navigation-menu/navigation-menu-link.js +15 -0
  730. package/dist/components/navigation-menu/navigation-menu-list.d.ts +10 -0
  731. package/dist/components/navigation-menu/navigation-menu-list.js +10 -0
  732. package/dist/components/navigation-menu/navigation-menu-root.d.ts +22 -0
  733. package/dist/components/navigation-menu/navigation-menu-root.js +17 -0
  734. package/dist/components/navigation-menu/navigation-menu-trigger.d.ts +24 -0
  735. package/dist/components/navigation-menu/navigation-menu-trigger.js +28 -0
  736. package/dist/components/navigation-menu/navigation-menu-viewport.d.ts +20 -0
  737. package/dist/components/navigation-menu/navigation-menu-viewport.js +16 -0
  738. package/dist/components/navigation-menu.d.ts +9 -0
  739. package/dist/components/navigation-menu.js +9 -0
  740. package/dist/components/overlay-primitives.d.ts +62 -0
  741. package/dist/components/overlay-primitives.js +43 -0
  742. package/dist/components/pagination/pagination-root.d.ts +36 -0
  743. package/dist/components/pagination/pagination-root.js +41 -0
  744. package/dist/components/pagination/pagination-utils.d.ts +17 -0
  745. package/dist/components/pagination/pagination-utils.js +55 -0
  746. package/dist/components/pagination.d.ts +1 -0
  747. package/dist/components/pagination.js +1 -0
  748. package/dist/components/phone-input/phone-country-select.d.ts +18 -0
  749. package/dist/components/phone-input/phone-country-select.js +10 -0
  750. package/dist/components/phone-input/phone-input-field.d.ts +15 -0
  751. package/dist/components/phone-input/phone-input-field.js +30 -0
  752. package/dist/components/phone-input/phone-input-root.d.ts +48 -0
  753. package/dist/components/phone-input/phone-input-root.js +66 -0
  754. package/dist/components/phone-input.d.ts +1 -0
  755. package/dist/components/phone-input.js +1 -0
  756. package/dist/components/pill/pill-root.d.ts +31 -0
  757. package/dist/components/pill/pill-root.js +39 -0
  758. package/dist/components/pill/pill-variants.d.ts +52 -0
  759. package/dist/components/pill/pill-variants.js +286 -0
  760. package/dist/components/pill.d.ts +4 -0
  761. package/dist/components/pill.js +2 -0
  762. package/dist/components/pixel-loader/pixel-loader-root.d.ts +42 -0
  763. package/dist/components/pixel-loader/pixel-loader-root.js +49 -0
  764. package/dist/components/pixel-loader.d.ts +1 -0
  765. package/dist/components/pixel-loader.js +1 -0
  766. package/dist/components/popover/popover-anatomy.d.ts +5 -0
  767. package/dist/components/popover/popover-anatomy.js +22 -0
  768. package/dist/components/popover/popover-root.d.ts +87 -0
  769. package/dist/components/popover/popover-root.js +84 -0
  770. package/dist/components/popover.d.ts +2 -0
  771. package/dist/components/popover.js +2 -0
  772. package/dist/components/progress/progress-root.d.ts +38 -0
  773. package/dist/components/progress/progress-root.js +38 -0
  774. package/dist/components/progress-dots/progress-dots-root.d.ts +31 -0
  775. package/dist/components/progress-dots/progress-dots-root.js +50 -0
  776. package/dist/components/progress-dots.d.ts +1 -0
  777. package/dist/components/progress-dots.js +1 -0
  778. package/dist/components/progress.d.ts +1 -0
  779. package/dist/components/progress.js +1 -0
  780. package/dist/components/quantity-control/quantity-control-root.d.ts +50 -0
  781. package/dist/components/quantity-control/quantity-control-root.js +69 -0
  782. package/dist/components/quantity-control.d.ts +1 -0
  783. package/dist/components/quantity-control.js +1 -0
  784. package/dist/components/radio/radio-root.d.ts +62 -0
  785. package/dist/components/radio/radio-root.js +87 -0
  786. package/dist/components/radio-card/radio-card-constants.d.ts +18 -0
  787. package/dist/components/radio-card/radio-card-constants.js +53 -0
  788. package/dist/components/radio-card/radio-card-content.d.ts +3 -0
  789. package/dist/components/radio-card/radio-card-content.js +6 -0
  790. package/dist/components/radio-card/radio-card-context.d.ts +31 -0
  791. package/dist/components/radio-card/radio-card-context.js +11 -0
  792. package/dist/components/radio-card/radio-card-description.d.ts +6 -0
  793. package/dist/components/radio-card/radio-card-description.js +14 -0
  794. package/dist/components/radio-card/radio-card-icon.d.ts +6 -0
  795. package/dist/components/radio-card/radio-card-icon.js +15 -0
  796. package/dist/components/radio-card/radio-card-item.d.ts +21 -0
  797. package/dist/components/radio-card/radio-card-item.js +49 -0
  798. package/dist/components/radio-card/radio-card-root.d.ts +44 -0
  799. package/dist/components/radio-card/radio-card-root.js +43 -0
  800. package/dist/components/radio-card/radio-card-title.d.ts +6 -0
  801. package/dist/components/radio-card/radio-card-title.js +14 -0
  802. package/dist/components/radio-card.d.ts +6 -0
  803. package/dist/components/radio-card.js +6 -0
  804. package/dist/components/radio-group/radio-group-root.d.ts +54 -0
  805. package/dist/components/radio-group/radio-group-root.js +60 -0
  806. package/dist/components/radio-group.d.ts +1 -0
  807. package/dist/components/radio-group.js +1 -0
  808. package/dist/components/radio.d.ts +1 -0
  809. package/dist/components/radio.js +1 -0
  810. package/dist/components/requirement-item/requirement-item-root.d.ts +27 -0
  811. package/dist/components/requirement-item/requirement-item-root.js +21 -0
  812. package/dist/components/requirement-item.d.ts +1 -0
  813. package/dist/components/requirement-item.js +1 -0
  814. package/dist/components/resizable/resizable-anatomy.d.ts +5 -0
  815. package/dist/components/resizable/resizable-anatomy.js +22 -0
  816. package/dist/components/resizable/resizable-handle.d.ts +15 -0
  817. package/dist/components/resizable/resizable-handle.js +38 -0
  818. package/dist/components/resizable/resizable-panel-group.d.ts +30 -0
  819. package/dist/components/resizable/resizable-panel-group.js +25 -0
  820. package/dist/components/resizable/resizable-panel.d.ts +10 -0
  821. package/dist/components/resizable/resizable-panel.js +11 -0
  822. package/dist/components/resizable.d.ts +4 -0
  823. package/dist/components/resizable.js +4 -0
  824. package/dist/components/scrim/scrim-root.d.ts +21 -0
  825. package/dist/components/scrim/scrim-root.js +17 -0
  826. package/dist/components/scrim/scrim-variants.d.ts +18 -0
  827. package/dist/components/scrim/scrim-variants.js +33 -0
  828. package/dist/components/scrim.d.ts +3 -0
  829. package/dist/components/scrim.js +2 -0
  830. package/dist/components/scroll-area/scroll-area-root.d.ts +46 -0
  831. package/dist/components/scroll-area/scroll-area-root.js +36 -0
  832. package/dist/components/scroll-area/scroll-area.test-d.d.ts +27 -0
  833. package/dist/components/scroll-area/scroll-area.test-d.js +1 -0
  834. package/dist/components/scroll-area.d.ts +1 -0
  835. package/dist/components/scroll-area.js +1 -0
  836. package/dist/components/scroll-fade/scroll-fade-root.d.ts +37 -0
  837. package/dist/components/scroll-fade/scroll-fade-root.js +135 -0
  838. package/dist/components/scroll-fade.d.ts +1 -0
  839. package/dist/components/scroll-fade.js +1 -0
  840. package/dist/components/scroll-frame/scroll-frame-root.d.ts +79 -0
  841. package/dist/components/scroll-frame/scroll-frame-root.js +102 -0
  842. package/dist/components/scroll-frame.d.ts +1 -0
  843. package/dist/components/scroll-frame.js +1 -0
  844. package/dist/components/search-input/search-input-root.d.ts +73 -0
  845. package/dist/components/search-input/search-input-root.js +87 -0
  846. package/dist/components/search-input/search-input-suggestions.d.ts +17 -0
  847. package/dist/components/search-input/search-input-suggestions.js +49 -0
  848. package/dist/components/search-input.d.ts +2 -0
  849. package/dist/components/search-input.js +1 -0
  850. package/dist/components/section/section-root.d.ts +47 -0
  851. package/dist/components/section/section-root.js +48 -0
  852. package/dist/components/section.d.ts +1 -0
  853. package/dist/components/section.js +1 -0
  854. package/dist/components/segmented/segmented-root.d.ts +12 -0
  855. package/dist/components/segmented/segmented-root.js +12 -0
  856. package/dist/components/segmented/segmented-variants.d.ts +39 -0
  857. package/dist/components/segmented/segmented-variants.js +83 -0
  858. package/dist/components/segmented-control/segmented-control-anatomy.d.ts +5 -0
  859. package/dist/components/segmented-control/segmented-control-anatomy.js +24 -0
  860. package/dist/components/segmented-control/segmented-control-context.d.ts +22 -0
  861. package/dist/components/segmented-control/segmented-control-context.js +15 -0
  862. package/dist/components/segmented-control/segmented-control-indicator.d.ts +8 -0
  863. package/dist/components/segmented-control/segmented-control-indicator.js +18 -0
  864. package/dist/components/segmented-control/segmented-control-item.d.ts +24 -0
  865. package/dist/components/segmented-control/segmented-control-item.js +27 -0
  866. package/dist/components/segmented-control/segmented-control-root.d.ts +35 -0
  867. package/dist/components/segmented-control/segmented-control-root.js +74 -0
  868. package/dist/components/segmented-control/segmented-control-variants.d.ts +9 -0
  869. package/dist/components/segmented-control/segmented-control-variants.js +31 -0
  870. package/dist/components/segmented-control/use-single-selection.d.ts +28 -0
  871. package/dist/components/segmented-control/use-single-selection.js +29 -0
  872. package/dist/components/segmented-control.d.ts +3 -0
  873. package/dist/components/segmented-control.js +3 -0
  874. package/dist/components/segmented.d.ts +1 -0
  875. package/dist/components/segmented.js +1 -0
  876. package/dist/components/select/select-anatomy.d.ts +5 -0
  877. package/dist/components/select/select-anatomy.js +49 -0
  878. package/dist/components/select/select-content.d.ts +15 -0
  879. package/dist/components/select/select-content.js +23 -0
  880. package/dist/components/select/select-context.d.ts +7 -0
  881. package/dist/components/select/select-context.js +7 -0
  882. package/dist/components/select/select-group.d.ts +8 -0
  883. package/dist/components/select/select-group.js +9 -0
  884. package/dist/components/select/select-item.d.ts +10 -0
  885. package/dist/components/select/select-item.js +46 -0
  886. package/dist/components/select/select-label.d.ts +11 -0
  887. package/dist/components/select/select-label.js +11 -0
  888. package/dist/components/select/select-root.d.ts +15 -0
  889. package/dist/components/select/select-root.js +16 -0
  890. package/dist/components/select/select-separator.d.ts +11 -0
  891. package/dist/components/select/select-separator.js +11 -0
  892. package/dist/components/select/select-trigger.d.ts +18 -0
  893. package/dist/components/select/select-trigger.js +14 -0
  894. package/dist/components/select/select-value.d.ts +8 -0
  895. package/dist/components/select/select-value.js +9 -0
  896. package/dist/components/select.d.ts +9 -0
  897. package/dist/components/select.js +9 -0
  898. package/dist/components/separator/separator-root.d.ts +31 -0
  899. package/dist/components/separator/separator-root.js +28 -0
  900. package/dist/components/separator.d.ts +1 -0
  901. package/dist/components/separator.js +1 -0
  902. package/dist/components/sheet/sheet-anatomy.d.ts +5 -0
  903. package/dist/components/sheet/sheet-anatomy.js +49 -0
  904. package/dist/components/sheet/sheet-close.d.ts +5 -0
  905. package/dist/components/sheet/sheet-close.js +10 -0
  906. package/dist/components/sheet/sheet-content.d.ts +14 -0
  907. package/dist/components/sheet/sheet-content.js +16 -0
  908. package/dist/components/sheet/sheet-description.d.ts +7 -0
  909. package/dist/components/sheet/sheet-description.js +11 -0
  910. package/dist/components/sheet/sheet-footer.d.ts +6 -0
  911. package/dist/components/sheet/sheet-footer.js +8 -0
  912. package/dist/components/sheet/sheet-header.d.ts +6 -0
  913. package/dist/components/sheet/sheet-header.js +8 -0
  914. package/dist/components/sheet/sheet-overlay.d.ts +9 -0
  915. package/dist/components/sheet/sheet-overlay.js +9 -0
  916. package/dist/components/sheet/sheet-portal.d.ts +5 -0
  917. package/dist/components/sheet/sheet-portal.js +10 -0
  918. package/dist/components/sheet/sheet-root.d.ts +10 -0
  919. package/dist/components/sheet/sheet-root.js +14 -0
  920. package/dist/components/sheet/sheet-title.d.ts +7 -0
  921. package/dist/components/sheet/sheet-title.js +11 -0
  922. package/dist/components/sheet/sheet-trigger.d.ts +5 -0
  923. package/dist/components/sheet/sheet-trigger.js +10 -0
  924. package/dist/components/sheet.d.ts +16 -0
  925. package/dist/components/sheet.js +17 -0
  926. package/dist/components/shimmer/shimmer-root.d.ts +67 -0
  927. package/dist/components/shimmer/shimmer-root.js +148 -0
  928. package/dist/components/shimmer.d.ts +2 -0
  929. package/dist/components/shimmer.js +1 -0
  930. package/dist/components/shine/shine-root.d.ts +50 -0
  931. package/dist/components/shine/shine-root.js +100 -0
  932. package/dist/components/shine.d.ts +2 -0
  933. package/dist/components/shine.js +1 -0
  934. package/dist/components/sidepanel/sidepanel-anatomy.d.ts +5 -0
  935. package/dist/components/sidepanel/sidepanel-anatomy.js +61 -0
  936. package/dist/components/sidepanel/sidepanel-body.d.ts +17 -0
  937. package/dist/components/sidepanel/sidepanel-body.js +20 -0
  938. package/dist/components/sidepanel/sidepanel-close-button.d.ts +19 -0
  939. package/dist/components/sidepanel/sidepanel-close-button.js +18 -0
  940. package/dist/components/sidepanel/sidepanel-close.d.ts +13 -0
  941. package/dist/components/sidepanel/sidepanel-close.js +17 -0
  942. package/dist/components/sidepanel/sidepanel-content.d.ts +39 -0
  943. package/dist/components/sidepanel/sidepanel-content.js +68 -0
  944. package/dist/components/sidepanel/sidepanel-controls.d.ts +24 -0
  945. package/dist/components/sidepanel/sidepanel-controls.js +22 -0
  946. package/dist/components/sidepanel/sidepanel-description.d.ts +10 -0
  947. package/dist/components/sidepanel/sidepanel-description.js +12 -0
  948. package/dist/components/sidepanel/sidepanel-dismiss.d.ts +14 -0
  949. package/dist/components/sidepanel/sidepanel-dismiss.js +27 -0
  950. package/dist/components/sidepanel/sidepanel-footer.d.ts +7 -0
  951. package/dist/components/sidepanel/sidepanel-footer.js +9 -0
  952. package/dist/components/sidepanel/sidepanel-header.d.ts +21 -0
  953. package/dist/components/sidepanel/sidepanel-header.js +17 -0
  954. package/dist/components/sidepanel/sidepanel-nested-root.d.ts +12 -0
  955. package/dist/components/sidepanel/sidepanel-nested-root.js +12 -0
  956. package/dist/components/sidepanel/sidepanel-root.d.ts +18 -0
  957. package/dist/components/sidepanel/sidepanel-root.js +18 -0
  958. package/dist/components/sidepanel/sidepanel-title-context.d.ts +6 -0
  959. package/dist/components/sidepanel/sidepanel-title-context.js +8 -0
  960. package/dist/components/sidepanel/sidepanel-title.d.ts +15 -0
  961. package/dist/components/sidepanel/sidepanel-title.js +29 -0
  962. package/dist/components/sidepanel/sidepanel-trigger.d.ts +8 -0
  963. package/dist/components/sidepanel/sidepanel-trigger.js +11 -0
  964. package/dist/components/sidepanel.d.ts +19 -0
  965. package/dist/components/sidepanel.js +13 -0
  966. package/dist/components/simple-grid/simple-grid-root.d.ts +46 -0
  967. package/dist/components/simple-grid/simple-grid-root.js +55 -0
  968. package/dist/components/simple-grid/simple-grid.test-d.d.ts +48 -0
  969. package/dist/components/simple-grid/simple-grid.test-d.js +1 -0
  970. package/dist/components/simple-grid.d.ts +1 -0
  971. package/dist/components/simple-grid.js +1 -0
  972. package/dist/components/skeleton/skeleton-root.d.ts +27 -0
  973. package/dist/components/skeleton/skeleton-root.js +27 -0
  974. package/dist/components/skeleton/skeleton-row.d.ts +20 -0
  975. package/dist/components/skeleton/skeleton-row.js +20 -0
  976. package/dist/components/skeleton/skeleton-text.d.ts +21 -0
  977. package/dist/components/skeleton/skeleton-text.js +36 -0
  978. package/dist/components/skeleton.d.ts +3 -0
  979. package/dist/components/skeleton.js +3 -0
  980. package/dist/components/slider/slider-root.d.ts +98 -0
  981. package/dist/components/slider/slider-root.js +108 -0
  982. package/dist/components/slider.d.ts +1 -0
  983. package/dist/components/slider.js +1 -0
  984. package/dist/components/social-icon/social-icon-paths.d.ts +9 -0
  985. package/dist/components/social-icon/social-icon-paths.js +48 -0
  986. package/dist/components/social-icon/social-icon-root.d.ts +22 -0
  987. package/dist/components/social-icon/social-icon-root.js +15 -0
  988. package/dist/components/social-icon.d.ts +4 -0
  989. package/dist/components/social-icon.js +2 -0
  990. package/dist/components/space/space-root.d.ts +32 -0
  991. package/dist/components/space/space-root.js +36 -0
  992. package/dist/components/space.d.ts +1 -0
  993. package/dist/components/space.js +1 -0
  994. package/dist/components/spinner/spinner-root.d.ts +25 -0
  995. package/dist/components/spinner/spinner-root.js +49 -0
  996. package/dist/components/spinner.d.ts +1 -0
  997. package/dist/components/spinner.js +1 -0
  998. package/dist/components/stack/stack-root.d.ts +54 -0
  999. package/dist/components/stack/stack-root.js +51 -0
  1000. package/dist/components/stack/stack.test-d.d.ts +39 -0
  1001. package/dist/components/stack/stack.test-d.js +1 -0
  1002. package/dist/components/stack.d.ts +1 -0
  1003. package/dist/components/stack.js +1 -0
  1004. package/dist/components/stagger/stagger-item.d.ts +20 -0
  1005. package/dist/components/stagger/stagger-item.js +47 -0
  1006. package/dist/components/stagger/stagger-root.d.ts +26 -0
  1007. package/dist/components/stagger/stagger-root.js +32 -0
  1008. package/dist/components/stagger.d.ts +2 -0
  1009. package/dist/components/stagger.js +2 -0
  1010. package/dist/components/stepper/stepper-context.d.ts +29 -0
  1011. package/dist/components/stepper/stepper-context.js +15 -0
  1012. package/dist/components/stepper/stepper-item.d.ts +16 -0
  1013. package/dist/components/stepper/stepper-item.js +64 -0
  1014. package/dist/components/stepper/stepper-root.d.ts +31 -0
  1015. package/dist/components/stepper/stepper-root.js +54 -0
  1016. package/dist/components/stepper/stepper-variants.d.ts +43 -0
  1017. package/dist/components/stepper/stepper-variants.js +122 -0
  1018. package/dist/components/stepper.d.ts +5 -0
  1019. package/dist/components/stepper.js +2 -0
  1020. package/dist/components/streaming-text/streaming-text-root.d.ts +48 -0
  1021. package/dist/components/streaming-text/streaming-text-root.js +49 -0
  1022. package/dist/components/streaming-text.d.ts +1 -0
  1023. package/dist/components/streaming-text.js +1 -0
  1024. package/dist/components/sub-navigation/sub-navigation-link.d.ts +18 -0
  1025. package/dist/components/sub-navigation/sub-navigation-link.js +13 -0
  1026. package/dist/components/sub-navigation/sub-navigation-list.d.ts +7 -0
  1027. package/dist/components/sub-navigation/sub-navigation-list.js +8 -0
  1028. package/dist/components/sub-navigation/sub-navigation-root.d.ts +11 -0
  1029. package/dist/components/sub-navigation/sub-navigation-root.js +13 -0
  1030. package/dist/components/sub-navigation.d.ts +6 -0
  1031. package/dist/components/sub-navigation.js +3 -0
  1032. package/dist/components/success-tick-ripple/success-tick-ripple-root.d.ts +35 -0
  1033. package/dist/components/success-tick-ripple/success-tick-ripple-root.js +33 -0
  1034. package/dist/components/success-tick-ripple.d.ts +1 -0
  1035. package/dist/components/success-tick-ripple.js +1 -0
  1036. package/dist/components/swatch/stacked-swatch-fan.d.ts +32 -0
  1037. package/dist/components/swatch/stacked-swatch-fan.js +48 -0
  1038. package/dist/components/swatch/stacked-swatch-fan.motion.d.ts +28 -0
  1039. package/dist/components/swatch/stacked-swatch-fan.motion.js +82 -0
  1040. package/dist/components/swatch/swatch-chip.d.ts +111 -0
  1041. package/dist/components/swatch/swatch-chip.js +136 -0
  1042. package/dist/components/swatch/swatch-root.d.ts +47 -0
  1043. package/dist/components/swatch/swatch-root.js +41 -0
  1044. package/dist/components/swatch/swatch-tile-floating.d.ts +18 -0
  1045. package/dist/components/swatch/swatch-tile-floating.js +33 -0
  1046. package/dist/components/swatch/swatch-tile-styles.d.ts +39 -0
  1047. package/dist/components/swatch/swatch-tile-styles.js +132 -0
  1048. package/dist/components/swatch/swatch-tile-types.d.ts +86 -0
  1049. package/dist/components/swatch/swatch-tile-types.js +1 -0
  1050. package/dist/components/swatch/swatch-tile.d.ts +27 -0
  1051. package/dist/components/swatch/swatch-tile.js +45 -0
  1052. package/dist/components/swatch/use-stacked-swatch-fan.d.ts +27 -0
  1053. package/dist/components/swatch/use-stacked-swatch-fan.js +162 -0
  1054. package/dist/components/swatch-group/swatch-group-context.d.ts +17 -0
  1055. package/dist/components/swatch-group/swatch-group-context.js +12 -0
  1056. package/dist/components/swatch-group/swatch-group-item.d.ts +37 -0
  1057. package/dist/components/swatch-group/swatch-group-item.js +47 -0
  1058. package/dist/components/swatch-group/swatch-group-root.d.ts +23 -0
  1059. package/dist/components/swatch-group/swatch-group-root.js +21 -0
  1060. package/dist/components/swatch-group.d.ts +2 -0
  1061. package/dist/components/swatch-group.js +2 -0
  1062. package/dist/components/swatch-selector/swatch-selector-context.d.ts +18 -0
  1063. package/dist/components/swatch-selector/swatch-selector-context.js +17 -0
  1064. package/dist/components/swatch-selector/swatch-selector-item.d.ts +39 -0
  1065. package/dist/components/swatch-selector/swatch-selector-item.js +34 -0
  1066. package/dist/components/swatch-selector/swatch-selector-more.d.ts +9 -0
  1067. package/dist/components/swatch-selector/swatch-selector-more.js +6 -0
  1068. package/dist/components/swatch-selector/swatch-selector-root.d.ts +25 -0
  1069. package/dist/components/swatch-selector/swatch-selector-root.js +29 -0
  1070. package/dist/components/swatch-selector.d.ts +3 -0
  1071. package/dist/components/swatch-selector.js +3 -0
  1072. package/dist/components/swatch.d.ts +3 -0
  1073. package/dist/components/swatch.js +3 -0
  1074. package/dist/components/switch/switch-root.d.ts +48 -0
  1075. package/dist/components/switch/switch-root.js +70 -0
  1076. package/dist/components/switch.d.ts +1 -0
  1077. package/dist/components/switch.js +1 -0
  1078. package/dist/components/tab-navigation/tab-navigation-anatomy.d.ts +5 -0
  1079. package/dist/components/tab-navigation/tab-navigation-anatomy.js +24 -0
  1080. package/dist/components/tab-navigation/tab-navigation-link.d.ts +25 -0
  1081. package/dist/components/tab-navigation/tab-navigation-link.js +51 -0
  1082. package/dist/components/tab-navigation/tab-navigation-list.d.ts +8 -0
  1083. package/dist/components/tab-navigation/tab-navigation-list.js +19 -0
  1084. package/dist/components/tab-navigation/tab-navigation-root.d.ts +29 -0
  1085. package/dist/components/tab-navigation/tab-navigation-root.js +18 -0
  1086. package/dist/components/tab-navigation.d.ts +4 -0
  1087. package/dist/components/tab-navigation.js +4 -0
  1088. package/dist/components/table/table-root.d.ts +40 -0
  1089. package/dist/components/table/table-root.js +42 -0
  1090. package/dist/components/table.d.ts +1 -0
  1091. package/dist/components/table.js +1 -0
  1092. package/dist/components/tabs/tabs-anatomy.d.ts +5 -0
  1093. package/dist/components/tabs/tabs-anatomy.js +29 -0
  1094. package/dist/components/tabs/tabs-content.d.ts +11 -0
  1095. package/dist/components/tabs/tabs-content.js +28 -0
  1096. package/dist/components/tabs/tabs-context.d.ts +28 -0
  1097. package/dist/components/tabs/tabs-context.js +16 -0
  1098. package/dist/components/tabs/tabs-indicator.d.ts +8 -0
  1099. package/dist/components/tabs/tabs-indicator.js +22 -0
  1100. package/dist/components/tabs/tabs-list.d.ts +12 -0
  1101. package/dist/components/tabs/tabs-list.js +26 -0
  1102. package/dist/components/tabs/tabs-panel.d.ts +12 -0
  1103. package/dist/components/tabs/tabs-panel.js +18 -0
  1104. package/dist/components/tabs/tabs-root.d.ts +32 -0
  1105. package/dist/components/tabs/tabs-root.js +38 -0
  1106. package/dist/components/tabs/tabs-trigger.d.ts +27 -0
  1107. package/dist/components/tabs/tabs-trigger.js +24 -0
  1108. package/dist/components/tabs/tabs-trigger.test-d.d.ts +35 -0
  1109. package/dist/components/tabs/tabs-trigger.test-d.js +1 -0
  1110. package/dist/components/tabs/tabs-variants.d.ts +24 -0
  1111. package/dist/components/tabs/tabs-variants.js +95 -0
  1112. package/dist/components/tabs.d.ts +6 -0
  1113. package/dist/components/tabs.js +6 -0
  1114. package/dist/components/tag/tag-root.d.ts +58 -0
  1115. package/dist/components/tag/tag-root.js +211 -0
  1116. package/dist/components/tag.d.ts +2 -0
  1117. package/dist/components/tag.js +1 -0
  1118. package/dist/components/text/text-root.d.ts +61 -0
  1119. package/dist/components/text/text-root.js +66 -0
  1120. package/dist/components/text/text.test-d.d.ts +47 -0
  1121. package/dist/components/text/text.test-d.js +1 -0
  1122. package/dist/components/text.d.ts +1 -0
  1123. package/dist/components/text.js +1 -0
  1124. package/dist/components/textarea/textarea-root.d.ts +32 -0
  1125. package/dist/components/textarea/textarea-root.js +46 -0
  1126. package/dist/components/textarea.d.ts +1 -0
  1127. package/dist/components/textarea.js +1 -0
  1128. package/dist/components/thinking-loader/thinking-loader-counter.d.ts +12 -0
  1129. package/dist/components/thinking-loader/thinking-loader-counter.js +10 -0
  1130. package/dist/components/thinking-loader/thinking-loader-icon.d.ts +13 -0
  1131. package/dist/components/thinking-loader/thinking-loader-icon.js +16 -0
  1132. package/dist/components/thinking-loader/thinking-loader-root.d.ts +24 -0
  1133. package/dist/components/thinking-loader/thinking-loader-root.js +102 -0
  1134. package/dist/components/thinking-loader/thinking-loader-step.d.ts +37 -0
  1135. package/dist/components/thinking-loader/thinking-loader-step.js +66 -0
  1136. package/dist/components/thinking-loader/types.d.ts +45 -0
  1137. package/dist/components/thinking-loader/types.js +1 -0
  1138. package/dist/components/thinking-loader/use-thinking-loader.d.ts +64 -0
  1139. package/dist/components/thinking-loader/use-thinking-loader.js +81 -0
  1140. package/dist/components/thinking-loader.d.ts +6 -0
  1141. package/dist/components/thinking-loader.js +5 -0
  1142. package/dist/components/thinking-orb/thinking-orb-root.d.ts +90 -0
  1143. package/dist/components/thinking-orb/thinking-orb-root.js +29 -0
  1144. package/dist/components/thinking-orb.d.ts +2 -0
  1145. package/dist/components/thinking-orb.js +1 -0
  1146. package/dist/components/time-slot-picker/time-slot-picker-root.d.ts +39 -0
  1147. package/dist/components/time-slot-picker/time-slot-picker-root.js +33 -0
  1148. package/dist/components/time-slot-picker.d.ts +1 -0
  1149. package/dist/components/time-slot-picker.js +1 -0
  1150. package/dist/components/toast/toast-manager.d.ts +57 -0
  1151. package/dist/components/toast/toast-manager.js +62 -0
  1152. package/dist/components/toast/toast-root.d.ts +39 -0
  1153. package/dist/components/toast/toast-root.js +109 -0
  1154. package/dist/components/toast.d.ts +2 -0
  1155. package/dist/components/toast.js +2 -0
  1156. package/dist/components/toggle/toggle-group-context.d.ts +15 -0
  1157. package/dist/components/toggle/toggle-group-context.js +3 -0
  1158. package/dist/components/toggle/toggle-root.d.ts +68 -0
  1159. package/dist/components/toggle/toggle-root.js +128 -0
  1160. package/dist/components/toggle-group/toggle-group-root.d.ts +38 -0
  1161. package/dist/components/toggle-group/toggle-group-root.js +48 -0
  1162. package/dist/components/toggle-group.d.ts +1 -0
  1163. package/dist/components/toggle-group.js +1 -0
  1164. package/dist/components/toggle.d.ts +1 -0
  1165. package/dist/components/toggle.js +1 -0
  1166. package/dist/components/tooltip/tooltip-root.d.ts +66 -0
  1167. package/dist/components/tooltip/tooltip-root.js +64 -0
  1168. package/dist/components/tooltip.d.ts +1 -0
  1169. package/dist/components/tooltip.js +1 -0
  1170. package/dist/components/verge/verge-anatomy.d.ts +5 -0
  1171. package/dist/components/verge/verge-anatomy.js +17 -0
  1172. package/dist/components/verge/verge-context.d.ts +5 -0
  1173. package/dist/components/verge/verge-context.js +8 -0
  1174. package/dist/components/verge/verge-root.d.ts +38 -0
  1175. package/dist/components/verge/verge-root.js +48 -0
  1176. package/dist/components/verge/verge-slot.d.ts +55 -0
  1177. package/dist/components/verge/verge-slot.js +61 -0
  1178. package/dist/components/verge.d.ts +3 -0
  1179. package/dist/components/verge.js +3 -0
  1180. package/dist/components/visually-hidden/visually-hidden-root.d.ts +11 -0
  1181. package/dist/components/visually-hidden/visually-hidden-root.js +11 -0
  1182. package/dist/components/visually-hidden.d.ts +1 -0
  1183. package/dist/components/visually-hidden.js +1 -0
  1184. package/dist/components/voice/live-waveform.d.ts +19 -0
  1185. package/dist/components/voice/live-waveform.js +65 -0
  1186. package/dist/components/voice/voice-error-popover.d.ts +29 -0
  1187. package/dist/components/voice/voice-error-popover.js +24 -0
  1188. package/dist/components/voice/voice-pill.d.ts +34 -0
  1189. package/dist/components/voice/voice-pill.js +75 -0
  1190. package/dist/components/voice.d.ts +3 -0
  1191. package/dist/components/voice.js +3 -0
  1192. package/dist/compositions/attribute-card.d.ts +25 -0
  1193. package/dist/compositions/attribute-card.js +18 -0
  1194. package/dist/compositions/card-grid/card-grid-context.d.ts +5 -0
  1195. package/dist/compositions/card-grid/card-grid-context.js +7 -0
  1196. package/dist/compositions/card-grid/card-grid-item.d.ts +16 -0
  1197. package/dist/compositions/card-grid/card-grid-item.js +21 -0
  1198. package/dist/compositions/card-grid/card-grid-metrics.d.ts +59 -0
  1199. package/dist/compositions/card-grid/card-grid-metrics.js +92 -0
  1200. package/dist/compositions/card-grid/card-grid-root.d.ts +39 -0
  1201. package/dist/compositions/card-grid/card-grid-root.js +27 -0
  1202. package/dist/compositions/card-grid/card-grid-rows.d.ts +32 -0
  1203. package/dist/compositions/card-grid/card-grid-rows.js +29 -0
  1204. package/dist/compositions/card-grid/card-grid-skeleton-item.d.ts +14 -0
  1205. package/dist/compositions/card-grid/card-grid-skeleton-item.js +16 -0
  1206. package/dist/compositions/card-grid.d.ts +5 -0
  1207. package/dist/compositions/card-grid.js +5 -0
  1208. package/dist/compositions/color-palette/color-palette-parts.d.ts +2 -0
  1209. package/dist/compositions/color-palette/color-palette-parts.js +2 -0
  1210. package/dist/compositions/color-palette/color-palette-root.d.ts +85 -0
  1211. package/dist/compositions/color-palette/color-palette-root.js +88 -0
  1212. package/dist/compositions/color-palette/palette-card.d.ts +19 -0
  1213. package/dist/compositions/color-palette/palette-card.js +77 -0
  1214. package/dist/compositions/color-palette/palette-helpers.d.ts +45 -0
  1215. package/dist/compositions/color-palette/palette-helpers.js +67 -0
  1216. package/dist/compositions/color-palette/palette-row.d.ts +25 -0
  1217. package/dist/compositions/color-palette/palette-row.js +26 -0
  1218. package/dist/compositions/color-palette/palette-select-indicator.d.ts +14 -0
  1219. package/dist/compositions/color-palette/palette-select-indicator.js +15 -0
  1220. package/dist/compositions/color-palette/palette-settings.d.ts +9 -0
  1221. package/dist/compositions/color-palette/palette-settings.js +8 -0
  1222. package/dist/compositions/color-palette/palette-sort.d.ts +72 -0
  1223. package/dist/compositions/color-palette/palette-sort.js +133 -0
  1224. package/dist/compositions/color-palette.d.ts +3 -0
  1225. package/dist/compositions/color-palette.js +3 -0
  1226. package/dist/compositions/cookie-banner/cookie-banner-root.d.ts +54 -0
  1227. package/dist/compositions/cookie-banner/cookie-banner-root.js +35 -0
  1228. package/dist/compositions/cookie-banner.d.ts +1 -0
  1229. package/dist/compositions/cookie-banner.js +1 -0
  1230. package/dist/compositions/data-grid/data-grid-anatomy.d.ts +5 -0
  1231. package/dist/compositions/data-grid/data-grid-anatomy.js +34 -0
  1232. package/dist/compositions/data-grid/data-grid-checkbox.d.ts +25 -0
  1233. package/dist/compositions/data-grid/data-grid-checkbox.js +33 -0
  1234. package/dist/compositions/data-grid/data-grid-context.d.ts +13 -0
  1235. package/dist/compositions/data-grid/data-grid-context.js +47 -0
  1236. package/dist/compositions/data-grid/data-grid-expand.d.ts +58 -0
  1237. package/dist/compositions/data-grid/data-grid-expand.js +59 -0
  1238. package/dist/compositions/data-grid/data-grid-filter-dropdown.d.ts +26 -0
  1239. package/dist/compositions/data-grid/data-grid-filter-dropdown.js +30 -0
  1240. package/dist/compositions/data-grid/data-grid-filter-option-list.d.ts +8 -0
  1241. package/dist/compositions/data-grid/data-grid-filter-option-list.js +15 -0
  1242. package/dist/compositions/data-grid/data-grid-filter-search-input.d.ts +9 -0
  1243. package/dist/compositions/data-grid/data-grid-filter-search-input.js +18 -0
  1244. package/dist/compositions/data-grid/data-grid-filter-selected-tags.d.ts +7 -0
  1245. package/dist/compositions/data-grid/data-grid-filter-selected-tags.js +12 -0
  1246. package/dist/compositions/data-grid/data-grid-filter-sort-section.d.ts +14 -0
  1247. package/dist/compositions/data-grid/data-grid-filter-sort-section.js +25 -0
  1248. package/dist/compositions/data-grid/data-grid-filterable-header.d.ts +30 -0
  1249. package/dist/compositions/data-grid/data-grid-filterable-header.js +71 -0
  1250. package/dist/compositions/data-grid/data-grid-root.d.ts +18 -0
  1251. package/dist/compositions/data-grid/data-grid-root.js +119 -0
  1252. package/dist/compositions/data-grid/data-grid-shell.d.ts +14 -0
  1253. package/dist/compositions/data-grid/data-grid-shell.js +8 -0
  1254. package/dist/compositions/data-grid/data-grid-sort-filter.d.ts +114 -0
  1255. package/dist/compositions/data-grid/data-grid-sort-filter.js +98 -0
  1256. package/dist/compositions/data-grid/data-grid-toolbar.d.ts +16 -0
  1257. package/dist/compositions/data-grid/data-grid-toolbar.js +13 -0
  1258. package/dist/compositions/data-grid/data-grid-types.d.ts +150 -0
  1259. package/dist/compositions/data-grid/data-grid-types.js +1 -0
  1260. package/dist/compositions/data-grid-column-filter/data-grid-column-filter-root.d.ts +33 -0
  1261. package/dist/compositions/data-grid-column-filter/data-grid-column-filter-root.js +62 -0
  1262. package/dist/compositions/data-grid-column-filter.d.ts +2 -0
  1263. package/dist/compositions/data-grid-column-filter.js +1 -0
  1264. package/dist/compositions/data-grid-column-header/data-grid-column-header-menu-items.d.ts +22 -0
  1265. package/dist/compositions/data-grid-column-header/data-grid-column-header-menu-items.js +40 -0
  1266. package/dist/compositions/data-grid-column-header/data-grid-column-header-root.d.ts +29 -0
  1267. package/dist/compositions/data-grid-column-header/data-grid-column-header-root.js +72 -0
  1268. package/dist/compositions/data-grid-column-header/data-grid-column-header-utils.d.ts +42 -0
  1269. package/dist/compositions/data-grid-column-header/data-grid-column-header-utils.js +74 -0
  1270. package/dist/compositions/data-grid-column-header.d.ts +2 -0
  1271. package/dist/compositions/data-grid-column-header.js +1 -0
  1272. package/dist/compositions/data-grid-column-visibility/data-grid-column-visibility-root.d.ts +22 -0
  1273. package/dist/compositions/data-grid-column-visibility/data-grid-column-visibility-root.js +25 -0
  1274. package/dist/compositions/data-grid-column-visibility.d.ts +1 -0
  1275. package/dist/compositions/data-grid-column-visibility.js +1 -0
  1276. package/dist/compositions/data-grid-pagination/data-grid-pagination-root.d.ts +62 -0
  1277. package/dist/compositions/data-grid-pagination/data-grid-pagination-root.js +96 -0
  1278. package/dist/compositions/data-grid-pagination.d.ts +2 -0
  1279. package/dist/compositions/data-grid-pagination.js +1 -0
  1280. package/dist/compositions/data-grid-table/data-grid-table-body.d.ts +54 -0
  1281. package/dist/compositions/data-grid-table/data-grid-table-body.js +140 -0
  1282. package/dist/compositions/data-grid-table/data-grid-table-header.d.ts +30 -0
  1283. package/dist/compositions/data-grid-table/data-grid-table-header.js +90 -0
  1284. package/dist/compositions/data-grid-table/data-grid-table-root.d.ts +17 -0
  1285. package/dist/compositions/data-grid-table/data-grid-table-root.js +108 -0
  1286. package/dist/compositions/data-grid-table/data-grid-table-styles.d.ts +10 -0
  1287. package/dist/compositions/data-grid-table/data-grid-table-styles.js +34 -0
  1288. package/dist/compositions/data-grid-table/use-data-grid-row-virtualizer.d.ts +25 -0
  1289. package/dist/compositions/data-grid-table/use-data-grid-row-virtualizer.js +51 -0
  1290. package/dist/compositions/data-grid-table.d.ts +1 -0
  1291. package/dist/compositions/data-grid-table.js +1 -0
  1292. package/dist/compositions/data-grid.d.ts +7 -0
  1293. package/dist/compositions/data-grid.js +6 -0
  1294. package/dist/compositions/delivery-banner/delivery-banner-root.d.ts +30 -0
  1295. package/dist/compositions/delivery-banner/delivery-banner-root.js +45 -0
  1296. package/dist/compositions/delivery-banner/use-remaining-time.d.ts +4 -0
  1297. package/dist/compositions/delivery-banner/use-remaining-time.js +22 -0
  1298. package/dist/compositions/delivery-banner.d.ts +1 -0
  1299. package/dist/compositions/delivery-banner.js +1 -0
  1300. package/dist/compositions/document-list/document-list-action.d.ts +6 -0
  1301. package/dist/compositions/document-list/document-list-action.js +8 -0
  1302. package/dist/compositions/document-list/document-list-checkbox.d.ts +12 -0
  1303. package/dist/compositions/document-list/document-list-checkbox.js +22 -0
  1304. package/dist/compositions/document-list/document-list-content.d.ts +7 -0
  1305. package/dist/compositions/document-list/document-list-content.js +9 -0
  1306. package/dist/compositions/document-list/document-list-context.d.ts +46 -0
  1307. package/dist/compositions/document-list/document-list-context.js +102 -0
  1308. package/dist/compositions/document-list/document-list-description.d.ts +6 -0
  1309. package/dist/compositions/document-list/document-list-description.js +7 -0
  1310. package/dist/compositions/document-list/document-list-icon.d.ts +10 -0
  1311. package/dist/compositions/document-list/document-list-icon.js +24 -0
  1312. package/dist/compositions/document-list/document-list-item.d.ts +21 -0
  1313. package/dist/compositions/document-list/document-list-item.js +56 -0
  1314. package/dist/compositions/document-list/document-list-meta.d.ts +6 -0
  1315. package/dist/compositions/document-list/document-list-meta.js +8 -0
  1316. package/dist/compositions/document-list/document-list-root.d.ts +31 -0
  1317. package/dist/compositions/document-list/document-list-root.js +28 -0
  1318. package/dist/compositions/document-list/document-list-select-all.d.ts +10 -0
  1319. package/dist/compositions/document-list/document-list-select-all.js +16 -0
  1320. package/dist/compositions/document-list/document-list-title.d.ts +6 -0
  1321. package/dist/compositions/document-list/document-list-title.js +7 -0
  1322. package/dist/compositions/document-list.d.ts +11 -0
  1323. package/dist/compositions/document-list.js +11 -0
  1324. package/dist/compositions/editorial-card/editorial-card-content.d.ts +10 -0
  1325. package/dist/compositions/editorial-card/editorial-card-content.js +9 -0
  1326. package/dist/compositions/editorial-card/editorial-card-media.d.ts +19 -0
  1327. package/dist/compositions/editorial-card/editorial-card-media.js +22 -0
  1328. package/dist/compositions/editorial-card/editorial-card-root.d.ts +57 -0
  1329. package/dist/compositions/editorial-card/editorial-card-root.js +84 -0
  1330. package/dist/compositions/editorial-card/editorial-card-stack.d.ts +21 -0
  1331. package/dist/compositions/editorial-card/editorial-card-stack.js +57 -0
  1332. package/dist/compositions/editorial-card/editorial-card-ticker.d.ts +31 -0
  1333. package/dist/compositions/editorial-card/editorial-card-ticker.js +81 -0
  1334. package/dist/compositions/editorial-card.d.ts +5 -0
  1335. package/dist/compositions/editorial-card.js +5 -0
  1336. package/dist/compositions/empty-state/empty-state-root.d.ts +46 -0
  1337. package/dist/compositions/empty-state/empty-state-root.js +40 -0
  1338. package/dist/compositions/empty-state.d.ts +1 -0
  1339. package/dist/compositions/empty-state.js +1 -0
  1340. package/dist/compositions/error-state/error-state-root.d.ts +39 -0
  1341. package/dist/compositions/error-state/error-state-root.js +30 -0
  1342. package/dist/compositions/error-state.d.ts +1 -0
  1343. package/dist/compositions/error-state.js +1 -0
  1344. package/dist/compositions/file-upload/file-upload-dropzone.d.ts +52 -0
  1345. package/dist/compositions/file-upload/file-upload-dropzone.js +50 -0
  1346. package/dist/compositions/file-upload/file-upload-item.d.ts +37 -0
  1347. package/dist/compositions/file-upload/file-upload-item.js +52 -0
  1348. package/dist/compositions/file-upload/file-upload-list.d.ts +39 -0
  1349. package/dist/compositions/file-upload/file-upload-list.js +46 -0
  1350. package/dist/compositions/file-upload/file-upload-trigger.d.ts +30 -0
  1351. package/dist/compositions/file-upload/file-upload-trigger.js +28 -0
  1352. package/dist/compositions/file-upload/file-upload-types.d.ts +45 -0
  1353. package/dist/compositions/file-upload/file-upload-types.js +1 -0
  1354. package/dist/compositions/file-upload/file-upload-utils.d.ts +20 -0
  1355. package/dist/compositions/file-upload/file-upload-utils.js +75 -0
  1356. package/dist/compositions/file-upload/use-file-upload.d.ts +33 -0
  1357. package/dist/compositions/file-upload/use-file-upload.js +242 -0
  1358. package/dist/compositions/file-upload.d.ts +5 -0
  1359. package/dist/compositions/file-upload.js +5 -0
  1360. package/dist/compositions/folder-tile/folder-tile-artwork.d.ts +28 -0
  1361. package/dist/compositions/folder-tile/folder-tile-artwork.js +132 -0
  1362. package/dist/compositions/folder-tile/folder-tile-materials.d.ts +8 -0
  1363. package/dist/compositions/folder-tile/folder-tile-materials.js +53 -0
  1364. package/dist/compositions/folder-tile/folder-tile-root.d.ts +20 -0
  1365. package/dist/compositions/folder-tile/folder-tile-root.js +175 -0
  1366. package/dist/compositions/folder-tile/folder-tile-svgs.d.ts +14 -0
  1367. package/dist/compositions/folder-tile/folder-tile-svgs.js +39 -0
  1368. package/dist/compositions/folder-tile/folder-tile-types.d.ts +45 -0
  1369. package/dist/compositions/folder-tile/folder-tile-types.js +1 -0
  1370. package/dist/compositions/folder-tile.d.ts +1 -0
  1371. package/dist/compositions/folder-tile.js +1 -0
  1372. package/dist/compositions/loading-state/loading-state-root.d.ts +41 -0
  1373. package/dist/compositions/loading-state/loading-state-root.js +36 -0
  1374. package/dist/compositions/loading-state.d.ts +1 -0
  1375. package/dist/compositions/loading-state.js +1 -0
  1376. package/dist/compositions/mega-menu/mega-menu-content.d.ts +20 -0
  1377. package/dist/compositions/mega-menu/mega-menu-content.js +38 -0
  1378. package/dist/compositions/mega-menu/mega-menu-context.d.ts +6 -0
  1379. package/dist/compositions/mega-menu/mega-menu-context.js +10 -0
  1380. package/dist/compositions/mega-menu/mega-menu-root.d.ts +32 -0
  1381. package/dist/compositions/mega-menu/mega-menu-root.js +39 -0
  1382. package/dist/compositions/mega-menu/mega-menu-section.d.ts +29 -0
  1383. package/dist/compositions/mega-menu/mega-menu-section.js +46 -0
  1384. package/dist/compositions/mega-menu.d.ts +3 -0
  1385. package/dist/compositions/mega-menu.js +3 -0
  1386. package/dist/compositions/mobile-navigation/mobile-navigation-anatomy.d.ts +5 -0
  1387. package/dist/compositions/mobile-navigation/mobile-navigation-anatomy.js +36 -0
  1388. package/dist/compositions/mobile-navigation/mobile-navigation-drawer.d.ts +27 -0
  1389. package/dist/compositions/mobile-navigation/mobile-navigation-drawer.js +37 -0
  1390. package/dist/compositions/mobile-navigation/mobile-navigation-header.d.ts +54 -0
  1391. package/dist/compositions/mobile-navigation/mobile-navigation-header.js +57 -0
  1392. package/dist/compositions/mobile-navigation/mobile-navigation-item.d.ts +51 -0
  1393. package/dist/compositions/mobile-navigation/mobile-navigation-item.js +41 -0
  1394. package/dist/compositions/mobile-navigation/mobile-navigation-profile.d.ts +33 -0
  1395. package/dist/compositions/mobile-navigation/mobile-navigation-profile.js +28 -0
  1396. package/dist/compositions/mobile-navigation/mobile-navigation-root.d.ts +36 -0
  1397. package/dist/compositions/mobile-navigation/mobile-navigation-root.js +37 -0
  1398. package/dist/compositions/mobile-navigation.d.ts +8 -0
  1399. package/dist/compositions/mobile-navigation.js +6 -0
  1400. package/dist/compositions/page-header/page-header-actions.d.ts +16 -0
  1401. package/dist/compositions/page-header/page-header-actions.js +23 -0
  1402. package/dist/compositions/page-header/page-header-context.d.ts +10 -0
  1403. package/dist/compositions/page-header/page-header-context.js +15 -0
  1404. package/dist/compositions/page-header/page-header-lead.d.ts +23 -0
  1405. package/dist/compositions/page-header/page-header-lead.js +28 -0
  1406. package/dist/compositions/page-header/page-header-root.d.ts +74 -0
  1407. package/dist/compositions/page-header/page-header-root.js +75 -0
  1408. package/dist/compositions/page-header/page-header-row.d.ts +22 -0
  1409. package/dist/compositions/page-header/page-header-row.js +28 -0
  1410. package/dist/compositions/page-header/page-header-slots.d.ts +30 -0
  1411. package/dist/compositions/page-header/page-header-slots.js +12 -0
  1412. package/dist/compositions/page-header/page-header-tabs.d.ts +16 -0
  1413. package/dist/compositions/page-header/page-header-tabs.js +17 -0
  1414. package/dist/compositions/page-header/page-header-title.d.ts +44 -0
  1415. package/dist/compositions/page-header/page-header-title.js +60 -0
  1416. package/dist/compositions/page-header.d.ts +8 -0
  1417. package/dist/compositions/page-header.js +8 -0
  1418. package/dist/compositions/page-toolbar/page-toolbar-applied.d.ts +45 -0
  1419. package/dist/compositions/page-toolbar/page-toolbar-applied.js +41 -0
  1420. package/dist/compositions/page-toolbar/page-toolbar-filter.d.ts +15 -0
  1421. package/dist/compositions/page-toolbar/page-toolbar-filter.js +12 -0
  1422. package/dist/compositions/page-toolbar/page-toolbar-root.d.ts +64 -0
  1423. package/dist/compositions/page-toolbar/page-toolbar-root.js +58 -0
  1424. package/dist/compositions/page-toolbar/page-toolbar-sort.d.ts +31 -0
  1425. package/dist/compositions/page-toolbar/page-toolbar-sort.js +28 -0
  1426. package/dist/compositions/page-toolbar/page-toolbar-table.d.ts +34 -0
  1427. package/dist/compositions/page-toolbar/page-toolbar-table.js +65 -0
  1428. package/dist/compositions/page-toolbar/use-stuck.d.ts +8 -0
  1429. package/dist/compositions/page-toolbar/use-stuck.js +44 -0
  1430. package/dist/compositions/page-toolbar.d.ts +5 -0
  1431. package/dist/compositions/page-toolbar.js +5 -0
  1432. package/dist/compositions/product-card/product-card-action.d.ts +11 -0
  1433. package/dist/compositions/product-card/product-card-action.js +42 -0
  1434. package/dist/compositions/product-card/product-card-actions-types.d.ts +128 -0
  1435. package/dist/compositions/product-card/product-card-actions-types.js +1 -0
  1436. package/dist/compositions/product-card/product-card-add-to-cart.d.ts +19 -0
  1437. package/dist/compositions/product-card/product-card-add-to-cart.js +28 -0
  1438. package/dist/compositions/product-card/product-card-availability.d.ts +14 -0
  1439. package/dist/compositions/product-card/product-card-availability.js +33 -0
  1440. package/dist/compositions/product-card/product-card-caption.d.ts +22 -0
  1441. package/dist/compositions/product-card/product-card-caption.js +46 -0
  1442. package/dist/compositions/product-card/product-card-category.d.ts +1 -0
  1443. package/dist/compositions/product-card/product-card-category.js +22 -0
  1444. package/dist/compositions/product-card/product-card-color-count.d.ts +1 -0
  1445. package/dist/compositions/product-card/product-card-color-count.js +84 -0
  1446. package/dist/compositions/product-card/product-card-compact-arm.d.ts +11 -0
  1447. package/dist/compositions/product-card/product-card-compact-arm.js +21 -0
  1448. package/dist/compositions/product-card/product-card-content-controls.d.ts +23 -0
  1449. package/dist/compositions/product-card/product-card-content-controls.js +80 -0
  1450. package/dist/compositions/product-card/product-card-content-types.d.ts +65 -0
  1451. package/dist/compositions/product-card/product-card-content-types.js +1 -0
  1452. package/dist/compositions/product-card/product-card-content.d.ts +7 -0
  1453. package/dist/compositions/product-card/product-card-content.js +32 -0
  1454. package/dist/compositions/product-card/product-card-context.d.ts +11 -0
  1455. package/dist/compositions/product-card/product-card-context.js +18 -0
  1456. package/dist/compositions/product-card/product-card-cost.d.ts +4 -0
  1457. package/dist/compositions/product-card/product-card-cost.js +21 -0
  1458. package/dist/compositions/product-card/product-card-full-arm.d.ts +28 -0
  1459. package/dist/compositions/product-card/product-card-full-arm.js +36 -0
  1460. package/dist/compositions/product-card/product-card-image-link.d.ts +9 -0
  1461. package/dist/compositions/product-card/product-card-image-link.js +22 -0
  1462. package/dist/compositions/product-card/product-card-image-types.d.ts +91 -0
  1463. package/dist/compositions/product-card/product-card-image-types.js +1 -0
  1464. package/dist/compositions/product-card/product-card-image.d.ts +12 -0
  1465. package/dist/compositions/product-card/product-card-image.js +175 -0
  1466. package/dist/compositions/product-card/product-card-inspiration-content.d.ts +13 -0
  1467. package/dist/compositions/product-card/product-card-inspiration-content.js +24 -0
  1468. package/dist/compositions/product-card/product-card-install-shot.d.ts +27 -0
  1469. package/dist/compositions/product-card/product-card-install-shot.js +31 -0
  1470. package/dist/compositions/product-card/product-card-link.d.ts +21 -0
  1471. package/dist/compositions/product-card/product-card-link.js +29 -0
  1472. package/dist/compositions/product-card/product-card-meta.d.ts +1 -0
  1473. package/dist/compositions/product-card/product-card-meta.js +26 -0
  1474. package/dist/compositions/product-card/product-card-primary-action.d.ts +32 -0
  1475. package/dist/compositions/product-card/product-card-primary-action.js +91 -0
  1476. package/dist/compositions/product-card/product-card-processing.d.ts +9 -0
  1477. package/dist/compositions/product-card/product-card-processing.js +22 -0
  1478. package/dist/compositions/product-card/product-card-product-types.d.ts +107 -0
  1479. package/dist/compositions/product-card/product-card-product-types.js +1 -0
  1480. package/dist/compositions/product-card/product-card-provider-types.d.ts +259 -0
  1481. package/dist/compositions/product-card/product-card-provider-types.js +1 -0
  1482. package/dist/compositions/product-card/product-card-provider.d.ts +15 -0
  1483. package/dist/compositions/product-card/product-card-provider.js +204 -0
  1484. package/dist/compositions/product-card/product-card-quick-view.d.ts +20 -0
  1485. package/dist/compositions/product-card/product-card-quick-view.js +44 -0
  1486. package/dist/compositions/product-card/product-card-root.d.ts +39 -0
  1487. package/dist/compositions/product-card/product-card-root.js +46 -0
  1488. package/dist/compositions/product-card/product-card-skeleton.d.ts +28 -0
  1489. package/dist/compositions/product-card/product-card-skeleton.js +31 -0
  1490. package/dist/compositions/product-card/product-card-standard-content.d.ts +17 -0
  1491. package/dist/compositions/product-card/product-card-standard-content.js +19 -0
  1492. package/dist/compositions/product-card/product-card-status-badge.d.ts +10 -0
  1493. package/dist/compositions/product-card/product-card-status-badge.js +27 -0
  1494. package/dist/compositions/product-card/product-card-swatch-add.d.ts +14 -0
  1495. package/dist/compositions/product-card/product-card-swatch-add.js +51 -0
  1496. package/dist/compositions/product-card/product-card-swatch-selector.d.ts +2 -0
  1497. package/dist/compositions/product-card/product-card-swatch-selector.js +23 -0
  1498. package/dist/compositions/product-card/product-card-swatch.d.ts +22 -0
  1499. package/dist/compositions/product-card/product-card-swatch.js +58 -0
  1500. package/dist/compositions/product-card/product-card-tools-activity.d.ts +17 -0
  1501. package/dist/compositions/product-card/product-card-tools-activity.js +42 -0
  1502. package/dist/compositions/product-card/product-card-tools-types.d.ts +16 -0
  1503. package/dist/compositions/product-card/product-card-tools-types.js +1 -0
  1504. package/dist/compositions/product-card/product-card-tools.d.ts +9 -0
  1505. package/dist/compositions/product-card/product-card-tools.js +58 -0
  1506. package/dist/compositions/product-card/product-card-types.d.ts +10 -0
  1507. package/dist/compositions/product-card/product-card-types.js +1 -0
  1508. package/dist/compositions/product-card.d.ts +24 -0
  1509. package/dist/compositions/product-card.js +23 -0
  1510. package/dist/compositions/product-specifications-selector/product-specifications-fields.d.ts +33 -0
  1511. package/dist/compositions/product-specifications-selector/product-specifications-fields.js +99 -0
  1512. package/dist/compositions/product-specifications-selector/product-specifications-selector.d.ts +44 -0
  1513. package/dist/compositions/product-specifications-selector/product-specifications-selector.js +80 -0
  1514. package/dist/compositions/product-specifications-selector/product-specifications-types.d.ts +22 -0
  1515. package/dist/compositions/product-specifications-selector/product-specifications-types.js +12 -0
  1516. package/dist/compositions/product-specifications-selector/use-variant-highlighting.d.ts +26 -0
  1517. package/dist/compositions/product-specifications-selector/use-variant-highlighting.js +102 -0
  1518. package/dist/compositions/product-specifications-selector.d.ts +1 -0
  1519. package/dist/compositions/product-specifications-selector.js +1 -0
  1520. package/dist/compositions/prompt-panel/prompt-panel-anatomy.d.ts +5 -0
  1521. package/dist/compositions/prompt-panel/prompt-panel-anatomy.js +34 -0
  1522. package/dist/compositions/prompt-panel/prompt-panel-body.d.ts +25 -0
  1523. package/dist/compositions/prompt-panel/prompt-panel-body.js +26 -0
  1524. package/dist/compositions/prompt-panel/prompt-panel-freeform.d.ts +50 -0
  1525. package/dist/compositions/prompt-panel/prompt-panel-freeform.js +59 -0
  1526. package/dist/compositions/prompt-panel/prompt-panel-header.d.ts +37 -0
  1527. package/dist/compositions/prompt-panel/prompt-panel-header.js +32 -0
  1528. package/dist/compositions/prompt-panel/prompt-panel-option.d.ts +33 -0
  1529. package/dist/compositions/prompt-panel/prompt-panel-option.js +37 -0
  1530. package/dist/compositions/prompt-panel/prompt-panel-root.d.ts +39 -0
  1531. package/dist/compositions/prompt-panel/prompt-panel-root.js +32 -0
  1532. package/dist/compositions/prompt-panel/prompt-panel-stage.d.ts +47 -0
  1533. package/dist/compositions/prompt-panel/prompt-panel-stage.js +161 -0
  1534. package/dist/compositions/prompt-panel/prompt-panel-view.d.ts +67 -0
  1535. package/dist/compositions/prompt-panel/prompt-panel-view.js +59 -0
  1536. package/dist/compositions/prompt-panel/use-prompt-panel-keyboard.d.ts +41 -0
  1537. package/dist/compositions/prompt-panel/use-prompt-panel-keyboard.js +55 -0
  1538. package/dist/compositions/prompt-panel.d.ts +17 -0
  1539. package/dist/compositions/prompt-panel.js +9 -0
  1540. package/dist/compositions/quick-view/quick-view-body.d.ts +15 -0
  1541. package/dist/compositions/quick-view/quick-view-body.js +14 -0
  1542. package/dist/compositions/quick-view/quick-view-content.d.ts +16 -0
  1543. package/dist/compositions/quick-view/quick-view-content.js +28 -0
  1544. package/dist/compositions/quick-view/quick-view-context.d.ts +11 -0
  1545. package/dist/compositions/quick-view/quick-view-context.js +11 -0
  1546. package/dist/compositions/quick-view/quick-view-footer.d.ts +12 -0
  1547. package/dist/compositions/quick-view/quick-view-footer.js +13 -0
  1548. package/dist/compositions/quick-view/quick-view-header.d.ts +24 -0
  1549. package/dist/compositions/quick-view/quick-view-header.js +16 -0
  1550. package/dist/compositions/quick-view/quick-view-layout.d.ts +32 -0
  1551. package/dist/compositions/quick-view/quick-view-layout.js +31 -0
  1552. package/dist/compositions/quick-view/quick-view-root.d.ts +37 -0
  1553. package/dist/compositions/quick-view/quick-view-root.js +64 -0
  1554. package/dist/compositions/quick-view.d.ts +6 -0
  1555. package/dist/compositions/quick-view.js +6 -0
  1556. package/dist/compositions/section-header/section-header-root.d.ts +67 -0
  1557. package/dist/compositions/section-header/section-header-root.js +78 -0
  1558. package/dist/compositions/section-header/section-header.test-d.d.ts +31 -0
  1559. package/dist/compositions/section-header/section-header.test-d.js +1 -0
  1560. package/dist/compositions/section-header.d.ts +1 -0
  1561. package/dist/compositions/section-header.js +1 -0
  1562. package/dist/compositions/settings-card/settings-card-anatomy.d.ts +5 -0
  1563. package/dist/compositions/settings-card/settings-card-anatomy.js +34 -0
  1564. package/dist/compositions/settings-card/settings-card-root.d.ts +55 -0
  1565. package/dist/compositions/settings-card/settings-card-root.js +43 -0
  1566. package/dist/compositions/settings-card/settings-row.d.ts +40 -0
  1567. package/dist/compositions/settings-card/settings-row.js +28 -0
  1568. package/dist/compositions/settings-card.d.ts +3 -0
  1569. package/dist/compositions/settings-card.js +3 -0
  1570. package/dist/compositions/sidebar/sidebar-anatomy.d.ts +5 -0
  1571. package/dist/compositions/sidebar/sidebar-anatomy.js +75 -0
  1572. package/dist/compositions/sidebar/sidebar-constants.d.ts +93 -0
  1573. package/dist/compositions/sidebar/sidebar-constants.js +99 -0
  1574. package/dist/compositions/sidebar/sidebar-content.d.ts +3 -0
  1575. package/dist/compositions/sidebar/sidebar-content.js +6 -0
  1576. package/dist/compositions/sidebar/sidebar-cookie.d.ts +6 -0
  1577. package/dist/compositions/sidebar/sidebar-cookie.js +24 -0
  1578. package/dist/compositions/sidebar/sidebar-footer.d.ts +6 -0
  1579. package/dist/compositions/sidebar/sidebar-footer.js +14 -0
  1580. package/dist/compositions/sidebar/sidebar-group.d.ts +14 -0
  1581. package/dist/compositions/sidebar/sidebar-group.js +36 -0
  1582. package/dist/compositions/sidebar/sidebar-header.d.ts +3 -0
  1583. package/dist/compositions/sidebar/sidebar-header.js +5 -0
  1584. package/dist/compositions/sidebar/sidebar-input.d.ts +4 -0
  1585. package/dist/compositions/sidebar/sidebar-input.js +5 -0
  1586. package/dist/compositions/sidebar/sidebar-inset-guard.d.ts +7 -0
  1587. package/dist/compositions/sidebar/sidebar-inset-guard.js +18 -0
  1588. package/dist/compositions/sidebar/sidebar-inset.d.ts +38 -0
  1589. package/dist/compositions/sidebar/sidebar-inset.js +51 -0
  1590. package/dist/compositions/sidebar/sidebar-layout-header.d.ts +54 -0
  1591. package/dist/compositions/sidebar/sidebar-layout-header.js +94 -0
  1592. package/dist/compositions/sidebar/sidebar-menu-action.d.ts +8 -0
  1593. package/dist/compositions/sidebar/sidebar-menu-action.js +21 -0
  1594. package/dist/compositions/sidebar/sidebar-menu-badge.d.ts +5 -0
  1595. package/dist/compositions/sidebar/sidebar-menu-badge.js +6 -0
  1596. package/dist/compositions/sidebar/sidebar-menu-button.d.ts +38 -0
  1597. package/dist/compositions/sidebar/sidebar-menu-button.js +135 -0
  1598. package/dist/compositions/sidebar/sidebar-menu-label.d.ts +9 -0
  1599. package/dist/compositions/sidebar/sidebar-menu-label.js +16 -0
  1600. package/dist/compositions/sidebar/sidebar-menu-skeleton.d.ts +10 -0
  1601. package/dist/compositions/sidebar/sidebar-menu-skeleton.js +34 -0
  1602. package/dist/compositions/sidebar/sidebar-menu-sub.d.ts +39 -0
  1603. package/dist/compositions/sidebar/sidebar-menu-sub.js +41 -0
  1604. package/dist/compositions/sidebar/sidebar-menu.d.ts +11 -0
  1605. package/dist/compositions/sidebar/sidebar-menu.js +16 -0
  1606. package/dist/compositions/sidebar/sidebar-motion-config.d.ts +21 -0
  1607. package/dist/compositions/sidebar/sidebar-motion-config.js +14 -0
  1608. package/dist/compositions/sidebar/sidebar-panel-guard.d.ts +8 -0
  1609. package/dist/compositions/sidebar/sidebar-panel-guard.js +16 -0
  1610. package/dist/compositions/sidebar/sidebar-panel.d.ts +55 -0
  1611. package/dist/compositions/sidebar/sidebar-panel.js +59 -0
  1612. package/dist/compositions/sidebar/sidebar-provider.d.ts +70 -0
  1613. package/dist/compositions/sidebar/sidebar-provider.js +120 -0
  1614. package/dist/compositions/sidebar/sidebar-resize-handle.d.ts +24 -0
  1615. package/dist/compositions/sidebar/sidebar-resize-handle.js +159 -0
  1616. package/dist/compositions/sidebar/sidebar-root.d.ts +38 -0
  1617. package/dist/compositions/sidebar/sidebar-root.js +156 -0
  1618. package/dist/compositions/sidebar/sidebar-separator.d.ts +9 -0
  1619. package/dist/compositions/sidebar/sidebar-separator.js +5 -0
  1620. package/dist/compositions/sidebar/sidebar-skip-link.d.ts +14 -0
  1621. package/dist/compositions/sidebar/sidebar-skip-link.js +11 -0
  1622. package/dist/compositions/sidebar/sidebar-trigger.d.ts +12 -0
  1623. package/dist/compositions/sidebar/sidebar-trigger.js +19 -0
  1624. package/dist/compositions/sidebar/use-sidebar-open-state.d.ts +14 -0
  1625. package/dist/compositions/sidebar/use-sidebar-open-state.js +25 -0
  1626. package/dist/compositions/sidebar/use-sidebar-resize-state.d.ts +34 -0
  1627. package/dist/compositions/sidebar/use-sidebar-resize-state.js +62 -0
  1628. package/dist/compositions/sidebar.d.ts +29 -0
  1629. package/dist/compositions/sidebar.js +28 -0
  1630. package/dist/compositions/site-footer/site-footer-bar.d.ts +37 -0
  1631. package/dist/compositions/site-footer/site-footer-bar.js +30 -0
  1632. package/dist/compositions/site-footer/site-footer-context.d.ts +3 -0
  1633. package/dist/compositions/site-footer/site-footer-context.js +5 -0
  1634. package/dist/compositions/site-footer/site-footer-root.d.ts +80 -0
  1635. package/dist/compositions/site-footer/site-footer-root.js +75 -0
  1636. package/dist/compositions/site-footer.d.ts +2 -0
  1637. package/dist/compositions/site-footer.js +2 -0
  1638. package/dist/compositions/swatch-fan/swatch-fan-cards.d.ts +33 -0
  1639. package/dist/compositions/swatch-fan/swatch-fan-cards.js +251 -0
  1640. package/dist/compositions/swatch-fan/swatch-fan-engine.d.ts +29 -0
  1641. package/dist/compositions/swatch-fan/swatch-fan-engine.js +154 -0
  1642. package/dist/compositions/swatch-fan/swatch-fan-hover.d.ts +25 -0
  1643. package/dist/compositions/swatch-fan/swatch-fan-hover.js +43 -0
  1644. package/dist/compositions/swatch-fan/swatch-fan-root.d.ts +91 -0
  1645. package/dist/compositions/swatch-fan/swatch-fan-root.js +39 -0
  1646. package/dist/compositions/swatch-fan/swatch-fan-tile.d.ts +24 -0
  1647. package/dist/compositions/swatch-fan/swatch-fan-tile.js +28 -0
  1648. package/dist/compositions/swatch-fan/swatch-fan-types.d.ts +49 -0
  1649. package/dist/compositions/swatch-fan/swatch-fan-types.js +4 -0
  1650. package/dist/compositions/swatch-fan/swatch-fan.motion.d.ts +6 -0
  1651. package/dist/compositions/swatch-fan/swatch-fan.motion.js +21 -0
  1652. package/dist/compositions/swatch-fan/use-swatch-fan-engine.d.ts +19 -0
  1653. package/dist/compositions/swatch-fan/use-swatch-fan-engine.js +20 -0
  1654. package/dist/compositions/swatch-fan.d.ts +1 -0
  1655. package/dist/compositions/swatch-fan.js +1 -0
  1656. package/dist/compositions/tag-selector/tag-selector-color-swatches.d.ts +10 -0
  1657. package/dist/compositions/tag-selector/tag-selector-color-swatches.js +14 -0
  1658. package/dist/compositions/tag-selector/tag-selector-content.d.ts +12 -0
  1659. package/dist/compositions/tag-selector/tag-selector-content.js +18 -0
  1660. package/dist/compositions/tag-selector/tag-selector-context.d.ts +130 -0
  1661. package/dist/compositions/tag-selector/tag-selector-context.js +48 -0
  1662. package/dist/compositions/tag-selector/tag-selector-item.d.ts +14 -0
  1663. package/dist/compositions/tag-selector/tag-selector-item.js +99 -0
  1664. package/dist/compositions/tag-selector/tag-selector-list.d.ts +11 -0
  1665. package/dist/compositions/tag-selector/tag-selector-list.js +100 -0
  1666. package/dist/compositions/tag-selector/tag-selector-root.d.ts +57 -0
  1667. package/dist/compositions/tag-selector/tag-selector-root.js +67 -0
  1668. package/dist/compositions/tag-selector/tag-selector-search.d.ts +17 -0
  1669. package/dist/compositions/tag-selector/tag-selector-search.js +91 -0
  1670. package/dist/compositions/tag-selector/tag-selector-trigger.d.ts +19 -0
  1671. package/dist/compositions/tag-selector/tag-selector-trigger.js +42 -0
  1672. package/dist/compositions/tag-selector/tag-selector-types.d.ts +86 -0
  1673. package/dist/compositions/tag-selector/tag-selector-types.js +1 -0
  1674. package/dist/compositions/tag-selector/use-tag-selector-context-value.d.ts +15 -0
  1675. package/dist/compositions/tag-selector/use-tag-selector-context-value.js +79 -0
  1676. package/dist/compositions/tag-selector/use-tag-selector.d.ts +28 -0
  1677. package/dist/compositions/tag-selector/use-tag-selector.js +350 -0
  1678. package/dist/compositions/tag-selector.d.ts +9 -0
  1679. package/dist/compositions/tag-selector.js +7 -0
  1680. package/dist/compositions/thinking-trace/thinking-trace-root.d.ts +23 -0
  1681. package/dist/compositions/thinking-trace/thinking-trace-root.js +49 -0
  1682. package/dist/compositions/thinking-trace/thinking-trace-row.d.ts +12 -0
  1683. package/dist/compositions/thinking-trace/thinking-trace-row.js +47 -0
  1684. package/dist/compositions/thinking-trace/types.d.ts +32 -0
  1685. package/dist/compositions/thinking-trace/types.js +1 -0
  1686. package/dist/compositions/thinking-trace.d.ts +1 -0
  1687. package/dist/compositions/thinking-trace.js +1 -0
  1688. package/dist/compositions/variant-selector/variant-selector-context.d.ts +17 -0
  1689. package/dist/compositions/variant-selector/variant-selector-context.js +18 -0
  1690. package/dist/compositions/variant-selector/variant-selector-item-label.d.ts +7 -0
  1691. package/dist/compositions/variant-selector/variant-selector-item-label.js +4 -0
  1692. package/dist/compositions/variant-selector/variant-selector-item.d.ts +28 -0
  1693. package/dist/compositions/variant-selector/variant-selector-item.js +28 -0
  1694. package/dist/compositions/variant-selector/variant-selector-root.d.ts +53 -0
  1695. package/dist/compositions/variant-selector/variant-selector-root.js +44 -0
  1696. package/dist/compositions/variant-selector/variant-selector-state.d.ts +4 -0
  1697. package/dist/compositions/variant-selector/variant-selector-state.js +9 -0
  1698. package/dist/compositions/variant-selector.d.ts +2 -0
  1699. package/dist/compositions/variant-selector.js +2 -0
  1700. package/dist/data/component-categories.d.ts +42 -0
  1701. package/dist/data/component-categories.js +72 -0
  1702. package/dist/data/countries.d.ts +19 -0
  1703. package/dist/data/countries.js +26 -0
  1704. package/dist/data/decision-trees.d.ts +67 -0
  1705. package/dist/data/decision-trees.js +567 -0
  1706. package/dist/data/docs-manifest.d.ts +76 -0
  1707. package/dist/data/docs-manifest.js +23061 -0
  1708. package/dist/data/material-colors.d.ts +58 -0
  1709. package/dist/data/material-colors.js +440 -0
  1710. package/dist/data/token-gallery.d.ts +128 -0
  1711. package/dist/data/token-gallery.js +518 -0
  1712. package/dist/hooks/use-breakpoint.d.ts +12 -0
  1713. package/dist/hooks/use-breakpoint.js +17 -0
  1714. package/dist/hooks/use-controllable-state.d.ts +17 -0
  1715. package/dist/hooks/use-controllable-state.js +22 -0
  1716. package/dist/hooks/use-debounced-value.d.ts +12 -0
  1717. package/dist/hooks/use-debounced-value.js +25 -0
  1718. package/dist/hooks/use-drag-scroll.d.ts +40 -0
  1719. package/dist/hooks/use-drag-scroll.js +109 -0
  1720. package/dist/hooks/use-mobile.d.ts +9 -0
  1721. package/dist/hooks/use-mobile.js +14 -0
  1722. package/dist/hooks/use-pointer-drag.d.ts +66 -0
  1723. package/dist/hooks/use-pointer-drag.js +88 -0
  1724. package/dist/hooks/use-pointer-position.d.ts +11 -0
  1725. package/dist/hooks/use-pointer-position.js +27 -0
  1726. package/dist/hooks/use-scroll-edges.d.ts +21 -0
  1727. package/dist/hooks/use-scroll-edges.js +57 -0
  1728. package/dist/hooks/use-shake.d.ts +36 -0
  1729. package/dist/hooks/use-shake.js +42 -0
  1730. package/dist/hooks/use-viewport.d.ts +18 -0
  1731. package/dist/hooks/use-viewport.js +29 -0
  1732. package/dist/icons/index.d.ts +16 -0
  1733. package/dist/icons/index.js +23 -0
  1734. package/dist/styles/fonts/GeistMono-OFL.txt +92 -0
  1735. package/dist/styles/fonts/GeistMono-Variable.woff2 +0 -0
  1736. package/dist/styles/fonts/InterVariable.woff2 +0 -0
  1737. package/dist/styles/fonts/OFL.txt +92 -0
  1738. package/dist/styles/fonts.css +55 -0
  1739. package/dist/styles/index.css +2068 -0
  1740. package/dist/styles/theme.css +26 -0
  1741. package/dist/tokens/alignment.d.ts +12 -0
  1742. package/dist/tokens/alignment.js +6 -0
  1743. package/dist/tokens/anatomy.d.ts +30 -0
  1744. package/dist/tokens/anatomy.js +16 -0
  1745. package/dist/tokens/border.d.ts +9 -0
  1746. package/dist/tokens/border.js +12 -0
  1747. package/dist/tokens/breakpoint.d.ts +20 -0
  1748. package/dist/tokens/breakpoint.js +25 -0
  1749. package/dist/tokens/color.d.ts +38 -0
  1750. package/dist/tokens/color.js +230 -0
  1751. package/dist/tokens/component-sizes.d.ts +14 -0
  1752. package/dist/tokens/component-sizes.js +22 -0
  1753. package/dist/tokens/control-line.d.ts +8 -0
  1754. package/dist/tokens/control-line.js +8 -0
  1755. package/dist/tokens/direction.d.ts +6 -0
  1756. package/dist/tokens/direction.js +1 -0
  1757. package/dist/tokens/element.d.ts +46 -0
  1758. package/dist/tokens/element.js +47 -0
  1759. package/dist/tokens/emphasis.d.ts +22 -0
  1760. package/dist/tokens/emphasis.js +26 -0
  1761. package/dist/tokens/focus-input.d.ts +33 -0
  1762. package/dist/tokens/focus-input.js +77 -0
  1763. package/dist/tokens/focus-ring.d.ts +38 -0
  1764. package/dist/tokens/focus-ring.js +79 -0
  1765. package/dist/tokens/has-error-input.d.ts +5 -0
  1766. package/dist/tokens/has-error-input.js +16 -0
  1767. package/dist/tokens/heading-level.d.ts +12 -0
  1768. package/dist/tokens/heading-level.js +11 -0
  1769. package/dist/tokens/icon-component.d.ts +16 -0
  1770. package/dist/tokens/icon-component.js +13 -0
  1771. package/dist/tokens/input-shell.d.ts +32 -0
  1772. package/dist/tokens/input-shell.js +32 -0
  1773. package/dist/tokens/justify.d.ts +5 -0
  1774. package/dist/tokens/justify.js +1 -0
  1775. package/dist/tokens/menu-content.d.ts +67 -0
  1776. package/dist/tokens/menu-content.js +99 -0
  1777. package/dist/tokens/motion.d.ts +131 -0
  1778. package/dist/tokens/motion.js +128 -0
  1779. package/dist/tokens/orientation.d.ts +14 -0
  1780. package/dist/tokens/orientation.js +11 -0
  1781. package/dist/tokens/overlay-styles.d.ts +54 -0
  1782. package/dist/tokens/overlay-styles.js +54 -0
  1783. package/dist/tokens/radius-tokens.d.ts +45 -0
  1784. package/dist/tokens/radius-tokens.js +44 -0
  1785. package/dist/tokens/radius.d.ts +13 -0
  1786. package/dist/tokens/radius.js +16 -0
  1787. package/dist/tokens/responsive-classes.d.ts +154 -0
  1788. package/dist/tokens/responsive-classes.js +321 -0
  1789. package/dist/tokens/responsive.d.ts +168 -0
  1790. package/dist/tokens/responsive.js +270 -0
  1791. package/dist/tokens/shadows.d.ts +67 -0
  1792. package/dist/tokens/shadows.js +64 -0
  1793. package/dist/tokens/size.d.ts +43 -0
  1794. package/dist/tokens/size.js +46 -0
  1795. package/dist/tokens/square-control.d.ts +13 -0
  1796. package/dist/tokens/square-control.js +21 -0
  1797. package/dist/tokens/swatch.d.ts +42 -0
  1798. package/dist/tokens/swatch.js +80 -0
  1799. package/dist/tokens/tone.d.ts +27 -0
  1800. package/dist/tokens/tone.js +32 -0
  1801. package/dist/tokens/type-role.d.ts +12 -0
  1802. package/dist/tokens/type-role.js +21 -0
  1803. package/dist/tokens/wrap.d.ts +4 -0
  1804. package/dist/tokens/wrap.js +1 -0
  1805. package/dist/utils/cn-theme.d.ts +44 -0
  1806. package/dist/utils/cn-theme.js +119 -0
  1807. package/dist/utils/cn.d.ts +14 -0
  1808. package/dist/utils/cn.js +22 -0
  1809. package/dist/utils/confetti.d.ts +32 -0
  1810. package/dist/utils/confetti.js +88 -0
  1811. package/dist/utils/css-variables.d.ts +9 -0
  1812. package/dist/utils/css-variables.js +12 -0
  1813. package/dist/utils/data-grid-table.d.ts +80 -0
  1814. package/dist/utils/data-grid-table.js +17 -0
  1815. package/dist/utils/dev-issue.d.ts +2 -0
  1816. package/dist/utils/dev-issue.js +8 -0
  1817. package/dist/utils/has-child-nodes.d.ts +8 -0
  1818. package/dist/utils/has-child-nodes.js +15 -0
  1819. package/dist/utils/is-development-browser.d.ts +7 -0
  1820. package/dist/utils/is-development-browser.js +16 -0
  1821. package/dist/utils/keyboard.d.ts +17 -0
  1822. package/dist/utils/keyboard.js +97 -0
  1823. package/dist/utils/motion-style.d.ts +15 -0
  1824. package/dist/utils/motion-style.js +13 -0
  1825. package/dist/utils/random-color.d.ts +7 -0
  1826. package/dist/utils/random-color.js +13 -0
  1827. package/dist/utils/resolve-state-update.d.ts +7 -0
  1828. package/dist/utils/resolve-state-update.js +6 -0
  1829. package/dist/utils/type-guards.d.ts +8 -0
  1830. package/dist/utils/type-guards.js +8 -0
  1831. package/dist/utils/typed-entries.d.ts +11 -0
  1832. package/dist/utils/typed-entries.js +11 -0
  1833. package/dist/utils/warn-missing-aria-label.d.ts +16 -0
  1834. package/dist/utils/warn-missing-aria-label.js +26 -0
  1835. package/dist/utils/with-test-id.d.ts +16 -0
  1836. package/dist/utils/with-test-id.js +1 -0
  1837. package/lint/README.md +116 -0
  1838. package/lint/doctrine-rules.mjs +111 -0
  1839. package/lint/oxlint/fixtures/allowed.tsx +12 -0
  1840. package/lint/oxlint/fixtures/fixture.config.mjs +29 -0
  1841. package/lint/oxlint/fixtures/invalid.tsx +24 -0
  1842. package/lint/oxlint/fixtures/layout-only.tsx +26 -0
  1843. package/lint/oxlint/fixtures/render-as-invalid.tsx +11 -0
  1844. package/lint/oxlint/fixtures/render-as-valid.tsx +14 -0
  1845. package/lint/oxlint/fixtures/valid.tsx +18 -0
  1846. package/lint/oxlint/index.d.mts +24 -0
  1847. package/lint/oxlint/index.mjs +14 -0
  1848. package/lint/oxlint/no-naked-element.mjs +259 -0
  1849. package/lint/oxlint/no-naked-element.test.ts +155 -0
  1850. package/lint/oxlint/no-render-layout-as.mjs +106 -0
  1851. package/lint/oxlint/no-render-layout-as.test.ts +81 -0
  1852. package/lint/scan-classes.d.mts +5 -0
  1853. package/lint/scan-classes.mjs +255 -0
  1854. package/lint/tokens.d.mts +16 -0
  1855. package/lint/tokens.mjs +130 -0
  1856. package/lint/type-case.d.mts +12 -0
  1857. package/lint/type-case.mjs +33 -0
  1858. package/package.json +902 -0
package/agent-docs.md ADDED
@@ -0,0 +1,2104 @@
1
+ # @instruments/materia-ui - agent guidance
2
+
3
+ <!-- GENERATED by scripts/generate-agent-docs.mjs - DO NOT EDIT.
4
+ Author `@bestPractice` JSDoc tags on public exports; regenerate with
5
+ `pnpm generate:agent-docs`. -->
6
+
7
+ Do and don't guidance for coding agents, one section per component, taken from `@bestPractice` JSDoc tags. It ships in the package, so an agent in an app can read it at `node_modules/@instruments/materia-ui/agent-docs.md`.
8
+
9
+ ## Rules
10
+
11
+ - Reach for a component before writing markup. Find one here or in `@instruments/materia-ui/data/docs-manifest`, and import it from the path under its heading. There is no root barrel.
12
+ - Never invent a prop. Use only props in the component's types or the docs manifest. If what you need doesn't exist, say so rather than guessing.
13
+ - Style with the system's vocabulary: `tone`, `emphasis`, `size` and the theme's classes. No raw colours and no arbitrary values such as `mt-[13px]`.
14
+ - Import icons through `Icon` and primitives through these components, never from `lucide-react` or `@base-ui/react` directly.
15
+ - Check your work with the `materia-ui-lint` class scanner (`--all` for every rule). The Oxlint preset is `@instruments/materia-ui/lint/oxlint`.
16
+
17
+ Documented components: 196
18
+
19
+ ## AccordionRoot
20
+
21
+ `@instruments/materia-ui/components/accordion`
22
+
23
+ Collapsible panel container that wraps Base UI Accordion, supporting one (default) or several (`multiple`) open items. Works controlled (`value`) or uncontrolled (`defaultValue`); compose with AccordionItem, AccordionTrigger, and AccordionContent. Values are always arrays of item `value`s.
24
+
25
+ - Leave `multiple` off for one-at-a-time panels or set it to allow several open at once; `value`/`defaultValue` are arrays either way, and an open item can always be closed again.
26
+ - Reach for `Collapsible` instead when there is a single expandable region - `Accordion` is for a set of grouped items keyed by `value`.
27
+ - Children must be `AccordionItem`s (each with `AccordionTrigger`/`AccordionContent`); the item's `value` is what `value`/`defaultValue` match against.
28
+
29
+ ## Alert
30
+
31
+ `@instruments/materia-ui/components/alert`
32
+
33
+ Callout banner for important messages, composed with `AlertTitle` and `AlertDescription`.
34
+
35
+ Lay out as a two-column grid: a direct-child `<svg>` is auto-detected and given its own icon column, otherwise the text spans full width. Renders `role="alert"` so screen readers announce it; `tone="danger"` recolours the text and description for error states.
36
+
37
+ - Use `Alert` for a persistent inline message block; a transient, auto-dismissing notification is a toast (`Toaster` and `toast()` from `components/toast`).
38
+ - Compose `AlertTitle` / `AlertDescription` as children and render a direct-child `<svg>` for the auto-detected icon column; `tone="danger"` recolours for errors.
39
+ - It renders `role="alert"`, so AT announces it on mount - keep it a notice, not a container for heavy interactive UI.
40
+
41
+ ## AlertDialog
42
+
43
+ `@instruments/materia-ui/components/alert-dialog`
44
+
45
+ Modal confirmation dialog that interrupts the user for a decision that can't be dismissed by clicking outside - use for destructive or irreversible actions. Open state is controlled (`open`) or uncontrolled (`defaultOpen`); compose with AlertDialogTrigger and AlertDialogContent.
46
+
47
+ - Use `AlertDialog` only for a confirm / warn / destructive decision (Cancel + Action); a general modal form or details view is a `Dialog`.
48
+ - Route every destructive confirmation here, never a plain `Dialog` - unlike `Dialog` it won't dismiss on outside-click / Esc, so the choice stays deliberate.
49
+ - Give the destructive `AlertDialogAction` `tone="danger"` and keep the safe escape as `AlertDialogCancel`.
50
+
51
+ ## Anchor
52
+
53
+ `@instruments/materia-ui/components/anchor`
54
+
55
+ Inline text link - a styled `<a>` with a token underline, an offset, and the shared focus ring. `variant="muted"` sits quietly in body copy until hovered. Pass a framework link to `render` (e.g. `next/link`) to keep client-side navigation. RSC-safe.
56
+
57
+ - Anchor is for text links, whether inside prose or standing alone (a caption, an index row, a footer link); for a button-shaped navigation action give `Button` a `render` link instead.
58
+ - Compose routers via `render` (`<Anchor render={<Link href="…" />}>…</Anchor>`) - never nest a raw `<a>` inside Anchor's own `<a>`.
59
+ - Add `icon` or `suffixIcon` (as on `Button`) for an arrow or external-link cue; the icon sits outside the underline and wraps with the text, and is decorative, so the link text must still name the destination.
60
+ - Use `variant="muted"` inside dense copy so the underline stays quiet; the default variant stands out from the surrounding text.
61
+ - Use `variant="plain"` where the link is already set apart by its position, such as a caption under a tile or a row in an index; keep an underline on links inside running text.
62
+
63
+ ## AnimatedNumber
64
+
65
+ `@instruments/materia-ui/components/animated-number`
66
+
67
+ Animated number that counts up like an odometer.
68
+
69
+ A faithful port of Motion+'s `AnimateNumber`: each digit is a full 0–9 column that rolls through the intermediate numerals to its new value (a FLIP spring on `y`), the leading digit rolls up from zero as magnitude grows, and section widths animate so proportional fonts stay aligned. Formatting (grouping, fraction digits, currency, sign) comes from `Intl.NumberFormat`; the token `duration` / `easing` drive the timing, or pass `transition` for a bespoke curve/spring. Use `prefix` / `suffix` for units and currency so they align with the digits and fold into the single screen-reader announcement.
70
+
71
+ - Needs `ReducedMotionProvider` in the app tree - it supplies the LazyMotion `domMax` features the digit roll and layout animations require, and its `reducedMotion="user"` makes the number snap to its final value for users who ask for less motion.
72
+ - Use `prefix`/`suffix` for units and currency (`$`, `/10`), not sibling text nodes - they're layout-animated with the digits and folded into the one screen-reader announcement.
73
+ - Reach for the `duration`/`easing` tokens over a raw `transition` - token timing keeps it in step with the rest of the motion system; drop to `transition` only for bespoke springs.
74
+
75
+ ## AspectRatio
76
+
77
+ `@instruments/materia-ui/components/aspect-ratio`
78
+
79
+ Constrains its content to a fixed width-to-height ratio, sizing itself to the available width with CSS `aspect-ratio`; drop a single child (image, video, iframe, or a plain element) inside and size it to fill the framed box.
80
+
81
+ - Give it exactly one child and let it fill - set the media to `size-full object-cover`; `AspectRatio` sizes to the available width and derives height from `ratio`.
82
+ - Use `as` to change the element (a tag); use `render` only to swap in a component (e.g. a router Link). Never `render={<Box as=…/>}` - pass `as` directly.
83
+
84
+ ## AttributeCard
85
+
86
+ `@instruments/materia-ui/compositions/attribute-card`
87
+
88
+ AttributeCard UI component. Import from "@instruments/materia-ui/compositions/attribute-card".
89
+
90
+ - Use `AttributeCard` for a single label + prominent value stat tile (a KPI/metric); for many key/value pairs about one entity reach for `DescriptionList` instead.
91
+ - Pass a Lucide component to `icon` (e.g. `RulerIcon`), not a rendered `<Icon/>` - it is handed to the internal `Icon` at a fixed `sm` size.
92
+ - This is a preset composition of `Card`; restyle via the surrounding layout rather than reaching inside - for a bespoke layout compose `Card`/`CardContent` directly.
93
+
94
+ ## AvatarRoot
95
+
96
+ `@instruments/materia-ui/components/avatar`
97
+
98
+ Container for a user or entity avatar; compose an `AvatarImage` and `AvatarFallback` inside, and the fallback shows automatically when the image is missing or fails to load.
99
+
100
+ - Always render an `AvatarFallback` child - it is what shows while the image loads and when `src` is missing or errors; an image-only avatar renders empty on failure.
101
+ - Give `AvatarImage` a meaningful `alt`; the visual is decorative only when the fallback initials already convey the identity.
102
+ - Keep the default `radius="full"` for people; use a squared `radius` for brand/entity logos so they read as objects, not users.
103
+
104
+ ## Badge
105
+
106
+ `@instruments/materia-ui/components/badge`
107
+
108
+ Display-only pill for contextual metadata - status, category, or counts. Pass `label`+`value` for a split badge; compose `BadgeDot`/`BadgeButton` as children.
109
+
110
+ - Badge is display-only - never attach `onClick`; use `Tag` (interactive) or wrap a `Button`.
111
+ - For a notification count use `mode="count"` (circular, tabular figures), not `radius="full"` + manual classes.
112
+ - A standalone count needs an `accessibleLabel` ("3 unread"); inside an icon-only trigger, mark the badge `aria-hidden` and fold the count into the trigger's `aria-label`.
113
+ - A badge overlapping a corner of another surface takes `ring` so a 2px `background`-coloured ring separates it from what's beneath; set it only where the badge truly overlaps, and the page surface should be `background`.
114
+
115
+ ## BorderBeam
116
+
117
+ `@instruments/materia-ui/components/border-beam`
118
+
119
+ A soft rotating "border beam" shimmer used to draw attention to an element before the user interacts with it.
120
+
121
+ Two usage shapes:
122
+
123
+ 1. Wrapper - pass `children` and the beam wraps them in a relative box.
124
+ 2. Overlay - render without children inside an existing relative parent.
125
+
126
+ Honours `prefers-reduced-motion` (renders nothing - a static ring would be louder than the animated sweep it's meant to replace). When `visible` flips to `false`, the beam fades out then unmounts so its rAF loop stops.
127
+
128
+ - Animate the `--border-beam-angle` custom property (as the source does), never `rotate` the masked ring - a rotated box swings its mask outside a wide pill's bounds and renders as a stray streak, not a border orbit.
129
+ - Requires `ReducedMotionProvider`; under reduced motion it renders nothing (a static ring would read louder than the sweep it replaces), so don't add your own fallback border.
130
+ - Use it as an attention / "try me" cue on an idle surface, not a loading state - content placeholders want `Skeleton`, and a periodic liveness flick wants `Shine`.
131
+
132
+ ## Box
133
+
134
+ `@instruments/materia-ui/components/box`
135
+
136
+ The escape hatch: a raw host element with a `className`, still checked for tokens-only classes. Box renders the chosen {@link LayoutElement} with no layout opinions of its own (no margin, width, or padding, unlike Container), so it suits decorative wrappers that a styled primitive would visually break. Reach for it only when no styled primitive fits; the `className` you pass is governed by the same tokens-only scan as everything else. RSC-safe.
137
+
138
+ - `Box` renders the chosen element with no layout opinions (no margin/width/padding, unlike `Container`); use it as a neutral wrapper when a styled primitive would interfere.
139
+ - Use `as="span"` for a decorative inline wrapper; reach for `Box` only when no styled primitive fits - its `className` is still checked for tokens-only classes.
140
+ - `as` and `render` are mutually exclusive (`render` wins, dev-warned); `as` draws from the closed layout vocabulary.
141
+ - Use `as` to change the element (a tag); use `render` only to swap in a component (e.g. a router Link). Never `render={<Box as=…/>}` - pass `as` directly.
142
+
143
+ ## Breadcrumb
144
+
145
+ `@instruments/materia-ui/components/breadcrumb`
146
+
147
+ Navigation landmark for a breadcrumb trail; renders a labelled `<nav>`.
148
+
149
+ - When the trail sits directly above the page heading, stop at the last navigable ancestor and let the heading name the current page. Use `BreadcrumbCurrent` only when no adjacent heading supplies that context.
150
+ - Render router links via `<BreadcrumbLink render={<Link href="…" />}>` with a framework `<Link>` - the bare default is an `<a>`.
151
+ - Collapse overflow with `BreadcrumbEllipsis` hosting a menu of the hidden crumbs, rather than dropping items silently.
152
+
153
+ ## Button
154
+
155
+ `@instruments/materia-ui/components/button`
156
+
157
+ Button styled by a tone × emphasis grammar: `tone` sets the semantic colour (neutral / brand / danger) and `emphasis` sets the visual weight (solid / soft / outline / ghost / transparent / link). Any pairing is valid - there is no fixed "primary/secondary" list; those looks are expressed as tone × emphasis pairs.
158
+
159
+ An icon-only button (an `icon-*` size, or `icon` with no children) requires an `aria-label`; a dev-only console warning fires when it is missing. With `render`, styling and icon/dot decorations are applied to the element you pass in.
160
+
161
+ - Express weight with `tone`×`emphasis`, not a `variant` prop - there is no "primary/secondary"; e.g. the destructive confirm is `tone="danger"`.
162
+ - Icon-only buttons MUST have an `aria-label` (a dev warning fires otherwise).
163
+ - Use `render` to render a link element (e.g. `render={<Link href="…" />}`) rather than nesting a button inside an anchor.
164
+ - `loading` keeps the button focusable while it blocks presses, so focus stays put across a submit; a plain `disabled` button leaves the tab order.
165
+ - Reach for `emphasis="ghost"`/`"link"` in toolbars/headers - they carry `data-edge-comp` so containers can pull them flush to the edge.
166
+
167
+ ## ButtonGroup
168
+
169
+ `@instruments/materia-ui/components/button-group`
170
+
171
+ Combines related buttons into a single visual unit. Also composes with Input, Select, and DropdownMenu; `dividers` defaults on for the segmented variant.
172
+
173
+ - Use `ButtonGroup` to visually join related `Button`s (plus `Input`/`Select`/`DropdownMenu`); for one/many _selection_ state reach for `ToggleGroup`.
174
+ - The `segmented` variant owns the border/background/shadow and defaults `dividers` on, while `joined` (default) lets each child draw its own - don't mix the two.
175
+
176
+ ## Calendar
177
+
178
+ `@instruments/materia-ui/components/calendar`
179
+
180
+ Date picker built on react-day-picker, styled with the shared button variants; supports `single`, `multiple`, and `range` selection via the `mode` prop. Accepts all DayPicker props. `showOutsideDays` defaults to `true`.
181
+
182
+ - Set `mode` explicitly (`single` | `multiple` | `range`) - the selection value shape and `onSelect` signature change with it; a `range` handler never fires in `single` mode.
183
+ - Restrict selectable dates with react-day-picker matchers (`disabled`/`hidden`/`startMonth`/`endMonth`), not by filtering after the user clicks.
184
+ - Use `Calendar` for an inline date grid; for a compact click-to-open date field, wrap it in a `Popover` behind a `Button`/`Input` trigger.
185
+
186
+ ## Card
187
+
188
+ `@instruments/materia-ui/components/card`
189
+
190
+ Card container with optional border and variant-based background.
191
+
192
+ - Compose structure with `CardHeader`/`CardContent`/`CardFooter` rather than raw padded divs - the root supplies the gap rhythm and drops its bottom padding when a footer is present, via `data-slot` selectors.
193
+ - Set `inset` on the `Card` (not on its parts) to change the padding around header and content; `inset="none"` gives a card with no padding or gaps for a `Table` or code block. "Flush" covers header and content only: `CardFooter` keeps its own 16px padding whatever the inset.
194
+ - Pass `shadow={false}` when stacking cards on a `muted`/shaded canvas - colour contrast separates them and per-card shadows read as noise.
195
+ - For a full-bleed media/CTA panel use an editorial composite (`EditorialCard`), not `Card` - `Card` is a neutral padded container, not a marketing surface.
196
+
197
+ ## CardGrid
198
+
199
+ `@instruments/materia-ui/compositions/card-grid`
200
+
201
+ Responsive `@container` list that lays cards out in rows. The default `wrap` layout is a wrapping flex row whose items resize at the ProductCard small/medium/full breakpoints via the `@container/card-grid` query name; `layout="fill"` is a grid whose columns stretch to fill each row.
202
+
203
+ - Render `CardGridItem` children so each card is a list item under this `<ul>` - wrapping arbitrary elements loses the list semantics.
204
+ - Use `layout="fill"` wherever the grid's width changes with the page (a docked panel, a collapsing sidebar): fixed widths leave a ragged gap at the right edge, fill columns don't. Keep `CardGridRows` on the default, as its row widths come from the fixed metrics.
205
+ - Give the loading grid the same `layout` and `minItemSize` as the loaded one, so skeletons and cards share columns and nothing reflows when data lands.
206
+
207
+ ## CardGridItem
208
+
209
+ `@instruments/materia-ui/compositions/card-grid`
210
+
211
+ A single cell within `CardGrid`, rendered as a list item. In the default `wrap` layout it carries the responsive widths: a fluid 2-up (`w-[calc((100%-1rem)/2)]`) below a 500px container, then fixed `w-44` / `@[800px]/card-grid:w-52` / `@[1200px]/card-grid:w-68`, tuned to the ProductCard small/medium/full breakpoints. In a `fill` grid the column track sizes it instead.
212
+
213
+ - Keep this as the direct child of `CardGrid` so the list semantics stay intact; put the actual card inside it.
214
+
215
+ ## CardGridRows
216
+
217
+ `@instruments/materia-ui/compositions/card-grid`
218
+
219
+ Renders a list of pre-chunked rows, each as its own `CardGrid`, with an optional `renderAfterRow` slot (e.g. an expanded detail panel) beneath each row. Row widths are derived from `metrics` so callers can align that slot.
220
+
221
+ - Chunk items with `chunkIntoRows` (using `calculateColumns`) before passing `rows`; provide a stable `getItemKey` (and `getRowKey` where rows reorder) so React reconciliation stays correct.
222
+
223
+ ## CardGridSkeletonItem
224
+
225
+ `@instruments/materia-ui/compositions/card-grid`
226
+
227
+ Loading placeholder for a single `CardGrid` cell.
228
+
229
+ It renders ONE skeleton and lets the skeleton read the cell it lands in. Choosing here on `@container/card-grid` was choosing on the wrong signal: the grid's phone tier is a fluid 2-up, so a 460px container renders 222px cards - the card's main arm - while the grid query still read "small".
230
+
231
+ - Render one `CardGridSkeletonItem` per expected card while data loads, inside the same `CardGrid` - this keeps list semantics and column widths stable across the loading→loaded transition.
232
+
233
+ ## Carousel
234
+
235
+ `@instruments/materia-ui/components/carousel`
236
+
237
+ Embla-backed carousel that shares scroll state and controls with its parts (CarouselContent, CarouselPrevious/Next, CarouselDots) via context - they must render inside it.
238
+
239
+ - Render `CarouselContent`/`CarouselItem`/`CarouselPrevious`/`CarouselNext`/`CarouselDots` only inside `Carousel` - they read scroll state from context and throw ("must be used within a Carousel") outside it.
240
+ - Set `slidesToShow` to show multiple items at once (it drives each item's `flex-basis`); don't fake a multi-item view with CSS widths on `CarouselItem`.
241
+ - Tune scroll behaviour via `opts` (Embla options like `loop`/`align`) and enable `wheelScroll`/`freeScroll` deliberately - free-scroll drops snap points, so pass `slideCount` if the dots miscount.
242
+ - Give a descriptive `aria-label` when the region isn't self-evidently "Carousel" (e.g. `"Product images"`).
243
+
244
+ ## Center
245
+
246
+ `@instruments/materia-ui/components/center`
247
+
248
+ Center centres its children both vertically and horizontally using flexbox.
249
+
250
+ **Important:** Children that use CSS Grid with `fr` units must define their own width (e.g., `w-96`, `max-w-md`). This is because `fr` units require a defined container width to calculate available space, but flex items without explicit width use intrinsic sizing - creating a circular dependency where the grid collapses to minimum content width.
251
+
252
+ - `Center` centres a single child on both axes; grid children using `fr` units need an explicit width (e.g. `w-96`) or they collapse to min-content.
253
+ - `as`/`render` are mutually exclusive (`render` wins, dev-warned); use `inline` to center inline-level content without breaking the text flow.
254
+ - Use `as` to change the element (a tag); use `render` only to swap in a component (e.g. a router Link). Never `render={<Box as=…/>}` - pass `as` directly.
255
+
256
+ ## Chart
257
+
258
+ `@instruments/materia-ui/components/chart`
259
+
260
+ Responsive frame for a recharts chart. Wraps recharts' `ResponsiveContainer`, provides the `config` (series keys → label / icon / colour) to every descendant `ChartTooltipContent` / `ChartLegendContent`, and injects a `--color-<key>` CSS variable per series so recharts marks can be coloured with `fill="var(--color-desktop)"`. Pass a single recharts chart element as the child. It is dimensionless - set the aspect / height with `className` (defaults to `aspect-video`).
261
+
262
+ - Colour every series through `config` (`{ desktop: { label, color } }`) and reference `var(--color-<key>)` on the marks - never hardcode a hex on a `Bar` / `Line`; that keeps light/dark theming and the legend/tooltip swatches in sync.
263
+ - Reach for `Chart` only to render a recharts data visualization; for a static value + delta use `Stat`, and for a progress bar use `Progress`.
264
+
265
+ ## Checkbox
266
+
267
+ `@instruments/materia-ui/components/checkbox`
268
+
269
+ Renders a checkbox input with support for checked, unchecked, and indeterminate states.
270
+
271
+ - A bare `Checkbox` has no label - pair it with a `Label` (`htmlFor`) or use `CheckboxField`, which wires `id`/`htmlFor`/`aria-describedby` for you.
272
+ - Set the mixed state via the `indeterminate` prop; `checked` stays a boolean.
273
+ - Controlled use needs `checked` + `onCheckedChange` together; passing only `checked` freezes the box - use `defaultChecked` for uncontrolled.
274
+ - For a selectable card or a label+description row, reach for `CheckboxCardGroup`/`CheckboxField` instead of hand-laying-out around `Checkbox`.
275
+
276
+ ## CheckboxCardGroup
277
+
278
+ `@instruments/materia-ui/components/checkbox-card`
279
+
280
+ Multi-select group of `CheckboxCard`s presented as interactive cards. Shares size, indicator, icon, and checked state with its items via context. With `checkedValues` it is a Base UI `CheckboxGroup` (`role="group"`) that owns which cards with a `value` are checked.
281
+
282
+ - Use `CheckboxCardGroup` for multi-select cards and `RadioCardGroup` for single-select - a checkbox group lets any number be on at once.
283
+ - Set `size`/`icon`/`indicatorSide`/`showIndicator` once on the group; every `CheckboxCard` reads them from context - don't repeat them per item.
284
+ - To control the set, give each card a `value`, drive `checkedValues` (a `string[]`) and toggle inside `onCheckedChange(value, checked)`; without `checkedValues` each card keeps its own `checked`/`defaultChecked`.
285
+ - Each card is one tab stop and toggles with Space; checkboxes don't rove, so Tab (not the arrow keys) moves between cards.
286
+
287
+ ## CheckboxField
288
+
289
+ `@instruments/materia-ui/components/checkbox-field`
290
+
291
+ Checkbox paired with a label and optional description in a Base UI `Field`, which associates the label with the checkbox and links the description through `aria-describedby`; forwards checkbox state props to the underlying Checkbox.
292
+
293
+ - Use `CheckboxField` for a single labelled checkbox - its `Field` wires the label and `aria-describedby` you'd otherwise hand-roll around a bare `Checkbox`.
294
+ - Put helper text in `description` (linked via `aria-describedby`), not a separate sibling element the screen reader won't announce with the control.
295
+ - `size` accepts only `"xs"`/`"sm"`; for a full selectable card use `CheckboxCardGroup`, and render one `CheckboxField` per option for a set.
296
+
297
+ ## Code
298
+
299
+ `@instruments/materia-ui/components/code`
300
+
301
+ Monospace code - inline `<code>` by default (a muted, rounded chip sized to surrounding text), or a scrollable `<pre><code>` block when `block` is set. Token-styled and RSC-safe.
302
+
303
+ - Use inline `Code` for identifiers/values in a sentence and `block` for multi-line snippets - `Kbd` is for keyboard keys, not code.
304
+ - `block` renders `<pre><code>` that scrolls horizontally; add `whitespace-pre-wrap` via `className` only when wrapping beats scrolling (long prose-like messages).
305
+
306
+ ## Collapsible
307
+
308
+ `@instruments/materia-ui/components/collapsible`
309
+
310
+ Expand/collapse container that reveals its CollapsibleContent when open. Controlled via `open`/`onOpenChange` or uncontrolled via `defaultOpen`.
311
+
312
+ - Use `Collapsible` for a single expand/collapse region; reach for `Accordion` when you have a set of grouped items where selecting one can close the others.
313
+ - Compose `CollapsibleTrigger` + `CollapsibleContent` inside it - a bare child won't expand.
314
+ - Drive it uncontrolled with `defaultOpen`; only lift to `open`/`onOpenChange` when external state must sync (e.g. persisting the open panel).
315
+
316
+ ## ColorPalette
317
+
318
+ `@instruments/materia-ui/compositions/color-palette`
319
+
320
+ Stacked colour palette in the style of the Dropbox brand site: a row of overlapping, bottom-anchored square cards cropped to 16:9. Hovering or focusing a card smoothly raises it and reveals a search action that deep-links into the colours search page.
321
+
322
+ The component renders only the swatch row - no card, heading, or CTA chrome. Compose those around it (a `<section>`, a title, a sample button wired to `onSelectedIdsChange`) when a surface calls for them.
323
+
324
+ Cards can be flat colours, gradients, or images (see ColorPaletteItem). Image cards need a `searchHex` to be clickable.
325
+
326
+ With `selectable`, clicking anywhere on a card toggles it in and out of the selection instead of linking out; selected cards keep a check visible at rest, and the selection surfaces through `onSelectedIdsChange`.
327
+
328
+ - Describe cards as `items` (`kind: "color" | "gradient" | "image"`), not hand-built markup - the component owns the overlap, hover-raise, and deep-link-to-search behaviour.
329
+ - Give every `image` card a `searchHex`, otherwise it can't be searched or selected - flat colours and gradients derive theirs automatically.
330
+ - Pass `renderLink` (e.g. wrapping `next/link`) for client-side nav - the built-in links are plain `<a>`; the callback must return a single anchor element.
331
+
332
+ ## ColorWheel
333
+
334
+ `@instruments/materia-ui/components/color-wheel`
335
+
336
+ Concentric saturation/lightness pad + hue arc picker.
337
+
338
+ - `ColorWheel` is fully controlled - own the `ColorWheelValue` (`{h,s,l}`) and set it from `onChange`; it stores nothing internally, so dropping the update freezes the picker.
339
+ - Values are HSL (`h` 0–360, `s`/`l` 0–100), not hex - convert at your storage boundary; a hex string won't position the handles.
340
+ - `onChange` fires on every pointer drag and arrow-key step - throttle persistence/network writes downstream rather than reacting to each intermediate value.
341
+
342
+ ## Combobox
343
+
344
+ `@instruments/materia-ui/components/combobox`
345
+
346
+ Searchable select: a button trigger opening a filterable option list in a popover. Works controlled (`value` + `onValueChange`) or uncontrolled; supports virtualisation for large lists.
347
+
348
+ - Use `Combobox` when the user filters/searches a long list; use `Select` for a short closed list, or a domain variant like `CountryCombobox` for known sets.
349
+ - `onValueChange` fires with `""` when the current selection is toggled off - treat empty string as "cleared", not as a real value.
350
+ - For lists in the hundreds+, pass `virtualization={{ enabled: true }}` so only visible rows mount instead of every option.
351
+ - Provide `items` as `{ label, value }[]` - the visible text comes from `label` while selection is tracked by `value`.
352
+
353
+ ## Command
354
+
355
+ `@instruments/materia-ui/components/command`
356
+
357
+ The inline command palette: a search field filtering a keyboard-navigable list, built on Base UI Autocomplete in inline mode. The list is always open; typing filters the entries and the first match is highlighted, so `Enter` activates it. Import from "@instruments/materia-ui/components/command".
358
+
359
+ - For a ⌘K overlay use `CommandDialog` - `Command` alone is the inline, non-floating palette container.
360
+ - Pass the entries as `items`, or as titled `groups`, and render them with a function child of `CommandList`; filtering only sees those entries, so items written as static JSX are not filtered.
361
+ - Act on a choice with `CommandItem`'s `onClick`, which fires for a pointer click and for `Enter` on the highlighted item.
362
+ - A plain click-triggered action menu is `DropdownMenu`; a remembered selection is `Combobox`.
363
+
364
+ ## CommandDialog
365
+
366
+ `@instruments/materia-ui/components/command`
367
+
368
+ CommandDialog wraps `Command` in a dialog, with screen-reader-only title and description for accessibility. Focus moves to the search field on open and returns to the trigger on close.
369
+
370
+ Import from "@instruments/materia-ui/components/command".
371
+
372
+ - Close the dialog from each `CommandItem`'s `onClick` once its action has run - choosing an item does not close it by itself.
373
+ - Pass `filter={null}` to list the entries unfiltered, for example when the application filters them itself.
374
+
375
+ ## Container
376
+
377
+ `@instruments/materia-ui/components/container`
378
+
379
+ Container centres page content within a max-width and applies the canonical horizontal gutter. It is the RSC-safe page-shell primitive: pair it with `Section` for vertical rhythm, or pass `space` to fold the band into one node.
380
+
381
+ Import from "@instruments/materia-ui/components/container".
382
+
383
+ - `Container` constrains width and applies the page gutter; `Section` is the full-bleed vertical-rhythm band - nest a `Container` inside a `Section` when content must be both padded and centred.
384
+ - Fold a single band into one node with `space` (its `py`) instead of nesting a `Section`; pass `fluid` to drop the max-width.
385
+
386
+ ## ContextMenu
387
+
388
+ `@instruments/materia-ui/components/context-menu`
389
+
390
+ Menu of actions or options, opened by right-clicking (or long-pressing) its trigger surface. Supports nested submenus, checkbox/radio items, separators, and keyboard shortcuts. Open state is uncontrolled by default; pass `onOpenChange` to observe it.
391
+
392
+ - Use `ContextMenu` for a right-click / long-press menu on a surface; a menu opened by clicking a button or trigger is a `DropdownMenu`.
393
+ - Wrap the target region in `ContextMenuTrigger` so the whole surface is right-clickable; use `ContextMenuCheckboxItem` / `ContextMenuRadioGroup` for stateful rows.
394
+
395
+ ## CookieBanner
396
+
397
+ `@instruments/materia-ui/compositions/cookie-banner`
398
+
399
+ Cookie consent banner: a title and description beside a stack of actions. Lays itself out from its own width (a container query), stacking the copy above the buttons when narrow and setting them side by side when wide.
400
+
401
+ - The app places and sizes it (e.g. `fixed inset-x-4 bottom-4 max-w-3xl`); it has no intrinsic width, so a fixed corner without a width collapses it.
402
+ - Only wire the actions you support: Reject and Cookie settings render only when `onReject` / `onSettings` are passed.
403
+ - It records nothing. Store the visitor's choice in the handlers and stop rendering the banner once they have made it.
404
+
405
+ ## CountryCombobox
406
+
407
+ `@instruments/materia-ui/components/country-combobox`
408
+
409
+ Specialized combobox for country selection Uses ISO 3166-1 alpha-2 country codes from countries-list package Automatically handles country code/name conversion
410
+
411
+ - Feed `value` an ISO alpha-2 code (`"US"`) or a full country name (`"United States"`) - both resolve - but `onValueChange` always returns the code.
412
+ - Don't pass `items`; `CountryCombobox` supplies the full country list itself. For a non-country searchable list, use the base `Combobox`.
413
+
414
+ ## CountrySelect
415
+
416
+ `@instruments/materia-ui/components/country-select`
417
+
418
+ Country selector with flag display.
419
+
420
+ Controlled: `value` (ISO 3166-1 alpha-2) drives the selection and `onChange` reports the newly chosen code. A native `<select>` overlays the flag so the picker keeps native keyboard and mobile behaviour. A divider on its trailing edge shows only when it sits inside an input (`PhoneInput` or `InputGroup`).
421
+
422
+ - `CountrySelect` is the flag + native-`<select>` picker for a known country list; when users need type-to-filter, use `CountryCombobox` instead.
423
+ - It is controlled-only - pass `value` (ISO 3166-1 alpha-2) and an `onChange`; there is no uncontrolled/`defaultValue` mode.
424
+ - Give each option an alpha-2 `value` (e.g. `"US"`) so the overlaid flag resolves; a globe placeholder shows when the code is empty/unknown.
425
+
426
+ ## DataGrid
427
+
428
+ `@instruments/materia-ui/compositions/data-grid`
429
+
430
+ Root of the DataGrid compound: merges caller layout/loading props over sensible defaults and provides the context consumed by the table parts.
431
+
432
+ Requires a TanStack `table` instance (throws without one). Applies `initialColumnPinning` once on mount and auto-enables column pinning for it.
433
+
434
+ - Reach for `DataGrid` (not `Table`) when you need sorting, filtering, column pinning/visibility, or pagination - `Table` is a plain styled HTML table with no data model.
435
+ - Pass a `useTable` instance as `table` - `DataGrid` throws "requires the `table` prop" without one; column defs and row model live on that instance, not on `DataGrid` props.
436
+ - Render the satellite parts (`DataGridTable`, `DataGridPagination`, `DataGridColumnHeader/Filter/Visibility`) inside `DataGrid` - they read the table + layout from its context and break outside it.
437
+ - Enable features through `tableLayout` (`columnsPinnable`, `columnsResizable`, `columnsVisibility`, …) rather than styling rows manually; set `initialColumnPinning` to pin on mount.
438
+
439
+ ## DataGridColumnFilter
440
+
441
+ `@instruments/materia-ui/compositions/data-grid-column-filter`
442
+
443
+ Faceted multi-select filter for a DataGrid column, built on Base UI Combobox in `multiple` mode with the search field inside the popup. The trigger summarises the selection; the popup lists options with live facet counts and a clear action.
444
+
445
+ - For a DataGrid, prefer marking the column `meta: { filter: true }` and building the table with `useDataGridTable`: its header and `PageToolbarTableFilters` then filter it from one state. Use this only for a standalone filter outside that route.
446
+ - Pass the TanStack `column` instance (not a column id) - counts come from `column.getFacetedUniqueValues()`, so wire `getFacetedUniqueValues`/`getFacetedRowModel` into the table for live facet counts.
447
+ - Supply `options` (label/value/icon) explicitly; the filter renders those choices, it does not derive them from the data - omitted values won't be filterable.
448
+ - Use this for a discrete multi-select facet; it stores an array filter value, so pair it with a column filter fn that matches array membership.
449
+ - The typed search survives each pick, so several matches can be ticked from one query; it resets when the popup closes.
450
+
451
+ ## DataGridColumnHeader
452
+
453
+ `@instruments/materia-ui/compositions/data-grid-column-header`
454
+
455
+ Interactive column header for a `DataGrid`: click to cycle sorting, or open the dropdown to sort, pin, move, and toggle column visibility. Reads DataGrid context, so it must render inside a `DataGrid` provider.
456
+
457
+ - Render inside a `DataGrid` - it calls `useDataGrid()` and throws outside the provider; use it as a column def's `header`, not standalone.
458
+ - The pin/move/visibility controls only appear when the matching `tableLayout` flags (`columnsPinnable`/`columnsMovable`/`columnsVisibility`) are enabled on `DataGrid` - a missing menu item usually means the flag is off, not a bug.
459
+ - Pass a human `title` (and optional `icon`); it is the accessible label for the sort/menu trigger and the moved-column announcement.
460
+
461
+ ## DataGridColumnVisibility
462
+
463
+ `@instruments/materia-ui/compositions/data-grid-column-visibility`
464
+
465
+ Dropdown of checkbox items that show/hide the hideable columns of a TanStack Table.
466
+
467
+ Only lists columns with an accessor that report `getCanHide()`, labelling each from `columnDef.meta.headerTitle` (falling back to the column id). Toggling a column keeps the menu open so several can be flipped at once.
468
+
469
+ - Pass the TanStack `table` instance directly (this part does NOT read DataGrid context) plus a `trigger` element rendered via `render` - supply your own `Button`, it renders none.
470
+ - Only accessor columns reporting `getCanHide()` appear; set `enableHiding: false` on a column def to keep it always-visible and out of this menu.
471
+ - Label each column via `columnDef.meta.headerTitle` - the menu falls back to the raw column `id` when it's missing.
472
+
473
+ ## DataGridFilterableHeader
474
+
475
+ `@instruments/materia-ui/compositions/data-grid`
476
+
477
+ Unified column header for DataGrid columns. Combines sorting, filtering, search, and tag pills in a single popover.
478
+
479
+ - Sort-only columns render a plain button with sort toggle.
480
+ - Filter columns open a popover with optional search, facet checkboxes, and sort commands.
481
+ - Tag columns add dismissible pills above the facet list via `showSelectedTags`.
482
+
483
+ A column whose `header` is plain text gets this automatically: sortable columns sort from it, and `meta.filter` columns filter from it. Render it yourself only from a custom `header` function.
484
+
485
+ - Prefer a plain-text `header` plus `meta.filter` over rendering this by hand; the table then wires it, and `PageToolbarTableFilters` shows the same choices as chips.
486
+
487
+ ## DataGridPagination
488
+
489
+ `@instruments/materia-ui/compositions/data-grid-pagination`
490
+
491
+ Pagination footer for a DataGrid: a rows-per-page select, a range summary, and page navigation. Reads pagination state from the surrounding DataGrid context, so it must be rendered inside a DataGrid provider whose table has a pagination row model.
492
+
493
+ - Render inside a `DataGrid` whose `table` has `paginatedRowModel: createPaginatedRowModel()` wired - it reads `table.state.pagination` from context and throws outside the provider.
494
+ - For server-side paging, drive the table with `manualPagination` + `pageCount` and a controlled `pagination` state; the range summary uses `recordCount`, so pass the true total, not the page length.
495
+ - Configure page-size choices via `sizes` (not by restyling the select), and localise the range text through the `info` template.
496
+
497
+ ## DataGridTable
498
+
499
+ `@instruments/materia-ui/compositions/data-grid-table`
500
+
501
+ Renders the virtualised header and body rows for a DataGrid.
502
+
503
+ Consumes the surrounding DataGrid context, so it must live inside a DataGrid provider and shell. Rows are windowed with `@tanstack/react-virtual`.
504
+
505
+ - Render inside `DataGrid` (and its shell) - it calls `useDataGrid()` for the table and layout and throws outside the provider; it takes no `table` prop of its own.
506
+ - Sorting and filtering come from the column definitions: a plain-text `header` sorts on click, and `meta: { filter: true }` adds a values menu. Build the table with `useDataGridTable` and pair it with `PageToolbarTableFilters` / `PageToolbarTableSort` above the grid; all of them share one state.
507
+ - Rows are virtualised, so give each a stable `rowHeight` via `tableLayout` (expanded rows use `expandedRowHeight`) - variable, unmeasured heights make the window jump.
508
+ - Use `DataGridTable` for a data-driven grid; for a small static table with hand-authored `<TableRow>`s reach for `Table` instead - no virtualisation or TanStack instance needed.
509
+
510
+ ## defaultRenderImage
511
+
512
+ `@instruments/materia-ui/compositions/product-card`
513
+
514
+ Default image renderer: a plain `<img>` that fills its positioned parent.
515
+
516
+ - In Next.js apps pass `renderImage` wrapping `next/image` - this default skips Next's image optimisation and responsive srcset.
517
+
518
+ ## DeliveryBanner
519
+
520
+ `@instruments/materia-ui/compositions/delivery-banner`
521
+
522
+ Full-width strip counting down to today's delivery cut-off and naming where samples will be delivered. Green while there is time, red once less than `urgentWithin` remains.
523
+
524
+ - Pass `deadline` from the server's cut-off; the banner only counts down and never decides when delivery closes.
525
+ - Give it `onLocationClick` when the address can be changed, so the location becomes a button rather than inert text.
526
+ - Place it full width directly under the header; it switches to its compact layout from its own width, not the viewport's.
527
+
528
+ ## DescriptionDetails
529
+
530
+ `@instruments/materia-ui/components/description-list`
531
+
532
+ The `<dd>` value of a description item; with `clampLines` it truncates and reveals a More/Less toggle once the content overflows. Import from "@instruments/materia-ui/components/description-list".
533
+
534
+ - Values are end-aligned by default so they line up against the terms; set `align="start"` for long prose values, where a ragged left edge is hard to read.
535
+
536
+ ## DescriptionList
537
+
538
+ `@instruments/materia-ui/components/description-list`
539
+
540
+ A `<dl>` that lays out term/description pairs in a grid. Import from "@instruments/materia-ui/components/description-list".
541
+
542
+ - Fill it with `DescriptionItem` rows (each a `DescriptionTerm` + `DescriptionDetails`) - it renders a real `<dl>`, so keep the `dt`/`dd` semantics rather than nesting raw divs.
543
+ - Use this for read-only key/value metadata about one entity; for tabular rows of many records reach for `Table` or `DataGrid` instead.
544
+ - Turn on `showSeparators` when items are visually dense; leave it off inside a bordered `Card` where the container already frames them.
545
+
546
+ ## Dialog
547
+
548
+ `@instruments/materia-ui/components/dialog`
549
+
550
+ Root component for a modal dialog. Manages open/closed state and accessibility. Import from "@instruments/materia-ui/components/dialog".
551
+
552
+ - Use `Dialog` for a centred blocking modal (form, details, footer actions); a destructive confirm is `AlertDialog`, an anchored non-blocking panel is `Popover`.
553
+ - A panel that slides in from a screen edge is a `Sheet` (or `Drawer` for a drag-to-dismiss bottom sheet), not a `Dialog`.
554
+ - Always render a `DialogTitle` (wrap in `sr-only` if visually hidden) so the modal is announced; `DialogContent` uses the 36px `--radius-modal` corner.
555
+
556
+ ## DialogContent
557
+
558
+ `@instruments/materia-ui/components/dialog`
559
+
560
+ Centred modal panel. Renders its own portal and scrim overlay, so it does not need to be wrapped in `<DialogPortal>` or `<DialogOverlay>` - place it directly inside `<Dialog>`. Outside-press and Escape dismissal are handled on the root: read `eventDetails.reason` in `Dialog`'s `onOpenChange` and call `eventDetails.cancel()` to veto one. Import from "@instruments/materia-ui/components/dialog".
561
+
562
+ - Use `size="viewport"` for a dialog that holds a whole view (a product quick view, a large preview); it sets only the geometry, so lay the panel out as a column with a scrolling body yourself or compose `QuickView`.
563
+
564
+ ## DocumentList
565
+
566
+ `@instruments/materia-ui/compositions/document-list`
567
+
568
+ Composable list for displaying files and documents with icons, titles, metadata, and actions; supports optional multi-select via `selectable`. Import from "@instruments/materia-ui/compositions/document-list".
569
+
570
+ - Fill it with `DocumentListItem` children - the root is a `<ul>` provider; each item's `value` is what `value`/`defaultValue` selection matches against.
571
+ - Set `selectable` to reveal per-item checkboxes and drive selection via `value`/`onValueChange` (a `string[]`) - don't add your own checkboxes.
572
+ - Use this for files/documents with icon + metadata + actions; for a generic single-line row reach for `Item`/`ItemGroup`, and for tabular columns use `Table`.
573
+
574
+ ## DocumentListCheckbox
575
+
576
+ `@instruments/materia-ui/compositions/document-list`
577
+
578
+ Checkbox that automatically connects to DocumentList selection. Must be placed inside a DocumentListItem with a value prop, or provide a value prop directly.
579
+
580
+ - Give each checkbox an `aria-label` naming its document, or use `aria-labelledby` to reference the visible DocumentListTitle.
581
+
582
+ ## Dot
583
+
584
+ `@instruments/materia-ui/components/dot`
585
+
586
+ Dot component for indicating status, colour, or presence. Uses semantic design token variants by default, with optional custom colour override.
587
+
588
+ - Use `Dot` for a bare colour/status indicator with no text; if you need a label or count, reach for `Badge` (or `BadgeDot`), and for a removable/interactive chip use `Tag`.
589
+ - Prefer the semantic `tone` (`success`/`warning`/`danger`/…) over a raw `color` so the dot tracks theme tokens; reserve `color` for swatches outside the palette.
590
+ - The dot is decorative - pair it with visible text or an `aria-label`; colour alone doesn't convey status to assistive tech.
591
+
592
+ ## DotMatrixLoader
593
+
594
+ `@instruments/materia-ui/components/dot-matrix-loader`
595
+
596
+ Intent-specific dotted SVG glyph for agent status slots (a prompt bar's leading icon, a working stack, an operation bubble).
597
+
598
+ - Pick a glyph by intent from `DOT_MATRIX_LOADERS` - don't invent ad-hoc names. Map product actions → names in one place.
599
+ - Pass `settled` when the op finished but narration is still on screen, so the slot stays in character without spinning forever.
600
+
601
+ ## Drawer
602
+
603
+ `@instruments/materia-ui/components/drawer`
604
+
605
+ Root component for a drawer (mobile-friendly slide-up panel). Manages open/closed state; `swipeDirection` sets the edge it slides from and the direction that dismisses it (`"down"` for a bottom drawer, the default). Pass `container` to portal the drawer (and its scrim) into a bounded element instead of the document body - used by the mobile-nav overlay to scope the drawer to its own layer. Import from "@instruments/materia-ui/components/drawer".
606
+
607
+ - Drawer is the touch-first slide-up panel - reach for `Sheet` for desktop side panels and `Dialog` for centred modals.
608
+ - Always render a `DrawerTitle` inside `DrawerContent` (sr-only if visually hidden) - the underlying primitive uses it for `aria-labelledby`.
609
+ - Pass `container` to scope the drawer and its scrim to a bounded element instead of the viewport (the mobile-nav overlay pattern).
610
+
611
+ ## DrawerContent
612
+
613
+ `@instruments/materia-ui/components/drawer`
614
+
615
+ Sliding panel body - renders its own portal and scrim overlay, so drop it directly under `Drawer` without composing `DrawerPortal`/`DrawerOverlay`.
616
+
617
+ Bottom slide-up by default, with a drag handle unless `showHandle={false}`. For another edge, set `swipeDirection` on `Drawer` and position the panel with `className`. Positioning is viewport-fixed by default. When `Drawer` receives a bounded `container`, content and scrim switch to `absolute` so they stay inside that surface. The radius/border classes are plain (not direction-gated) so consumers can cancel them with `rounded-none` / `border-t-0` via tailwind-merge - full-screen sheets rely on this.
618
+
619
+ - Always render a `DrawerTitle` (use `sr-only` if visually hidden) - it provides the panel's `aria-labelledby`.
620
+ - For full-screen sheets, cancel the corner with `className="rounded-none border-t-0"` and pass `showHandle={false}`.
621
+ - To scope the drawer to a bounded element (not the viewport), pass `container` to the `Drawer` root; the content and scrim are `absolute` so they stay within it.
622
+
623
+ ## DropdownMenu
624
+
625
+ `@instruments/materia-ui/components/dropdown-menu`
626
+
627
+ Menu of actions or options, opened from a trigger. Supports nested submenus, checkbox/radio items, separators, and keyboard shortcuts. Open state is uncontrolled by default; pass `open`/`onOpenChange` to control it.
628
+
629
+ - Use `DropdownMenu` for a menu opened by clicking a trigger; a right-click / long-press menu is a `ContextMenu`.
630
+ - It's an actions / options menu, not a form control - to choose a value use `Select` (styled) or `Combobox` (searchable), not menu rows.
631
+ - Reach for `DropdownMenuCheckboxItem` / `DropdownMenuRadioItem` for stateful rows; `DropdownMenuContent` portals to the body.
632
+
633
+ ## EasingCurve
634
+
635
+ `@instruments/materia-ui/components/easing-curve`
636
+
637
+ A static visualisation of a cubic-bézier easing curve, drawn as an SVG bézier inside a unit box - time runs left→right, progress runs bottom→top. The solid stroke inherits `currentColor` (set the SVG's text colour via `className`); the optional dotted diagonal is the linear baseline the curve bends away from. Sizing is entirely `className`-driven, so the same primitive serves a tiny preview and a full row. The DS home for easing SVGs - the app never draws raw `<svg>`.
638
+
639
+ - Render easing previews through `EasingCurve`, never a hand-rolled `<svg>` - it's the design-system home for curve visualisations (consistent unit box, baseline, stroke).
640
+ - Colour the curve with a `text-*` class (it strokes `currentColor`) and size it purely via `className` - the same primitive scales from a tiny preview to a full row.
641
+ - Always pass a meaningful `title` - it becomes the SVG `<title>`, the curve's only accessible name.
642
+
643
+ ## EditorialCard
644
+
645
+ `@instruments/materia-ui/compositions/editorial-card`
646
+
647
+ Renders an editorial content card in one of several layout variants, composing imagery, title, and subtitle into a single linkable promotional tile.
648
+
649
+ - Match the media prop to `variant`: `ticker`/`stack` consume `images[]` (stack uses the first three), while `media` uses `imageSrc`/`videoSrc` - passing the wrong one renders empty media.
650
+ - Pass `renderImage` (wrapping `next/image`) in Next.js - the default is a plain `<img>` and skips Next optimisation; give `media` images a meaningful `alt`.
651
+ - Set `href` to make the whole card a single link (it wraps in an `<a>`); don't nest additional links/buttons inside - use `EditorialCard` for promo tiles, plain `Card` for neutral content.
652
+
653
+ ## Empty
654
+
655
+ `@instruments/materia-ui/components/empty`
656
+
657
+ Empty state root container.
658
+
659
+ - Use `Empty` for "no data / nothing here"; a failure the user can retry is an `ErrorState` (which composes `Empty`), so don't hand-roll a retry empty.
660
+ - Compose `EmptyHeader` › `EmptyMedia` + `EmptyTitle` + `EmptyDescription`, and put the call-to-action in `EmptyActions`.
661
+
662
+ ## EmptyState
663
+
664
+ `@instruments/materia-ui/compositions/empty-state`
665
+
666
+ Generic empty state, composed on `Empty`. Replaces the per-feature "nothing here" implementations with one flat-props preset: an icon (or custom media), a title, optional description, and optional actions.
667
+
668
+ - Use `EmptyState` for "no data / nothing here"; a failure the user can retry is an `ErrorState` (which also composes `Empty`), so don't hand-roll a retry empty.
669
+ - Set `level` to keep the document outline gapless where you place it - a full-page empty near an `h2` wants `level="3"`, but a nested one may need `"4"`.
670
+
671
+ ## ErrorBoundary
672
+
673
+ `@instruments/materia-ui/components/error-boundary`
674
+
675
+ Generic error boundary that prevents a crashing subtree from taking down the rest of the page. Reporting is delegated to `onError` (no hardcoded logging), and recovery is available through `reset` on a render-prop `fallback`.
676
+
677
+ - `ErrorBoundary` catches render crashes in a subtree - pair it with an `ErrorState` in `fallback` to show the failure; it renders nothing by default.
678
+ - It logs nothing itself - wire telemetry through `onError`, and offer recovery via the render-prop `fallback`'s `reset` callback.
679
+
680
+ ## ErrorState
681
+
682
+ `@instruments/materia-ui/compositions/error-state`
683
+
684
+ Generic error state, composed on `Empty`. Replaces the five per-feature "something went wrong" implementations with one primitive: an icon, a title, an optional message, and an optional retry action.
685
+
686
+ - `ErrorState` renders a failure UI (icon / title / message / retry) but does not catch errors - wrap the throwing subtree in an `ErrorBoundary` and render this in its `fallback`.
687
+ - Pass `retry` to show the retry button (omit it to hide); it's built on `Empty`, so `layout` / `minHeight` props pass straight through.
688
+
689
+ ## ExpandableText
690
+
691
+ `@instruments/materia-ui/components/expandable-text`
692
+
693
+ Long copy clamped to a fixed height that fades out at the cut, with a More/Less toggle that animates it open. The toggle only appears when the content actually overflows.
694
+
695
+ - Use it for secondary prose such as a product description or a review; keep headings and anything the reader must see outside it.
696
+ - Set `collapsedHeight` in rem to a whole number of lines at the text's line height, so the cut lands between lines.
697
+ - Reach for `Collapsible` when the hidden part is separate content behind a labelled trigger rather than the rest of one passage.
698
+
699
+ ## ExpandButton
700
+
701
+ `@instruments/materia-ui/components/expand-button`
702
+
703
+ Small square toggle button for expand/collapse actions; shows Plus when collapsed and Minus when expanded, and reflects state via `aria-expanded`. Import from "@instruments/materia-ui/components/expand-button".
704
+
705
+ This is an icon-only control, so pass an `aria-label` (or `aria-labelledby`) describing the action (e.g. "Expand row") - without it screen readers announce an unlabelled button.
706
+
707
+ - Always pass an `aria-label` (e.g. "Expand row") - it's icon-only, so without one screen readers announce an unlabelled button.
708
+ - Drive the icon and `aria-expanded` with the `expanded` prop; set `expandedIcon`/`collapsedIcon` only to override the default Minus/Plus pair.
709
+
710
+ ## FadeOverlay
711
+
712
+ `@instruments/materia-ui/components/fade-overlay`
713
+
714
+ Fades a decorative overlay (a border beam, a shine sweep, …) in and out with `visible`, keeping it MOUNTED through its fade-out exit so the overlay's animation rAF loop survives until the fade completes - then unmounts it. Honours `prefers-reduced-motion` by rendering nothing but `children` (a static decorative band would read louder than the animation it replaces).
715
+
716
+ Use as a wrapper (pass `children`) or a bare overlay (omit them). This is the shared exit-animation lifecycle that backs `BorderBeam` and `Shine`.
717
+
718
+ - Reach for `FadeOverlay` to fade a decorative overlay in/out - it keeps the overlay mounted through its fade-out so the animation's rAF loop survives, then unmounts it; don't hand-roll that lifecycle.
719
+ - It's the shared engine behind `BorderBeam` and `Shine` - prefer those named components for their specific looks; drop to `FadeOverlay` directly only for a new overlay effect.
720
+ - Needs `ReducedMotionProvider`; under reduced motion it renders only `children` (a static band would read louder than the animation), so the overlay doesn't appear.
721
+
722
+ ## Field
723
+
724
+ `@instruments/materia-ui/components/field`
725
+
726
+ Flexible field container (Base UI `Field.Root`) that arranges label and content in various orientations. Its parts wire themselves to the control: `FieldLabel` gets `htmlFor`, and `FieldDescription`/`FieldError` join the control's `aria-describedby`.
727
+
728
+ - Set `invalid` on the `Field`, not on each control - it sets `aria-invalid` on the field's `Input`/`InputGroupInput`/`Textarea` and turns the `FieldLabel` destructive.
729
+ - Compose the documented parts (`FieldLabel`, `FieldContent`, `FieldError`, `FieldDescription`) around one control - the label's `htmlFor` and the control's `aria-describedby` are wired for you, so there are no ids to pass.
730
+ - Use `orientation="responsive"` for a label-beside-control that collapses to stacked on mobile, rather than duplicating the field per breakpoint.
731
+
732
+ ## FileUploadDropzone
733
+
734
+ `@instruments/materia-ui/compositions/file-upload`
735
+
736
+ FileUploadDropzone - A drag-and-drop zone for file uploads. Use with the useFileUpload hook for full functionality.
737
+
738
+ - `FileUploadDropzone` is presentational - wire it to the `useFileUpload` hook for the actual file input, drag state, and file list; it stores nothing itself.
739
+ - Forward the hook's `handleDragEnter/Leave/Over/Drop` and drag state into `dragging` so the drag styling matches the real drop-target state.
740
+ - Keep `title`/`description` (accepted types, size limit) accurate - they are the zone's only affordance copy; override the whole body via `children` when needed.
741
+
742
+ ## Flex
743
+
744
+ `@instruments/materia-ui/components/flex`
745
+
746
+ Flexbox container with token-driven direction, alignment, justification, wrapping, and gap.
747
+
748
+ Layout props (`direction`, `justify`, `align`, `wrap`, `gap`) accept a single value or a per-breakpoint responsive object like `{ base: "column", md: "row" }`; set `responsiveMode` to `"container"` to resolve breakpoints against the nearest container instead of the viewport.
749
+
750
+ - `Flex` exposes full flexbox (`direction`/`justify`/`align`/`wrap`) and defaults to a row; for a simple gapped column reach for `Stack`, for a wrapping cluster `Group`.
751
+ - Every layout prop takes a responsive object like `{ base: "column", md: "row" }`; set `responsiveMode="container"` to resolve breakpoints against the nearest container.
752
+ - `as` and `render` are mutually exclusive (`render` wins, dev-warned); `as` draws from the closed layout vocabulary, so `as="button"` is a type error (use `Button`).
753
+ - Use `as` to change the element (a tag); use `render` only to swap in a component (e.g. a router Link). Never `render={<Box as=…/>}` - pass `as` directly.
754
+
755
+ ## FolderTile
756
+
757
+ `@instruments/materia-ui/compositions/folder-tile`
758
+
759
+ Animated folder button showing a fanned preview of up to three materials, an opening flap, selected styling, and an optional hover action slot.
760
+
761
+ Visual state is derived from `materials` unless `state` is set; the folder leans open on hover (`openOnHover`) or when forced open as a drop target (`open`). All motion collapses to instant under reduced-motion preferences.
762
+
763
+ - Only the first three `materials` render in the fan; pass `itemCount` when the real total differs, otherwise the count shows `materials.length`.
764
+ - Supply `renderImage` in Next.js so previews go through `next/image` - the default renders plain `<img>` from each material's `src`/`alt`.
765
+ - Drive drag-and-drop drop-target styling with `open` (forces the open look without revealing the action); use `selected`+`showSelectedState` for selection, not manual classes.
766
+ - `FolderTile` is itself the button - pass `name`/`onClick` and button props directly; don't wrap it in another `<button>`/`<a>`.
767
+
768
+ ## GalleryImage
769
+
770
+ `@instruments/materia-ui/components/gallery`
771
+
772
+ Gallery image that handles variant changes with crossfade. Shows old image + shimmer while new image loads, then crossfades.
773
+
774
+ Framework-agnostic: uses a render prop to let you provide any image component.
775
+
776
+ - In Next.js pass a `children` render prop wrapping `next/image` and thread its `src`+`className` through - the default renderer is a plain `<img>` that skips Next optimisation.
777
+ - When you omit `children`, `alt` is required (a dev warning fires otherwise); pass `alt=""` to mark the image decorative. `alt` is ignored once a render prop supplies its own image.
778
+ - Drive variant switches by changing `src` - that triggers the built-in crossfade + shimmer; don't unmount/remount `GalleryImage` per variant or you lose the transition.
779
+ - Position `GalleryImage` inside a `relative` container with fixed dimensions - the surfaces are `absolute inset-0`, so an unsized parent collapses to zero height.
780
+
781
+ ## Grid
782
+
783
+ `@instruments/materia-ui/components/grid`
784
+
785
+ CSS Grid layout with configurable columns, gaps, and alignment; `columns`, the gaps and the alignment props accept a responsive object keyed by breakpoint. Compose column spans with `GridCol` children.
786
+
787
+ - `Grid` gives full 2-D control - compose `GridCol` children with `span`/start/order; if you only need equal-width responsive columns, `SimpleGrid` is lighter.
788
+ - `columns`, `gap`, and alignment each accept a per-breakpoint object; `responsiveMode="container"` resolves them against the nearest container query.
789
+ - For a grid whose tracks come from its own className or its children (`grid-cols-[...]`, `grid-flow-col`), pass `columns="none"`: it emits no column classes and no default alignment. `"none"` is a whole value, not a breakpoint key. `inline` (a boolean) renders `inline-grid`.
790
+ - `as` and `render` are mutually exclusive (`render` wins, dev-warned); `as` draws from the closed layout vocabulary, so `as="button"` is a type error (use `Button`).
791
+ - Use `as` to change the element (a tag); use `render` only to swap in a component (e.g. a router Link). Never `render={<Box as=…/>}` - pass `as` directly.
792
+
793
+ ## GridCol
794
+
795
+ `@instruments/materia-ui/components/grid`
796
+
797
+ A column within a `Grid` that sets its span, start position, and order; each of these accepts a responsive object keyed by breakpoint.
798
+
799
+ - `as` and `render` are mutually exclusive (`render` wins, dev-warned); `as` draws from the closed layout vocabulary.
800
+ - Use `as` to change the element (a tag); use `render` only to swap in a component (e.g. a router Link). Never `render={<Box as=…/>}` - pass `as` directly.
801
+
802
+ ## Group
803
+
804
+ `@instruments/materia-ui/components/group`
805
+
806
+ Horizontal flex container for grouping related elements with consistent spacing.
807
+
808
+ - `Group` is a horizontal cluster of related controls (buttons, chips) that can `wrap`; for a vertical stack use `Stack`, for full flex control use `Flex`.
809
+ - Control horizontal distribution with `position` (its justify prop) and vertical alignment with `align`; both `gap` and `wrap` accept per-breakpoint objects.
810
+ - `as` and `render` are mutually exclusive (`render` wins, dev-warned); `as` draws from the closed layout vocabulary, so `as="button"` is a type error (use `Button`).
811
+ - Use `as` to change the element (a tag); use `render` only to swap in a component (e.g. a router Link). Never `render={<Box as=…/>}` - pass `as` directly.
812
+
813
+ ## Heading
814
+
815
+ `@instruments/materia-ui/components/heading`
816
+
817
+ Renders a semantic heading element with configurable level and size. `size` names a type role and accepts responsive values: `size={{ base: "heading-sm", md: "heading-lg" }}`.
818
+
819
+ - Set `level` (`h1`–`h6`) for the document outline and `size` for visual scale independently - don't pick a tag just to get a size; a small-looking heading can still be an `h2`.
820
+ - Keep one `h1` per page and don't skip levels for styling; use `size` (responsive-capable) to make a lower-level heading look larger.
821
+
822
+ ## HotspotIndicator
823
+
824
+ `@instruments/materia-ui/components/hotspot-indicator`
825
+
826
+ Animated hotspot dot (outer ring + inner dot) for marking locations on images.
827
+
828
+ Positioned absolutely by percentage (`centerX`/`centerY`), so it needs a positioned parent. Hover and active states are controlled by the parent via `hovered`/`active` - the dot grows and the ring pulses in response.
829
+
830
+ - Place it inside a `position: relative` parent - it positions itself absolutely by `centerX`/`centerY` percentages, so it lands wrong in a static-flow container.
831
+ - State is parent-controlled: pass `hovered`/`active` (plus `onMouseEnter`/`onClick`) - the dot grows and the ring pulses only in response; it tracks nothing itself.
832
+ - Always pass `label` - it's the button's `aria-label` and the hotspot's only accessible name; also mount `ReducedMotionProvider` so the pulse honours the OS motion setting.
833
+
834
+ ## HoverCard
835
+
836
+ `@instruments/materia-ui/components/hover-card`
837
+
838
+ Hover-triggered popover for supplementary content (previews, profile cards). Controlled via `open`/`onOpenChange`, or uncontrolled via `defaultOpen`; `HoverCardTrigger`'s `delay`/`closeDelay` (ms) tune the hover-in / hover-out timing.
839
+
840
+ - Use `HoverCard` for rich hover content (preview, profile card); a one-line hint is a `Tooltip`, a click-opened panel is a `Popover`.
841
+ - It opens on hover / focus only - never hide essential actions or content a touch / keyboard-only user can't otherwise reach behind it.
842
+ - Tune the trigger's `delay`/`closeDelay` (ms) instead of adding your own timers; `HoverCardContent` portals to the body.
843
+
844
+ ## Icon
845
+
846
+ `@instruments/materia-ui/components/icon`
847
+
848
+ Renders the given icon as a decorative SVG - always `aria-hidden` and non-focusable, with a fixed 1.5 stroke width.
849
+
850
+ - Route every lucide/SVG glyph through `Icon` (`<Icon icon={ArrowRight} />`), never the raw component - it fixes the `1.5` stroke and size scale so icons stay consistent.
851
+ - `Icon` is always `aria-hidden` + non-focusable - pair it with visible text or give the interactive parent an `aria-label`; never rely on it to name a control.
852
+ - Size with the `size` token (`"sm"`,`"lg"`…), not `className="size-6"` - the scale maps to the shared `ComponentSize` steps other components align to.
853
+
854
+ ## IconBox
855
+
856
+ `@instruments/materia-ui/components/icon-box`
857
+
858
+ Renders an icon inside a styled surface box - for empty states, feature highlights, and status indicators. Icon size defaults to the box size. Import from "@instruments/materia-ui/components/icon-box".
859
+
860
+ - Reach for `IconBox` for a framed-icon surface (empty states, feature highlights) instead of wrapping `Icon` in a hand-styled `div` - it owns the size→radius and box→icon-size pairings.
861
+ - Set colour via `tone`, not a hex/`bg-*` className - `tone` carries the paired surface+foreground tokens, including the dark-mode variants.
862
+ - Let `iconSize` default from the box `size`; override only when the glyph must break the built-in `BOX_TO_ICON_SIZE` ratio.
863
+
864
+ ## IconCard
865
+
866
+ `@instruments/materia-ui/components/icon-card`
867
+
868
+ A selectable card pairing an icon over a label, for option pickers such as property-type or category choices; renders a native button and forwards its props.
869
+
870
+ - `IconCard` is itself a native `<button>` - wire `selected`/`onClick` and drive a single-select group in state; don't nest it in another button or anchor.
871
+ - Pass a Lucide component to `icon` (e.g. `HomeIcon`), not a rendered element `<HomeIcon />` - it is handed to the internal `Icon` for consistent sizing/stroke.
872
+ - Use `IconCard` for compact icon-over-label option pickers (property type, category); for a content container with header/body reach for `Card`, and for a settings row use `SettingsCard`.
873
+
874
+ ## IconMorph
875
+
876
+ `@instruments/materia-ui/components/icon-morph`
877
+
878
+ Icon with blur-crossfade morph animation between icon changes.
879
+
880
+ Drop-in replacement for Icon when you need animated transitions. The icon stays in place while crossfading with a blur effect.
881
+
882
+ - Change `morphKey` whenever `icon` changes (e.g. play↔pause) - the crossfade is keyed off it, so a stale key swaps the new glyph in with no morph.
883
+ - Use it as the animated drop-in for `Icon`; for a plain static glyph stay on `Icon` and skip the extra `AnimatePresence`/motion cost.
884
+ - Needs `ReducedMotionProvider` for the blur-crossfade to run and honour reduced motion; like `Icon` it renders `aria-hidden`, so name the control elsewhere.
885
+
886
+ ## IdentifiedSurfaceFrame
887
+
888
+ `@instruments/materia-ui/components/identified-surface`
889
+
890
+ High-contrast brackets and disclosure frame for an object identified inside an image or document. Resting corners preserve the evidence geometry; highlight and active states reveal the complete frame and compact label.
891
+
892
+ - Position this over the exact identified bounds inside a relative container; inflate the bounds outside this component when the source geometry is smaller than a comfortable pointer target.
893
+ - Pair it with a real button or link. This component is deliberately pointer-transparent and carries no interaction semantics of its own.
894
+
895
+ ## Input
896
+
897
+ `@instruments/materia-ui/components/input`
898
+
899
+ Simple standalone input field (Base UI `Input`). Inside a Field it is the field's control: the FieldLabel targets it, FieldDescription/FieldError describe it, and it inherits the field's invalid state (`aria-invalid`). `hasError` forces error styling and `aria-invalid` on a standalone input. For inputs with icons, addons, or buttons, use InputGroup.
900
+
901
+ - For icons, addons, prefixes, or trailing buttons use `InputGroup`, not `Input` plus manually absolute-positioned decorations.
902
+ - Inside a `Field`, let invalid state cascade - omit `hasError`; pass `hasError` only to force error styling on a standalone `Input`. An invalid `Field` keeps `aria-invalid` on its control even with `hasError={false}`.
903
+ - Give every `Input` an associated label - inside a `Field` a `FieldLabel` targets it with no ids to wire; standalone, point a `Label`'s `htmlFor` at its `id`. A placeholder is not an accessible name.
904
+ - `size` defaults to `"xl"` (48px); pass a responsive object like `{ base: "sm", md: "xl" }` rather than swapping components per breakpoint.
905
+
906
+ ## InputCard
907
+
908
+ `@instruments/materia-ui/components/input-card`
909
+
910
+ Primitive selectable card used as the base for RadioCard and CheckboxCard.
911
+
912
+ Purely presentational - the parent owns `selected` and click handling. Selection and disabled states are exposed as `data-selected`/`data-disabled` for styling.
913
+
914
+ - `InputCard` is a presentational primitive - the parent owns `selected` and click handling; for real form semantics use `RadioCardGroup`/`CheckboxCardGroup`, which build on it.
915
+ - Drive the selected look via the `selected` prop (it sets `data-selected` + the primary tint), not by appending your own active classes.
916
+ - Use `render` to project the card styling onto a real interactive element (e.g. a `<label>` wrapping an input) when you need native selection behaviour.
917
+
918
+ ## InputGroup
919
+
920
+ `@instruments/materia-ui/components/input-group`
921
+
922
+ Composition container for inputs with addons, icons, and buttons. Distributes size/radius/disabled to its children via context, and inherits invalid state from an ancestor Field unless `hasError` is set explicitly. Import from "@instruments/materia-ui/components/input-group".
923
+
924
+ - Compose with the `InputGroup*` parts (`InputGroupInput`, `InputGroupIcon`, `InputGroupAddon`, `InputGroupButton`) - a raw `<input>` won't receive the shared size/radius/disabled context.
925
+ - Set `size`/`radius`/`disabled` once on `InputGroup`; children inherit them via context, so don't re-set them per child.
926
+ - Inside a `Field` the group inherits invalid state and its `InputGroupInput`/`InputGroupTextarea` becomes the field's control (labelled, described, `aria-invalid`) - pass `hasError` only to force error styling and `aria-invalid` independently.
927
+
928
+ ## InputOTP
929
+
930
+ `@instruments/materia-ui/components/input-otp`
931
+
932
+ One-time password input component for verification codes.
933
+
934
+ - Set `length` to the code length and render exactly that many `InputOTPSlot`s - slots take their position from their order in the tree, so there is no `index` prop.
935
+ - Drive it controlled with `value`/`onValueChange` (a plain string), or react to `onValueComplete` once the string reaches full `length`.
936
+ - Characters are filtered by `validationType` (`"numeric"` by default; `"alpha"`, `"alphanumeric"` and `"none"` are also available) - pass `"alphanumeric"` for codes that contain letters.
937
+ - Split slots into `InputOTPGroup`s with an `InputOTPSeparator` between them for visual grouping only - it does not change the underlying value.
938
+
939
+ ## Item
940
+
941
+ `@instruments/materia-ui/components/item`
942
+
943
+ Item is a standalone component for displaying a single piece of content. Use with ItemContent, ItemTitle, ItemDescription, etc. for structured content.
944
+
945
+ - Structure content with `ItemContent`/`ItemTitle`/`ItemDescription` (plus `ItemMedia`/`ItemActions`) rather than raw divs - the compound parts carry the gap and truncation rhythm.
946
+ - Wrap a set of items in `ItemGroup` and set the look via its `variant` (`divided`/`separated`/`grouped`) - `Item` adapts automatically, so avoid re-styling borders/backgrounds per item.
947
+ - Use `render` to make the whole item a link/button (e.g. `render={<Link href="…" />}`); the item's children become the link's content.
948
+ - Reach for `Item` for generic single rows; for files/documents use `DocumentList`, and for term/value metadata use `DescriptionList`.
949
+
950
+ ## Kbd
951
+
952
+ `@instruments/materia-ui/components/kbd`
953
+
954
+ Keyboard key indicator for displaying keyboard shortcuts.
955
+
956
+ - Wrap multi-key chords in `KbdGroup` and set `size` on the group - children inherit it via context, so you size the combo once.
957
+ - It renders a semantic `<kbd>`; reserve it for keyboard keys/shortcuts, not as a generic small-label chip (that's `Badge`).
958
+
959
+ ## Label
960
+
961
+ `@instruments/materia-ui/components/label`
962
+
963
+ Renders an accessible label element that can be associated with form controls.
964
+
965
+ - Point `htmlFor` at the control's `id` so clicking the label focuses/toggles it; a `Label` with no association is just styled text.
966
+ - For checkbox/radio rows and fields, prefer `CheckboxField`/`FieldLabel`/`RadioGroupItem`, which generate the `id`/`htmlFor` pairing for you.
967
+
968
+ ## LoadingState
969
+
970
+ `@instruments/materia-ui/compositions/loading-state`
971
+
972
+ LoadingState is a full-region blocking loading indicator: a centred spinner (optionally labelled) filling a minimum height.
973
+
974
+ Prefer `SkeletonText`/`SkeletonRow` for in-place loading inside content that's already on screen - reach for `LoadingState` only when the whole region has nothing else to show yet.
975
+
976
+ - Reserve `LoadingState` for a whole region / page with nothing to show yet; for in-place loading over existing layout prefer `Skeleton`, and a small inline spinner is `Spinner`.
977
+ - Pass `label` to name the live region for AT; it already renders `aria-live="polite"` with a default "Loading" name, so don't add your own status role.
978
+
979
+ ## LocationInput
980
+
981
+ `@instruments/materia-ui/components/location-input`
982
+
983
+ Location autocomplete input with a dropdown of suggestions for city or address search. The geocoder is injected: pass `search` (query to suggestions) and `resolve` (suggestion to full `Location`). Queries are debounced by 300ms and start at two characters.
984
+
985
+ - `search` and `resolve` are required - the component has no built-in geocoder. Wrap your provider (Google Places, Mapbox, your own API) in those two functions.
986
+ - `search` may reject; the dropdown then shows no suggestions. Return `null` from `resolve` to ignore a selection.
987
+ - Pick `mode="city"` vs `"address"` to scope the geocoding; drive it controlled via the `Location` `value` + `onChange` (which also fires on clear).
988
+
989
+ ## Logo
990
+
991
+ `@instruments/materia-ui/components/logo`
992
+
993
+ Brand mark. Renders the Material Bank logo by default; pass `mark` (and `label`) to show your own. Uses currentColor for fill, so colour can be controlled via text-* classes.
994
+
995
+ - Recolour the mark with a `text-*` class - it fills from `currentColor`; passing `fill`/a hex defeats the single-source colour and breaks dark-mode inheritance.
996
+ - Size with the `size` preset (`sm`–`xl`), not a `className` width/height - presets keep the mark on the shared `ComponentSize` scale.
997
+ - Don't add your own `aria-label`/`role` - `Logo` already ships `role="img"` + "Material Bank" (change the name with `label`); wrap it in a link only when you need a click target.
998
+ - To use your own brand, pass `mark` as SVG shapes in a 48x48 viewBox filled with `currentColor`, and a matching `label` - don't wrap or overlay the default mark.
999
+
1000
+ ## MarqueeText
1001
+
1002
+ `@instruments/materia-ui/components/marquee-text`
1003
+
1004
+ A clipped single-line label that becomes a hover-triggered marquee when its text is wider than the clip box, and stays a plain truncated label when it fits. On overflow it renders a duplicate `aria-hidden` copy and scrolls the pair for a seamless loop; a `ResizeObserver` on both the clip box and the text node re-measures on resize and on content change, setting `--marquee-duration` / `--marquee-shift`.
1005
+
1006
+ Extracted from `product-card-category`'s `CategoryLabel`.
1007
+
1008
+ - The scroll is gated on a `.group` ancestor's hover (the `.animate-marquee` utility runs only under `.group:hover`, plus a `data-play="running"` escape hatch) - a lone `MarqueeText` will not animate on its own hover. Wrap it in a `.group` element (typically the hoverable card) to trigger the reveal.
1009
+ - It only scrolls when the text overflows; short text that fits stays a static clipped label with no duplicate copy and no animation.
1010
+ - Honours `prefers-reduced-motion` automatically via the shared `.animate-marquee` utility, which disables the animation.
1011
+
1012
+ ## MediaFrame
1013
+
1014
+ `@instruments/materia-ui/components/media-frame`
1015
+
1016
+ A rounded clip frame for media (image or video). Establishes a `relative overflow-hidden` positioning context and clips its single child to a rounded corner - but it is a dumb box: it does NOT size or cover-fill the child. Give it one media child with `size-full object-cover` (identical contract to `AspectRatio`). Radius, size, and positioning all come from the `className` you pass (`rounded-2xl`, `size-full`, `absolute inset-0`, …) - there is no `radius` prop.
1017
+
1018
+ Extracted from the product-card and editorial-card media frames; available to any composition that needs a rounded overflow-clip layer.
1019
+
1020
+ - MediaFrame is a dumb clip box - it does not size or cover-fill the child; give it one media child with `size-full object-cover`, like AspectRatio.
1021
+ - Set radius, size, and positioning through `className` (`rounded-3xl`, `size-full`, `absolute inset-0`) - there is no `radius` prop.
1022
+ - Use `as` to change the element (a tag); use `render` only to swap in a component (e.g. a router Link). Never `render={<Box as=…/>}` - pass `as` directly.
1023
+ - Set `edge` to frame photography with an inset hairline that stays above the media; do not fake it with a border or an inset shadow on the frame, which the media hides.
1024
+ - Reach for `raised` only when the frame sits on the same fill as its surface; in a dense row the edge already separates it.
1025
+
1026
+ ## MediaFrameEmbed
1027
+
1028
+ `@instruments/materia-ui/components/media-frame`
1029
+
1030
+ An embedded document (an `<iframe>`) as `MediaFrame` media: borderless, block-level and lazy-loaded by default. Size and any scaling come from the caller - pass a device-sized `style` and a `transform` to preview a page at a real viewport inside a smaller plate.
1031
+
1032
+ - A decorative preview belongs inside an `inert` wrapper with the real link beside it, so keyboard and screen-reader users never land inside the embedded page.
1033
+ - Always give `title` a name that says what the document is; it is the frame's only accessible name.
1034
+
1035
+ ## MegaMenu
1036
+
1037
+ `@instruments/materia-ui/compositions/mega-menu`
1038
+
1039
+ A header's full-width menu of catalogue sections: a trigger in the header opens a sheet beneath the shell's chrome, over a dimmed sidebar and page. It opens on a press, not on hover; Escape, a press on the page or choosing a link closes it, and focus returns to the trigger. Modal by default, so the page behind it is blocked and does not scroll. Import from "@instruments/materia-ui/compositions/mega-menu".
1040
+
1041
+ - Use it in a shell whose chrome is lifted (`Sidebar header`, the fixed `SidebarLayoutHeader`): the panel fills the window from the top, beneath the chrome, so the brand row, search and actions stay on top of it.
1042
+ - Keep it to navigation. Every entry is a `MegaMenuLink`, which closes the menu as it navigates; actions belong in a `DropdownMenu`.
1043
+
1044
+ ## Menubar
1045
+
1046
+ `@instruments/materia-ui/components/menubar`
1047
+
1048
+ Horizontal application menu bar (File / Edit / View). Wraps Base UI Menubar; compose with MenubarMenu for each top-level menu. Open state belongs to each MenubarMenu (`open`/`onOpenChange`); the bar itself has no open-menu value.
1049
+
1050
+ - Reserve `Menubar` for a persistent desktop app menu bar; a single click menu is `DropdownMenu`, a right-click menu is `ContextMenu`.
1051
+ - Give each top-level label its own `MenubarMenu`, and control a menu's open state on that `MenubarMenu` (`open`/`onOpenChange`) rather than on the bar.
1052
+
1053
+ ## MenuItem
1054
+
1055
+ `@instruments/materia-ui/components/menu-item`
1056
+
1057
+ A standalone menu item component for use in popovers, sheets, and custom menus. This is the base component that DropdownMenuItem and other menu items build upon.
1058
+
1059
+ - `MenuItem` is the standalone base for custom menus (popovers, sheets); inside a `DropdownMenu` / `ContextMenu` use that family's `*Item` for built-in roving focus.
1060
+ - Pass glyphs via the `icon` / `dot` / `avatar` / `kbd` / `suffixIcon` props, not as children - with `render` they render around `children`, which is the label only.
1061
+
1062
+ ## MobileNavigationAppHeader
1063
+
1064
+ `@instruments/materia-ui/compositions/mobile-navigation`
1065
+
1066
+ Fixed top app bar for the mobile shell; hidden from `hideFrom` up.
1067
+
1068
+ - Inside a `SidebarProvider` frame pass `hideFrom="md"`: the sidebar switches to its desktop rail at md, so the bar should hand over at the same width rather than overlap the rail between md and lg.
1069
+ - Set `surface` to the colour of the page under the bar - `card` when the phone's whole screen is the content card (an inset sidebar frame), `background` on a flat (`variant="sidebar"`) frame's page, `muted` on the grey canvas - so content scrolls under it without a seam.
1070
+
1071
+ ## MobileNavigationHeaderAction
1072
+
1073
+ `@instruments/materia-ui/compositions/mobile-navigation`
1074
+
1075
+ Fixed-size pill icon button sized for the mobile app bar - 40px tall / 56px wide, so the bar stays visually light at phone widths without becoming a literal white island in dark mode. The tap target is the 40×56 pill itself: a hit-area pseudo-element can't extend it - the Button's `soft` variant is `overflow-hidden` (which clips its own pseudo-elements), and the bar's `gap-1` between pills is too tight for outward extension without overlapping neighbours.
1076
+
1077
+ Pass short `children` (a count, say) beside the `icon` and the pill widens from its 56px minimum to fit them, keeping the same height.
1078
+
1079
+ - Keep children to a few characters, such as a cart count, and give the action an `aria-label` that says what the number means.
1080
+
1081
+ ## MobileNavigationRoot
1082
+
1083
+ `@instruments/materia-ui/compositions/mobile-navigation`
1084
+
1085
+ Full-screen fixed overlay that hosts the mobile navigation; hidden from `lg` up.
1086
+
1087
+ Carries modal-dialog semantics: focus is trapped inside the overlay while it is mounted, cycles with Tab, and returns to the trigger once it unmounts. Pressing Escape invokes `onClose`. The accessible name defaults to "Navigation menu" and can be overridden via `aria-label`.
1088
+
1089
+ Renders an `m.div`, so consumers can drive enter/exit motion (e.g. a slide) by passing `initial`/`animate`/`exit`/`transition` and wrapping in `AnimatePresence`. With no motion props it renders statically. Horizontal overflow is clipped (`overflow-x-clip`) so a nested drill-in view sliding off-screen never spawns a horizontal scrollbar; vertical content still scrolls.
1090
+
1091
+ - Wire `onClose` to your open-state setter - the overlay traps focus and fires it on Escape, but you own mounting/unmounting.
1092
+ - It's `role="dialog"`+`aria-modal` and hidden from `lg` up, so pair it with a desktop nav rather than showing both at once.
1093
+ - Override the default "Navigation menu" accessible name via `aria-label` when the drawer's purpose is more specific.
1094
+
1095
+ ## MonthYearPicker
1096
+
1097
+ `@instruments/materia-ui/components/month-year-picker`
1098
+
1099
+ MonthYearPicker allows selecting a month and year, or choosing "Beyond" / "I'm not sure". Auto-advances to the next step when both month and year are selected.
1100
+
1101
+ - `value` is a union - a `Date`, `"beyond"`, or `"unsure"` - so branch on the string sentinels in `onChange` before treating it as a date.
1102
+ - Enable the "I'm not sure" escape hatch with `showUnsure` (off by default); `"unsure"`/`"beyond"` only ever arrive when their toggles are shown.
1103
+ - Bound the range with `yearsAhead` (from the current year); it auto-advances and commits once both month and year are chosen, so don't add your own "next" control.
1104
+
1105
+ ## MorphDialog
1106
+
1107
+ `@instruments/materia-ui/components/morph-dialog`
1108
+
1109
+ Root of a dialog that morphs open from its trigger via a shared-element layout animation - the trigger and the dialog card share a `layoutId`, so Motion tweens position, size, radius, and shadow between them.
1110
+
1111
+ Controlled when `open` is passed, otherwise uncontrolled. Provides context to the trigger, content, title, and description parts.
1112
+
1113
+ - Reach for `MorphDialog` only when the modal should animate out of its trigger element (shared-layout); a plain centred modal is a `Dialog`.
1114
+ - Pass the trigger's `borderRadius` / `boxShadow` via `style` (not `className`) on `MorphDialogTrigger` so Motion can correct their distortion during the morph.
1115
+ - Render a `MorphDialogTitle` (use `visuallyHidden` if needed) for the accessible name; mount `ReducedMotionProvider` at the app root since it animates via `m.*`.
1116
+
1117
+ ## NativeSelect
1118
+
1119
+ `@instruments/materia-ui/components/native-select`
1120
+
1121
+ Styled wrapper around a real native `<select>`, so it stays controlled and accessible through standard select props (`value`/`defaultValue`/`onChange`) and keeps the platform's keyboard and mobile picker behaviour.
1122
+
1123
+ - `NativeSelect` wraps a real `<select>` - use standard `value`/`defaultValue`/`onChange` and `NativeSelectOption`/`NativeSelectOptGroup` children, not `Select` parts.
1124
+ - Reach for `NativeSelect` when the native mobile picker and zero-JS behaviour matter; use `Select` when you need custom-rendered option content or styling.
1125
+ - It has no built-in label - associate a `Label` via `htmlFor`/`id` for an accessible name.
1126
+
1127
+ ## NavigationMenu
1128
+
1129
+ `@instruments/materia-ui/components/navigation-menu`
1130
+
1131
+ Horizontal site navigation whose entries can open dropdown panels of links or rich content. Wraps Base UI NavigationMenu Root; compose with NavigationMenuList and NavigationMenuItem. Which entry is open is uncontrolled by default; pass `value`/`onValueChange` to control it.
1132
+
1133
+ - Reserve `NavigationMenu` for site/section navigation with panels; a click actions menu is `DropdownMenu`, a desktop app menu bar is `Menubar`, and simple in-page routed tabs are `TabNavigation`.
1134
+ - Keep it uncontrolled unless you must drive it; leave `viewport` on unless you render your own `NavigationMenuViewport` (e.g. to place a `NavigationMenuIndicator` in it).
1135
+
1136
+ ## PageHeader
1137
+
1138
+ `@instruments/materia-ui/compositions/page-header`
1139
+
1140
+ Canonical page header - the top of a page, beneath the app's own header. Pass its parts and it lays them out: a breadcrumb or back link, the title with optional media, a count or badge and a subtitle, the page's actions, and a switcher beneath between views of what the page shows. Every part but the title is optional, and a row with nothing in it is not rendered. It says what the page is; the controls that narrow or order a list sit in a `PageToolbar` beneath it.
1141
+
1142
+ - Pass `title` and the parts the page has rather than composing rows by hand; the header owns wrapping, truncation and spacing, so every page reads the same.
1143
+ - A count belongs in `meta` or `subtitle`, never in the title text; a back link belongs in `breadcrumb`, never in `actions`.
1144
+ - `nav` switches between views of the thing the page shows (a pill `TabNavigation` of routes). Type switchers, filters, sort and view belong in a `PageToolbar`, each once.
1145
+ - Set `layout="stacked"` and wrap each row in `PageHeaderRow` for multi-row headers; the default `"single"` wraps only when a narrow viewport needs to protect the title or actions.
1146
+ - `PageHeader` is the sub-header below the app `HeaderBar`, not the app chrome itself - use `SidebarProvider` with `SidebarInset` or `HeaderBar` for the top-level frame; its `sticky` offset assumes that header is present.
1147
+
1148
+ ## PageHeaderLead
1149
+
1150
+ `@instruments/materia-ui/compositions/page-header`
1151
+
1152
+ Primary content slot for a `PageHeader`. Stacks location context such as a breadcrumb above the page title while keeping the whole group aligned with the header actions.
1153
+
1154
+ - Keep the current page out of a breadcrumb when the adjacent `PageHeaderTitle` already names it.
1155
+
1156
+ ## PageToolbar
1157
+
1158
+ `@instruments/materia-ui/compositions/page-toolbar`
1159
+
1160
+ A page's filter and view bar. It sits beneath the page header and holds to the top of the window, under the app's header, while the page scrolls: the filters on one side, scrolling sideways when there are more than fit, and the sort and view controls on the other. At rest it reads as part of the page; once it is holding, a hairline separates it from the content passing beneath. Import from "@instruments/materia-ui/compositions/page-toolbar".
1161
+
1162
+ - Place it straight after the `PageHeader`, in the column that holds the page's content; the title scrolls away and the toolbar stays.
1163
+ - Order the leading side the same on every page: `PageToolbarFiltersButton` first, in the `button` slot so it holds still carrying the applied count; then `PageToolbarApplied`, the filters in force with Clear all; then the suggestions.
1164
+ - Applied filters always lead, so they never scroll out of view behind suggestions. Pressing a suggestion moves it into the applied group; it is never shown twice.
1165
+ - When a filter rail holds the facets, the toolbar still shows what the rail has applied, with no suggestions after it (`separator={false}`).
1166
+ - Each facet appears once. A `SegmentedControl` when the facet splits the set and one part is viewed at a time (its counts sum to the total); `PageToolbarFilter` chips when several combine. Never both for the same facet.
1167
+ - Keep the actions to `PageToolbarSort`, which names the current order, and a view toggle. Page actions such as export belong in the `PageHeader`.
1168
+
1169
+ ## Pagination
1170
+
1171
+ `@instruments/materia-ui/components/pagination`
1172
+
1173
+ Standalone pagination component. Works with any data source - not coupled to react-table.
1174
+
1175
+ - Drive it as a controlled control - pass `page`+`totalPages` and update state in `onPageChange`; it holds no internal page state.
1176
+ - It is data-source agnostic (not coupled to react-table); for grid paging use the DataGrid's own pagination parts instead.
1177
+ - Signal an in-flight jump with `loadingPage={n}` so only that button spins; leave a11y labels to the component (each control is pre-labelled).
1178
+
1179
+ ## PhoneInput
1180
+
1181
+ `@instruments/materia-ui/components/phone-input`
1182
+
1183
+ Phone number input with an integrated country selector, built on react-phone-number-input; emits E.164-formatted values via `onChange`.
1184
+
1185
+ - `onChange` emits an E.164 string (e.g. `+15550000000`) or `undefined` while the number is incomplete/cleared - store that shape, don't reformat the raw text yourself.
1186
+ - Set `defaultCountry` (ISO alpha-2, default `"US"`) for the initial calling code; the integrated country selector then lets users switch.
1187
+ - Validate the emitted E.164 value (e.g. via react-phone-number-input's `isValidPhoneNumber`) rather than regex-matching the display text.
1188
+
1189
+ ## Pill
1190
+
1191
+ `@instruments/materia-ui/components/pill`
1192
+
1193
+ Pill - internal base component for pill-shaped UI elements.
1194
+
1195
+ This is a noop: it applies shared variant styling and renders children. Not intended for direct use in application code. Use Badge (presentational) or Tag (interactive) instead.
1196
+
1197
+ - Don't reach for `Pill` in app code - it's the shared styling base; use `Badge` for display-only labels/counts and `Tag` for interactive (clickable/dismissible) chips.
1198
+ - `Pill` is presentation-only and has no button semantics or dismiss/click handling - those live on `Tag`; adding `onClick` here yields a non-accessible pseudo-button.
1199
+
1200
+ ## PixelLoader
1201
+
1202
+ `@instruments/materia-ui/components/pixel-loader`
1203
+
1204
+ Compact pixel-grid loader with shimmer label.
1205
+
1206
+ - Use for inline chat / agent waits. Prefer ThinkingLoader when you have narrated steps; ThinkingOrb for avatar-scale state; DotMatrixLoader for prompt-bar intent glyphs.
1207
+
1208
+ ## Popover
1209
+
1210
+ `@instruments/materia-ui/components/popover`
1211
+
1212
+ Root component for a popover (non-modal floating panel). Manages open/closed state.
1213
+
1214
+ - Use `Popover` for an anchored non-blocking panel dismissed on outside-click / Esc; a page-blocking modal is a `Dialog`, a menu of actions is a `DropdownMenu`.
1215
+ - It's non-modal by default (`modal={false}`) so the page stays interactive - pass `modal` only when you must trap focus and block the background.
1216
+ - `PopoverContent` portals to the body; anchor to a non-trigger element with its `anchor` prop.
1217
+
1218
+ ## PopoverBackdrop
1219
+
1220
+ `@instruments/materia-ui/components/popover`
1221
+
1222
+ Scrim behind a modal popover, portalled to the body. A press on it closes the popover. Render it alongside `PopoverContent`; position it with `className` when it should leave part of the page, such as a fixed header, uncovered.
1223
+
1224
+ - Pair it with `modal` on `Popover`: the scrim says the page is blocked, and only a modal popover blocks it.
1225
+
1226
+ ## ProductCard
1227
+
1228
+ `@instruments/materia-ui/compositions/product-card`
1229
+
1230
+ Shared ProductCard component.
1231
+
1232
+ This is a presentational component that accepts handlers via props for app-specific behaviour (sidepanels, stores, navigation).
1233
+
1234
+ - In Next.js apps pass `renderImage` wrapping `next/image` and `linkAs={Link}` - the defaults are a plain `<img>` and `<a>`.
1235
+ - Cart UI renders only when a `renderAddToCart` slot is provided; keep `dragAdapter` referentially stable (module-level constant).
1236
+
1237
+ ## ProductCardProvider
1238
+
1239
+ `@instruments/materia-ui/compositions/product-card`
1240
+
1241
+ Context provider for ProductCard. Manages variant selection and provides product data + render seams to children. App-specific behaviour (navigation, cart, drag) is injected via props.
1242
+
1243
+ - Pass `renderImage` wrapping `next/image` in Next.js apps - the default renderer is a plain `<img>` and skips Next's optimisation.
1244
+ - Keep `dragAdapter` referentially stable (a module-level constant) - an inline factory remounts the image subtree and drops the drag ref mid-drag.
1245
+
1246
+ ## ProductSpecificationsSelector
1247
+
1248
+ `@instruments/materia-ui/compositions/product-specifications-selector`
1249
+
1250
+ Renders the stack of variant/filter selector fields for a product so a product configuration can be refined interactively.
1251
+
1252
+ The component renders only the field stack - no card, heading, or CTA chrome. Compose those around it (a `Card`, your own title) when a surface calls for a titled panel.
1253
+
1254
+ - Drive it as a controlled component: it renders from `filters` and emits `onFilterChange(key, value)` - it holds no internal filter state, so persist the value and feed it back.
1255
+ - It renders nothing when there are no `variantOptions` dimensions and no `siblings` with images - supply `siblings`/`siblingsWithAttributes` so single-colourway products still show a fallback thumbnail.
1256
+ - Pass `renderImage` (wrapping `next/image`) in Next.js; the default is a plain `<img>`. The component ships bare - wrap it in a `Card` with your own heading when a panel is wanted.
1257
+
1258
+ ## Progress
1259
+
1260
+ `@instruments/materia-ui/components/progress`
1261
+
1262
+ Linear progress bar showing completion from 0 to 100; pass `value={null}` for an indeterminate (empty) track. Built on Base UI Progress for accessible semantics.
1263
+
1264
+ - Use `Progress` for determinate 0–100 completion (`value={null}` for an indeterminate track); position in a stepped flow is `ProgressDots`.
1265
+ - For a ring instead of a bar use `ProgressCircle` - it needs an explicit `label` for its native `<progress>` accessible name.
1266
+
1267
+ ## ProgressDots
1268
+
1269
+ `@instruments/materia-ui/components/progress-dots`
1270
+
1271
+ Step progress indicator driven by `current`: completed steps and the current step render as expanded pills, pending steps as small dots. Passing `onDotClick` makes dots interactive step-navigation targets; `labels` surface as hover tooltips.
1272
+
1273
+ - Use `ProgressDots` for position in a short stepped flow (wizard, carousel); continuous 0–100 completion is `Progress`.
1274
+ - Pass `onDotClick` only when steps are navigable - it turns each dot into a focusable button; `labels` surface as hover tooltips.
1275
+ - Mount `ReducedMotionProvider` at the app root - the dots animate via `m.*` (LazyMotion).
1276
+
1277
+ ## PromptPanel
1278
+
1279
+ `@instruments/materia-ui/compositions/prompt-panel`
1280
+
1281
+ Floating panel root - a shadowed card that prompts the user to pick an action or describe one. Compose it with `PromptPanelHeader` and `PromptPanelBody` (which stacks `PromptPanelOption`/`PromptPanelFreeform` rows); use `PromptPanelStage` around the body to animate between steps.
1282
+
1283
+ - Pass `title` (or an explicit `aria-label`) - the panel is a `role="dialog"` surface floating over other content, so it needs an accessible name of its own.
1284
+ - Wrap step transitions in `PromptPanelStage`, not a hand-rolled page swap - it owns the page-slide choreography and the reduced-motion fallback.
1285
+
1286
+ ## PromptPanelFreeform
1287
+
1288
+ `@instruments/materia-ui/compositions/prompt-panel`
1289
+
1290
+ The "write your own" row inside a `PromptPanel` - a bordered input for freeform text (leading icon + field + trailing `Kbd`). The row keeps the same border treatment whether focused or not; the inner `<input>` is outline-free so focus never adds a second frame.
1291
+
1292
+ - Pair it with `usePromptPanelKeyboard` for the full digit/Enter/Escape/Backspace contract - this component alone only submits on Enter.
1293
+ - Leave `placeholder` agent/consumer-supplied copy - don't hardcode "Type your own answer here" at call sites that need different phrasing.
1294
+
1295
+ ## PromptPanelHeader
1296
+
1297
+ `@instruments/materia-ui/compositions/prompt-panel`
1298
+
1299
+ Header section of a `PromptPanel`: an optional leading back button and a centred title. Laid out on a three-column grid (`1fr auto 1fr`) so the title stays perfectly centred whether or not the back button is present. The leading slot always reserves `icon-sm` (`size-8`) space so header height does not shift when `showBack` toggles between steps.
1300
+
1301
+ - Keep the title short - it has no truncation affordance beyond `truncate`, and the panel is a fixed `w-96`.
1302
+
1303
+ ## PromptPanelOption
1304
+
1305
+ `@instruments/materia-ui/compositions/prompt-panel`
1306
+
1307
+ Selectable option row inside a `PromptPanel` - a leading `Kbd` shortcut digit and a label. Full-width, borderless until hover (muted wash), and keyboard selectable via `usePromptPanelKeyboard`'s digit contract.
1308
+
1309
+ - Number `shortcut`s 1–9 in row order - `usePromptPanelKeyboard` maps digit keys to that same index.
1310
+ - Drive `highlighted` from roving keyboard focus (e.g. arrow-key navigation), not from `:hover` - hover is handled for you.
1311
+
1312
+ ## PromptPanelStage
1313
+
1314
+ `@instruments/materia-ui/compositions/prompt-panel`
1315
+
1316
+ Page-slide stage for `PromptPanel` step transitions. Two stacked pages crossfade with an 8px horizontal slide and 3px blur; `data-page` on the container picks the active page. Forward (`direction={1}`) lands on page 2 (enter from the right, exit left); back (`direction={-1}`) lands on page 1 (enter from the left, exit right). Height snaps to the active page - no layout/height morph. Under `prefers-reduced-motion`, CSS disables the transition so the flip is instant. Each page stacks its children with `gap="xs"` (8px).
1317
+
1318
+ - Track `direction` alongside `stepKey` in the parent's step state - going deeper is `1`, going back is `-1`; the stage can't infer it from the key alone.
1319
+ - Put freeform (and header) inside the stage page for multi-step flows so they participate in the page-slide; a freeform sibling outside Stage stays static and flashes when stage height snaps.
1320
+
1321
+ ## QuantityControl
1322
+
1323
+ `@instruments/materia-ui/components/quantity-control`
1324
+
1325
+ A compact quantity control on Base UI `NumberField`: the quantity is a number field that Arrow Up/Down step by one, and the buttons repeat while held. Shows a trash icon when quantity is at minimum and `onRemove` is set, minus icon otherwise.
1326
+
1327
+ - Pass `onRemove` when hitting the minimum should delete the item - the decrement button then swaps to a trash icon; without it, decrement just stops at `min`.
1328
+ - It's controlled - pass the current `value` and update it in `onIncrement`/`onDecrement`, which fire once per step for clicks, arrow keys and each repeat of a held button. Typing a number is not supported.
1329
+ - Tab focuses the quantity itself (the stepper buttons are skipped, as in any number field), announced by its `label`. In a list of lines, pass a `label` naming the item so each field is told apart.
1330
+
1331
+ ## QuickView
1332
+
1333
+ `@instruments/materia-ui/compositions/quick-view`
1334
+
1335
+ A centred, near-full-screen dialog that previews one item, typically a product, without leaving the page: a header with the item's name, a muted scrolling body and a footer for its actions. Controlled: the application decides what is shown and when it opens. Escape and a backdrop press close it, and focus returns to the control that opened it, even when a pointer press opened it without focusing that control. Import from "@instruments/materia-ui/compositions/quick-view".
1336
+
1337
+ - Keep the last viewed item in state after closing, so the panel does not empty while it animates out.
1338
+ - Put the item's name in `QuickViewHeader`; it is the dialog's accessible name.
1339
+ - Offer a way to the full page in the header's `actions` - a quick view previews, it does not replace the detail page.
1340
+ - A panel that docks beside the page (a cart) is a `Sidepanel`, not a quick view.
1341
+
1342
+ ## QuickViewDetails
1343
+
1344
+ `@instruments/materia-ui/compositions/quick-view`
1345
+
1346
+ The details column: a stack of flat cards on the body's muted surface. It is its own container, so cards adapt to the column's width rather than the dialog's. Import from "@instruments/materia-ui/compositions/quick-view".
1347
+
1348
+ - Fill it with `Card shadow={false}` sections - the item's name and main action first, then specifications - so they stand forward of the muted body without a shadow each.
1349
+
1350
+ ## QuickViewLayout
1351
+
1352
+ `@instruments/materia-ui/compositions/quick-view`
1353
+
1354
+ The quick view's two columns, mirroring a product page: media on the left, details on the right, from md up; stacked below md. Place a `QuickViewMedia` and a `QuickViewDetails` inside `QuickViewBody`. Import from "@instruments/materia-ui/compositions/quick-view".
1355
+
1356
+ - Key the layout by the item's id, so swapping items inside an open quick view remounts its images instead of showing the previous bitmap while the next loads.
1357
+
1358
+ ## Radio
1359
+
1360
+ `@instruments/materia-ui/components/radio`
1361
+
1362
+ Individual radio button. Must be used within a RadioGroup.
1363
+
1364
+ - A `Radio` only works inside a `RadioGroup` (it renders a Base UI `Radio.Root`) - the group owns selection; a standalone `Radio` won't toggle.
1365
+ - Give every `Radio` a unique `value` and pair it with a `Label` - or use `RadioGroupItem`, which bundles the radio and its wired label.
1366
+ - For selectable-card options rather than plain dots, use `RadioCardGroup`.
1367
+
1368
+ ## RadioCardGroup
1369
+
1370
+ `@instruments/materia-ui/components/radio-card`
1371
+
1372
+ Radio group whose options are full-size selectable cards (Base UI RadioGroup). Each `RadioCard` is itself the radio, so the group is one tab stop and the arrow keys move the selection between cards.
1373
+
1374
+ Shares `size`/`icon`/`indicatorSide`/`showIndicator` with every `RadioCard` through context, so set them once here. Controlled via `value`/`onValueChange`, uncontrolled via `defaultValue`; `layout` picks a stacked grid or an inline wrap.
1375
+
1376
+ - Use `RadioCardGroup` for single-select cards and `CheckboxCardGroup` for multi-select - a radio group enforces exactly one choice.
1377
+ - Set `size`/`icon`/`indicatorSide`/`showIndicator` once on the group; each `RadioCard` reads them from context - don't repeat per item.
1378
+ - Drive selection with `value`/`onValueChange` (controlled) or `defaultValue` (uncontrolled); use `layout="inline"` for a wrapping row instead of the stacked grid.
1379
+ - Label the group (e.g. `aria-label` or a `Field` with a `FieldLabel`) - Tab lands on the selected card and the arrow keys move between cards.
1380
+
1381
+ ## RadioGroup
1382
+
1383
+ `@instruments/materia-ui/components/radio-group`
1384
+
1385
+ Container for a group of radio buttons. Manages single selection state.
1386
+
1387
+ - Use `RadioGroup` for one choice among a small closed set; for many searchable options use `Select`/`Combobox`, and for on/off use `Switch`/`Checkbox`.
1388
+ - Drive selection with `value` + `onValueChange` (controlled) or `defaultValue` (uncontrolled) - don't set both on the same group.
1389
+ - Prefer `RadioGroupItem` (radio + wired `Label`) over hand-pairing `Radio` and `Label`; it auto-generates the `id`/`htmlFor` link.
1390
+
1391
+ ## ReducedMotionProvider
1392
+
1393
+ `@instruments/materia-ui/components/motion-config`
1394
+
1395
+ App-level motion provider. Place once in each app's root layout to cover all animated descendants. It does two things:
1396
+
1397
+ 1. `MotionConfig` respects the user's `prefers-reduced-motion` OS setting.
1398
+ 2. `LazyMotion` loads the animation feature bundle (`domMax`) as one shared, code-split chunk, so
1399
+
1400
+ - Mount `ReducedMotionProvider` once in each app's root layout, wrapping everything - every
1401
+ - It's required app-side, not inside
1402
+ - Rely on it (not per-component code) for reduced motion: its `MotionConfig reducedMotion="user"` honours the OS setting for all descendants.
1403
+
1404
+ ## RequirementItem
1405
+
1406
+ `@instruments/materia-ui/components/requirement-item`
1407
+
1408
+ Displays a requirement item with a check/x icon indicating met/unmet status. Useful for password requirements, form validation lists, etc.
1409
+
1410
+ - Use one `RequirementItem` per rule in a checklist (password/validation criteria); drive `met` from live validation so the check/x icon updates as the user types.
1411
+ - Render several in a vertical list and give it an accessible grouping (e.g. `aria-live` region) so screen readers announce requirements flipping to met.
1412
+ - Reach for `RequirementItem` for pass/fail checklist rows; for a generic list row use `Item`, and for form field errors use the field's own error message.
1413
+
1414
+ ## ResizablePanelGroup
1415
+
1416
+ `@instruments/materia-ui/components/resizable`
1417
+
1418
+ Container that lays out resizable panels along a single axis.
1419
+
1420
+ Wraps `react-resizable-panels` `Group`, exposing shadcn's `direction` prop (mapped to the library's `orientation`). Compose with `ResizablePanel` children separated by `ResizableHandle`.
1421
+
1422
+ - Compose `ResizablePanel` children separated by `ResizableHandle` - a handle between panels is what makes them draggable.
1423
+ - Set the axis with `direction` (`horizontal`/`vertical`); it maps to the library's `orientation`, which is intentionally not exposed.
1424
+
1425
+ ## Scrim
1426
+
1427
+ `@instruments/materia-ui/components/scrim`
1428
+
1429
+ A directional gradient overlay that darkens one edge of its container, fading to transparent - used to keep light-on-image text (captions, labels, stats) legible over a photo.
1430
+
1431
+ Place inside a `position: relative` ancestor. Purely decorative: renders `aria-hidden` and ignores pointer events.
1432
+
1433
+ - `Scrim` is a decorative gradient for text-over-image legibility, not a modal backdrop - dialog / sheet dimming is built into those components.
1434
+ - Place it inside a `position: relative` ancestor; it renders `aria-hidden` and ignores pointer events, so it never blocks the content beneath.
1435
+
1436
+ ## ScrollArea
1437
+
1438
+ `@instruments/materia-ui/components/scroll-area`
1439
+
1440
+ Scrollable container with custom design-system scrollbars. `children` are placed inside a Base UI viewport, so give the root (or `viewportClassName`) an explicit height/width for scrolling to engage. Import from "@instruments/materia-ui/components/scroll-area".
1441
+
1442
+ - Give the root (or `viewportClassName`) an explicit height/width - without a bounded size the content never overflows and the custom scrollbar never engages.
1443
+ - `ScrollArea` renders its own `ScrollBar`; reach for `ScrollBar` directly only when hand-composing a Base UI scroll area.
1444
+ - Use `as` to change the element (a tag); use `render` only to swap in a component (e.g. a router Link). Never `render={<Box as=…/>}` - pass `as` directly.
1445
+
1446
+ ## ScrollFade
1447
+
1448
+ `@instruments/materia-ui/components/scroll-fade`
1449
+
1450
+ A gradient fade overlay for scroll containers. Place inside a relatively positioned container to indicate more content.
1451
+
1452
+ - Drop `ScrollFade` inside a `position: relative` scroll container instead of hand-writing a gradient - it renders the masked scrim for you (it's `aria-hidden`, purely decorative).
1453
+ - Match `theme` to the container's actual background (`card`/`popover`/…) - the scrim fades to that colour, so a mismatch leaves a visible seam.
1454
+ - Set `position` (`start`/`end`) and `orientation` to the edge with hidden content - `end`+`vertical` is the common "more below" bottom fade.
1455
+
1456
+ ## ScrollFrame
1457
+
1458
+ `@instruments/materia-ui/components/scroll-frame`
1459
+
1460
+ A scrolling region that shows where there is more: each edge fades only while content runs on past it, and optional buttons step through it. Adapted from
1461
+
1462
+ - Reach for `ScrollFrame` whenever a strip or a panel can overflow - a row of filters, a list in a fixed-height card. Plain `ScrollArea` gives no sign that anything is hidden.
1463
+ - Give a vertical frame a bounded height (`className="h-80"`); a horizontal one needs only a bounded width, which a flex child with `min-w-0` already has.
1464
+ - Match `fadeTheme` to the surface behind the frame (`card` inside a Card). Over an image or a blur, use `fadeMode="mask"` instead.
1465
+ - For a horizontal strip used with a mouse, add `dragScroll` and `controls`; both stand aside on touch screens, and each control hides at the end it points to.
1466
+
1467
+ ## SearchInput
1468
+
1469
+ `@instruments/materia-ui/components/search-input`
1470
+
1471
+ Search input over InputGroup: a search icon, a built-in clear button that appears once the field has a value, and an optional keyboard-shortcut hint shown while it's empty. Pass `suggestions` for an animated "Try: …" placeholder that cycles while the field is empty. Import from "@instruments/materia-ui/components/search-input".
1472
+
1473
+ - Use `SearchInput` for search/filter fields - it supplies the search icon, a clear button, and (via `shortcutHint`) a `Kbd` hint; don't rebuild these on a plain `Input`.
1474
+ - `onChange` receives the next string on every keystroke and on clear (not a DOM event) - pass `value` for controlled use or `defaultValue` for uncontrolled.
1475
+ - Pass cycling placeholder ideas via `suggestions` (which suppresses the static `placeholder`); `shortcutHint` shows only while empty and is swapped for the clear button once the field has a value.
1476
+ - Pill (`radius="full"`) at the 48px `xl` default is the search signature - so leave both defaults alone in standard search/filter placements; pass `size` explicitly for compact embedded contexts (popovers, table headers).
1477
+
1478
+ ## Section
1479
+
1480
+ `@instruments/materia-ui/components/section`
1481
+
1482
+ Section is a full-width vertical-rhythm band. Unlike `Container` it does not constrain width - use it for full-bleed padded regions, and nest a `Container` inside when the content should also be centred. RSC-safe.
1483
+
1484
+ Import from "@instruments/materia-ui/components/section".
1485
+
1486
+ - `Section` is full-width (padding only, no max-width) - nest a `Container` inside when content should also be centred; use `Container` alone when you just need the width cap.
1487
+ - Tune vertical rhythm with `space` (its `py`, default `base`); `as`/`render` are mutually exclusive with `render` winning (dev-warned).
1488
+
1489
+ ## SectionHeader
1490
+
1491
+ `@instruments/materia-ui/compositions/section-header`
1492
+
1493
+ A generic section header: an optional eyebrow label, a `Heading` title, an optional muted description, and an optional right-aligned actions slot. Typography is delegated to `Heading` and `Text`; the `data-slot` hooks (`section-header-eyebrow` / `-body` / `-actions`) let adopters retune spacing without forking the component.
1494
+
1495
+ - Renders a `<header>`, which is a `banner` landmark only when it is a direct child of `<body>`. It is built for nested/section use - don't render more than one page-level `SectionHeader` directly under `<body>`, or you'll create duplicate `banner` landmarks.
1496
+ - Set `level` for the document outline and `size` for visual scale independently - a visually small header can still be an `h2`. Use `reserveEyebrowSpace` to keep an eyebrow-less header aligned beside sibling headers that have an eyebrow.
1497
+ - Use `as` to change the element (a tag); use `render` only to swap in a component (e.g. a router Link). Never `render={<Box as=…/>}` - pass `as` directly.
1498
+
1499
+ ## SegmentedControl
1500
+
1501
+ `@instruments/materia-ui/components/segmented-control`
1502
+
1503
+ A single-select, always-one-selected control that switches between a small set of visible options - a view or mode switcher rendered as a pill of segments. Built on Base UI ToggleGroup (single-select) but kept permanently selected: re-clicking the active segment never clears it.
1504
+
1505
+ Compose it from {@link SegmentedControlItem}s; shared `size` / `fullWidth` / active state flow to them through context. Controlled via `value`, or uncontrolled via `defaultValue`. Items scroll horizontally with a trailing fade hint when they overflow.
1506
+
1507
+ - One value is always selected - the active segment cannot be deselected; for deselectable or multi-select sets reach for ToggleGroup.
1508
+ - Switching visible content panels is Tabs; navigating URLs is TabNavigation - SegmentedControl is an input that selects a value or mode.
1509
+ - Icon-only items must carry an `aria-label`.
1510
+
1511
+ ## Select
1512
+
1513
+ `@instruments/materia-ui/components/select`
1514
+
1515
+ Root of the select - an accessible listbox built on Base UI that owns open state and the chosen value; drive it with `value`/`onValueChange` (controlled) or `defaultValue` (uncontrolled).
1516
+
1517
+ - `Select` is only the state root - compose `SelectTrigger`, `SelectValue`, `SelectContent`, and `SelectItem`s inside it or nothing renders.
1518
+ - Use `Select` to pick one option from a short closed list; when users need type-to-filter, use `Combobox` instead.
1519
+ - Drive it with `value` + `onValueChange` (controlled) or `defaultValue` (uncontrolled), and give it an accessible name via the trigger (`Field`/`Label`).
1520
+ - Pass `items` (a value-to-label map or `{ value, label }[]`) so the trigger shows the selected label even before the popup has mounted.
1521
+
1522
+ ## Separator
1523
+
1524
+ `@instruments/materia-ui/components/separator`
1525
+
1526
+ Visual rule dividing content sections, horizontally or vertically.
1527
+
1528
+ Renders a Base UI `Separator` (`role="separator"`). Pass `aria-hidden` when the rule is purely decorative and should stay out of the accessibility tree.
1529
+
1530
+ - It is announced as a separator by default - pass `aria-hidden` when the rule is purely decorative.
1531
+ - For an inline rule set `orientation="vertical"` and give it an explicit height (e.g. `className="h-6"`) - a vertical separator has no intrinsic length.
1532
+
1533
+ ## SettingsCard
1534
+
1535
+ `@instruments/materia-ui/compositions/settings-card`
1536
+
1537
+ Vercel-style settings card with a per-card save action. Each card represents a cohesive group of related settings; pair rows inside it with `SettingsRow` for the standard label/description/control layout.
1538
+
1539
+ - Fill it with `SettingsRow` children for the standard label/description/control layout; use `SettingsCard` for grouped form settings, not `Card`, when you want the built-in per-card save footer.
1540
+ - The footer only renders when `onSave` is passed, and the Save button is gated on `dirty` (and disabled while `loading`) - wire form dirty state through, or the button stays disabled.
1541
+ - Give each card one cohesive group of settings with its own save; don't nest multiple `SettingsCard`s or share one across unrelated sections.
1542
+
1543
+ ## Sheet
1544
+
1545
+ `@instruments/materia-ui/components/sheet`
1546
+
1547
+ Root component for a sheet (side panel). Manages open/closed state and accessibility. Import from "@instruments/materia-ui/components/sheet".
1548
+
1549
+ - Use `Sheet` for a simple edge panel holding a focused form / settings; a drag-to-dismiss bottom sheet is a `Drawer`, and nested panels are a `Sidepanel`.
1550
+ - Set the entry edge via `SheetContent` `side`; always render a `SheetTitle` (wrap in `sr-only` if hidden) so the panel is announced.
1551
+
1552
+ ## Shimmer
1553
+
1554
+ `@instruments/materia-ui/components/shimmer`
1555
+
1556
+ Animated shimmer effect for text. Creates a gradient sweep animation.
1557
+
1558
+ Variants:
1559
+
1560
+ - `"light"` (default): muted foreground → muted highlight (dark text on light bg)
1561
+ - `"dark"`: gray-400 → foreground (darker sweep on light bg)
1562
+ - `"inverted"`: white text on dark backgrounds
1563
+ - `"metallic"`: chrome text for dark surfaces, with a slow champagne-to-steel sheen and a pause between sweeps
1564
+
1565
+ - Reach for `Shimmer` for in-progress _text_ (a "Thinking…"/"Analyzing" sweep); `Shine` is an occasional attention flick on a surface, and `Skeleton` is a layout-shaped content placeholder.
1566
+ - `children` must be a plain string - the sweep is a `bg-clip-text` gradient sized from character count, so element children won't clip correctly.
1567
+ - Under reduced motion every variant renders its static base with no sweep. For finite "thinking" states set `repeat` (e.g. `repeat={2}`) rather than leaving the default infinite loop running.
1568
+ - `variant="metallic"` is built for dark surfaces only - on a light background the chrome ramp loses contrast. Its own `duration` and `repeatDelay` defaults apply only when you pass neither.
1569
+ - To sweep several lines in step, pass them one shared `progress` motion value (0-100) and drive it yourself; a Shimmer given `progress` never animates on its own.
1570
+
1571
+ ## Shine
1572
+
1573
+ `@instruments/materia-ui/components/shine`
1574
+
1575
+ A subtle diagonal specular sweep for drawing attention to interactive surfaces. Unlike a skeleton shimmer, Shine runs as an occasional flick with rest between passes - one quick highlight every few seconds - so it reads as "this surface is alive" rather than "content is loading".
1576
+
1577
+ Pass `playOnce` for a single entrance sweep (then it fades out).
1578
+
1579
+ Two usage shapes:
1580
+
1581
+ 1. Wrapper - pass `children` and Shine wraps them in a relative box.
1582
+ 2. Overlay - render without children inside an existing relative parent.
1583
+
1584
+ Uses `mix-blend-mode: soft-light` so the highlight harmonizes with the underlying colour instead of painting pure white.
1585
+
1586
+ Honours `prefers-reduced-motion` - renders nothing when motion is reduced (a static band would read as a permanent artefact, not a cue). When `visible` flips to `false`, the sweep fades out then unmounts so its rAF loop stops.
1587
+
1588
+ - Use `Shine` for a periodic "this surface is alive" flick on an interactive element - not for loading; a continuous text sweep is `Shimmer` and a content placeholder is `Skeleton`.
1589
+ - Use `playOnce` for entrance choreography that should not loop.
1590
+ - Either pass `children` (Shine wraps them in a relative box) or render it bare inside an existing `position: relative` parent - otherwise the sweep has nothing to overlay.
1591
+ - Needs `ReducedMotionProvider`; under reduced motion it renders nothing (a static band would look like a permanent artefact), so don't rely on it as persistent decoration.
1592
+
1593
+ ## Sidebar
1594
+
1595
+ `@instruments/materia-ui/compositions/sidebar`
1596
+
1597
+ The sidebar shell. Reads open/collapsed state from {@link useSidebar}, so it must render inside a {@link SidebarProvider}.
1598
+
1599
+ Adapts by viewport and `collapsible`: an animated docked shell on desktop, a slide-in `Sheet` on mobile, or a static column when `collapsible="none"`.
1600
+
1601
+ - Render `Sidebar` inside a `SidebarProvider` - it reads open/collapsed state from `useSidebar` and cannot work outside one.
1602
+ - Choose `collapsible` deliberately: `offcanvas` slides fully away, `icon` shrinks to a rail, `none` is a static column that never adapts to the mobile `Sheet`.
1603
+
1604
+ ## SidebarInset
1605
+
1606
+ `@instruments/materia-ui/compositions/sidebar`
1607
+
1608
+ The content column beside the sidebar, and the page's single `<main>` landmark: it carries the skip-link target id and is focusable so the link can move focus here. Put your page `<header>` and content inside it, as in shadcn's sidebar blocks. In a `height="fill"` provider it scrolls internally (make the header `sticky top-0`).
1609
+
1610
+ `min-w-0` (not `w-full`) is essential: without it flex's default `min-width: auto` stops the column shrinking below its content, so a wide child pushes the page past the sidebar and creates horizontal overflow. With `variant="inset"` the column becomes a rounded card.
1611
+
1612
+ Pass `render={<div />}` (and your own `id`) when the page already owns its `<main>`, as in an embedded demo. A dev warning fires when more than one `<main>` is on the page. Import from "@instruments/materia-ui/compositions/sidebar".
1613
+
1614
+ - Render exactly one `SidebarInset` per page; for a second content region use a plain `<div>`.
1615
+
1616
+ ## SidebarLayoutHeader
1617
+
1618
+ `@instruments/materia-ui/compositions/sidebar`
1619
+
1620
+ The desktop (md+) top header beside the sidebar. Fixed by default, its left offset animating to track the sidebar's width; pass `position="sticky"` to put it in flow inside `SidebarInset`, where it shares the content column's gutter and edges with no measurement. Compose `SidebarLayoutHeaderSearch` and `SidebarLayoutHeaderActions` inside it.
1621
+
1622
+ - Prefer `position="sticky"` with `gutter` inside `SidebarInset`: search, page heading and content then share one left edge, and a docked `SidebarPanel` gutter pushes the header's actions clear of the panel without any offset plumbing.
1623
+ - In a `variant="inset"` sidebar frame the sticky bar takes `--sidebar-inset-header-height` (the header height less the card's top and bottom gap), so search and the sidebar's brand row share a centre line; don't re-pad it to match.
1624
+ - Pair a sticky header with `SidebarInset offset="app-bar"` so only the mobile app bar is cleared; `offset="header"` is for the fixed header.
1625
+
1626
+ ## SidebarMenuButton
1627
+
1628
+ `@instruments/materia-ui/compositions/sidebar`
1629
+
1630
+ The primary interactive row of a sidebar menu - a leading icon plus label, optional suffix icon and keyboard-shortcut hint.
1631
+
1632
+ Collapses to icon-only when the sidebar collapses (swapping in `collapsedIcon` /`collapsedContent` and revealing the `tooltip`), unless `forceExpanded`. Reads collapsed state from {@link useSidebar}; pass `render` to render a `<Link>` or other element as the button.
1633
+
1634
+ - In an icon-collapsible sidebar use `size="xl"`: the icon rail is sized for an `xl` row, so its collapsed square centres on the rail and the icon stays put as the sidebar folds.
1635
+
1636
+ ## SidebarPanel
1637
+
1638
+ `@instruments/materia-ui/compositions/sidebar`
1639
+
1640
+ A flex-item region beside `SidebarInset`, in two variants. `inline` is an in-flow sticky column that renders your content beside `SidebarInset`; `gutter` is an empty width-animated spacer that reserves room for a docked overlay (e.g. a `modal={false}` Sidepanel) - it drops its children and is `aria-hidden`, so the panel _is_ the reservation with no app state crossing into the design system. Place it as a sibling of `SidebarInset` inside `SidebarProvider`; `SidebarInset`'s `flex-1 min-w-0` absorbs the remaining width. Styles itself off the provider's `data-height`, so it stays a server component. Import from "@instruments/materia-ui/compositions/sidebar".
1641
+
1642
+ - Pair a `gutter` with a docked, `modal={false}` Sidepanel driven by the same `open` state; keep `open` true through the Sidepanel's exit animation so the reservation holds until it leaves.
1643
+ - A `gutter` reserves room from `lg`, where `SidepanelContent` turns from a full-bleed overlay into the floating card; keep any panel you dock into it on the same breakpoint.
1644
+ - A `gutter` needs a row context: `SidebarProvider` lays out as a row, so a panel placed beside `SidebarInset` sits on its right.
1645
+ - Render at most one panel per side; use `side` to keep left/right reservations independent.
1646
+
1647
+ ## SidepanelContent
1648
+
1649
+ `@instruments/materia-ui/components/sidepanel`
1650
+
1651
+ Main content area of the sidepanel. Includes portal and overlay automatically.
1652
+
1653
+ - `width="default"`: Fixed 440px width, inset from edges with rounded corners
1654
+ - `width="full"`: Full viewport coverage with safe area padding (mobile-first)
1655
+
1656
+ When `nestedOpen` is true, the panel shifts left and scales down to create a stacking effect (only applies to default width).
1657
+
1658
+ On open, a keyboard user lands on the panel's first control; a pointer, touch or programmatic open focuses the panel itself, so no focus ring shows on first paint. Pass `initialFocus` to choose otherwise.
1659
+
1660
+ - Open the panel from a `SidepanelTrigger` where you can: Base UI then knows a keyboard opened it and moves focus to the first control. Opened from app state, it focuses the panel surface, which still announces the panel's name.
1661
+ - Name the panel once: render a visible `SidepanelTitle`, or pass `title` when the design has no visible heading.
1662
+
1663
+ ## SidepanelRoot
1664
+
1665
+ `@instruments/materia-ui/components/sidepanel`
1666
+
1667
+ Root component for a sidepanel. Wraps Base UI Dialog.Root.
1668
+
1669
+ - Reach for `Sidepanel` when you need nested sub-panels or a non-modal panel (`modal={false}`) that leaves the page interactive; a single focused edge panel is a `Sheet`.
1670
+ - Compose nested panels with `SidepanelNestedRoot`, and always render a `SidepanelTitle` for the accessible name.
1671
+
1672
+ ## SidepanelScroll
1673
+
1674
+ `@instruments/materia-ui/components/sidepanel`
1675
+
1676
+ The scrolling region between a `SidepanelHeader` and `SidepanelFooter`: takes the remaining height of `SidepanelBody`, scrolls on its own and carries the panel's standard inset, so header and footer stay put while it moves.
1677
+
1678
+ - Put exactly one `SidepanelScroll` inside `SidepanelBody`, between the header and footer, rather than a hand-rolled `flex-1 overflow-y-auto` div.
1679
+
1680
+ ## SidepanelTitle
1681
+
1682
+ `@instruments/materia-ui/components/sidepanel`
1683
+
1684
+ Title element for the sidepanel, and the panel's accessible name. While it is mounted, `SidepanelContent` drops the name it would otherwise take from its `title` prop, so the panel is announced with one title.
1685
+
1686
+ - Render one visible `SidepanelTitle` per panel; without one, pass `SidepanelContent` a `title` so the panel still has a name.
1687
+
1688
+ ## SimpleGrid
1689
+
1690
+ `@instruments/materia-ui/components/simple-grid`
1691
+
1692
+ Equal-width column grid built on CSS Grid.
1693
+
1694
+ `cols` and `gap` accept a single value or a per-breakpoint responsive object like `{ base: 1, md: 3 }`; set `responsiveMode` to `"container"` to resolve breakpoints against the nearest container instead of the viewport.
1695
+
1696
+ - `SimpleGrid` lays out equal-width columns - set `cols` (responsive, e.g. `{ base: 1, md: 3 }`); when you need column spans or ordering, step up to `Grid`.
1697
+ - Set `xGap`/`yGap` for different column and row spacing; each overrides the `gap` shorthand on its own axis.
1698
+ - `as` and `render` are mutually exclusive (`render` wins, dev-warned); `as` draws from the closed layout vocabulary, so `as="button"` is a type error (use `Button`).
1699
+ - Use `as` to change the element (a tag); use `render` only to swap in a component (e.g. a router Link). Never `render={<Box as=…/>}` - pass `as` directly.
1700
+
1701
+ ## SiteFooter
1702
+
1703
+ `@instruments/materia-ui/compositions/site-footer`
1704
+
1705
+ The page's closing panel: a pitch on one side, the site's links in columns on the other, and a bar beneath for the legal line and social links. It sits on the page gutter as one rounded, sunk surface, so it reads as the end of the page rather than another section of it. Import from "@instruments/materia-ui/compositions/site-footer".
1706
+
1707
+ - Render it after the page's `<main>`, not inside it, so it stays the page's own footer landmark.
1708
+ - Keep it to a lead, one nav and one bar. Four columns of a few links each is the shape it is set for.
1709
+
1710
+ ## Skeleton
1711
+
1712
+ `@instruments/materia-ui/components/skeleton`
1713
+
1714
+ Skeleton loader component for showing loading states. Displays animated placeholder with a shimmer gradient sweep.
1715
+
1716
+ - Prefer `Skeleton` over a spinner for content areas - a layout-stable placeholder that mirrors the final shape avoids reflow when data lands.
1717
+ - Size it with `className` (`h-*` / `w-*`); use `variant="light"` on white / `bg-background` surfaces where the default grey is too dark.
1718
+
1719
+ ## SocialIcon
1720
+
1721
+ `@instruments/materia-ui/components/social-icon`
1722
+
1723
+ Draws a social network's mark in the surrounding text colour, on the same size scale as `Icon`. Without a `label` it is `aria-hidden`; with one it becomes an image with that accessible name.
1724
+
1725
+ - Set `label` only when the icon stands alone, such as inside an icon-only link; beside visible text leave it off so the mark is hidden from assistive tech.
1726
+ - The mark paints with `currentColor`, so colour it with a text-colour class on the icon or a parent (`className="text-muted-foreground"`), not a brand fill.
1727
+ - Size with the `size` token (`"sm"`, `"lg"`…), not `className="size-6"`; it shares the `Icon` scale so a mark lines up with the icons around it.
1728
+
1729
+ ## Space
1730
+
1731
+ `@instruments/materia-ui/components/space`
1732
+
1733
+ Spacer component for adding fixed width or height gaps in layouts.
1734
+
1735
+ - Reach for `Space` only for a fixed one-off gap between siblings; consistent spacing across many children belongs on a `Stack`/`Flex`/`Group` `gap` instead.
1736
+
1737
+ ## Spinner
1738
+
1739
+ `@instruments/materia-ui/components/spinner`
1740
+
1741
+ Loading spinner component. Animated circular indicator for async operations.
1742
+
1743
+ - Use `Spinner` for small inline / action loading (inside a `Button`, next to text); a blocking full region is `LoadingState`, a layout placeholder is `Skeleton`.
1744
+ - A bare `Spinner` carries no accessible name - wrap it in a labelled live region (e.g. `LoadingState`) when it's the sole loading signal.
1745
+
1746
+ ## Stack
1747
+
1748
+ `@instruments/materia-ui/components/stack`
1749
+
1750
+ Flex container for arranging children in a line with consistent spacing.
1751
+
1752
+ Layout props (`direction`, `align`, `justify`, `gap`) accept a single value or a per-breakpoint responsive object like `{ base: "column", md: "row" }`; set `responsiveMode` to `"container"` to resolve breakpoints against the nearest container instead of the viewport. Stacks vertically by default.
1753
+
1754
+ - `Stack` is a gapped one-axis line, vertical by default - use `HStack`/`VStack` to lock direction; for full flexbox control (`justify`/`wrap`) reach for `Flex`.
1755
+ - `as` and `render` are mutually exclusive (`render` wins, dev-warned); `as` draws from the closed layout vocabulary, so `as="button"` is a type error (use `Button`).
1756
+ - Use `as` to change the element (a tag); use `render` only to swap in a component (e.g. a router Link). Never `render={<Box as=…/>}` - pass `as` directly.
1757
+
1758
+ ## Stagger
1759
+
1760
+ `@instruments/materia-ui/components/stagger`
1761
+
1762
+ Orchestrates staggered entrance animations for child `StaggerItem` components. Uses Motion's `stagger()` for `delayChildren` internally.
1763
+
1764
+ - Wrap `StaggerItem` children (not raw elements) - `Stagger` only drives the `hidden`→`visible` variant orchestration; the items own their actual entrance animation.
1765
+ - Tune rhythm with `stagger` (gap between items) and `delay` (lead-in) on the parent, rather than hand-setting per-child transition delays.
1766
+ - Needs `ReducedMotionProvider` in the tree so the orchestrated entrance both runs and honours the reduced-motion setting.
1767
+
1768
+ ## Stepper
1769
+
1770
+ `@instruments/materia-ui/components/stepper`
1771
+
1772
+ Root stepper component that manages step state
1773
+
1774
+ - Give each step a `StepperItem` child in order - progress is derived from child index, so conditionally rendering steps shifts the fill.
1775
+ - Control completion via `value`/`onValueChange` (or uncontrolled `defaultValue`); the fill reaches only the last _completed_ step, not the current one.
1776
+
1777
+ ## StreamingText
1778
+
1779
+ `@instruments/materia-ui/components/streaming-text`
1780
+
1781
+ Progressive streaming answer with settle-gated chrome.
1782
+
1783
+ - Drive `tokens` from real stream deltas - don't fake a word clock in product code. Showcase demos may animate.
1784
+
1785
+ ## SubNavigation
1786
+
1787
+ `@instruments/materia-ui/components/sub-navigation`
1788
+
1789
+ Vertical secondary navigation for page subsections and settings-like layouts; the `<nav>` landmark wrapping a {@link SubNavigationList} of links.
1790
+
1791
+ - Reach for `SubNavigation` for a vertical in-page section/settings menu; horizontal router tabs are `TabNavigation`, the app-chrome shell is `Sidebar`.
1792
+ - Fill it with a `SubNavigationList` of links - it already renders the `<nav>` landmark, so don't nest it inside another `<nav>`.
1793
+
1794
+ ## SuccessTickRipple
1795
+
1796
+ `@instruments/materia-ui/components/success-tick-ripple`
1797
+
1798
+ Celebration tick - a green medallion that drops in with a spring rebound while three radial-gradient rings ripple outward from its centre and a residual mint glow settles on the upper edges of the parent container.
1799
+
1800
+ Layout contract:
1801
+
1802
+ - The component renders a `position: absolute; inset: 0` ripple field plus the medallion (in normal flow). The ripple field attaches to the nearest positioned ancestor - wrap this component in a parent that is `position: relative` and `overflow: hidden` to bound the celebration. The medallion's centre is the visual impact point.
1803
+
1804
+ Tuning:
1805
+
1806
+ - Override `--tick-impact-x` / `--tick-impact-y` on the parent to move the ripple origin (defaults to 50% / 50% of the parent).
1807
+
1808
+ Animations are CSS-only and run once on mount. `prefers-reduced-motion` collapses to the final settled state and hides the ripple.
1809
+
1810
+ - Wrap `SuccessTickRipple` in a `position: relative; overflow: hidden` parent - the ripple field is absolutely positioned and bleeds past an unbounded container.
1811
+ - It's decorative (`aria-hidden`) unless you pass `aria-label`, which exposes it as an `img`; animations are CSS-only and already collapse under `prefers-reduced-motion`.
1812
+
1813
+ ## Swatch
1814
+
1815
+ `@instruments/materia-ui/components/swatch`
1816
+
1817
+ Low-level visual swatch primitive for colours, gradients, and images - shaped as a **chip** (`circle`/`pill`) or a **tile** (square material/image card). A thin façade dispatching on `kind` to the internal chip and tile renderers, which share fill resolution and contrast handling.
1818
+
1819
+ Chips paint the darkening overlay on every fill and draw the double-ring selection pattern; tiles use tiered radius, border, ring and shadow, `children` > `src` > `color` precedence, and no darkening overlay.
1820
+
1821
+ - Feed fills through `color`/`background`/`colors`, never a hex in `className`/`style` - the props drive the contrast-aware text colour, selection ring, and darkening overlay.
1822
+ - Reach for `Swatch` for a selectable colour/gradient/material chip or tile; a tiny non-interactive status marker is `Dot`, and a display-only status/category label is `Badge`.
1823
+ - For a gradient or image chip fill pass `light` - auto contrast detection (`isLightColor`) only reads solid colours, so overlaid icons/labels lose legibility without it.
1824
+
1825
+ ## SwatchFan
1826
+
1827
+ `@instruments/materia-ui/compositions/swatch-fan`
1828
+
1829
+ A fanned stack of {@link Swatch} tiles: a fixed three-card editorial fan or an interactive N-tile splay.
1830
+
1831
+ Pass 3 `items` with `interaction="breathe"` for the editorial fan (Figma geometry, `variant` spread/stack, white 3px mount via `bordered`); pass N `items` with `interaction="hover-fan"` for the interactive splay-on-hover with pointer tilt. `bordered={false}` swaps the white mount for the 1px hairline tile.
1832
+
1833
+ - Feed 3 items for the `breathe`/`none` card engine - its Figma geometry, z-order, and `variant` morphing are built around a fixed left/center/right trio; the hover-fan engine is the N-tile path.
1834
+ - Needs `ReducedMotionProvider`; it already collapses the mount fan-out, hover nudge, and splay under reduced motion (snapping to the settled frame), so don't gate the interaction yourself.
1835
+ - `bordered` is the mount-as-a-prop: `true` = white 3px card mount, `false` = 1px hairline - don't hand-roll either border in a wrapper.
1836
+
1837
+ ## SwatchGroup
1838
+
1839
+ `@instruments/materia-ui/components/swatch-group`
1840
+
1841
+ Row of selectable circular color/image swatches with single-select behaviour, built on Base UI RadioGroup. Selection is controlled via `value` + `onValueChange`, or uncontrolled via `defaultValue`. When `icon` is set the selected swatch shows that icon instead of the default selection ring.
1842
+
1843
+ - Drive selection with `value`+`onValueChange` (or `defaultValue`), not per-swatch `onClick` - it's a Base UI `RadioGroup`, so it already handles roving focus and arrow-key selection.
1844
+ - Choose `SwatchGroup` when you want radio semantics + keyboard a11y; reach for `SwatchSelector` only for a lighter controlled row without the RadioGroup roles.
1845
+ - Set `icon` (e.g. `Check`) on the group to swap the selection ring for a glyph on the chosen swatch, rather than styling items individually.
1846
+
1847
+ ## SwatchSelector
1848
+
1849
+ `@instruments/materia-ui/components/swatch-selector`
1850
+
1851
+ Row of selectable color/image swatches with controlled single selection, built on Base UI ToggleGroup: the row is one tab stop and the arrow keys move between swatches.
1852
+
1853
+ Shares the selected `value`, `onValueChange`, and `size` with its {@link SwatchSelectorItem} children through context.
1854
+
1855
+ - Pair `SwatchSelector` with `SwatchSelectorItem` children - it shares `value`/`onValueChange`/`size` through context, so items need no individual wiring.
1856
+ - Prefer `SwatchGroup` when the row is a single-choice form control needing radio roles and form submission; `SwatchSelector` is a row of pressed-state toggle buttons.
1857
+ - Pressing the selected swatch again keeps it selected and does not call `onValueChange`.
1858
+ - Selection is controlled - pass `value` and update it from `onValueChange`; there is no internal fallback state to fall back on.
1859
+
1860
+ ## Switch
1861
+
1862
+ `@instruments/materia-ui/components/switch`
1863
+
1864
+ Renders a toggle switch for boolean on/off states.
1865
+
1866
+ - Use `Switch` for an instantly-applied on/off setting; use `Checkbox` for opt-ins confirmed by a submit, and `RadioGroup` for mutually-exclusive choices.
1867
+ - Controlled use needs `checked` + `onCheckedChange`; with only `checked` the switch won't move - use `defaultChecked` for uncontrolled.
1868
+ - `Switch` has no built-in label - associate a `Label` via `htmlFor`/`id` so the toggle has an accessible name.
1869
+
1870
+ ## Table
1871
+
1872
+ `@instruments/materia-ui/components/table`
1873
+
1874
+ Semantic `<table>` primitive, wrapped in a horizontally scrollable container so wide tables overflow rather than break layout. Compose with the exported `TableHeader`, `TableBody`, `TableRow`, `TableHead`, `TableCell`, `TableFooter`, and `TableCaption` parts.
1875
+
1876
+ - Use `Table` for a small, static, hand-authored table; reach for `DataGrid` once you need sorting, filtering, pagination, column pinning/visibility, or row virtualisation - `Table` has no data model.
1877
+ - Include a `TableCaption` describing the table's contents - it is the accessible name screen readers announce for the `<table>`.
1878
+ - Compose real `TableHeader`/`TableBody`/`TableRow`/`TableHead`/`TableCell` parts (semantic `thead`/`tbody`/`th`/`td`); don't fake rows with styled divs or you lose the table semantics.
1879
+
1880
+ ## TabNavigation
1881
+
1882
+ `@instruments/materia-ui/components/tab-navigation`
1883
+
1884
+ Provides shared context (variant, size, fullWidth) to its tab links for router-based navigation. Import from "@instruments/materia-ui/components/tab-navigation". Shares styling with the Tabs component.
1885
+
1886
+ - Use `TabNavigation` when each tab is a route/URL (it renders a `<nav>` of links); for in-page panels that swap without navigating, use `Tabs`.
1887
+ - It shares the Tabs look via context but defaults to `variant="line"`; mark the active link yourself (e.g. router `aria-current`) - there's no Base UI value tracking here.
1888
+
1889
+ ## Tabs
1890
+
1891
+ `@instruments/materia-ui/components/tabs`
1892
+
1893
+ Tabbed content switcher (Base UI Tabs) that composes `TabsList` / `TabsTrigger` / `TabsContent`.
1894
+
1895
+ Provides shared `variant`/`size`/`fullWidth` through context so the parts stay in sync, and tracks the active value to drive the sliding `TabsIndicator`. Controlled via `value`/`onValueChange`, uncontrolled via `defaultValue`.
1896
+
1897
+ - Reach for `Tabs` to swap in-page panels via `TabsContent`; when each tab is a route, use `TabNavigation` instead (renders links, no panels).
1898
+ - Compose `TabsList`/`TabsTrigger`/`TabsContent` - shared `variant`/`size`/`fullWidth` flow through context, so set them on `Tabs`, not each trigger.
1899
+
1900
+ ## Tag
1901
+
1902
+ `@instruments/materia-ui/components/tag`
1903
+
1904
+ Tag - An interactive pill component for selection, filtering, and multi-select scenarios.
1905
+
1906
+ Uses shared pill styling (identical to Badge) with interactive capabilities: dismissibility, click handling, and keyboard support.
1907
+
1908
+ The outer element is polymorphic based on interactivity:
1909
+
1910
+ - `onClick` provided: `<button>`
1911
+ - `onDismiss` only: `<div>` with dismiss `<button>`
1912
+ - Both: `<div>` with separate selection and dismiss `<button>` elements
1913
+ - Neither: `<span>` (presentational)
1914
+
1915
+ - Choose `Tag` when the chip is interactive (selection/filter/dismiss); for a display-only status label or count use `Badge`, and for a bare colour dot use `Dot`.
1916
+ - Pass `onClick` for selection and `onDismiss` for removal. When both are provided they render as sibling buttons inside one visual chip; don't wrap Tag in another button.
1917
+ - With both actions, HTML attributes (including the accessible name and selected state) apply to the selection button; `className` and `style` style the outer chip.
1918
+ - Set at most one leading visual - `loading` > `imageUrl` > `dot` > `icon` (in that precedence); pass a Lucide component to `icon` (not `<Icon/>`), and `imageUrl` renders a circular `<img alt="">`, so keep it decorative.
1919
+ - When `onDismiss` is set, Backspace/Delete also removes the tag while it's focused - don't bind your own conflicting key handler.
1920
+
1921
+ ## TagSelector
1922
+
1923
+ `@instruments/materia-ui/compositions/tag-selector`
1924
+
1925
+ TagSelector - A multi-select tag component with search, create, edit, delete, and reorder capabilities.
1926
+
1927
+ - The CRUD affordances are gated - `onCreateTag`/`onEditTag`/`onDeleteTag`/`onReorder` do nothing unless you also set the matching `allowCreate`/`allowManage`/`allowReorder` flag.
1928
+ - `value`/`onChange` carry the selected `TagData[]` and are required - `TagSelector` is controlled; supply the full option set via `tags`.
1929
+ - A custom `trigger` render-prop is passed to `PopoverTrigger` as `render`, so return a single element that forwards its ref/props (e.g. a `Button`).
1930
+ - Use `singleSelect` when only one tag may be chosen; for a fixed, non-editable list prefer `Combobox`/multi-`Select` and reserve `TagSelector` for managing the tag set itself.
1931
+
1932
+ ## Text
1933
+
1934
+ `@instruments/materia-ui/components/text`
1935
+
1936
+ The typography primitive for body copy - renders a `<p>` (or any element via `as` or `render`). Ships without a line-length cap; add `max-w-prose` at the call site for long-form prose. `size` names a type role, defaults to `paragraph-sm` and accepts responsive values: `size={{ base: "paragraph-sm", md: "paragraph-lg" }}`.
1937
+
1938
+ - `as` is a closed text-only vocabulary - use `as="span"` for inline copy; `as="div"`/`as="label"` are type errors (use `Box` for wrappers, `Label` for form labels).
1939
+ - `as` and `render` are mutually exclusive (`render` wins, dev-warned); Text ships without a line-length cap - add `max-w-prose` at the call site for long-form prose.
1940
+
1941
+ ## Textarea
1942
+
1943
+ `@instruments/materia-ui/components/textarea`
1944
+
1945
+ Renders a textarea element for multi-line text input (Base UI `Field.Control` rendering a `<textarea>`). Inside a Field it is the field's control: the FieldLabel targets it, FieldDescription/FieldError describe it, and it inherits the field's invalid state.
1946
+
1947
+ - Inside a `Field`, let invalid state cascade like `Input` - omit `hasError`; pass it only to force error styling on a standalone `Textarea`.
1948
+ - It auto-grows with content (`field-sizing-content`); set `rows` for an initial height rather than pinning height via CSS.
1949
+ - Give it a label - inside a `Field` a `FieldLabel` targets it with no ids to wire; standalone, point a `Label`'s `htmlFor` at its `id`. A placeholder is not an accessible name.
1950
+
1951
+ ## ThinkingLoader
1952
+
1953
+ `@instruments/materia-ui/components/thinking-loader`
1954
+
1955
+ LLM-style "labor illusion" loader with blur conveyor animations and shimmer text effect.
1956
+
1957
+ Supports both controlled mode (parent drives `currentStep`) and uncontrolled mode (auto-cycles through steps based on `interval`).
1958
+
1959
+ - Drive `ThinkingLoader` with `currentStep` (controlled) to reflect real progress, or omit it to auto-cycle `steps` on `interval` for a labor-illusion loader.
1960
+ - It already renders an `aria-live="polite"` region announcing each step - don't wrap it in another status role. Mount `ReducedMotionProvider` since it animates via `m.*`.
1961
+
1962
+ ## ThinkingOrb
1963
+
1964
+ `@instruments/materia-ui/components/thinking-orb`
1965
+
1966
+ Dotted thought-orb for AI & agent status.
1967
+
1968
+ - Use size `64` for chat-avatar / panel status; use `20` for inline text-adjacent cues. They are separate designs, not a scale factor.
1969
+ - Prefer `theme="auto"` so the orb follows `data-theme` / system preference; pin `dark` or `light` only when the surrounding surface is fixed.
1970
+ - Pass a specific `aria-label` when the state text is not otherwise announced (e.g. next to a ThinkingLoader that already speaks).
1971
+
1972
+ ## ThinkingTrace
1973
+
1974
+ `@instruments/materia-ui/compositions/thinking-trace`
1975
+
1976
+ Expandable agent thinking / tool / search trace, driven by real agent state.
1977
+
1978
+ While `streaming` is `true` the trace is open, shows every row it is given and shimmers `activeLabel`. When it turns `false` the trace collapses to `doneLabel`; rows stay mounted and the header re-expands them. A manual toggle of the header pins expansion until the component unmounts.
1979
+
1980
+ - Pair above streaming answers in chat. Use ThinkingLoader when you only need a one-line narrated header without an expandable timeline.
1981
+
1982
+ ## TimeSlotPicker
1983
+
1984
+ `@instruments/materia-ui/components/time-slot-picker`
1985
+
1986
+ A grid of time slots where exactly one can be chosen, such as appointment times beside a `Calendar` (Base UI RadioGroup).
1987
+
1988
+ Each slot is a radio, so arrow keys move the selection and `name` submits the chosen value with a form. Slots reflow into as many equal columns as fit; the picker sets no outer padding.
1989
+
1990
+ - Pass slot values already formatted for display, or give each slot a `label` - the picker does no time parsing or 12/24-hour formatting.
1991
+ - Name the group with `aria-label` or `aria-labelledby`; screen readers announce it before the first slot.
1992
+ - Use `TimeSlotPicker` for a fixed set of offered times; for any time the user types, use `Input type="time"`.
1993
+
1994
+ ## Toaster
1995
+
1996
+ `@instruments/materia-ui/components/toast`
1997
+
1998
+ Renders the toasts queued with `toast()`: light bordered cards on the neutral popover surface, each with a per-type coloured icon and a close button, stacked at the bottom centre by default. Built on Base UI Toast.
1999
+
2000
+ - Use toasts for transient, auto-dismissing notifications; a persistent inline message is an `Alert`.
2001
+ - Mount `<Toaster />` exactly once near the app root, then fire toasts with `toast()` from `@instruments/materia-ui/components/toast` - don't render a `Toaster` per view.
2002
+ - Press F6 to move focus into the toasts; hovering or focusing the stack pauses dismissal and fans it open.
2003
+
2004
+ ## Toggle
2005
+
2006
+ `@instruments/materia-ui/components/toggle`
2007
+
2008
+ Two-state pressable button (on/off) built on Base UI Toggle, with an optional icon alongside the label.
2009
+
2010
+ Pass `icon` with no children to get a square icon-only toggle (auto-detected and sized to match its height); pass both for an icon + label. Controlled via `pressed`/`onPressedChange`, uncontrolled via `defaultPressed`.
2011
+
2012
+ Inside a `ToggleGroup` it is the group's item, as in Base UI: give it a `value`, and it takes the group's `size`, `radius`, `variant` and layout in place of its own. An icon-only toggle needs an `aria-label`; a dev warning fires without one.
2013
+
2014
+ - One independent on/off is a `Toggle`; a mutually-exclusive or multi-select set is `ToggleGroup` with `Toggle`s inside it; an instantly-applied setting is `Switch`.
2015
+ - Pass `icon` with no children for a square icon-only toggle (auto-sized); with a label, order it via `iconPlacement`.
2016
+
2017
+ ## ToggleGroup
2018
+
2019
+ `@instruments/materia-ui/components/toggle-group`
2020
+
2021
+ A literal group of {@link Toggle}s: several two-state pressable buttons that share one selection, laid out `joined` (a seamless segmented row), `separated`, or `wrap`ped. Built on Base UI ToggleGroup - by default one item is pressed at a time (radio-like), `multiple` makes it checkbox-like; `value` is always an array. The `Toggle`s inside take `size` / `radius` / `variant` from the group through context.
2022
+
2023
+ - An always-one-selected mode switcher is `SegmentedControl`, not `ToggleGroup` - reach here for multi-select toolbars and deselectable choice chips.
2024
+ - `layout="wrap"` + `required` (without `multiple`) is the wizard choice-chip recipe.
2025
+ - Put plain `Toggle`s inside, each with a `value`, as Base UI does.
2026
+ - Icon-only toggles need an `aria-label` (a dev warning fires otherwise).
2027
+
2028
+ ## Tooltip
2029
+
2030
+ `@instruments/materia-ui/components/tooltip`
2031
+
2032
+ Root component for a tooltip. Wraps TooltipProvider automatically.
2033
+
2034
+ - Keep `TooltipContent` a short, non-interactive label - no buttons or links inside; for rich or actionable hover content use `HoverCard`.
2035
+ - The trigger must be focusable (a button / link, or `render` onto one) or keyboard and AT users never see the tip.
2036
+ - Share one `TooltipProvider` to tune `delay` / skip-delay for a group; `Tooltip` wraps its own provider, so you only need it for grouping.
2037
+
2038
+ ## usePromptPanelKeyboard
2039
+
2040
+ `@instruments/materia-ui/compositions/prompt-panel`
2041
+
2042
+ Keyboard contract for a `PromptPanel`'s freeform input: digit keys 1–9 select an option by index (only while the input is empty), Enter submits the freeform text (only while non-empty), Escape dismisses, and Backspace on an empty input navigates back a step. Never steals keys mid-sentence - every branch except Escape is gated on the input's empty state, so once the user starts typing, digits/Backspace fall through to normal text entry.
2043
+
2044
+ - Attach the returned `onKeyDown` directly to the panel's freeform input rather than re-implementing this contract - `PromptPanelFreeform` forwards unrecognised props straight to its `<input>`.
2045
+
2046
+ ## VariantSelector
2047
+
2048
+ `@instruments/materia-ui/compositions/variant-selector`
2049
+
2050
+ A flexible variant selector that supports both single and multiple selection modes. Renders card-style items that can display images or colours. Single mode is a Base UI RadioGroup and multiple mode a Base UI ToggleGroup, so either way the set is one tab stop and the arrow keys move between items.
2051
+
2052
+ - Fill it with `VariantSelectorItem` children - they read selection from context; `value`/`defaultValue` matches each item's `value`.
2053
+ - `mode` is a discriminated prop: `"single"` renders a `role="radiogroup"` and gives `onValueChange` a `string`, `"multiple"` renders a `<fieldset>` of pressed-state toggles and a `string[]` - keep `value`/`defaultValue` types matching the mode.
2054
+ - `defaultValue` is uncontrolled: the selector tracks later picks itself. Pass `value` with `onValueChange` to control it.
2055
+ - Use `VariantSelector` for image/colour swatch pickers; for a labelled icon-over-text option grid use `IconCard`, and for plain radio/checkbox lists use `RadioGroup`/`Checkbox`.
2056
+
2057
+ ## VergeRoot
2058
+
2059
+ `@instruments/materia-ui/components/verge`
2060
+
2061
+ The container a `VergeSlot` listens to: a row, a card, a list item. It has no appearance of its own, only the hover and focus state its slots read. Wrap the whole row, not just the controls, so the reveal answers to the user pointing at the row.
2062
+
2063
+ Adapted from
2064
+
2065
+ - Wrap the whole row in `VergeRoot`, not just the controls, so hovering or tabbing anywhere in the row reveals them.
2066
+ - A nested `VergeRoot` does not isolate its slots: hovering an outer row also reveals an inner row's controls.
2067
+ - `as` and `render` are mutually exclusive (`render` wins, dev-warned); use `as="li"` inside a real list.
2068
+
2069
+ ## VergeSlot
2070
+
2071
+ `@instruments/materia-ui/components/verge`
2072
+
2073
+ A reserved slot whose controls rest hidden and reveal on hover, on focus within the row, and always on touch (`pointer: coarse`). The slot holds its space throughout, so nothing shifts.
2074
+
2075
+ The slot hides with opacity, never `display: none` or `visibility: hidden`, so its controls stay in the tab order: focus arriving on one is what reveals it. `pointer-events` is off at rest so the mouse cannot click a control it cannot see. An open menu or popover inside the slot holds it revealed.
2076
+
2077
+ Used outside a `VergeRoot` it renders permanently visible rather than permanently hidden, because an unreachable control is the worse failure.
2078
+
2079
+ Adapted from
2080
+
2081
+ - Keep controls visually small and give them a 44 by 44 pixel hit area on coarse pointers; the slot reserves space but does not own the controls' hit area.
2082
+ - Use `slots` only to align controls into a column across rows with different counts; otherwise let the children size the slot.
2083
+ - Do not use `visible` to say a row matters more; a control drawn on every row at rest is furniture.
2084
+
2085
+ ## VisuallyHidden
2086
+
2087
+ `@instruments/materia-ui/components/visually-hidden`
2088
+
2089
+ Hides content visually while keeping it in the accessibility tree - for screen-reader-only labels and captions that must not take up layout space. RSC-safe.
2090
+
2091
+ - Use for screen-reader-only text (e.g. a link's full context) - for icon-only `Button`s prefer the `aria-label` prop the component already requires.
2092
+ - Never hide interactive or focusable content inside it - sighted keyboard users would tab into something they cannot see.
2093
+
2094
+ ## VoicePill
2095
+
2096
+ `@instruments/materia-ui/components/voice`
2097
+
2098
+ The composer's send/voice control, morphing across a single `<button>`. A dumb, fully props-driven atom: it owns no timers, audio, or permissions - a parent drives every transition through `state`, `level`, and `elapsedMs`.
2099
+
2100
+ States: `idle` shows the `Mic` (empty-composer control); `typing` swaps instantly to `ArrowUp`; `arming` gives a brief pre-listen pulse; `listening` widens the pill and crossfades (with a masking blur) to a live waveform plus a `tabular-nums` timer; `finalizing` freezes the bars and contracts faster than it expanded; `error` shakes once (or, under reduced motion, pulses a destructive tint). Carries a glass sheen so `idle` reads as a plain primary pill.
2101
+
2102
+ - Keep this dumb - drive every transition from the parent through `state`/`level`/`elapsedMs`; it owns no timers, audio, or permissions.
2103
+ - Pass `label` per state (the parent decides the copy, e.g. "Voice input" vs "Stop dictation") so screen readers announce the current action; never hardcode it here.
2104
+ - Feed `level` from a real RMS meter while `listening` - a dead-flat waveform reads as a crashed mic; the atom floors and undulates the bars, but only live level makes it look alive.