@dodlhuat/basix 1.3.1 → 1.3.3
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 +14 -8
- package/css/accordion.scss +0 -5
- package/css/badge.scss +1 -6
- package/css/bottom-sheet.scss +3 -8
- package/css/breadcrumb.scss +6 -15
- package/css/button.scss +2 -1
- package/css/calendar.scss +0 -67
- package/css/card.scss +0 -5
- package/css/carousel.scss +0 -3
- package/css/chart.scss +0 -25
- package/css/chat-bubbles.scss +0 -15
- package/css/checkbox.scss +3 -2
- package/css/chips.scss +3 -7
- package/css/code-viewer.scss +1 -5
- package/css/context-menu.scss +5 -21
- package/css/datepicker.scss +6 -9
- package/css/docs.scss +0 -4
- package/css/dropdown.scss +1 -1
- package/css/editor.scss +1 -23
- package/css/file-uploader.scss +2 -2
- package/css/flyout-menu.scss +65 -58
- package/css/form.scss +0 -28
- package/css/gallery.scss +2 -3
- package/css/group-picker.scss +5 -35
- package/css/icons.scss +0 -3
- package/css/lightbox.scss +2 -4
- package/css/mixins.scss +8 -0
- package/css/modal.scss +3 -3
- package/css/parameters.scss +6 -1
- package/css/popover.scss +3 -15
- package/css/progress.scss +0 -6
- package/css/push-menu.scss +3 -28
- package/css/radiobutton.scss +2 -1
- package/css/range-slider.scss +1 -7
- package/css/scrollbar.scss +9 -16
- package/css/sidebar-nav.scss +0 -12
- package/css/stepper.scss +0 -4
- package/css/style.css +108 -116
- package/css/style.css.map +1 -1
- package/css/style.min.css +1 -1
- package/css/style.min.css.map +1 -1
- package/css/style.scss +1 -1
- package/css/table.scss +0 -4
- package/css/tabs.scss +0 -2
- package/css/timeline.scss +1 -13
- package/css/timepicker.scss +55 -39
- package/css/toast.scss +1 -1
- package/css/tooltip.scss +1 -5
- package/css/tree.scss +1 -1
- package/css/typography.scss +3 -3
- package/css/virtual-dropdown.scss +3 -28
- package/js/bottom-sheet.d.ts +3 -1
- package/js/bottom-sheet.js +26 -27
- package/js/calendar.d.ts +7 -0
- package/js/calendar.js +14 -33
- package/js/carousel.d.ts +2 -0
- package/js/carousel.js +13 -5
- package/js/chart.d.ts +4 -0
- package/js/chart.js +13 -31
- package/js/code-viewer.d.ts +1 -0
- package/js/code-viewer.js +4 -0
- package/js/context-menu.d.ts +9 -2
- package/js/context-menu.js +17 -14
- package/js/datepicker.d.ts +4 -0
- package/js/datepicker.js +26 -11
- package/js/dropdown.d.ts +3 -3
- package/js/dropdown.js +6 -9
- package/js/editor.d.ts +1 -1
- package/js/editor.js +14 -20
- package/js/file-uploader.d.ts +4 -0
- package/js/file-uploader.js +52 -43
- package/js/flyout-menu.d.ts +5 -3
- package/js/flyout-menu.js +23 -46
- package/js/gallery.d.ts +4 -0
- package/js/gallery.js +39 -50
- package/js/group-picker.d.ts +5 -0
- package/js/group-picker.js +12 -17
- package/js/lightbox.d.ts +3 -0
- package/js/lightbox.js +12 -6
- package/js/modal.d.ts +3 -1
- package/js/modal.js +14 -11
- package/js/popover.d.ts +2 -0
- package/js/popover.js +26 -30
- package/js/position.d.ts +2 -0
- package/js/position.js +1 -5
- package/js/push-menu.d.ts +2 -1
- package/js/push-menu.js +25 -48
- package/js/range-slider.d.ts +1 -0
- package/js/range-slider.js +5 -3
- package/js/scroll.d.ts +2 -0
- package/js/scroll.js +1 -0
- package/js/scrollbar.d.ts +2 -0
- package/js/scrollbar.js +24 -36
- package/js/select.d.ts +1 -0
- package/js/select.js +5 -10
- package/js/sidebar-nav.d.ts +2 -0
- package/js/sidebar-nav.js +8 -0
- package/js/stepper.d.ts +2 -0
- package/js/stepper.js +7 -1
- package/js/table.d.ts +4 -0
- package/js/table.js +15 -22
- package/js/tabs.d.ts +2 -0
- package/js/tabs.js +6 -14
- package/js/theme.d.ts +1 -0
- package/js/theme.js +5 -13
- package/js/timepicker.d.ts +22 -5
- package/js/timepicker.js +160 -57
- package/js/toast.d.ts +3 -1
- package/js/toast.js +25 -22
- package/js/tooltip.d.ts +2 -0
- package/js/tooltip.js +21 -19
- package/js/tree.d.ts +3 -0
- package/js/tree.js +13 -0
- package/js/utils.d.ts +1 -3
- package/js/utils.js +0 -3
- package/js/virtual-dropdown.d.ts +3 -0
- package/js/virtual-dropdown.js +25 -0
- package/package.json +2 -2
package/css/flyout-menu.scss
CHANGED
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
/* Flyout menu uses its own dark palette intentionally —
|
|
2
|
-
it renders over any background regardless of light/dark mode.
|
|
3
|
-
Scoped here rather than polluting :root. */
|
|
4
1
|
.flyout-menu,
|
|
5
2
|
.flyout-overlay,
|
|
6
3
|
.site-header,
|
|
@@ -26,7 +23,6 @@ body {
|
|
|
26
23
|
min-height: 100vh;
|
|
27
24
|
}
|
|
28
25
|
|
|
29
|
-
/* Header */
|
|
30
26
|
.site-header {
|
|
31
27
|
display: flex;
|
|
32
28
|
justify-content: space-between;
|
|
@@ -80,7 +76,6 @@ body {
|
|
|
80
76
|
font-size: 1.2rem;
|
|
81
77
|
}
|
|
82
78
|
|
|
83
|
-
/* Flyout Overlay */
|
|
84
79
|
.flyout-overlay {
|
|
85
80
|
position: fixed;
|
|
86
81
|
top: 0;
|
|
@@ -100,22 +95,19 @@ body {
|
|
|
100
95
|
visibility: visible;
|
|
101
96
|
}
|
|
102
97
|
|
|
103
|
-
/* Flyout Menu Base */
|
|
104
98
|
.flyout-menu {
|
|
105
99
|
position: fixed;
|
|
106
|
-
background:
|
|
107
|
-
backdrop-filter: blur(
|
|
108
|
-
-webkit-backdrop-filter: blur(
|
|
100
|
+
background: rgba(10, 15, 30, 0.82);
|
|
101
|
+
backdrop-filter: blur(28px) saturate(1.4);
|
|
102
|
+
-webkit-backdrop-filter: blur(28px) saturate(1.4);
|
|
109
103
|
z-index: 210;
|
|
110
104
|
display: flex;
|
|
111
105
|
flex-direction: column;
|
|
112
|
-
padding:
|
|
113
|
-
box-shadow: 0 0
|
|
106
|
+
padding: 1.75rem 1.5rem;
|
|
107
|
+
box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.06), 0 32px 80px rgba(0, 0, 0, 0.6);
|
|
114
108
|
transition: transform var(--transition-speed) cubic-bezier(0.25, 1, 0.5, 1);
|
|
115
|
-
/* Smoother rollout */
|
|
116
109
|
}
|
|
117
110
|
|
|
118
|
-
/* Directional Variants */
|
|
119
111
|
.flyout-from-right {
|
|
120
112
|
top: 0;
|
|
121
113
|
right: 0;
|
|
@@ -138,37 +130,56 @@ body {
|
|
|
138
130
|
transform: translate(0, 0);
|
|
139
131
|
}
|
|
140
132
|
|
|
141
|
-
/* Flyout Header */
|
|
142
133
|
.flyout-header {
|
|
143
134
|
display: flex;
|
|
144
135
|
justify-content: space-between;
|
|
145
136
|
align-items: center;
|
|
146
|
-
margin-bottom:
|
|
137
|
+
margin-bottom: 2.5rem;
|
|
138
|
+
padding-bottom: 1.25rem;
|
|
139
|
+
border-bottom: 1px solid rgba(255, 255, 255, 0.07);
|
|
147
140
|
}
|
|
148
141
|
|
|
149
142
|
.flyout-title {
|
|
150
|
-
font-size:
|
|
143
|
+
font-size: 0.65rem;
|
|
151
144
|
font-weight: 600;
|
|
152
|
-
color:
|
|
145
|
+
color: rgba(255, 255, 255, 0.35);
|
|
153
146
|
text-transform: uppercase;
|
|
154
|
-
letter-spacing: 0.
|
|
147
|
+
letter-spacing: 0.14em;
|
|
155
148
|
}
|
|
156
149
|
|
|
157
150
|
.close-menu {
|
|
158
151
|
background: none;
|
|
159
152
|
border: none;
|
|
160
|
-
color:
|
|
153
|
+
color: rgba(255, 255, 255, 0.4);
|
|
161
154
|
cursor: pointer;
|
|
162
|
-
padding: 0.
|
|
163
|
-
|
|
155
|
+
padding: 0.3rem;
|
|
156
|
+
line-height: 0;
|
|
157
|
+
transition: color 0.2s;
|
|
164
158
|
}
|
|
165
159
|
|
|
166
160
|
.close-menu:hover {
|
|
167
|
-
|
|
168
|
-
|
|
161
|
+
color: #fff;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
.flyout-menu button {
|
|
165
|
+
display: flex;
|
|
166
|
+
padding: 0;
|
|
167
|
+
border-radius: 0;
|
|
168
|
+
background: none;
|
|
169
|
+
font-size: inherit;
|
|
170
|
+
font-weight: inherit;
|
|
171
|
+
white-space: normal;
|
|
172
|
+
transition: color 0.2s;
|
|
173
|
+
|
|
174
|
+
&:hover:not(:disabled),
|
|
175
|
+
&:active:not(:disabled),
|
|
176
|
+
&.active {
|
|
177
|
+
background: none;
|
|
178
|
+
transform: none;
|
|
179
|
+
box-shadow: none;
|
|
180
|
+
}
|
|
169
181
|
}
|
|
170
182
|
|
|
171
|
-
/* Flyout Links */
|
|
172
183
|
.flyout-links {
|
|
173
184
|
list-style: none;
|
|
174
185
|
flex-grow: 1;
|
|
@@ -189,7 +200,7 @@ body {
|
|
|
189
200
|
border: none;
|
|
190
201
|
font-size: 2rem;
|
|
191
202
|
font-weight: 600;
|
|
192
|
-
color:
|
|
203
|
+
color: rgba(255, 255, 255, 0.6);
|
|
193
204
|
text-decoration: none;
|
|
194
205
|
cursor: pointer;
|
|
195
206
|
font-family: inherit;
|
|
@@ -205,40 +216,43 @@ body {
|
|
|
205
216
|
transform: translateY(0);
|
|
206
217
|
}
|
|
207
218
|
|
|
208
|
-
.flyout-links a:hover,
|
|
209
|
-
.submenu-toggle:hover {
|
|
219
|
+
.flyout-links > li > a:hover,
|
|
220
|
+
.flyout-links > li > .submenu-toggle:hover {
|
|
221
|
+
color: #fff;
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
.submenu-toggle.active {
|
|
210
225
|
color: var(--accent-color);
|
|
211
226
|
}
|
|
212
227
|
|
|
213
228
|
.chevron {
|
|
214
|
-
|
|
215
|
-
opacity: 0.
|
|
229
|
+
flex-shrink: 0;
|
|
230
|
+
opacity: 0.5;
|
|
231
|
+
transition: transform 0.3s cubic-bezier(0.16, 1, 0.3, 1), opacity 0.2s;
|
|
216
232
|
}
|
|
217
233
|
|
|
218
234
|
.submenu-toggle.active .chevron {
|
|
219
235
|
transform: rotate(180deg);
|
|
236
|
+
opacity: 1;
|
|
220
237
|
}
|
|
221
238
|
|
|
222
|
-
/* Submenu */
|
|
223
239
|
.submenu {
|
|
224
240
|
list-style: none;
|
|
225
241
|
max-height: 0;
|
|
226
242
|
overflow: hidden;
|
|
227
243
|
transition: max-height 0.3s ease-out;
|
|
228
244
|
padding-left: 1rem;
|
|
229
|
-
border-left: 1px solid rgba(255, 255, 255, 0.
|
|
245
|
+
border-left: 1px solid rgba(255, 255, 255, 0.15);
|
|
230
246
|
margin-top: 0;
|
|
231
247
|
}
|
|
232
248
|
|
|
233
249
|
.submenu.is-open {
|
|
234
250
|
max-height: 500px;
|
|
235
|
-
/* Reduced from 2000px for tighter animation */
|
|
236
|
-
/* Arbitrary large height, increased for nesting */
|
|
237
251
|
margin-top: 1rem;
|
|
238
252
|
transition: max-height 0.4s cubic-bezier(0.16, 1, 0.3, 1);
|
|
239
|
-
/* Smoother easing */
|
|
240
253
|
}
|
|
241
254
|
|
|
255
|
+
|
|
242
256
|
.submenu li {
|
|
243
257
|
margin-bottom: 0.5rem;
|
|
244
258
|
}
|
|
@@ -246,30 +260,34 @@ body {
|
|
|
246
260
|
.submenu a {
|
|
247
261
|
font-size: 1.25rem;
|
|
248
262
|
font-weight: 400;
|
|
249
|
-
color:
|
|
263
|
+
color: rgba(255, 255, 255, 0.45);
|
|
250
264
|
transform: none !important;
|
|
251
|
-
|
|
265
|
+
transition: color 0.2s !important;
|
|
252
266
|
transition-delay: 0s !important;
|
|
267
|
+
|
|
268
|
+
&:hover { color: #fff; }
|
|
253
269
|
}
|
|
254
270
|
|
|
255
271
|
.submenu .submenu-toggle {
|
|
256
272
|
font-size: 1.25rem;
|
|
257
273
|
font-weight: 400;
|
|
258
|
-
color:
|
|
274
|
+
color: rgba(255, 255, 255, 0.45);
|
|
259
275
|
transform: none !important;
|
|
260
276
|
transition-delay: 0s !important;
|
|
261
277
|
padding: 0;
|
|
262
278
|
margin: 0;
|
|
279
|
+
|
|
280
|
+
&:hover { color: #fff; }
|
|
263
281
|
}
|
|
264
282
|
|
|
265
|
-
/* Flyout Footer */
|
|
266
283
|
.flyout-footer {
|
|
267
|
-
padding-top:
|
|
268
|
-
border-top: 1px solid
|
|
269
|
-
color:
|
|
270
|
-
font-size: 0.
|
|
284
|
+
padding-top: 1.25rem;
|
|
285
|
+
border-top: 1px solid rgba(255, 255, 255, 0.07);
|
|
286
|
+
color: rgba(255, 255, 255, 0.25);
|
|
287
|
+
font-size: 0.72rem;
|
|
288
|
+
letter-spacing: 0.03em;
|
|
271
289
|
opacity: 0;
|
|
272
|
-
transform: translateY(
|
|
290
|
+
transform: translateY(12px);
|
|
273
291
|
transition: opacity 0.4s, transform 0.4s;
|
|
274
292
|
transition-delay: var(--delay);
|
|
275
293
|
}
|
|
@@ -279,7 +297,6 @@ body {
|
|
|
279
297
|
transform: translateY(0);
|
|
280
298
|
}
|
|
281
299
|
|
|
282
|
-
/* Mobile Responsiveness */
|
|
283
300
|
@media (max-width: 480px) {
|
|
284
301
|
:root {
|
|
285
302
|
--menu-width: 100%;
|
|
@@ -289,7 +306,7 @@ body {
|
|
|
289
306
|
font-size: 2rem;
|
|
290
307
|
}
|
|
291
308
|
|
|
292
|
-
|
|
309
|
+
|
|
293
310
|
.flyout-from-right,
|
|
294
311
|
.flyout-from-left,
|
|
295
312
|
.flyout-from-top {
|
|
@@ -300,17 +317,7 @@ body {
|
|
|
300
317
|
right: auto !important;
|
|
301
318
|
bottom: auto !important;
|
|
302
319
|
border: none !important;
|
|
303
|
-
/* Remove borders for cleaner fullscreen look */
|
|
304
320
|
border-right: 1px solid var(--flyout-border) !important;
|
|
305
|
-
/* Add consistent right border */
|
|
306
|
-
transform: translateX(-100%) !important;
|
|
307
|
-
/* Force ALL to slide from LEFT with !important */
|
|
308
|
-
}
|
|
309
|
-
|
|
310
|
-
/* Remove specific transforms and force left slide */
|
|
311
|
-
.flyout-from-right,
|
|
312
|
-
.flyout-from-left,
|
|
313
|
-
.flyout-from-top {
|
|
314
321
|
transform: translateX(-100%) !important;
|
|
315
322
|
}
|
|
316
323
|
|
|
@@ -318,7 +325,7 @@ body {
|
|
|
318
325
|
transform: translate(0, 0) !important;
|
|
319
326
|
}
|
|
320
327
|
|
|
321
|
-
|
|
328
|
+
|
|
322
329
|
.flyout-from-top .flyout-links {
|
|
323
330
|
flex-direction: column;
|
|
324
331
|
align-items: stretch;
|
|
@@ -332,7 +339,7 @@ body {
|
|
|
332
339
|
.flyout-from-top .flyout-links>li>a,
|
|
333
340
|
.flyout-from-top .flyout-links>li>.submenu-toggle {
|
|
334
341
|
font-size: 2rem;
|
|
335
|
-
|
|
342
|
+
|
|
336
343
|
justify-content: space-between;
|
|
337
344
|
}
|
|
338
345
|
|
|
@@ -357,6 +364,6 @@ body {
|
|
|
357
364
|
.flyout-from-top .submenu a {
|
|
358
365
|
font-size: 1.25rem;
|
|
359
366
|
justify-content: space-between;
|
|
360
|
-
|
|
367
|
+
|
|
361
368
|
}
|
|
362
369
|
}
|
package/css/form.scss
CHANGED
|
@@ -1,10 +1,6 @@
|
|
|
1
1
|
@use "properties";
|
|
2
2
|
@use "parameters" as *;
|
|
3
3
|
|
|
4
|
-
// ─────────────────────────────────────────────────────────────────────────────
|
|
5
|
-
// Keyframes
|
|
6
|
-
// ─────────────────────────────────────────────────────────────────────────────
|
|
7
|
-
|
|
8
4
|
@keyframes field-error-shake {
|
|
9
5
|
0%, 100% { transform: translateX(0); }
|
|
10
6
|
18% { transform: translateX(-5px); }
|
|
@@ -35,10 +31,6 @@
|
|
|
35
31
|
}
|
|
36
32
|
}
|
|
37
33
|
|
|
38
|
-
// ─────────────────────────────────────────────────────────────────────────────
|
|
39
|
-
// Base field styles
|
|
40
|
-
// ─────────────────────────────────────────────────────────────────────────────
|
|
41
|
-
|
|
42
34
|
textarea, select, .select .dropdown, input {
|
|
43
35
|
width: 100%;
|
|
44
36
|
border: 1.5px solid var(--divider);
|
|
@@ -99,10 +91,6 @@ select {
|
|
|
99
91
|
cursor: pointer;
|
|
100
92
|
}
|
|
101
93
|
|
|
102
|
-
// ─────────────────────────────────────────────────────────────────────────────
|
|
103
|
-
// Custom select / dropdown
|
|
104
|
-
// ─────────────────────────────────────────────────────────────────────────────
|
|
105
|
-
|
|
106
94
|
.select-group {
|
|
107
95
|
.dropdown {
|
|
108
96
|
position: relative;
|
|
@@ -286,10 +274,6 @@ select {
|
|
|
286
274
|
}
|
|
287
275
|
}
|
|
288
276
|
|
|
289
|
-
// ─────────────────────────────────────────────────────────────────────────────
|
|
290
|
-
// Form group — label + field + hint
|
|
291
|
-
// ─────────────────────────────────────────────────────────────────────────────
|
|
292
|
-
|
|
293
277
|
.form-group {
|
|
294
278
|
display: flex;
|
|
295
279
|
flex-direction: column;
|
|
@@ -383,10 +367,6 @@ select {
|
|
|
383
367
|
}
|
|
384
368
|
}
|
|
385
369
|
|
|
386
|
-
// ─────────────────────────────────────────────────────────────────────────────
|
|
387
|
-
// Input group — prefix / suffix addons
|
|
388
|
-
// ─────────────────────────────────────────────────────────────────────────────
|
|
389
|
-
|
|
390
370
|
.input-group {
|
|
391
371
|
display: flex;
|
|
392
372
|
|
|
@@ -431,10 +411,6 @@ select {
|
|
|
431
411
|
}
|
|
432
412
|
}
|
|
433
413
|
|
|
434
|
-
// ─────────────────────────────────────────────────────────────────────────────
|
|
435
|
-
// Readonly
|
|
436
|
-
// ─────────────────────────────────────────────────────────────────────────────
|
|
437
|
-
|
|
438
414
|
input[readonly], textarea[readonly] {
|
|
439
415
|
background-color: var(--secondary-background);
|
|
440
416
|
color: var(--secondary-text);
|
|
@@ -443,10 +419,6 @@ input[readonly], textarea[readonly] {
|
|
|
443
419
|
border-style: dashed;
|
|
444
420
|
}
|
|
445
421
|
|
|
446
|
-
// ─────────────────────────────────────────────────────────────────────────────
|
|
447
|
-
// Size variants
|
|
448
|
-
// ─────────────────────────────────────────────────────────────────────────────
|
|
449
|
-
|
|
450
422
|
input.input-sm, textarea.input-sm {
|
|
451
423
|
min-height: calc($form-height * 0.85);
|
|
452
424
|
font-size: 0.875rem;
|
package/css/gallery.scss
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
@use "properties";
|
|
2
2
|
@use "parameters" as *;
|
|
3
|
+
@use "mixins" as *;
|
|
3
4
|
|
|
4
5
|
.masonry-container {
|
|
5
6
|
display: flex;
|
|
@@ -44,8 +45,7 @@
|
|
|
44
45
|
}
|
|
45
46
|
|
|
46
47
|
&:focus-visible {
|
|
47
|
-
|
|
48
|
-
outline-offset: 2px;
|
|
48
|
+
@include focus-ring();
|
|
49
49
|
}
|
|
50
50
|
}
|
|
51
51
|
|
|
@@ -96,7 +96,6 @@
|
|
|
96
96
|
font-size: 0.8125rem;
|
|
97
97
|
}
|
|
98
98
|
|
|
99
|
-
// Staggered entrance for items
|
|
100
99
|
@media (prefers-reduced-motion: no-preference) {
|
|
101
100
|
.masonry-item {
|
|
102
101
|
animation: masonry-in 0.4s cubic-bezier(0.2, 0, 0, 1) both;
|
package/css/group-picker.scss
CHANGED
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
@use "properties";
|
|
2
2
|
@use "parameters" as *;
|
|
3
|
+
@use "mixins" as *;
|
|
3
4
|
|
|
4
5
|
.group-picker {
|
|
5
6
|
position: relative;
|
|
6
7
|
width: 100%;
|
|
7
8
|
color: var(--primary-text);
|
|
8
9
|
|
|
9
|
-
// ─── Selection summary ─────────────────────────────────────────────────────
|
|
10
|
-
|
|
11
10
|
&__selection {
|
|
12
11
|
display: flex;
|
|
13
12
|
flex-wrap: wrap;
|
|
@@ -17,18 +16,16 @@
|
|
|
17
16
|
padding: calc($spacing * 0.35) calc($spacing * 0.6);
|
|
18
17
|
background: var(--background);
|
|
19
18
|
border: 1px solid var(--divider);
|
|
20
|
-
border-radius:
|
|
19
|
+
border-radius: $radius-sm;
|
|
21
20
|
margin-bottom: calc($spacing * 0.75);
|
|
22
21
|
box-shadow: $shadow;
|
|
23
22
|
transition: border-color 0.15s ease, box-shadow 0.15s ease;
|
|
24
23
|
|
|
25
|
-
// Chips inside use gap — suppress their own margins
|
|
26
24
|
.chip {
|
|
27
25
|
margin: 0;
|
|
28
26
|
animation: gp-chip-in 0.2s cubic-bezier(0.34, 1.56, 0.64, 1) both;
|
|
29
27
|
}
|
|
30
28
|
|
|
31
|
-
// Fix font icon centering inside the absolute close button
|
|
32
29
|
.chip.closeable button {
|
|
33
30
|
display: inline-flex;
|
|
34
31
|
align-items: center;
|
|
@@ -48,15 +45,13 @@
|
|
|
48
45
|
|
|
49
46
|
&:focus-within {
|
|
50
47
|
border-color: var(--accent-color);
|
|
51
|
-
|
|
48
|
+
@include focus-glow(15%);
|
|
52
49
|
}
|
|
53
50
|
}
|
|
54
51
|
|
|
55
|
-
// Parent chip — solid accent fill
|
|
56
|
-
// Specificity 0,3,0 via .chip.group-picker__chip--parent → beats .chips .chip (0,2,0)
|
|
57
52
|
&__selection .chip.group-picker__chip--parent {
|
|
58
53
|
background: var(--accent-color);
|
|
59
|
-
color: var(--background);
|
|
54
|
+
color: var(--background);
|
|
60
55
|
|
|
61
56
|
button {
|
|
62
57
|
background: color-mix(in srgb, var(--accent-color) 78%, black);
|
|
@@ -64,9 +59,6 @@
|
|
|
64
59
|
}
|
|
65
60
|
}
|
|
66
61
|
|
|
67
|
-
// ─── Search ────────────────────────────────────────────────────────────────
|
|
68
|
-
// Basix <input> handles border, focus ring, shadow — we only position the icon
|
|
69
|
-
|
|
70
62
|
&__search {
|
|
71
63
|
position: relative;
|
|
72
64
|
margin-bottom: calc($spacing * 0.5);
|
|
@@ -88,21 +80,17 @@
|
|
|
88
80
|
z-index: 1;
|
|
89
81
|
}
|
|
90
82
|
|
|
91
|
-
// ─── List container ────────────────────────────────────────────────────────
|
|
92
|
-
|
|
93
83
|
&__list {
|
|
94
84
|
max-height: 420px;
|
|
95
85
|
overflow-y: auto;
|
|
96
86
|
overflow-x: hidden;
|
|
97
87
|
-webkit-overflow-scrolling: touch;
|
|
98
88
|
border: 1px solid var(--divider);
|
|
99
|
-
border-radius:
|
|
89
|
+
border-radius: $radius-sm;
|
|
100
90
|
background: var(--background);
|
|
101
91
|
box-shadow: $shadow;
|
|
102
92
|
}
|
|
103
93
|
|
|
104
|
-
// ─── Empty state ───────────────────────────────────────────────────────────
|
|
105
|
-
|
|
106
94
|
&__empty {
|
|
107
95
|
display: flex;
|
|
108
96
|
flex-direction: column;
|
|
@@ -120,8 +108,6 @@
|
|
|
120
108
|
}
|
|
121
109
|
}
|
|
122
110
|
|
|
123
|
-
// ─── Group row ─────────────────────────────────────────────────────────────
|
|
124
|
-
|
|
125
111
|
&__group {
|
|
126
112
|
border-bottom: 1px solid var(--divider);
|
|
127
113
|
|
|
@@ -129,7 +115,6 @@
|
|
|
129
115
|
border-bottom: none;
|
|
130
116
|
}
|
|
131
117
|
|
|
132
|
-
// Expanded state: tint the header and accent the label
|
|
133
118
|
&.is-expanded > .group-picker__group-header {
|
|
134
119
|
background: color-mix(in srgb, var(--accent-color) 4%, transparent);
|
|
135
120
|
|
|
@@ -158,7 +143,6 @@
|
|
|
158
143
|
}
|
|
159
144
|
}
|
|
160
145
|
|
|
161
|
-
// Chevron — accent color when expanded, eased rotation
|
|
162
146
|
&__chevron {
|
|
163
147
|
flex-shrink: 0;
|
|
164
148
|
font-size: 1rem;
|
|
@@ -190,7 +174,6 @@
|
|
|
190
174
|
}
|
|
191
175
|
}
|
|
192
176
|
|
|
193
|
-
// Action button — pill style, overrides Basix <button> base where needed
|
|
194
177
|
&__group-action {
|
|
195
178
|
flex-shrink: 0;
|
|
196
179
|
font-size: 0.6875rem;
|
|
@@ -217,7 +200,6 @@
|
|
|
217
200
|
transform: scale(0.94);
|
|
218
201
|
}
|
|
219
202
|
|
|
220
|
-
// When button-primary is added by JS — keep pill shape
|
|
221
203
|
&.button-primary {
|
|
222
204
|
border-radius: calc($border-radius * 3);
|
|
223
205
|
font-size: 0.6875rem;
|
|
@@ -230,8 +212,6 @@
|
|
|
230
212
|
}
|
|
231
213
|
}
|
|
232
214
|
|
|
233
|
-
// ─── Leaf group ────────────────────────────────────────────────────────────
|
|
234
|
-
|
|
235
215
|
&__group.is-leaf {
|
|
236
216
|
cursor: pointer;
|
|
237
217
|
|
|
@@ -249,7 +229,6 @@
|
|
|
249
229
|
}
|
|
250
230
|
}
|
|
251
231
|
|
|
252
|
-
// Leaf check icon — springs in on select
|
|
253
232
|
&__leaf-check {
|
|
254
233
|
flex-shrink: 0;
|
|
255
234
|
font-size: 1.1rem;
|
|
@@ -260,8 +239,6 @@
|
|
|
260
239
|
transform 0.22s cubic-bezier(0.34, 1.56, 0.64, 1);
|
|
261
240
|
}
|
|
262
241
|
|
|
263
|
-
// ─── Subgroups accordion ───────────────────────────────────────────────────
|
|
264
|
-
|
|
265
242
|
&__subgroups {
|
|
266
243
|
height: 0;
|
|
267
244
|
overflow: hidden;
|
|
@@ -274,20 +251,17 @@
|
|
|
274
251
|
}
|
|
275
252
|
}
|
|
276
253
|
|
|
277
|
-
// Subgroup chip list — indented to align with label, not chevron
|
|
278
254
|
&__subgroup-list {
|
|
279
255
|
display: flex;
|
|
280
256
|
flex-wrap: wrap;
|
|
281
257
|
gap: calc($spacing * 0.3);
|
|
282
258
|
padding: calc($spacing * 0.3) calc($spacing * 0.85) calc($spacing * 0.75) calc($spacing * 2.35);
|
|
283
259
|
|
|
284
|
-
// Chips use gap — suppress their own margins
|
|
285
260
|
.chip {
|
|
286
261
|
margin: 0;
|
|
287
262
|
}
|
|
288
263
|
}
|
|
289
264
|
|
|
290
|
-
// Subgroup chip — selected/disabled states on top of .chip.clickable
|
|
291
265
|
&__subgroup {
|
|
292
266
|
transition: background 0.15s ease, color 0.15s ease, outline-color 0.15s ease;
|
|
293
267
|
|
|
@@ -313,8 +287,6 @@
|
|
|
313
287
|
}
|
|
314
288
|
}
|
|
315
289
|
|
|
316
|
-
// ─── Chip entrance animation ─────────────────────────────────────────────────
|
|
317
|
-
|
|
318
290
|
@keyframes gp-chip-in {
|
|
319
291
|
from {
|
|
320
292
|
opacity: 0;
|
|
@@ -326,8 +298,6 @@
|
|
|
326
298
|
}
|
|
327
299
|
}
|
|
328
300
|
|
|
329
|
-
// ─── Responsive ──────────────────────────────────────────────────────────────
|
|
330
|
-
|
|
331
301
|
@media (max-width: 768px) {
|
|
332
302
|
.group-picker {
|
|
333
303
|
&__list {
|
package/css/icons.scss
CHANGED
|
@@ -1,10 +1,8 @@
|
|
|
1
|
-
|
|
2
1
|
@font-face {
|
|
3
2
|
font-family: "Material Symbols Outlined 24pt";
|
|
4
3
|
src: url("../fonts/MaterialSymbolsOutlined.woff2") format("woff2");
|
|
5
4
|
}
|
|
6
5
|
|
|
7
|
-
|
|
8
6
|
.icon {
|
|
9
7
|
font-family: "Material Symbols Outlined 24pt", serif;
|
|
10
8
|
font-style: normal;
|
|
@@ -17,7 +15,6 @@
|
|
|
17
15
|
-moz-osx-font-smoothing: grayscale;
|
|
18
16
|
}
|
|
19
17
|
|
|
20
|
-
|
|
21
18
|
.icon-delete::before {
|
|
22
19
|
content: "\e872";
|
|
23
20
|
}
|
package/css/lightbox.scss
CHANGED
|
@@ -95,7 +95,7 @@
|
|
|
95
95
|
max-width: 100%;
|
|
96
96
|
max-height: calc(90dvh - 3.5rem);
|
|
97
97
|
cursor: zoom-in;
|
|
98
|
-
border-radius:
|
|
98
|
+
border-radius: $radius-lg;
|
|
99
99
|
overflow: hidden;
|
|
100
100
|
background: rgba(255, 255, 255, 0.04);
|
|
101
101
|
|
|
@@ -149,7 +149,6 @@
|
|
|
149
149
|
justify-content: center;
|
|
150
150
|
z-index: 1;
|
|
151
151
|
|
|
152
|
-
// Override spinner colors for the dark overlay
|
|
153
152
|
.spinner {
|
|
154
153
|
border-color: rgba(255, 255, 255, 0.15);
|
|
155
154
|
border-top-color: rgba(255, 255, 255, 0.7);
|
|
@@ -163,7 +162,7 @@
|
|
|
163
162
|
object-fit: contain;
|
|
164
163
|
opacity: 0;
|
|
165
164
|
transition: opacity 0.25s ease;
|
|
166
|
-
border-radius:
|
|
165
|
+
border-radius: $radius-lg;
|
|
167
166
|
user-select: none;
|
|
168
167
|
-webkit-user-drag: none;
|
|
169
168
|
|
|
@@ -196,7 +195,6 @@
|
|
|
196
195
|
user-select: none;
|
|
197
196
|
}
|
|
198
197
|
|
|
199
|
-
// Prev/Next buttons — glass pill, matches carousel style
|
|
200
198
|
.lightbox-prev,
|
|
201
199
|
.lightbox-next {
|
|
202
200
|
position: fixed;
|
package/css/mixins.scss
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
@mixin focus-ring($offset: 2px) {
|
|
2
|
+
outline: 2px solid var(--accent-color);
|
|
3
|
+
outline-offset: $offset;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
@mixin focus-glow($tint: 35%, $size: 3px, $color: var(--accent-color)) {
|
|
7
|
+
box-shadow: 0 0 0 #{$size} color-mix(in srgb, #{$color} #{$tint}, transparent);
|
|
8
|
+
}
|
package/css/modal.scss
CHANGED
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
.modal {
|
|
36
36
|
background: var(--background);
|
|
37
37
|
border: 1px solid var(--divider);
|
|
38
|
-
border-radius:
|
|
38
|
+
border-radius: $radius-lg;
|
|
39
39
|
box-shadow: 0 20px 60px rgba(0, 0, 0, 0.15), 0 4px 16px rgba(0, 0, 0, 0.08);
|
|
40
40
|
padding: $spacing;
|
|
41
41
|
position: fixed;
|
|
@@ -70,14 +70,14 @@
|
|
|
70
70
|
margin: (-$spacing) (-$spacing) $spacing;
|
|
71
71
|
padding: $spacing;
|
|
72
72
|
border-bottom: 1px solid var(--divider);
|
|
73
|
-
border-radius:
|
|
73
|
+
border-radius: $radius-lg $radius-lg 0 0;
|
|
74
74
|
}
|
|
75
75
|
|
|
76
76
|
.footer {
|
|
77
77
|
margin: $spacing (-$spacing) (-$spacing);
|
|
78
78
|
padding: $spacing;
|
|
79
79
|
border-top: 1px solid var(--divider);
|
|
80
|
-
border-radius: 0 0
|
|
80
|
+
border-radius: 0 0 $radius-lg $radius-lg;
|
|
81
81
|
display: flex;
|
|
82
82
|
justify-content: flex-end;
|
|
83
83
|
|
package/css/parameters.scss
CHANGED
|
@@ -1,4 +1,9 @@
|
|
|
1
1
|
$spacing: 1rem;
|
|
2
2
|
$border-radius: 0.4rem;
|
|
3
3
|
$form-height: 2rem;
|
|
4
|
-
$shadow: 0 1px 2px rgba(56, 65, 74, .15);
|
|
4
|
+
$shadow: 0 1px 2px rgba(56, 65, 74, .15);
|
|
5
|
+
|
|
6
|
+
$radius-sm: calc($border-radius / 2);
|
|
7
|
+
$radius-lg: calc($border-radius * 2);
|
|
8
|
+
$radius-panel: calc($border-radius * 2.5);
|
|
9
|
+
$radius-xl: calc($border-radius * 4);
|