@remix-run/ui 0.3.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (434) hide show
  1. package/README.md +116 -157
  2. package/dist/accordion/index.d.ts +46 -0
  3. package/dist/accordion/index.js +142 -0
  4. package/dist/accordion/index.js.map +1 -0
  5. package/dist/accordion/primitives.d.ts +104 -0
  6. package/dist/accordion/primitives.js +312 -0
  7. package/dist/accordion/primitives.js.map +1 -0
  8. package/dist/{components/anchor/anchor.js → anchor/index.js} +1 -1
  9. package/dist/anchor/index.js.map +1 -0
  10. package/dist/animation/animate-layout-mixin.js +1 -1
  11. package/dist/animation/animate-layout-mixin.js.map +1 -1
  12. package/dist/animation/animate-mixins.js +2 -2
  13. package/dist/animation/animate-mixins.js.map +1 -1
  14. package/dist/animation/demos/color-interpolation.js +1 -1
  15. package/dist/animation/demos/color-interpolation.js.map +1 -1
  16. package/dist/animation/demos/drag-release.d.ts +1 -1
  17. package/dist/animation/demos/hold-to-confirm.d.ts +3 -3
  18. package/dist/animation/demos/material-ripple.js +1 -3
  19. package/dist/animation/demos/material-ripple.js.map +1 -1
  20. package/dist/animation/demos/reordering.js +9 -6
  21. package/dist/animation/demos/reordering.js.map +1 -1
  22. package/dist/animation/index.js +4 -4
  23. package/dist/animation/spring.js.map +1 -1
  24. package/dist/{components/breadcrumbs/breadcrumbs.js → breadcrumbs/index.js} +19 -19
  25. package/dist/breadcrumbs/index.js.map +1 -0
  26. package/dist/button/index.d.ts +15 -0
  27. package/dist/button/index.js +128 -0
  28. package/dist/button/index.js.map +1 -0
  29. package/dist/checkbox/index.d.ts +14 -0
  30. package/dist/checkbox/index.js +127 -0
  31. package/dist/checkbox/index.js.map +1 -0
  32. package/dist/combobox/index.d.ts +21 -0
  33. package/dist/combobox/index.js +58 -0
  34. package/dist/combobox/index.js.map +1 -0
  35. package/dist/{components/combobox/combobox.d.ts → combobox/primitives.d.ts} +4 -8
  36. package/dist/{components/combobox/combobox.js → combobox/primitives.js} +8 -61
  37. package/dist/combobox/primitives.js.map +1 -0
  38. package/dist/dev/refresh.d.ts +1 -0
  39. package/dist/dev/refresh.js +2 -0
  40. package/dist/dev/refresh.js.map +1 -0
  41. package/dist/index.d.ts +1 -1
  42. package/dist/index.js +14 -14
  43. package/dist/input/index.d.ts +13 -0
  44. package/dist/input/index.js +121 -0
  45. package/dist/input/index.js.map +1 -0
  46. package/dist/jsx-runtime.js +2 -2
  47. package/dist/listbox/flash-attribute.js.map +1 -0
  48. package/dist/{components/listbox/listbox.d.ts → listbox/index.d.ts} +2 -6
  49. package/dist/{components/listbox/listbox.js → listbox/index.js} +4 -82
  50. package/dist/listbox/index.js.map +1 -0
  51. package/dist/menu/hover-aim.js.map +1 -0
  52. package/dist/menu/index.d.ts +42 -0
  53. package/dist/menu/index.js +250 -0
  54. package/dist/menu/index.js.map +1 -0
  55. package/dist/{components/menu/menu.d.ts → menu/primitives.d.ts} +4 -33
  56. package/dist/{components/menu/menu.js → menu/primitives.js} +98 -315
  57. package/dist/menu/primitives.js.map +1 -0
  58. package/dist/{components/popover/popover.d.ts → popover/index.d.ts} +2 -4
  59. package/dist/{components/popover/popover.js → popover/index.js} +5 -48
  60. package/dist/popover/index.js.map +1 -0
  61. package/dist/{interactions/outside-click/outside-click-mixin.js → popover/outside-click.js} +1 -1
  62. package/dist/popover/outside-click.js.map +1 -0
  63. package/dist/popover/scroll-lock.d.ts +1 -0
  64. package/dist/{utils → popover}/scroll-lock.js +0 -18
  65. package/dist/popover/scroll-lock.js.map +1 -0
  66. package/dist/radio/index.d.ts +12 -0
  67. package/dist/radio/index.js +77 -0
  68. package/dist/radio/index.js.map +1 -0
  69. package/dist/runtime/client-entry-boundary.d.ts +14 -0
  70. package/dist/runtime/client-entry-boundary.js +29 -0
  71. package/dist/runtime/client-entry-boundary.js.map +1 -0
  72. package/dist/runtime/component.d.ts +19 -4
  73. package/dist/runtime/component.js +39 -9
  74. package/dist/runtime/component.js.map +1 -1
  75. package/dist/runtime/core/attributes.js +36 -3
  76. package/dist/runtime/core/attributes.js.map +1 -1
  77. package/dist/runtime/core/children.d.ts +2 -0
  78. package/dist/runtime/core/children.js +26 -2
  79. package/dist/runtime/core/children.js.map +1 -1
  80. package/dist/runtime/core/props.js +2 -2
  81. package/dist/runtime/core/vnode.d.ts +3 -3
  82. package/dist/runtime/core/vnode.js +22 -1
  83. package/dist/runtime/core/vnode.js.map +1 -1
  84. package/dist/runtime/create-element.d.ts +2 -2
  85. package/dist/runtime/create-element.js +3 -2
  86. package/dist/runtime/create-element.js.map +1 -1
  87. package/dist/runtime/diff-dom.js +294 -219
  88. package/dist/runtime/diff-dom.js.map +1 -1
  89. package/dist/runtime/diff-props.js +3 -3
  90. package/dist/runtime/dom.d.ts +12 -0
  91. package/dist/runtime/element-function.d.ts +3 -0
  92. package/dist/runtime/element-function.js +2 -0
  93. package/dist/runtime/element-function.js.map +1 -0
  94. package/dist/runtime/form-navigation.d.ts +25 -0
  95. package/dist/runtime/form-navigation.js +132 -0
  96. package/dist/runtime/form-navigation.js.map +1 -0
  97. package/dist/runtime/frame-resolution.d.ts +5 -0
  98. package/dist/runtime/frame-resolution.js +10 -0
  99. package/dist/runtime/frame-resolution.js.map +1 -0
  100. package/dist/runtime/frame.d.ts +58 -15
  101. package/dist/runtime/frame.js +367 -114
  102. package/dist/runtime/frame.js.map +1 -1
  103. package/dist/runtime/jsx.d.ts +1 -1
  104. package/dist/runtime/jsx.js +1 -1
  105. package/dist/runtime/jsx.js.map +1 -1
  106. package/dist/runtime/key.d.ts +1 -0
  107. package/dist/runtime/key.js +2 -0
  108. package/dist/runtime/key.js.map +1 -0
  109. package/dist/runtime/mixins/attrs-mixin.js +2 -2
  110. package/dist/runtime/mixins/link-mixin.js +4 -3
  111. package/dist/runtime/mixins/link-mixin.js.map +1 -1
  112. package/dist/runtime/mixins/mixin.d.ts +15 -10
  113. package/dist/runtime/mixins/mixin.js +4 -4
  114. package/dist/runtime/mixins/mixin.js.map +1 -1
  115. package/dist/runtime/mixins/on-mixin.js +1 -1
  116. package/dist/runtime/mixins/ref-mixin.js +1 -1
  117. package/dist/runtime/navigation.d.ts +4 -1
  118. package/dist/runtime/navigation.js +157 -32
  119. package/dist/runtime/navigation.js.map +1 -1
  120. package/dist/runtime/reconcile.d.ts +11 -10
  121. package/dist/runtime/reconcile.js +557 -423
  122. package/dist/runtime/reconcile.js.map +1 -1
  123. package/dist/runtime/refresh.d.ts +28 -0
  124. package/dist/runtime/refresh.js +31 -0
  125. package/dist/runtime/refresh.js.map +1 -0
  126. package/dist/runtime/render.js +1 -1
  127. package/dist/runtime/render.js.map +1 -1
  128. package/dist/runtime/run.d.ts +3 -1
  129. package/dist/runtime/run.js +15 -7
  130. package/dist/runtime/run.js.map +1 -1
  131. package/dist/runtime/scheduler.js +8 -16
  132. package/dist/runtime/scheduler.js.map +1 -1
  133. package/dist/runtime/to-vnode.d.ts +2 -2
  134. package/dist/runtime/to-vnode.js +68 -20
  135. package/dist/runtime/to-vnode.js.map +1 -1
  136. package/dist/runtime/vdom.d.ts +4 -2
  137. package/dist/runtime/vdom.js +89 -41
  138. package/dist/runtime/vdom.js.map +1 -1
  139. package/dist/runtime/vnode.d.ts +138 -67
  140. package/dist/runtime/vnode.js +17 -12
  141. package/dist/runtime/vnode.js.map +1 -1
  142. package/dist/select/index.d.ts +19 -0
  143. package/dist/select/index.js +95 -0
  144. package/dist/select/index.js.map +1 -0
  145. package/dist/select/keydown.js.map +1 -0
  146. package/dist/{components/select/select.d.ts → select/primitives.d.ts} +5 -7
  147. package/dist/{components/select/select.js → select/primitives.js} +11 -63
  148. package/dist/select/primitives.js.map +1 -0
  149. package/dist/server/stream.js +22 -29
  150. package/dist/server/stream.js.map +1 -1
  151. package/dist/shared/focus-styles.d.ts +1 -0
  152. package/dist/shared/focus-styles.js +2 -0
  153. package/dist/shared/focus-styles.js.map +1 -0
  154. package/dist/shared/icons.d.ts +9 -0
  155. package/dist/shared/icons.js +42 -0
  156. package/dist/shared/icons.js.map +1 -0
  157. package/dist/shared/listbox-popover-styles.d.ts +6 -0
  158. package/dist/shared/listbox-popover-styles.js +137 -0
  159. package/dist/shared/listbox-popover-styles.js.map +1 -0
  160. package/dist/shared/style-values.d.ts +78 -0
  161. package/dist/shared/style-values.js +88 -0
  162. package/dist/shared/style-values.js.map +1 -0
  163. package/dist/{interactions/typeahead/typeahead-mixin.js → shared/typeahead.js} +1 -1
  164. package/dist/shared/typeahead.js.map +1 -0
  165. package/dist/shared/wait-for-css-transition.js.map +1 -0
  166. package/dist/shared/wait.js.map +1 -0
  167. package/dist/style/css-mixin.js +3 -3
  168. package/dist/style/index.js +2 -2
  169. package/dist/style/style.js +25 -6
  170. package/dist/style/style.js.map +1 -1
  171. package/dist/style/stylesheet.d.ts +0 -1
  172. package/dist/style/stylesheet.js +13 -54
  173. package/dist/style/stylesheet.js.map +1 -1
  174. package/dist/tabs/index.d.ts +32 -0
  175. package/dist/tabs/index.js +157 -0
  176. package/dist/tabs/index.js.map +1 -0
  177. package/dist/tabs/primitives.d.ts +57 -0
  178. package/dist/tabs/primitives.js +238 -0
  179. package/dist/tabs/primitives.js.map +1 -0
  180. package/dist/test.js +1 -1
  181. package/dist/toggle/index.d.ts +9 -0
  182. package/dist/toggle/index.js +108 -0
  183. package/dist/toggle/index.js.map +1 -0
  184. package/dist/toggle/primitives.d.ts +29 -0
  185. package/dist/toggle/primitives.js +127 -0
  186. package/dist/toggle/primitives.js.map +1 -0
  187. package/package.json +81 -49
  188. package/src/{components/accordion → accordion}/README.md +50 -14
  189. package/src/accordion/index.tsx +285 -0
  190. package/src/accordion/primitives.tsx +512 -0
  191. package/src/{components/anchor → anchor}/README.md +37 -2
  192. package/src/animation/animate-mixins.ts +3 -3
  193. package/src/animation/demos/color-interpolation.tsx +1 -1
  194. package/src/animation/demos/reordering.tsx +9 -6
  195. package/src/{components/breadcrumbs → breadcrumbs}/README.md +4 -4
  196. package/src/{components/breadcrumbs/breadcrumbs.tsx → breadcrumbs/index.tsx} +18 -18
  197. package/src/button/README.md +44 -0
  198. package/src/button/index.ts +168 -0
  199. package/src/checkbox/README.md +59 -0
  200. package/src/checkbox/index.ts +164 -0
  201. package/src/{components/combobox → combobox}/README.md +58 -9
  202. package/src/combobox/index.tsx +112 -0
  203. package/src/{components/combobox/combobox.tsx → combobox/primitives.tsx} +5 -91
  204. package/src/dev/refresh.ts +1 -0
  205. package/src/index.ts +1 -1
  206. package/src/input/README.md +52 -0
  207. package/src/input/index.ts +147 -0
  208. package/src/{components/listbox → listbox}/README.md +9 -41
  209. package/src/{components/listbox/listbox.ts → listbox/index.ts} +2 -87
  210. package/src/{components/menu → menu}/README.md +55 -14
  211. package/src/menu/index.tsx +354 -0
  212. package/src/{components/menu/menu.tsx → menu/primitives.tsx} +99 -413
  213. package/src/{components/popover → popover}/README.md +20 -39
  214. package/src/{components/popover/popover.ts → popover/index.ts} +3 -57
  215. package/src/{utils → popover}/scroll-lock.ts +0 -28
  216. package/src/radio/README.md +53 -0
  217. package/src/radio/index.ts +101 -0
  218. package/src/runtime/client-entry-boundary.ts +54 -0
  219. package/src/runtime/component.ts +65 -16
  220. package/src/runtime/core/attributes.ts +35 -1
  221. package/src/runtime/core/children.ts +24 -2
  222. package/src/runtime/core/vnode.ts +25 -4
  223. package/src/runtime/create-element.ts +6 -5
  224. package/src/runtime/demos/readme.demo.tsx +20 -18
  225. package/src/runtime/diff-dom.ts +358 -243
  226. package/src/runtime/dom.ts +331 -214
  227. package/src/runtime/element-function.ts +1 -0
  228. package/src/runtime/event-listeners.ts +1 -1
  229. package/src/runtime/form-navigation.ts +184 -0
  230. package/src/runtime/frame-resolution.ts +13 -0
  231. package/src/runtime/frame.ts +482 -124
  232. package/src/runtime/jsx.ts +3 -5
  233. package/src/runtime/key.ts +1 -0
  234. package/src/runtime/mixins/link-mixin.ts +1 -0
  235. package/src/runtime/mixins/mixin.ts +21 -18
  236. package/src/runtime/navigation.ts +204 -30
  237. package/src/runtime/reconcile.ts +769 -760
  238. package/src/runtime/refresh.ts +46 -0
  239. package/src/runtime/run.ts +12 -2
  240. package/src/runtime/scheduler.ts +9 -29
  241. package/src/runtime/to-vnode.ts +85 -23
  242. package/src/runtime/vdom.ts +91 -69
  243. package/src/runtime/vnode.ts +192 -88
  244. package/src/{components/select → select}/README.md +29 -19
  245. package/src/select/index.tsx +159 -0
  246. package/src/{components/select/select.tsx → select/primitives.tsx} +10 -98
  247. package/src/server/stream.ts +25 -31
  248. package/src/shared/focus-styles.ts +2 -0
  249. package/src/shared/icons.tsx +62 -0
  250. package/src/shared/listbox-popover-styles.ts +146 -0
  251. package/src/shared/style-values.ts +165 -0
  252. package/src/style/style.ts +25 -6
  253. package/src/style/stylesheet.ts +32 -57
  254. package/src/tabs/README.md +141 -0
  255. package/src/tabs/index.tsx +245 -0
  256. package/src/tabs/primitives.ts +365 -0
  257. package/src/test/README.md +151 -60
  258. package/src/toggle/README.md +56 -0
  259. package/src/toggle/index.tsx +136 -0
  260. package/src/toggle/primitives.ts +192 -0
  261. package/dist/animation/demos/animation.demo.d.ts +0 -5
  262. package/dist/animation/demos/animation.demo.js +0 -92
  263. package/dist/animation/demos/animation.demo.js.map +0 -1
  264. package/dist/animation/demos/spring.demo.d.ts +0 -6
  265. package/dist/animation/demos/spring.demo.js +0 -304
  266. package/dist/animation/demos/spring.demo.js.map +0 -1
  267. package/dist/components/accordion/accordion.d.ts +0 -92
  268. package/dist/components/accordion/accordion.js +0 -335
  269. package/dist/components/accordion/accordion.js.map +0 -1
  270. package/dist/components/accordion/demos/card.demo.d.ts +0 -7
  271. package/dist/components/accordion/demos/card.demo.js +0 -59
  272. package/dist/components/accordion/demos/card.demo.js.map +0 -1
  273. package/dist/components/accordion/demos/multiple.demo.d.ts +0 -7
  274. package/dist/components/accordion/demos/multiple.demo.js +0 -20
  275. package/dist/components/accordion/demos/multiple.demo.js.map +0 -1
  276. package/dist/components/accordion/demos/overview.demo.d.ts +0 -7
  277. package/dist/components/accordion/demos/overview.demo.js +0 -20
  278. package/dist/components/accordion/demos/overview.demo.js.map +0 -1
  279. package/dist/components/anchor/anchor.js.map +0 -1
  280. package/dist/components/breadcrumbs/basic.demo.d.ts +0 -6
  281. package/dist/components/breadcrumbs/basic.demo.js +0 -15
  282. package/dist/components/breadcrumbs/basic.demo.js.map +0 -1
  283. package/dist/components/breadcrumbs/breadcrumbs.js.map +0 -1
  284. package/dist/components/breadcrumbs/separator.demo.d.ts +0 -6
  285. package/dist/components/breadcrumbs/separator.demo.js +0 -15
  286. package/dist/components/breadcrumbs/separator.demo.js.map +0 -1
  287. package/dist/components/button/button.d.ts +0 -105
  288. package/dist/components/button/button.js +0 -207
  289. package/dist/components/button/button.js.map +0 -1
  290. package/dist/components/button/demos/aliases.demo.d.ts +0 -7
  291. package/dist/components/button/demos/aliases.demo.js +0 -19
  292. package/dist/components/button/demos/aliases.demo.js.map +0 -1
  293. package/dist/components/button/demos/basic.demo.d.ts +0 -7
  294. package/dist/components/button/demos/basic.demo.js +0 -20
  295. package/dist/components/button/demos/basic.demo.js.map +0 -1
  296. package/dist/components/button/demos/states.demo.d.ts +0 -7
  297. package/dist/components/button/demos/states.demo.js +0 -30
  298. package/dist/components/button/demos/states.demo.js.map +0 -1
  299. package/dist/components/combobox/combobox.js.map +0 -1
  300. package/dist/components/combobox/overview.demo.d.ts +0 -7
  301. package/dist/components/combobox/overview.demo.js +0 -154
  302. package/dist/components/combobox/overview.demo.js.map +0 -1
  303. package/dist/components/glyph/glyph.d.ts +0 -14
  304. package/dist/components/glyph/glyph.js +0 -65
  305. package/dist/components/glyph/glyph.js.map +0 -1
  306. package/dist/components/listbox/listbox.js.map +0 -1
  307. package/dist/components/listbox/overview.demo.d.ts +0 -7
  308. package/dist/components/listbox/overview.demo.js +0 -65
  309. package/dist/components/listbox/overview.demo.js.map +0 -1
  310. package/dist/components/menu/demos/bubbling.demo.d.ts +0 -6
  311. package/dist/components/menu/demos/bubbling.demo.js +0 -16
  312. package/dist/components/menu/demos/bubbling.demo.js.map +0 -1
  313. package/dist/components/menu/demos/context-trigger.demo.d.ts +0 -7
  314. package/dist/components/menu/demos/context-trigger.demo.js +0 -87
  315. package/dist/components/menu/demos/context-trigger.demo.js.map +0 -1
  316. package/dist/components/menu/demos/overview.demo.d.ts +0 -7
  317. package/dist/components/menu/demos/overview.demo.js +0 -33
  318. package/dist/components/menu/demos/overview.demo.js.map +0 -1
  319. package/dist/components/menu/hover-aim.js.map +0 -1
  320. package/dist/components/menu/menu.js.map +0 -1
  321. package/dist/components/popover/overview.demo.d.ts +0 -7
  322. package/dist/components/popover/overview.demo.js +0 -65
  323. package/dist/components/popover/overview.demo.js.map +0 -1
  324. package/dist/components/popover/popover.js.map +0 -1
  325. package/dist/components/select/deconstructed.demo.d.ts +0 -7
  326. package/dist/components/select/deconstructed.demo.js +0 -54
  327. package/dist/components/select/deconstructed.demo.js.map +0 -1
  328. package/dist/components/select/overview.demo.d.ts +0 -6
  329. package/dist/components/select/overview.demo.js +0 -28
  330. package/dist/components/select/overview.demo.js.map +0 -1
  331. package/dist/components/select/select.js.map +0 -1
  332. package/dist/components/separator/separator.d.ts +0 -2
  333. package/dist/components/separator/separator.js +0 -15
  334. package/dist/components/separator/separator.js.map +0 -1
  335. package/dist/components/tabs/tabs.d.ts +0 -78
  336. package/dist/components/tabs/tabs.js +0 -339
  337. package/dist/components/tabs/tabs.js.map +0 -1
  338. package/dist/interactions/keydown/keydown.js.map +0 -1
  339. package/dist/interactions/outside-click/outside-click-mixin.js.map +0 -1
  340. package/dist/interactions/typeahead/typeahead-mixin.js.map +0 -1
  341. package/dist/runtime/demos/basic.demo.d.ts +0 -6
  342. package/dist/runtime/demos/basic.demo.js +0 -16
  343. package/dist/runtime/demos/basic.demo.js.map +0 -1
  344. package/dist/runtime/demos/controlled-uncontrolled-values.demo.d.ts +0 -6
  345. package/dist/runtime/demos/controlled-uncontrolled-values.demo.js +0 -77
  346. package/dist/runtime/demos/controlled-uncontrolled-values.demo.js.map +0 -1
  347. package/dist/runtime/demos/keyed-list.demo.d.ts +0 -6
  348. package/dist/runtime/demos/keyed-list.demo.js +0 -62
  349. package/dist/runtime/demos/keyed-list.demo.js.map +0 -1
  350. package/dist/runtime/demos/readme.demo.d.ts +0 -5
  351. package/dist/runtime/demos/readme.demo.js +0 -396
  352. package/dist/runtime/demos/readme.demo.js.map +0 -1
  353. package/dist/theme/contract.d.ts +0 -61
  354. package/dist/theme/contract.js +0 -131
  355. package/dist/theme/contract.js.map +0 -1
  356. package/dist/theme/glyph-contract.d.ts +0 -11
  357. package/dist/theme/glyph-contract.js +0 -34
  358. package/dist/theme/glyph-contract.js.map +0 -1
  359. package/dist/theme/presets/rmx-01/glyphs.d.ts +0 -2
  360. package/dist/theme/presets/rmx-01/glyphs.js +0 -252
  361. package/dist/theme/presets/rmx-01/glyphs.js.map +0 -1
  362. package/dist/theme/presets/rmx-01/index.d.ts +0 -4
  363. package/dist/theme/presets/rmx-01/index.js +0 -119
  364. package/dist/theme/presets/rmx-01/index.js.map +0 -1
  365. package/dist/theme/runtime.d.ts +0 -2
  366. package/dist/theme/runtime.js +0 -84
  367. package/dist/theme/runtime.js.map +0 -1
  368. package/dist/theme/theme.d.ts +0 -6
  369. package/dist/theme/theme.js +0 -5
  370. package/dist/theme/theme.js.map +0 -1
  371. package/dist/utils/flash-attribute.js.map +0 -1
  372. package/dist/utils/scroll-lock.d.ts +0 -3
  373. package/dist/utils/scroll-lock.js.map +0 -1
  374. package/dist/utils/wait-for-css-transition.js.map +0 -1
  375. package/dist/utils/wait.js.map +0 -1
  376. package/src/animation/demos/animation.demo.tsx +0 -194
  377. package/src/animation/demos/spring.demo.tsx +0 -385
  378. package/src/components/accordion/accordion.tsx +0 -565
  379. package/src/components/accordion/demos/card.demo.tsx +0 -114
  380. package/src/components/accordion/demos/multiple.demo.tsx +0 -57
  381. package/src/components/accordion/demos/overview.demo.tsx +0 -57
  382. package/src/components/breadcrumbs/basic.demo.tsx +0 -18
  383. package/src/components/breadcrumbs/separator.demo.tsx +0 -19
  384. package/src/components/button/README.md +0 -44
  385. package/src/components/button/button.tsx +0 -286
  386. package/src/components/button/demos/aliases.demo.tsx +0 -28
  387. package/src/components/button/demos/basic.demo.tsx +0 -31
  388. package/src/components/button/demos/states.demo.tsx +0 -53
  389. package/src/components/combobox/overview.demo.tsx +0 -200
  390. package/src/components/glyph/README.md +0 -72
  391. package/src/components/glyph/glyph.tsx +0 -110
  392. package/src/components/listbox/overview.demo.tsx +0 -102
  393. package/src/components/menu/demos/bubbling.demo.tsx +0 -35
  394. package/src/components/menu/demos/context-trigger.demo.tsx +0 -133
  395. package/src/components/menu/demos/overview.demo.tsx +0 -77
  396. package/src/components/popover/overview.demo.tsx +0 -144
  397. package/src/components/select/deconstructed.demo.tsx +0 -96
  398. package/src/components/select/overview.demo.tsx +0 -52
  399. package/src/components/separator/separator.ts +0 -19
  400. package/src/components/tabs/README.md +0 -105
  401. package/src/components/tabs/tabs.tsx +0 -504
  402. package/src/runtime/demos/basic.demo.tsx +0 -21
  403. package/src/runtime/demos/controlled-uncontrolled-values.demo.tsx +0 -177
  404. package/src/runtime/demos/keyed-list.demo.tsx +0 -94
  405. package/src/theme/README.md +0 -103
  406. package/src/theme/contract.ts +0 -215
  407. package/src/theme/glyph-contract.ts +0 -59
  408. package/src/theme/presets/rmx-01/glyphs.tsx +0 -308
  409. package/src/theme/presets/rmx-01/index.ts +0 -123
  410. package/src/theme/runtime.ts +0 -119
  411. package/src/theme/theme.ts +0 -15
  412. package/src/utils/scroll-lock/README.md +0 -33
  413. /package/dist/{components/anchor/anchor.d.ts → anchor/index.d.ts} +0 -0
  414. /package/dist/{components/breadcrumbs/breadcrumbs.d.ts → breadcrumbs/index.d.ts} +0 -0
  415. /package/dist/{utils → listbox}/flash-attribute.d.ts +0 -0
  416. /package/dist/{utils → listbox}/flash-attribute.js +0 -0
  417. /package/dist/{components/menu → menu}/hover-aim.d.ts +0 -0
  418. /package/dist/{components/menu → menu}/hover-aim.js +0 -0
  419. /package/dist/{interactions/outside-click/outside-click-mixin.d.ts → popover/outside-click.d.ts} +0 -0
  420. /package/dist/{interactions/keydown → select}/keydown.d.ts +0 -0
  421. /package/dist/{interactions/keydown → select}/keydown.js +0 -0
  422. /package/dist/{interactions/typeahead/typeahead-mixin.d.ts → shared/typeahead.d.ts} +0 -0
  423. /package/dist/{utils → shared}/wait-for-css-transition.d.ts +0 -0
  424. /package/dist/{utils → shared}/wait-for-css-transition.js +0 -0
  425. /package/dist/{utils → shared}/wait.d.ts +0 -0
  426. /package/dist/{utils → shared}/wait.js +0 -0
  427. /package/src/{components/anchor/anchor.ts → anchor/index.ts} +0 -0
  428. /package/src/{utils → listbox}/flash-attribute.ts +0 -0
  429. /package/src/{components/menu → menu}/hover-aim.ts +0 -0
  430. /package/src/{interactions/outside-click/outside-click-mixin.ts → popover/outside-click.ts} +0 -0
  431. /package/src/{interactions/keydown → select}/keydown.ts +0 -0
  432. /package/src/{interactions/typeahead/typeahead-mixin.ts → shared/typeahead.ts} +0 -0
  433. /package/src/{utils → shared}/wait-for-css-transition.ts +0 -0
  434. /package/src/{utils → shared}/wait.ts +0 -0
@@ -1,40 +1,45 @@
1
- import { Fragment, Frame } from "./component.js";
2
- import { isRemixElement } from "./core/vnode.js";
1
+ import { isRemixElement } from './core/vnode.js';
3
2
  export { isRemixElement };
4
3
  export const TEXT_NODE = Symbol('TEXT_NODE');
5
4
  export const NON_RENDER_NODE = Symbol('NON_RENDER_NODE');
6
5
  export const ROOT_VNODE = Symbol('ROOT_VNODE');
7
6
  export function isFragmentNode(node) {
8
- return node.type === Fragment;
7
+ return node.kind === 'fragment';
9
8
  }
10
9
  export function isTextNode(node) {
11
- return node.type === TEXT_NODE;
10
+ return node.kind === 'text';
12
11
  }
13
12
  export function isNonRenderNode(node) {
14
- return node.type === NON_RENDER_NODE;
13
+ return node.kind === 'empty';
15
14
  }
16
15
  export function isCommittedTextNode(node) {
17
- return isTextNode(node) && node._dom instanceof Text;
16
+ return node.kind === 'text';
18
17
  }
19
18
  export function isHostNode(node) {
20
- return typeof node.type === 'string';
19
+ return node.kind === 'host';
21
20
  }
22
21
  export function isCommittedHostNode(node) {
23
- return isHostNode(node) && node._dom instanceof Element;
22
+ return node.kind === 'host';
24
23
  }
25
24
  export function isComponentNode(node) {
26
- return typeof node.type === 'function' && node.type !== Frame;
25
+ return node.kind === 'component';
27
26
  }
28
27
  export function isCommittedComponentNode(node) {
29
- return isComponentNode(node) && node._content !== undefined;
28
+ return node.kind === 'component' && '_content' in node;
29
+ }
30
+ export function isFrameNode(node) {
31
+ return node.kind === 'frame';
32
+ }
33
+ export function isCommittedFrameNode(node) {
34
+ return node.kind === 'frame';
30
35
  }
31
36
  export function findContextFromAncestry(node, type) {
32
37
  let current = node;
33
38
  while (current) {
34
- if (current.type === type && isComponentNode(current)) {
39
+ if (current.kind === 'component' && current.type === type) {
35
40
  return current._handle.getContextValue();
36
41
  }
37
- current = current._parent;
42
+ current = '_parent' in current ? current._parent : undefined;
38
43
  }
39
44
  return undefined;
40
45
  }
@@ -1 +1 @@
1
- {"version":3,"file":"vnode.js","sourceRoot":"","sources":["../../src/runtime/vnode.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAGhD,OAAO,EAAE,cAAc,EAAE,CAAA;AAEzB,MAAM,CAAC,MAAM,SAAS,GAAG,MAAM,CAAC,WAAW,CAAC,CAAA;AAC5C,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAA;AACxD,MAAM,CAAC,MAAM,UAAU,GAAG,MAAM,CAAC,YAAY,CAAC,CAAA;AA6F9C,MAAM,UAAU,cAAc,CAAC,IAAW;IACxC,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAA;AAC/B,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAW;IACpC,OAAO,IAAI,CAAC,IAAI,KAAK,SAAS,CAAA;AAChC,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAW;IACzC,OAAO,IAAI,CAAC,IAAI,KAAK,eAAe,CAAA;AACtC,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,IAAW;IAC7C,OAAO,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,YAAY,IAAI,CAAA;AACtD,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAW;IACpC,OAAO,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAA;AACtC,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,IAAW;IAC7C,OAAO,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,YAAY,OAAO,CAAA;AACzD,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAW;IACzC,OAAO,OAAO,IAAI,CAAC,IAAI,KAAK,UAAU,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAA;AAC/D,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,IAAW;IAClD,OAAO,eAAe,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,CAAA;AAC7D,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,IAAW,EAAE,IAAe;IAClE,IAAI,OAAO,GAAsB,IAAI,CAAA;IACrC,OAAO,OAAO,EAAE,CAAC;QACf,IAAI,OAAO,CAAC,IAAI,KAAK,IAAI,IAAI,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC;YACtD,OAAO,OAAO,CAAC,OAAO,CAAC,eAAe,EAAE,CAAA;QAC1C,CAAC;QACD,OAAO,GAAG,OAAO,CAAC,OAAO,CAAA;IAC3B,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC"}
1
+ {"version":3,"file":"vnode.js","sourceRoot":"","sources":["../../src/runtime/vnode.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAUhD,OAAO,EAAE,cAAc,EAAE,CAAA;AAEzB,MAAM,CAAC,MAAM,SAAS,GAAG,MAAM,CAAC,WAAW,CAAC,CAAA;AAC5C,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAA;AACxD,MAAM,CAAC,MAAM,UAAU,GAAG,MAAM,CAAC,YAAY,CAAC,CAAA;AAqL9C,MAAM,UAAU,cAAc,CAAC,IAAW;IACxC,OAAO,IAAI,CAAC,IAAI,KAAK,UAAU,CAAA;AACjC,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAW;IACpC,OAAO,IAAI,CAAC,IAAI,KAAK,MAAM,CAAA;AAC7B,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAW;IACzC,OAAO,IAAI,CAAC,IAAI,KAAK,OAAO,CAAA;AAC9B,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,IAAoB;IACtD,OAAO,IAAI,CAAC,IAAI,KAAK,MAAM,CAAA;AAC7B,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAW;IACpC,OAAO,IAAI,CAAC,IAAI,KAAK,MAAM,CAAA;AAC7B,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,IAAoB;IACtD,OAAO,IAAI,CAAC,IAAI,KAAK,MAAM,CAAA;AAC7B,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,IAAW;IAEX,OAAO,IAAI,CAAC,IAAI,KAAK,WAAW,CAAA;AAClC,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,IAAW;IAClD,OAAO,IAAI,CAAC,IAAI,KAAK,WAAW,IAAI,UAAU,IAAI,IAAI,CAAA;AACxD,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAW;IACrC,OAAO,IAAI,CAAC,IAAI,KAAK,OAAO,CAAA;AAC9B,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,IAAoB;IACvD,OAAO,IAAI,CAAC,IAAI,KAAK,OAAO,CAAA;AAC9B,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,IAAiB,EAAE,IAAqB;IAC9E,IAAI,OAAO,GAA4B,IAAI,CAAA;IAC3C,OAAO,OAAO,EAAE,CAAC;QACf,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,IAAI,OAAO,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;YAC1D,OAAO,OAAO,CAAC,OAAO,CAAC,eAAe,EAAE,CAAA;QAC1C,CAAC;QACD,OAAO,GAAG,SAAS,IAAI,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAA;IAC9D,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC"}
@@ -0,0 +1,19 @@
1
+ import type { CSSMixinDescriptor, Handle, Props, RemixNode } from '@remix-run/ui';
2
+ import type { SearchValue } from '../shared/typeahead.ts';
3
+ export interface SelectProps extends Omit<Props<'button'>, 'children' | 'name'> {
4
+ children?: RemixNode;
5
+ defaultLabel: string;
6
+ defaultValue?: string | null;
7
+ disabled?: boolean;
8
+ name?: string;
9
+ }
10
+ export type SelectOptionProps = Props<'div'> & {
11
+ children?: RemixNode;
12
+ disabled?: boolean;
13
+ label: string;
14
+ textValue?: SearchValue;
15
+ value: string;
16
+ };
17
+ export declare const triggerStyle: CSSMixinDescriptor;
18
+ export declare function Select(handle: Handle<SelectProps>): () => RemixNode;
19
+ export declare function Option(handle: Handle<SelectOptionProps>): () => RemixNode;
@@ -0,0 +1,95 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "@remix-run/ui/jsx-runtime";
2
+ import { createElement, css } from '@remix-run/ui';
3
+ import * as popover from '@remix-run/ui/popover';
4
+ import * as select from '@remix-run/ui/select/primitives';
5
+ import { CheckIcon, ChevronVerticalIcon } from '../shared/icons.js';
6
+ import { listboxIndicatorStyle, listboxLabelStyle, listboxListStyle, listboxOptionStyle, popoverSurfaceStyle, } from '../shared/listbox-popover-styles.js';
7
+ const selectTriggerShadow = '0 2px 3px -1px rgba(0, 0, 0, 0.04), 0 3px 4px -1.5px rgba(0, 0, 0, 0.04), 0 4px 5px -2px rgba(0, 0, 0, 0.04), 0 0 0 1px light-dark(rgba(0, 0, 0, 0.12), rgba(255, 255, 255, 0.2))';
8
+ const selectTriggerFocusShadow = '0 2px 3px -1px rgba(0, 0, 0, 0.04), 0 3px 4px -1.5px rgba(0, 0, 0, 0.04), 0 4px 5px -2px rgba(0, 0, 0, 0.04), 0 0 0 1px light-dark(#3573F6, #6eaaff), 0 0 0 4px light-dark(rgba(53, 115, 246, 0.1), rgba(110, 170, 255, 0.18)), 0 6px 32px 4px light-dark(rgba(53, 115, 246, 0.08), rgba(110, 170, 255, 0.14)), inset 0 0 8px 1px light-dark(rgba(53, 115, 246, 0.05), rgba(110, 170, 255, 0.1))';
9
+ const selectTriggerCss = css({
10
+ appearance: 'none',
11
+ margin: 0,
12
+ boxSizing: 'border-box',
13
+ width: '100%',
14
+ minWidth: 0,
15
+ height: '32px',
16
+ paddingBlock: '6px',
17
+ paddingInlineStart: '12px',
18
+ paddingInlineEnd: '8px',
19
+ display: 'flex',
20
+ alignItems: 'center',
21
+ justifyContent: 'flex-start',
22
+ gap: '6px',
23
+ border: 0,
24
+ borderRadius: '8px',
25
+ background: 'light-dark(#FFFFFF, #1a1a1a)',
26
+ boxShadow: selectTriggerShadow,
27
+ color: 'light-dark(#101010, #ececec)',
28
+ fontFamily: '"Inter Variable", Inter, ui-sans-serif, system-ui, sans-serif',
29
+ fontStyle: 'normal',
30
+ fontWeight: 400,
31
+ fontSize: '13px',
32
+ lineHeight: '20px',
33
+ fontFeatureSettings: '"ss01" on, "cv01" on',
34
+ letterSpacing: 0,
35
+ textAlign: 'left',
36
+ textShadow: '0 1px 0 light-dark(#FFFFFF, rgb(0 0 0 / 0.35))',
37
+ whiteSpace: 'nowrap',
38
+ '&:hover, &:focus-visible, &[aria-expanded="true"], &[aria-expanded="true"]:hover, &[aria-expanded="true"]:focus-visible': {
39
+ background: 'light-dark(#FFFFFF, #1a1a1a)',
40
+ color: 'light-dark(#101010, #ececec)',
41
+ },
42
+ '&:active': {
43
+ background: 'light-dark(#FFFFFF, #1a1a1a)',
44
+ },
45
+ '&:focus-visible': {
46
+ outline: 0,
47
+ boxShadow: selectTriggerFocusShadow,
48
+ },
49
+ '&[aria-expanded="true"]': {
50
+ boxShadow: selectTriggerFocusShadow,
51
+ },
52
+ '&:disabled': {
53
+ opacity: 0.55,
54
+ },
55
+ });
56
+ const triggerLabelCss = css({
57
+ display: 'inline-flex',
58
+ alignItems: 'center',
59
+ flex: '1 1 auto',
60
+ minWidth: 0,
61
+ overflow: 'hidden',
62
+ textOverflow: 'ellipsis',
63
+ });
64
+ const triggerIconCss = css({
65
+ display: 'inline-flex',
66
+ alignItems: 'center',
67
+ justifyContent: 'center',
68
+ width: '16px',
69
+ height: '16px',
70
+ color: 'light-dark(#707070, #b3b3b3)',
71
+ flex: 'none',
72
+ '& > svg': {
73
+ display: 'block',
74
+ width: '100%',
75
+ height: '100%',
76
+ },
77
+ });
78
+ export const triggerStyle = selectTriggerCss;
79
+ function SelectLabel(handle) {
80
+ let context = handle.context.get(select.Context);
81
+ return () => _jsx("span", { mix: triggerLabelCss, children: context.displayedLabel });
82
+ }
83
+ export function Select(handle) {
84
+ return () => {
85
+ let { children, defaultLabel, defaultValue, disabled, name, mix, ...buttonProps } = handle.props;
86
+ return (_jsxs(select.Context, { defaultLabel: defaultLabel, defaultValue: defaultValue, disabled: disabled, name: name, children: [_jsxs("button", { type: "button", ...buttonProps, mix: [triggerStyle, select.trigger(), mix], children: [_jsx(SelectLabel, {}), _jsx(ChevronVerticalIcon, { mix: triggerIconCss })] }), _jsx(popover.Context, { children: _jsx("div", { mix: [popoverSurfaceStyle, select.popover()], children: _jsx("div", { mix: [listboxListStyle, select.list()], children: children }) }) }), name && _jsx("input", { mix: select.hiddenInput() })] }));
87
+ };
88
+ }
89
+ export function Option(handle) {
90
+ return () => {
91
+ let { label, value, disabled, textValue, children, mix, ...divProps } = handle.props;
92
+ return (_jsxs("div", { ...divProps, mix: [listboxOptionStyle, select.option({ value, label, disabled, textValue }), mix], children: [_jsx(CheckIcon, { mix: listboxIndicatorStyle }), _jsx("span", { mix: listboxLabelStyle, children: children ?? label })] }));
93
+ };
94
+ }
95
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/select/index.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keydown.js","sourceRoot":"","sources":["../../src/select/keydown.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,eAAe,CAAA;AAE/C,MAAM,CAAC,MAAM,SAAS,GAAG,WAAW,CAIlC,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,CACrB,EAAE,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE;IACtB,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC;QACtB,KAAK,CAAC,cAAc,EAAE,CAAA;QACtB,OAAO,CAAC,KAAK,CAAC,CAAA;IAChB,CAAC;AACH,CAAC,CAAC,CACL,CAAA"}
@@ -1,7 +1,7 @@
1
- import { on, type CSSMixinDescriptor, type Dispatched, type ElementProps, type Handle, type MixinFactory, type Props, type RemixNode } from '@remix-run/ui';
2
- import * as listbox from '../listbox/listbox.ts';
3
- import * as popover from '../popover/popover.ts';
4
- declare const SELECT_CHANGE_EVENT: "rmx:select-change";
1
+ import { on, type Dispatched, type ElementProps, type Handle, type MixinFactory, type Props, type RemixNode } from '@remix-run/ui';
2
+ import * as listbox from '../listbox/index.ts';
3
+ import * as popover from '../popover/index.ts';
4
+ declare const SELECT_CHANGE_EVENT: 'rmx:select-change';
5
5
  type SelectChangeHandler<target extends HTMLElement> = (event: Dispatched<SelectChangeEvent, target>, signal: AbortSignal) => void | Promise<void>;
6
6
  declare global {
7
7
  interface HTMLElementEventMap {
@@ -23,6 +23,7 @@ export interface SelectContextProps {
23
23
  defaultLabel: string;
24
24
  defaultValue?: string | null;
25
25
  disabled?: boolean;
26
+ labelSwapDelayMs?: number;
26
27
  name?: string;
27
28
  }
28
29
  export interface SelectProps extends Omit<Props<'button'>, 'children' | 'name'> {
@@ -55,7 +56,6 @@ interface SelectContextValue {
55
56
  }
56
57
  declare function SelectProvider(handle: Handle<SelectContextProps, SelectContextValue>): () => RemixNode;
57
58
  declare const popoverMixin: MixinFactory<HTMLElement, [], ElementProps>;
58
- export declare const triggerStyle: CSSMixinDescriptor;
59
59
  export declare const Context: typeof SelectProvider;
60
60
  export declare const hiddenInput: MixinFactory<HTMLInputElement, [], ElementProps>;
61
61
  export declare const list: MixinFactory<HTMLElement, [], ElementProps>;
@@ -63,5 +63,3 @@ export declare const option: MixinFactory<HTMLElement, [option: Omit<listbox.Lis
63
63
  export { popoverMixin as popover };
64
64
  export declare const trigger: MixinFactory<HTMLButtonElement, [], ElementProps>;
65
65
  export declare function onSelectChange<target extends HTMLElement>(handler: SelectChangeHandler<target>, captureBoolean?: boolean): ReturnType<typeof on<target, typeof SELECT_CHANGE_EVENT>>;
66
- export declare function Select(handle: Handle<SelectProps>): () => RemixNode;
67
- export declare function Option(handle: Handle<SelectOptionProps>): () => RemixNode;
@@ -1,16 +1,13 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "@remix-run/ui/jsx-runtime";
2
- import { attrs, createElement, createMixin, css, on, ref, } from '@remix-run/ui';
3
- import * as button from "../button/button.js";
4
- import { Glyph } from "../glyph/glyph.js";
5
- import * as listbox from "../listbox/listbox.js";
6
- import * as popover from "../popover/popover.js";
7
- import { theme } from "../../theme/theme.js";
8
- import { hiddenTypeahead } from "../../interactions/typeahead/typeahead-mixin.js";
9
- import { onKeyDown } from "../../interactions/keydown/keydown.js";
10
- import { waitForCssTransition } from "../../utils/wait-for-css-transition.js";
11
- import { wait } from "../../utils/wait.js";
1
+ import { jsx as _jsx } from "@remix-run/ui/jsx-runtime";
2
+ import { attrs, createMixin, on, ref, } from '@remix-run/ui';
3
+ import * as listbox from '../listbox/index.js';
4
+ import * as popover from '../popover/index.js';
5
+ import { hiddenTypeahead } from '../shared/typeahead.js';
6
+ import { waitForCssTransition } from '../shared/wait-for-css-transition.js';
7
+ import { wait } from '../shared/wait.js';
8
+ import { onKeyDown } from './keydown.js';
12
9
  const SELECT_CHANGE_EVENT = 'rmx:select-change';
13
- const LABEL_SWAP_DELAY_MS = 75;
10
+ const DEFAULT_LABEL_SWAP_DELAY_MS = 75;
14
11
  export class SelectChangeEvent extends Event {
15
12
  label;
16
13
  optionId;
@@ -125,7 +122,7 @@ function SelectProvider(handle) {
125
122
  return;
126
123
  }
127
124
  await Promise.all([handle.update(), waitForCssTransition(surfaceRef, handle.signal)]);
128
- await wait(LABEL_SWAP_DELAY_MS); // UX delay label swap for clear value change
125
+ await wait(handle.props.labelSwapDelayMs ?? DEFAULT_LABEL_SWAP_DELAY_MS);
129
126
  if (handle.signal.aborted)
130
127
  return;
131
128
  displayedLabel = selectedLabel;
@@ -319,39 +316,6 @@ const hiddenInputMixin = createMixin((handle) => {
319
316
  value: context.value ?? '',
320
317
  });
321
318
  });
322
- const selectTriggerCss = css({
323
- minHeight: theme.control.height.sm,
324
- width: '100%',
325
- paddingInline: theme.space.md,
326
- paddingInlineEnd: theme.space.sm,
327
- display: 'grid',
328
- gridTemplateColumns: 'minmax(0, 1fr) auto',
329
- alignItems: 'center',
330
- gap: theme.space.sm,
331
- borderRadius: theme.radius.md,
332
- backgroundImage: 'none',
333
- border: '0.5px solid transparent',
334
- boxShadow: 'none',
335
- fontSize: theme.fontSize.xs,
336
- textAlign: 'left',
337
- backgroundColor: theme.surface.lvl3,
338
- color: theme.colors.text.secondary,
339
- '&:hover, &:focus-visible, &[aria-expanded="true"], &[aria-expanded="true"]:hover, &[aria-expanded="true"]:focus-visible': {
340
- backgroundColor: theme.surface.lvl4,
341
- color: theme.colors.text.primary,
342
- },
343
- '&:active': {
344
- backgroundColor: theme.surface.lvl3,
345
- },
346
- '&:focus-visible': {
347
- outline: `2px solid ${theme.colors.focus.ring}`,
348
- outlineOffset: '2px',
349
- },
350
- '&:disabled': {
351
- opacity: 0.6,
352
- },
353
- });
354
- export const triggerStyle = selectTriggerCss;
355
319
  export const Context = SelectProvider;
356
320
  export const hiddenInput = hiddenInputMixin;
357
321
  export const list = listMixin;
@@ -369,20 +333,4 @@ const select = {
369
333
  export function onSelectChange(handler, captureBoolean) {
370
334
  return on(SELECT_CHANGE_EVENT, handler, captureBoolean);
371
335
  }
372
- function SelectLabel(handle) {
373
- let context = getSelectContext(handle);
374
- return () => _jsx("span", { mix: button.labelStyle, children: context.displayedLabel });
375
- }
376
- export function Select(handle) {
377
- return () => {
378
- let { children, defaultLabel, defaultValue, disabled, name, mix, ...buttonProps } = handle.props;
379
- return (_jsxs(select.Context, { defaultLabel: defaultLabel, defaultValue: defaultValue, disabled: disabled, name: name, children: [_jsxs("button", { ...buttonProps, mix: [button.baseStyle, triggerStyle, select.trigger(), mix], children: [_jsx(SelectLabel, {}), _jsx(Glyph, { mix: button.iconStyle, name: "chevronVertical" })] }), _jsx(popover.Context, { children: _jsx("div", { mix: [popover.surfaceStyle, select.popover()], children: _jsx("div", { mix: [popover.contentStyle, listbox.listStyle, select.list()], children: children }) }) }), name && _jsx("input", { mix: select.hiddenInput() })] }));
380
- };
381
- }
382
- export function Option(handle) {
383
- return () => {
384
- let { label, value, disabled, textValue, children, mix, ...divProps } = handle.props;
385
- return (_jsxs("div", { ...divProps, mix: [listbox.optionStyle, select.option({ value, label, disabled, textValue }), mix], children: [_jsx(Glyph, { mix: listbox.glyphStyle, name: "check" }), _jsx("span", { mix: listbox.labelStyle, children: children ?? handle.props.label })] }));
386
- };
387
- }
388
- //# sourceMappingURL=select.js.map
336
+ //# sourceMappingURL=primitives.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"primitives.js","sourceRoot":"","sources":["../../src/select/primitives.tsx"],"names":[],"mappings":"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"}
@@ -1,8 +1,8 @@
1
- import { Fragment, createComponent, createFrameHandle, Frame } from "../runtime/component.js";
2
- import { isEntry } from "../runtime/client-entries.js";
3
- import { FRAMEWORK_PROPS as RUNTIME_FRAMEWORK_PROPS, SELF_CLOSING_TAGS, normalizeAttributeName, serializeStyleObject, shouldStringifyBooleanAttribute, } from "../runtime/core/attributes.js";
4
- import { appendFlushMarker, stripFlushMarkers } from "../runtime/stream-protocol.js";
5
- import { REMIX_UI_STYLE_LAYER } from "../style/layers.js";
1
+ import { Fragment, createComponent, createFrameHandle, Frame } from '../runtime/component.js';
2
+ import { isEntry } from '../runtime/client-entries.js';
3
+ import { FRAMEWORK_PROPS as RUNTIME_FRAMEWORK_PROPS, SELF_CLOSING_TAGS, normalizeAttributeName, serializeStyleObject, shouldStringifyBooleanAttribute, } from '../runtime/core/attributes.js';
4
+ import { appendFlushMarker, stripFlushMarkers } from '../runtime/stream-protocol.js';
5
+ import { REMIX_UI_STYLE_LAYER } from '../style/layers.js';
6
6
  export function createVNode(type, props, key) {
7
7
  return { type, props, key };
8
8
  }
@@ -63,7 +63,6 @@ export function renderToStream(node, options) {
63
63
  onError,
64
64
  resolveFrame: options?.resolveFrame ?? defaultResolveFrame,
65
65
  styleCache: new Map(),
66
- emittedStyles: new Set(),
67
66
  pendingFrames: [],
68
67
  hydrationData: new Map(),
69
68
  unresolvedHydrationData: new Map(),
@@ -263,7 +262,7 @@ function buildSegment(node, context, frameState) {
263
262
  }
264
263
  return buildElementSegment(tag, props, context, frameState);
265
264
  }
266
- if (typeof type === 'function') {
265
+ if (isElementFunction(type)) {
267
266
  if (type === Frame) {
268
267
  return buildFrameSegment(node, context, frameState);
269
268
  }
@@ -569,6 +568,9 @@ function isSsrMixinElement(value) {
569
568
  return false;
570
569
  return '__rmxMixinElementType' in value;
571
570
  }
571
+ function isElementFunction(value) {
572
+ return typeof value === 'function';
573
+ }
572
574
  function isSsrMixinDescriptor(value) {
573
575
  if (!value || typeof value !== 'object' || isRemixElement(value)) {
574
576
  return false;
@@ -648,7 +650,7 @@ function createHydrationPropsReplacer(context, frameState) {
648
650
  return { $rmx: true, type, props: transformProps(props) };
649
651
  }
650
652
  // Component function: render synchronously, then unwrap its result
651
- if (typeof type === 'function') {
653
+ if (isElementFunction(type)) {
652
654
  let vnode = createVNode(type, props);
653
655
  if (context.parentVNode) {
654
656
  vnode._parent = context.parentVNode;
@@ -755,13 +757,13 @@ async function resolveClientEntries(context, resolveClientEntry) {
755
757
  let resolvedEntries = new Map();
756
758
  for (let [hydrationId, unresolvedHydrationData] of context.unresolvedHydrationData) {
757
759
  let { entryId, component, props } = unresolvedHydrationData;
758
- let resolvedEntry = resolvedEntries.get(entryId);
760
+ let resolvedEntry = resolvedEntries.get(component);
759
761
  if (!resolvedEntry) {
760
762
  resolvedEntry = resolveClientEntry
761
763
  ? await Promise.resolve(resolveClientEntry(entryId, component))
762
764
  : resolveDefaultClientEntry(entryId, component);
763
765
  validateResolvedClientEntry(entryId, resolvedEntry);
764
- resolvedEntries.set(entryId, resolvedEntry);
766
+ resolvedEntries.set(component, resolvedEntry);
765
767
  }
766
768
  context.hydrationData.set(hydrationId, {
767
769
  exportName: resolvedEntry.exportName,
@@ -862,7 +864,6 @@ function finalizeHtml(html, context) {
862
864
  html = `<head>${headContent}</head>${html}`;
863
865
  }
864
866
  }
865
- html = dedupeServerStyleTagsInHtml(html, context.emittedStyles);
866
867
  // Append aggregated hydration/frame data script at the end
867
868
  let rmxData = buildRmxDataScript(context);
868
869
  if (rmxData) {
@@ -923,24 +924,11 @@ function renderStyleTag(selector, css, layer = REMIX_UI_STYLE_LAYER) {
923
924
  let wrappedCss = wrapStyleForLayer(selector, css, layer);
924
925
  if (!wrappedCss)
925
926
  return '';
926
- return `<style data-rmx="${escapeHtml(selector)}">${wrappedCss}</style>`;
927
+ return `<style data-rmx="${escapeHtml(selector)}">${escapeStyleText(wrappedCss)}</style>`;
927
928
  }
928
- function readStyleTagAttribute(attrs, name) {
929
- let match = attrs.match(new RegExp(`\\b${name}=(?:"([^"]*)"|'([^']*)')`));
930
- if (!match)
931
- return null;
932
- return match[1] ?? match[2] ?? null;
933
- }
934
- function dedupeServerStyleTagsInHtml(html, seenStyles) {
935
- return html.replace(/<style\b([^>]*)>[\s\S]*?<\/style>/gi, (match, attrs) => {
936
- let selector = readStyleTagAttribute(attrs, 'data-rmx');
937
- if (!selector)
938
- return match;
939
- if (seenStyles.has(selector))
940
- return '';
941
- seenStyles.add(selector);
942
- return match;
943
- });
929
+ function escapeStyleText(css) {
930
+ // A literal "</style" closes an HTML style element even when it appears inside a CSS string.
931
+ return css.replace(/</g, '\\3C ');
944
932
  }
945
933
  function buildRmxDataScript(context) {
946
934
  if (context.hydrationData.size === 0 && context.frameData.size === 0) {
@@ -964,6 +952,12 @@ function escapeScriptJson(json) {
964
952
  // the handler's `finalizeHtml` emits selector-addressed `<style>` tags in its HTML, and on the client,
965
953
  // the `adoptServerStyleTag` MutationObserver (stylesheet.ts) picks it up anywhere in the
966
954
  // document and adopts the CSS into an adopted stylesheet.
955
+ //
956
+ // Style tags are intentionally NOT deduped across frame boundaries: each frame
957
+ // owns its style rules independently on the client (per-frame refcounted
958
+ // adoption), so every frame's HTML must carry the full set of style tags its
959
+ // content references — even when a sibling frame or the enclosing document
960
+ // already emitted the same selector.
967
961
  async function streamPendingFrames(context, controller, encoder) {
968
962
  let processedFrames = new Set();
969
963
  while (true) {
@@ -980,7 +974,6 @@ async function streamPendingFrames(context, controller, encoder) {
980
974
  let { html, tail } = await promise;
981
975
  if (context.signal.aborted)
982
976
  return;
983
- html = dedupeServerStyleTagsInHtml(html, context.emittedStyles);
984
977
  // Stream as a template element (first chunk only)
985
978
  let templateHtml = `<template id="${frameId}">${escapeTemplateContent(html)}</template>`;
986
979
  if (context.signal.aborted)