@remix-run/ui 0.2.0 → 0.4.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 (395) hide show
  1. package/README.md +50 -164
  2. package/dist/accordion/index.d.ts +46 -0
  3. package/dist/accordion/index.js +142 -0
  4. package/dist/accordion/index.js.map +1 -0
  5. package/dist/accordion/primitives.d.ts +104 -0
  6. package/dist/accordion/primitives.js +312 -0
  7. package/dist/accordion/primitives.js.map +1 -0
  8. package/dist/{components/anchor/anchor.d.ts → anchor/index.d.ts} +8 -1
  9. package/dist/{components/anchor/anchor.js → anchor/index.js} +31 -12
  10. package/dist/anchor/index.js.map +1 -0
  11. package/dist/animation/demos/aspect-ratio.d.ts +2 -0
  12. package/dist/animation/demos/aspect-ratio.js +69 -0
  13. package/dist/animation/demos/aspect-ratio.js.map +1 -0
  14. package/dist/animation/demos/bouncy-switch.d.ts +2 -0
  15. package/dist/animation/demos/bouncy-switch.js +36 -0
  16. package/dist/animation/demos/bouncy-switch.js.map +1 -0
  17. package/dist/animation/demos/color-interpolation.d.ts +1 -0
  18. package/dist/animation/demos/color-interpolation.js +53 -0
  19. package/dist/animation/demos/color-interpolation.js.map +1 -0
  20. package/dist/animation/demos/cube.d.ts +2 -0
  21. package/dist/animation/demos/cube.js +86 -0
  22. package/dist/animation/demos/cube.js.map +1 -0
  23. package/dist/animation/demos/default-animate.d.ts +2 -0
  24. package/dist/animation/demos/default-animate.js +89 -0
  25. package/dist/animation/demos/default-animate.js.map +1 -0
  26. package/dist/animation/demos/drag-release.d.ts +24 -0
  27. package/dist/animation/demos/drag-release.js +96 -0
  28. package/dist/animation/demos/drag-release.js.map +1 -0
  29. package/dist/animation/demos/enter.d.ts +1 -0
  30. package/dist/animation/demos/enter.js +19 -0
  31. package/dist/animation/demos/enter.js.map +1 -0
  32. package/dist/animation/demos/exit.d.ts +2 -0
  33. package/dist/animation/demos/exit.js +58 -0
  34. package/dist/animation/demos/exit.js.map +1 -0
  35. package/dist/animation/demos/flip-toggle.d.ts +2 -0
  36. package/dist/animation/demos/flip-toggle.js +37 -0
  37. package/dist/animation/demos/flip-toggle.js.map +1 -0
  38. package/dist/animation/demos/hold-to-confirm.d.ts +13 -0
  39. package/dist/animation/demos/hold-to-confirm.js +211 -0
  40. package/dist/animation/demos/hold-to-confirm.js.map +1 -0
  41. package/dist/animation/demos/html-content.d.ts +2 -0
  42. package/dist/animation/demos/html-content.js +30 -0
  43. package/dist/animation/demos/html-content.js.map +1 -0
  44. package/dist/animation/demos/interruptible-keyframes.d.ts +1 -0
  45. package/dist/animation/demos/interruptible-keyframes.js +48 -0
  46. package/dist/animation/demos/interruptible-keyframes.js.map +1 -0
  47. package/dist/animation/demos/keyframes.d.ts +1 -0
  48. package/dist/animation/demos/keyframes.js +24 -0
  49. package/dist/animation/demos/keyframes.js.map +1 -0
  50. package/dist/animation/demos/material-ripple.d.ts +2 -0
  51. package/dist/animation/demos/material-ripple.js +127 -0
  52. package/dist/animation/demos/material-ripple.js.map +1 -0
  53. package/dist/animation/demos/mixin-presence-list.d.ts +2 -0
  54. package/dist/animation/demos/mixin-presence-list.js +88 -0
  55. package/dist/animation/demos/mixin-presence-list.js.map +1 -0
  56. package/dist/animation/demos/mixin-reclaim.d.ts +2 -0
  57. package/dist/animation/demos/mixin-reclaim.js +90 -0
  58. package/dist/animation/demos/mixin-reclaim.js.map +1 -0
  59. package/dist/animation/demos/multi-state-badge.d.ts +2 -0
  60. package/dist/animation/demos/multi-state-badge.js +231 -0
  61. package/dist/animation/demos/multi-state-badge.js.map +1 -0
  62. package/dist/animation/demos/press.d.ts +2 -0
  63. package/dist/animation/demos/press.js +63 -0
  64. package/dist/animation/demos/press.js.map +1 -0
  65. package/dist/animation/demos/reordering.d.ts +2 -0
  66. package/dist/animation/demos/reordering.js +53 -0
  67. package/dist/animation/demos/reordering.js.map +1 -0
  68. package/dist/animation/demos/rolling-square.d.ts +2 -0
  69. package/dist/animation/demos/rolling-square.js +42 -0
  70. package/dist/animation/demos/rolling-square.js.map +1 -0
  71. package/dist/animation/demos/rotate.d.ts +1 -0
  72. package/dist/animation/demos/rotate.js +18 -0
  73. package/dist/animation/demos/rotate.js.map +1 -0
  74. package/dist/animation/demos/shared-layout.d.ts +2 -0
  75. package/dist/animation/demos/shared-layout.js +114 -0
  76. package/dist/animation/demos/shared-layout.js.map +1 -0
  77. package/dist/animation/demos/transition-options.d.ts +1 -0
  78. package/dist/animation/demos/transition-options.js +21 -0
  79. package/dist/animation/demos/transition-options.js.map +1 -0
  80. package/dist/animation/spring.d.ts +22 -0
  81. package/dist/animation/spring.js +22 -0
  82. package/dist/animation/spring.js.map +1 -1
  83. package/dist/{components/breadcrumbs/breadcrumbs.js → breadcrumbs/index.js} +19 -19
  84. package/dist/breadcrumbs/index.js.map +1 -0
  85. package/dist/button/index.d.ts +15 -0
  86. package/dist/button/index.js +128 -0
  87. package/dist/button/index.js.map +1 -0
  88. package/dist/checkbox/index.d.ts +14 -0
  89. package/dist/checkbox/index.js +125 -0
  90. package/dist/checkbox/index.js.map +1 -0
  91. package/dist/combobox/index.d.ts +21 -0
  92. package/dist/combobox/index.js +58 -0
  93. package/dist/combobox/index.js.map +1 -0
  94. package/dist/{components/combobox/combobox.d.ts → combobox/primitives.d.ts} +3 -7
  95. package/dist/{components/combobox/combobox.js → combobox/primitives.js} +8 -61
  96. package/dist/combobox/primitives.js.map +1 -0
  97. package/dist/input/index.d.ts +13 -0
  98. package/dist/input/index.js +121 -0
  99. package/dist/input/index.js.map +1 -0
  100. package/dist/listbox/flash-attribute.js.map +1 -0
  101. package/dist/{components/listbox/listbox.d.ts → listbox/index.d.ts} +2 -6
  102. package/dist/{components/listbox/listbox.js → listbox/index.js} +4 -82
  103. package/dist/listbox/index.js.map +1 -0
  104. package/dist/menu/hover-aim.js.map +1 -0
  105. package/dist/menu/index.d.ts +42 -0
  106. package/dist/menu/index.js +250 -0
  107. package/dist/menu/index.js.map +1 -0
  108. package/dist/{components/menu/menu.d.ts → menu/primitives.d.ts} +6 -32
  109. package/dist/{components/menu/menu.js → menu/primitives.js} +117 -279
  110. package/dist/menu/primitives.js.map +1 -0
  111. package/dist/{components/popover/popover.d.ts → popover/index.d.ts} +3 -5
  112. package/dist/{components/popover/popover.js → popover/index.js} +15 -51
  113. package/dist/popover/index.js.map +1 -0
  114. package/dist/{interactions/outside-click/outside-click-mixin.js → popover/outside-click.js} +1 -1
  115. package/dist/popover/outside-click.js.map +1 -0
  116. package/dist/popover/scroll-lock.d.ts +1 -0
  117. package/dist/{utils → popover}/scroll-lock.js +0 -18
  118. package/dist/popover/scroll-lock.js.map +1 -0
  119. package/dist/radio/index.d.ts +12 -0
  120. package/dist/radio/index.js +77 -0
  121. package/dist/radio/index.js.map +1 -0
  122. package/dist/runtime/client-entries.d.ts +1 -2
  123. package/dist/runtime/client-entries.js.map +1 -1
  124. package/dist/runtime/component.d.ts +2 -2
  125. package/dist/runtime/component.js +1 -1
  126. package/dist/runtime/component.js.map +1 -1
  127. package/dist/runtime/diff-dom.js +194 -21
  128. package/dist/runtime/diff-dom.js.map +1 -1
  129. package/dist/runtime/frame.d.ts +7 -0
  130. package/dist/runtime/frame.js +176 -41
  131. package/dist/runtime/frame.js.map +1 -1
  132. package/dist/runtime/jsx.d.ts +2 -3
  133. package/dist/runtime/jsx.js.map +1 -1
  134. package/dist/runtime/reconcile.js +11 -5
  135. package/dist/runtime/reconcile.js.map +1 -1
  136. package/dist/runtime/vdom.js +3 -0
  137. package/dist/runtime/vdom.js.map +1 -1
  138. package/dist/select/index.d.ts +19 -0
  139. package/dist/select/index.js +95 -0
  140. package/dist/select/index.js.map +1 -0
  141. package/dist/select/keydown.js.map +1 -0
  142. package/dist/{components/select/select.d.ts → select/primitives.d.ts} +4 -6
  143. package/dist/{components/select/select.js → select/primitives.js} +12 -64
  144. package/dist/select/primitives.js.map +1 -0
  145. package/dist/server/stream.js +5 -4
  146. package/dist/server/stream.js.map +1 -1
  147. package/dist/shared/focus-styles.d.ts +1 -0
  148. package/dist/shared/focus-styles.js +2 -0
  149. package/dist/shared/focus-styles.js.map +1 -0
  150. package/dist/shared/icons.d.ts +9 -0
  151. package/dist/shared/icons.js +42 -0
  152. package/dist/shared/icons.js.map +1 -0
  153. package/dist/shared/listbox-popover-styles.d.ts +6 -0
  154. package/dist/shared/listbox-popover-styles.js +137 -0
  155. package/dist/shared/listbox-popover-styles.js.map +1 -0
  156. package/dist/shared/style-values.d.ts +78 -0
  157. package/dist/{theme/presets/rmx-01/index.js → shared/style-values.js} +3 -34
  158. package/dist/shared/style-values.js.map +1 -0
  159. package/dist/{interactions/typeahead/typeahead-mixin.js → shared/typeahead.js} +1 -1
  160. package/dist/shared/typeahead.js.map +1 -0
  161. package/dist/shared/wait-for-css-transition.js.map +1 -0
  162. package/dist/shared/wait.js.map +1 -0
  163. package/dist/style/style.js +27 -10
  164. package/dist/style/style.js.map +1 -1
  165. package/dist/tabs/index.d.ts +32 -0
  166. package/dist/tabs/index.js +157 -0
  167. package/dist/tabs/index.js.map +1 -0
  168. package/dist/tabs/primitives.d.ts +57 -0
  169. package/dist/tabs/primitives.js +238 -0
  170. package/dist/tabs/primitives.js.map +1 -0
  171. package/dist/toggle/index.d.ts +9 -0
  172. package/dist/toggle/index.js +108 -0
  173. package/dist/toggle/index.js.map +1 -0
  174. package/dist/toggle/primitives.d.ts +29 -0
  175. package/dist/toggle/primitives.js +127 -0
  176. package/dist/toggle/primitives.js.map +1 -0
  177. package/package.json +74 -45
  178. package/src/{components/accordion → accordion}/README.md +50 -14
  179. package/src/accordion/index.tsx +285 -0
  180. package/src/accordion/primitives.tsx +512 -0
  181. package/src/{components/anchor → anchor}/README.md +48 -5
  182. package/src/{components/anchor/anchor.ts → anchor/index.ts} +53 -12
  183. package/src/animation/demos/aspect-ratio.tsx +120 -0
  184. package/src/animation/demos/bouncy-switch.tsx +47 -0
  185. package/src/animation/demos/color-interpolation.tsx +73 -0
  186. package/src/animation/demos/cube.tsx +116 -0
  187. package/src/animation/demos/default-animate.tsx +129 -0
  188. package/src/animation/demos/drag-release.ts +118 -0
  189. package/src/animation/demos/enter.tsx +22 -0
  190. package/src/animation/demos/exit.tsx +79 -0
  191. package/src/animation/demos/flip-toggle.tsx +46 -0
  192. package/src/animation/demos/hold-to-confirm.tsx +317 -0
  193. package/src/animation/demos/html-content.tsx +41 -0
  194. package/src/animation/demos/interruptible-keyframes.tsx +62 -0
  195. package/src/animation/demos/keyframes.tsx +29 -0
  196. package/src/animation/demos/material-ripple.tsx +158 -0
  197. package/src/animation/demos/mixin-presence-list.tsx +121 -0
  198. package/src/animation/demos/mixin-reclaim.tsx +125 -0
  199. package/src/animation/demos/multi-state-badge.tsx +426 -0
  200. package/src/animation/demos/press.tsx +67 -0
  201. package/src/animation/demos/reordering.tsx +68 -0
  202. package/src/animation/demos/rolling-square.tsx +57 -0
  203. package/src/animation/demos/rotate.tsx +21 -0
  204. package/src/animation/demos/shared-layout.tsx +211 -0
  205. package/src/animation/demos/transition-options.tsx +24 -0
  206. package/src/animation/spring.ts +22 -0
  207. package/src/{components/breadcrumbs → breadcrumbs}/README.md +4 -4
  208. package/src/{components/breadcrumbs/breadcrumbs.tsx → breadcrumbs/index.tsx} +18 -18
  209. package/src/button/README.md +44 -0
  210. package/src/button/index.ts +168 -0
  211. package/src/checkbox/README.md +59 -0
  212. package/src/checkbox/index.ts +162 -0
  213. package/src/{components/combobox → combobox}/README.md +58 -9
  214. package/src/combobox/index.tsx +112 -0
  215. package/src/{components/combobox/combobox.tsx → combobox/primitives.tsx} +5 -91
  216. package/src/input/README.md +52 -0
  217. package/src/input/index.ts +147 -0
  218. package/src/{components/listbox → listbox}/README.md +9 -41
  219. package/src/{components/listbox/listbox.ts → listbox/index.ts} +2 -87
  220. package/src/menu/README.md +161 -0
  221. package/src/menu/index.tsx +354 -0
  222. package/src/{components/menu/menu.tsx → menu/primitives.tsx} +117 -359
  223. package/src/{components/popover → popover}/README.md +20 -39
  224. package/src/{components/popover/popover.ts → popover/index.ts} +16 -61
  225. package/src/{utils → popover}/scroll-lock.ts +0 -28
  226. package/src/radio/README.md +53 -0
  227. package/src/radio/index.ts +100 -0
  228. package/src/runtime/client-entries.ts +1 -5
  229. package/src/runtime/component.ts +3 -3
  230. package/src/runtime/demos/readme.demo.tsx +704 -0
  231. package/src/runtime/diff-dom.ts +270 -20
  232. package/src/runtime/frame.ts +218 -41
  233. package/src/runtime/jsx.ts +6 -10
  234. package/src/runtime/reconcile.ts +11 -5
  235. package/src/runtime/vdom.ts +3 -0
  236. package/src/{components/select → select}/README.md +29 -19
  237. package/src/select/index.tsx +159 -0
  238. package/src/{components/select/select.tsx → select/primitives.tsx} +11 -99
  239. package/src/server/stream.ts +10 -5
  240. package/src/shared/focus-styles.ts +2 -0
  241. package/src/shared/icons.tsx +62 -0
  242. package/src/shared/listbox-popover-styles.ts +146 -0
  243. package/src/shared/style-values.ts +165 -0
  244. package/src/style/style.ts +29 -10
  245. package/src/tabs/README.md +141 -0
  246. package/src/tabs/index.tsx +244 -0
  247. package/src/tabs/primitives.ts +365 -0
  248. package/src/toggle/README.md +56 -0
  249. package/src/toggle/index.tsx +134 -0
  250. package/src/toggle/primitives.ts +192 -0
  251. package/dist/components/accordion/accordion.d.ts +0 -92
  252. package/dist/components/accordion/accordion.js +0 -335
  253. package/dist/components/accordion/accordion.js.map +0 -1
  254. package/dist/components/accordion/demos/card.demo.d.ts +0 -6
  255. package/dist/components/accordion/demos/card.demo.js +0 -58
  256. package/dist/components/accordion/demos/card.demo.js.map +0 -1
  257. package/dist/components/accordion/demos/multiple.demo.d.ts +0 -6
  258. package/dist/components/accordion/demos/multiple.demo.js +0 -19
  259. package/dist/components/accordion/demos/multiple.demo.js.map +0 -1
  260. package/dist/components/accordion/demos/overview.demo.d.ts +0 -6
  261. package/dist/components/accordion/demos/overview.demo.js +0 -19
  262. package/dist/components/accordion/demos/overview.demo.js.map +0 -1
  263. package/dist/components/anchor/anchor.js.map +0 -1
  264. package/dist/components/breadcrumbs/breadcrumbs.js.map +0 -1
  265. package/dist/components/breadcrumbs/demos/basic.demo.d.ts +0 -5
  266. package/dist/components/breadcrumbs/demos/basic.demo.js +0 -14
  267. package/dist/components/breadcrumbs/demos/basic.demo.js.map +0 -1
  268. package/dist/components/breadcrumbs/demos/separator.demo.d.ts +0 -5
  269. package/dist/components/breadcrumbs/demos/separator.demo.js +0 -14
  270. package/dist/components/breadcrumbs/demos/separator.demo.js.map +0 -1
  271. package/dist/components/button/button.d.ts +0 -105
  272. package/dist/components/button/button.js +0 -207
  273. package/dist/components/button/button.js.map +0 -1
  274. package/dist/components/button/demos/aliases.demo.d.ts +0 -6
  275. package/dist/components/button/demos/aliases.demo.js +0 -18
  276. package/dist/components/button/demos/aliases.demo.js.map +0 -1
  277. package/dist/components/button/demos/basic.demo.d.ts +0 -6
  278. package/dist/components/button/demos/basic.demo.js +0 -19
  279. package/dist/components/button/demos/basic.demo.js.map +0 -1
  280. package/dist/components/button/demos/states.demo.d.ts +0 -6
  281. package/dist/components/button/demos/states.demo.js +0 -29
  282. package/dist/components/button/demos/states.demo.js.map +0 -1
  283. package/dist/components/combobox/combobox.js.map +0 -1
  284. package/dist/components/combobox/demos/overview.demo.d.ts +0 -6
  285. package/dist/components/combobox/demos/overview.demo.js +0 -153
  286. package/dist/components/combobox/demos/overview.demo.js.map +0 -1
  287. package/dist/components/glyph/glyph.d.ts +0 -14
  288. package/dist/components/glyph/glyph.js +0 -65
  289. package/dist/components/glyph/glyph.js.map +0 -1
  290. package/dist/components/listbox/demos/overview.demo.d.ts +0 -6
  291. package/dist/components/listbox/demos/overview.demo.js +0 -64
  292. package/dist/components/listbox/demos/overview.demo.js.map +0 -1
  293. package/dist/components/listbox/listbox.js.map +0 -1
  294. package/dist/components/menu/demos/bubbling.demo.d.ts +0 -5
  295. package/dist/components/menu/demos/bubbling.demo.js +0 -15
  296. package/dist/components/menu/demos/bubbling.demo.js.map +0 -1
  297. package/dist/components/menu/demos/overview.demo.d.ts +0 -6
  298. package/dist/components/menu/demos/overview.demo.js +0 -32
  299. package/dist/components/menu/demos/overview.demo.js.map +0 -1
  300. package/dist/components/menu/hover-aim.js.map +0 -1
  301. package/dist/components/menu/menu.js.map +0 -1
  302. package/dist/components/popover/demos/overview.demo.d.ts +0 -6
  303. package/dist/components/popover/demos/overview.demo.js +0 -64
  304. package/dist/components/popover/demos/overview.demo.js.map +0 -1
  305. package/dist/components/popover/popover.js.map +0 -1
  306. package/dist/components/select/demos/deconstructed.demo.d.ts +0 -6
  307. package/dist/components/select/demos/deconstructed.demo.js +0 -53
  308. package/dist/components/select/demos/deconstructed.demo.js.map +0 -1
  309. package/dist/components/select/demos/overview.demo.d.ts +0 -5
  310. package/dist/components/select/demos/overview.demo.js +0 -27
  311. package/dist/components/select/demos/overview.demo.js.map +0 -1
  312. package/dist/components/select/select.js.map +0 -1
  313. package/dist/components/separator/separator.d.ts +0 -2
  314. package/dist/components/separator/separator.js +0 -15
  315. package/dist/components/separator/separator.js.map +0 -1
  316. package/dist/components/tabs/tabs.d.ts +0 -78
  317. package/dist/components/tabs/tabs.js +0 -339
  318. package/dist/components/tabs/tabs.js.map +0 -1
  319. package/dist/interactions/keydown/keydown.js.map +0 -1
  320. package/dist/interactions/outside-click/outside-click-mixin.js.map +0 -1
  321. package/dist/interactions/typeahead/typeahead-mixin.js.map +0 -1
  322. package/dist/theme/contract.d.ts +0 -61
  323. package/dist/theme/contract.js +0 -131
  324. package/dist/theme/contract.js.map +0 -1
  325. package/dist/theme/glyph-contract.d.ts +0 -11
  326. package/dist/theme/glyph-contract.js +0 -34
  327. package/dist/theme/glyph-contract.js.map +0 -1
  328. package/dist/theme/presets/rmx-01/glyphs.d.ts +0 -2
  329. package/dist/theme/presets/rmx-01/glyphs.js +0 -252
  330. package/dist/theme/presets/rmx-01/glyphs.js.map +0 -1
  331. package/dist/theme/presets/rmx-01/index.d.ts +0 -4
  332. package/dist/theme/presets/rmx-01/index.js.map +0 -1
  333. package/dist/theme/runtime.d.ts +0 -2
  334. package/dist/theme/runtime.js +0 -84
  335. package/dist/theme/runtime.js.map +0 -1
  336. package/dist/theme/theme.d.ts +0 -6
  337. package/dist/theme/theme.js +0 -5
  338. package/dist/theme/theme.js.map +0 -1
  339. package/dist/utils/flash-attribute.js.map +0 -1
  340. package/dist/utils/scroll-lock.d.ts +0 -3
  341. package/dist/utils/scroll-lock.js.map +0 -1
  342. package/dist/utils/wait-for-css-transition.js.map +0 -1
  343. package/dist/utils/wait.js.map +0 -1
  344. package/src/components/accordion/accordion.tsx +0 -565
  345. package/src/components/accordion/demos/card.demo.tsx +0 -113
  346. package/src/components/accordion/demos/multiple.demo.tsx +0 -56
  347. package/src/components/accordion/demos/overview.demo.tsx +0 -56
  348. package/src/components/breadcrumbs/demos/basic.demo.tsx +0 -17
  349. package/src/components/breadcrumbs/demos/separator.demo.tsx +0 -18
  350. package/src/components/button/README.md +0 -44
  351. package/src/components/button/button.tsx +0 -286
  352. package/src/components/button/demos/aliases.demo.tsx +0 -27
  353. package/src/components/button/demos/basic.demo.tsx +0 -30
  354. package/src/components/button/demos/states.demo.tsx +0 -52
  355. package/src/components/combobox/demos/overview.demo.tsx +0 -199
  356. package/src/components/glyph/README.md +0 -72
  357. package/src/components/glyph/glyph.tsx +0 -110
  358. package/src/components/listbox/demos/overview.demo.tsx +0 -101
  359. package/src/components/menu/README.md +0 -96
  360. package/src/components/menu/demos/bubbling.demo.tsx +0 -34
  361. package/src/components/menu/demos/overview.demo.tsx +0 -76
  362. package/src/components/popover/demos/overview.demo.tsx +0 -143
  363. package/src/components/select/demos/deconstructed.demo.tsx +0 -95
  364. package/src/components/select/demos/overview.demo.tsx +0 -51
  365. package/src/components/separator/separator.ts +0 -19
  366. package/src/components/tabs/README.md +0 -105
  367. package/src/components/tabs/tabs.tsx +0 -504
  368. package/src/theme/README.md +0 -103
  369. package/src/theme/contract.ts +0 -215
  370. package/src/theme/glyph-contract.ts +0 -59
  371. package/src/theme/presets/rmx-01/glyphs.tsx +0 -308
  372. package/src/theme/presets/rmx-01/index.ts +0 -123
  373. package/src/theme/runtime.ts +0 -119
  374. package/src/theme/theme.ts +0 -15
  375. package/src/utils/scroll-lock/README.md +0 -33
  376. /package/dist/{components/breadcrumbs/breadcrumbs.d.ts → breadcrumbs/index.d.ts} +0 -0
  377. /package/dist/{utils → listbox}/flash-attribute.d.ts +0 -0
  378. /package/dist/{utils → listbox}/flash-attribute.js +0 -0
  379. /package/dist/{components/menu → menu}/hover-aim.d.ts +0 -0
  380. /package/dist/{components/menu → menu}/hover-aim.js +0 -0
  381. /package/dist/{interactions/outside-click/outside-click-mixin.d.ts → popover/outside-click.d.ts} +0 -0
  382. /package/dist/{interactions/keydown → select}/keydown.d.ts +0 -0
  383. /package/dist/{interactions/keydown → select}/keydown.js +0 -0
  384. /package/dist/{interactions/typeahead/typeahead-mixin.d.ts → shared/typeahead.d.ts} +0 -0
  385. /package/dist/{utils → shared}/wait-for-css-transition.d.ts +0 -0
  386. /package/dist/{utils → shared}/wait-for-css-transition.js +0 -0
  387. /package/dist/{utils → shared}/wait.d.ts +0 -0
  388. /package/dist/{utils → shared}/wait.js +0 -0
  389. /package/src/{utils → listbox}/flash-attribute.ts +0 -0
  390. /package/src/{components/menu → menu}/hover-aim.ts +0 -0
  391. /package/src/{interactions/outside-click/outside-click-mixin.ts → popover/outside-click.ts} +0 -0
  392. /package/src/{interactions/keydown → select}/keydown.ts +0 -0
  393. /package/src/{interactions/typeahead/typeahead-mixin.ts → shared/typeahead.ts} +0 -0
  394. /package/src/{utils → shared}/wait-for-css-transition.ts +0 -0
  395. /package/src/{utils → shared}/wait.ts +0 -0
@@ -0,0 +1,108 @@
1
+ import { createMixin, css } from '@remix-run/ui';
2
+ import { renderMixinElement } from "../runtime/mixins/mixin.js";
3
+ import { controlFocusShadow } from "../shared/focus-styles.js";
4
+ export { ToggleChangeEvent, onToggleChange } from '@remix-run/ui/toggle/primitives';
5
+ const checkedSelector = '&:checked, &[aria-checked="true"], &[data-state="checked"]';
6
+ const checkedThumbSelector = '&:checked::before, &[aria-checked="true"]::before, &[data-state="checked"]::before';
7
+ const uncheckedThumbBackground = 'linear-gradient(180deg, rgba(0, 0, 0, 0) 33%, rgba(0, 0, 0, 0.04) 100%), #FFFFFF';
8
+ const uncheckedThumbShadow = '0 0 0 0.5px rgba(0, 0, 0, 0.06), 0 1px 1px -0.5px rgba(0, 0, 0, 0.12), 0 2px 2px -1px rgba(0, 0, 0, 0.12), 0 4px 4px -2px rgba(0, 0, 0, 0.12), inset 0 0 2px 1px #FFFFFF';
9
+ const checkedThumbBackground = 'linear-gradient(180deg, rgba(112, 199, 84, 0) 25%, rgba(112, 199, 84, 0.25) 100%), #FFFFFF';
10
+ const checkedThumbShadow = '0 1px 2px -0.5px rgba(66, 134, 44, 0.6), 0 2px 4px -1px rgba(66, 134, 44, 0.6), 0 4px 6px -2px rgba(66, 134, 44, 0.6), 0 0 0 0.5px rgba(0, 0, 0, 0.28), inset 0 0 2px 1px #FFFFFF';
11
+ const toggleDefaultAttrs = createMixin((handle, hostType) => (props) => {
12
+ if (hostType !== 'input') {
13
+ return handle.element;
14
+ }
15
+ let type = props.type ?? 'checkbox';
16
+ if (type !== 'checkbox') {
17
+ return renderMixinElement(handle.element, {
18
+ ...props,
19
+ type,
20
+ });
21
+ }
22
+ return renderMixinElement(handle.element, {
23
+ ...props,
24
+ role: props.role ?? 'switch',
25
+ type,
26
+ });
27
+ })();
28
+ const baseStyles = {
29
+ appearance: 'none',
30
+ WebkitAppearance: 'none',
31
+ margin: 0,
32
+ boxSizing: 'border-box',
33
+ position: 'relative',
34
+ display: 'inline-block',
35
+ width: 'var(--rmx-toggle-width)',
36
+ height: 'var(--rmx-toggle-height)',
37
+ minWidth: 'var(--rmx-toggle-width)',
38
+ minHeight: 'var(--rmx-toggle-height)',
39
+ padding: 0,
40
+ border: 0,
41
+ borderRadius: '9999px',
42
+ background: 'linear-gradient(180deg, rgba(0, 0, 0, 0.06) 0%, rgba(0, 0, 0, 0) 100%), #EBEBEB',
43
+ boxShadow: 'inset 0 0 4px 1px rgba(0, 0, 0, 0.08), inset 0 1px 1px rgba(0, 0, 0, 0.02), inset 0 2px 2px rgba(0, 0, 0, 0.02)',
44
+ verticalAlign: 'middle',
45
+ flex: 'none',
46
+ '&::before': {
47
+ content: '""',
48
+ position: 'absolute',
49
+ left: 'var(--rmx-toggle-thumb-inset)',
50
+ top: 'calc((var(--rmx-toggle-height) - var(--rmx-toggle-thumb-height)) / 2)',
51
+ width: 'var(--rmx-toggle-thumb-width)',
52
+ height: 'var(--rmx-toggle-thumb-height)',
53
+ borderRadius: '99px',
54
+ background: uncheckedThumbBackground,
55
+ boxShadow: uncheckedThumbShadow,
56
+ transform: 'translateX(0)',
57
+ transition: 'transform 160ms ease, background 160ms ease, box-shadow 160ms ease',
58
+ pointerEvents: 'none',
59
+ },
60
+ '&:disabled, &[aria-disabled="true"]': {
61
+ opacity: 0.55,
62
+ },
63
+ [checkedSelector]: {
64
+ background: 'linear-gradient(180deg, #70C754 0%, #70C754 100%)',
65
+ boxShadow: '0 1px 0 rgba(255, 255, 255, 0.4), 0 0 0 1px rgba(255, 255, 255, 0.4), 0 -4px 8px 2px #FFFFFF, 0 4px 8px 2px rgba(0, 0, 0, 0.05), 0 0 12px 1px rgba(112, 199, 84, 0.25), inset 0 0 4px 1px rgba(0, 0, 0, 0.25), inset 0 1px 1px rgba(0, 0, 0, 0.1), inset 0 2px 2px rgba(0, 0, 0, 0.1)',
66
+ },
67
+ [checkedThumbSelector]: {
68
+ background: checkedThumbBackground,
69
+ boxShadow: checkedThumbShadow,
70
+ transform: 'translateX(var(--rmx-toggle-thumb-translate-x))',
71
+ },
72
+ '&:focus-visible': {
73
+ outline: 0,
74
+ boxShadow: controlFocusShadow,
75
+ },
76
+ '@media (prefers-reduced-motion: reduce)': {
77
+ '&::before': {
78
+ transition: 'none',
79
+ },
80
+ },
81
+ };
82
+ const thumbTranslate = 'calc(var(--rmx-toggle-width) - var(--rmx-toggle-thumb-width) - (var(--rmx-toggle-thumb-inset) * 2))';
83
+ const sizeStyles = {
84
+ md: css({
85
+ '--rmx-toggle-width': '30px',
86
+ '--rmx-toggle-height': '18px',
87
+ '--rmx-toggle-thumb-width': '18px',
88
+ '--rmx-toggle-thumb-height': '14px',
89
+ '--rmx-toggle-thumb-inset': '2px',
90
+ '--rmx-toggle-thumb-translate-x': thumbTranslate,
91
+ ...baseStyles,
92
+ }),
93
+ lg: css({
94
+ '--rmx-toggle-width': '36px',
95
+ '--rmx-toggle-height': '22px',
96
+ '--rmx-toggle-thumb-width': '22px',
97
+ '--rmx-toggle-thumb-height': '18px',
98
+ '--rmx-toggle-thumb-inset': '2px',
99
+ '--rmx-toggle-thumb-translate-x': thumbTranslate,
100
+ ...baseStyles,
101
+ }),
102
+ };
103
+ export function toggle(options = {}) {
104
+ let { size = 'md' } = options;
105
+ return [toggleDefaultAttrs, sizeStyles[size]];
106
+ }
107
+ export default toggle;
108
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/toggle/index.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import { on } from '@remix-run/ui';
2
+ import type { Dispatched, ElementProps, MixinFactory } from '@remix-run/ui';
3
+ export interface ToggleControlOptions {
4
+ checked?: boolean;
5
+ defaultChecked?: boolean;
6
+ disabled?: boolean;
7
+ form?: string;
8
+ inputRef?: (input: HTMLInputElement, signal: AbortSignal) => void;
9
+ name?: string;
10
+ onCheckedChange?: (checked: boolean) => void;
11
+ readOnly?: boolean;
12
+ required?: boolean;
13
+ tabIndex?: number;
14
+ value?: string;
15
+ }
16
+ type ToggleChangeHandler<target extends HTMLElement> = (event: Dispatched<ToggleChangeEvent, target>, signal: AbortSignal) => void | Promise<void>;
17
+ declare const TOGGLE_CHANGE_EVENT: "rmx:toggle-change";
18
+ declare global {
19
+ interface HTMLElementEventMap {
20
+ [TOGGLE_CHANGE_EVENT]: ToggleChangeEvent;
21
+ }
22
+ }
23
+ export declare class ToggleChangeEvent extends Event {
24
+ readonly checked: boolean;
25
+ constructor(checked: boolean);
26
+ }
27
+ export declare const control: MixinFactory<HTMLElement, [options?: ToggleControlOptions | undefined], ElementProps>;
28
+ export declare function onToggleChange<target extends HTMLElement>(handler: ToggleChangeHandler<target>, captureBoolean?: boolean): ReturnType<typeof on<target, typeof TOGGLE_CHANGE_EVENT>>;
29
+ export {};
@@ -0,0 +1,127 @@
1
+ import { createElement, createMixin, on, ref } from '@remix-run/ui';
2
+ const TOGGLE_CHANGE_EVENT = 'rmx:toggle-change';
3
+ export class ToggleChangeEvent extends Event {
4
+ checked;
5
+ constructor(checked) {
6
+ super(TOGGLE_CHANGE_EVENT, { bubbles: true });
7
+ this.checked = checked;
8
+ }
9
+ }
10
+ function getBooleanState(value) {
11
+ return value === true || value === false ? value : undefined;
12
+ }
13
+ function propIsTrue(value) {
14
+ return value === true || value === 'true' || value === '';
15
+ }
16
+ function isDisabled(options, props) {
17
+ return (options.disabled === true || propIsTrue(props.disabled) || propIsTrue(props['aria-disabled']));
18
+ }
19
+ function isReadOnly(options, props) {
20
+ return (options.readOnly === true || propIsTrue(props.readOnly) || propIsTrue(props['aria-readonly']));
21
+ }
22
+ const controlMixin = createMixin((handle, hostType) => {
23
+ let uncontrolledChecked = false;
24
+ let hasInitialized = false;
25
+ function getChecked(options, props) {
26
+ let optionChecked = getBooleanState(options.checked);
27
+ if (optionChecked !== undefined) {
28
+ return optionChecked;
29
+ }
30
+ let propChecked = getBooleanState(props.checked);
31
+ if (propChecked !== undefined) {
32
+ return propChecked;
33
+ }
34
+ if (!hasInitialized) {
35
+ uncontrolledChecked =
36
+ getBooleanState(options.defaultChecked) ?? getBooleanState(props.defaultChecked) ?? false;
37
+ hasInitialized = true;
38
+ }
39
+ return uncontrolledChecked;
40
+ }
41
+ function setChecked(node, options, props, nextChecked) {
42
+ if (isDisabled(options, props) || isReadOnly(options, props)) {
43
+ if (node instanceof HTMLInputElement) {
44
+ node.checked = getChecked(options, props);
45
+ }
46
+ return;
47
+ }
48
+ if (options.checked === undefined && props.checked === undefined) {
49
+ uncontrolledChecked = nextChecked;
50
+ void handle.update();
51
+ }
52
+ options.onCheckedChange?.(nextChecked);
53
+ node.dispatchEvent(new ToggleChangeEvent(nextChecked));
54
+ }
55
+ return (options = {}, props) => {
56
+ let checked = getChecked(options, props);
57
+ let disabled = isDisabled(options, props);
58
+ let readOnly = isReadOnly(options, props);
59
+ let required = options.required ?? props.required;
60
+ let nextProps = {
61
+ ...props,
62
+ 'aria-checked': hostType === 'input' ? undefined : checked,
63
+ 'aria-disabled': hostType === 'input' ? undefined : disabled || undefined,
64
+ 'aria-readonly': hostType === 'input' ? undefined : readOnly || undefined,
65
+ 'aria-required': hostType === 'input' ? undefined : required || undefined,
66
+ checked: hostType === 'input' ? checked : props.checked,
67
+ defaultChecked: hostType === 'input' ? undefined : props.defaultChecked,
68
+ disabled: hostType === 'input' ? disabled || undefined : props.disabled,
69
+ form: hostType === 'input' ? (options.form ?? props.form) : props.form,
70
+ name: hostType === 'input' ? (options.name ?? props.name) : props.name,
71
+ readOnly: hostType === 'input' ? readOnly || undefined : props.readOnly,
72
+ required: hostType === 'input' ? required : props.required,
73
+ role: 'switch',
74
+ tabIndex: hostType === 'input'
75
+ ? (options.tabIndex ?? props.tabIndex)
76
+ : disabled
77
+ ? undefined
78
+ : (options.tabIndex ?? props.tabIndex ?? 0),
79
+ type: hostType === 'input'
80
+ ? props.type === undefined
81
+ ? 'checkbox'
82
+ : props.type
83
+ : hostType === 'button' && props.type === undefined
84
+ ? 'button'
85
+ : props.type,
86
+ value: hostType === 'input' ? (options.value ?? props.value) : props.value,
87
+ 'data-state': checked ? 'checked' : 'unchecked',
88
+ };
89
+ return createElement(handle.element, {
90
+ ...nextProps,
91
+ mix: [
92
+ ref((node, signal) => {
93
+ if (node instanceof HTMLInputElement) {
94
+ options.inputRef?.(node, signal);
95
+ }
96
+ }),
97
+ on('click', (event) => {
98
+ if (hostType !== 'input') {
99
+ event.preventDefault();
100
+ }
101
+ if (disabled || readOnly) {
102
+ if (event.currentTarget instanceof HTMLInputElement) {
103
+ event.currentTarget.checked = checked;
104
+ }
105
+ return;
106
+ }
107
+ let nextChecked = event.currentTarget instanceof HTMLInputElement
108
+ ? event.currentTarget.checked
109
+ : !checked;
110
+ setChecked(event.currentTarget, options, props, nextChecked);
111
+ }),
112
+ on('keydown', (event) => {
113
+ if (hostType === 'input' || event.key !== ' ') {
114
+ return;
115
+ }
116
+ event.preventDefault();
117
+ setChecked(event.currentTarget, options, props, !checked);
118
+ }),
119
+ ],
120
+ });
121
+ };
122
+ });
123
+ export const control = controlMixin;
124
+ export function onToggleChange(handler, captureBoolean) {
125
+ return on(TOGGLE_CHANGE_EVENT, handler, captureBoolean);
126
+ }
127
+ //# sourceMappingURL=primitives.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"primitives.js","sourceRoot":"","sources":["../../src/toggle/primitives.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@remix-run/ui",
3
- "version": "0.2.0",
4
- "description": "UI tokens, mixins, and glyphs for Remix components",
3
+ "version": "0.4.0",
4
+ "description": "UI runtime, headless primitives, and styled components for Remix",
5
5
  "author": "Ryan Florence <rpflorence@gmail.com>",
6
6
  "license": "MIT",
7
7
  "repository": {
@@ -15,6 +15,8 @@
15
15
  "README.md",
16
16
  "dist",
17
17
  "src",
18
+ "!src/**/*.demo.ts",
19
+ "!src/**/*.demo.tsx",
18
20
  "!src/**/*.test.ts",
19
21
  "!src/**/*.test.tsx"
20
22
  ],
@@ -26,28 +28,44 @@
26
28
  "default": "./dist/index.js"
27
29
  },
28
30
  "./accordion": {
29
- "types": "./dist/components/accordion/accordion.d.ts",
30
- "default": "./dist/components/accordion/accordion.js"
31
+ "types": "./dist/accordion/index.d.ts",
32
+ "default": "./dist/accordion/index.js"
33
+ },
34
+ "./accordion/primitives": {
35
+ "types": "./dist/accordion/primitives.d.ts",
36
+ "default": "./dist/accordion/primitives.js"
37
+ },
38
+ "./anchor": {
39
+ "types": "./dist/anchor/index.d.ts",
40
+ "default": "./dist/anchor/index.js"
31
41
  },
32
42
  "./animation": {
33
43
  "types": "./dist/animation/index.d.ts",
34
44
  "default": "./dist/animation/index.js"
35
45
  },
36
- "./anchor": {
37
- "types": "./dist/components/anchor/anchor.d.ts",
38
- "default": "./dist/components/anchor/anchor.js"
39
- },
40
46
  "./breadcrumbs": {
41
- "types": "./dist/components/breadcrumbs/breadcrumbs.d.ts",
42
- "default": "./dist/components/breadcrumbs/breadcrumbs.js"
47
+ "types": "./dist/breadcrumbs/index.d.ts",
48
+ "default": "./dist/breadcrumbs/index.js"
43
49
  },
44
50
  "./button": {
45
- "types": "./dist/components/button/button.d.ts",
46
- "default": "./dist/components/button/button.js"
51
+ "types": "./dist/button/index.d.ts",
52
+ "default": "./dist/button/index.js"
53
+ },
54
+ "./checkbox": {
55
+ "types": "./dist/checkbox/index.d.ts",
56
+ "default": "./dist/checkbox/index.js"
47
57
  },
48
58
  "./combobox": {
49
- "types": "./dist/components/combobox/combobox.d.ts",
50
- "default": "./dist/components/combobox/combobox.js"
59
+ "types": "./dist/combobox/index.d.ts",
60
+ "default": "./dist/combobox/index.js"
61
+ },
62
+ "./combobox/primitives": {
63
+ "types": "./dist/combobox/primitives.d.ts",
64
+ "default": "./dist/combobox/primitives.js"
65
+ },
66
+ "./input": {
67
+ "types": "./dist/input/index.d.ts",
68
+ "default": "./dist/input/index.js"
51
69
  },
52
70
  "./jsx-dev-runtime": {
53
71
  "types": "./dist/jsx-runtime.d.ts",
@@ -57,55 +75,67 @@
57
75
  "types": "./dist/jsx-runtime.d.ts",
58
76
  "default": "./dist/jsx-runtime.js"
59
77
  },
60
- "./glyph": {
61
- "types": "./dist/components/glyph/glyph.d.ts",
62
- "default": "./dist/components/glyph/glyph.js"
63
- },
64
78
  "./listbox": {
65
- "types": "./dist/components/listbox/listbox.d.ts",
66
- "default": "./dist/components/listbox/listbox.js"
79
+ "types": "./dist/listbox/index.d.ts",
80
+ "default": "./dist/listbox/index.js"
67
81
  },
68
82
  "./menu": {
69
- "types": "./dist/components/menu/menu.d.ts",
70
- "default": "./dist/components/menu/menu.js"
83
+ "types": "./dist/menu/index.d.ts",
84
+ "default": "./dist/menu/index.js"
85
+ },
86
+ "./menu/primitives": {
87
+ "types": "./dist/menu/primitives.d.ts",
88
+ "default": "./dist/menu/primitives.js"
71
89
  },
72
90
  "./popover": {
73
- "types": "./dist/components/popover/popover.d.ts",
74
- "default": "./dist/components/popover/popover.js"
91
+ "types": "./dist/popover/index.d.ts",
92
+ "default": "./dist/popover/index.js"
93
+ },
94
+ "./radio": {
95
+ "types": "./dist/radio/index.d.ts",
96
+ "default": "./dist/radio/index.js"
75
97
  },
76
98
  "./select": {
77
- "types": "./dist/components/select/select.d.ts",
78
- "default": "./dist/components/select/select.js"
99
+ "types": "./dist/select/index.d.ts",
100
+ "default": "./dist/select/index.js"
79
101
  },
80
- "./separator": {
81
- "types": "./dist/components/separator/separator.d.ts",
82
- "default": "./dist/components/separator/separator.js"
102
+ "./select/primitives": {
103
+ "types": "./dist/select/primitives.d.ts",
104
+ "default": "./dist/select/primitives.js"
83
105
  },
84
106
  "./server": {
85
107
  "types": "./dist/server/stream.d.ts",
86
108
  "default": "./dist/server/stream.js"
87
109
  },
110
+ "./tabs": {
111
+ "types": "./dist/tabs/index.d.ts",
112
+ "default": "./dist/tabs/index.js"
113
+ },
114
+ "./tabs/primitives": {
115
+ "types": "./dist/tabs/primitives.d.ts",
116
+ "default": "./dist/tabs/primitives.js"
117
+ },
88
118
  "./test": {
89
119
  "types": "./dist/test.d.ts",
90
120
  "default": "./dist/test.js"
91
121
  },
92
- "./theme": {
93
- "types": "./dist/theme/theme.d.ts",
94
- "default": "./dist/theme/theme.js"
122
+ "./toggle": {
123
+ "types": "./dist/toggle/index.d.ts",
124
+ "default": "./dist/toggle/index.js"
95
125
  },
96
- "./scroll-lock": {
97
- "types": "./dist/utils/scroll-lock.d.ts",
98
- "default": "./dist/utils/scroll-lock.js"
126
+ "./toggle/primitives": {
127
+ "types": "./dist/toggle/primitives.d.ts",
128
+ "default": "./dist/toggle/primitives.js"
99
129
  },
100
130
  "./package.json": "./package.json"
101
131
  },
102
132
  "devDependencies": {
103
133
  "@types/node": "^24.6.0",
104
134
  "@typescript/native-preview": "7.0.0-dev.20251125.1",
105
- "playwright": "^1.59.0",
135
+ "playwright": "^1.60.0",
106
136
  "typescript": "^5.9.3",
107
- "@remix-run/assert": "0.2.1",
108
- "@remix-run/test": "0.4.1"
137
+ "@remix-run/assert": "0.3.0",
138
+ "@remix-run/test": "0.5.0"
109
139
  },
110
140
  "dependencies": {
111
141
  "@types/dom-navigation": "^1.0.7"
@@ -113,18 +143,17 @@
113
143
  "keywords": [
114
144
  "remix",
115
145
  "ui",
116
- "theming",
117
- "design-tokens",
118
- "css-variables",
146
+ "headless",
147
+ "components",
119
148
  "mixins",
120
- "glyphs",
121
- "component-styling"
149
+ "runtime",
150
+ "primitives"
122
151
  ],
123
152
  "scripts": {
124
153
  "build": "tsc -p tsconfig.build.json",
125
154
  "clean": "git clean -fdX",
126
- "lint": "pnpm -w exec oxlint packages/ui -A all --quiet",
127
- "lint:fix": "pnpm -w exec oxlint packages/ui -A all --fix --quiet",
155
+ "lint": "pnpm -w exec oxlint packages/ui --max-warnings=0",
156
+ "lint:fix": "pnpm -w exec oxlint packages/ui --fix --max-warnings=0",
128
157
  "test": "remix-test",
129
158
  "test:coverage": "remix-test --coverage",
130
159
  "test:watch": "remix-test --watch",
@@ -2,7 +2,7 @@
2
2
 
3
3
  `Accordion` renders a disclosure set with one or more expandable items. Use it for grouped settings, FAQ sections, and dense panels where each item owns a trigger and content region.
4
4
 
5
- ## Usage
5
+ ## Component Usage
6
6
 
7
7
  ```tsx
8
8
  import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from 'remix/ui/accordion'
@@ -82,16 +82,11 @@ export function ControlledAccordion(handle: Handle) {
82
82
  }
83
83
  ```
84
84
 
85
- Listen for bubbling `AccordionChangeEvent` events with `onAccordionChange`.
85
+ Listen for bubbling `AccordionChangeEvent` events with `onAccordionChange` from `remix/ui/accordion/primitives`.
86
86
 
87
87
  ```tsx
88
- import {
89
- Accordion,
90
- AccordionContent,
91
- AccordionItem,
92
- AccordionTrigger,
93
- onAccordionChange,
94
- } from 'remix/ui/accordion'
88
+ import { onAccordionChange } from 'remix/ui/accordion/primitives'
89
+ import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from 'remix/ui/accordion'
95
90
 
96
91
  export function TrackedAccordion() {
97
92
  return (
@@ -124,7 +119,7 @@ Set `collapsible={false}` in single mode when the open item must stay open. The
124
119
  </Accordion>
125
120
  ```
126
121
 
127
- Use `headingLevel` to choose the heading wrapper rendered around each trigger. The default level is `3`.
122
+ Use `headingLevel` to choose the heading element rendered around each trigger. The default level is `3`.
128
123
 
129
124
  ```tsx
130
125
  <Accordion defaultValue="shipping" headingLevel={2}>
@@ -142,16 +137,57 @@ Pass `indicator={null}` to remove the default chevron, or pass a custom node to
142
137
  <AccordionTrigger indicator={<span aria-hidden>+</span>}>Custom indicator</AccordionTrigger>
143
138
  ```
144
139
 
145
- ## `accordion.*`
140
+ ## Primitive Usage
141
+
142
+ Use the lower-level primitives when app code owns the accordion markup and styles:
143
+
144
+ ```tsx
145
+ import * as accordion from 'remix/ui/accordion/primitives'
146
+ import { contentStyle, headingStyle, itemStyle, rootStyle, triggerStyle } from './accordion.styles'
147
+
148
+ export function PrimitiveAccordion() {
149
+ return (
150
+ <accordion.Context defaultValue="shipping">
151
+ <div mix={[rootStyle, accordion.root()]}>
152
+ <accordion.ItemContext value="shipping">
153
+ <div mix={[itemStyle, accordion.item()]}>
154
+ <h3 mix={headingStyle}>
155
+ <button mix={[triggerStyle, accordion.trigger()]} type="button">
156
+ Shipping
157
+ </button>
158
+ </h3>
159
+ <div mix={[contentStyle, accordion.content()]}>
160
+ Delivery windows and carrier defaults.
161
+ </div>
162
+ </div>
163
+ </accordion.ItemContext>
164
+ </div>
165
+ </accordion.Context>
166
+ )
167
+ }
168
+ ```
169
+
170
+ ## `remix/ui/accordion`
146
171
 
147
172
  - `Accordion`: root component. Defaults to single-item mode and supports controlled `value`, uncontrolled `defaultValue`, `onValueChange`, `disabled`, `headingLevel`, `collapsible`, and `type="multiple"`.
148
173
  - `AccordionItem`: registers one accordion item by `value`. Pass `disabled` to prevent that item from opening or receiving keyboard focus.
149
174
  - `AccordionTrigger`: heading-wrapped button for an item. It wires `aria-expanded`, `aria-controls`, keyboard navigation, and the default chevron indicator.
150
175
  - `AccordionContent`: panel for an item. It wires the panel id, `aria-labelledby`, `aria-hidden`, inert state, and open/closed state attributes.
176
+ - `rootStyle`, `itemStyle`, `headingStyle`, `triggerStyle`, `indicatorStyle`, `panelStyle`, and `bodyStyle`: flat style mixins used by the component markup.
177
+ - `AccordionProps`, `AccordionSingleProps`, `AccordionMultipleProps`, `AccordionItemProps`, `AccordionTriggerProps`, and `AccordionContentProps`: public TypeScript props for the composed APIs.
178
+
179
+ ## `remix/ui/accordion/primitives`
180
+
181
+ - `Context`: lower-level provider for custom accordion composition.
182
+ - `ItemContext`: lower-level provider for one item value.
183
+ - `root()`: wires the root element and bubbling change events.
184
+ - `item()`: wires one item wrapper.
185
+ - `trigger()`: wires the item trigger, keyboard navigation, and trigger ARIA attributes.
186
+ - `content()`: wires the item panel id, hidden state, inert state, and open/closed state attributes.
151
187
  - `onAccordionChange(...)`: event mixin for the bubbling `AccordionChangeEvent`.
152
- - `AccordionChangeEvent`: bubbling event class with `value`, `itemValue`, and `accordionType`.
153
- - `AccordionProps`, `AccordionSingleProps`, `AccordionMultipleProps`, `AccordionItemProps`, `AccordionTriggerProps`, and `AccordionContentProps`: public TypeScript props.
154
- - `rootStyle`, `itemStyle`, `triggerStyle`, `indicatorStyle`, `panelStyle`, and `bodyStyle`: flat style mixins used by the component wrappers.
188
+ - `AccordionChangeEvent`: bubbling event with `value`, `itemValue`, and `accordionType`.
189
+ - `AccordionType`, `AccordionValue`, `AccordionSingleValue`, `AccordionMultipleValue`, and `AccordionHeadingLevel`: public TypeScript state and configuration types.
190
+ - `AccordionBaseContextProps`, `AccordionSingleContextProps`, `AccordionMultipleContextProps`, `AccordionContextProps`, `AccordionRootOptions`, `AccordionItemOptions`, `AccordionTriggerOptions`, and `AccordionContentOptions`: primitive prop and option types for custom composition.
155
191
 
156
192
  ## Behavior Notes
157
193