@remix-run/ui 0.2.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (395) hide show
  1. package/README.md +50 -164
  2. package/dist/accordion/index.d.ts +46 -0
  3. package/dist/accordion/index.js +142 -0
  4. package/dist/accordion/index.js.map +1 -0
  5. package/dist/accordion/primitives.d.ts +104 -0
  6. package/dist/accordion/primitives.js +312 -0
  7. package/dist/accordion/primitives.js.map +1 -0
  8. package/dist/{components/anchor/anchor.d.ts → anchor/index.d.ts} +8 -1
  9. package/dist/{components/anchor/anchor.js → anchor/index.js} +31 -12
  10. package/dist/anchor/index.js.map +1 -0
  11. package/dist/animation/demos/aspect-ratio.d.ts +2 -0
  12. package/dist/animation/demos/aspect-ratio.js +69 -0
  13. package/dist/animation/demos/aspect-ratio.js.map +1 -0
  14. package/dist/animation/demos/bouncy-switch.d.ts +2 -0
  15. package/dist/animation/demos/bouncy-switch.js +36 -0
  16. package/dist/animation/demos/bouncy-switch.js.map +1 -0
  17. package/dist/animation/demos/color-interpolation.d.ts +1 -0
  18. package/dist/animation/demos/color-interpolation.js +53 -0
  19. package/dist/animation/demos/color-interpolation.js.map +1 -0
  20. package/dist/animation/demos/cube.d.ts +2 -0
  21. package/dist/animation/demos/cube.js +86 -0
  22. package/dist/animation/demos/cube.js.map +1 -0
  23. package/dist/animation/demos/default-animate.d.ts +2 -0
  24. package/dist/animation/demos/default-animate.js +89 -0
  25. package/dist/animation/demos/default-animate.js.map +1 -0
  26. package/dist/animation/demos/drag-release.d.ts +24 -0
  27. package/dist/animation/demos/drag-release.js +96 -0
  28. package/dist/animation/demos/drag-release.js.map +1 -0
  29. package/dist/animation/demos/enter.d.ts +1 -0
  30. package/dist/animation/demos/enter.js +19 -0
  31. package/dist/animation/demos/enter.js.map +1 -0
  32. package/dist/animation/demos/exit.d.ts +2 -0
  33. package/dist/animation/demos/exit.js +58 -0
  34. package/dist/animation/demos/exit.js.map +1 -0
  35. package/dist/animation/demos/flip-toggle.d.ts +2 -0
  36. package/dist/animation/demos/flip-toggle.js +37 -0
  37. package/dist/animation/demos/flip-toggle.js.map +1 -0
  38. package/dist/animation/demos/hold-to-confirm.d.ts +13 -0
  39. package/dist/animation/demos/hold-to-confirm.js +211 -0
  40. package/dist/animation/demos/hold-to-confirm.js.map +1 -0
  41. package/dist/animation/demos/html-content.d.ts +2 -0
  42. package/dist/animation/demos/html-content.js +30 -0
  43. package/dist/animation/demos/html-content.js.map +1 -0
  44. package/dist/animation/demos/interruptible-keyframes.d.ts +1 -0
  45. package/dist/animation/demos/interruptible-keyframes.js +48 -0
  46. package/dist/animation/demos/interruptible-keyframes.js.map +1 -0
  47. package/dist/animation/demos/keyframes.d.ts +1 -0
  48. package/dist/animation/demos/keyframes.js +24 -0
  49. package/dist/animation/demos/keyframes.js.map +1 -0
  50. package/dist/animation/demos/material-ripple.d.ts +2 -0
  51. package/dist/animation/demos/material-ripple.js +127 -0
  52. package/dist/animation/demos/material-ripple.js.map +1 -0
  53. package/dist/animation/demos/mixin-presence-list.d.ts +2 -0
  54. package/dist/animation/demos/mixin-presence-list.js +88 -0
  55. package/dist/animation/demos/mixin-presence-list.js.map +1 -0
  56. package/dist/animation/demos/mixin-reclaim.d.ts +2 -0
  57. package/dist/animation/demos/mixin-reclaim.js +90 -0
  58. package/dist/animation/demos/mixin-reclaim.js.map +1 -0
  59. package/dist/animation/demos/multi-state-badge.d.ts +2 -0
  60. package/dist/animation/demos/multi-state-badge.js +231 -0
  61. package/dist/animation/demos/multi-state-badge.js.map +1 -0
  62. package/dist/animation/demos/press.d.ts +2 -0
  63. package/dist/animation/demos/press.js +63 -0
  64. package/dist/animation/demos/press.js.map +1 -0
  65. package/dist/animation/demos/reordering.d.ts +2 -0
  66. package/dist/animation/demos/reordering.js +53 -0
  67. package/dist/animation/demos/reordering.js.map +1 -0
  68. package/dist/animation/demos/rolling-square.d.ts +2 -0
  69. package/dist/animation/demos/rolling-square.js +42 -0
  70. package/dist/animation/demos/rolling-square.js.map +1 -0
  71. package/dist/animation/demos/rotate.d.ts +1 -0
  72. package/dist/animation/demos/rotate.js +18 -0
  73. package/dist/animation/demos/rotate.js.map +1 -0
  74. package/dist/animation/demos/shared-layout.d.ts +2 -0
  75. package/dist/animation/demos/shared-layout.js +114 -0
  76. package/dist/animation/demos/shared-layout.js.map +1 -0
  77. package/dist/animation/demos/transition-options.d.ts +1 -0
  78. package/dist/animation/demos/transition-options.js +21 -0
  79. package/dist/animation/demos/transition-options.js.map +1 -0
  80. package/dist/animation/spring.d.ts +22 -0
  81. package/dist/animation/spring.js +22 -0
  82. package/dist/animation/spring.js.map +1 -1
  83. package/dist/{components/breadcrumbs/breadcrumbs.js → breadcrumbs/index.js} +19 -19
  84. package/dist/breadcrumbs/index.js.map +1 -0
  85. package/dist/button/index.d.ts +15 -0
  86. package/dist/button/index.js +128 -0
  87. package/dist/button/index.js.map +1 -0
  88. package/dist/checkbox/index.d.ts +14 -0
  89. package/dist/checkbox/index.js +125 -0
  90. package/dist/checkbox/index.js.map +1 -0
  91. package/dist/combobox/index.d.ts +21 -0
  92. package/dist/combobox/index.js +58 -0
  93. package/dist/combobox/index.js.map +1 -0
  94. package/dist/{components/combobox/combobox.d.ts → combobox/primitives.d.ts} +3 -7
  95. package/dist/{components/combobox/combobox.js → combobox/primitives.js} +8 -61
  96. package/dist/combobox/primitives.js.map +1 -0
  97. package/dist/input/index.d.ts +13 -0
  98. package/dist/input/index.js +121 -0
  99. package/dist/input/index.js.map +1 -0
  100. package/dist/listbox/flash-attribute.js.map +1 -0
  101. package/dist/{components/listbox/listbox.d.ts → listbox/index.d.ts} +2 -6
  102. package/dist/{components/listbox/listbox.js → listbox/index.js} +4 -82
  103. package/dist/listbox/index.js.map +1 -0
  104. package/dist/menu/hover-aim.js.map +1 -0
  105. package/dist/menu/index.d.ts +42 -0
  106. package/dist/menu/index.js +250 -0
  107. package/dist/menu/index.js.map +1 -0
  108. package/dist/{components/menu/menu.d.ts → menu/primitives.d.ts} +6 -32
  109. package/dist/{components/menu/menu.js → menu/primitives.js} +117 -279
  110. package/dist/menu/primitives.js.map +1 -0
  111. package/dist/{components/popover/popover.d.ts → popover/index.d.ts} +3 -5
  112. package/dist/{components/popover/popover.js → popover/index.js} +15 -51
  113. package/dist/popover/index.js.map +1 -0
  114. package/dist/{interactions/outside-click/outside-click-mixin.js → popover/outside-click.js} +1 -1
  115. package/dist/popover/outside-click.js.map +1 -0
  116. package/dist/popover/scroll-lock.d.ts +1 -0
  117. package/dist/{utils → popover}/scroll-lock.js +0 -18
  118. package/dist/popover/scroll-lock.js.map +1 -0
  119. package/dist/radio/index.d.ts +12 -0
  120. package/dist/radio/index.js +77 -0
  121. package/dist/radio/index.js.map +1 -0
  122. package/dist/runtime/client-entries.d.ts +1 -2
  123. package/dist/runtime/client-entries.js.map +1 -1
  124. package/dist/runtime/component.d.ts +2 -2
  125. package/dist/runtime/component.js +1 -1
  126. package/dist/runtime/component.js.map +1 -1
  127. package/dist/runtime/diff-dom.js +194 -21
  128. package/dist/runtime/diff-dom.js.map +1 -1
  129. package/dist/runtime/frame.d.ts +7 -0
  130. package/dist/runtime/frame.js +176 -41
  131. package/dist/runtime/frame.js.map +1 -1
  132. package/dist/runtime/jsx.d.ts +2 -3
  133. package/dist/runtime/jsx.js.map +1 -1
  134. package/dist/runtime/reconcile.js +11 -5
  135. package/dist/runtime/reconcile.js.map +1 -1
  136. package/dist/runtime/vdom.js +3 -0
  137. package/dist/runtime/vdom.js.map +1 -1
  138. package/dist/select/index.d.ts +19 -0
  139. package/dist/select/index.js +95 -0
  140. package/dist/select/index.js.map +1 -0
  141. package/dist/select/keydown.js.map +1 -0
  142. package/dist/{components/select/select.d.ts → select/primitives.d.ts} +4 -6
  143. package/dist/{components/select/select.js → select/primitives.js} +12 -64
  144. package/dist/select/primitives.js.map +1 -0
  145. package/dist/server/stream.js +5 -4
  146. package/dist/server/stream.js.map +1 -1
  147. package/dist/shared/focus-styles.d.ts +1 -0
  148. package/dist/shared/focus-styles.js +2 -0
  149. package/dist/shared/focus-styles.js.map +1 -0
  150. package/dist/shared/icons.d.ts +9 -0
  151. package/dist/shared/icons.js +42 -0
  152. package/dist/shared/icons.js.map +1 -0
  153. package/dist/shared/listbox-popover-styles.d.ts +6 -0
  154. package/dist/shared/listbox-popover-styles.js +137 -0
  155. package/dist/shared/listbox-popover-styles.js.map +1 -0
  156. package/dist/shared/style-values.d.ts +78 -0
  157. package/dist/{theme/presets/rmx-01/index.js → shared/style-values.js} +3 -34
  158. package/dist/shared/style-values.js.map +1 -0
  159. package/dist/{interactions/typeahead/typeahead-mixin.js → shared/typeahead.js} +1 -1
  160. package/dist/shared/typeahead.js.map +1 -0
  161. package/dist/shared/wait-for-css-transition.js.map +1 -0
  162. package/dist/shared/wait.js.map +1 -0
  163. package/dist/style/style.js +27 -10
  164. package/dist/style/style.js.map +1 -1
  165. package/dist/tabs/index.d.ts +32 -0
  166. package/dist/tabs/index.js +157 -0
  167. package/dist/tabs/index.js.map +1 -0
  168. package/dist/tabs/primitives.d.ts +57 -0
  169. package/dist/tabs/primitives.js +238 -0
  170. package/dist/tabs/primitives.js.map +1 -0
  171. package/dist/toggle/index.d.ts +9 -0
  172. package/dist/toggle/index.js +108 -0
  173. package/dist/toggle/index.js.map +1 -0
  174. package/dist/toggle/primitives.d.ts +29 -0
  175. package/dist/toggle/primitives.js +127 -0
  176. package/dist/toggle/primitives.js.map +1 -0
  177. package/package.json +74 -45
  178. package/src/{components/accordion → accordion}/README.md +50 -14
  179. package/src/accordion/index.tsx +285 -0
  180. package/src/accordion/primitives.tsx +512 -0
  181. package/src/{components/anchor → anchor}/README.md +48 -5
  182. package/src/{components/anchor/anchor.ts → anchor/index.ts} +53 -12
  183. package/src/animation/demos/aspect-ratio.tsx +120 -0
  184. package/src/animation/demos/bouncy-switch.tsx +47 -0
  185. package/src/animation/demos/color-interpolation.tsx +73 -0
  186. package/src/animation/demos/cube.tsx +116 -0
  187. package/src/animation/demos/default-animate.tsx +129 -0
  188. package/src/animation/demos/drag-release.ts +118 -0
  189. package/src/animation/demos/enter.tsx +22 -0
  190. package/src/animation/demos/exit.tsx +79 -0
  191. package/src/animation/demos/flip-toggle.tsx +46 -0
  192. package/src/animation/demos/hold-to-confirm.tsx +317 -0
  193. package/src/animation/demos/html-content.tsx +41 -0
  194. package/src/animation/demos/interruptible-keyframes.tsx +62 -0
  195. package/src/animation/demos/keyframes.tsx +29 -0
  196. package/src/animation/demos/material-ripple.tsx +158 -0
  197. package/src/animation/demos/mixin-presence-list.tsx +121 -0
  198. package/src/animation/demos/mixin-reclaim.tsx +125 -0
  199. package/src/animation/demos/multi-state-badge.tsx +426 -0
  200. package/src/animation/demos/press.tsx +67 -0
  201. package/src/animation/demos/reordering.tsx +68 -0
  202. package/src/animation/demos/rolling-square.tsx +57 -0
  203. package/src/animation/demos/rotate.tsx +21 -0
  204. package/src/animation/demos/shared-layout.tsx +211 -0
  205. package/src/animation/demos/transition-options.tsx +24 -0
  206. package/src/animation/spring.ts +22 -0
  207. package/src/{components/breadcrumbs → breadcrumbs}/README.md +4 -4
  208. package/src/{components/breadcrumbs/breadcrumbs.tsx → breadcrumbs/index.tsx} +18 -18
  209. package/src/button/README.md +44 -0
  210. package/src/button/index.ts +168 -0
  211. package/src/checkbox/README.md +59 -0
  212. package/src/checkbox/index.ts +162 -0
  213. package/src/{components/combobox → combobox}/README.md +58 -9
  214. package/src/combobox/index.tsx +112 -0
  215. package/src/{components/combobox/combobox.tsx → combobox/primitives.tsx} +5 -91
  216. package/src/input/README.md +52 -0
  217. package/src/input/index.ts +147 -0
  218. package/src/{components/listbox → listbox}/README.md +9 -41
  219. package/src/{components/listbox/listbox.ts → listbox/index.ts} +2 -87
  220. package/src/menu/README.md +161 -0
  221. package/src/menu/index.tsx +354 -0
  222. package/src/{components/menu/menu.tsx → menu/primitives.tsx} +117 -359
  223. package/src/{components/popover → popover}/README.md +20 -39
  224. package/src/{components/popover/popover.ts → popover/index.ts} +16 -61
  225. package/src/{utils → popover}/scroll-lock.ts +0 -28
  226. package/src/radio/README.md +53 -0
  227. package/src/radio/index.ts +100 -0
  228. package/src/runtime/client-entries.ts +1 -5
  229. package/src/runtime/component.ts +3 -3
  230. package/src/runtime/demos/readme.demo.tsx +704 -0
  231. package/src/runtime/diff-dom.ts +270 -20
  232. package/src/runtime/frame.ts +218 -41
  233. package/src/runtime/jsx.ts +6 -10
  234. package/src/runtime/reconcile.ts +11 -5
  235. package/src/runtime/vdom.ts +3 -0
  236. package/src/{components/select → select}/README.md +29 -19
  237. package/src/select/index.tsx +159 -0
  238. package/src/{components/select/select.tsx → select/primitives.tsx} +11 -99
  239. package/src/server/stream.ts +10 -5
  240. package/src/shared/focus-styles.ts +2 -0
  241. package/src/shared/icons.tsx +62 -0
  242. package/src/shared/listbox-popover-styles.ts +146 -0
  243. package/src/shared/style-values.ts +165 -0
  244. package/src/style/style.ts +29 -10
  245. package/src/tabs/README.md +141 -0
  246. package/src/tabs/index.tsx +244 -0
  247. package/src/tabs/primitives.ts +365 -0
  248. package/src/toggle/README.md +56 -0
  249. package/src/toggle/index.tsx +134 -0
  250. package/src/toggle/primitives.ts +192 -0
  251. package/dist/components/accordion/accordion.d.ts +0 -92
  252. package/dist/components/accordion/accordion.js +0 -335
  253. package/dist/components/accordion/accordion.js.map +0 -1
  254. package/dist/components/accordion/demos/card.demo.d.ts +0 -6
  255. package/dist/components/accordion/demos/card.demo.js +0 -58
  256. package/dist/components/accordion/demos/card.demo.js.map +0 -1
  257. package/dist/components/accordion/demos/multiple.demo.d.ts +0 -6
  258. package/dist/components/accordion/demos/multiple.demo.js +0 -19
  259. package/dist/components/accordion/demos/multiple.demo.js.map +0 -1
  260. package/dist/components/accordion/demos/overview.demo.d.ts +0 -6
  261. package/dist/components/accordion/demos/overview.demo.js +0 -19
  262. package/dist/components/accordion/demos/overview.demo.js.map +0 -1
  263. package/dist/components/anchor/anchor.js.map +0 -1
  264. package/dist/components/breadcrumbs/breadcrumbs.js.map +0 -1
  265. package/dist/components/breadcrumbs/demos/basic.demo.d.ts +0 -5
  266. package/dist/components/breadcrumbs/demos/basic.demo.js +0 -14
  267. package/dist/components/breadcrumbs/demos/basic.demo.js.map +0 -1
  268. package/dist/components/breadcrumbs/demos/separator.demo.d.ts +0 -5
  269. package/dist/components/breadcrumbs/demos/separator.demo.js +0 -14
  270. package/dist/components/breadcrumbs/demos/separator.demo.js.map +0 -1
  271. package/dist/components/button/button.d.ts +0 -105
  272. package/dist/components/button/button.js +0 -207
  273. package/dist/components/button/button.js.map +0 -1
  274. package/dist/components/button/demos/aliases.demo.d.ts +0 -6
  275. package/dist/components/button/demos/aliases.demo.js +0 -18
  276. package/dist/components/button/demos/aliases.demo.js.map +0 -1
  277. package/dist/components/button/demos/basic.demo.d.ts +0 -6
  278. package/dist/components/button/demos/basic.demo.js +0 -19
  279. package/dist/components/button/demos/basic.demo.js.map +0 -1
  280. package/dist/components/button/demos/states.demo.d.ts +0 -6
  281. package/dist/components/button/demos/states.demo.js +0 -29
  282. package/dist/components/button/demos/states.demo.js.map +0 -1
  283. package/dist/components/combobox/combobox.js.map +0 -1
  284. package/dist/components/combobox/demos/overview.demo.d.ts +0 -6
  285. package/dist/components/combobox/demos/overview.demo.js +0 -153
  286. package/dist/components/combobox/demos/overview.demo.js.map +0 -1
  287. package/dist/components/glyph/glyph.d.ts +0 -14
  288. package/dist/components/glyph/glyph.js +0 -65
  289. package/dist/components/glyph/glyph.js.map +0 -1
  290. package/dist/components/listbox/demos/overview.demo.d.ts +0 -6
  291. package/dist/components/listbox/demos/overview.demo.js +0 -64
  292. package/dist/components/listbox/demos/overview.demo.js.map +0 -1
  293. package/dist/components/listbox/listbox.js.map +0 -1
  294. package/dist/components/menu/demos/bubbling.demo.d.ts +0 -5
  295. package/dist/components/menu/demos/bubbling.demo.js +0 -15
  296. package/dist/components/menu/demos/bubbling.demo.js.map +0 -1
  297. package/dist/components/menu/demos/overview.demo.d.ts +0 -6
  298. package/dist/components/menu/demos/overview.demo.js +0 -32
  299. package/dist/components/menu/demos/overview.demo.js.map +0 -1
  300. package/dist/components/menu/hover-aim.js.map +0 -1
  301. package/dist/components/menu/menu.js.map +0 -1
  302. package/dist/components/popover/demos/overview.demo.d.ts +0 -6
  303. package/dist/components/popover/demos/overview.demo.js +0 -64
  304. package/dist/components/popover/demos/overview.demo.js.map +0 -1
  305. package/dist/components/popover/popover.js.map +0 -1
  306. package/dist/components/select/demos/deconstructed.demo.d.ts +0 -6
  307. package/dist/components/select/demos/deconstructed.demo.js +0 -53
  308. package/dist/components/select/demos/deconstructed.demo.js.map +0 -1
  309. package/dist/components/select/demos/overview.demo.d.ts +0 -5
  310. package/dist/components/select/demos/overview.demo.js +0 -27
  311. package/dist/components/select/demos/overview.demo.js.map +0 -1
  312. package/dist/components/select/select.js.map +0 -1
  313. package/dist/components/separator/separator.d.ts +0 -2
  314. package/dist/components/separator/separator.js +0 -15
  315. package/dist/components/separator/separator.js.map +0 -1
  316. package/dist/components/tabs/tabs.d.ts +0 -78
  317. package/dist/components/tabs/tabs.js +0 -339
  318. package/dist/components/tabs/tabs.js.map +0 -1
  319. package/dist/interactions/keydown/keydown.js.map +0 -1
  320. package/dist/interactions/outside-click/outside-click-mixin.js.map +0 -1
  321. package/dist/interactions/typeahead/typeahead-mixin.js.map +0 -1
  322. package/dist/theme/contract.d.ts +0 -61
  323. package/dist/theme/contract.js +0 -131
  324. package/dist/theme/contract.js.map +0 -1
  325. package/dist/theme/glyph-contract.d.ts +0 -11
  326. package/dist/theme/glyph-contract.js +0 -34
  327. package/dist/theme/glyph-contract.js.map +0 -1
  328. package/dist/theme/presets/rmx-01/glyphs.d.ts +0 -2
  329. package/dist/theme/presets/rmx-01/glyphs.js +0 -252
  330. package/dist/theme/presets/rmx-01/glyphs.js.map +0 -1
  331. package/dist/theme/presets/rmx-01/index.d.ts +0 -4
  332. package/dist/theme/presets/rmx-01/index.js.map +0 -1
  333. package/dist/theme/runtime.d.ts +0 -2
  334. package/dist/theme/runtime.js +0 -84
  335. package/dist/theme/runtime.js.map +0 -1
  336. package/dist/theme/theme.d.ts +0 -6
  337. package/dist/theme/theme.js +0 -5
  338. package/dist/theme/theme.js.map +0 -1
  339. package/dist/utils/flash-attribute.js.map +0 -1
  340. package/dist/utils/scroll-lock.d.ts +0 -3
  341. package/dist/utils/scroll-lock.js.map +0 -1
  342. package/dist/utils/wait-for-css-transition.js.map +0 -1
  343. package/dist/utils/wait.js.map +0 -1
  344. package/src/components/accordion/accordion.tsx +0 -565
  345. package/src/components/accordion/demos/card.demo.tsx +0 -113
  346. package/src/components/accordion/demos/multiple.demo.tsx +0 -56
  347. package/src/components/accordion/demos/overview.demo.tsx +0 -56
  348. package/src/components/breadcrumbs/demos/basic.demo.tsx +0 -17
  349. package/src/components/breadcrumbs/demos/separator.demo.tsx +0 -18
  350. package/src/components/button/README.md +0 -44
  351. package/src/components/button/button.tsx +0 -286
  352. package/src/components/button/demos/aliases.demo.tsx +0 -27
  353. package/src/components/button/demos/basic.demo.tsx +0 -30
  354. package/src/components/button/demos/states.demo.tsx +0 -52
  355. package/src/components/combobox/demos/overview.demo.tsx +0 -199
  356. package/src/components/glyph/README.md +0 -72
  357. package/src/components/glyph/glyph.tsx +0 -110
  358. package/src/components/listbox/demos/overview.demo.tsx +0 -101
  359. package/src/components/menu/README.md +0 -96
  360. package/src/components/menu/demos/bubbling.demo.tsx +0 -34
  361. package/src/components/menu/demos/overview.demo.tsx +0 -76
  362. package/src/components/popover/demos/overview.demo.tsx +0 -143
  363. package/src/components/select/demos/deconstructed.demo.tsx +0 -95
  364. package/src/components/select/demos/overview.demo.tsx +0 -51
  365. package/src/components/separator/separator.ts +0 -19
  366. package/src/components/tabs/README.md +0 -105
  367. package/src/components/tabs/tabs.tsx +0 -504
  368. package/src/theme/README.md +0 -103
  369. package/src/theme/contract.ts +0 -215
  370. package/src/theme/glyph-contract.ts +0 -59
  371. package/src/theme/presets/rmx-01/glyphs.tsx +0 -308
  372. package/src/theme/presets/rmx-01/index.ts +0 -123
  373. package/src/theme/runtime.ts +0 -119
  374. package/src/theme/theme.ts +0 -15
  375. package/src/utils/scroll-lock/README.md +0 -33
  376. /package/dist/{components/breadcrumbs/breadcrumbs.d.ts → breadcrumbs/index.d.ts} +0 -0
  377. /package/dist/{utils → listbox}/flash-attribute.d.ts +0 -0
  378. /package/dist/{utils → listbox}/flash-attribute.js +0 -0
  379. /package/dist/{components/menu → menu}/hover-aim.d.ts +0 -0
  380. /package/dist/{components/menu → menu}/hover-aim.js +0 -0
  381. /package/dist/{interactions/outside-click/outside-click-mixin.d.ts → popover/outside-click.d.ts} +0 -0
  382. /package/dist/{interactions/keydown → select}/keydown.d.ts +0 -0
  383. /package/dist/{interactions/keydown → select}/keydown.js +0 -0
  384. /package/dist/{interactions/typeahead/typeahead-mixin.d.ts → shared/typeahead.d.ts} +0 -0
  385. /package/dist/{utils → shared}/wait-for-css-transition.d.ts +0 -0
  386. /package/dist/{utils → shared}/wait-for-css-transition.js +0 -0
  387. /package/dist/{utils → shared}/wait.d.ts +0 -0
  388. /package/dist/{utils → shared}/wait.js +0 -0
  389. /package/src/{utils → listbox}/flash-attribute.ts +0 -0
  390. /package/src/{components/menu → menu}/hover-aim.ts +0 -0
  391. /package/src/{interactions/outside-click/outside-click-mixin.ts → popover/outside-click.ts} +0 -0
  392. /package/src/{interactions/keydown → select}/keydown.ts +0 -0
  393. /package/src/{interactions/typeahead/typeahead-mixin.ts → shared/typeahead.ts} +0 -0
  394. /package/src/{utils → shared}/wait-for-css-transition.ts +0 -0
  395. /package/src/{utils → shared}/wait.ts +0 -0
@@ -0,0 +1,354 @@
1
+ import { createElement, css, ref } from '@remix-run/ui'
2
+ import type { CSSMixinDescriptor, Handle, Props, RemixNode } from '@remix-run/ui'
3
+
4
+ import button from '@remix-run/ui/button'
5
+ import * as menu from '@remix-run/ui/menu/primitives'
6
+ import type { SearchValue } from '../shared/typeahead.ts'
7
+ import { CheckIcon, ChevronDownIcon, ChevronRightIcon } from '../shared/icons.tsx'
8
+ import { popoverSurfaceStyle } from '../shared/listbox-popover-styles.ts'
9
+ import { componentStyleValues as styles } from '../shared/style-values.ts'
10
+
11
+ const menuButtonCss: CSSMixinDescriptor = css({
12
+ display: 'grid',
13
+ gridTemplateColumns: 'minmax(0, 1fr) auto',
14
+ alignItems: 'center',
15
+ borderRadius: styles.radius.md,
16
+ paddingInlineEnd: styles.space.sm,
17
+ textAlign: 'left',
18
+ '&[aria-expanded="true"], &[aria-expanded="true"]:hover, &[aria-expanded="true"]:focus-visible': {
19
+ backgroundColor: styles.surface.lvl3,
20
+ color: styles.colors.text.primary,
21
+ },
22
+ })
23
+
24
+ const menuButtonLabelCss: CSSMixinDescriptor = css({
25
+ display: 'inline-flex',
26
+ alignItems: 'center',
27
+ minWidth: 0,
28
+ })
29
+
30
+ const menuButtonIconCss: CSSMixinDescriptor = css({
31
+ display: 'inline-flex',
32
+ alignItems: 'center',
33
+ justifyContent: 'center',
34
+ width: styles.fontSize.md,
35
+ height: styles.fontSize.md,
36
+ color: 'currentColor',
37
+ flexShrink: 0,
38
+ '& > svg': {
39
+ display: 'block',
40
+ width: '100%',
41
+ height: '100%',
42
+ },
43
+ })
44
+
45
+ const menuPopoverCss: CSSMixinDescriptor = css({
46
+ '&[data-menu-submenu="true"][data-anchor-placement^="right"]': {
47
+ marginLeft: `calc(${styles.space.xs} * -1)`,
48
+ },
49
+ '&[data-menu-submenu="true"][data-anchor-placement^="left"]': {
50
+ marginLeft: styles.space.xs,
51
+ },
52
+ '&[data-close-animation="none"]:not(:popover-open)': {
53
+ transition: 'none',
54
+ transitionBehavior: 'normal',
55
+ },
56
+ })
57
+
58
+ const menuListCss: CSSMixinDescriptor = css({
59
+ display: 'flex',
60
+ flexDirection: 'column',
61
+ flex: '1 1 auto',
62
+ minHeight: 0,
63
+ paddingBlock: styles.space.xs,
64
+ paddingInline: styles.space.none,
65
+ overflow: 'auto',
66
+ overscrollBehavior: 'contain',
67
+ outline: 'none',
68
+ userSelect: 'none',
69
+ WebkitUserSelect: 'none',
70
+ '--rmx-ui-item-inset': `calc(${styles.space.sm} + ${styles.space.xs})`,
71
+ '--rmx-ui-item-indicator-gap': 'var(--rmx-menu-item-slot-gap)',
72
+ '--rmx-ui-item-indicator-width': 'var(--rmx-menu-item-slot-width)',
73
+ '--rmx-menu-item-slot-gap': styles.space.none,
74
+ '--rmx-menu-item-slot-width': styles.space.none,
75
+ '&:has(> [role="menuitemcheckbox"])': {
76
+ '--rmx-menu-item-slot-gap': styles.space.xs,
77
+ '--rmx-menu-item-slot-width': styles.fontSize.md,
78
+ },
79
+ '&:has(> [role="menuitemradio"])': {
80
+ '--rmx-menu-item-slot-gap': styles.space.xs,
81
+ '--rmx-menu-item-slot-width': styles.fontSize.md,
82
+ },
83
+ })
84
+
85
+ const menuItemCss: CSSMixinDescriptor = css({
86
+ display: 'flex',
87
+ alignItems: 'center',
88
+ width: '100%',
89
+ minWidth: 0,
90
+ minHeight: styles.control.height.md,
91
+ boxSizing: 'border-box',
92
+ position: 'relative',
93
+ isolation: 'isolate',
94
+ paddingInline: `calc(${styles.space.sm} + ${styles.space.xs})`,
95
+ color: styles.colors.text.primary,
96
+ fontFamily: styles.fontFamily.sans,
97
+ fontSize: styles.fontSize.sm,
98
+ fontWeight: styles.fontWeight.normal,
99
+ lineHeight: styles.lineHeight.normal,
100
+ textAlign: 'left',
101
+ userSelect: 'none',
102
+ WebkitUserSelect: 'none',
103
+ '--rmx-menu-item-indicator-opacity': '0',
104
+ '&::before': {
105
+ content: '""',
106
+ position: 'absolute',
107
+ insetBlock: 0,
108
+ insetInline: styles.space.xs,
109
+ borderRadius: styles.radius.md,
110
+ backgroundColor: 'transparent',
111
+ pointerEvents: 'none',
112
+ zIndex: -1,
113
+ },
114
+ '&:focus': {
115
+ outline: 'none',
116
+ },
117
+ '&[data-highlighted="true"]': {
118
+ color: styles.colors.action.primary.foreground,
119
+ },
120
+ '&[data-highlighted="true"]::before': {
121
+ backgroundColor: styles.colors.action.primary.background,
122
+ },
123
+ '&[aria-haspopup="menu"][aria-expanded="true"]:not(:focus)': {
124
+ color: styles.colors.text.primary,
125
+ },
126
+ '&[aria-haspopup="menu"][aria-expanded="true"]:not(:focus)::before': {
127
+ backgroundColor: styles.surface.lvl2,
128
+ },
129
+ '&[data-submenu-state="selecting"], &[data-submenu-state="dismissing"]': {
130
+ color: styles.colors.text.primary,
131
+ },
132
+ '&[data-submenu-state="selecting"]::before, &[data-submenu-state="dismissing"]::before': {
133
+ backgroundColor: styles.surface.lvl2,
134
+ },
135
+ '&[data-menu-flash="true"]': {
136
+ color: styles.colors.text.primary,
137
+ },
138
+ '&[data-menu-flash="true"]::before': {
139
+ backgroundColor: 'transparent',
140
+ },
141
+ '&[aria-disabled="true"]': {
142
+ opacity: 0.5,
143
+ },
144
+ '&[aria-checked="true"], &[aria-selected="true"]': {
145
+ '--rmx-menu-item-indicator-opacity': '1',
146
+ },
147
+ })
148
+
149
+ const menuItemSlotCss: CSSMixinDescriptor = css({
150
+ display: 'inline-flex',
151
+ alignItems: 'center',
152
+ justifyContent: 'center',
153
+ flex: '0 0 var(--rmx-menu-item-slot-width)',
154
+ width: 'var(--rmx-menu-item-slot-width)',
155
+ minWidth: 0,
156
+ marginInlineEnd: 'var(--rmx-menu-item-slot-gap)',
157
+ overflow: 'hidden',
158
+ })
159
+
160
+ const menuItemLabelCss: CSSMixinDescriptor = css({
161
+ display: 'inline-flex',
162
+ alignItems: 'center',
163
+ flex: '1 1 auto',
164
+ minWidth: 0,
165
+ })
166
+
167
+ const menuItemIndicatorCss: CSSMixinDescriptor = css({
168
+ display: 'inline-flex',
169
+ alignItems: 'center',
170
+ justifyContent: 'center',
171
+ width: styles.fontSize.md,
172
+ height: styles.fontSize.md,
173
+ color: 'currentColor',
174
+ flexShrink: 0,
175
+ '& > svg': {
176
+ display: 'block',
177
+ width: '100%',
178
+ height: '100%',
179
+ },
180
+ opacity: 'var(--rmx-menu-item-indicator-opacity)',
181
+ })
182
+
183
+ const menuTriggerIndicatorCss: CSSMixinDescriptor = css({
184
+ display: 'inline-flex',
185
+ alignItems: 'center',
186
+ justifyContent: 'center',
187
+ width: styles.fontSize.md,
188
+ height: styles.fontSize.md,
189
+ color: 'currentColor',
190
+ flexShrink: 0,
191
+ marginInlineStart: 'auto',
192
+ '& > svg': {
193
+ display: 'block',
194
+ width: '100%',
195
+ height: '100%',
196
+ },
197
+ })
198
+
199
+ export const buttonStyle = menuButtonCss
200
+ export const popoverStyle = menuPopoverCss
201
+ export const listStyle = menuListCss
202
+ export const itemStyle = menuItemCss
203
+ export const itemSlotStyle = menuItemSlotCss
204
+ export const itemLabelStyle = menuItemLabelCss
205
+ export const itemIndicatorStyle = menuItemIndicatorCss
206
+ export const triggerIndicatorStyle = menuTriggerIndicatorCss
207
+
208
+ export interface MenuListProps extends Props<'div'> {}
209
+
210
+ type MenuListChildProps = Omit<
211
+ JSX.LibraryManagedAttributes<typeof MenuList, MenuListProps>,
212
+ 'children'
213
+ >
214
+
215
+ export interface MenuProps extends Omit<Props<'button'>, 'children'> {
216
+ children?: RemixNode
217
+ label: RemixNode
218
+ menuLabel?: string
219
+ }
220
+
221
+ export interface MenuItemProps extends Omit<Props<'div'>, 'children' | 'name' | 'type' | 'value'> {
222
+ checked?: boolean
223
+ children?: RemixNode
224
+ disabled?: boolean
225
+ label?: string
226
+ name: string
227
+ searchValue?: SearchValue
228
+ type?: 'checkbox' | 'radio'
229
+ value?: string
230
+ }
231
+
232
+ export interface SubmenuProps extends Omit<Props<'div'>, 'children' | 'name' | 'type' | 'value'> {
233
+ children?: RemixNode
234
+ disabled?: boolean
235
+ label: RemixNode
236
+ listProps?: MenuListChildProps
237
+ menuLabel?: string
238
+ searchValue?: SearchValue
239
+ value?: string
240
+ }
241
+
242
+ export function Menu(handle: Handle<MenuProps>): () => RemixNode {
243
+ let buttonRef: HTMLButtonElement | undefined
244
+
245
+ return () => {
246
+ let { children, label, menuLabel, mix, type, ...buttonProps } = handle.props
247
+
248
+ return (
249
+ <menu.Context label={menuLabel}>
250
+ <button
251
+ {...buttonProps}
252
+ type={type ?? 'button'}
253
+ mix={[
254
+ button(),
255
+ buttonStyle,
256
+ menu.trigger(),
257
+ ref((node: HTMLButtonElement, signal) => {
258
+ buttonRef = node
259
+ signal.addEventListener('abort', () => {
260
+ if (buttonRef === node) {
261
+ buttonRef = undefined
262
+ }
263
+ })
264
+ }),
265
+ mix,
266
+ ]}
267
+ >
268
+ <span mix={menuButtonLabelCss}>{label}</span>
269
+ <ChevronDownIcon mix={menuButtonIconCss} />
270
+ </button>
271
+ <MenuList
272
+ mix={menu.onMenuSelect((event) => {
273
+ if (!buttonRef) {
274
+ return
275
+ }
276
+
277
+ event.stopPropagation()
278
+ buttonRef.dispatchEvent(new menu.MenuSelectEvent(event.item))
279
+ })}
280
+ >
281
+ {children}
282
+ </MenuList>
283
+ </menu.Context>
284
+ )
285
+ }
286
+ }
287
+
288
+ export function MenuList(handle: Handle<MenuListProps>): () => RemixNode {
289
+ return () => {
290
+ let { children, mix, ...divProps } = handle.props
291
+
292
+ return (
293
+ <div mix={[popoverSurfaceStyle, popoverStyle, menu.popover()]}>
294
+ <div {...divProps} mix={[listStyle, menu.list(), mix]}>
295
+ {children}
296
+ </div>
297
+ </div>
298
+ )
299
+ }
300
+ }
301
+
302
+ export function MenuItem(handle: Handle<MenuItemProps>): () => RemixNode {
303
+ return () => {
304
+ let { checked, children, disabled, label, mix, name, searchValue, type, value, ...divProps } =
305
+ handle.props
306
+
307
+ return (
308
+ <div
309
+ {...divProps}
310
+ mix={[
311
+ itemStyle,
312
+ menu.item({ checked, disabled, label, name, searchValue, type, value }),
313
+ mix,
314
+ ]}
315
+ >
316
+ <span mix={itemSlotStyle}>
317
+ <CheckIcon mix={itemIndicatorStyle} />
318
+ </span>
319
+ <span mix={itemLabelStyle}>{children ?? label}</span>
320
+ </div>
321
+ )
322
+ }
323
+ }
324
+
325
+ export function Submenu(handle: Handle<SubmenuProps>): () => RemixNode {
326
+ return () => {
327
+ let { children, disabled, label, listProps, menuLabel, mix, searchValue, value, ...divProps } =
328
+ handle.props
329
+
330
+ return (
331
+ <menu.Context label={menuLabel}>
332
+ <div
333
+ {...divProps}
334
+ mix={[
335
+ itemStyle,
336
+ menu.submenuTrigger({
337
+ disabled,
338
+ searchValue,
339
+ value,
340
+ }),
341
+ mix,
342
+ ]}
343
+ >
344
+ <span mix={itemSlotStyle}>
345
+ <CheckIcon mix={itemIndicatorStyle} />
346
+ </span>
347
+ <span mix={itemLabelStyle}>{label}</span>
348
+ <ChevronRightIcon mix={triggerIndicatorStyle} />
349
+ </div>
350
+ <MenuList {...listProps}>{children}</MenuList>
351
+ </menu.Context>
352
+ )
353
+ }
354
+ }