@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,565 +0,0 @@
1
- import {
2
- css,
3
- createElement,
4
- on,
5
- ref,
6
- type CSSMixinDescriptor,
7
- type Handle,
8
- type Props,
9
- type RemixNode,
10
- type Dispatched,
11
- } from '@remix-run/ui'
12
-
13
- import { spring } from '@remix-run/ui/animation'
14
- import { Glyph } from '../glyph/glyph.tsx'
15
- import { theme } from '../../theme/theme.ts'
16
-
17
- const ACCORDION_CHANGE_EVENT = 'rmx:accordion-change' as const
18
-
19
- type AccordionChangeHandler<target extends HTMLElement> = (
20
- event: Dispatched<AccordionChangeEvent, target>,
21
- signal: AbortSignal,
22
- ) => void | Promise<void>
23
-
24
- declare global {
25
- interface HTMLElementEventMap {
26
- [ACCORDION_CHANGE_EVENT]: AccordionChangeEvent
27
- }
28
- }
29
-
30
- export class AccordionChangeEvent extends Event {
31
- accordionType: AccordionType
32
- itemValue: string
33
- value: string | null | string[]
34
-
35
- constructor(
36
- value: string | null | string[],
37
- init: {
38
- accordionType: AccordionType
39
- itemValue: string
40
- },
41
- ) {
42
- super(ACCORDION_CHANGE_EVENT, {
43
- bubbles: true,
44
- })
45
- this.accordionType = init.accordionType
46
- this.itemValue = init.itemValue
47
- this.value = value
48
- }
49
- }
50
-
51
- type AccordionType = 'single' | 'multiple'
52
- type HeadingLevel = 1 | 2 | 3 | 4 | 5 | 6
53
-
54
- type AccordionBaseProps = Omit<Props<'div'>, 'children'> & {
55
- children?: RemixNode
56
- disabled?: boolean
57
- headingLevel?: HeadingLevel
58
- }
59
-
60
- export type AccordionSingleProps = AccordionBaseProps & {
61
- type?: 'single'
62
- value?: string | null
63
- defaultValue?: string | null
64
- onValueChange?: (value: string | null) => void
65
- collapsible?: boolean
66
- }
67
-
68
- export type AccordionMultipleProps = AccordionBaseProps & {
69
- type: 'multiple'
70
- value?: string[]
71
- defaultValue?: string[]
72
- onValueChange?: (value: string[]) => void
73
- }
74
-
75
- export type AccordionProps = AccordionSingleProps | AccordionMultipleProps
76
-
77
- export type AccordionItemProps = Omit<Props<'div'>, 'children'> & {
78
- children?: RemixNode
79
- disabled?: boolean
80
- value: string
81
- }
82
-
83
- export type AccordionTriggerProps = Omit<Props<'button'>, 'children' | 'type'> & {
84
- children?: RemixNode
85
- indicator?: RemixNode | null
86
- type?: 'button' | 'submit' | 'reset'
87
- }
88
-
89
- export type AccordionContentProps = Omit<Props<'div'>, 'children'> & {
90
- children?: RemixNode
91
- }
92
-
93
- type RegisteredItem = {
94
- disabled: boolean
95
- getTriggerNode(): HTMLButtonElement | null
96
- value: string
97
- }
98
-
99
- type AccordionContext = {
100
- collapsible: boolean
101
- disabled: boolean
102
- focusItem(value: string, direction: FocusDirection): void
103
- getPanelId(value: string): string | undefined
104
- getTriggerId(value: string): string | undefined
105
- headingLevel: HeadingLevel
106
- isOpen(value: string): boolean
107
- registerItem(item: RegisteredItem): void
108
- toggleItem(value: string): void
109
- type: AccordionType
110
- }
111
-
112
- type AccordionItemContext = {
113
- disabled: boolean
114
- headingLevel: HeadingLevel
115
- lockedOpen: boolean
116
- open: boolean
117
- panelId: string
118
- setTriggerNode(node: HTMLButtonElement | null): void
119
- triggerId: string
120
- value: string
121
- }
122
-
123
- type FocusDirection = 'first' | 'last' | 'next' | 'previous'
124
-
125
- const accordionPanelClipCss = css({
126
- minHeight: 0,
127
- overflow: 'hidden',
128
- })
129
-
130
- const accordionTransition = spring()
131
-
132
- const accordionRootCss: CSSMixinDescriptor = css({
133
- display: 'flex',
134
- flexDirection: 'column',
135
- minWidth: 0,
136
- })
137
-
138
- const accordionItemCss: CSSMixinDescriptor = css({
139
- minWidth: 0,
140
- })
141
-
142
- const accordionTriggerCss: CSSMixinDescriptor = css({
143
- all: 'unset',
144
- boxSizing: 'border-box',
145
- cursor: 'revert',
146
- display: 'grid',
147
- gridTemplateColumns: 'minmax(0, 1fr) auto',
148
- alignItems: 'center',
149
- gap: theme.space.md,
150
- width: '100%',
151
- minHeight: theme.control.height.lg,
152
- padding: `${theme.space.md} 0`,
153
- color: theme.colors.text.primary,
154
- fontFamily: theme.fontFamily.sans,
155
- fontSize: theme.fontSize.sm,
156
- lineHeight: theme.lineHeight.normal,
157
- fontWeight: theme.fontWeight.medium,
158
- textAlign: 'left',
159
- '&:hover:not(:disabled)': {
160
- backgroundColor: theme.surface.lvl1,
161
- },
162
- '&:focus-visible': {
163
- outline: `2px solid ${theme.colors.focus.ring}`,
164
- outlineOffset: '2px',
165
- },
166
- '&:disabled': {
167
- opacity: 0.55,
168
- },
169
- '& > span:first-child': {
170
- minWidth: 0,
171
- },
172
- })
173
-
174
- const accordionIndicatorCss: CSSMixinDescriptor = css({
175
- display: 'inline-flex',
176
- alignItems: 'center',
177
- justifyContent: 'center',
178
- width: theme.fontSize.sm,
179
- height: theme.fontSize.sm,
180
- color: theme.colors.text.muted,
181
- transition: `transform ${accordionTransition}`,
182
- '& > svg': {
183
- display: 'block',
184
- width: '100%',
185
- height: '100%',
186
- },
187
- '&[data-state="open"]': {
188
- transform: 'rotate(90deg)',
189
- },
190
- })
191
-
192
- const accordionPanelCss: CSSMixinDescriptor = css({
193
- display: 'grid',
194
- gridTemplateRows: '0fr',
195
- transition: `grid-template-rows ${accordionTransition}`,
196
- '&[data-state="open"]': {
197
- gridTemplateRows: '1fr',
198
- },
199
- '&[data-state="closed"]': {
200
- pointerEvents: 'none',
201
- },
202
- '@media (prefers-reduced-motion: reduce)': {
203
- transition: 'none',
204
- },
205
- })
206
-
207
- const accordionBodyCss: CSSMixinDescriptor = css({
208
- display: 'flow-root',
209
- minHeight: 0,
210
- paddingBottom: theme.space.md,
211
- color: theme.colors.text.secondary,
212
- fontSize: theme.fontSize.sm,
213
- lineHeight: theme.lineHeight.relaxed,
214
- '& > :first-child': {
215
- marginTop: 0,
216
- },
217
- '& > :last-child': {
218
- marginBottom: 0,
219
- },
220
- })
221
-
222
- export const rootStyle = accordionRootCss
223
- export const itemStyle = accordionItemCss
224
- export const triggerStyle = accordionTriggerCss
225
- export const indicatorStyle = accordionIndicatorCss
226
- export const panelStyle = accordionPanelCss
227
- export const bodyStyle = accordionBodyCss
228
-
229
- function isMultipleProps(props: AccordionProps | null): props is AccordionMultipleProps {
230
- return props?.type === 'multiple'
231
- }
232
-
233
- function AccordionImpl(handle: Handle<AccordionProps, AccordionContext>): () => RemixNode {
234
- let rootNode: HTMLElement | null = null
235
- let registeredItems: RegisteredItem[] = []
236
- let uncontrolledSingleValue: string | null = null
237
- let uncontrolledMultipleValue: string[] = []
238
- let hasInitializedSingle = false
239
- let hasInitializedMultiple = false
240
-
241
- let getType = () => (isMultipleProps(handle.props) ? 'multiple' : 'single')
242
-
243
- let getSingleValue = () => {
244
- if (isMultipleProps(handle.props)) {
245
- return null
246
- }
247
-
248
- if (handle.props.value !== undefined) {
249
- return handle.props.value
250
- }
251
-
252
- if (!hasInitializedSingle) {
253
- uncontrolledSingleValue = handle.props.defaultValue ?? null
254
- hasInitializedSingle = true
255
- }
256
-
257
- return uncontrolledSingleValue
258
- }
259
-
260
- let getMultipleValue = () => {
261
- if (!isMultipleProps(handle.props)) {
262
- return []
263
- }
264
-
265
- if (handle.props.value !== undefined) {
266
- return handle.props.value
267
- }
268
-
269
- if (!hasInitializedMultiple) {
270
- uncontrolledMultipleValue = [...(handle.props.defaultValue ?? [])]
271
- hasInitializedMultiple = true
272
- }
273
-
274
- return uncontrolledMultipleValue
275
- }
276
-
277
- let isOpen = (value: string) => {
278
- if (getType() === 'multiple') {
279
- return getMultipleValue().includes(value)
280
- }
281
-
282
- return getSingleValue() === value
283
- }
284
-
285
- let dispatchChange = (itemValue: string, value: string | null | string[]) => {
286
- rootNode?.dispatchEvent(
287
- new AccordionChangeEvent(value, {
288
- accordionType: getType(),
289
- itemValue,
290
- }),
291
- )
292
- }
293
-
294
- let toggleItem = (itemValue: string) => {
295
- if (handle.props.disabled) {
296
- return
297
- }
298
-
299
- if (isMultipleProps(handle.props)) {
300
- let currentValue = getMultipleValue()
301
- let nextValue = currentValue.includes(itemValue)
302
- ? currentValue.filter((value) => value !== itemValue)
303
- : [...currentValue, itemValue]
304
-
305
- if (handle.props.value === undefined) {
306
- uncontrolledMultipleValue = nextValue
307
- void handle.update()
308
- }
309
-
310
- handle.props.onValueChange?.(nextValue)
311
- dispatchChange(itemValue, nextValue)
312
- return
313
- }
314
-
315
- let isCurrentItemOpen = getSingleValue() === itemValue
316
- if (isCurrentItemOpen && !(handle.props.collapsible ?? true)) {
317
- return
318
- }
319
-
320
- let nextValue = isCurrentItemOpen ? null : itemValue
321
-
322
- if (handle.props.value === undefined) {
323
- uncontrolledSingleValue = nextValue
324
- void handle.update()
325
- }
326
-
327
- handle.props.onValueChange?.(nextValue)
328
- dispatchChange(itemValue, nextValue)
329
- }
330
-
331
- let focusItem = (itemValue: string, direction: FocusDirection) => {
332
- let items = registeredItems.filter((item) => !item.disabled && item.getTriggerNode() !== null)
333
- if (items.length === 0) {
334
- return
335
- }
336
-
337
- let currentIndex = items.findIndex((item) => item.value === itemValue)
338
- let targetIndex = 0
339
-
340
- switch (direction) {
341
- case 'first':
342
- targetIndex = 0
343
- break
344
- case 'last':
345
- targetIndex = items.length - 1
346
- break
347
- case 'previous':
348
- targetIndex = currentIndex <= 0 ? items.length - 1 : currentIndex - 1
349
- break
350
- case 'next':
351
- targetIndex =
352
- currentIndex === -1 || currentIndex === items.length - 1 ? 0 : currentIndex + 1
353
- break
354
- }
355
-
356
- items[targetIndex]?.getTriggerNode()?.focus()
357
- }
358
-
359
- let registerItem = (item: RegisteredItem) => {
360
- registeredItems.push(item)
361
- }
362
-
363
- let getTriggerId = (value: string) =>
364
- registeredItems.find((item) => item.value === value)?.getTriggerNode()?.id
365
-
366
- let getPanelId = (value: string) => `${handle.id}-${value}-panel`
367
-
368
- return () => {
369
- let collapsible = 'collapsible' in handle.props ? handle.props.collapsible : undefined
370
- let {
371
- children,
372
- defaultValue,
373
- disabled,
374
- headingLevel,
375
- mix,
376
- onValueChange,
377
- type,
378
- value,
379
- ...divProps
380
- } = handle.props
381
- void defaultValue
382
- void onValueChange
383
- void value
384
- registeredItems = []
385
-
386
- handle.context.set({
387
- collapsible: type === 'multiple' ? true : (collapsible ?? true),
388
- disabled: disabled ?? false,
389
- focusItem,
390
- getPanelId,
391
- getTriggerId,
392
- headingLevel: headingLevel ?? 3,
393
- isOpen,
394
- registerItem,
395
- toggleItem,
396
- type: type ?? 'single',
397
- })
398
-
399
- return (
400
- <div
401
- {...divProps}
402
- data-disabled={disabled ? '' : undefined}
403
- data-type={type ?? 'single'}
404
- mix={[
405
- rootStyle,
406
- ref((node) => {
407
- rootNode = node as HTMLElement
408
- }),
409
- ...(mix ?? []),
410
- ]}
411
- >
412
- {children}
413
- </div>
414
- )
415
- }
416
- }
417
-
418
- export function onAccordionChange<target extends HTMLElement>(
419
- handler: AccordionChangeHandler<target>,
420
- captureBoolean?: boolean,
421
- ): ReturnType<typeof on<target, typeof ACCORDION_CHANGE_EVENT>> {
422
- return on(ACCORDION_CHANGE_EVENT, handler, captureBoolean)
423
- }
424
-
425
- export const Accordion = AccordionImpl
426
-
427
- export function AccordionItem(
428
- handle: Handle<AccordionItemProps, AccordionItemContext>,
429
- ): () => RemixNode {
430
- let triggerNode: HTMLButtonElement | null = null
431
- let triggerId = `${handle.id}-trigger`
432
- let panelId = `${handle.id}-panel`
433
-
434
- return () => {
435
- let { children, disabled: itemDisabled, mix, value, ...divProps } = handle.props
436
- let accordion = handle.context.get(Accordion)
437
- let disabled = accordion.disabled || itemDisabled === true
438
- let open = accordion.isOpen(value)
439
- let lockedOpen = accordion.type === 'single' && !accordion.collapsible && open
440
-
441
- accordion.registerItem({
442
- disabled,
443
- getTriggerNode: () => triggerNode,
444
- value,
445
- })
446
-
447
- handle.context.set({
448
- disabled,
449
- headingLevel: accordion.headingLevel,
450
- lockedOpen,
451
- open,
452
- panelId,
453
- setTriggerNode(node) {
454
- triggerNode = node
455
- },
456
- triggerId,
457
- value,
458
- })
459
-
460
- return (
461
- <div
462
- {...divProps}
463
- data-disabled={disabled ? '' : undefined}
464
- data-state={open ? 'open' : 'closed'}
465
- mix={[itemStyle, ...(mix ?? [])]}
466
- >
467
- {children}
468
- </div>
469
- )
470
- }
471
- }
472
-
473
- export function AccordionTrigger(handle: Handle<AccordionTriggerProps>): () => RemixNode {
474
- return () => {
475
- let accordion = handle.context.get(Accordion)
476
- let item = handle.context.get(AccordionItem)
477
- let headingTag = `h${item.headingLevel}` as keyof JSX.IntrinsicElements
478
- let { children, indicator, mix, type, ...buttonProps } = handle.props
479
- let disabled = item.disabled || handle.props.disabled === true
480
- let toggleItem = () => {
481
- if (disabled || item.lockedOpen) {
482
- return
483
- }
484
-
485
- accordion.toggleItem(item.value)
486
- }
487
-
488
- let button = (
489
- <button
490
- {...buttonProps}
491
- aria-controls={item.panelId}
492
- aria-disabled={item.lockedOpen ? true : undefined}
493
- aria-expanded={item.open}
494
- data-state={item.open ? 'open' : 'closed'}
495
- disabled={disabled ? true : undefined}
496
- id={item.triggerId}
497
- mix={[
498
- triggerStyle,
499
- ref((node) => {
500
- item.setTriggerNode(node as HTMLButtonElement)
501
- }),
502
- on('click', toggleItem),
503
- on('keydown', (event) => {
504
- switch (event.key) {
505
- case 'ArrowDown':
506
- event.preventDefault()
507
- accordion.focusItem(item.value, 'next')
508
- break
509
- case 'ArrowUp':
510
- event.preventDefault()
511
- accordion.focusItem(item.value, 'previous')
512
- break
513
- case 'Home':
514
- event.preventDefault()
515
- accordion.focusItem(item.value, 'first')
516
- break
517
- case 'End':
518
- event.preventDefault()
519
- accordion.focusItem(item.value, 'last')
520
- break
521
- }
522
- }),
523
- mix,
524
- ]}
525
- type={type ?? 'button'}
526
- >
527
- <span>{children}</span>
528
- {indicator === null ? null : (
529
- <span
530
- data-rmx-accordion-indicator=""
531
- data-state={item.open ? 'open' : 'closed'}
532
- mix={indicatorStyle}
533
- >
534
- {indicator ?? <Glyph name="chevronRight" />}
535
- </span>
536
- )}
537
- </button>
538
- )
539
-
540
- return createElement(headingTag, {}, button)
541
- }
542
- }
543
-
544
- export function AccordionContent(handle: Handle<AccordionContentProps>): () => RemixNode {
545
- return () => {
546
- let item = handle.context.get(AccordionItem)
547
- let { children, mix, ...panelProps } = handle.props
548
-
549
- return (
550
- <div
551
- {...panelProps}
552
- aria-hidden={item.open ? undefined : true}
553
- aria-labelledby={item.triggerId}
554
- data-state={item.open ? 'open' : 'closed'}
555
- id={item.panelId}
556
- inert={item.open ? undefined : true}
557
- mix={[panelStyle, mix ?? []]}
558
- >
559
- <div mix={accordionPanelClipCss}>
560
- <div mix={bodyStyle}>{children}</div>
561
- </div>
562
- </div>
563
- )
564
- }
565
- }
@@ -1,113 +0,0 @@
1
- import { css } from '@remix-run/ui'
2
- import {
3
- Accordion,
4
- AccordionContent,
5
- AccordionItem,
6
- AccordionTrigger,
7
- } from '@remix-run/ui/accordion'
8
- import { theme } from '@remix-run/ui/theme'
9
-
10
- /**
11
- * @name Accordion in a Card
12
- * @description The Accordion can sit inside a card when the surrounding surface needs stronger grouping.
13
- * @order 3
14
- */
15
- export default function Example() {
16
- return () => (
17
- <article mix={cardCss}>
18
- <div mix={cardHeaderCss}>
19
- <p mix={eyebrowCss}>Project settings</p>
20
- <h3 mix={titleCss}>Deployment policies</h3>
21
- <p mix={descriptionCss}>
22
- The Accordion can sit inside a card when the surrounding surface needs stronger grouping.
23
- </p>
24
- </div>
25
-
26
- <div mix={accordionInsetCss}>
27
- <Accordion defaultValue="reviews">
28
- <AccordionItem value="reviews">
29
- <AccordionTrigger>Required approvals</AccordionTrigger>
30
- <AccordionContent>
31
- <p mix={bodyTextCss}>
32
- Require one reviewer for routine changes and two reviewers for dependency, auth, or
33
- billing-related changes.
34
- </p>
35
- </AccordionContent>
36
- </AccordionItem>
37
-
38
- <AccordionItem value="windows">
39
- <AccordionTrigger>Release windows</AccordionTrigger>
40
- <AccordionContent>
41
- <p mix={bodyTextCss}>
42
- Schedule production deploys on weekdays before 3 PM so incidents and rollback work
43
- stay inside staffed hours.
44
- </p>
45
- </AccordionContent>
46
- </AccordionItem>
47
-
48
- <AccordionItem value="rollback">
49
- <AccordionTrigger>Rollback policy</AccordionTrigger>
50
- <AccordionContent>
51
- <p mix={bodyTextCss}>
52
- Keep a rollback target ready for every release and treat rollback preparation as
53
- part of the normal change checklist.
54
- </p>
55
- </AccordionContent>
56
- </AccordionItem>
57
- </Accordion>
58
- </div>
59
- </article>
60
- )
61
- }
62
-
63
- const cardCss = css({
64
- display: 'flex',
65
- flexDirection: 'column',
66
- gap: theme.space.md,
67
- padding: theme.space.lg,
68
- border: `1px solid ${theme.colors.border.subtle}`,
69
- borderRadius: theme.radius.lg,
70
- backgroundColor: theme.surface.lvl0,
71
- boxShadow: theme.shadow.xs,
72
- })
73
-
74
- const cardHeaderCss = css({
75
- display: 'flex',
76
- flexDirection: 'column',
77
- gap: theme.space.sm,
78
- })
79
-
80
- const accordionInsetCss = css({
81
- paddingInline: theme.space.lg,
82
- })
83
-
84
- const eyebrowCss = css({
85
- margin: 0,
86
- fontSize: theme.fontSize.xxxs,
87
- fontWeight: theme.fontWeight.semibold,
88
- letterSpacing: theme.letterSpacing.meta,
89
- textTransform: 'uppercase',
90
- color: theme.colors.text.muted,
91
- })
92
-
93
- const titleCss = css({
94
- margin: 0,
95
- fontSize: theme.fontSize.lg,
96
- lineHeight: theme.lineHeight.tight,
97
- fontWeight: theme.fontWeight.semibold,
98
- color: theme.colors.text.primary,
99
- })
100
-
101
- const descriptionCss = css({
102
- margin: 0,
103
- fontSize: theme.fontSize.sm,
104
- lineHeight: theme.lineHeight.relaxed,
105
- color: theme.colors.text.secondary,
106
- })
107
-
108
- const bodyTextCss = css({
109
- margin: 0,
110
- fontSize: theme.fontSize.sm,
111
- lineHeight: theme.lineHeight.relaxed,
112
- color: theme.colors.text.secondary,
113
- })