@remix-run/ui 0.3.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (434) hide show
  1. package/README.md +116 -157
  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.js → anchor/index.js} +1 -1
  9. package/dist/anchor/index.js.map +1 -0
  10. package/dist/animation/animate-layout-mixin.js +1 -1
  11. package/dist/animation/animate-layout-mixin.js.map +1 -1
  12. package/dist/animation/animate-mixins.js +2 -2
  13. package/dist/animation/animate-mixins.js.map +1 -1
  14. package/dist/animation/demos/color-interpolation.js +1 -1
  15. package/dist/animation/demos/color-interpolation.js.map +1 -1
  16. package/dist/animation/demos/drag-release.d.ts +1 -1
  17. package/dist/animation/demos/hold-to-confirm.d.ts +3 -3
  18. package/dist/animation/demos/material-ripple.js +1 -3
  19. package/dist/animation/demos/material-ripple.js.map +1 -1
  20. package/dist/animation/demos/reordering.js +9 -6
  21. package/dist/animation/demos/reordering.js.map +1 -1
  22. package/dist/animation/index.js +4 -4
  23. package/dist/animation/spring.js.map +1 -1
  24. package/dist/{components/breadcrumbs/breadcrumbs.js → breadcrumbs/index.js} +19 -19
  25. package/dist/breadcrumbs/index.js.map +1 -0
  26. package/dist/button/index.d.ts +15 -0
  27. package/dist/button/index.js +128 -0
  28. package/dist/button/index.js.map +1 -0
  29. package/dist/checkbox/index.d.ts +14 -0
  30. package/dist/checkbox/index.js +127 -0
  31. package/dist/checkbox/index.js.map +1 -0
  32. package/dist/combobox/index.d.ts +21 -0
  33. package/dist/combobox/index.js +58 -0
  34. package/dist/combobox/index.js.map +1 -0
  35. package/dist/{components/combobox/combobox.d.ts → combobox/primitives.d.ts} +4 -8
  36. package/dist/{components/combobox/combobox.js → combobox/primitives.js} +8 -61
  37. package/dist/combobox/primitives.js.map +1 -0
  38. package/dist/dev/refresh.d.ts +1 -0
  39. package/dist/dev/refresh.js +2 -0
  40. package/dist/dev/refresh.js.map +1 -0
  41. package/dist/index.d.ts +1 -1
  42. package/dist/index.js +14 -14
  43. package/dist/input/index.d.ts +13 -0
  44. package/dist/input/index.js +121 -0
  45. package/dist/input/index.js.map +1 -0
  46. package/dist/jsx-runtime.js +2 -2
  47. package/dist/listbox/flash-attribute.js.map +1 -0
  48. package/dist/{components/listbox/listbox.d.ts → listbox/index.d.ts} +2 -6
  49. package/dist/{components/listbox/listbox.js → listbox/index.js} +4 -82
  50. package/dist/listbox/index.js.map +1 -0
  51. package/dist/menu/hover-aim.js.map +1 -0
  52. package/dist/menu/index.d.ts +42 -0
  53. package/dist/menu/index.js +250 -0
  54. package/dist/menu/index.js.map +1 -0
  55. package/dist/{components/menu/menu.d.ts → menu/primitives.d.ts} +4 -33
  56. package/dist/{components/menu/menu.js → menu/primitives.js} +98 -315
  57. package/dist/menu/primitives.js.map +1 -0
  58. package/dist/{components/popover/popover.d.ts → popover/index.d.ts} +2 -4
  59. package/dist/{components/popover/popover.js → popover/index.js} +5 -48
  60. package/dist/popover/index.js.map +1 -0
  61. package/dist/{interactions/outside-click/outside-click-mixin.js → popover/outside-click.js} +1 -1
  62. package/dist/popover/outside-click.js.map +1 -0
  63. package/dist/popover/scroll-lock.d.ts +1 -0
  64. package/dist/{utils → popover}/scroll-lock.js +0 -18
  65. package/dist/popover/scroll-lock.js.map +1 -0
  66. package/dist/radio/index.d.ts +12 -0
  67. package/dist/radio/index.js +77 -0
  68. package/dist/radio/index.js.map +1 -0
  69. package/dist/runtime/client-entry-boundary.d.ts +14 -0
  70. package/dist/runtime/client-entry-boundary.js +29 -0
  71. package/dist/runtime/client-entry-boundary.js.map +1 -0
  72. package/dist/runtime/component.d.ts +19 -4
  73. package/dist/runtime/component.js +39 -9
  74. package/dist/runtime/component.js.map +1 -1
  75. package/dist/runtime/core/attributes.js +36 -3
  76. package/dist/runtime/core/attributes.js.map +1 -1
  77. package/dist/runtime/core/children.d.ts +2 -0
  78. package/dist/runtime/core/children.js +26 -2
  79. package/dist/runtime/core/children.js.map +1 -1
  80. package/dist/runtime/core/props.js +2 -2
  81. package/dist/runtime/core/vnode.d.ts +3 -3
  82. package/dist/runtime/core/vnode.js +22 -1
  83. package/dist/runtime/core/vnode.js.map +1 -1
  84. package/dist/runtime/create-element.d.ts +2 -2
  85. package/dist/runtime/create-element.js +3 -2
  86. package/dist/runtime/create-element.js.map +1 -1
  87. package/dist/runtime/diff-dom.js +294 -219
  88. package/dist/runtime/diff-dom.js.map +1 -1
  89. package/dist/runtime/diff-props.js +3 -3
  90. package/dist/runtime/dom.d.ts +12 -0
  91. package/dist/runtime/element-function.d.ts +3 -0
  92. package/dist/runtime/element-function.js +2 -0
  93. package/dist/runtime/element-function.js.map +1 -0
  94. package/dist/runtime/form-navigation.d.ts +25 -0
  95. package/dist/runtime/form-navigation.js +132 -0
  96. package/dist/runtime/form-navigation.js.map +1 -0
  97. package/dist/runtime/frame-resolution.d.ts +5 -0
  98. package/dist/runtime/frame-resolution.js +10 -0
  99. package/dist/runtime/frame-resolution.js.map +1 -0
  100. package/dist/runtime/frame.d.ts +58 -15
  101. package/dist/runtime/frame.js +367 -114
  102. package/dist/runtime/frame.js.map +1 -1
  103. package/dist/runtime/jsx.d.ts +1 -1
  104. package/dist/runtime/jsx.js +1 -1
  105. package/dist/runtime/jsx.js.map +1 -1
  106. package/dist/runtime/key.d.ts +1 -0
  107. package/dist/runtime/key.js +2 -0
  108. package/dist/runtime/key.js.map +1 -0
  109. package/dist/runtime/mixins/attrs-mixin.js +2 -2
  110. package/dist/runtime/mixins/link-mixin.js +4 -3
  111. package/dist/runtime/mixins/link-mixin.js.map +1 -1
  112. package/dist/runtime/mixins/mixin.d.ts +15 -10
  113. package/dist/runtime/mixins/mixin.js +4 -4
  114. package/dist/runtime/mixins/mixin.js.map +1 -1
  115. package/dist/runtime/mixins/on-mixin.js +1 -1
  116. package/dist/runtime/mixins/ref-mixin.js +1 -1
  117. package/dist/runtime/navigation.d.ts +4 -1
  118. package/dist/runtime/navigation.js +157 -32
  119. package/dist/runtime/navigation.js.map +1 -1
  120. package/dist/runtime/reconcile.d.ts +11 -10
  121. package/dist/runtime/reconcile.js +557 -423
  122. package/dist/runtime/reconcile.js.map +1 -1
  123. package/dist/runtime/refresh.d.ts +28 -0
  124. package/dist/runtime/refresh.js +31 -0
  125. package/dist/runtime/refresh.js.map +1 -0
  126. package/dist/runtime/render.js +1 -1
  127. package/dist/runtime/render.js.map +1 -1
  128. package/dist/runtime/run.d.ts +3 -1
  129. package/dist/runtime/run.js +15 -7
  130. package/dist/runtime/run.js.map +1 -1
  131. package/dist/runtime/scheduler.js +8 -16
  132. package/dist/runtime/scheduler.js.map +1 -1
  133. package/dist/runtime/to-vnode.d.ts +2 -2
  134. package/dist/runtime/to-vnode.js +68 -20
  135. package/dist/runtime/to-vnode.js.map +1 -1
  136. package/dist/runtime/vdom.d.ts +4 -2
  137. package/dist/runtime/vdom.js +89 -41
  138. package/dist/runtime/vdom.js.map +1 -1
  139. package/dist/runtime/vnode.d.ts +138 -67
  140. package/dist/runtime/vnode.js +17 -12
  141. package/dist/runtime/vnode.js.map +1 -1
  142. package/dist/select/index.d.ts +19 -0
  143. package/dist/select/index.js +95 -0
  144. package/dist/select/index.js.map +1 -0
  145. package/dist/select/keydown.js.map +1 -0
  146. package/dist/{components/select/select.d.ts → select/primitives.d.ts} +5 -7
  147. package/dist/{components/select/select.js → select/primitives.js} +11 -63
  148. package/dist/select/primitives.js.map +1 -0
  149. package/dist/server/stream.js +22 -29
  150. package/dist/server/stream.js.map +1 -1
  151. package/dist/shared/focus-styles.d.ts +1 -0
  152. package/dist/shared/focus-styles.js +2 -0
  153. package/dist/shared/focus-styles.js.map +1 -0
  154. package/dist/shared/icons.d.ts +9 -0
  155. package/dist/shared/icons.js +42 -0
  156. package/dist/shared/icons.js.map +1 -0
  157. package/dist/shared/listbox-popover-styles.d.ts +6 -0
  158. package/dist/shared/listbox-popover-styles.js +137 -0
  159. package/dist/shared/listbox-popover-styles.js.map +1 -0
  160. package/dist/shared/style-values.d.ts +78 -0
  161. package/dist/shared/style-values.js +88 -0
  162. package/dist/shared/style-values.js.map +1 -0
  163. package/dist/{interactions/typeahead/typeahead-mixin.js → shared/typeahead.js} +1 -1
  164. package/dist/shared/typeahead.js.map +1 -0
  165. package/dist/shared/wait-for-css-transition.js.map +1 -0
  166. package/dist/shared/wait.js.map +1 -0
  167. package/dist/style/css-mixin.js +3 -3
  168. package/dist/style/index.js +2 -2
  169. package/dist/style/style.js +25 -6
  170. package/dist/style/style.js.map +1 -1
  171. package/dist/style/stylesheet.d.ts +0 -1
  172. package/dist/style/stylesheet.js +13 -54
  173. package/dist/style/stylesheet.js.map +1 -1
  174. package/dist/tabs/index.d.ts +32 -0
  175. package/dist/tabs/index.js +157 -0
  176. package/dist/tabs/index.js.map +1 -0
  177. package/dist/tabs/primitives.d.ts +57 -0
  178. package/dist/tabs/primitives.js +238 -0
  179. package/dist/tabs/primitives.js.map +1 -0
  180. package/dist/test.js +1 -1
  181. package/dist/toggle/index.d.ts +9 -0
  182. package/dist/toggle/index.js +108 -0
  183. package/dist/toggle/index.js.map +1 -0
  184. package/dist/toggle/primitives.d.ts +29 -0
  185. package/dist/toggle/primitives.js +127 -0
  186. package/dist/toggle/primitives.js.map +1 -0
  187. package/package.json +81 -49
  188. package/src/{components/accordion → accordion}/README.md +50 -14
  189. package/src/accordion/index.tsx +285 -0
  190. package/src/accordion/primitives.tsx +512 -0
  191. package/src/{components/anchor → anchor}/README.md +37 -2
  192. package/src/animation/animate-mixins.ts +3 -3
  193. package/src/animation/demos/color-interpolation.tsx +1 -1
  194. package/src/animation/demos/reordering.tsx +9 -6
  195. package/src/{components/breadcrumbs → breadcrumbs}/README.md +4 -4
  196. package/src/{components/breadcrumbs/breadcrumbs.tsx → breadcrumbs/index.tsx} +18 -18
  197. package/src/button/README.md +44 -0
  198. package/src/button/index.ts +168 -0
  199. package/src/checkbox/README.md +59 -0
  200. package/src/checkbox/index.ts +164 -0
  201. package/src/{components/combobox → combobox}/README.md +58 -9
  202. package/src/combobox/index.tsx +112 -0
  203. package/src/{components/combobox/combobox.tsx → combobox/primitives.tsx} +5 -91
  204. package/src/dev/refresh.ts +1 -0
  205. package/src/index.ts +1 -1
  206. package/src/input/README.md +52 -0
  207. package/src/input/index.ts +147 -0
  208. package/src/{components/listbox → listbox}/README.md +9 -41
  209. package/src/{components/listbox/listbox.ts → listbox/index.ts} +2 -87
  210. package/src/{components/menu → menu}/README.md +55 -14
  211. package/src/menu/index.tsx +354 -0
  212. package/src/{components/menu/menu.tsx → menu/primitives.tsx} +99 -413
  213. package/src/{components/popover → popover}/README.md +20 -39
  214. package/src/{components/popover/popover.ts → popover/index.ts} +3 -57
  215. package/src/{utils → popover}/scroll-lock.ts +0 -28
  216. package/src/radio/README.md +53 -0
  217. package/src/radio/index.ts +101 -0
  218. package/src/runtime/client-entry-boundary.ts +54 -0
  219. package/src/runtime/component.ts +65 -16
  220. package/src/runtime/core/attributes.ts +35 -1
  221. package/src/runtime/core/children.ts +24 -2
  222. package/src/runtime/core/vnode.ts +25 -4
  223. package/src/runtime/create-element.ts +6 -5
  224. package/src/runtime/demos/readme.demo.tsx +20 -18
  225. package/src/runtime/diff-dom.ts +358 -243
  226. package/src/runtime/dom.ts +331 -214
  227. package/src/runtime/element-function.ts +1 -0
  228. package/src/runtime/event-listeners.ts +1 -1
  229. package/src/runtime/form-navigation.ts +184 -0
  230. package/src/runtime/frame-resolution.ts +13 -0
  231. package/src/runtime/frame.ts +482 -124
  232. package/src/runtime/jsx.ts +3 -5
  233. package/src/runtime/key.ts +1 -0
  234. package/src/runtime/mixins/link-mixin.ts +1 -0
  235. package/src/runtime/mixins/mixin.ts +21 -18
  236. package/src/runtime/navigation.ts +204 -30
  237. package/src/runtime/reconcile.ts +769 -760
  238. package/src/runtime/refresh.ts +46 -0
  239. package/src/runtime/run.ts +12 -2
  240. package/src/runtime/scheduler.ts +9 -29
  241. package/src/runtime/to-vnode.ts +85 -23
  242. package/src/runtime/vdom.ts +91 -69
  243. package/src/runtime/vnode.ts +192 -88
  244. package/src/{components/select → select}/README.md +29 -19
  245. package/src/select/index.tsx +159 -0
  246. package/src/{components/select/select.tsx → select/primitives.tsx} +10 -98
  247. package/src/server/stream.ts +25 -31
  248. package/src/shared/focus-styles.ts +2 -0
  249. package/src/shared/icons.tsx +62 -0
  250. package/src/shared/listbox-popover-styles.ts +146 -0
  251. package/src/shared/style-values.ts +165 -0
  252. package/src/style/style.ts +25 -6
  253. package/src/style/stylesheet.ts +32 -57
  254. package/src/tabs/README.md +141 -0
  255. package/src/tabs/index.tsx +245 -0
  256. package/src/tabs/primitives.ts +365 -0
  257. package/src/test/README.md +151 -60
  258. package/src/toggle/README.md +56 -0
  259. package/src/toggle/index.tsx +136 -0
  260. package/src/toggle/primitives.ts +192 -0
  261. package/dist/animation/demos/animation.demo.d.ts +0 -5
  262. package/dist/animation/demos/animation.demo.js +0 -92
  263. package/dist/animation/demos/animation.demo.js.map +0 -1
  264. package/dist/animation/demos/spring.demo.d.ts +0 -6
  265. package/dist/animation/demos/spring.demo.js +0 -304
  266. package/dist/animation/demos/spring.demo.js.map +0 -1
  267. package/dist/components/accordion/accordion.d.ts +0 -92
  268. package/dist/components/accordion/accordion.js +0 -335
  269. package/dist/components/accordion/accordion.js.map +0 -1
  270. package/dist/components/accordion/demos/card.demo.d.ts +0 -7
  271. package/dist/components/accordion/demos/card.demo.js +0 -59
  272. package/dist/components/accordion/demos/card.demo.js.map +0 -1
  273. package/dist/components/accordion/demos/multiple.demo.d.ts +0 -7
  274. package/dist/components/accordion/demos/multiple.demo.js +0 -20
  275. package/dist/components/accordion/demos/multiple.demo.js.map +0 -1
  276. package/dist/components/accordion/demos/overview.demo.d.ts +0 -7
  277. package/dist/components/accordion/demos/overview.demo.js +0 -20
  278. package/dist/components/accordion/demos/overview.demo.js.map +0 -1
  279. package/dist/components/anchor/anchor.js.map +0 -1
  280. package/dist/components/breadcrumbs/basic.demo.d.ts +0 -6
  281. package/dist/components/breadcrumbs/basic.demo.js +0 -15
  282. package/dist/components/breadcrumbs/basic.demo.js.map +0 -1
  283. package/dist/components/breadcrumbs/breadcrumbs.js.map +0 -1
  284. package/dist/components/breadcrumbs/separator.demo.d.ts +0 -6
  285. package/dist/components/breadcrumbs/separator.demo.js +0 -15
  286. package/dist/components/breadcrumbs/separator.demo.js.map +0 -1
  287. package/dist/components/button/button.d.ts +0 -105
  288. package/dist/components/button/button.js +0 -207
  289. package/dist/components/button/button.js.map +0 -1
  290. package/dist/components/button/demos/aliases.demo.d.ts +0 -7
  291. package/dist/components/button/demos/aliases.demo.js +0 -19
  292. package/dist/components/button/demos/aliases.demo.js.map +0 -1
  293. package/dist/components/button/demos/basic.demo.d.ts +0 -7
  294. package/dist/components/button/demos/basic.demo.js +0 -20
  295. package/dist/components/button/demos/basic.demo.js.map +0 -1
  296. package/dist/components/button/demos/states.demo.d.ts +0 -7
  297. package/dist/components/button/demos/states.demo.js +0 -30
  298. package/dist/components/button/demos/states.demo.js.map +0 -1
  299. package/dist/components/combobox/combobox.js.map +0 -1
  300. package/dist/components/combobox/overview.demo.d.ts +0 -7
  301. package/dist/components/combobox/overview.demo.js +0 -154
  302. package/dist/components/combobox/overview.demo.js.map +0 -1
  303. package/dist/components/glyph/glyph.d.ts +0 -14
  304. package/dist/components/glyph/glyph.js +0 -65
  305. package/dist/components/glyph/glyph.js.map +0 -1
  306. package/dist/components/listbox/listbox.js.map +0 -1
  307. package/dist/components/listbox/overview.demo.d.ts +0 -7
  308. package/dist/components/listbox/overview.demo.js +0 -65
  309. package/dist/components/listbox/overview.demo.js.map +0 -1
  310. package/dist/components/menu/demos/bubbling.demo.d.ts +0 -6
  311. package/dist/components/menu/demos/bubbling.demo.js +0 -16
  312. package/dist/components/menu/demos/bubbling.demo.js.map +0 -1
  313. package/dist/components/menu/demos/context-trigger.demo.d.ts +0 -7
  314. package/dist/components/menu/demos/context-trigger.demo.js +0 -87
  315. package/dist/components/menu/demos/context-trigger.demo.js.map +0 -1
  316. package/dist/components/menu/demos/overview.demo.d.ts +0 -7
  317. package/dist/components/menu/demos/overview.demo.js +0 -33
  318. package/dist/components/menu/demos/overview.demo.js.map +0 -1
  319. package/dist/components/menu/hover-aim.js.map +0 -1
  320. package/dist/components/menu/menu.js.map +0 -1
  321. package/dist/components/popover/overview.demo.d.ts +0 -7
  322. package/dist/components/popover/overview.demo.js +0 -65
  323. package/dist/components/popover/overview.demo.js.map +0 -1
  324. package/dist/components/popover/popover.js.map +0 -1
  325. package/dist/components/select/deconstructed.demo.d.ts +0 -7
  326. package/dist/components/select/deconstructed.demo.js +0 -54
  327. package/dist/components/select/deconstructed.demo.js.map +0 -1
  328. package/dist/components/select/overview.demo.d.ts +0 -6
  329. package/dist/components/select/overview.demo.js +0 -28
  330. package/dist/components/select/overview.demo.js.map +0 -1
  331. package/dist/components/select/select.js.map +0 -1
  332. package/dist/components/separator/separator.d.ts +0 -2
  333. package/dist/components/separator/separator.js +0 -15
  334. package/dist/components/separator/separator.js.map +0 -1
  335. package/dist/components/tabs/tabs.d.ts +0 -78
  336. package/dist/components/tabs/tabs.js +0 -339
  337. package/dist/components/tabs/tabs.js.map +0 -1
  338. package/dist/interactions/keydown/keydown.js.map +0 -1
  339. package/dist/interactions/outside-click/outside-click-mixin.js.map +0 -1
  340. package/dist/interactions/typeahead/typeahead-mixin.js.map +0 -1
  341. package/dist/runtime/demos/basic.demo.d.ts +0 -6
  342. package/dist/runtime/demos/basic.demo.js +0 -16
  343. package/dist/runtime/demos/basic.demo.js.map +0 -1
  344. package/dist/runtime/demos/controlled-uncontrolled-values.demo.d.ts +0 -6
  345. package/dist/runtime/demos/controlled-uncontrolled-values.demo.js +0 -77
  346. package/dist/runtime/demos/controlled-uncontrolled-values.demo.js.map +0 -1
  347. package/dist/runtime/demos/keyed-list.demo.d.ts +0 -6
  348. package/dist/runtime/demos/keyed-list.demo.js +0 -62
  349. package/dist/runtime/demos/keyed-list.demo.js.map +0 -1
  350. package/dist/runtime/demos/readme.demo.d.ts +0 -5
  351. package/dist/runtime/demos/readme.demo.js +0 -396
  352. package/dist/runtime/demos/readme.demo.js.map +0 -1
  353. package/dist/theme/contract.d.ts +0 -61
  354. package/dist/theme/contract.js +0 -131
  355. package/dist/theme/contract.js.map +0 -1
  356. package/dist/theme/glyph-contract.d.ts +0 -11
  357. package/dist/theme/glyph-contract.js +0 -34
  358. package/dist/theme/glyph-contract.js.map +0 -1
  359. package/dist/theme/presets/rmx-01/glyphs.d.ts +0 -2
  360. package/dist/theme/presets/rmx-01/glyphs.js +0 -252
  361. package/dist/theme/presets/rmx-01/glyphs.js.map +0 -1
  362. package/dist/theme/presets/rmx-01/index.d.ts +0 -4
  363. package/dist/theme/presets/rmx-01/index.js +0 -119
  364. package/dist/theme/presets/rmx-01/index.js.map +0 -1
  365. package/dist/theme/runtime.d.ts +0 -2
  366. package/dist/theme/runtime.js +0 -84
  367. package/dist/theme/runtime.js.map +0 -1
  368. package/dist/theme/theme.d.ts +0 -6
  369. package/dist/theme/theme.js +0 -5
  370. package/dist/theme/theme.js.map +0 -1
  371. package/dist/utils/flash-attribute.js.map +0 -1
  372. package/dist/utils/scroll-lock.d.ts +0 -3
  373. package/dist/utils/scroll-lock.js.map +0 -1
  374. package/dist/utils/wait-for-css-transition.js.map +0 -1
  375. package/dist/utils/wait.js.map +0 -1
  376. package/src/animation/demos/animation.demo.tsx +0 -194
  377. package/src/animation/demos/spring.demo.tsx +0 -385
  378. package/src/components/accordion/accordion.tsx +0 -565
  379. package/src/components/accordion/demos/card.demo.tsx +0 -114
  380. package/src/components/accordion/demos/multiple.demo.tsx +0 -57
  381. package/src/components/accordion/demos/overview.demo.tsx +0 -57
  382. package/src/components/breadcrumbs/basic.demo.tsx +0 -18
  383. package/src/components/breadcrumbs/separator.demo.tsx +0 -19
  384. package/src/components/button/README.md +0 -44
  385. package/src/components/button/button.tsx +0 -286
  386. package/src/components/button/demos/aliases.demo.tsx +0 -28
  387. package/src/components/button/demos/basic.demo.tsx +0 -31
  388. package/src/components/button/demos/states.demo.tsx +0 -53
  389. package/src/components/combobox/overview.demo.tsx +0 -200
  390. package/src/components/glyph/README.md +0 -72
  391. package/src/components/glyph/glyph.tsx +0 -110
  392. package/src/components/listbox/overview.demo.tsx +0 -102
  393. package/src/components/menu/demos/bubbling.demo.tsx +0 -35
  394. package/src/components/menu/demos/context-trigger.demo.tsx +0 -133
  395. package/src/components/menu/demos/overview.demo.tsx +0 -77
  396. package/src/components/popover/overview.demo.tsx +0 -144
  397. package/src/components/select/deconstructed.demo.tsx +0 -96
  398. package/src/components/select/overview.demo.tsx +0 -52
  399. package/src/components/separator/separator.ts +0 -19
  400. package/src/components/tabs/README.md +0 -105
  401. package/src/components/tabs/tabs.tsx +0 -504
  402. package/src/runtime/demos/basic.demo.tsx +0 -21
  403. package/src/runtime/demos/controlled-uncontrolled-values.demo.tsx +0 -177
  404. package/src/runtime/demos/keyed-list.demo.tsx +0 -94
  405. package/src/theme/README.md +0 -103
  406. package/src/theme/contract.ts +0 -215
  407. package/src/theme/glyph-contract.ts +0 -59
  408. package/src/theme/presets/rmx-01/glyphs.tsx +0 -308
  409. package/src/theme/presets/rmx-01/index.ts +0 -123
  410. package/src/theme/runtime.ts +0 -119
  411. package/src/theme/theme.ts +0 -15
  412. package/src/utils/scroll-lock/README.md +0 -33
  413. /package/dist/{components/anchor/anchor.d.ts → anchor/index.d.ts} +0 -0
  414. /package/dist/{components/breadcrumbs/breadcrumbs.d.ts → breadcrumbs/index.d.ts} +0 -0
  415. /package/dist/{utils → listbox}/flash-attribute.d.ts +0 -0
  416. /package/dist/{utils → listbox}/flash-attribute.js +0 -0
  417. /package/dist/{components/menu → menu}/hover-aim.d.ts +0 -0
  418. /package/dist/{components/menu → menu}/hover-aim.js +0 -0
  419. /package/dist/{interactions/outside-click/outside-click-mixin.d.ts → popover/outside-click.d.ts} +0 -0
  420. /package/dist/{interactions/keydown → select}/keydown.d.ts +0 -0
  421. /package/dist/{interactions/keydown → select}/keydown.js +0 -0
  422. /package/dist/{interactions/typeahead/typeahead-mixin.d.ts → shared/typeahead.d.ts} +0 -0
  423. /package/dist/{utils → shared}/wait-for-css-transition.d.ts +0 -0
  424. /package/dist/{utils → shared}/wait-for-css-transition.js +0 -0
  425. /package/dist/{utils → shared}/wait.d.ts +0 -0
  426. /package/dist/{utils → shared}/wait.js +0 -0
  427. /package/src/{components/anchor/anchor.ts → anchor/index.ts} +0 -0
  428. /package/src/{utils → listbox}/flash-attribute.ts +0 -0
  429. /package/src/{components/menu → menu}/hover-aim.ts +0 -0
  430. /package/src/{interactions/outside-click/outside-click-mixin.ts → popover/outside-click.ts} +0 -0
  431. /package/src/{interactions/keydown → select}/keydown.ts +0 -0
  432. /package/src/{interactions/typeahead/typeahead-mixin.ts → shared/typeahead.ts} +0 -0
  433. /package/src/{utils → shared}/wait-for-css-transition.ts +0 -0
  434. /package/src/{utils → shared}/wait.ts +0 -0
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@remix-run/ui",
3
- "version": "0.3.0",
4
- "description": "UI tokens, mixins, and glyphs for Remix components",
3
+ "version": "0.5.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,48 @@
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"
69
+ },
70
+ "./dev/refresh": {
71
+ "types": "./dist/dev/refresh.d.ts",
72
+ "default": "./dist/dev/refresh.js"
51
73
  },
52
74
  "./jsx-dev-runtime": {
53
75
  "types": "./dist/jsx-runtime.d.ts",
@@ -57,55 +79,66 @@
57
79
  "types": "./dist/jsx-runtime.d.ts",
58
80
  "default": "./dist/jsx-runtime.js"
59
81
  },
60
- "./glyph": {
61
- "types": "./dist/components/glyph/glyph.d.ts",
62
- "default": "./dist/components/glyph/glyph.js"
63
- },
64
82
  "./listbox": {
65
- "types": "./dist/components/listbox/listbox.d.ts",
66
- "default": "./dist/components/listbox/listbox.js"
83
+ "types": "./dist/listbox/index.d.ts",
84
+ "default": "./dist/listbox/index.js"
67
85
  },
68
86
  "./menu": {
69
- "types": "./dist/components/menu/menu.d.ts",
70
- "default": "./dist/components/menu/menu.js"
87
+ "types": "./dist/menu/index.d.ts",
88
+ "default": "./dist/menu/index.js"
89
+ },
90
+ "./menu/primitives": {
91
+ "types": "./dist/menu/primitives.d.ts",
92
+ "default": "./dist/menu/primitives.js"
71
93
  },
72
94
  "./popover": {
73
- "types": "./dist/components/popover/popover.d.ts",
74
- "default": "./dist/components/popover/popover.js"
95
+ "types": "./dist/popover/index.d.ts",
96
+ "default": "./dist/popover/index.js"
97
+ },
98
+ "./radio": {
99
+ "types": "./dist/radio/index.d.ts",
100
+ "default": "./dist/radio/index.js"
75
101
  },
76
102
  "./select": {
77
- "types": "./dist/components/select/select.d.ts",
78
- "default": "./dist/components/select/select.js"
103
+ "types": "./dist/select/index.d.ts",
104
+ "default": "./dist/select/index.js"
79
105
  },
80
- "./separator": {
81
- "types": "./dist/components/separator/separator.d.ts",
82
- "default": "./dist/components/separator/separator.js"
106
+ "./select/primitives": {
107
+ "types": "./dist/select/primitives.d.ts",
108
+ "default": "./dist/select/primitives.js"
83
109
  },
84
110
  "./server": {
85
111
  "types": "./dist/server/stream.d.ts",
86
112
  "default": "./dist/server/stream.js"
87
113
  },
114
+ "./tabs": {
115
+ "types": "./dist/tabs/index.d.ts",
116
+ "default": "./dist/tabs/index.js"
117
+ },
118
+ "./tabs/primitives": {
119
+ "types": "./dist/tabs/primitives.d.ts",
120
+ "default": "./dist/tabs/primitives.js"
121
+ },
88
122
  "./test": {
89
123
  "types": "./dist/test.d.ts",
90
124
  "default": "./dist/test.js"
91
125
  },
92
- "./theme": {
93
- "types": "./dist/theme/theme.d.ts",
94
- "default": "./dist/theme/theme.js"
126
+ "./toggle": {
127
+ "types": "./dist/toggle/index.d.ts",
128
+ "default": "./dist/toggle/index.js"
95
129
  },
96
- "./scroll-lock": {
97
- "types": "./dist/utils/scroll-lock.d.ts",
98
- "default": "./dist/utils/scroll-lock.js"
130
+ "./toggle/primitives": {
131
+ "types": "./dist/toggle/primitives.d.ts",
132
+ "default": "./dist/toggle/primitives.js"
99
133
  },
100
134
  "./package.json": "./package.json"
101
135
  },
102
136
  "devDependencies": {
103
137
  "@types/node": "^24.6.0",
104
- "@typescript/native-preview": "7.0.0-dev.20251125.1",
105
138
  "playwright": "^1.60.0",
106
- "typescript": "^5.9.3",
107
- "@remix-run/assert": "0.2.1",
108
- "@remix-run/test": "0.4.2"
139
+ "typescript": "^7.0.2",
140
+ "@remix-run/assert": "0.3.0",
141
+ "@remix-run/test": "0.6.0"
109
142
  },
110
143
  "dependencies": {
111
144
  "@types/dom-navigation": "^1.0.7"
@@ -113,21 +146,20 @@
113
146
  "keywords": [
114
147
  "remix",
115
148
  "ui",
116
- "theming",
117
- "design-tokens",
118
- "css-variables",
149
+ "headless",
150
+ "components",
119
151
  "mixins",
120
- "glyphs",
121
- "component-styling"
152
+ "runtime",
153
+ "primitives"
122
154
  ],
123
155
  "scripts": {
124
156
  "build": "tsc -p tsconfig.build.json",
125
157
  "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",
128
- "test": "remix-test",
129
- "test:coverage": "remix-test --coverage",
130
- "test:watch": "remix-test --watch",
158
+ "lint": "pnpm -w exec oxlint packages/ui --max-warnings=0",
159
+ "lint:fix": "pnpm -w exec oxlint packages/ui --fix --max-warnings=0",
160
+ "test": "remix test",
161
+ "test:coverage": "remix test --coverage",
162
+ "test:watch": "remix test --watch",
131
163
  "typecheck": "tsc --noEmit"
132
164
  }
133
165
  }
@@ -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
 
@@ -0,0 +1,285 @@
1
+ import {
2
+ css,
3
+ createElement,
4
+ type CSSMixinDescriptor,
5
+ type Handle,
6
+ type Props,
7
+ type RemixNode,
8
+ } from '@remix-run/ui'
9
+
10
+ import { spring } from '@remix-run/ui/animation'
11
+ import * as accordion from '@remix-run/ui/accordion/primitives'
12
+ import { ChevronRightIcon } from '../shared/icons.tsx'
13
+ import { componentStyleValues as styles } from '../shared/style-values.ts'
14
+
15
+ type AccordionBaseProps = Omit<Props<'div'>, 'children'> & {
16
+ children?: RemixNode
17
+ disabled?: boolean
18
+ headingLevel?: accordion.AccordionHeadingLevel
19
+ }
20
+
21
+ export type AccordionSingleProps = AccordionBaseProps & {
22
+ type?: 'single'
23
+ value?: string | null
24
+ defaultValue?: string | null
25
+ onValueChange?: (value: string | null) => void
26
+ collapsible?: boolean
27
+ }
28
+
29
+ export type AccordionMultipleProps = AccordionBaseProps & {
30
+ type: 'multiple'
31
+ value?: string[]
32
+ defaultValue?: string[]
33
+ onValueChange?: (value: string[]) => void
34
+ }
35
+
36
+ export type AccordionProps = AccordionSingleProps | AccordionMultipleProps
37
+
38
+ export type AccordionItemProps = Omit<Props<'div'>, 'children'> & {
39
+ children?: RemixNode
40
+ disabled?: boolean
41
+ value: string
42
+ }
43
+
44
+ export type AccordionTriggerProps = Omit<Props<'button'>, 'children' | 'type'> & {
45
+ children?: RemixNode
46
+ indicator?: RemixNode | null
47
+ type?: 'button' | 'submit' | 'reset'
48
+ }
49
+
50
+ export type AccordionContentProps = Omit<Props<'div'>, 'children'> & {
51
+ children?: RemixNode
52
+ }
53
+
54
+ const accordionPanelClipCss = css({
55
+ minHeight: 0,
56
+ overflow: 'hidden',
57
+ })
58
+
59
+ const accordionTransition = spring()
60
+
61
+ const accordionRootCss: CSSMixinDescriptor = css({
62
+ display: 'flex',
63
+ flexDirection: 'column',
64
+ minWidth: 0,
65
+ })
66
+
67
+ const accordionItemCss: CSSMixinDescriptor = css({
68
+ minWidth: 0,
69
+ })
70
+
71
+ const accordionHeadingCss: CSSMixinDescriptor = css({
72
+ margin: 0,
73
+ minWidth: 0,
74
+ })
75
+
76
+ const accordionTriggerCss: CSSMixinDescriptor = css({
77
+ all: 'unset',
78
+ boxSizing: 'border-box',
79
+ cursor: 'pointer',
80
+ display: 'grid',
81
+ gridTemplateColumns: 'minmax(0, 1fr) auto',
82
+ alignItems: 'center',
83
+ gap: styles.space.md,
84
+ width: '100%',
85
+ minHeight: '28px',
86
+ padding: `${styles.space.xs} 0`,
87
+ color: styles.colors.text.primary,
88
+ fontFamily: styles.fontFamily.sans,
89
+ fontSize: styles.fontSize.sm,
90
+ lineHeight: styles.lineHeight.normal,
91
+ fontWeight: styles.fontWeight.medium,
92
+ textAlign: 'left',
93
+ '&:hover:not(:disabled)': {
94
+ backgroundColor: styles.surface.lvl1,
95
+ },
96
+ '&:hover:not(:disabled) > span:first-child': {
97
+ textDecorationLine: 'underline',
98
+ },
99
+ '&:focus-visible': {
100
+ outline: `2px solid ${styles.colors.focus.ring}`,
101
+ outlineOffset: '2px',
102
+ },
103
+ '&:disabled': {
104
+ cursor: 'default',
105
+ opacity: 0.55,
106
+ },
107
+ '& > span:first-child': {
108
+ minWidth: 0,
109
+ },
110
+ })
111
+
112
+ const accordionIndicatorCss: CSSMixinDescriptor = css({
113
+ display: 'inline-flex',
114
+ alignItems: 'center',
115
+ justifyContent: 'center',
116
+ width: styles.fontSize.sm,
117
+ height: styles.fontSize.sm,
118
+ color: styles.colors.text.muted,
119
+ transition: `transform ${accordionTransition}`,
120
+ '& > svg': {
121
+ display: 'block',
122
+ width: '100%',
123
+ height: '100%',
124
+ },
125
+ '&[data-state="open"]': {
126
+ transform: 'rotate(90deg)',
127
+ },
128
+ })
129
+
130
+ const accordionPanelCss: CSSMixinDescriptor = css({
131
+ display: 'grid',
132
+ gridTemplateRows: '0fr',
133
+ transition: `grid-template-rows ${accordionTransition}`,
134
+ '&[data-state="open"]': {
135
+ gridTemplateRows: '1fr',
136
+ },
137
+ '&[data-state="closed"]': {
138
+ pointerEvents: 'none',
139
+ },
140
+ '@media (prefers-reduced-motion: reduce)': {
141
+ transition: 'none',
142
+ },
143
+ })
144
+
145
+ const accordionBodyCss: CSSMixinDescriptor = css({
146
+ display: 'flow-root',
147
+ minHeight: 0,
148
+ paddingBottom: styles.space.md,
149
+ color: styles.colors.text.secondary,
150
+ fontSize: styles.fontSize.sm,
151
+ lineHeight: styles.lineHeight.relaxed,
152
+ '& > :first-child': {
153
+ marginTop: 0,
154
+ },
155
+ '& > :last-child': {
156
+ marginBottom: 0,
157
+ },
158
+ })
159
+
160
+ export const rootStyle = accordionRootCss
161
+ export const itemStyle = accordionItemCss
162
+ export const headingStyle = accordionHeadingCss
163
+ export const triggerStyle = accordionTriggerCss
164
+ export const indicatorStyle = accordionIndicatorCss
165
+ export const panelStyle = accordionPanelCss
166
+ export const bodyStyle = accordionBodyCss
167
+
168
+ export function Accordion(handle: Handle<AccordionProps>): () => RemixNode {
169
+ return () => {
170
+ if (handle.props.type === 'multiple') {
171
+ let {
172
+ children,
173
+ defaultValue,
174
+ disabled,
175
+ headingLevel,
176
+ mix,
177
+ onValueChange,
178
+ type,
179
+ value,
180
+ ...divProps
181
+ } = handle.props
182
+
183
+ return (
184
+ <accordion.Context
185
+ defaultValue={defaultValue}
186
+ disabled={disabled}
187
+ headingLevel={headingLevel}
188
+ onValueChange={onValueChange}
189
+ type={type}
190
+ value={value}
191
+ >
192
+ <div {...divProps} mix={[rootStyle, accordion.root(), mix]}>
193
+ {children}
194
+ </div>
195
+ </accordion.Context>
196
+ )
197
+ }
198
+
199
+ let {
200
+ children,
201
+ collapsible,
202
+ defaultValue,
203
+ disabled,
204
+ headingLevel,
205
+ mix,
206
+ onValueChange,
207
+ type,
208
+ value,
209
+ ...divProps
210
+ } = handle.props
211
+
212
+ return (
213
+ <accordion.Context
214
+ collapsible={collapsible}
215
+ defaultValue={defaultValue}
216
+ disabled={disabled}
217
+ headingLevel={headingLevel}
218
+ onValueChange={onValueChange}
219
+ type={type}
220
+ value={value}
221
+ >
222
+ <div {...divProps} mix={[rootStyle, accordion.root(), mix]}>
223
+ {children}
224
+ </div>
225
+ </accordion.Context>
226
+ )
227
+ }
228
+ }
229
+
230
+ export function AccordionItem(handle: Handle<AccordionItemProps>): () => RemixNode {
231
+ return () => {
232
+ let { children, disabled, mix, value, ...divProps } = handle.props
233
+
234
+ return (
235
+ <accordion.ItemContext disabled={disabled} value={value}>
236
+ <div {...divProps} mix={[itemStyle, accordion.item(), mix]}>
237
+ {children}
238
+ </div>
239
+ </accordion.ItemContext>
240
+ )
241
+ }
242
+ }
243
+
244
+ export function AccordionTrigger(handle: Handle<AccordionTriggerProps>): () => RemixNode {
245
+ return () => {
246
+ let item = handle.context.get(accordion.ItemContext)
247
+ let headingTag = `h${item.headingLevel}` as keyof JSX.IntrinsicElements
248
+ let { children, disabled, indicator, mix, type, ...buttonProps } = handle.props
249
+
250
+ let button = (
251
+ <button
252
+ {...buttonProps}
253
+ mix={[triggerStyle, accordion.trigger({ disabled }), mix]}
254
+ type={type ?? 'button'}
255
+ >
256
+ <span>{children}</span>
257
+ {indicator === null ? null : (
258
+ <span
259
+ data-rmx-accordion-indicator=""
260
+ data-state={item.open ? 'open' : 'closed'}
261
+ mix={indicatorStyle}
262
+ >
263
+ {indicator ?? <ChevronRightIcon />}
264
+ </span>
265
+ )}
266
+ </button>
267
+ )
268
+
269
+ return createElement(headingTag, { mix: headingStyle }, button)
270
+ }
271
+ }
272
+
273
+ export function AccordionContent(handle: Handle<AccordionContentProps>): () => RemixNode {
274
+ return () => {
275
+ let { children, mix, ...panelProps } = handle.props
276
+
277
+ return (
278
+ <div {...panelProps} mix={[panelStyle, accordion.content(), mix]}>
279
+ <div mix={accordionPanelClipCss}>
280
+ <div mix={bodyStyle}>{children}</div>
281
+ </div>
282
+ </div>
283
+ )
284
+ }
285
+ }