@yewdiel21/motion-kit 0.18.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.
- package/README.md +240 -222
- package/dist/auto/index.d.ts +4 -3
- package/dist/auto/index.js +5 -3
- package/dist/auto/index.js.map +1 -1
- package/dist/{chunk-QFBOHPWZ.js → chunk-CQP66AZK.js} +2 -2
- package/dist/{chunk-QP4QJOEN.js → chunk-H4STLMCM.js} +2 -2
- package/dist/{chunk-EDMXWUW3.js → chunk-KDIJX6G4.js} +3 -3
- package/dist/{chunk-DOOMULVV.js → chunk-OLT3CWDJ.js} +4 -2
- package/dist/chunk-OLT3CWDJ.js.map +1 -0
- package/dist/{chunk-AWDEKDEJ.js → chunk-PEDYJ2TV.js} +8 -22
- package/dist/chunk-PEDYJ2TV.js.map +1 -0
- package/dist/{chunk-Q7IW4FV3.js → chunk-Y4GIBTRG.js} +1422 -967
- package/dist/chunk-Y4GIBTRG.js.map +1 -0
- package/dist/css/components/code-block.css +267 -0
- package/dist/css/components/command-search.css +274 -2
- package/dist/css/components/dialog.css +264 -0
- package/dist/css/components/heatmap-chart.css +267 -1
- package/dist/css/components/scroll-area.css +261 -0
- package/dist/css/components/select.css +284 -4
- package/dist/elements/index.d.ts +15 -4
- package/dist/elements/index.js +36 -6
- package/dist/elements/index.js.map +1 -1
- package/dist/{engine-t8d7brjn.d.ts → engine-D6XV-WNt.d.ts} +50 -1
- package/dist/gl/index.js +2 -2
- package/dist/index.css +308 -7
- package/dist/index.d.ts +3 -3
- package/dist/index.js +7 -5
- package/dist/index.js.map +1 -1
- package/dist/react/index.d.ts +20 -7
- package/dist/react/index.js +56 -7
- package/dist/react/index.js.map +1 -1
- package/dist/{reduced-dPsZYqtI.d.ts → reduced-4croIXl-.d.ts} +1 -1
- package/dist/{store-6hZNKiee.d.ts → store-CAHWkurn.d.ts} +1 -1
- package/package.json +110 -110
- package/registry.json +1357 -1340
- package/src/auto/auto-init.ts +341 -339
- package/src/components/code-block/README.md +1 -1
- package/src/components/code-block/code-block.css +5 -0
- package/src/components/code-block/engine.ts +5 -0
- package/src/components/command-search/README.md +1 -1
- package/src/components/command-search/command-search.css +12 -2
- package/src/components/command-search/engine.ts +6 -0
- package/src/components/dialog/README.md +104 -103
- package/src/components/dialog/dialog.css +2 -0
- package/src/components/dialog/engine.ts +465 -449
- package/src/components/heatmap-chart/README.md +48 -48
- package/src/components/heatmap-chart/engine.ts +6 -1
- package/src/components/heatmap-chart/heatmap-chart.css +5 -1
- package/src/components/icons.ts +1 -0
- package/src/components/scroll-area/README.md +89 -0
- package/src/components/scroll-area/element.ts +35 -0
- package/src/components/scroll-area/engine.ts +528 -0
- package/src/components/scroll-area/react.tsx +67 -0
- package/src/components/scroll-area/scroll-area.css +260 -0
- package/src/components/select/README.md +1 -1
- package/src/components/select/engine.ts +16 -4
- package/src/components/select/select.css +22 -4
- package/src/core/timing.ts +2 -0
- package/src/elements/index.ts +321 -318
- package/src/index.ts +1 -0
- package/src/motion/morph.ts +5 -2
- package/src/react/index.ts +2 -1
- package/dist/chunk-AWDEKDEJ.js.map +0 -1
- package/dist/chunk-DOOMULVV.js.map +0 -1
- package/dist/chunk-Q7IW4FV3.js.map +0 -1
- /package/dist/{chunk-QFBOHPWZ.js.map → chunk-CQP66AZK.js.map} +0 -0
- /package/dist/{chunk-QP4QJOEN.js.map → chunk-H4STLMCM.js.map} +0 -0
- /package/dist/{chunk-EDMXWUW3.js.map → chunk-KDIJX6G4.js.map} +0 -0
|
@@ -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/dialog/dialog.css */
|
|
2
264
|
/* dialog — modal surface: 400 px, radius 40, tonal surface; full screen under 680 px. */
|
|
3
265
|
.mk-dialog {
|
|
@@ -6,6 +268,8 @@
|
|
|
6
268
|
--mk-dialog-width: 400px;
|
|
7
269
|
--mk-dialog-padding: 24px;
|
|
8
270
|
--mk-dialog-shadow: 0 24px 64px -16px rgb(0 0 0 / 0.35);
|
|
271
|
+
/* The body's scroll-area bar keeps its ends clear of the rounded corners. */
|
|
272
|
+
--mk-scroll-inset: max(6px, calc(var(--mk-dialog-radius) * 0.6));
|
|
9
273
|
width: min(var(--mk-dialog-width), calc(100vw - 32px));
|
|
10
274
|
max-width: none;
|
|
11
275
|
max-height: min(88dvh, calc(100dvh - 32px));
|
|
@@ -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/chart/chart.css */
|
|
2
264
|
/* chart — Melon Mind's Indicadores: a monochrome line on the surface, the baseline only, the last value in a pill,
|
|
3
265
|
a dotted guide, the inverse glass tooltip and outlined legend pills.
|
|
@@ -318,7 +580,11 @@ mk-heatmap-chart {
|
|
|
318
580
|
overflow-x: auto;
|
|
319
581
|
overflow-y: hidden;
|
|
320
582
|
padding-block: 4px;
|
|
321
|
-
|
|
583
|
+
}
|
|
584
|
+
|
|
585
|
+
/* Weeks that scroll leave the scroll-area bar a lane below the last row, so a click on a day never lands on it. */
|
|
586
|
+
[data-mk-overflow-x] > [data-mk-heatmap-scroll] {
|
|
587
|
+
padding-bottom: 16px;
|
|
322
588
|
}
|
|
323
589
|
|
|
324
590
|
[data-mk-chart-type='heatmap'] [data-mk-chart-svg] {
|