@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
@@ -1,18 +1,15 @@
1
1
  import {
2
2
  attrs,
3
3
  createMixin,
4
- css,
5
4
  on,
6
- type CSSMixinDescriptor,
7
5
  type ElementProps,
8
6
  type Handle,
9
7
  type MixinFactory,
10
8
  type RemixNode,
11
9
  } from '@remix-run/ui'
12
- import { anchor as positionAnchor, type AnchorOptions } from '../anchor/anchor.ts'
13
- import { onOutsideClick } from '../../interactions/outside-click/outside-click-mixin.ts'
14
- import { theme } from '../../theme/theme.ts'
15
- import { lockScroll } from '../../utils/scroll-lock.ts'
10
+ import { anchor as positionAnchor, type AnchorOptions, type AnchorTarget } from '../anchor/index.ts'
11
+ import { onOutsideClick } from './outside-click.ts'
12
+ import { lockScroll } from './scroll-lock.ts'
16
13
 
17
14
  export interface PopoverContext {
18
15
  hideFocusTarget: HTMLElement | null
@@ -26,57 +23,10 @@ export interface PopoverProps {
26
23
  }
27
24
 
28
25
  interface AnchorRef {
29
- node: HTMLElement
26
+ target: AnchorTarget
30
27
  options: AnchorOptions
31
28
  }
32
29
 
33
- const popupViewportClampMaxHeight = '50dvh'
34
-
35
- const popoverSurfaceTransitionCss: CSSMixinDescriptor = css({
36
- opacity: 0,
37
- '&:popover-open': {
38
- opacity: 1,
39
- },
40
- '&:not(:popover-open)': {
41
- pointerEvents: 'none',
42
- transition: 'opacity 180ms ease-in, overlay 180ms ease-in, display 180ms ease-in',
43
- transitionBehavior: 'allow-discrete',
44
- },
45
- })
46
-
47
- const popoverContentCss: CSSMixinDescriptor = css({
48
- flex: '1 1 auto',
49
- minHeight: 0,
50
- padding: theme.space.xs,
51
- overflow: 'auto',
52
- overscrollBehavior: 'contain',
53
- })
54
-
55
- const popoverSurfaceCss: CSSMixinDescriptor = css({
56
- position: 'fixed',
57
- inset: 'auto',
58
- margin: 0,
59
- padding: theme.space.none,
60
- display: 'flex',
61
- flexDirection: 'column',
62
- minHeight: 0,
63
- minWidth: '12rem',
64
- maxWidth: `min(24rem, calc(100vw - (${theme.space.lg} * 2)))`,
65
- maxHeight: popupViewportClampMaxHeight,
66
- border: `1px solid ${theme.colors.border.subtle}`,
67
- borderRadius: theme.radius.lg,
68
- backgroundColor: theme.surface.lvl0,
69
- color: theme.colors.text.primary,
70
- overflow: 'hidden',
71
- boxShadow: `${theme.shadow.xs}, ${theme.shadow.md}`,
72
- '&::backdrop': {
73
- background: 'transparent',
74
- },
75
- })
76
-
77
- export const contentStyle = popoverContentCss
78
- export const surfaceStyle = [popoverSurfaceCss, popoverSurfaceTransitionCss] as const
79
-
80
30
  function PopoverProvider(handle: Handle<PopoverProps, PopoverContext>): () => RemixNode {
81
31
  handle.context.set({
82
32
  hideFocusTarget: null,
@@ -108,11 +58,15 @@ const anchorMixin: MixinFactory<HTMLElement, [options: AnchorOptions], ElementPr
108
58
  let context = handle.context.get(PopoverProvider)
109
59
  return (options) => {
110
60
  handle.queueTask((node) => {
111
- context.anchor = { node, options }
61
+ context.anchor = { target: node, options }
112
62
  })
113
63
  }
114
64
  })
115
65
 
66
+ function anchorContains(anchor: AnchorRef | null, target: Node) {
67
+ return anchor?.target instanceof HTMLElement && anchor.target.contains(target)
68
+ }
69
+
116
70
  const surfaceMixin: MixinFactory<HTMLElement, [options: PopoverSurfaceOptions], ElementProps> =
117
71
  createMixin<HTMLElement, [options: PopoverSurfaceOptions]>((handle) => {
118
72
  let openProp = false
@@ -147,11 +101,12 @@ const surfaceMixin: MixinFactory<HTMLElement, [options: PopoverSurfaceOptions],
147
101
 
148
102
  on('beforetoggle', (event) => {
149
103
  if (event.newState === 'open') {
150
- cleanupAnchor = positionAnchor(
151
- event.currentTarget,
152
- context.anchor!.node,
153
- context.anchor!.options,
154
- )
104
+ let anchor = context.anchor
105
+ if (!anchor) {
106
+ throw new Error('popover.surface() requires a registered anchor before opening')
107
+ }
108
+
109
+ cleanupAnchor = positionAnchor(event.currentTarget, anchor.target, anchor.options)
155
110
  unlockScroll = lockScroll()
156
111
  } else if (event.newState === 'closed') {
157
112
  cleanupAnchor()
@@ -180,7 +135,7 @@ const surfaceMixin: MixinFactory<HTMLElement, [options: PopoverSurfaceOptions],
180
135
  options.onHide({ reason: 'outside-click', target })
181
136
  },
182
137
  (target) =>
183
- options.closeOnAnchorClick === false && !!context.anchor?.node.contains(target),
138
+ options.closeOnAnchorClick === false && anchorContains(context.anchor, target),
184
139
  options.stopOutsideClickPropagation ?? true,
185
140
  ),
186
141
  ]
@@ -1,5 +1,3 @@
1
- import { createMixin, on, type ElementProps, type MixinFactory } from '@remix-run/ui'
2
-
3
1
  type ScrollLockState = {
4
2
  count: number
5
3
  documentOverflow: string
@@ -73,29 +71,3 @@ export function lockScroll(targetDocument: Document | undefined = globalThis.doc
73
71
  view.scrollTo(currentState.scrollX, currentState.scrollY)
74
72
  }
75
73
  }
76
-
77
- export const lockScrollOnToggle: MixinFactory<HTMLElement, [], ElementProps> = createMixin<
78
- HTMLElement,
79
- [],
80
- ElementProps
81
- >((handle) => {
82
- let unlockScroll = () => {}
83
-
84
- handle.signal.addEventListener('abort', () => {
85
- unlockScroll()
86
- unlockScroll = () => {}
87
- })
88
-
89
- return () => [
90
- on('beforetoggle', (event) => {
91
- unlockScroll()
92
- unlockScroll = () => {}
93
-
94
- if (event.newState !== 'open') {
95
- return
96
- }
97
-
98
- unlockScroll = lockScroll((event.currentTarget as HTMLElement).ownerDocument)
99
- }),
100
- ]
101
- })
@@ -0,0 +1,53 @@
1
+ # radio
2
+
3
+ `radio` is a style mixin for native radio inputs. It only owns radio visuals and the default `type="radio"` behavior for native `<input>` hosts.
4
+
5
+ ## Primitive Usage
6
+
7
+ ```tsx
8
+ import radio from 'remix/ui/radio'
9
+
10
+ function ShippingSpeed() {
11
+ return () => (
12
+ <fieldset>
13
+ <label>
14
+ <input defaultChecked mix={radio()} name="shipping-speed" value="standard" />
15
+ Standard
16
+ </label>
17
+ <label>
18
+ <input mix={radio({ size: 'lg' })} name="shipping-speed" value="express" />
19
+ Express
20
+ </label>
21
+ </fieldset>
22
+ )
23
+ }
24
+ ```
25
+
26
+ Compose app-owned styles around the primitive when a radio option needs local layout:
27
+
28
+ ```tsx
29
+ import radio from 'remix/ui/radio'
30
+ import { optionStyle } from './shipping.styles'
31
+
32
+ function ShippingOption() {
33
+ return () => (
34
+ <label mix={optionStyle}>
35
+ <input mix={radio()} name="shipping-speed" value="overnight" />
36
+ Overnight
37
+ </label>
38
+ )
39
+ }
40
+ ```
41
+
42
+ ## `remix/ui/radio`
43
+
44
+ - `radio(options)`: style mixin for native radio inputs or radio-like hosts.
45
+ - `RadioOptions`: accepts `size`.
46
+ - `RadioSize`: `'md'` or `'lg'`. Defaults to `'md'`.
47
+
48
+ ## Behavior Notes
49
+
50
+ - `radio()` returns a mixin descriptor, so it composes with other mixins in the host element's `mix` prop.
51
+ - Native `<input>` hosts receive `type="radio"` unless an explicit `type` is provided.
52
+ - Radio state is native browser behavior. The mixin also styles `aria-checked="true"` and `data-state="checked"` for custom hosts.
53
+ - Disabled hosts use the shared disabled treatment through `disabled` or `aria-disabled="true"`.
@@ -0,0 +1,100 @@
1
+ import { createMixin, css } from '@remix-run/ui'
2
+ import type { CSSMixinDescriptor, ElementProps, MixinDescriptor } from '@remix-run/ui'
3
+ import { renderMixinElement } from '../runtime/mixins/mixin.ts'
4
+ import { controlFocusShadow } from '../shared/focus-styles.ts'
5
+
6
+ export type RadioSize = 'md' | 'lg'
7
+
8
+ export interface RadioOptions {
9
+ size?: RadioSize
10
+ }
11
+
12
+ type RadioMixin = readonly [
13
+ MixinDescriptor<Element, [], ElementProps>,
14
+ CSSMixinDescriptor,
15
+ CSSMixinDescriptor,
16
+ ]
17
+
18
+ const checkedSelector = '&:checked, &[aria-checked="true"], &[data-state="checked"]'
19
+ const checkedMarkSelector =
20
+ '&:checked::before, &[aria-checked="true"]::before, &[data-state="checked"]::before'
21
+
22
+ const radioDefaultAttrs = createMixin<Element, [], ElementProps>((handle, hostType) => (props) => {
23
+ if (hostType !== 'input' || props.type !== undefined) {
24
+ return handle.element
25
+ }
26
+
27
+ return renderMixinElement(handle.element, {
28
+ ...props,
29
+ type: 'radio',
30
+ })
31
+ })()
32
+
33
+ const baseStyle: CSSMixinDescriptor = css({
34
+ appearance: 'none',
35
+ WebkitAppearance: 'none',
36
+ margin: 0,
37
+ boxSizing: 'border-box',
38
+ position: 'relative',
39
+ display: 'inline-grid',
40
+ placeItems: 'center',
41
+ width: 'var(--rmx-radio-size)',
42
+ height: 'var(--rmx-radio-size)',
43
+ minWidth: 'var(--rmx-radio-size)',
44
+ minHeight: 'var(--rmx-radio-size)',
45
+ padding: 0,
46
+ border: '1px solid rgba(0, 0, 0, 0.12)',
47
+ borderRadius: '9999px',
48
+ background: '#FFFFFF',
49
+ boxShadow: 'inset 0 1px 1px rgba(0, 0, 0, 0.06), inset 0 2px 2px rgba(0, 0, 0, 0.06)',
50
+ verticalAlign: 'middle',
51
+ flex: 'none',
52
+ '&::before': {
53
+ content: '""',
54
+ width: 'var(--rmx-radio-mark-size)',
55
+ height: 'var(--rmx-radio-mark-size)',
56
+ borderRadius: '99px',
57
+ background:
58
+ 'linear-gradient(180deg, rgba(53, 115, 246, 0) 25%, rgba(53, 115, 246, 0.15) 100%), #FFFFFF',
59
+ boxShadow:
60
+ '0 1px 1px -0.5px #0944BE, 0 2px 2px -1px #0944BE, 0 4px 4px -2px #0944BE, 0 0 1px 1px rgba(0, 0, 0, 0.25), inset 0 0 2px 1px #FFFFFF',
61
+ opacity: 0,
62
+ pointerEvents: 'none',
63
+ },
64
+ '&:disabled, &[aria-disabled="true"]': {
65
+ opacity: 0.55,
66
+ },
67
+ [checkedSelector]: {
68
+ border: 0,
69
+ borderRadius: '99px',
70
+ background: 'linear-gradient(180deg, rgba(0, 0, 0, 0.1) 0%, rgba(0, 0, 0, 0) 75.48%), #3573F6',
71
+ backgroundBlendMode: 'overlay, normal',
72
+ boxShadow:
73
+ '0 1px 0 rgba(255, 255, 255, 0.6), 0 0 16px rgba(53, 115, 246, 0.25), inset 0 0 3px 1px rgba(0, 0, 0, 0.1)',
74
+ },
75
+ [checkedMarkSelector]: {
76
+ opacity: 1,
77
+ },
78
+ '&:focus-visible': {
79
+ outline: 0,
80
+ boxShadow: controlFocusShadow,
81
+ },
82
+ })
83
+
84
+ const sizeStyles = {
85
+ md: css({
86
+ '--rmx-radio-size': '16px',
87
+ '--rmx-radio-mark-size': '8px',
88
+ }),
89
+ lg: css({
90
+ '--rmx-radio-size': '20px',
91
+ '--rmx-radio-mark-size': '10px',
92
+ }),
93
+ } as const satisfies Record<RadioSize, CSSMixinDescriptor>
94
+
95
+ export function radio(options: RadioOptions = {}): RadioMixin {
96
+ let { size = 'md' } = options
97
+ return [radioDefaultAttrs, baseStyle, sizeStyles[size]]
98
+ }
99
+
100
+ export default radio
@@ -47,7 +47,7 @@ export type EntryMetadata = {
47
47
  */
48
48
  export type EntryComponent<props extends SerializableProps = {}, context = NoContext> = ((
49
49
  handle: Handle<props, context>,
50
- ) => RenderFn<props>) &
50
+ ) => RenderFn) &
51
51
  EntryMetadata
52
52
 
53
53
  /**
@@ -86,10 +86,6 @@ export function clientEntry<props extends SerializableProps = {}, context = NoCo
86
86
  entryId: string,
87
87
  component: (handle: Handle<props, context>) => RenderFn,
88
88
  ): EntryComponent<props, context>
89
- export function clientEntry<props extends SerializableProps = {}, context = NoContext>(
90
- entryId: string,
91
- component: (handle: Handle<Record<string, never>, context>) => RenderFn<props>,
92
- ): EntryComponent<props, context>
93
89
 
94
90
  // Implementation
95
91
  export function clientEntry(entryId: string, component: any): any {
@@ -179,9 +179,9 @@ export type ComponentFn<Props = Record<string, never>, ContextValue = NoContext>
179
179
  ) => RenderFn
180
180
 
181
181
  /**
182
- * Render function returned by a component factory.
182
+ * Zero-argument render function returned by a component factory.
183
183
  */
184
- export type RenderFn<Props = ElementProps> = (props: Props) => RemixNode
184
+ export type RenderFn = () => RemixNode
185
185
 
186
186
  export type { RemixNode } from './jsx.ts'
187
187
 
@@ -287,7 +287,7 @@ class ComponentRuntime<C = NoContext> implements ComponentHandle<C> {
287
287
  this.#renderFn = renderFn
288
288
  }
289
289
 
290
- return [renderFn(this.#props), this.#dequeueTasks()]
290
+ return [renderFn(), this.#dequeueTasks()]
291
291
  }
292
292
 
293
293
  remove = (): Array<() => void> => {