@remix-run/ui 0.3.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 (308) 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.js → anchor/index.js} +1 -1
  9. package/dist/anchor/index.js.map +1 -0
  10. package/dist/animation/demos/reordering.js +9 -6
  11. package/dist/animation/demos/reordering.js.map +1 -1
  12. package/dist/{components/breadcrumbs/breadcrumbs.js → breadcrumbs/index.js} +19 -19
  13. package/dist/breadcrumbs/index.js.map +1 -0
  14. package/dist/button/index.d.ts +15 -0
  15. package/dist/button/index.js +128 -0
  16. package/dist/button/index.js.map +1 -0
  17. package/dist/checkbox/index.d.ts +14 -0
  18. package/dist/checkbox/index.js +125 -0
  19. package/dist/checkbox/index.js.map +1 -0
  20. package/dist/combobox/index.d.ts +21 -0
  21. package/dist/combobox/index.js +58 -0
  22. package/dist/combobox/index.js.map +1 -0
  23. package/dist/{components/combobox/combobox.d.ts → combobox/primitives.d.ts} +3 -7
  24. package/dist/{components/combobox/combobox.js → combobox/primitives.js} +8 -61
  25. package/dist/combobox/primitives.js.map +1 -0
  26. package/dist/input/index.d.ts +13 -0
  27. package/dist/input/index.js +121 -0
  28. package/dist/input/index.js.map +1 -0
  29. package/dist/listbox/flash-attribute.js.map +1 -0
  30. package/dist/{components/listbox/listbox.d.ts → listbox/index.d.ts} +2 -6
  31. package/dist/{components/listbox/listbox.js → listbox/index.js} +4 -82
  32. package/dist/listbox/index.js.map +1 -0
  33. package/dist/menu/hover-aim.js.map +1 -0
  34. package/dist/menu/index.d.ts +42 -0
  35. package/dist/menu/index.js +250 -0
  36. package/dist/menu/index.js.map +1 -0
  37. package/dist/{components/menu/menu.d.ts → menu/primitives.d.ts} +3 -32
  38. package/dist/{components/menu/menu.js → menu/primitives.js} +97 -314
  39. package/dist/menu/primitives.js.map +1 -0
  40. package/dist/{components/popover/popover.d.ts → popover/index.d.ts} +2 -4
  41. package/dist/{components/popover/popover.js → popover/index.js} +5 -48
  42. package/dist/popover/index.js.map +1 -0
  43. package/dist/{interactions/outside-click/outside-click-mixin.js → popover/outside-click.js} +1 -1
  44. package/dist/popover/outside-click.js.map +1 -0
  45. package/dist/popover/scroll-lock.d.ts +1 -0
  46. package/dist/{utils → popover}/scroll-lock.js +0 -18
  47. package/dist/popover/scroll-lock.js.map +1 -0
  48. package/dist/radio/index.d.ts +12 -0
  49. package/dist/radio/index.js +77 -0
  50. package/dist/radio/index.js.map +1 -0
  51. package/dist/runtime/reconcile.js +11 -5
  52. package/dist/runtime/reconcile.js.map +1 -1
  53. package/dist/runtime/vdom.js +3 -0
  54. package/dist/runtime/vdom.js.map +1 -1
  55. package/dist/select/index.d.ts +19 -0
  56. package/dist/select/index.js +95 -0
  57. package/dist/select/index.js.map +1 -0
  58. package/dist/select/keydown.js.map +1 -0
  59. package/dist/{components/select/select.d.ts → select/primitives.d.ts} +4 -6
  60. package/dist/{components/select/select.js → select/primitives.js} +11 -63
  61. package/dist/select/primitives.js.map +1 -0
  62. package/dist/server/stream.js +2 -2
  63. package/dist/server/stream.js.map +1 -1
  64. package/dist/shared/focus-styles.d.ts +1 -0
  65. package/dist/shared/focus-styles.js +2 -0
  66. package/dist/shared/focus-styles.js.map +1 -0
  67. package/dist/shared/icons.d.ts +9 -0
  68. package/dist/shared/icons.js +42 -0
  69. package/dist/shared/icons.js.map +1 -0
  70. package/dist/shared/listbox-popover-styles.d.ts +6 -0
  71. package/dist/shared/listbox-popover-styles.js +137 -0
  72. package/dist/shared/listbox-popover-styles.js.map +1 -0
  73. package/dist/shared/style-values.d.ts +78 -0
  74. package/dist/{theme/presets/rmx-01/index.js → shared/style-values.js} +3 -34
  75. package/dist/shared/style-values.js.map +1 -0
  76. package/dist/{interactions/typeahead/typeahead-mixin.js → shared/typeahead.js} +1 -1
  77. package/dist/shared/typeahead.js.map +1 -0
  78. package/dist/shared/wait-for-css-transition.js.map +1 -0
  79. package/dist/shared/wait.js.map +1 -0
  80. package/dist/tabs/index.d.ts +32 -0
  81. package/dist/tabs/index.js +157 -0
  82. package/dist/tabs/index.js.map +1 -0
  83. package/dist/tabs/primitives.d.ts +57 -0
  84. package/dist/tabs/primitives.js +238 -0
  85. package/dist/tabs/primitives.js.map +1 -0
  86. package/dist/toggle/index.d.ts +9 -0
  87. package/dist/toggle/index.js +108 -0
  88. package/dist/toggle/index.js.map +1 -0
  89. package/dist/toggle/primitives.d.ts +29 -0
  90. package/dist/toggle/primitives.js +127 -0
  91. package/dist/toggle/primitives.js.map +1 -0
  92. package/package.json +73 -44
  93. package/src/{components/accordion → accordion}/README.md +50 -14
  94. package/src/accordion/index.tsx +285 -0
  95. package/src/accordion/primitives.tsx +512 -0
  96. package/src/{components/anchor → anchor}/README.md +37 -2
  97. package/src/animation/demos/reordering.tsx +9 -6
  98. package/src/{components/breadcrumbs → breadcrumbs}/README.md +4 -4
  99. package/src/{components/breadcrumbs/breadcrumbs.tsx → breadcrumbs/index.tsx} +18 -18
  100. package/src/button/README.md +44 -0
  101. package/src/button/index.ts +168 -0
  102. package/src/checkbox/README.md +59 -0
  103. package/src/checkbox/index.ts +162 -0
  104. package/src/{components/combobox → combobox}/README.md +58 -9
  105. package/src/combobox/index.tsx +112 -0
  106. package/src/{components/combobox/combobox.tsx → combobox/primitives.tsx} +5 -91
  107. package/src/input/README.md +52 -0
  108. package/src/input/index.ts +147 -0
  109. package/src/{components/listbox → listbox}/README.md +9 -41
  110. package/src/{components/listbox/listbox.ts → listbox/index.ts} +2 -87
  111. package/src/{components/menu → menu}/README.md +55 -14
  112. package/src/menu/index.tsx +354 -0
  113. package/src/{components/menu/menu.tsx → menu/primitives.tsx} +99 -413
  114. package/src/{components/popover → popover}/README.md +20 -39
  115. package/src/{components/popover/popover.ts → popover/index.ts} +3 -57
  116. package/src/{utils → popover}/scroll-lock.ts +0 -28
  117. package/src/radio/README.md +53 -0
  118. package/src/radio/index.ts +100 -0
  119. package/src/runtime/demos/readme.demo.tsx +16 -14
  120. package/src/runtime/reconcile.ts +11 -5
  121. package/src/runtime/vdom.ts +3 -0
  122. package/src/{components/select → select}/README.md +29 -19
  123. package/src/select/index.tsx +159 -0
  124. package/src/{components/select/select.tsx → select/primitives.tsx} +10 -98
  125. package/src/server/stream.ts +3 -3
  126. package/src/shared/focus-styles.ts +2 -0
  127. package/src/shared/icons.tsx +62 -0
  128. package/src/shared/listbox-popover-styles.ts +146 -0
  129. package/src/shared/style-values.ts +165 -0
  130. package/src/tabs/README.md +141 -0
  131. package/src/tabs/index.tsx +244 -0
  132. package/src/tabs/primitives.ts +365 -0
  133. package/src/toggle/README.md +56 -0
  134. package/src/toggle/index.tsx +134 -0
  135. package/src/toggle/primitives.ts +192 -0
  136. package/dist/animation/demos/animation.demo.d.ts +0 -5
  137. package/dist/animation/demos/animation.demo.js +0 -92
  138. package/dist/animation/demos/animation.demo.js.map +0 -1
  139. package/dist/animation/demos/spring.demo.d.ts +0 -6
  140. package/dist/animation/demos/spring.demo.js +0 -304
  141. package/dist/animation/demos/spring.demo.js.map +0 -1
  142. package/dist/components/accordion/accordion.d.ts +0 -92
  143. package/dist/components/accordion/accordion.js +0 -335
  144. package/dist/components/accordion/accordion.js.map +0 -1
  145. package/dist/components/accordion/demos/card.demo.d.ts +0 -7
  146. package/dist/components/accordion/demos/card.demo.js +0 -59
  147. package/dist/components/accordion/demos/card.demo.js.map +0 -1
  148. package/dist/components/accordion/demos/multiple.demo.d.ts +0 -7
  149. package/dist/components/accordion/demos/multiple.demo.js +0 -20
  150. package/dist/components/accordion/demos/multiple.demo.js.map +0 -1
  151. package/dist/components/accordion/demos/overview.demo.d.ts +0 -7
  152. package/dist/components/accordion/demos/overview.demo.js +0 -20
  153. package/dist/components/accordion/demos/overview.demo.js.map +0 -1
  154. package/dist/components/anchor/anchor.js.map +0 -1
  155. package/dist/components/breadcrumbs/basic.demo.d.ts +0 -6
  156. package/dist/components/breadcrumbs/basic.demo.js +0 -15
  157. package/dist/components/breadcrumbs/basic.demo.js.map +0 -1
  158. package/dist/components/breadcrumbs/breadcrumbs.js.map +0 -1
  159. package/dist/components/breadcrumbs/separator.demo.d.ts +0 -6
  160. package/dist/components/breadcrumbs/separator.demo.js +0 -15
  161. package/dist/components/breadcrumbs/separator.demo.js.map +0 -1
  162. package/dist/components/button/button.d.ts +0 -105
  163. package/dist/components/button/button.js +0 -207
  164. package/dist/components/button/button.js.map +0 -1
  165. package/dist/components/button/demos/aliases.demo.d.ts +0 -7
  166. package/dist/components/button/demos/aliases.demo.js +0 -19
  167. package/dist/components/button/demos/aliases.demo.js.map +0 -1
  168. package/dist/components/button/demos/basic.demo.d.ts +0 -7
  169. package/dist/components/button/demos/basic.demo.js +0 -20
  170. package/dist/components/button/demos/basic.demo.js.map +0 -1
  171. package/dist/components/button/demos/states.demo.d.ts +0 -7
  172. package/dist/components/button/demos/states.demo.js +0 -30
  173. package/dist/components/button/demos/states.demo.js.map +0 -1
  174. package/dist/components/combobox/combobox.js.map +0 -1
  175. package/dist/components/combobox/overview.demo.d.ts +0 -7
  176. package/dist/components/combobox/overview.demo.js +0 -154
  177. package/dist/components/combobox/overview.demo.js.map +0 -1
  178. package/dist/components/glyph/glyph.d.ts +0 -14
  179. package/dist/components/glyph/glyph.js +0 -65
  180. package/dist/components/glyph/glyph.js.map +0 -1
  181. package/dist/components/listbox/listbox.js.map +0 -1
  182. package/dist/components/listbox/overview.demo.d.ts +0 -7
  183. package/dist/components/listbox/overview.demo.js +0 -65
  184. package/dist/components/listbox/overview.demo.js.map +0 -1
  185. package/dist/components/menu/demos/bubbling.demo.d.ts +0 -6
  186. package/dist/components/menu/demos/bubbling.demo.js +0 -16
  187. package/dist/components/menu/demos/bubbling.demo.js.map +0 -1
  188. package/dist/components/menu/demos/context-trigger.demo.d.ts +0 -7
  189. package/dist/components/menu/demos/context-trigger.demo.js +0 -87
  190. package/dist/components/menu/demos/context-trigger.demo.js.map +0 -1
  191. package/dist/components/menu/demos/overview.demo.d.ts +0 -7
  192. package/dist/components/menu/demos/overview.demo.js +0 -33
  193. package/dist/components/menu/demos/overview.demo.js.map +0 -1
  194. package/dist/components/menu/hover-aim.js.map +0 -1
  195. package/dist/components/menu/menu.js.map +0 -1
  196. package/dist/components/popover/overview.demo.d.ts +0 -7
  197. package/dist/components/popover/overview.demo.js +0 -65
  198. package/dist/components/popover/overview.demo.js.map +0 -1
  199. package/dist/components/popover/popover.js.map +0 -1
  200. package/dist/components/select/deconstructed.demo.d.ts +0 -7
  201. package/dist/components/select/deconstructed.demo.js +0 -54
  202. package/dist/components/select/deconstructed.demo.js.map +0 -1
  203. package/dist/components/select/overview.demo.d.ts +0 -6
  204. package/dist/components/select/overview.demo.js +0 -28
  205. package/dist/components/select/overview.demo.js.map +0 -1
  206. package/dist/components/select/select.js.map +0 -1
  207. package/dist/components/separator/separator.d.ts +0 -2
  208. package/dist/components/separator/separator.js +0 -15
  209. package/dist/components/separator/separator.js.map +0 -1
  210. package/dist/components/tabs/tabs.d.ts +0 -78
  211. package/dist/components/tabs/tabs.js +0 -339
  212. package/dist/components/tabs/tabs.js.map +0 -1
  213. package/dist/interactions/keydown/keydown.js.map +0 -1
  214. package/dist/interactions/outside-click/outside-click-mixin.js.map +0 -1
  215. package/dist/interactions/typeahead/typeahead-mixin.js.map +0 -1
  216. package/dist/runtime/demos/basic.demo.d.ts +0 -6
  217. package/dist/runtime/demos/basic.demo.js +0 -16
  218. package/dist/runtime/demos/basic.demo.js.map +0 -1
  219. package/dist/runtime/demos/controlled-uncontrolled-values.demo.d.ts +0 -6
  220. package/dist/runtime/demos/controlled-uncontrolled-values.demo.js +0 -77
  221. package/dist/runtime/demos/controlled-uncontrolled-values.demo.js.map +0 -1
  222. package/dist/runtime/demos/keyed-list.demo.d.ts +0 -6
  223. package/dist/runtime/demos/keyed-list.demo.js +0 -62
  224. package/dist/runtime/demos/keyed-list.demo.js.map +0 -1
  225. package/dist/runtime/demos/readme.demo.d.ts +0 -5
  226. package/dist/runtime/demos/readme.demo.js +0 -396
  227. package/dist/runtime/demos/readme.demo.js.map +0 -1
  228. package/dist/theme/contract.d.ts +0 -61
  229. package/dist/theme/contract.js +0 -131
  230. package/dist/theme/contract.js.map +0 -1
  231. package/dist/theme/glyph-contract.d.ts +0 -11
  232. package/dist/theme/glyph-contract.js +0 -34
  233. package/dist/theme/glyph-contract.js.map +0 -1
  234. package/dist/theme/presets/rmx-01/glyphs.d.ts +0 -2
  235. package/dist/theme/presets/rmx-01/glyphs.js +0 -252
  236. package/dist/theme/presets/rmx-01/glyphs.js.map +0 -1
  237. package/dist/theme/presets/rmx-01/index.d.ts +0 -4
  238. package/dist/theme/presets/rmx-01/index.js.map +0 -1
  239. package/dist/theme/runtime.d.ts +0 -2
  240. package/dist/theme/runtime.js +0 -84
  241. package/dist/theme/runtime.js.map +0 -1
  242. package/dist/theme/theme.d.ts +0 -6
  243. package/dist/theme/theme.js +0 -5
  244. package/dist/theme/theme.js.map +0 -1
  245. package/dist/utils/flash-attribute.js.map +0 -1
  246. package/dist/utils/scroll-lock.d.ts +0 -3
  247. package/dist/utils/scroll-lock.js.map +0 -1
  248. package/dist/utils/wait-for-css-transition.js.map +0 -1
  249. package/dist/utils/wait.js.map +0 -1
  250. package/src/animation/demos/animation.demo.tsx +0 -194
  251. package/src/animation/demos/spring.demo.tsx +0 -385
  252. package/src/components/accordion/accordion.tsx +0 -565
  253. package/src/components/accordion/demos/card.demo.tsx +0 -114
  254. package/src/components/accordion/demos/multiple.demo.tsx +0 -57
  255. package/src/components/accordion/demos/overview.demo.tsx +0 -57
  256. package/src/components/breadcrumbs/basic.demo.tsx +0 -18
  257. package/src/components/breadcrumbs/separator.demo.tsx +0 -19
  258. package/src/components/button/README.md +0 -44
  259. package/src/components/button/button.tsx +0 -286
  260. package/src/components/button/demos/aliases.demo.tsx +0 -28
  261. package/src/components/button/demos/basic.demo.tsx +0 -31
  262. package/src/components/button/demos/states.demo.tsx +0 -53
  263. package/src/components/combobox/overview.demo.tsx +0 -200
  264. package/src/components/glyph/README.md +0 -72
  265. package/src/components/glyph/glyph.tsx +0 -110
  266. package/src/components/listbox/overview.demo.tsx +0 -102
  267. package/src/components/menu/demos/bubbling.demo.tsx +0 -35
  268. package/src/components/menu/demos/context-trigger.demo.tsx +0 -133
  269. package/src/components/menu/demos/overview.demo.tsx +0 -77
  270. package/src/components/popover/overview.demo.tsx +0 -144
  271. package/src/components/select/deconstructed.demo.tsx +0 -96
  272. package/src/components/select/overview.demo.tsx +0 -52
  273. package/src/components/separator/separator.ts +0 -19
  274. package/src/components/tabs/README.md +0 -105
  275. package/src/components/tabs/tabs.tsx +0 -504
  276. package/src/runtime/demos/basic.demo.tsx +0 -21
  277. package/src/runtime/demos/controlled-uncontrolled-values.demo.tsx +0 -177
  278. package/src/runtime/demos/keyed-list.demo.tsx +0 -94
  279. package/src/theme/README.md +0 -103
  280. package/src/theme/contract.ts +0 -215
  281. package/src/theme/glyph-contract.ts +0 -59
  282. package/src/theme/presets/rmx-01/glyphs.tsx +0 -308
  283. package/src/theme/presets/rmx-01/index.ts +0 -123
  284. package/src/theme/runtime.ts +0 -119
  285. package/src/theme/theme.ts +0 -15
  286. package/src/utils/scroll-lock/README.md +0 -33
  287. /package/dist/{components/anchor/anchor.d.ts → anchor/index.d.ts} +0 -0
  288. /package/dist/{components/breadcrumbs/breadcrumbs.d.ts → breadcrumbs/index.d.ts} +0 -0
  289. /package/dist/{utils → listbox}/flash-attribute.d.ts +0 -0
  290. /package/dist/{utils → listbox}/flash-attribute.js +0 -0
  291. /package/dist/{components/menu → menu}/hover-aim.d.ts +0 -0
  292. /package/dist/{components/menu → menu}/hover-aim.js +0 -0
  293. /package/dist/{interactions/outside-click/outside-click-mixin.d.ts → popover/outside-click.d.ts} +0 -0
  294. /package/dist/{interactions/keydown → select}/keydown.d.ts +0 -0
  295. /package/dist/{interactions/keydown → select}/keydown.js +0 -0
  296. /package/dist/{interactions/typeahead/typeahead-mixin.d.ts → shared/typeahead.d.ts} +0 -0
  297. /package/dist/{utils → shared}/wait-for-css-transition.d.ts +0 -0
  298. /package/dist/{utils → shared}/wait-for-css-transition.js +0 -0
  299. /package/dist/{utils → shared}/wait.d.ts +0 -0
  300. /package/dist/{utils → shared}/wait.js +0 -0
  301. /package/src/{components/anchor/anchor.ts → anchor/index.ts} +0 -0
  302. /package/src/{utils → listbox}/flash-attribute.ts +0 -0
  303. /package/src/{components/menu → menu}/hover-aim.ts +0 -0
  304. /package/src/{interactions/outside-click/outside-click-mixin.ts → popover/outside-click.ts} +0 -0
  305. /package/src/{interactions/keydown → select}/keydown.ts +0 -0
  306. /package/src/{interactions/typeahead/typeahead-mixin.ts → shared/typeahead.ts} +0 -0
  307. /package/src/{utils → shared}/wait-for-css-transition.ts +0 -0
  308. /package/src/{utils → shared}/wait.ts +0 -0
@@ -0,0 +1,134 @@
1
+ import { createMixin, css } from '@remix-run/ui'
2
+ import type { CSSMixinDescriptor, ElementProps, MixinDescriptor } from '@remix-run/ui'
3
+ import { renderMixinElement } from '../runtime/mixins/mixin.ts'
4
+ import { controlFocusShadow } from '../shared/focus-styles.ts'
5
+
6
+ export { ToggleChangeEvent, onToggleChange } from '@remix-run/ui/toggle/primitives'
7
+
8
+ export type ToggleSize = 'md' | 'lg'
9
+
10
+ export interface ToggleOptions {
11
+ size?: ToggleSize
12
+ }
13
+
14
+ type ToggleMixin = readonly [MixinDescriptor<Element, [], ElementProps>, CSSMixinDescriptor]
15
+
16
+ const checkedSelector = '&:checked, &[aria-checked="true"], &[data-state="checked"]'
17
+ const checkedThumbSelector =
18
+ '&:checked::before, &[aria-checked="true"]::before, &[data-state="checked"]::before'
19
+ const uncheckedThumbBackground =
20
+ 'linear-gradient(180deg, rgba(0, 0, 0, 0) 33%, rgba(0, 0, 0, 0.04) 100%), #FFFFFF'
21
+ const uncheckedThumbShadow =
22
+ '0 0 0 0.5px rgba(0, 0, 0, 0.06), 0 1px 1px -0.5px rgba(0, 0, 0, 0.12), 0 2px 2px -1px rgba(0, 0, 0, 0.12), 0 4px 4px -2px rgba(0, 0, 0, 0.12), inset 0 0 2px 1px #FFFFFF'
23
+ const checkedThumbBackground =
24
+ 'linear-gradient(180deg, rgba(112, 199, 84, 0) 25%, rgba(112, 199, 84, 0.25) 100%), #FFFFFF'
25
+ const checkedThumbShadow =
26
+ '0 1px 2px -0.5px rgba(66, 134, 44, 0.6), 0 2px 4px -1px rgba(66, 134, 44, 0.6), 0 4px 6px -2px rgba(66, 134, 44, 0.6), 0 0 0 0.5px rgba(0, 0, 0, 0.28), inset 0 0 2px 1px #FFFFFF'
27
+
28
+ const toggleDefaultAttrs = createMixin<Element, [], ElementProps>((handle, hostType) => (props) => {
29
+ if (hostType !== 'input') {
30
+ return handle.element
31
+ }
32
+
33
+ let type = props.type ?? 'checkbox'
34
+ if (type !== 'checkbox') {
35
+ return renderMixinElement(handle.element, {
36
+ ...props,
37
+ type,
38
+ })
39
+ }
40
+
41
+ return renderMixinElement(handle.element, {
42
+ ...props,
43
+ role: props.role ?? 'switch',
44
+ type,
45
+ })
46
+ })()
47
+
48
+ const baseStyles = {
49
+ appearance: 'none',
50
+ WebkitAppearance: 'none',
51
+ margin: 0,
52
+ boxSizing: 'border-box',
53
+ position: 'relative',
54
+ display: 'inline-block',
55
+ width: 'var(--rmx-toggle-width)',
56
+ height: 'var(--rmx-toggle-height)',
57
+ minWidth: 'var(--rmx-toggle-width)',
58
+ minHeight: 'var(--rmx-toggle-height)',
59
+ padding: 0,
60
+ border: 0,
61
+ borderRadius: '9999px',
62
+ background: 'linear-gradient(180deg, rgba(0, 0, 0, 0.06) 0%, rgba(0, 0, 0, 0) 100%), #EBEBEB',
63
+ boxShadow:
64
+ 'inset 0 0 4px 1px rgba(0, 0, 0, 0.08), inset 0 1px 1px rgba(0, 0, 0, 0.02), inset 0 2px 2px rgba(0, 0, 0, 0.02)',
65
+ verticalAlign: 'middle',
66
+ flex: 'none',
67
+ '&::before': {
68
+ content: '""',
69
+ position: 'absolute',
70
+ left: 'var(--rmx-toggle-thumb-inset)',
71
+ top: 'calc((var(--rmx-toggle-height) - var(--rmx-toggle-thumb-height)) / 2)',
72
+ width: 'var(--rmx-toggle-thumb-width)',
73
+ height: 'var(--rmx-toggle-thumb-height)',
74
+ borderRadius: '99px',
75
+ background: uncheckedThumbBackground,
76
+ boxShadow: uncheckedThumbShadow,
77
+ transform: 'translateX(0)',
78
+ transition: 'transform 160ms ease, background 160ms ease, box-shadow 160ms ease',
79
+ pointerEvents: 'none',
80
+ },
81
+ '&:disabled, &[aria-disabled="true"]': {
82
+ opacity: 0.55,
83
+ },
84
+ [checkedSelector]: {
85
+ background: 'linear-gradient(180deg, #70C754 0%, #70C754 100%)',
86
+ boxShadow:
87
+ '0 1px 0 rgba(255, 255, 255, 0.4), 0 0 0 1px rgba(255, 255, 255, 0.4), 0 -4px 8px 2px #FFFFFF, 0 4px 8px 2px rgba(0, 0, 0, 0.05), 0 0 12px 1px rgba(112, 199, 84, 0.25), inset 0 0 4px 1px rgba(0, 0, 0, 0.25), inset 0 1px 1px rgba(0, 0, 0, 0.1), inset 0 2px 2px rgba(0, 0, 0, 0.1)',
88
+ },
89
+ [checkedThumbSelector]: {
90
+ background: checkedThumbBackground,
91
+ boxShadow: checkedThumbShadow,
92
+ transform: 'translateX(var(--rmx-toggle-thumb-translate-x))',
93
+ },
94
+ '&:focus-visible': {
95
+ outline: 0,
96
+ boxShadow: controlFocusShadow,
97
+ },
98
+ '@media (prefers-reduced-motion: reduce)': {
99
+ '&::before': {
100
+ transition: 'none',
101
+ },
102
+ },
103
+ }
104
+
105
+ const thumbTranslate =
106
+ 'calc(var(--rmx-toggle-width) - var(--rmx-toggle-thumb-width) - (var(--rmx-toggle-thumb-inset) * 2))'
107
+
108
+ const sizeStyles = {
109
+ md: css({
110
+ '--rmx-toggle-width': '30px',
111
+ '--rmx-toggle-height': '18px',
112
+ '--rmx-toggle-thumb-width': '18px',
113
+ '--rmx-toggle-thumb-height': '14px',
114
+ '--rmx-toggle-thumb-inset': '2px',
115
+ '--rmx-toggle-thumb-translate-x': thumbTranslate,
116
+ ...baseStyles,
117
+ }),
118
+ lg: css({
119
+ '--rmx-toggle-width': '36px',
120
+ '--rmx-toggle-height': '22px',
121
+ '--rmx-toggle-thumb-width': '22px',
122
+ '--rmx-toggle-thumb-height': '18px',
123
+ '--rmx-toggle-thumb-inset': '2px',
124
+ '--rmx-toggle-thumb-translate-x': thumbTranslate,
125
+ ...baseStyles,
126
+ }),
127
+ } as const satisfies Record<ToggleSize, CSSMixinDescriptor>
128
+
129
+ export function toggle(options: ToggleOptions = {}): ToggleMixin {
130
+ let { size = 'md' } = options
131
+ return [toggleDefaultAttrs, sizeStyles[size]]
132
+ }
133
+
134
+ export default toggle
@@ -0,0 +1,192 @@
1
+ import { createElement, createMixin, on, ref } from '@remix-run/ui'
2
+ import type { Dispatched, ElementProps, MixinFactory } from '@remix-run/ui'
3
+
4
+ export interface ToggleControlOptions {
5
+ checked?: boolean
6
+ defaultChecked?: boolean
7
+ disabled?: boolean
8
+ form?: string
9
+ inputRef?: (input: HTMLInputElement, signal: AbortSignal) => void
10
+ name?: string
11
+ onCheckedChange?: (checked: boolean) => void
12
+ readOnly?: boolean
13
+ required?: boolean
14
+ tabIndex?: number
15
+ value?: string
16
+ }
17
+
18
+ type ToggleChangeHandler<target extends HTMLElement> = (
19
+ event: Dispatched<ToggleChangeEvent, target>,
20
+ signal: AbortSignal,
21
+ ) => void | Promise<void>
22
+
23
+ const TOGGLE_CHANGE_EVENT = 'rmx:toggle-change' as const
24
+
25
+ declare global {
26
+ interface HTMLElementEventMap {
27
+ [TOGGLE_CHANGE_EVENT]: ToggleChangeEvent
28
+ }
29
+ }
30
+
31
+ export class ToggleChangeEvent extends Event {
32
+ readonly checked: boolean
33
+
34
+ constructor(checked: boolean) {
35
+ super(TOGGLE_CHANGE_EVENT, { bubbles: true })
36
+ this.checked = checked
37
+ }
38
+ }
39
+
40
+ function getBooleanState(value: unknown): boolean | undefined {
41
+ return value === true || value === false ? value : undefined
42
+ }
43
+
44
+ function propIsTrue(value: unknown): boolean {
45
+ return value === true || value === 'true' || value === ''
46
+ }
47
+
48
+ function isDisabled(options: { disabled?: boolean }, props: ElementProps): boolean {
49
+ return (
50
+ options.disabled === true || propIsTrue(props.disabled) || propIsTrue(props['aria-disabled'])
51
+ )
52
+ }
53
+
54
+ function isReadOnly(options: { readOnly?: boolean }, props: ElementProps): boolean {
55
+ return (
56
+ options.readOnly === true || propIsTrue(props.readOnly) || propIsTrue(props['aria-readonly'])
57
+ )
58
+ }
59
+
60
+ const controlMixin: MixinFactory<HTMLElement, [options?: ToggleControlOptions], ElementProps> =
61
+ createMixin<HTMLElement, [options?: ToggleControlOptions], ElementProps>((handle, hostType) => {
62
+ let uncontrolledChecked = false
63
+ let hasInitialized = false
64
+
65
+ function getChecked(options: ToggleControlOptions, props: ElementProps) {
66
+ let optionChecked = getBooleanState(options.checked)
67
+ if (optionChecked !== undefined) {
68
+ return optionChecked
69
+ }
70
+
71
+ let propChecked = getBooleanState(props.checked)
72
+ if (propChecked !== undefined) {
73
+ return propChecked
74
+ }
75
+
76
+ if (!hasInitialized) {
77
+ uncontrolledChecked =
78
+ getBooleanState(options.defaultChecked) ?? getBooleanState(props.defaultChecked) ?? false
79
+ hasInitialized = true
80
+ }
81
+
82
+ return uncontrolledChecked
83
+ }
84
+
85
+ function setChecked(
86
+ node: HTMLElement,
87
+ options: ToggleControlOptions,
88
+ props: ElementProps,
89
+ nextChecked: boolean,
90
+ ) {
91
+ if (isDisabled(options, props) || isReadOnly(options, props)) {
92
+ if (node instanceof HTMLInputElement) {
93
+ node.checked = getChecked(options, props)
94
+ }
95
+ return
96
+ }
97
+
98
+ if (options.checked === undefined && props.checked === undefined) {
99
+ uncontrolledChecked = nextChecked
100
+ void handle.update()
101
+ }
102
+
103
+ options.onCheckedChange?.(nextChecked)
104
+ node.dispatchEvent(new ToggleChangeEvent(nextChecked))
105
+ }
106
+
107
+ return (options = {}, props) => {
108
+ let checked = getChecked(options, props)
109
+ let disabled = isDisabled(options, props)
110
+ let readOnly = isReadOnly(options, props)
111
+ let required = options.required ?? props.required
112
+
113
+ let nextProps: ElementProps = {
114
+ ...props,
115
+ 'aria-checked': hostType === 'input' ? undefined : checked,
116
+ 'aria-disabled': hostType === 'input' ? undefined : disabled || undefined,
117
+ 'aria-readonly': hostType === 'input' ? undefined : readOnly || undefined,
118
+ 'aria-required': hostType === 'input' ? undefined : required || undefined,
119
+ checked: hostType === 'input' ? checked : props.checked,
120
+ defaultChecked: hostType === 'input' ? undefined : props.defaultChecked,
121
+ disabled: hostType === 'input' ? disabled || undefined : props.disabled,
122
+ form: hostType === 'input' ? (options.form ?? props.form) : props.form,
123
+ name: hostType === 'input' ? (options.name ?? props.name) : props.name,
124
+ readOnly: hostType === 'input' ? readOnly || undefined : props.readOnly,
125
+ required: hostType === 'input' ? required : props.required,
126
+ role: 'switch',
127
+ tabIndex:
128
+ hostType === 'input'
129
+ ? (options.tabIndex ?? props.tabIndex)
130
+ : disabled
131
+ ? undefined
132
+ : (options.tabIndex ?? props.tabIndex ?? 0),
133
+ type:
134
+ hostType === 'input'
135
+ ? props.type === undefined
136
+ ? 'checkbox'
137
+ : props.type
138
+ : hostType === 'button' && props.type === undefined
139
+ ? 'button'
140
+ : props.type,
141
+ value: hostType === 'input' ? (options.value ?? props.value) : props.value,
142
+ 'data-state': checked ? 'checked' : 'unchecked',
143
+ }
144
+
145
+ return createElement(handle.element, {
146
+ ...nextProps,
147
+ mix: [
148
+ ref((node: HTMLElement, signal) => {
149
+ if (node instanceof HTMLInputElement) {
150
+ options.inputRef?.(node, signal)
151
+ }
152
+ }),
153
+ on<HTMLElement, 'click'>('click', (event) => {
154
+ if (hostType !== 'input') {
155
+ event.preventDefault()
156
+ }
157
+
158
+ if (disabled || readOnly) {
159
+ if (event.currentTarget instanceof HTMLInputElement) {
160
+ event.currentTarget.checked = checked
161
+ }
162
+ return
163
+ }
164
+
165
+ let nextChecked =
166
+ event.currentTarget instanceof HTMLInputElement
167
+ ? event.currentTarget.checked
168
+ : !checked
169
+
170
+ setChecked(event.currentTarget, options, props, nextChecked)
171
+ }),
172
+ on<HTMLElement, 'keydown'>('keydown', (event) => {
173
+ if (hostType === 'input' || event.key !== ' ') {
174
+ return
175
+ }
176
+
177
+ event.preventDefault()
178
+ setChecked(event.currentTarget, options, props, !checked)
179
+ }),
180
+ ],
181
+ })
182
+ }
183
+ })
184
+
185
+ export const control = controlMixin
186
+
187
+ export function onToggleChange<target extends HTMLElement>(
188
+ handler: ToggleChangeHandler<target>,
189
+ captureBoolean?: boolean,
190
+ ): ReturnType<typeof on<target, typeof TOGGLE_CHANGE_EVENT>> {
191
+ return on(TOGGLE_CHANGE_EVENT, handler, captureBoolean)
192
+ }
@@ -1,5 +0,0 @@
1
- /**
2
- * @name Animation Gallery
3
- * @description A collection of motion and animation experiments adapted from the standalone demos.
4
- */
5
- export default function AnimationGallery(): () => import("@remix-run/ui").RemixElement;
@@ -1,92 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "@remix-run/ui/jsx-runtime";
2
- import { css, on } from '@remix-run/ui';
3
- import { DefaultAnimate } from "./default-animate.js";
4
- import { EnterAnimation } from "./enter.js";
5
- import { ExitAnimation } from "./exit.js";
6
- import { Press } from "./press.js";
7
- import { HTMLContent } from "./html-content.js";
8
- import { Keyframes } from "./keyframes.js";
9
- import { InterruptibleKeyframes } from "./interruptible-keyframes.js";
10
- import { RollingSquare } from "./rolling-square.js";
11
- import { Rotate } from "./rotate.js";
12
- import { TransitionOptions } from "./transition-options.js";
13
- import { Cube } from "./cube.js";
14
- import { SharedLayout } from "./shared-layout.js";
15
- import { AspectRatio } from "./aspect-ratio.js";
16
- import { BouncySwitch } from "./bouncy-switch.js";
17
- import { ColorInterpolation } from "./color-interpolation.js";
18
- import { FlipToggle } from "./flip-toggle.js";
19
- import { Reordering } from "./reordering.js";
20
- import { MultiStateBadge } from "./multi-state-badge.js";
21
- import { HoldToConfirm } from "./hold-to-confirm.js";
22
- import { MaterialRipple } from "./material-ripple.js";
23
- function Tile(handle) {
24
- let remountKey = 0;
25
- return () => {
26
- let { title, children, notes } = handle.props;
27
- return (_jsxs("div", { mix: [
28
- css({
29
- backgroundColor: 'white',
30
- padding: '40px',
31
- borderRadius: 12,
32
- boxShadow: '0 0 10px 0 rgba(0, 0, 0, 0.1)',
33
- display: 'flex',
34
- alignItems: 'center',
35
- flexDirection: 'column',
36
- gap: 12,
37
- position: 'relative',
38
- }),
39
- ], children: [_jsx("button", { mix: [
40
- css({
41
- position: 'absolute',
42
- bottom: 8,
43
- right: 8,
44
- width: 18,
45
- height: 18,
46
- padding: 0,
47
- border: 'none',
48
- background: 'transparent',
49
- cursor: 'pointer',
50
- opacity: 0.4,
51
- '&:hover': {
52
- opacity: 1,
53
- },
54
- }),
55
- on('click', () => {
56
- remountKey++;
57
- handle.update();
58
- }),
59
- ], title: "Replay animation", children: _jsxs("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: [_jsx("path", { d: "M1 4v6h6M23 20v-6h-6" }), _jsx("path", { d: "M20.49 9A9 9 0 0 0 5.64 5.64L1 10m22 4l-4.64 4.36A9 9 0 0 1 3.51 15" })] }) }), _jsx("h3", { mix: [css({ margin: 0 })], children: title }), _jsx("div", { mix: [
60
- css({
61
- flex: 1,
62
- display: 'flex',
63
- alignItems: 'center',
64
- justifyContent: 'center',
65
- minHeight: 280,
66
- }),
67
- ], children: children }, remountKey), notes && (_jsx("p", { mix: [
68
- css({
69
- margin: 0,
70
- fontSize: 12,
71
- color: '#666',
72
- textAlign: 'center',
73
- maxWidth: '200px',
74
- }),
75
- ], children: notes }))] }));
76
- };
77
- }
78
- /**
79
- * @name Animation Gallery
80
- * @description A collection of motion and animation experiments adapted from the standalone demos.
81
- */
82
- export default function AnimationGallery() {
83
- return () => (_jsxs(_Fragment, { children: [_jsx("h1", { mix: [css({ marginBottom: 0, '& + p': { marginTop: 0 } })], children: "Animations" }), _jsxs("p", { children: ["Most animations are adapted from ", _jsx("a", { href: "https://www.motion.dev", children: "Motion" }), ". Thank you for your work ", _jsx("a", { href: "https://motion.dev/@matt", children: "Matt Perry" }), "!"] }), _jsxs("div", { mix: [
84
- css({
85
- display: 'grid',
86
- gridTemplateColumns: 'repeat(auto-fill, minmax(320px, 1fr))',
87
- gap: 24,
88
- marginTop: 40,
89
- }),
90
- ], children: [_jsx(Tile, { title: "Default Animate", notes: "animateEntrance + animateLayout defaults", children: _jsx(DefaultAnimate, {}) }), _jsx(Tile, { title: "Rolling Square", notes: "CSS transition with spring() timing function", children: _jsx(RollingSquare, {}) }), _jsx(Tile, { title: "Enter Animation", notes: "animateEntrance() with spring physics", children: _jsx(EnterAnimation, {}) }), _jsx(Tile, { title: "Exit Animation", notes: "animateEntrance() + animateExit()", children: _jsx(ExitAnimation, {}) }), _jsx(Tile, { title: "Press Interaction", notes: "CSS transition + pointer/keyboard events", children: _jsx(Press, {}) }), _jsx(Tile, { title: "HTML Content", notes: "rAF loop with spring iterator for text", children: _jsx(HTMLContent, {}) }), _jsx(Tile, { title: "Keyframes", notes: "CSS @keyframes with infinite loop", children: _jsx(Keyframes, {}) }), _jsx(Tile, { title: "Interruptible Keyframes", notes: "Web Animations API with commitStyles()", children: _jsx(InterruptibleKeyframes, {}) }), _jsx(Tile, { title: "Rotate", notes: "CSS @keyframes (one-shot)", children: _jsx(Rotate, {}) }), _jsx(Tile, { title: "Transition Options", notes: "animateEntrance() with cubic-bezier + delay", children: _jsx(TransitionOptions, {}) }), _jsx(Tile, { title: "3D Cube", notes: "rAF loop with direct style manipulation", children: _jsx(Cube, {}) }), _jsx(Tile, { title: "Shared Layout", notes: "CSS Grid overlap for simultaneous enter/exit", children: _jsx(SharedLayout, {}) }), _jsx(Tile, { title: "Aspect Ratio", children: _jsx(AspectRatio, {}) }), _jsx(Tile, { title: "Bouncy Switch", notes: "Spring up, bounce down with CSS linear()", children: _jsx(BouncySwitch, {}) }), _jsx(Tile, { title: "FLIP Toggle", notes: "animateLayout() with interruptible WAAPI", children: _jsx(FlipToggle, {}) }), _jsx(Tile, { title: "Reordering", notes: "animateLayout() with auto-shuffling list", children: _jsx(Reordering, {}) }), _jsx(Tile, { title: "Color Interpolation", notes: "sRGB vs OKLCH color space", children: _jsx(ColorInterpolation, {}) }), _jsx(Tile, { title: "Multi-State Badge", notes: "Animated icon/label swap with WAAPI shake", children: _jsx(MultiStateBadge, {}) }), _jsx(Tile, { title: "Hold to Confirm", notes: "Custom interaction with progress tracking", children: _jsx(HoldToConfirm, {}) }), _jsx(Tile, { title: "Material Ripple", notes: "Pointer-tracked ripples with enter/exit animations", children: _jsx(MaterialRipple, {}) })] })] }));
91
- }
92
- //# sourceMappingURL=animation.demo.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"animation.demo.js","sourceRoot":"","sources":["../../../src/animation/demos/animation.demo.tsx"],"names":[],"mappings":"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"}
@@ -1,6 +0,0 @@
1
- import { type Handle } from '@remix-run/ui';
2
- /**
3
- * @name Spring Drag Release
4
- * @description A full-screen spring physics playground with click targets and drag-release velocity.
5
- */
6
- export default function SpringDemo(handle: Handle): () => import("@remix-run/ui").RemixElement;