@24vlh/vds 0.1.0 → 0.1.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.
@@ -1,498 +1 @@
1
- /************************************************************
2
- * VLAH DESIGN SYSTEM (VDS) - Navigation
3
- *
4
- * Responsibilities:
5
- * - Provide the entire navigation architecture: primary/secondary nav,
6
- * mobile nav, vertical nav, sidebar, pills, tabs, pagination,
7
- * breadcrumbs, toolbars, and announcement bars
8
- * - Define interactive states: hover, active, disabled, focus-visible,
9
- * depth indentation, collapsed/expanded sections
10
- * - Expose brand/logo slots and action areas for headers & sidebars
11
- * - Supply panel + backdrop patterns for mobile overlay navigation
12
- *
13
- * System Notes:
14
- * - Fully token-driven: spacing, radii, borders, colours, z-index, motion
15
- * - Pure CSS; JS only toggles `.nav-panel--open` and `.nav-backdrop--visible`
16
- * - Safe namespacing: can embed in header/footer/sidebars without collisions
17
- ************************************************************/
18
-
19
- /* ---------------------------------------------------------
20
- 1. OVERLAYS TOKEN DEFINITIONS
21
- --------------------------------------------------------- */
22
-
23
- [data-vds-overlay],
24
- .vds-overlay {
25
- --modal-width-sm: 26.25rem;
26
- --modal-width-md: 40rem;
27
- --modal-width-lg: 51.25rem;
28
- --modal-width-xl: 65rem;
29
- --modal-loader-size-lg: 2.5rem;
30
-
31
- --drawer-width: 22.5rem;
32
- }
33
-
34
- /* ---------------------------------------------------------
35
- 2. OVERLAY BACKDROP
36
- --------------------------------------------------------- */
37
-
38
- .backdrop {
39
- position: fixed;
40
- top: 0;
41
- left: 0;
42
- right: 0;
43
- bottom: 0;
44
-
45
- background-color: var(--overlay-backdrop-default);
46
-
47
- backdrop-filter: none;
48
-
49
- z-index: 80;
50
-
51
- z-index: var(--z-backdrop, 80);
52
-
53
- pointer-events: none;
54
- opacity: 0;
55
- }
56
-
57
- .backdrop--light {
58
- background-color: var(--overlay-backdrop-light);
59
- }
60
-
61
- .backdrop--heavy {
62
- background-color: var(--overlay-backdrop-heavy);
63
- }
64
-
65
- .backdrop--active {
66
- pointer-events: auto;
67
- opacity: 1;
68
- }
69
-
70
- /* ---------------------------------------------------------
71
- 3. BASE MODAL (NO ANIMATION)
72
- --------------------------------------------------------- */
73
-
74
- .modal {
75
- position: fixed;
76
- top: 0;
77
- left: 0;
78
- right: 0;
79
- bottom: 0;
80
-
81
- display: flex;
82
- align-items: center;
83
- justify-content: center;
84
-
85
- z-index: 90;
86
-
87
- z-index: var(--z-modal, 90);
88
-
89
- pointer-events: none;
90
- opacity: 0;
91
-
92
- transform: none;
93
-
94
- transition: none;
95
- }
96
-
97
- .modal--active {
98
- pointer-events: auto;
99
- opacity: 1;
100
- }
101
-
102
- .modal__inner {
103
- background-color: var(--color-surface);
104
- border-radius: var(--radius-lg);
105
- border: 1px solid var(--color-border-subtle);
106
-
107
- box-shadow: var(--shadow-3);
108
-
109
- width: 100%;
110
- max-width: var(--modal-width-md);
111
- max-height: calc(100vh - var(--space-20));
112
-
113
- display: flex;
114
- flex-direction: column;
115
-
116
- overflow: hidden;
117
- pointer-events: auto;
118
-
119
- transition: none;
120
- }
121
-
122
- /* ---------------------------------------------------------
123
- 4. MODAL HEADER / BODY / FOOTER
124
- --------------------------------------------------------- */
125
-
126
- .modal__header {
127
- padding: var(--space-6) var(--space-8);
128
- border-bottom: 1px solid var(--color-border-subtle);
129
-
130
- display: flex;
131
- align-items: center;
132
- justify-content: space-between;
133
- }
134
-
135
- .modal__title {
136
- font-size: var(--text-lg);
137
- font-weight: 600;
138
- }
139
-
140
- .modal__close {
141
- background: none;
142
- border: none;
143
- padding: var(--space-2);
144
- display: inline-flex;
145
- cursor: pointer;
146
- color: var(--color-text-muted);
147
- }
148
-
149
- .modal__body {
150
- padding: var(--space-8);
151
- overflow-y: auto;
152
- flex: 1;
153
- }
154
-
155
- .modal__footer {
156
- padding: var(--space-6) var(--space-8);
157
- border-top: 1px solid var(--color-border-subtle);
158
-
159
- display: flex;
160
- justify-content: flex-end;
161
- gap: var(--space-4);
162
- }
163
-
164
- /* ---------------------------------------------------------
165
- 5. MODAL DENSITY VARIANTS
166
- --------------------------------------------------------- */
167
-
168
- .modal--a .modal__header,
169
- .modal--a .modal__footer {
170
- padding: var(--space-8) var(--space-10);
171
- }
172
-
173
- .modal--a .modal__body {
174
- padding: var(--space-10);
175
- }
176
-
177
- .modal--b .modal__header,
178
- .modal--b .modal__footer {
179
- padding: var(--space-6) var(--space-8);
180
- }
181
-
182
- .modal--b .modal__body {
183
- padding: var(--space-8);
184
- }
185
-
186
- .modal--c .modal__header,
187
- .modal--c .modal__footer {
188
- padding: var(--space-4) var(--space-6);
189
- }
190
-
191
- .modal--c .modal__body {
192
- padding: var(--space-6);
193
- }
194
-
195
- /* ---------------------------------------------------------
196
- 6. MODAL SIZES
197
- --------------------------------------------------------- */
198
-
199
- .modal--sm .modal__inner {
200
- max-width: var(--modal-width-sm);
201
- }
202
-
203
- .modal--md .modal__inner {
204
- max-width: var(--modal-width-md);
205
- }
206
-
207
- .modal--lg .modal__inner {
208
- max-width: var(--modal-width-lg);
209
- }
210
-
211
- .modal--xl .modal__inner {
212
- max-width: var(--modal-width-xl);
213
- }
214
-
215
- .modal--full .modal__inner {
216
- max-width: none;
217
- width: 100%;
218
- height: 100%;
219
- border-radius: 0;
220
- }
221
-
222
- /* ---------------------------------------------------------
223
- 7. MOBILE FULL-SCREEN & BOTTOM-SHEET (NO ANIMATIONS)
224
- --------------------------------------------------------- */
225
-
226
- @media (max-width: 768px) {
227
-
228
- .modal--fullscreen-mobile .modal__inner {
229
- width: 100%;
230
- height: 100%;
231
- border-radius: 0;
232
- max-width: none;
233
- max-height: none;
234
- }
235
-
236
- .modal--sheet {
237
- align-items: flex-end;
238
- }
239
-
240
- .modal--sheet .modal__inner {
241
- width: 100%;
242
- max-width: none;
243
- border-radius: var(--radius-lg) var(--radius-lg) 0 0;
244
- max-height: 80vh;
245
- }
246
-
247
- body.modal-open {
248
- overflow: hidden;
249
- }
250
- }
251
-
252
- /* ---------------------------------------------------------
253
- 8. MODAL STATES
254
- --------------------------------------------------------- */
255
-
256
- .modal--success .modal__header {
257
- border-bottom-color: var(--color-success);
258
- background-color: var(--color-success-soft);
259
- color: var(--semantic-success-text-strong, var(--color-success-strong));
260
- }
261
-
262
- .modal--danger .modal__header {
263
- border-bottom-color: var(--color-danger);
264
- background-color: var(--color-danger-soft);
265
- color: var(--semantic-error-text-strong, var(--color-danger-strong));
266
- }
267
-
268
- .modal--info .modal__header {
269
- border-bottom-color: var(--color-info);
270
- background-color: var(--color-info-soft);
271
- color: var(--semantic-info-text-strong, var(--color-info-strong));
272
- }
273
-
274
- .modal--warning .modal__header {
275
- border-bottom-color: var(--color-warning);
276
- background-color: var(--color-warning-soft);
277
- color: var(--semantic-warning-text-strong, var(--color-warning-strong));
278
- }
279
-
280
- /* ---------------------------------------------------------
281
- 9. LOADING OVERLAY (NO BLUR)
282
- --------------------------------------------------------- */
283
-
284
- .modal--loading .modal__inner {
285
- position: relative;
286
- }
287
-
288
- .modal--loading .modal__loader {
289
- position: absolute;
290
- top: 0;
291
- right: 0;
292
- bottom: 0;
293
- left: 0;
294
-
295
- backdrop-filter: none;
296
- background-color: var(--overlay-backdrop-loading);
297
-
298
- display: flex;
299
- align-items: center;
300
- justify-content: center;
301
-
302
- z-index: 2;
303
- }
304
-
305
- .modal--loading .modal__loader-icon {
306
- width: var(--modal-loader-size-lg);
307
- height: var(--modal-loader-size-lg);
308
- stroke: var(--color-accent);
309
- fill: none;
310
- }
311
-
312
- /* ---------------------------------------------------------
313
- 10. DRAWERS (NO ANIMATIONS)
314
- --------------------------------------------------------- */
315
-
316
- .drawer {
317
- position: fixed;
318
- top: 0;
319
- bottom: 0;
320
-
321
- width: var(--drawer-width);
322
- max-width: 90vw;
323
-
324
- background-color: var(--color-surface);
325
-
326
- border-left: 1px solid var(--color-border-subtle);
327
- border-right: 1px solid var(--color-border-subtle);
328
-
329
- box-shadow: var(--shadow-3);
330
-
331
- z-index: 95;
332
-
333
- z-index: var(--z-drawer, 95);
334
-
335
- display: flex;
336
- flex-direction: column;
337
-
338
- transition: none;
339
- }
340
-
341
- .drawer--left {
342
- left: 0;
343
- }
344
-
345
- .drawer--right {
346
- right: 0;
347
- }
348
-
349
- .drawer--hidden {
350
- display: none;
351
- }
352
-
353
- .drawer:not(.drawer--hidden) {
354
- display: flex;
355
- }
356
-
357
- .drawer__header,
358
- .drawer__footer {
359
- padding: var(--space-6);
360
- border-bottom: 1px solid var(--color-border-subtle);
361
- }
362
-
363
- .drawer__footer {
364
- border-top: 1px solid var(--color-border-subtle);
365
- border-bottom: none;
366
- }
367
-
368
- .drawer__body {
369
- padding: var(--space-6);
370
- overflow-y: auto;
371
- flex: 1;
372
- }
373
-
374
- /* ---------------------------------------------------------
375
- 11. INLINE OVERLAY PANEL
376
- --------------------------------------------------------- */
377
-
378
- .overlay-inline-container {
379
- position: relative;
380
- }
381
-
382
- .overlay-inline {
383
- position: absolute;
384
- top: 0;
385
- left: 0;
386
- right: 0;
387
- bottom: 0;
388
-
389
- z-index: 10;
390
-
391
- border-radius: var(--radius-md);
392
- border: 1px solid var(--color-border-subtle);
393
- background-color: var(--color-surface);
394
- box-shadow: var(--shadow-1);
395
-
396
- display: none;
397
- }
398
-
399
- .overlay-inline--active {
400
- display: block;
401
- }
402
-
403
- .overlay-inline__header {
404
- padding: var(--space-4) var(--space-6);
405
- border-bottom: 1px solid var(--color-border-subtle);
406
- }
407
-
408
- .overlay-inline__body {
409
- padding: var(--space-6);
410
- }
411
-
412
- .overlay-inline--info {
413
- border-color: var(--semantic-info-border);
414
- background-color: var(--semantic-info-bg);
415
- color: var(--semantic-info-text);
416
- }
417
-
418
- .overlay-inline--success {
419
- border-color: var(--semantic-success-border);
420
- background-color: var(--semantic-success-bg);
421
- color: var(--semantic-success-text);
422
- }
423
-
424
- .overlay-inline--warning {
425
- border-color: var(--semantic-warning-border);
426
- background-color: var(--semantic-warning-bg);
427
- color: var(--semantic-warning-text);
428
- }
429
-
430
- .overlay-inline--danger {
431
- border-color: var(--semantic-danger-border);
432
- background-color: var(--semantic-danger-bg);
433
- color: var(--semantic-danger-text);
434
- }
435
-
436
- /* ---------------------------------------------------------
437
- 12. SPLIT MODAL
438
- --------------------------------------------------------- */
439
-
440
- .modal--split .modal__inner {
441
- display: grid;
442
- grid-template-columns: 2fr 1fr;
443
- }
444
-
445
- .modal__side {
446
- border-left: 1px solid var(--color-border-subtle);
447
- padding: var(--space-8);
448
- overflow-y: auto;
449
- }
450
-
451
- @media (max-width: 768px) {
452
- .modal--split .modal__inner {
453
- display: flex;
454
- flex-direction: column;
455
- }
456
-
457
- .modal__side {
458
- border-left: none;
459
- border-top: 1px solid var(--color-border-subtle);
460
- }
461
- }
462
-
463
- /* ---------------------------------------------------------
464
- 13. OPTIONAL MODAL CHROME REMOVAL
465
- --------------------------------------------------------- */
466
-
467
- .modal--no-header .modal__header {
468
- display: none;
469
- }
470
-
471
- .modal--no-footer .modal__footer {
472
- display: none;
473
- }
474
-
475
- /* ---------------------------------------------------------
476
- 14. STACKING LEVELS
477
- --------------------------------------------------------- */
478
-
479
- .modal--level-2 {
480
- z-index: calc(90 + 10);
481
- z-index: calc(var(--z-modal, 90) + 10);
482
- }
483
-
484
- .modal--level-3 {
485
- z-index: calc(90 + 20);
486
- z-index: calc(var(--z-modal, 90) + 20);
487
- }
488
-
489
- .backdrop--level-2 {
490
- z-index: calc(80 + 10);
491
- z-index: calc(var(--z-backdrop, 80) + 10);
492
- }
493
-
494
- .backdrop--level-3 {
495
- z-index: calc(80 + 20);
496
- z-index: calc(var(--z-backdrop, 80) + 20);
497
- }
498
-
1
+ .vds-overlay,[data-vds-overlay]{--modal-width-sm:26.25rem;--modal-width-md:40rem;--modal-width-lg:51.25rem;--modal-width-xl:65rem;--modal-loader-size-lg:2.5rem;--drawer-width:22.5rem}.backdrop{backdrop-filter:none;background-color:var(--overlay-backdrop-default);bottom:0;left:0;opacity:0;pointer-events:none;position:fixed;right:0;top:0;z-index:80;z-index:var(--z-backdrop,80)}.backdrop--light{background-color:var(--overlay-backdrop-light)}.backdrop--heavy{background-color:var(--overlay-backdrop-heavy)}.backdrop--active{opacity:1;pointer-events:auto}.modal{align-items:center;bottom:0;display:flex;justify-content:center;left:0;opacity:0;pointer-events:none;position:fixed;right:0;top:0;transform:none;transition:none;z-index:90;z-index:var(--z-modal,90)}.modal--active{opacity:1;pointer-events:auto}.modal__inner{background-color:var(--color-surface);border:1px solid var(--color-border-subtle);border-radius:var(--radius-lg);box-shadow:var(--shadow-3);display:flex;flex-direction:column;max-height:calc(100vh - var(--space-20));max-width:var(--modal-width-md);overflow:hidden;pointer-events:auto;transition:none;width:100%}.modal__header{align-items:center;border-bottom:1px solid var(--color-border-subtle);display:flex;justify-content:space-between;padding:var(--space-6) var(--space-8)}.modal__title{font-size:var(--text-lg);font-weight:600}.modal__close{background:none;border:none;color:var(--color-text-muted);cursor:pointer;display:inline-flex;padding:var(--space-2)}.modal__body{flex:1;overflow-y:auto;padding:var(--space-8)}.modal__footer{border-top:1px solid var(--color-border-subtle);display:flex;gap:var(--space-4);justify-content:flex-end;padding:var(--space-6) var(--space-8)}.modal--a .modal__footer,.modal--a .modal__header{padding:var(--space-8) var(--space-10)}.modal--a .modal__body{padding:var(--space-10)}.modal--b .modal__footer,.modal--b .modal__header{padding:var(--space-6) var(--space-8)}.modal--b .modal__body{padding:var(--space-8)}.modal--c .modal__footer,.modal--c .modal__header{padding:var(--space-4) var(--space-6)}.modal--c .modal__body{padding:var(--space-6)}.modal--sm .modal__inner{max-width:var(--modal-width-sm)}.modal--md .modal__inner{max-width:var(--modal-width-md)}.modal--lg .modal__inner{max-width:var(--modal-width-lg)}.modal--xl .modal__inner{max-width:var(--modal-width-xl)}.modal--full .modal__inner{border-radius:0;height:100%;max-width:none;width:100%}@media (max-width:768px){.modal--fullscreen-mobile .modal__inner{border-radius:0;height:100%;max-height:none;max-width:none;width:100%}.modal--sheet{align-items:flex-end}.modal--sheet .modal__inner{border-radius:var(--radius-lg) var(--radius-lg) 0 0;max-height:80vh;max-width:none;width:100%}body.modal-open{overflow:hidden}}.modal--success .modal__header{background-color:var(--color-success-soft);border-bottom-color:var(--color-success);color:var(--semantic-success-text-strong,var(--color-success-strong))}.modal--danger .modal__header{background-color:var(--color-danger-soft);border-bottom-color:var(--color-danger);color:var(--semantic-error-text-strong,var(--color-danger-strong))}.modal--info .modal__header{background-color:var(--color-info-soft);border-bottom-color:var(--color-info);color:var(--semantic-info-text-strong,var(--color-info-strong))}.modal--warning .modal__header{background-color:var(--color-warning-soft);border-bottom-color:var(--color-warning);color:var(--semantic-warning-text-strong,var(--color-warning-strong))}.modal--loading .modal__inner{position:relative}.modal--loading .modal__loader{align-items:center;backdrop-filter:none;background-color:var(--overlay-backdrop-loading);bottom:0;display:flex;justify-content:center;left:0;position:absolute;right:0;top:0;z-index:2}.modal--loading .modal__loader-icon{stroke:var(--color-accent);fill:none;height:var(--modal-loader-size-lg);width:var(--modal-loader-size-lg)}.drawer{background-color:var(--color-surface);border-left:1px solid var(--color-border-subtle);border-right:1px solid var(--color-border-subtle);bottom:0;box-shadow:var(--shadow-3);display:flex;flex-direction:column;max-width:90vw;position:fixed;top:0;transition:none;width:var(--drawer-width);z-index:95;z-index:var(--z-drawer,95)}.drawer--left{left:0}.drawer--right{right:0}.drawer--hidden{display:none}.drawer:not(.drawer--hidden){display:flex}.drawer__footer,.drawer__header{border-bottom:1px solid var(--color-border-subtle);padding:var(--space-6)}.drawer__footer{border-bottom:none;border-top:1px solid var(--color-border-subtle)}.drawer__body{flex:1;overflow-y:auto;padding:var(--space-6)}.overlay-inline-container{position:relative}.overlay-inline{background-color:var(--color-surface);border:1px solid var(--color-border-subtle);border-radius:var(--radius-md);bottom:0;box-shadow:var(--shadow-1);display:none;left:0;position:absolute;right:0;top:0;z-index:10}.overlay-inline--active{display:block}.overlay-inline__header{border-bottom:1px solid var(--color-border-subtle);padding:var(--space-4) var(--space-6)}.overlay-inline__body{padding:var(--space-6)}.overlay-inline--info{background-color:var(--semantic-info-bg);border-color:var(--semantic-info-border);color:var(--semantic-info-text)}.overlay-inline--success{background-color:var(--semantic-success-bg);border-color:var(--semantic-success-border);color:var(--semantic-success-text)}.overlay-inline--warning{background-color:var(--semantic-warning-bg);border-color:var(--semantic-warning-border);color:var(--semantic-warning-text)}.overlay-inline--danger{background-color:var(--semantic-danger-bg);border-color:var(--semantic-danger-border);color:var(--semantic-danger-text)}.modal--split .modal__inner{display:grid;grid-template-columns:2fr 1fr}.modal__side{border-left:1px solid var(--color-border-subtle);overflow-y:auto;padding:var(--space-8)}@media (max-width:768px){.modal--split .modal__inner{display:flex;flex-direction:column}.modal__side{border-left:none;border-top:1px solid var(--color-border-subtle)}}.modal--no-footer .modal__footer,.modal--no-header .modal__header{display:none}.modal--level-2{z-index:100;z-index:calc(var(--z-modal, 90) + 10)}.modal--level-3{z-index:110;z-index:calc(var(--z-modal, 90) + 20)}.backdrop--level-2{z-index:90;z-index:calc(var(--z-backdrop, 80) + 10)}.backdrop--level-3{z-index:100;z-index:calc(var(--z-backdrop, 80) + 20)}