@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
@@ -7,6 +7,13 @@ type HydratedVirtualRootStartMarker = Comment & {
7
7
  }
8
8
  }
9
9
 
10
+ type CommentMarkerRangeReplacement = {
11
+ currentStart: Comment
12
+ nextStart: Comment
13
+ currentEndIndex: number
14
+ nextEndIndex: number
15
+ }
16
+
10
17
  export function diffNodes(curr: Node[], next: Node[], context: FrameContext) {
11
18
  let parent = curr[0]?.parentNode ?? context.regionParent ?? null
12
19
  invariant(parent, 'Parent node not found')
@@ -17,10 +24,11 @@ export function diffNodes(curr: Node[], next: Node[], context: FrameContext) {
17
24
  context.regionTailRef ??
18
25
  (curr.length > 0 ? (curr[curr.length - 1].nextSibling as ChildNode | null) : null)
19
26
 
20
- let max = Math.max(curr.length, next.length)
21
- for (let i = 0; i < max; i++) {
22
- let c = curr[i]
23
- let n = next[i]
27
+ let currentIndex = 0
28
+ let nextIndex = 0
29
+ while (currentIndex < curr.length || nextIndex < next.length) {
30
+ let c = curr[currentIndex]
31
+ let n = next[nextIndex]
24
32
 
25
33
  if (!c && n) {
26
34
  if (regionTailRef) {
@@ -28,10 +36,28 @@ export function diffNodes(curr: Node[], next: Node[], context: FrameContext) {
28
36
  } else {
29
37
  parent.appendChild(n)
30
38
  }
39
+ nextIndex++
31
40
  } else if (c && !n) {
32
41
  removeNode(c, parent, context)
42
+ currentIndex++
33
43
  } else if (c && n) {
34
- // Skip hydrated client-entry boundary ranges; hydration pass re-renders
44
+ let replacement = getCommentMarkerRangeReplacement(
45
+ c,
46
+ n,
47
+ curr,
48
+ next,
49
+ currentIndex,
50
+ nextIndex,
51
+ context,
52
+ )
53
+ if (replacement) {
54
+ replaceCommentMarkerRange(replacement, parent, context)
55
+ currentIndex = replacement.currentEndIndex + 1
56
+ nextIndex = replacement.nextEndIndex + 1
57
+ continue
58
+ }
59
+
60
+ // Skip hydrated client-entry marker ranges; hydration pass re-renders
35
61
  // roots with new props from incoming payload
36
62
  if (isVirtualRootStartMarker(c) && isVirtualRootStartMarker(n)) {
37
63
  let currentEnd = findHydrationEndMarker(c)
@@ -41,14 +67,25 @@ export function diffNodes(curr: Node[], next: Node[], context: FrameContext) {
41
67
 
42
68
  let currentEndIndex = curr.indexOf(currentEnd)
43
69
  let nextEndIndex = next.indexOf(nextEnd)
44
- i = Math.max(currentEndIndex, nextEndIndex)
70
+ currentIndex = currentEndIndex + 1
71
+ nextIndex = nextEndIndex + 1
45
72
  continue
46
73
  }
47
74
 
48
75
  let cursor = diffNode(c, n, context)
49
76
  if (cursor) {
50
- i = next.indexOf(cursor)
77
+ let nextEndIndex = next.indexOf(cursor)
78
+ let currentEndIndex =
79
+ isFrameStartMarker(c) && isFrameEndMarker(cursor)
80
+ ? findFrameEndIndex(curr, currentIndex)
81
+ : currentIndex
82
+ currentIndex = currentEndIndex + 1
83
+ nextIndex = nextEndIndex + 1
84
+ continue
51
85
  }
86
+
87
+ currentIndex++
88
+ nextIndex++
52
89
  }
53
90
  }
54
91
  }
@@ -61,7 +98,7 @@ function diffNode(current: Node, next: Node, context: FrameContext): ChildNode |
61
98
  return
62
99
  }
63
100
 
64
- // Hydration boundary -> Hydration boundary
101
+ // Hydration marker range -> Hydration marker range
65
102
  if (isVirtualRootStartMarker(current) && isVirtualRootStartMarker(next)) {
66
103
  let nextData = next.data
67
104
  if (current.data !== nextData) {
@@ -77,8 +114,41 @@ function diffNode(current: Node, next: Node, context: FrameContext): ChildNode |
77
114
  if (isCommentNode(current) && isCommentNode(next)) {
78
115
  let newData = next.data
79
116
  if (current.data !== newData) {
80
- if (isFrameStartMarker(current)) disposeFrameStartMarker(current, context)
81
- current.data = newData
117
+ let updated = false
118
+ if (isFrameStartMarker(current)) {
119
+ if (shouldPreserveFrameStartMarker(current, next, context)) {
120
+ current.data = newData
121
+ updated = true
122
+
123
+ let frame = context.frameInstances.get(current)
124
+ let nextMarkerData = getFrameMarkerData(next, context)
125
+ if (frame && nextMarkerData) {
126
+ if (nextMarkerData.status === 'resolved') {
127
+ let nextEnd = findFrameEndMarker(next)
128
+ let nextContent = collectFrameContentFragment(current.ownerDocument, next, nextEnd)
129
+ void frame.renderMarkerContent(
130
+ { ...nextMarkerData, id: getFrameId(next) },
131
+ nextContent,
132
+ {
133
+ signal: context.signal,
134
+ },
135
+ )
136
+ return nextEnd
137
+ }
138
+
139
+ if (frame.isDisplayingResolvedContent()) {
140
+ return findFrameEndMarker(next)
141
+ }
142
+ }
143
+ } else {
144
+ disposeFrameStartMarker(current, context)
145
+ current.data = newData
146
+ updated = true
147
+ }
148
+ }
149
+ if (!updated) {
150
+ current.data = newData
151
+ }
82
152
  }
83
153
  return
84
154
  }
@@ -224,7 +294,14 @@ function diffElementChildren(current: Element, next: Element, context: FrameCont
224
294
  let nextChild = nextChildren[i]
225
295
  let matchIndex = -1
226
296
 
227
- if (isElement(nextChild)) {
297
+ if (isFrameEndMarker(nextChild)) {
298
+ for (let j = 0; j < currentChildren.length; j++) {
299
+ if (!used[j] && isFrameEndMarker(currentChildren[j])) {
300
+ matchIndex = j
301
+ break
302
+ }
303
+ }
304
+ } else if (isElement(nextChild)) {
228
305
  let key = nextChild.getAttribute('data-key')
229
306
  if (key != null && keyToIndex.has(key)) {
230
307
  let idx = keyToIndex.get(key)!
@@ -253,14 +330,42 @@ function diffElementChildren(current: Element, next: Element, context: FrameCont
253
330
  let mi = matchIndexForNext[i]
254
331
  if (mi !== -1) {
255
332
  let curChild = currentChildren[mi]
256
- let cursor = diffNode(curChild, nextChildren[i], context)
333
+ let nextChild = nextChildren[i]
334
+
335
+ let replacement = getCommentMarkerRangeReplacement(
336
+ curChild,
337
+ nextChild,
338
+ currentChildren,
339
+ nextChildren,
340
+ mi,
341
+ i,
342
+ context,
343
+ )
344
+ if (replacement) {
345
+ replaceCommentMarkerRange(replacement, current, context)
346
+
347
+ for (let k = mi; k <= replacement.currentEndIndex; k++) used[k] = true
348
+
349
+ committed[i] = replacement.nextStart
350
+ committed[replacement.nextEndIndex] = nextChildren[replacement.nextEndIndex]
351
+ for (let j = i + 1; j < replacement.nextEndIndex; j++) committed[j] = undefined
352
+
353
+ i = replacement.nextEndIndex
354
+ continue
355
+ }
356
+
357
+ let cursor = diffNode(curChild, nextChild, context)
257
358
  if (cursor) {
258
- // Fast-forward across a hydrated virtual root region.
359
+ // `diffNode` can preserve hydration and frame marker ranges by returning
360
+ // the next end marker, so skip the owned interior nodes here.
259
361
  let nextEndIdx = nextChildren.indexOf(cursor)
260
- let currEndIdx = findHydrationEndIndex(currentChildren, mi)
362
+ let currEndIdx =
363
+ isFrameStartMarker(curChild) && isFrameEndMarker(cursor)
364
+ ? findFrameEndIndex(currentChildren, mi)
365
+ : findHydrationEndIndex(currentChildren, mi)
261
366
 
262
- // Adjacent hydration regions can pre-match into the next region and leave
263
- // an orphaned `<!-- /rmx:h -->` behind. Clear those stale matches first.
367
+ // Adjacent marker ranges can pre-match into the next range and leave an
368
+ // orphaned end marker behind. Clear those stale matches first.
264
369
  for (let j = i + 1; j <= nextEndIdx; j++) {
265
370
  let matchedIndex = matchIndexForNext[j]
266
371
  if (matchedIndex > currEndIdx) {
@@ -272,7 +377,7 @@ function diffElementChildren(current: Element, next: Element, context: FrameCont
272
377
  // Mark the entire current region as used to avoid removals.
273
378
  for (let k = mi; k <= currEndIdx; k++) used[k] = true
274
379
 
275
- // Preserve both boundary markers in committed; skip interior in reorder pass.
380
+ // Preserve both comment markers in committed; skip interior in reorder pass.
276
381
  committed[i] = curChild // start marker
277
382
  committed[nextEndIdx] = currentChildren[currEndIdx] // end marker
278
383
  for (let j = i + 1; j < nextEndIdx; j++) committed[j] = undefined
@@ -296,9 +401,15 @@ function diffElementChildren(current: Element, next: Element, context: FrameCont
296
401
  // Use only an anchor that is actually a child of the current parent
297
402
  let ref = anchor && anchor.parentNode === current ? anchor : null
298
403
 
299
- // Do not move hydration boundary markers; keep region stable.
300
- // If a boundary marker is new, ensure it is inserted before using it as an anchor.
301
- if (isVirtualRootStartMarker(node) || isVirtualRootEndMarker(node)) {
404
+ // Existing comment markers delimit live ranges, so do not reorder them
405
+ // independently from their contents. New markers still need to be inserted
406
+ // before they can be used as anchors.
407
+ if (
408
+ isVirtualRootStartMarker(node) ||
409
+ isVirtualRootEndMarker(node) ||
410
+ isFrameStartMarker(node) ||
411
+ isFrameEndMarker(node)
412
+ ) {
302
413
  if (node.parentNode !== current) {
303
414
  current.insertBefore(node, ref)
304
415
  }
@@ -372,6 +483,37 @@ function findHydrationEndIndex(nodes: Node[], startIdx: number): number {
372
483
  return startIdx
373
484
  }
374
485
 
486
+ function findFrameEndMarker(start: Comment): Comment {
487
+ let node: Node | null = start.nextSibling
488
+ let depth = 1
489
+
490
+ while (node) {
491
+ if (isFrameStartMarker(node)) depth++
492
+ if (isFrameEndMarker(node)) {
493
+ depth--
494
+ if (depth === 0) return node
495
+ }
496
+ node = node.nextSibling
497
+ }
498
+
499
+ throw new Error('Frame end marker not found')
500
+ }
501
+
502
+ function findFrameEndIndex(nodes: Node[], startIdx: number): number {
503
+ let depth = 1
504
+
505
+ for (let j = startIdx + 1; j < nodes.length; j++) {
506
+ let node = nodes[j]
507
+ if (isFrameStartMarker(node)) depth++
508
+ if (isFrameEndMarker(node)) {
509
+ depth--
510
+ if (depth === 0) return j
511
+ }
512
+ }
513
+
514
+ return startIdx
515
+ }
516
+
375
517
  function isTextNode(node: Node): node is Text {
376
518
  return node.nodeType === Node.TEXT_NODE
377
519
  }
@@ -388,6 +530,114 @@ function isFrameStartMarker(node: Node): node is Comment {
388
530
  return node instanceof Comment && node.data.trim().startsWith('rmx:f:')
389
531
  }
390
532
 
533
+ function isFrameEndMarker(node: Node): node is Comment {
534
+ return node instanceof Comment && node.data.trim() === '/rmx:f'
535
+ }
536
+
537
+ function shouldPreserveFrameStartMarker(
538
+ current: Comment,
539
+ next: Comment,
540
+ context: FrameContext,
541
+ ): boolean {
542
+ if (!isFrameStartMarker(next)) return false
543
+
544
+ let currentData = getFrameMarkerData(current, context)
545
+ let nextData = getFrameMarkerData(next, context)
546
+
547
+ return (
548
+ currentData !== undefined &&
549
+ nextData !== undefined &&
550
+ currentData.src === nextData.src &&
551
+ currentData.name === nextData.name
552
+ )
553
+ }
554
+
555
+ function getCommentMarkerRangeReplacement(
556
+ current: Node,
557
+ next: Node,
558
+ currentNodes: Node[],
559
+ nextNodes: Node[],
560
+ currentIndex: number,
561
+ nextIndex: number,
562
+ context: FrameContext,
563
+ ): CommentMarkerRangeReplacement | undefined {
564
+ // Comment markers can represent owned DOM ranges, not standalone comments. If
565
+ // the incoming range no longer has the same identity, replace the whole range
566
+ // before regular node diffing mutates either marker.
567
+ if (
568
+ isFrameStartMarker(current) &&
569
+ isFrameStartMarker(next) &&
570
+ !shouldPreserveFrameStartMarker(current, next, context)
571
+ ) {
572
+ return {
573
+ currentStart: current,
574
+ nextStart: next,
575
+ currentEndIndex: findFrameEndIndex(currentNodes, currentIndex),
576
+ nextEndIndex: findFrameEndIndex(nextNodes, nextIndex),
577
+ }
578
+ }
579
+ }
580
+
581
+ function getFrameMarkerData(marker: Comment, context: FrameContext) {
582
+ let id = getFrameId(marker)
583
+ return context.data.f?.[id]
584
+ }
585
+
586
+ function getFrameId(marker: Comment): string {
587
+ let trimmed = marker.data.trim()
588
+ invariant(trimmed.startsWith('rmx:f:'), 'Invalid frame start marker')
589
+ return trimmed.slice('rmx:f:'.length)
590
+ }
591
+
592
+ function replaceCommentMarkerRange(
593
+ replacement: CommentMarkerRangeReplacement,
594
+ parent: ParentNode,
595
+ context: FrameContext,
596
+ ): void {
597
+ let currentEnd = findFrameEndMarker(replacement.currentStart)
598
+ let nextEnd = findFrameEndMarker(replacement.nextStart)
599
+ let nextNodes = collectNodeRange(replacement.nextStart, nextEnd)
600
+ let currentNodes = collectNodeRange(replacement.currentStart, currentEnd)
601
+
602
+ for (let node of nextNodes) {
603
+ parent.insertBefore(node, replacement.currentStart)
604
+ }
605
+
606
+ for (let node of currentNodes) {
607
+ removeNode(node, parent, context)
608
+ }
609
+ }
610
+
611
+ function collectNodeRange(start: Node, end: Node): Node[] {
612
+ let nodes: Node[] = []
613
+ let node: Node | null = start
614
+
615
+ while (node) {
616
+ nodes.push(node)
617
+ if (node === end) break
618
+ node = node.nextSibling
619
+ }
620
+
621
+ return nodes
622
+ }
623
+
624
+ function collectFrameContentFragment(
625
+ doc: Document,
626
+ start: Comment,
627
+ end: Comment,
628
+ ): DocumentFragment {
629
+ let fragment = doc.createDocumentFragment()
630
+ let node = start.nextSibling
631
+
632
+ while (node && node !== end) {
633
+ let next = node.nextSibling
634
+ fragment.appendChild(node)
635
+ node = next
636
+ }
637
+
638
+ return fragment
639
+ }
640
+
391
641
  function removeNode(node: Node, parent: ParentNode, context: FrameContext): void {
392
642
  disposeRemovedVirtualRoots(node)
393
643
  disposeRemovedSubFrames(node, context)