@yewdiel21/motion-kit 0.17.0 → 0.19.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 (181) hide show
  1. package/README.md +240 -199
  2. package/dist/auto/index.d.ts +19 -3
  3. package/dist/auto/index.js +35 -3
  4. package/dist/auto/index.js.map +1 -1
  5. package/dist/{chunk-QFBOHPWZ.js → chunk-CQP66AZK.js} +2 -2
  6. package/dist/{chunk-QP4QJOEN.js → chunk-H4STLMCM.js} +2 -2
  7. package/dist/{chunk-BZLMCHUD.js → chunk-KDIJX6G4.js} +3 -3
  8. package/dist/{chunk-DOOMULVV.js → chunk-OLT3CWDJ.js} +4 -2
  9. package/dist/chunk-OLT3CWDJ.js.map +1 -0
  10. package/dist/{chunk-VJFPTLAK.js → chunk-PEDYJ2TV.js} +8 -22
  11. package/dist/chunk-PEDYJ2TV.js.map +1 -0
  12. package/dist/{chunk-7IQTMF7Y.js → chunk-Y4GIBTRG.js} +5130 -2153
  13. package/dist/chunk-Y4GIBTRG.js.map +1 -0
  14. package/dist/css/components/badge-button.css +16 -0
  15. package/dist/css/components/bento-grid.css +13 -0
  16. package/dist/css/components/code-block.css +267 -0
  17. package/dist/css/components/command-search.css +274 -2
  18. package/dist/css/components/dialog.css +264 -0
  19. package/dist/css/components/drilldown-menu.css +11 -7
  20. package/dist/css/components/equalizer-slider.css +26 -0
  21. package/dist/css/components/handwriting-text.css +15 -0
  22. package/dist/css/components/heatmap-chart.css +267 -1
  23. package/dist/css/components/magnetize-button.css +18 -0
  24. package/dist/css/components/morphing-page-dots.css +13 -0
  25. package/dist/css/components/not-found.css +22 -0
  26. package/dist/css/components/notification-stack.css +42 -0
  27. package/dist/css/components/particle-button.css +14 -0
  28. package/dist/css/components/radio-group.css +29 -0
  29. package/dist/css/components/rating-scale.css +23 -0
  30. package/dist/css/components/scroll-area.css +261 -0
  31. package/dist/css/components/scroll-preview-dock.css +18 -0
  32. package/dist/css/components/select.css +300 -4
  33. package/dist/css/components/signature-pad.css +130 -103
  34. package/dist/css/components/stepper.css +36 -0
  35. package/dist/css/components/sticky-header.css +10 -0
  36. package/dist/css/components/temperature-slider.css +29 -0
  37. package/dist/css/components/voice-message-bubble.css +62 -45
  38. package/dist/css/components/waveform-player.css +49 -34
  39. package/dist/css/components/wheel-picker.css +16 -15
  40. package/dist/css/tokens.css +4 -0
  41. package/dist/elements/index.d.ts +217 -4
  42. package/dist/elements/index.js +614 -9
  43. package/dist/elements/index.js.map +1 -1
  44. package/dist/{engine-Bn6hC87X.d.ts → engine-D6XV-WNt.d.ts} +390 -1
  45. package/dist/gl/index.js +2 -2
  46. package/dist/index.css +886 -177
  47. package/dist/index.d.ts +23 -23
  48. package/dist/index.js +37 -5
  49. package/dist/index.js.map +1 -1
  50. package/dist/react/index.d.ts +126 -7
  51. package/dist/react/index.js +722 -7
  52. package/dist/react/index.js.map +1 -1
  53. package/dist/{reduced-YS6TZjpa.d.ts → reduced-4croIXl-.d.ts} +1 -1
  54. package/dist/{store-CZ6vdtIE.d.ts → store-CAHWkurn.d.ts} +1 -1
  55. package/package.json +110 -110
  56. package/registry.json +1357 -1160
  57. package/src/auto/auto-init.ts +341 -308
  58. package/src/components/badge-button/README.md +28 -0
  59. package/src/components/badge-button/badge-button.css +15 -0
  60. package/src/components/badge-button/element.ts +16 -0
  61. package/src/components/badge-button/engine.ts +85 -0
  62. package/src/components/badge-button/react.tsx +31 -0
  63. package/src/components/bento-grid/README.md +26 -0
  64. package/src/components/bento-grid/bento-grid.css +12 -0
  65. package/src/components/bento-grid/element.ts +22 -0
  66. package/src/components/bento-grid/engine.ts +153 -0
  67. package/src/components/bento-grid/react.tsx +25 -0
  68. package/src/components/code-block/README.md +1 -1
  69. package/src/components/code-block/code-block.css +5 -0
  70. package/src/components/code-block/engine.ts +5 -0
  71. package/src/components/command-search/README.md +1 -1
  72. package/src/components/command-search/command-search.css +12 -2
  73. package/src/components/command-search/engine.ts +6 -0
  74. package/src/components/dialog/README.md +104 -103
  75. package/src/components/dialog/dialog.css +2 -0
  76. package/src/components/dialog/engine.ts +465 -449
  77. package/src/components/drilldown-menu/drilldown-menu.css +11 -7
  78. package/src/components/drilldown-menu/engine.ts +44 -4
  79. package/src/components/equalizer-slider/README.md +43 -0
  80. package/src/components/equalizer-slider/element.ts +41 -0
  81. package/src/components/equalizer-slider/engine.ts +32 -0
  82. package/src/components/equalizer-slider/equalizer-slider.css +26 -0
  83. package/src/components/equalizer-slider/react.tsx +60 -0
  84. package/src/components/equalizer-slider/shared.ts +161 -0
  85. package/src/components/handwriting-text/README.md +29 -0
  86. package/src/components/handwriting-text/element.ts +14 -0
  87. package/src/components/handwriting-text/engine.ts +108 -0
  88. package/src/components/handwriting-text/glyphs.ts +71 -0
  89. package/src/components/handwriting-text/handwriting-text.css +14 -0
  90. package/src/components/handwriting-text/react.tsx +23 -0
  91. package/src/components/heatmap-chart/README.md +48 -48
  92. package/src/components/heatmap-chart/engine.ts +6 -1
  93. package/src/components/heatmap-chart/heatmap-chart.css +5 -1
  94. package/src/components/icons.ts +1 -0
  95. package/src/components/magnetize-button/README.md +26 -0
  96. package/src/components/magnetize-button/element.ts +13 -0
  97. package/src/components/magnetize-button/engine.ts +84 -0
  98. package/src/components/magnetize-button/magnetize-button.css +17 -0
  99. package/src/components/magnetize-button/react.tsx +22 -0
  100. package/src/components/morphing-page-dots/README.md +28 -0
  101. package/src/components/morphing-page-dots/element.ts +16 -0
  102. package/src/components/morphing-page-dots/engine.ts +89 -0
  103. package/src/components/morphing-page-dots/morphing-page-dots.css +12 -0
  104. package/src/components/morphing-page-dots/react.tsx +32 -0
  105. package/src/components/not-found/README.md +26 -0
  106. package/src/components/not-found/element.ts +15 -0
  107. package/src/components/not-found/engine.ts +57 -0
  108. package/src/components/not-found/not-found.css +21 -0
  109. package/src/components/not-found/react.tsx +23 -0
  110. package/src/components/notification-stack/README.md +24 -0
  111. package/src/components/notification-stack/element.ts +26 -0
  112. package/src/components/notification-stack/engine.ts +329 -0
  113. package/src/components/notification-stack/notification-stack.css +41 -0
  114. package/src/components/notification-stack/react.tsx +28 -0
  115. package/src/components/particle-button/README.md +26 -0
  116. package/src/components/particle-button/element.ts +13 -0
  117. package/src/components/particle-button/engine.ts +52 -0
  118. package/src/components/particle-button/particle-button.css +13 -0
  119. package/src/components/particle-button/react.tsx +22 -0
  120. package/src/components/radio-group/README.md +43 -0
  121. package/src/components/radio-group/element.ts +41 -0
  122. package/src/components/radio-group/engine.ts +11 -0
  123. package/src/components/radio-group/radio-group.css +28 -0
  124. package/src/components/radio-group/react.tsx +60 -0
  125. package/src/components/radio-group/shared.ts +118 -0
  126. package/src/components/rating-scale/README.md +43 -0
  127. package/src/components/rating-scale/element.ts +41 -0
  128. package/src/components/rating-scale/engine.ts +63 -0
  129. package/src/components/rating-scale/rating-scale.css +22 -0
  130. package/src/components/rating-scale/react.tsx +60 -0
  131. package/src/components/scroll-area/README.md +89 -0
  132. package/src/components/scroll-area/element.ts +35 -0
  133. package/src/components/scroll-area/engine.ts +528 -0
  134. package/src/components/scroll-area/react.tsx +67 -0
  135. package/src/components/scroll-area/scroll-area.css +260 -0
  136. package/src/components/scroll-preview-dock/README.md +24 -0
  137. package/src/components/scroll-preview-dock/element.ts +20 -0
  138. package/src/components/scroll-preview-dock/engine.ts +228 -0
  139. package/src/components/scroll-preview-dock/react.tsx +26 -0
  140. package/src/components/scroll-preview-dock/scroll-preview-dock.css +17 -0
  141. package/src/components/select/README.md +23 -9
  142. package/src/components/select/engine.ts +16 -4
  143. package/src/components/select/select.css +38 -4
  144. package/src/components/signature-pad/engine.ts +550 -437
  145. package/src/components/signature-pad/signature-pad.css +130 -103
  146. package/src/components/stepper/README.md +46 -0
  147. package/src/components/stepper/element.ts +42 -0
  148. package/src/components/stepper/engine.ts +103 -0
  149. package/src/components/stepper/react.tsx +60 -0
  150. package/src/components/stepper/stepper.css +35 -0
  151. package/src/components/sticky-header/README.md +30 -0
  152. package/src/components/sticky-header/element.ts +19 -0
  153. package/src/components/sticky-header/engine.ts +95 -0
  154. package/src/components/sticky-header/react.tsx +25 -0
  155. package/src/components/sticky-header/sticky-header.css +9 -0
  156. package/src/components/temperature-slider/README.md +42 -0
  157. package/src/components/temperature-slider/element.ts +53 -0
  158. package/src/components/temperature-slider/engine.ts +44 -0
  159. package/src/components/temperature-slider/react.tsx +66 -0
  160. package/src/components/temperature-slider/temperature-slider.css +29 -0
  161. package/src/components/voice-message-bubble/engine.ts +11 -0
  162. package/src/components/voice-message-bubble/voice-message-bubble.css +14 -12
  163. package/src/components/waveform-player/README.md +1 -1
  164. package/src/components/waveform-player/engine.ts +344 -261
  165. package/src/components/waveform-player/waveform-player.css +50 -35
  166. package/src/components/wheel-picker/README.md +3 -1
  167. package/src/components/wheel-picker/element.ts +12 -5
  168. package/src/components/wheel-picker/engine.ts +37 -8
  169. package/src/components/wheel-picker/wheel-picker.css +17 -16
  170. package/src/core/timing.ts +2 -0
  171. package/src/css/tokens.css +4 -0
  172. package/src/elements/index.ts +321 -273
  173. package/src/index.ts +312 -295
  174. package/src/motion/morph.ts +5 -2
  175. package/src/react/index.ts +17 -0
  176. package/dist/chunk-7IQTMF7Y.js.map +0 -1
  177. package/dist/chunk-DOOMULVV.js.map +0 -1
  178. package/dist/chunk-VJFPTLAK.js.map +0 -1
  179. /package/dist/{chunk-QFBOHPWZ.js.map → chunk-CQP66AZK.js.map} +0 -0
  180. /package/dist/{chunk-QP4QJOEN.js.map → chunk-H4STLMCM.js.map} +0 -0
  181. /package/dist/{chunk-BZLMCHUD.js.map → chunk-KDIJX6G4.js.map} +0 -0
@@ -4,6 +4,7 @@ import { createScope } from '../../core/scope';
4
4
  import { inert, type Instance } from '../../core/types';
5
5
  import { press } from '../../motion/micro';
6
6
  import { createMenu } from '../menu/engine';
7
+ import { createScrollArea } from '../scroll-area/engine';
7
8
 
8
9
  /*
9
10
  * Select: one choice from a list, opened as the kit's menu (it grows out of its
@@ -12,8 +13,9 @@ import { createMenu } from '../menu/engine';
12
13
  * step: forms post it and its `change` listeners keep working) or builds one from
13
14
  * `options`. The chosen label slides in out of a blur, the chevron turns, typing
14
15
  * a letter on the closed button picks the next option that starts with it, and
15
- * ↓ ↑ Enter Space open the menu. Changes made to the select's options (by the app)
16
- * show up on their own.
16
+ * ↓ ↑ Enter Space open the menu. A long list scrolls under the kit's scroll-area
17
+ * bar (no system bar on the menu's rounded edge) with its edges fading out.
18
+ * Changes made to the select's options (by the app) show up on their own.
17
19
  */
18
20
 
19
21
  export interface SelectOption {
@@ -121,6 +123,10 @@ export function createSelect(root: HTMLElement | null, options: SelectOptions =
121
123
  dialog.className = 'mk-dialog mk-menu mk-select-menu';
122
124
  dialog.dataset.mkSelectMenu = '';
123
125
  dialog.setAttribute('aria-label', options.label ?? 'Opciones');
126
+ // The items scroll inside a list, so the bar rides over the menu instead of cutting its rounded edge.
127
+ const list = document.createElement('div');
128
+ list.dataset.mkSelectList = '';
129
+ dialog.append(list);
124
130
  root.append(dialog);
125
131
  made.push(dialog);
126
132
  scope.attr(root, 'data-mk-ready', '');
@@ -161,7 +167,7 @@ export function createSelect(root: HTMLElement | null, options: SelectOptions =
161
167
  nodes.push(heading, ...[...child.children].filter((node): node is HTMLOptionElement => node instanceof HTMLOptionElement).map(item));
162
168
  } else if (child instanceof HTMLOptionElement) nodes.push(item(child));
163
169
  }
164
- dialog.replaceChildren(...nodes);
170
+ list.replaceChildren(...nodes);
165
171
  };
166
172
 
167
173
  const placeholderText = () => options.placeholder ?? choices().find((option) => option.value === '')?.text ?? 'Elige…';
@@ -201,13 +207,19 @@ export function createSelect(root: HTMLElement | null, options: SelectOptions =
201
207
  root.dispatchEvent(new CustomEvent('mk:change', { bubbles: true, detail: { value } }));
202
208
  };
203
209
 
210
+ // The menu's children must be its items: the bar stays out of assistive tech (the list scrolls with the keys).
211
+ const area = createScrollArea(dialog, { viewport: list, axis: 'y', focusable: false, decorative: true });
204
212
  const menu = createMenu(dialog, {
205
213
  triggers: false,
206
- onOpen: markItems,
214
+ onOpen: () => {
215
+ markItems();
216
+ area.refresh();
217
+ },
207
218
  onClose: () => trigger.setAttribute('aria-expanded', 'false'),
208
219
  onSelect: (value) => choose(value, true),
209
220
  });
210
221
  scope.add(() => menu.destroy());
222
+ scope.add(() => area.destroy());
211
223
  // The menu's own selection stays inside: listeners on the select hear its change.
212
224
  scope.on(dialog, 'mk:select', (event) => event.stopPropagation());
213
225
 
@@ -72,20 +72,38 @@ mk-select {
72
72
  transform: rotate(180deg);
73
73
  }
74
74
 
75
- /* The menu: like the panels of the data table (surface-1, a hairline, 8 px items). */
75
+ /* The menu: like the panels of the data table (surface-1, a hairline, 8 px items). The items scroll in a list with the
76
+ kit's scroll-area bar, kept clear of the rounded corners; the system bar never shows. */
76
77
  .mk-dialog.mk-select-menu {
77
78
  --mk-dialog-bg: var(--mk-surface-1);
78
79
  --mk-dialog-radius: 16px;
79
80
  --mk-dialog-shadow: 0 0 0 1px var(--mk-outline-soft), 0 16px 48px -12px color-mix(in srgb, var(--mk-shadow-color, #000) 35%, transparent);
80
- gap: 0.125rem;
81
+ --mk-scroll-inset: 10px;
81
82
  min-width: max(10rem, var(--mk-select-width, 0px));
82
83
  max-height: min(20rem, 60dvh);
83
- padding: 0.375rem;
84
- overflow-y: auto;
84
+ padding: 0;
85
+ overflow: hidden;
85
86
  -webkit-backdrop-filter: none;
86
87
  backdrop-filter: none;
87
88
  }
88
89
 
90
+ .mk-dialog.mk-select-menu [data-mk-select-list] {
91
+ display: flex;
92
+ flex: 1 1 auto;
93
+ flex-direction: column;
94
+ gap: 0.125rem;
95
+ min-height: 0;
96
+ padding: 0.375rem;
97
+ overflow-x: hidden;
98
+ overflow-y: auto;
99
+ overscroll-behavior: contain;
100
+ }
101
+
102
+ /* A long list leaves the bar its own lane. */
103
+ .mk-dialog.mk-select-menu[data-mk-overflow-y] [data-mk-select-list] {
104
+ padding-inline-end: 0.875rem;
105
+ }
106
+
89
107
  .mk-dialog.mk-select-menu [data-mk-item] {
90
108
  flex: none;
91
109
  gap: 0.625rem;
@@ -133,3 +151,19 @@ mk-select {
133
151
  transition: none;
134
152
  }
135
153
  }
154
+
155
+ /* Inside a kit field the trigger takes the field's height, radius, fill and type. */
156
+ .mk-field :is(.mk-select, mk-select) {
157
+ display: flex;
158
+ width: 100%;
159
+ }
160
+
161
+ .mk-field [data-mk-select-trigger] {
162
+ height: auto;
163
+ min-height: 56px;
164
+ padding: 0 14px 0 16px;
165
+ border-radius: var(--mk-field-radius);
166
+ background: var(--mk-field-bg);
167
+ font-family: var(--md-sys-typescale-body-large-font);
168
+ font-size: var(--md-sys-typescale-body-large-size);
169
+ }