@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
@@ -0,0 +1,16 @@
1
+ /* components/badge-button/badge-button.css */
2
+ .mk-badge-button,
3
+ mk-badge-button { display: inline-flex; }
4
+ [data-mk-badge-button] {
5
+ display: inline-flex; align-items: center; justify-content: center; gap: .7rem; position: relative;
6
+ min-height: 48px; padding: .65rem 1rem .65rem 1.25rem; border: 1px solid var(--mk-outline-soft); border-radius: 16px;
7
+ background: var(--mk-surface-3); color: var(--mk-text); font: 500 .9375rem var(--mk-font); cursor: pointer;
8
+ transition: background 160ms, border-radius 320ms var(--mk-ease-swatch);
9
+ }
10
+ [data-mk-badge-button]:hover:not(:disabled) { border-radius: 24px; background: var(--mk-surface-4); }
11
+ [data-mk-badge-button]:focus-visible { outline: 2px solid var(--mk-accent); outline-offset: 4px; }
12
+ [data-mk-badge-button]:disabled,
13
+ [data-mk-badge-button][aria-disabled='true'] { opacity: .4; cursor: not-allowed; }
14
+ [data-mk-badge-count] { display: inline-grid; place-items: center; min-width: 26px; height: 26px; padding: 0 6px; border-radius: 999px; background: var(--mk-accent); color: var(--mk-on-accent); font-size: .75rem; font-weight: 650; font-variant-numeric: tabular-nums; }
15
+ [data-mk-badge-count][hidden] { display: none; }
16
+ @media (prefers-reduced-motion: reduce) { [data-mk-badge-button] { transition: none; } }
@@ -0,0 +1,13 @@
1
+ /* components/bento-grid/bento-grid.css */
2
+ .mk-bento-grid, mk-bento-grid { container-type: inline-size; display: grid; grid-template-columns: repeat(var(--mk-bento-columns, 3), minmax(0, 1fr)); grid-auto-rows: minmax(112px, auto); gap: var(--mk-bento-gap, 12px); color: var(--mk-text); font-family: var(--mk-font); }
3
+ .mk-bento-grid > [data-mk-bento-item], mk-bento-grid > [data-mk-bento-item] { box-sizing: border-box; min-width: 0; grid-column: span var(--mk-bento-col-span, 1); grid-row: span var(--mk-bento-row-span, 1); padding: 20px; border-radius: 24px; background: var(--mk-surface); transition: background .2s, box-shadow .25s; }
4
+ .mk-bento-grid > [data-mk-bento-item][hidden], mk-bento-grid > [data-mk-bento-item][hidden] { display: none !important; }
5
+ .mk-bento-grid > [data-mk-bento-item]:focus-within, mk-bento-grid > [data-mk-bento-item]:focus-within { background: var(--mk-surface-2); }
6
+ .mk-bento-grid :is(a,button):focus-visible, mk-bento-grid :is(a,button):focus-visible { outline: 2px solid var(--mk-accent); outline-offset: 4px; }
7
+ .mk-bento-grid :is(button,a)[aria-disabled=true], .mk-bento-grid button:disabled { opacity: .4; cursor: not-allowed; }
8
+ .mk-bento-grid[data-mk-empty]::after, mk-bento-grid[data-mk-empty]::after { content: attr(data-mk-empty-label); grid-column: 1 / -1; min-height: 112px; display: grid; place-items: center; border-radius: 24px; color: var(--mk-muted); background: var(--mk-surface); font-size: 13px; }
9
+ @media (hover: hover) { :is(.mk-bento-grid,mk-bento-grid) > [data-mk-bento-item]:hover { background: var(--mk-surface-2); box-shadow: 0 10px 24px -24px var(--mk-text); } }
10
+ /* The container can be a 640px playground card, independent of viewport width. */
11
+ @container (max-width: 440px) { :is(.mk-bento-grid,mk-bento-grid) > [data-mk-bento-item] { grid-column: span min(var(--mk-bento-col-span, 1), 2); padding: 16px; border-radius: 16px; } }
12
+ @media (max-width: 480px) { :is(.mk-bento-grid,mk-bento-grid) > [data-mk-bento-item] { padding: 16px; border-radius: 16px; } }
13
+ @media (prefers-reduced-motion: reduce) { :is(.mk-bento-grid,mk-bento-grid) * { transition: none !important; } }
@@ -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/code-block/code-block.css */
2
264
  /* code-block — an editor surface, dark in both modes: a bar with three quiet dots, the file name, the language and a
3
265
  glass copy button; mono lines with syntax colours, optional numbers and marked lines. A squared surface (radius 12)
@@ -21,6 +283,11 @@ mk-code-block {
21
283
  --mk-code-property: #8fd6ff;
22
284
  --mk-code-punctuation: #9aa0aa;
23
285
  --mk-code-operator: #c9ced6;
286
+ /* The scroll-area bar, light on the editor in both modes; dragged, it takes the keyword colour like the focus ring. */
287
+ --mk-scroll-thumb: rgb(255 255 255 / 0.2);
288
+ --mk-scroll-thumb-hover: rgb(255 255 255 / 0.36);
289
+ --mk-scroll-thumb-active: var(--mk-code-keyword);
290
+ --mk-scroll-rail: rgb(255 255 255 / 0.05);
24
291
  position: relative;
25
292
  display: block;
26
293
  overflow: hidden;
@@ -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/command-search/command-search.css */
2
264
  /* command-search — a dark command palette (Melonmind's glass, near black in both modes): a search field, grouped
3
265
  results with marked letters, a pill gliding under the active one and a footer with the keys. */
@@ -87,8 +349,18 @@ mk-command-search {
87
349
  overflow-y: auto;
88
350
  padding: 0 0.6rem 0.6rem;
89
351
  overscroll-behavior: contain;
90
- scrollbar-width: thin;
91
- scrollbar-color: rgb(255 255 255 / 0.15) transparent;
352
+ }
353
+
354
+ /* The scroll-area bar, light on the dark glass in both modes; long results leave it a lane. */
355
+ [data-mk-command] [data-mk-command-panel] {
356
+ --mk-scroll-thumb: rgb(255 255 255 / 0.2);
357
+ --mk-scroll-thumb-hover: rgb(255 255 255 / 0.36);
358
+ --mk-scroll-thumb-active: rgb(255 255 255 / 0.62);
359
+ --mk-scroll-rail: rgb(255 255 255 / 0.05);
360
+ }
361
+
362
+ [data-mk-command] [data-mk-command-panel][data-mk-overflow-y] [data-mk-command-scroll] {
363
+ padding-right: 14px;
92
364
  }
93
365
 
94
366
  [data-mk-command] [data-mk-command-pill] {