@dataengineeringformachinelearning/viking-ui 4.0.1 → 4.0.2

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dataengineeringformachinelearning/viking-ui",
3
- "version": "4.0.1",
3
+ "version": "4.0.2",
4
4
  "description": "Universal Viking-UI design system for Astro, Angular, and Django.",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",
@@ -78,16 +78,16 @@ import { VikingSeparator } from "../separator/separator";
78
78
  :host {
79
79
  display: block;
80
80
  width: 100%;
81
- max-width: 480px;
81
+ max-width: 520px;
82
82
  margin-inline: auto;
83
83
  font-family: var(--viking-font-family);
84
84
  }
85
85
  .viking-auth-panel {
86
86
  display: flex;
87
87
  flex-direction: column;
88
- gap: var(--viking-space-3);
88
+ gap: var(--viking-space-4);
89
89
  width: 100%;
90
- padding: var(--viking-space-3);
90
+ padding: var(--viking-card-padding);
91
91
  background: var(--viking-surface);
92
92
  border: 1px solid var(--viking-border);
93
93
  border-radius: var(--viking-radius-lg);
@@ -111,8 +111,8 @@ import { VikingSeparator } from "../separator/separator";
111
111
  .viking-auth-header {
112
112
  display: flex;
113
113
  flex-direction: column;
114
- gap: var(--viking-space-1);
115
- margin-bottom: var(--viking-space-1);
114
+ gap: var(--viking-space-2);
115
+ margin-bottom: var(--viking-space-2);
116
116
  }
117
117
  .viking-auth-tag-row {
118
118
  display: flex;
@@ -158,13 +158,13 @@ import { VikingSeparator } from "../separator/separator";
158
158
  .viking-auth-body {
159
159
  display: flex;
160
160
  flex-direction: column;
161
- gap: var(--viking-space-2);
161
+ gap: var(--viking-space-3);
162
162
  width: 100%;
163
163
  }
164
164
  :host ::ng-deep .viking-auth-stack {
165
165
  display: flex;
166
166
  flex-direction: column;
167
- gap: var(--viking-space-2);
167
+ gap: var(--viking-space-3);
168
168
  width: 100%;
169
169
  }
170
170
  :host ::ng-deep .viking-auth-stack viking-callout {
@@ -174,13 +174,13 @@ import { VikingSeparator } from "../separator/separator";
174
174
  :host ::ng-deep .login-form {
175
175
  display: flex;
176
176
  flex-direction: column;
177
- gap: var(--viking-space-2);
177
+ gap: var(--viking-space-3);
178
178
  width: 100%;
179
179
  }
180
180
  .viking-auth-social {
181
181
  display: flex;
182
182
  flex-direction: column;
183
- gap: var(--viking-space-2);
183
+ gap: var(--viking-space-3);
184
184
  width: 100%;
185
185
  }
186
186
  .viking-auth-footer {
@@ -14,7 +14,13 @@ body {
14
14
  body {
15
15
  background-color: var(--viking-bg, var(--bg-color));
16
16
  color: var(--viking-text, var(--text-color));
17
- font-family: var(--viking-font-family, "Inter", ui-sans-serif, system-ui, sans-serif);
17
+ font-family: var(
18
+ --viking-font-family,
19
+ "Inter",
20
+ ui-sans-serif,
21
+ system-ui,
22
+ sans-serif
23
+ );
18
24
  -webkit-font-smoothing: antialiased;
19
25
  -moz-osx-font-smoothing: grayscale;
20
26
  }
@@ -23,7 +29,7 @@ body {
23
29
  .backend-landing-shell {
24
30
  display: flex;
25
31
  flex-direction: column;
26
- gap: var(--viking-page-section-gap, var(--viking-space-7, 56px));
32
+ gap: var(--viking-space-8);
27
33
  min-height: calc(100vh - var(--viking-navbar-height, 64px));
28
34
  }
29
35
 
@@ -32,6 +38,7 @@ body {
32
38
  align-items: center;
33
39
  max-width: var(--viking-content-readable-max-width, 48rem);
34
40
  margin-inline: auto;
41
+ padding-block: var(--viking-space-7);
35
42
  box-shadow: var(--viking-shadow-sm);
36
43
  }
37
44
 
@@ -51,13 +58,16 @@ body {
51
58
 
52
59
  @keyframes backend-status-pulse {
53
60
  0% {
54
- box-shadow: 0 0 0 0 color-mix(in srgb, var(--viking-success) 70%, transparent);
61
+ box-shadow: 0 0 0 0
62
+ color-mix(in srgb, var(--viking-success) 70%, transparent);
55
63
  }
56
64
  70% {
57
- box-shadow: 0 0 0 var(--viking-space-1) color-mix(in srgb, var(--viking-success) 0%, transparent);
65
+ box-shadow: 0 0 0 var(--viking-space-1)
66
+ color-mix(in srgb, var(--viking-success) 0%, transparent);
58
67
  }
59
68
  100% {
60
- box-shadow: 0 0 0 0 color-mix(in srgb, var(--viking-success) 0%, transparent);
69
+ box-shadow: 0 0 0 0
70
+ color-mix(in srgb, var(--viking-success) 0%, transparent);
61
71
  }
62
72
  }
63
73
 
@@ -68,28 +78,28 @@ body {
68
78
 
69
79
  .backend-hero-cta {
70
80
  justify-content: center;
71
- margin-top: var(--viking-space-1);
81
+ margin-top: var(--viking-space-3);
72
82
  }
73
83
 
74
84
  /* ── Feature cards (VikingCard WC + icon tile) ─────────────────────────────── */
75
85
  .backend-feature-grid {
76
86
  display: flex;
77
87
  flex-direction: column;
78
- gap: var(--viking-space-3);
88
+ gap: var(--viking-space-4);
79
89
  width: 100%;
80
90
  }
81
91
 
82
92
  .backend-feature-cards {
83
93
  display: grid;
84
94
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 280px), 1fr));
85
- gap: var(--viking-space-3);
95
+ gap: var(--viking-space-4);
86
96
  width: 100%;
87
97
  }
88
98
 
89
99
  .backend-feature-card-body {
90
100
  display: flex;
91
101
  flex-direction: column;
92
- gap: var(--viking-space-2);
102
+ gap: var(--viking-space-3);
93
103
  }
94
104
 
95
105
  .backend-feature-icon {
@@ -119,7 +129,9 @@ body.backend-404 .backend-error-logo {
119
129
  max-width: 100px;
120
130
  width: 100%;
121
131
  margin: 0 auto var(--viking-space-3);
122
- filter: drop-shadow(0 4px 12px color-mix(in srgb, var(--viking-black) 15%, transparent));
132
+ filter: drop-shadow(
133
+ 0 4px 12px color-mix(in srgb, var(--viking-black) 15%, transparent)
134
+ );
123
135
  }
124
136
 
125
137
  body.backend-404 .backend-error-card .viking-heading-xl {
@@ -114,9 +114,14 @@
114
114
  justify-content: center;
115
115
  width: var(--viking-control-height, 40px);
116
116
  height: var(--viking-control-height, 40px);
117
- border: 1px solid color-mix(in srgb, var(--viking-accent) 32%, var(--viking-border-strong));
117
+ border: 1px solid
118
+ color-mix(in srgb, var(--viking-accent) 32%, var(--viking-border-strong));
118
119
  border-radius: var(--viking-radius);
119
- background: color-mix(in srgb, var(--viking-accent) 8%, var(--viking-surface));
120
+ background: color-mix(
121
+ in srgb,
122
+ var(--viking-accent) 8%,
123
+ var(--viking-surface)
124
+ );
120
125
  color: var(--viking-accent-strong, var(--viking-teal-400));
121
126
  box-shadow: var(--viking-shadow-sm);
122
127
  cursor: pointer;
@@ -125,7 +130,11 @@
125
130
 
126
131
  .theme-toggle-btn:hover {
127
132
  border-color: var(--viking-accent-strong, var(--viking-teal-400));
128
- background: color-mix(in srgb, var(--viking-accent) 14%, var(--viking-surface));
133
+ background: color-mix(
134
+ in srgb,
135
+ var(--viking-accent) 14%,
136
+ var(--viking-surface)
137
+ );
129
138
  color: var(--viking-accent-strong, var(--viking-teal-400));
130
139
  box-shadow: var(--viking-shadow-md);
131
140
  }
@@ -135,10 +144,18 @@
135
144
  outline-offset: 2px;
136
145
  }
137
146
 
138
- html[data-theme='dark'] .theme-icon-sun { display: block; }
139
- html[data-theme='dark'] .theme-icon-moon { display: none; }
140
- html[data-theme='light'] .theme-icon-sun { display: none; }
141
- html[data-theme='light'] .theme-icon-moon { display: block; }
147
+ html[data-theme="dark"] .theme-icon-sun {
148
+ display: block;
149
+ }
150
+ html[data-theme="dark"] .theme-icon-moon {
151
+ display: none;
152
+ }
153
+ html[data-theme="light"] .theme-icon-sun {
154
+ display: none;
155
+ }
156
+ html[data-theme="light"] .theme-icon-moon {
157
+ display: block;
158
+ }
142
159
 
143
160
  /* ── Horizontal sub-navigation (replaces sidebar) ── */
144
161
  .showcase-subnav {
@@ -191,8 +208,16 @@ html[data-theme='light'] .theme-icon-moon { display: block; }
191
208
 
192
209
  .showcase-subnav-link.is-active {
193
210
  color: var(--viking-accent);
194
- border-color: color-mix(in srgb, var(--viking-accent) 28%, var(--viking-border));
195
- background: color-mix(in srgb, var(--viking-accent) 10%, var(--viking-surface));
211
+ border-color: color-mix(
212
+ in srgb,
213
+ var(--viking-accent) 28%,
214
+ var(--viking-border)
215
+ );
216
+ background: color-mix(
217
+ in srgb,
218
+ var(--viking-accent) 10%,
219
+ var(--viking-surface)
220
+ );
196
221
  }
197
222
 
198
223
  .docs-layout {
@@ -213,12 +238,12 @@ html[data-theme='light'] .theme-icon-moon { display: block; }
213
238
 
214
239
  .docs-content {
215
240
  flex: 1;
216
- padding: var(--viking-space-4) var(--viking-space-2);
241
+ padding: 0;
217
242
  }
218
243
 
219
244
  @media (min-width: 768px) {
220
245
  .docs-content {
221
- padding: var(--viking-space-5) var(--viking-space-4);
246
+ padding: 0;
222
247
  }
223
248
  }
224
249
 
@@ -394,19 +419,19 @@ html[data-theme='light'] .theme-icon-moon { display: block; }
394
419
  .contribute-steps {
395
420
  display: flex;
396
421
  flex-direction: column;
397
- gap: var(--viking-space-2);
422
+ gap: var(--viking-page-stack-gap);
398
423
  counter-reset: step;
399
424
  }
400
425
 
401
426
  .contribute-step {
402
- padding: var(--viking-space-3);
427
+ padding: var(--viking-card-padding);
403
428
  border: 1px solid var(--viking-border);
404
429
  border-radius: var(--viking-radius-lg);
405
- background: var(--viking-surface);
430
+ background: var(--viking-surface-recipe, var(--viking-surface));
406
431
  }
407
432
 
408
433
  .contribute-step h3::before {
409
434
  counter-increment: step;
410
- content: counter(step, decimal-leading-zero) '';
435
+ content: counter(step, decimal-leading-zero) "";
411
436
  color: var(--viking-accent);
412
437
  }
@@ -15,12 +15,12 @@
15
15
  display: flex;
16
16
  flex-direction: column;
17
17
  gap: var(--viking-page-section-gap, var(--viking-space-5));
18
- padding-block: var(--viking-space-4);
18
+ padding-block: var(--viking-space-6);
19
19
  }
20
20
 
21
21
  @media (min-width: 768px) {
22
22
  .showcase-page {
23
- padding-block: var(--viking-space-5);
23
+ padding-block: var(--viking-space-8);
24
24
  }
25
25
  }
26
26
 
@@ -71,10 +71,12 @@
71
71
  @keyframes showcasePulseDot {
72
72
  0%,
73
73
  100% {
74
- box-shadow: 0 0 0 0 color-mix(in srgb, var(--viking-accent) 60%, transparent);
74
+ box-shadow: 0 0 0 0
75
+ color-mix(in srgb, var(--viking-accent) 60%, transparent);
75
76
  }
76
77
  50% {
77
- box-shadow: 0 0 0 6px color-mix(in srgb, var(--viking-accent) 0%, transparent);
78
+ box-shadow: 0 0 0 6px
79
+ color-mix(in srgb, var(--viking-accent) 0%, transparent);
78
80
  }
79
81
  }
80
82
 
@@ -116,7 +118,7 @@
116
118
  }
117
119
 
118
120
  .showcase-hero-panel::before {
119
- content: '';
121
+ content: "";
120
122
  position: absolute;
121
123
  inset: 0 0 auto;
122
124
  height: 1px;
@@ -155,7 +157,9 @@
155
157
  /* ── Category bar (sticky horizontal nav) ── */
156
158
  .showcase-category-bar {
157
159
  position: sticky;
158
- top: calc(var(--viking-navbar-height, 64px) + var(--showcase-subnav-height, 52px));
160
+ top: calc(
161
+ var(--viking-navbar-height, 64px) + var(--showcase-subnav-height, 52px)
162
+ );
159
163
  z-index: 40;
160
164
  border-block: 1px solid var(--viking-border);
161
165
  background: color-mix(in srgb, var(--viking-bg) 94%, transparent);
@@ -203,7 +207,11 @@
203
207
 
204
208
  .showcase-category-chip.is-active {
205
209
  border-color: var(--viking-accent);
206
- background: color-mix(in srgb, var(--viking-accent) 10%, var(--viking-surface));
210
+ background: color-mix(
211
+ in srgb,
212
+ var(--viking-accent) 10%,
213
+ var(--viking-surface)
214
+ );
207
215
  color: var(--viking-accent);
208
216
  }
209
217
 
@@ -211,10 +219,13 @@
211
219
  .showcase-category {
212
220
  display: flex;
213
221
  flex-direction: column;
214
- gap: var(--viking-space-3);
215
- padding: var(--viking-space-4) 0;
222
+ gap: var(--viking-space-4);
223
+ padding: var(--viking-space-6) 0;
216
224
  border-bottom: 1px solid var(--viking-border);
217
- scroll-margin-top: calc(var(--viking-navbar-height, 64px) + var(--showcase-subnav-height, 52px) + 56px);
225
+ scroll-margin-top: calc(
226
+ var(--viking-navbar-height, 64px) + var(--showcase-subnav-height, 52px) +
227
+ 56px
228
+ );
218
229
  }
219
230
 
220
231
  .showcase-category:last-child {
@@ -224,8 +235,8 @@
224
235
  .showcase-category-header {
225
236
  display: flex;
226
237
  flex-direction: column;
227
- gap: var(--viking-space-1);
228
- padding-bottom: var(--viking-space-2);
238
+ gap: var(--viking-space-2);
239
+ padding-bottom: var(--viking-space-3);
229
240
  border-bottom: 1px solid var(--viking-border-subtle);
230
241
  }
231
242
 
@@ -242,19 +253,27 @@
242
253
  gap: var(--viking-space-4);
243
254
  padding-block: var(--viking-space-5);
244
255
  border-bottom: 1px solid var(--viking-border);
245
- scroll-margin-top: calc(var(--viking-navbar-height, 64px) + var(--showcase-subnav-height, 52px) + 56px);
256
+ scroll-margin-top: calc(
257
+ var(--viking-navbar-height, 64px) + var(--showcase-subnav-height, 52px) +
258
+ 56px
259
+ );
246
260
  position: relative;
247
261
  }
248
262
 
249
263
  .showcase-section::after {
250
- content: '';
264
+ content: "";
251
265
  position: absolute;
252
266
  top: 0;
253
267
  left: 50%;
254
268
  transform: translateX(-50%);
255
269
  width: 80px;
256
270
  height: 1px;
257
- background: linear-gradient(90deg, transparent, var(--viking-accent), transparent);
271
+ background: linear-gradient(
272
+ 90deg,
273
+ transparent,
274
+ var(--viking-accent),
275
+ transparent
276
+ );
258
277
  opacity: 0.25;
259
278
  }
260
279
 
@@ -303,9 +322,12 @@
303
322
  .component-showcase-card {
304
323
  display: flex;
305
324
  flex-direction: column;
306
- gap: var(--viking-space-2);
325
+ gap: var(--viking-space-3);
307
326
  padding: var(--viking-card-padding);
308
- scroll-margin-top: calc(var(--viking-navbar-height, 64px) + var(--showcase-subnav-height, 52px) + 56px);
327
+ scroll-margin-top: calc(
328
+ var(--viking-navbar-height, 64px) + var(--showcase-subnav-height, 52px) +
329
+ 56px
330
+ );
309
331
  transition:
310
332
  transform var(--viking-duration-normal) var(--viking-ease-out),
311
333
  border-color var(--viking-duration-normal) var(--viking-ease-out),
@@ -357,10 +379,14 @@
357
379
 
358
380
  .component-showcase-preview {
359
381
  padding: var(--viking-space-3);
360
- background: color-mix(in srgb, var(--viking-bg) 30%, var(--viking-surface-alt));
382
+ background: color-mix(
383
+ in srgb,
384
+ var(--viking-bg) 30%,
385
+ var(--viking-surface-alt)
386
+ );
361
387
  border: 1px solid var(--viking-border-subtle);
362
388
  border-radius: var(--viking-radius-lg);
363
- min-height: 5rem;
389
+ min-height: 7rem;
364
390
  display: flex;
365
391
  align-items: center;
366
392
  justify-content: center;
@@ -369,14 +395,18 @@
369
395
  }
370
396
 
371
397
  .component-showcase-preview::before {
372
- content: '';
398
+ content: "";
373
399
  position: absolute;
374
400
  inset: 0 0 auto;
375
401
  height: 1px;
376
402
  background: linear-gradient(
377
403
  90deg,
378
404
  transparent,
379
- color-mix(in srgb, var(--viking-metallic-200, var(--viking-border)) 22%, transparent),
405
+ color-mix(
406
+ in srgb,
407
+ var(--viking-metallic-200, var(--viking-border)) 22%,
408
+ transparent
409
+ ),
380
410
  transparent
381
411
  );
382
412
  pointer-events: none;
@@ -401,7 +431,11 @@
401
431
  .component-framework-chip {
402
432
  padding: var(--viking-space-half) var(--viking-space-1);
403
433
  border-radius: var(--viking-radius-sm);
404
- background: color-mix(in srgb, var(--viking-accent) 8%, var(--viking-surface-alt));
434
+ background: color-mix(
435
+ in srgb,
436
+ var(--viking-accent) 8%,
437
+ var(--viking-surface-alt)
438
+ );
405
439
  border: 1px solid color-mix(in srgb, var(--viking-accent) 15%, transparent);
406
440
  font-size: var(--viking-font-size-2xs, var(--viking-font-size-xs));
407
441
  font-weight: var(--viking-font-weight-medium);
@@ -654,7 +688,8 @@
654
688
  height: var(--viking-space-1);
655
689
  border-radius: 50%;
656
690
  background: var(--viking-accent);
657
- box-shadow: 0 0 0 2px color-mix(in srgb, var(--viking-accent) 30%, transparent);
691
+ box-shadow: 0 0 0 2px
692
+ color-mix(in srgb, var(--viking-accent) 30%, transparent);
658
693
  }
659
694
 
660
695
  .landing-hero-actions {
@@ -666,7 +701,7 @@
666
701
  .landing-stats {
667
702
  display: grid;
668
703
  grid-template-columns: repeat(2, 1fr);
669
- gap: var(--viking-space-2);
704
+ gap: var(--viking-space-3);
670
705
  }
671
706
 
672
707
  @media (min-width: 640px) {
@@ -676,7 +711,7 @@
676
711
  }
677
712
 
678
713
  .landing-stat {
679
- padding: var(--viking-space-2);
714
+ padding: var(--viking-card-padding-compact);
680
715
  border: 1px solid var(--viking-border);
681
716
  border-radius: var(--viking-radius);
682
717
  background: var(--viking-surface-recipe, var(--viking-surface));
@@ -738,7 +773,7 @@
738
773
  }
739
774
 
740
775
  .landing-preview-panel::before {
741
- content: '';
776
+ content: "";
742
777
  position: absolute;
743
778
  inset: 0 0 auto 0;
744
779
  height: 1px;
@@ -754,7 +789,7 @@
754
789
  .landing-preview-form {
755
790
  display: flex;
756
791
  flex-direction: column;
757
- gap: var(--viking-space-2);
792
+ gap: var(--viking-space-3);
758
793
  }
759
794
 
760
795
  .landing-preview-toolbar {
@@ -766,7 +801,7 @@
766
801
  .landing-preview-grid {
767
802
  display: grid;
768
803
  grid-template-columns: 1fr;
769
- gap: var(--viking-space-2);
804
+ gap: var(--viking-space-3);
770
805
  }
771
806
 
772
807
  @media (min-width: 560px) {
@@ -965,7 +1000,11 @@
965
1000
  gap: var(--viking-space-1);
966
1001
  padding: var(--viking-space-2);
967
1002
  border-bottom: 1px solid var(--viking-border);
968
- background: color-mix(in srgb, var(--viking-bg) 26%, var(--viking-surface-raised));
1003
+ background: color-mix(
1004
+ in srgb,
1005
+ var(--viking-bg) 26%,
1006
+ var(--viking-surface-raised)
1007
+ );
969
1008
  }
970
1009
 
971
1010
  .showcase-search-icon {