@yewdiel21/motion-kit 0.18.0 → 0.19.1

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 (75) hide show
  1. package/README.md +245 -222
  2. package/bin/motion-kit.mjs +0 -0
  3. package/dist/auto/index.d.ts +4 -3
  4. package/dist/auto/index.js +5 -3
  5. package/dist/auto/index.js.map +1 -1
  6. package/dist/{chunk-QFBOHPWZ.js → chunk-CQP66AZK.js} +2 -2
  7. package/dist/{chunk-QP4QJOEN.js → chunk-H4STLMCM.js} +2 -2
  8. package/dist/{chunk-AWDEKDEJ.js → chunk-LIXSOGS2.js} +8 -22
  9. package/dist/chunk-LIXSOGS2.js.map +1 -0
  10. package/dist/{chunk-Q7IW4FV3.js → chunk-NCGNIPJE.js} +1430 -968
  11. package/dist/chunk-NCGNIPJE.js.map +1 -0
  12. package/dist/{chunk-DOOMULVV.js → chunk-OLT3CWDJ.js} +4 -2
  13. package/dist/chunk-OLT3CWDJ.js.map +1 -0
  14. package/dist/{chunk-EDMXWUW3.js → chunk-PVN7YVKV.js} +3 -3
  15. package/dist/css/components/code-block.css +267 -0
  16. package/dist/css/components/command-search.css +274 -2
  17. package/dist/css/components/dialog.css +264 -0
  18. package/dist/css/components/heatmap-chart.css +267 -1
  19. package/dist/css/components/pill-button.css +7 -5
  20. package/dist/css/components/scroll-area.css +261 -0
  21. package/dist/css/components/scroll-island.css +6 -0
  22. package/dist/css/components/select.css +284 -4
  23. package/dist/elements/index.d.ts +15 -4
  24. package/dist/elements/index.js +36 -6
  25. package/dist/elements/index.js.map +1 -1
  26. package/dist/{engine-t8d7brjn.d.ts → engine-D6XV-WNt.d.ts} +50 -1
  27. package/dist/gl/index.js +2 -2
  28. package/dist/index.css +321 -12
  29. package/dist/index.d.ts +3 -3
  30. package/dist/index.js +7 -5
  31. package/dist/index.js.map +1 -1
  32. package/dist/react/index.d.ts +20 -7
  33. package/dist/react/index.js +56 -7
  34. package/dist/react/index.js.map +1 -1
  35. package/dist/{reduced-dPsZYqtI.d.ts → reduced-4croIXl-.d.ts} +1 -1
  36. package/dist/{store-6hZNKiee.d.ts → store-CAHWkurn.d.ts} +1 -1
  37. package/package.json +117 -110
  38. package/registry.json +1357 -1340
  39. package/src/auto/auto-init.ts +341 -339
  40. package/src/components/code-block/README.md +1 -1
  41. package/src/components/code-block/code-block.css +5 -0
  42. package/src/components/code-block/engine.ts +5 -0
  43. package/src/components/command-search/README.md +1 -1
  44. package/src/components/command-search/command-search.css +12 -2
  45. package/src/components/command-search/engine.ts +6 -0
  46. package/src/components/dialog/README.md +104 -103
  47. package/src/components/dialog/dialog.css +2 -0
  48. package/src/components/dialog/engine.ts +465 -449
  49. package/src/components/heatmap-chart/README.md +48 -48
  50. package/src/components/heatmap-chart/engine.ts +6 -1
  51. package/src/components/heatmap-chart/heatmap-chart.css +5 -1
  52. package/src/components/icons.ts +1 -0
  53. package/src/components/pill-button/engine.ts +1 -1
  54. package/src/components/pill-button/pill-button.css +7 -5
  55. package/src/components/scroll-area/README.md +89 -0
  56. package/src/components/scroll-area/element.ts +35 -0
  57. package/src/components/scroll-area/engine.ts +528 -0
  58. package/src/components/scroll-area/react.tsx +67 -0
  59. package/src/components/scroll-area/scroll-area.css +260 -0
  60. package/src/components/scroll-island/engine.ts +10 -1
  61. package/src/components/scroll-island/scroll-island.css +6 -0
  62. package/src/components/select/README.md +1 -1
  63. package/src/components/select/engine.ts +16 -4
  64. package/src/components/select/select.css +22 -4
  65. package/src/core/timing.ts +2 -0
  66. package/src/elements/index.ts +321 -318
  67. package/src/index.ts +1 -0
  68. package/src/motion/morph.ts +5 -2
  69. package/src/react/index.ts +2 -1
  70. package/dist/chunk-AWDEKDEJ.js.map +0 -1
  71. package/dist/chunk-DOOMULVV.js.map +0 -1
  72. package/dist/chunk-Q7IW4FV3.js.map +0 -1
  73. /package/dist/{chunk-QFBOHPWZ.js.map → chunk-CQP66AZK.js.map} +0 -0
  74. /package/dist/{chunk-QP4QJOEN.js.map → chunk-H4STLMCM.js.map} +0 -0
  75. /package/dist/{chunk-EDMXWUW3.js.map → chunk-PVN7YVKV.js.map} +0 -0
@@ -0,0 +1,261 @@
1
+ /* components/scroll-area/scroll-area.css */
2
+ /* scroll-area — the scroller keeps native scrolling with its system bar hidden; the kit's bars ride on top: a 6 px pill
3
+ (text at 32 %) that shows while hovered or scrolling, swells to 10 px over a tonal rail on the swing curve and turns the
4
+ accent while dragged. Edges with more content fade out; an optional tonal pill takes the view back to the top. */
5
+ @property --mk-scroll-thickness {
6
+ syntax: '<length>';
7
+ inherits: true;
8
+ initial-value: 6px;
9
+ }
10
+
11
+ .mk-scroll-area,
12
+ mk-scroll-area {
13
+ --mk-scroll-thumb: color-mix(in srgb, var(--mk-text) 32%, transparent);
14
+ --mk-scroll-thumb-hover: color-mix(in srgb, var(--mk-text) 48%, transparent);
15
+ --mk-scroll-rail: color-mix(in srgb, var(--mk-text) 6%, transparent);
16
+ display: flex;
17
+ flex-direction: column;
18
+ min-width: 0;
19
+ min-height: 0;
20
+ overflow: hidden;
21
+ }
22
+
23
+ /* Its own viewport fills the area (a height or a max-height on the area both work). */
24
+ :is(.mk-scroll-area, mk-scroll-area) > [data-mk-scroll-viewport] {
25
+ flex: 1 1 auto;
26
+ min-width: 0;
27
+ min-height: 0;
28
+ overflow: auto;
29
+ overscroll-behavior: contain;
30
+ border-radius: inherit;
31
+ outline: none;
32
+ }
33
+
34
+ :is(.mk-scroll-area, mk-scroll-area)[data-mk-scroll-axis='y'] > [data-mk-scroll-viewport] {
35
+ overflow-x: hidden;
36
+ }
37
+
38
+ :is(.mk-scroll-area, mk-scroll-area)[data-mk-scroll-axis='x'] > [data-mk-scroll-viewport] {
39
+ overflow-y: hidden;
40
+ }
41
+
42
+ [data-mk-scroll-anchor] {
43
+ position: relative;
44
+ }
45
+
46
+ /* The kit's bars replace the system's wherever the scroller's own styles asked for a thin one. */
47
+ [data-mk-scroll-viewport] {
48
+ scrollbar-width: none !important;
49
+ }
50
+
51
+ [data-mk-scroll-viewport]::-webkit-scrollbar {
52
+ display: none !important;
53
+ }
54
+
55
+ [data-mk-scroll-area]:has(> [data-mk-scroll-viewport]:focus-visible) {
56
+ outline: 2px solid var(--mk-accent);
57
+ outline-offset: 2px;
58
+ }
59
+
60
+ /* Edge fades: as deep as what is hidden past each edge, up to 24 px (written by the engine). */
61
+ [data-mk-fade] > [data-mk-scroll-viewport] {
62
+ --mk-scroll-fade-top: 0px;
63
+ --mk-scroll-fade-right: 0px;
64
+ --mk-scroll-fade-bottom: 0px;
65
+ --mk-scroll-fade-left: 0px;
66
+ -webkit-mask-image:
67
+ linear-gradient(to bottom, transparent, #000 var(--mk-scroll-fade-top), #000 calc(100% - var(--mk-scroll-fade-bottom)), transparent),
68
+ linear-gradient(to right, transparent, #000 var(--mk-scroll-fade-left), #000 calc(100% - var(--mk-scroll-fade-right)), transparent);
69
+ -webkit-mask-composite: source-in;
70
+ mask-image:
71
+ linear-gradient(to bottom, transparent, #000 var(--mk-scroll-fade-top), #000 calc(100% - var(--mk-scroll-fade-bottom)), transparent),
72
+ linear-gradient(to right, transparent, #000 var(--mk-scroll-fade-left), #000 calc(100% - var(--mk-scroll-fade-right)), transparent);
73
+ mask-composite: intersect;
74
+ }
75
+
76
+ /* Rails: a 14 px grip along the edge; its tonal rail and the pill inside are drawn smaller. */
77
+ [data-mk-scroll-rail] {
78
+ --mk-scroll-thickness: 6px;
79
+ position: absolute;
80
+ z-index: 2;
81
+ opacity: 0;
82
+ touch-action: none;
83
+ -webkit-user-select: none;
84
+ user-select: none;
85
+ transition:
86
+ opacity 0.2s ease,
87
+ --mk-scroll-thickness 0.35s var(--mk-ease-swatch);
88
+ }
89
+
90
+ [data-mk-scroll-rail][hidden] {
91
+ display: none;
92
+ }
93
+
94
+ /* The rails run along the viewport's box inside the root (--mk-scroll-view-*, written by the engine);
95
+ --mk-scroll-inset keeps their ends clear of rounded corners. */
96
+ [data-mk-scroll-rail][data-mk-axis='y'] {
97
+ top: calc(var(--mk-scroll-view-top, 0px) + var(--mk-scroll-inset, 6px));
98
+ right: var(--mk-scroll-view-right, 0px);
99
+ bottom: calc(var(--mk-scroll-view-bottom, 0px) + var(--mk-scroll-inset, 6px));
100
+ width: 14px;
101
+ }
102
+
103
+ [data-mk-scroll-rail][data-mk-axis='x'] {
104
+ right: calc(var(--mk-scroll-view-right, 0px) + var(--mk-scroll-inset, 6px));
105
+ bottom: var(--mk-scroll-view-bottom, 0px);
106
+ left: calc(var(--mk-scroll-view-left, 0px) + var(--mk-scroll-inset, 6px));
107
+ height: 14px;
108
+ }
109
+
110
+ /* Both bars: each stops short of the other, no corner square. */
111
+ [data-mk-overflow-x] > [data-mk-scroll-rail][data-mk-axis='y'] {
112
+ bottom: calc(var(--mk-scroll-view-bottom, 0px) + 14px);
113
+ }
114
+
115
+ [data-mk-overflow-y] > [data-mk-scroll-rail][data-mk-axis='x'] {
116
+ right: calc(var(--mk-scroll-view-right, 0px) + 14px);
117
+ }
118
+
119
+ [data-mk-active] > [data-mk-scroll-rail],
120
+ [data-mk-scroll-rail]:hover,
121
+ [data-mk-scroll-rail][data-mk-dragging] {
122
+ opacity: 1;
123
+ }
124
+
125
+ [data-mk-scroll-rail]:hover,
126
+ [data-mk-scroll-rail][data-mk-dragging] {
127
+ --mk-scroll-thickness: 10px;
128
+ }
129
+
130
+ [data-mk-scroll-rail]::before {
131
+ content: '';
132
+ position: absolute;
133
+ border-radius: 999px;
134
+ background: var(--mk-scroll-rail, color-mix(in srgb, var(--mk-text) 6%, transparent));
135
+ opacity: 0;
136
+ transition: opacity 0.2s ease;
137
+ }
138
+
139
+ [data-mk-scroll-rail][data-mk-axis='y']::before {
140
+ top: 0;
141
+ right: 2px;
142
+ bottom: 0;
143
+ width: 10px;
144
+ }
145
+
146
+ [data-mk-scroll-rail][data-mk-axis='x']::before {
147
+ right: 0;
148
+ bottom: 2px;
149
+ left: 0;
150
+ height: 10px;
151
+ }
152
+
153
+ [data-mk-scroll-rail]:hover::before,
154
+ [data-mk-scroll-rail][data-mk-dragging]::before {
155
+ opacity: 1;
156
+ }
157
+
158
+ [data-mk-scroll-thumb] {
159
+ position: absolute;
160
+ top: 0;
161
+ left: 0;
162
+ cursor: grab;
163
+ will-change: transform;
164
+ }
165
+
166
+ [data-mk-scroll-rail][data-mk-axis='y'] [data-mk-scroll-thumb] {
167
+ width: 100%;
168
+ }
169
+
170
+ [data-mk-scroll-rail][data-mk-axis='x'] [data-mk-scroll-thumb] {
171
+ height: 100%;
172
+ }
173
+
174
+ [data-mk-scroll-rail][data-mk-dragging] [data-mk-scroll-thumb] {
175
+ cursor: grabbing;
176
+ }
177
+
178
+ /* The pill stays centred on the 10 px rail while it swells. */
179
+ [data-mk-scroll-pill] {
180
+ position: absolute;
181
+ border-radius: 999px;
182
+ background: var(--mk-scroll-thumb, color-mix(in srgb, var(--mk-text) 32%, transparent));
183
+ transition: background-color 0.2s ease;
184
+ }
185
+
186
+ [data-mk-scroll-rail][data-mk-axis='y'] [data-mk-scroll-pill] {
187
+ top: 0;
188
+ right: calc(2px + (10px - var(--mk-scroll-thickness)) / 2);
189
+ bottom: 0;
190
+ width: var(--mk-scroll-thickness);
191
+ }
192
+
193
+ [data-mk-scroll-rail][data-mk-axis='x'] [data-mk-scroll-pill] {
194
+ right: 0;
195
+ bottom: calc(2px + (10px - var(--mk-scroll-thickness)) / 2);
196
+ left: 0;
197
+ height: var(--mk-scroll-thickness);
198
+ }
199
+
200
+ [data-mk-scroll-rail]:hover [data-mk-scroll-pill] {
201
+ background: var(--mk-scroll-thumb-hover, color-mix(in srgb, var(--mk-text) 48%, transparent));
202
+ }
203
+
204
+ [data-mk-scroll-rail][data-mk-dragging] [data-mk-scroll-pill] {
205
+ background: var(--mk-scroll-thumb-active, var(--mk-accent));
206
+ }
207
+
208
+ [data-mk-dragging] [data-mk-scroll-viewport] {
209
+ -webkit-user-select: none;
210
+ user-select: none;
211
+ }
212
+
213
+ /* Back to top: a tonal pill in the corner, clear of the bars. */
214
+ [data-mk-scroll-top] {
215
+ position: absolute;
216
+ z-index: 3;
217
+ right: calc(var(--mk-scroll-view-right, 0px) + 20px);
218
+ bottom: calc(var(--mk-scroll-view-bottom, 0px) + 16px);
219
+ display: inline-grid;
220
+ place-items: center;
221
+ width: 40px;
222
+ height: 40px;
223
+ padding: 0;
224
+ border: 0;
225
+ border-radius: 999px;
226
+ background: var(--mk-surface-4);
227
+ box-shadow: 0 8px 24px -8px color-mix(in srgb, var(--mk-shadow-color, #000) 45%, transparent);
228
+ color: var(--mk-text);
229
+ cursor: pointer;
230
+ transition:
231
+ background-color 0.15s,
232
+ box-shadow 0.2s;
233
+ }
234
+
235
+ [data-mk-overflow-x] > [data-mk-scroll-top] {
236
+ bottom: calc(var(--mk-scroll-view-bottom, 0px) + 22px);
237
+ }
238
+
239
+ [data-mk-scroll-top][hidden] {
240
+ display: none;
241
+ }
242
+
243
+ [data-mk-scroll-top]:hover {
244
+ background: color-mix(in srgb, var(--mk-surface-4) 80%, var(--mk-text) 10%);
245
+ }
246
+
247
+ [data-mk-scroll-top]:focus-visible {
248
+ outline: none;
249
+ box-shadow:
250
+ 0 0 0 3px color-mix(in srgb, var(--mk-accent) 45%, transparent),
251
+ 0 8px 24px -8px color-mix(in srgb, var(--mk-shadow-color, #000) 45%, transparent);
252
+ }
253
+
254
+ @media (prefers-reduced-motion: reduce) {
255
+ [data-mk-scroll-rail],
256
+ [data-mk-scroll-rail]::before,
257
+ [data-mk-scroll-pill],
258
+ [data-mk-scroll-top] {
259
+ transition: none;
260
+ }
261
+ }
@@ -74,6 +74,8 @@ mk-scroll-island {
74
74
  [data-mk-island-content] {
75
75
  display: inline-flex;
76
76
  flex: none;
77
+ box-sizing: border-box;
78
+ width: max-content;
77
79
  max-width: 100%;
78
80
  min-width: 0;
79
81
  align-items: center;
@@ -88,6 +90,10 @@ mk-scroll-island {
88
90
  transition: opacity 0.18s ease;
89
91
  }
90
92
 
93
+ [data-mk-island-percent] {
94
+ flex: none;
95
+ }
96
+
91
97
  [data-mk-scroll-island][data-mk-state='island'] [data-mk-island-content] {
92
98
  opacity: 1;
93
99
  transition-delay: 0.1s;
@@ -1,3 +1,265 @@
1
+ /* components/scroll-area/scroll-area.css */
2
+ /* scroll-area — the scroller keeps native scrolling with its system bar hidden; the kit's bars ride on top: a 6 px pill
3
+ (text at 32 %) that shows while hovered or scrolling, swells to 10 px over a tonal rail on the swing curve and turns the
4
+ accent while dragged. Edges with more content fade out; an optional tonal pill takes the view back to the top. */
5
+ @property --mk-scroll-thickness {
6
+ syntax: '<length>';
7
+ inherits: true;
8
+ initial-value: 6px;
9
+ }
10
+
11
+ .mk-scroll-area,
12
+ mk-scroll-area {
13
+ --mk-scroll-thumb: color-mix(in srgb, var(--mk-text) 32%, transparent);
14
+ --mk-scroll-thumb-hover: color-mix(in srgb, var(--mk-text) 48%, transparent);
15
+ --mk-scroll-rail: color-mix(in srgb, var(--mk-text) 6%, transparent);
16
+ display: flex;
17
+ flex-direction: column;
18
+ min-width: 0;
19
+ min-height: 0;
20
+ overflow: hidden;
21
+ }
22
+
23
+ /* Its own viewport fills the area (a height or a max-height on the area both work). */
24
+ :is(.mk-scroll-area, mk-scroll-area) > [data-mk-scroll-viewport] {
25
+ flex: 1 1 auto;
26
+ min-width: 0;
27
+ min-height: 0;
28
+ overflow: auto;
29
+ overscroll-behavior: contain;
30
+ border-radius: inherit;
31
+ outline: none;
32
+ }
33
+
34
+ :is(.mk-scroll-area, mk-scroll-area)[data-mk-scroll-axis='y'] > [data-mk-scroll-viewport] {
35
+ overflow-x: hidden;
36
+ }
37
+
38
+ :is(.mk-scroll-area, mk-scroll-area)[data-mk-scroll-axis='x'] > [data-mk-scroll-viewport] {
39
+ overflow-y: hidden;
40
+ }
41
+
42
+ [data-mk-scroll-anchor] {
43
+ position: relative;
44
+ }
45
+
46
+ /* The kit's bars replace the system's wherever the scroller's own styles asked for a thin one. */
47
+ [data-mk-scroll-viewport] {
48
+ scrollbar-width: none !important;
49
+ }
50
+
51
+ [data-mk-scroll-viewport]::-webkit-scrollbar {
52
+ display: none !important;
53
+ }
54
+
55
+ [data-mk-scroll-area]:has(> [data-mk-scroll-viewport]:focus-visible) {
56
+ outline: 2px solid var(--mk-accent);
57
+ outline-offset: 2px;
58
+ }
59
+
60
+ /* Edge fades: as deep as what is hidden past each edge, up to 24 px (written by the engine). */
61
+ [data-mk-fade] > [data-mk-scroll-viewport] {
62
+ --mk-scroll-fade-top: 0px;
63
+ --mk-scroll-fade-right: 0px;
64
+ --mk-scroll-fade-bottom: 0px;
65
+ --mk-scroll-fade-left: 0px;
66
+ -webkit-mask-image:
67
+ linear-gradient(to bottom, transparent, #000 var(--mk-scroll-fade-top), #000 calc(100% - var(--mk-scroll-fade-bottom)), transparent),
68
+ linear-gradient(to right, transparent, #000 var(--mk-scroll-fade-left), #000 calc(100% - var(--mk-scroll-fade-right)), transparent);
69
+ -webkit-mask-composite: source-in;
70
+ mask-image:
71
+ linear-gradient(to bottom, transparent, #000 var(--mk-scroll-fade-top), #000 calc(100% - var(--mk-scroll-fade-bottom)), transparent),
72
+ linear-gradient(to right, transparent, #000 var(--mk-scroll-fade-left), #000 calc(100% - var(--mk-scroll-fade-right)), transparent);
73
+ mask-composite: intersect;
74
+ }
75
+
76
+ /* Rails: a 14 px grip along the edge; its tonal rail and the pill inside are drawn smaller. */
77
+ [data-mk-scroll-rail] {
78
+ --mk-scroll-thickness: 6px;
79
+ position: absolute;
80
+ z-index: 2;
81
+ opacity: 0;
82
+ touch-action: none;
83
+ -webkit-user-select: none;
84
+ user-select: none;
85
+ transition:
86
+ opacity 0.2s ease,
87
+ --mk-scroll-thickness 0.35s var(--mk-ease-swatch);
88
+ }
89
+
90
+ [data-mk-scroll-rail][hidden] {
91
+ display: none;
92
+ }
93
+
94
+ /* The rails run along the viewport's box inside the root (--mk-scroll-view-*, written by the engine);
95
+ --mk-scroll-inset keeps their ends clear of rounded corners. */
96
+ [data-mk-scroll-rail][data-mk-axis='y'] {
97
+ top: calc(var(--mk-scroll-view-top, 0px) + var(--mk-scroll-inset, 6px));
98
+ right: var(--mk-scroll-view-right, 0px);
99
+ bottom: calc(var(--mk-scroll-view-bottom, 0px) + var(--mk-scroll-inset, 6px));
100
+ width: 14px;
101
+ }
102
+
103
+ [data-mk-scroll-rail][data-mk-axis='x'] {
104
+ right: calc(var(--mk-scroll-view-right, 0px) + var(--mk-scroll-inset, 6px));
105
+ bottom: var(--mk-scroll-view-bottom, 0px);
106
+ left: calc(var(--mk-scroll-view-left, 0px) + var(--mk-scroll-inset, 6px));
107
+ height: 14px;
108
+ }
109
+
110
+ /* Both bars: each stops short of the other, no corner square. */
111
+ [data-mk-overflow-x] > [data-mk-scroll-rail][data-mk-axis='y'] {
112
+ bottom: calc(var(--mk-scroll-view-bottom, 0px) + 14px);
113
+ }
114
+
115
+ [data-mk-overflow-y] > [data-mk-scroll-rail][data-mk-axis='x'] {
116
+ right: calc(var(--mk-scroll-view-right, 0px) + 14px);
117
+ }
118
+
119
+ [data-mk-active] > [data-mk-scroll-rail],
120
+ [data-mk-scroll-rail]:hover,
121
+ [data-mk-scroll-rail][data-mk-dragging] {
122
+ opacity: 1;
123
+ }
124
+
125
+ [data-mk-scroll-rail]:hover,
126
+ [data-mk-scroll-rail][data-mk-dragging] {
127
+ --mk-scroll-thickness: 10px;
128
+ }
129
+
130
+ [data-mk-scroll-rail]::before {
131
+ content: '';
132
+ position: absolute;
133
+ border-radius: 999px;
134
+ background: var(--mk-scroll-rail, color-mix(in srgb, var(--mk-text) 6%, transparent));
135
+ opacity: 0;
136
+ transition: opacity 0.2s ease;
137
+ }
138
+
139
+ [data-mk-scroll-rail][data-mk-axis='y']::before {
140
+ top: 0;
141
+ right: 2px;
142
+ bottom: 0;
143
+ width: 10px;
144
+ }
145
+
146
+ [data-mk-scroll-rail][data-mk-axis='x']::before {
147
+ right: 0;
148
+ bottom: 2px;
149
+ left: 0;
150
+ height: 10px;
151
+ }
152
+
153
+ [data-mk-scroll-rail]:hover::before,
154
+ [data-mk-scroll-rail][data-mk-dragging]::before {
155
+ opacity: 1;
156
+ }
157
+
158
+ [data-mk-scroll-thumb] {
159
+ position: absolute;
160
+ top: 0;
161
+ left: 0;
162
+ cursor: grab;
163
+ will-change: transform;
164
+ }
165
+
166
+ [data-mk-scroll-rail][data-mk-axis='y'] [data-mk-scroll-thumb] {
167
+ width: 100%;
168
+ }
169
+
170
+ [data-mk-scroll-rail][data-mk-axis='x'] [data-mk-scroll-thumb] {
171
+ height: 100%;
172
+ }
173
+
174
+ [data-mk-scroll-rail][data-mk-dragging] [data-mk-scroll-thumb] {
175
+ cursor: grabbing;
176
+ }
177
+
178
+ /* The pill stays centred on the 10 px rail while it swells. */
179
+ [data-mk-scroll-pill] {
180
+ position: absolute;
181
+ border-radius: 999px;
182
+ background: var(--mk-scroll-thumb, color-mix(in srgb, var(--mk-text) 32%, transparent));
183
+ transition: background-color 0.2s ease;
184
+ }
185
+
186
+ [data-mk-scroll-rail][data-mk-axis='y'] [data-mk-scroll-pill] {
187
+ top: 0;
188
+ right: calc(2px + (10px - var(--mk-scroll-thickness)) / 2);
189
+ bottom: 0;
190
+ width: var(--mk-scroll-thickness);
191
+ }
192
+
193
+ [data-mk-scroll-rail][data-mk-axis='x'] [data-mk-scroll-pill] {
194
+ right: 0;
195
+ bottom: calc(2px + (10px - var(--mk-scroll-thickness)) / 2);
196
+ left: 0;
197
+ height: var(--mk-scroll-thickness);
198
+ }
199
+
200
+ [data-mk-scroll-rail]:hover [data-mk-scroll-pill] {
201
+ background: var(--mk-scroll-thumb-hover, color-mix(in srgb, var(--mk-text) 48%, transparent));
202
+ }
203
+
204
+ [data-mk-scroll-rail][data-mk-dragging] [data-mk-scroll-pill] {
205
+ background: var(--mk-scroll-thumb-active, var(--mk-accent));
206
+ }
207
+
208
+ [data-mk-dragging] [data-mk-scroll-viewport] {
209
+ -webkit-user-select: none;
210
+ user-select: none;
211
+ }
212
+
213
+ /* Back to top: a tonal pill in the corner, clear of the bars. */
214
+ [data-mk-scroll-top] {
215
+ position: absolute;
216
+ z-index: 3;
217
+ right: calc(var(--mk-scroll-view-right, 0px) + 20px);
218
+ bottom: calc(var(--mk-scroll-view-bottom, 0px) + 16px);
219
+ display: inline-grid;
220
+ place-items: center;
221
+ width: 40px;
222
+ height: 40px;
223
+ padding: 0;
224
+ border: 0;
225
+ border-radius: 999px;
226
+ background: var(--mk-surface-4);
227
+ box-shadow: 0 8px 24px -8px color-mix(in srgb, var(--mk-shadow-color, #000) 45%, transparent);
228
+ color: var(--mk-text);
229
+ cursor: pointer;
230
+ transition:
231
+ background-color 0.15s,
232
+ box-shadow 0.2s;
233
+ }
234
+
235
+ [data-mk-overflow-x] > [data-mk-scroll-top] {
236
+ bottom: calc(var(--mk-scroll-view-bottom, 0px) + 22px);
237
+ }
238
+
239
+ [data-mk-scroll-top][hidden] {
240
+ display: none;
241
+ }
242
+
243
+ [data-mk-scroll-top]:hover {
244
+ background: color-mix(in srgb, var(--mk-surface-4) 80%, var(--mk-text) 10%);
245
+ }
246
+
247
+ [data-mk-scroll-top]:focus-visible {
248
+ outline: none;
249
+ box-shadow:
250
+ 0 0 0 3px color-mix(in srgb, var(--mk-accent) 45%, transparent),
251
+ 0 8px 24px -8px color-mix(in srgb, var(--mk-shadow-color, #000) 45%, transparent);
252
+ }
253
+
254
+ @media (prefers-reduced-motion: reduce) {
255
+ [data-mk-scroll-rail],
256
+ [data-mk-scroll-rail]::before,
257
+ [data-mk-scroll-pill],
258
+ [data-mk-scroll-top] {
259
+ transition: none;
260
+ }
261
+ }
262
+
1
263
  /* components/select/select.css */
2
264
  /* select — a 12 px field button (surface-3) with the chosen label and a chevron that turns, opening the kit's menu:
3
265
  a 16 px surface-1 panel with 8 px items, group headings and a check on the chosen one. The label slides in out of a
@@ -73,20 +335,38 @@ mk-select {
73
335
  transform: rotate(180deg);
74
336
  }
75
337
 
76
- /* The menu: like the panels of the data table (surface-1, a hairline, 8 px items). */
338
+ /* The menu: like the panels of the data table (surface-1, a hairline, 8 px items). The items scroll in a list with the
339
+ kit's scroll-area bar, kept clear of the rounded corners; the system bar never shows. */
77
340
  .mk-dialog.mk-select-menu {
78
341
  --mk-dialog-bg: var(--mk-surface-1);
79
342
  --mk-dialog-radius: 16px;
80
343
  --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);
81
- gap: 0.125rem;
344
+ --mk-scroll-inset: 10px;
82
345
  min-width: max(10rem, var(--mk-select-width, 0px));
83
346
  max-height: min(20rem, 60dvh);
84
- padding: 0.375rem;
85
- overflow-y: auto;
347
+ padding: 0;
348
+ overflow: hidden;
86
349
  -webkit-backdrop-filter: none;
87
350
  backdrop-filter: none;
88
351
  }
89
352
 
353
+ .mk-dialog.mk-select-menu [data-mk-select-list] {
354
+ display: flex;
355
+ flex: 1 1 auto;
356
+ flex-direction: column;
357
+ gap: 0.125rem;
358
+ min-height: 0;
359
+ padding: 0.375rem;
360
+ overflow-x: hidden;
361
+ overflow-y: auto;
362
+ overscroll-behavior: contain;
363
+ }
364
+
365
+ /* A long list leaves the bar its own lane. */
366
+ .mk-dialog.mk-select-menu[data-mk-overflow-y] [data-mk-select-list] {
367
+ padding-inline-end: 0.875rem;
368
+ }
369
+
90
370
  .mk-dialog.mk-select-menu [data-mk-item] {
91
371
  flex: none;
92
372
  gap: 0.625rem;
@@ -1,7 +1,7 @@
1
1
  import { I as Instance } from '../types-BkS_raL8.js';
2
- import { e2 as StudioDockInstance, e5 as StudioDockView, el as TrailerInstance, bz as DialogInstance, bB as DialogOptions, cs as MenuInstance, cY as QuantityInstance, cI as PaginationInstance, c9 as HoverCardInstance, cf as InputOtpInstance, aO as CalendarInstance, dM as SlotPickerInstance, ax as AttachmentInstance, aw as AttachmentFile, aC as AttachmentStatus, dJ as SkeletonInstance, c$ as QuestionnaireInstance, c_ as QuestionnaireAnswers, b1 as CodeBlockInstance, bg as ContextMenuInstance, ck as LinkPreviewInstance, cV as ProgressInstance, d7 as RangeSliderInstance, d9 as RangeValue, aU as ChartInstance, aV as ChartOptions, bj as CreditCardInstance, bi as CreditCardField, bm as CreditCardValues, aT as CardBrand, be as CommandSearchInstance, bd as CommandItem, c7 as HoldConfirmInstance, cd as ImagePreviewInstance, cB as NotificationBellInstance, cP as PasswordStrengthInstance, dn as ScratchCardInstance, dV as StarRatingInstance, bb as ColorSliderInstance, b3 as ColorAreaInstance, b6 as ColorFieldInstance, b9 as ColorPickerInstance, ec as TimeFieldInstance, d5 as RangeCalendarInstance, bu as DateRange, bv as DateRangePickerInstance, ej as TooltipInstance, cT as PopoverInstance, cn as LoadingButtonInstance, cp as LoadingState, aI as BreadcrumbInstance, bN as EmptyStateInstance, dX as StatCardInstance, aY as ChartTooltipInstance, cw as MultiSelectInstance, e7 as TagInputInstance, bx as DateTimePickerInstance, bZ as FilterBuilderInstance, c1 as FilterGroup, eg as TimelineInstance, ef as TimelineEvent, aq as ActivityFeedInstance, as as ActivityItem, eo as TreeViewInstance, bU as FileExplorerInstance, ci as JsonViewerInstance, er as VirtualListInstance, dc as ResizablePanelInstance, dT as SplitViewInstance, bs as DataTableInstance, bq as DataRow, bI as EditableTableInstance, di as RichTextEditorInstance, dv as SelectInstance, au as AddToCartInstance, dq as ScrollIslandInstance, dE as SignaturePadInstance, dz as SignatureData, dA as SignatureExportOptions, dB as SignaturePNGOptions, ez as WaveformPlayerInstance, eA as WaveformPlayerOptions, eB as WaveformPlayerState, ew as VoiceMessageBubbleInstance, ex as VoiceMessageBubbleOptions, bE as DrilldownMenuInstance, bF as DrilldownMenuItem, eE as WheelPickerInstance, eD as WheelPickerEntry, dZ as StepperInstance, d2 as RadioGroupInstance, bP as EqualizerSliderInstance, e9 as TemperatureSliderInstance, eb as TemperatureUnit, da as RatingScaleInstance, cE as NotificationStackInstance, cG as NotificationStackOptions, cF as NotificationStackItem, aG as BentoGridInstance, aH as BentoGridOptions, ds as ScrollPreviewDockInstance, du as ScrollPreviewDockOptions, dt as ScrollPreviewDockItem, e0 as StickyHeaderInstance, e1 as StickyHeaderOptions, c5 as HandwritingTextInstance, cL as ParticleButtonInstance, cq as MagnetizeButtonInstance, aE as BadgeButtonInstance, cu as MorphingPageDotsInstance, cz as NotFoundInstance } from '../engine-t8d7brjn.js';
3
- import { E as ThemePickerInstance, M as ToasterInstance, C as ChatInstance, d as ChatRole, l as NavInstance, n as NavStyle, o as NavStyleAlias, e as CursorInstance, I as IslandInstance, V as ToolbarInstance, B as BidirectionalSliderInstance, X as VoiceDotsInstance, Z as VoiceState, r as PieChartInstance, s as PieChartOptions, R as RadarChartInstance, u as RadarChartOptions, w as RadialChartInstance, x as RadialChartOptions, S as SankeyChartInstance, z as SankeyChartOptions, H as HeatmapChartInstance, h as HeatmapChartOptions, O as OrbitMenuInstance } from '../store-6hZNKiee.js';
4
- export { an as toast } from '../store-6hZNKiee.js';
2
+ import { e7 as StudioDockInstance, ea as StudioDockView, eq as TrailerInstance, bA as DialogInstance, bC as DialogOptions, ct as MenuInstance, cZ as QuantityInstance, cJ as PaginationInstance, ca as HoverCardInstance, cg as InputOtpInstance, aP as CalendarInstance, dR as SlotPickerInstance, ay as AttachmentInstance, ax as AttachmentFile, aD as AttachmentStatus, dO as SkeletonInstance, d0 as QuestionnaireInstance, c$ as QuestionnaireAnswers, b2 as CodeBlockInstance, bh as ContextMenuInstance, cl as LinkPreviewInstance, cW as ProgressInstance, d8 as RangeSliderInstance, da as RangeValue, aV as ChartInstance, aW as ChartOptions, bk as CreditCardInstance, bj as CreditCardField, bn as CreditCardValues, aU as CardBrand, bf as CommandSearchInstance, be as CommandItem, c8 as HoldConfirmInstance, ce as ImagePreviewInstance, cC as NotificationBellInstance, cQ as PasswordStrengthInstance, dp as ScratchCardInstance, d_ as StarRatingInstance, bc as ColorSliderInstance, b4 as ColorAreaInstance, b7 as ColorFieldInstance, ba as ColorPickerInstance, eh as TimeFieldInstance, d6 as RangeCalendarInstance, bv as DateRange, bw as DateRangePickerInstance, eo as TooltipInstance, cU as PopoverInstance, co as LoadingButtonInstance, cq as LoadingState, aJ as BreadcrumbInstance, bO as EmptyStateInstance, e0 as StatCardInstance, aZ as ChartTooltipInstance, cx as MultiSelectInstance, ec as TagInputInstance, by as DateTimePickerInstance, b_ as FilterBuilderInstance, c2 as FilterGroup, el as TimelineInstance, ek as TimelineEvent, ar as ActivityFeedInstance, at as ActivityItem, et as TreeViewInstance, bV as FileExplorerInstance, cj as JsonViewerInstance, ew as VirtualListInstance, dd as ResizablePanelInstance, dY as SplitViewInstance, bt as DataTableInstance, br as DataRow, bJ as EditableTableInstance, dj as RichTextEditorInstance, dA as SelectInstance, av as AddToCartInstance, dv as ScrollIslandInstance, dJ as SignaturePadInstance, dE as SignatureData, dF as SignatureExportOptions, dG as SignaturePNGOptions, eE as WaveformPlayerInstance, eF as WaveformPlayerOptions, eG as WaveformPlayerState, eB as VoiceMessageBubbleInstance, eC as VoiceMessageBubbleOptions, bF as DrilldownMenuInstance, bG as DrilldownMenuItem, eJ as WheelPickerInstance, eI as WheelPickerEntry, e2 as StepperInstance, d3 as RadioGroupInstance, bQ as EqualizerSliderInstance, ee as TemperatureSliderInstance, eg as TemperatureUnit, db as RatingScaleInstance, cF as NotificationStackInstance, cH as NotificationStackOptions, cG as NotificationStackItem, aH as BentoGridInstance, aI as BentoGridOptions, dx as ScrollPreviewDockInstance, dz as ScrollPreviewDockOptions, dy as ScrollPreviewDockItem, e5 as StickyHeaderInstance, e6 as StickyHeaderOptions, c6 as HandwritingTextInstance, cM as ParticleButtonInstance, cr as MagnetizeButtonInstance, aF as BadgeButtonInstance, cv as MorphingPageDotsInstance, cA as NotFoundInstance, ds as ScrollAreaInstance } from '../engine-D6XV-WNt.js';
3
+ import { E as ThemePickerInstance, M as ToasterInstance, C as ChatInstance, d as ChatRole, l as NavInstance, n as NavStyle, o as NavStyleAlias, e as CursorInstance, I as IslandInstance, V as ToolbarInstance, B as BidirectionalSliderInstance, X as VoiceDotsInstance, Z as VoiceState, r as PieChartInstance, s as PieChartOptions, R as RadarChartInstance, u as RadarChartOptions, w as RadialChartInstance, x as RadialChartOptions, S as SankeyChartInstance, z as SankeyChartOptions, H as HeatmapChartInstance, h as HeatmapChartOptions, O as OrbitMenuInstance } from '../store-CAHWkurn.js';
4
+ export { an as toast } from '../store-CAHWkurn.js';
5
5
  import { C as ChatBackgroundInstance, c as StepsInstance, P as PillButtonInstance } from '../engine-5zRIssTO.js';
6
6
  import { L as LikeButtonInstance, S as SwipeActionsInstance } from '../engine-QECQnGz1.js';
7
7
  import 'gsap/Flip';
@@ -1271,6 +1271,16 @@ declare class MkNotFoundElement extends MkElement<NotFoundInstance> {
1271
1271
  }
1272
1272
  declare const defineNotFound: () => void;
1273
1273
 
1274
+ /**
1275
+ * <mk-scroll-area class="mk-scroll-area" style="height: 20rem" back-to-top>…</mk-scroll-area>
1276
+ * Its content is wrapped in the viewport. Emits mk:scroll ({x, y}).
1277
+ */
1278
+ declare class MkScrollAreaElement extends MkElement<ScrollAreaInstance> {
1279
+ static options: Record<string, OptionType>;
1280
+ protected create(options: Record<string, unknown>): ScrollAreaInstance;
1281
+ }
1282
+ declare const defineScrollArea: () => void;
1283
+
1274
1284
  /** Tag name → element class, for every component. */
1275
1285
  declare const ELEMENTS: {
1276
1286
  readonly 'mk-theme-picker': typeof MkThemePickerElement;
@@ -1373,9 +1383,10 @@ declare const ELEMENTS: {
1373
1383
  readonly 'mk-badge-button': typeof MkBadgeButtonElement;
1374
1384
  readonly 'mk-morphing-page-dots': typeof MkMorphingPageDotsElement;
1375
1385
  readonly 'mk-not-found': typeof MkNotFoundElement;
1386
+ readonly 'mk-scroll-area': typeof MkScrollAreaElement;
1376
1387
  };
1377
1388
  type ElementName = keyof typeof ELEMENTS;
1378
1389
  /** Register every motion-kit element (or the ones named). Safe to call more than once. */
1379
1390
  declare function defineElements(names?: ElementName[]): void;
1380
1391
 
1381
- export { ELEMENTS, type ElementName, MkActivityFeedElement, MkAddToCartElement, MkAttachmentElement, MkBadgeButtonElement, MkBentoGridElement, MkBidirectionalSliderElement, MkBreadcrumbElement, MkCalendarElement, MkChartElement, MkChartTooltipElement, MkChatBackgroundElement, MkChatElement, MkCodeBlockElement, MkColorAreaElement, MkColorFieldElement, MkColorPickerElement, MkColorSliderElement, MkCommandSearchElement, MkContextMenuElement, MkCreditCardElement, MkCursorElement, MkDataTableElement, MkDateRangePickerElement, MkDateTimePickerElement, MkDialogElement, MkDrawerElement, MkDrilldownMenuElement, MkEditableTableElement, MkElement, MkEmptyStateElement, MkEqualizerSliderElement, MkFileExplorerElement, MkFilterBuilderElement, MkHandwritingTextElement, MkHeatmapChartElement, MkHoldConfirmElement, MkHoverCardElement, MkImagePreviewElement, MkInputOtpElement, MkIslandElement, MkJsonViewerElement, MkLikeButtonElement, MkLinkPreviewElement, MkLoadingButtonElement, MkMagnetizeButtonElement, MkMenuElement, MkMorphingPageDotsElement, MkMultiSelectElement, MkNavElement, MkNotFoundElement, MkNotificationBellElement, MkNotificationStackElement, MkOrbitMenuElement, MkPaginationElement, MkParticleButtonElement, MkPasswordStrengthElement, MkPieChartElement, MkPillButtonElement, MkPopoverElement, MkProgressElement, MkQuantityElement, MkQuestionnaireElement, MkRadarChartElement, MkRadialChartElement, MkRadioGroupElement, MkRangeCalendarElement, MkRangeSliderElement, MkRatingScaleElement, MkResizablePanelElement, MkRichTextEditorElement, MkSankeyChartElement, MkScratchCardElement, MkScrollIslandElement, MkScrollPreviewDockElement, MkSelectElement, MkSignaturePadElement, MkSkeletonElement, MkSlotPickerElement, MkSplitViewElement, MkStarRatingElement, MkStatCardElement, MkStepperElement, MkStepsElement, MkStickyHeaderElement, MkStudioDockElement, MkSwipeActionsElement, MkTagInputElement, MkTemperatureSliderElement, MkThemePickerElement, MkTimeFieldElement, MkTimelineElement, MkToasterElement, MkToolbarElement, MkTooltipElement, MkTrailerElement, MkTreeViewElement, MkVirtualListElement, MkVoiceDotsElement, MkVoiceMessageBubbleElement, MkWaveformPlayerElement, MkWheelPickerElement, type OptionType, SafeHTMLElement, defineBadgeButton, defineBentoGrid, defineDrilldownMenu, defineElement, defineElements, defineEqualizerSlider, defineHandwritingText, defineMagnetizeButton, defineMorphingPageDots, defineNotFound, defineNotificationStack, defineParticleButton, defineRadioGroup, defineRatingScale, defineScrollPreviewDock, defineSignaturePad, defineStepper, defineStickyHeader, defineStudioDock, defineTemperatureSlider, defineTrailer, defineVoiceMessageBubble, defineWaveformPlayer, defineWheelPicker };
1392
+ export { ELEMENTS, type ElementName, MkActivityFeedElement, MkAddToCartElement, MkAttachmentElement, MkBadgeButtonElement, MkBentoGridElement, MkBidirectionalSliderElement, MkBreadcrumbElement, MkCalendarElement, MkChartElement, MkChartTooltipElement, MkChatBackgroundElement, MkChatElement, MkCodeBlockElement, MkColorAreaElement, MkColorFieldElement, MkColorPickerElement, MkColorSliderElement, MkCommandSearchElement, MkContextMenuElement, MkCreditCardElement, MkCursorElement, MkDataTableElement, MkDateRangePickerElement, MkDateTimePickerElement, MkDialogElement, MkDrawerElement, MkDrilldownMenuElement, MkEditableTableElement, MkElement, MkEmptyStateElement, MkEqualizerSliderElement, MkFileExplorerElement, MkFilterBuilderElement, MkHandwritingTextElement, MkHeatmapChartElement, MkHoldConfirmElement, MkHoverCardElement, MkImagePreviewElement, MkInputOtpElement, MkIslandElement, MkJsonViewerElement, MkLikeButtonElement, MkLinkPreviewElement, MkLoadingButtonElement, MkMagnetizeButtonElement, MkMenuElement, MkMorphingPageDotsElement, MkMultiSelectElement, MkNavElement, MkNotFoundElement, MkNotificationBellElement, MkNotificationStackElement, MkOrbitMenuElement, MkPaginationElement, MkParticleButtonElement, MkPasswordStrengthElement, MkPieChartElement, MkPillButtonElement, MkPopoverElement, MkProgressElement, MkQuantityElement, MkQuestionnaireElement, MkRadarChartElement, MkRadialChartElement, MkRadioGroupElement, MkRangeCalendarElement, MkRangeSliderElement, MkRatingScaleElement, MkResizablePanelElement, MkRichTextEditorElement, MkSankeyChartElement, MkScratchCardElement, MkScrollAreaElement, MkScrollIslandElement, MkScrollPreviewDockElement, MkSelectElement, MkSignaturePadElement, MkSkeletonElement, MkSlotPickerElement, MkSplitViewElement, MkStarRatingElement, MkStatCardElement, MkStepperElement, MkStepsElement, MkStickyHeaderElement, MkStudioDockElement, MkSwipeActionsElement, MkTagInputElement, MkTemperatureSliderElement, MkThemePickerElement, MkTimeFieldElement, MkTimelineElement, MkToasterElement, MkToolbarElement, MkTooltipElement, MkTrailerElement, MkTreeViewElement, MkVirtualListElement, MkVoiceDotsElement, MkVoiceMessageBubbleElement, MkWaveformPlayerElement, MkWheelPickerElement, type OptionType, SafeHTMLElement, defineBadgeButton, defineBentoGrid, defineDrilldownMenu, defineElement, defineElements, defineEqualizerSlider, defineHandwritingText, defineMagnetizeButton, defineMorphingPageDots, defineNotFound, defineNotificationStack, defineParticleButton, defineRadioGroup, defineRatingScale, defineScrollArea, defineScrollPreviewDock, defineSignaturePad, defineStepper, defineStickyHeader, defineStudioDock, defineTemperatureSlider, defineTrailer, defineVoiceMessageBubble, defineWaveformPlayer, defineWheelPicker };