@dataengineeringformachinelearning/viking-ui 4.0.2 → 4.0.4

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 (37) hide show
  1. package/README.md +7 -5
  2. package/dist/README.md +7 -5
  3. package/dist/deml-components.css +23 -0
  4. package/dist/fesm2022/dataengineeringformachinelearning-viking-ui.mjs +211 -23
  5. package/dist/fesm2022/dataengineeringformachinelearning-viking-ui.mjs.map +1 -1
  6. package/dist/package.json +7 -1
  7. package/dist/src/web/card/viking-card-wc.ts +2 -1
  8. package/dist/src/web/core/styles.ts +125 -2
  9. package/dist/src/web/search-palette/viking-search-palette-wc.ts +1 -0
  10. package/dist/src/web/suite-header/viking-suite-header-wc.ts +15 -0
  11. package/dist/types/dataengineeringformachinelearning-viking-ui.d.ts +3 -2
  12. package/dist/viking-components.css +425 -31
  13. package/dist/viking-ui-elements.js +180 -42
  14. package/dist/viking-ui.css +1 -1
  15. package/dist/web-components.js +143 -3
  16. package/package.json +7 -1
  17. package/src/index.ts +1 -1
  18. package/src/lib/button/button.scss +23 -0
  19. package/src/lib/card/card.ts +35 -5
  20. package/src/lib/footer/footer.scss +8 -1
  21. package/src/lib/site-drakkar/site-footer.ts +5 -1
  22. package/src/lib/site-drakkar/site-navbar.ts +23 -4
  23. package/src/lib/theme-toggle/theme-toggle.ts +1 -0
  24. package/src/styles/_buttons.scss +92 -7
  25. package/src/styles/_layout-enforcement.scss +66 -3
  26. package/src/styles/components/footer.scss +26 -13
  27. package/src/styles/components/icon-inline.scss +23 -0
  28. package/src/styles/components.scss +276 -9
  29. package/src/styles/static-navbar.scss +110 -36
  30. package/src/styles/surfaces/docs-showcase.scss +64 -1
  31. package/src/styles/surfaces/marketing-landing.scss +247 -6
  32. package/src/styles/surfaces/swagger-ui.scss +92 -1
  33. package/src/styles/viking-ui.scss +2 -0
  34. package/src/web/card/viking-card-wc.ts +2 -1
  35. package/src/web/core/styles.ts +125 -2
  36. package/src/web/search-palette/viking-search-palette-wc.ts +1 -0
  37. package/src/web/suite-header/viking-suite-header-wc.ts +15 -0
@@ -32,12 +32,58 @@
32
32
  grid-template-columns: 1fr 1.1fr;
33
33
  gap: var(--viking-space-8);
34
34
  }
35
+
36
+ &::before {
37
+ content: "";
38
+ position: absolute;
39
+ inset: auto 0 -2px 0;
40
+ height: 1px;
41
+ background: linear-gradient(
42
+ 90deg,
43
+ transparent,
44
+ color-mix(in srgb, var(--viking-accent) 35%, transparent),
45
+ transparent
46
+ );
47
+ opacity: 0.45;
48
+ pointer-events: none;
49
+ }
35
50
  }
36
51
 
37
52
  .hero-copy {
38
53
  display: flex;
39
54
  flex-direction: column;
40
55
  gap: var(--viking-space-3);
56
+ position: relative;
57
+
58
+ &::before {
59
+ content: "";
60
+ position: absolute;
61
+ left: 0;
62
+ right: 0;
63
+ top: 0;
64
+ height: 1px;
65
+ background: linear-gradient(
66
+ 90deg,
67
+ transparent,
68
+ color-mix(in srgb, var(--viking-metallic-400) 48%, transparent),
69
+ transparent
70
+ );
71
+ opacity: 0.4;
72
+ pointer-events: none;
73
+ }
74
+
75
+ &::after {
76
+ content: "";
77
+ position: absolute;
78
+ top: -10px;
79
+ left: 0;
80
+ width: 24px;
81
+ height: 16px;
82
+ border-top: 1px solid color-mix(in srgb, var(--viking-accent) 45%, transparent);
83
+ border-left: 1px solid color-mix(in srgb, var(--viking-accent) 22%, transparent);
84
+ opacity: 0.55;
85
+ pointer-events: none;
86
+ }
41
87
  }
42
88
 
43
89
  .hero-badge {
@@ -50,6 +96,21 @@
50
96
  border-radius: 1000px;
51
97
  width: fit-content;
52
98
  box-shadow: var(--shadow-sm);
99
+ position: relative;
100
+ overflow: hidden;
101
+ border-color: var(--viking-border-strong);
102
+
103
+ &::after {
104
+ content: "";
105
+ position: absolute;
106
+ left: 1px;
107
+ right: 1px;
108
+ top: 0;
109
+ height: 1px;
110
+ background: color-mix(in srgb, var(--viking-accent) 35%, transparent);
111
+ opacity: 0.6;
112
+ pointer-events: none;
113
+ }
53
114
 
54
115
  .badge-dot {
55
116
  width: var(--grid-unit, 8px);
@@ -106,6 +167,20 @@
106
167
  font-weight: 600;
107
168
  color: var(--text-color);
108
169
  letter-spacing: 0.02em;
170
+ position: relative;
171
+ overflow: hidden;
172
+ border-color: color-mix(in srgb, var(--viking-accent) 28%, var(--border));
173
+ box-shadow: var(--shadow-sm);
174
+
175
+ &::before {
176
+ content: "";
177
+ position: absolute;
178
+ inset: 0 0 auto 0;
179
+ height: 1px;
180
+ background: color-mix(in srgb, var(--viking-accent) 40%, transparent);
181
+ opacity: 0.45;
182
+ pointer-events: none;
183
+ }
109
184
 
110
185
  svg {
111
186
  width: 18px;
@@ -148,6 +223,40 @@
148
223
  0 0 0 1px color-mix(in srgb, var(--viking-accent) 15%, transparent);
149
224
  transform: rotateY(-4deg) rotateX(2deg);
150
225
  transition: transform 0.4s ease;
226
+ position: relative;
227
+
228
+ &::before {
229
+ content: "";
230
+ position: absolute;
231
+ inset: 0;
232
+ border-radius: inherit;
233
+ pointer-events: none;
234
+ border: 1px solid color-mix(in srgb, var(--viking-metallic-500) 28%, transparent);
235
+ box-shadow: inset 0 1px 0 color-mix(in srgb, var(--viking-white) 7%, transparent);
236
+ opacity: 0.75;
237
+ background:
238
+ linear-gradient(
239
+ 135deg,
240
+ transparent,
241
+ color-mix(in srgb, var(--viking-accent) 12%, transparent) 50%,
242
+ transparent
243
+ );
244
+ }
245
+
246
+ &::after {
247
+ content: "";
248
+ position: absolute;
249
+ top: 0;
250
+ right: 28px;
251
+ width: 30px;
252
+ height: 18px;
253
+ border-bottom: 1px solid color-mix(in srgb, var(--viking-accent) 24%, transparent);
254
+ border-right: 1px solid color-mix(in srgb, var(--viking-accent) 18%, transparent);
255
+ transform: skewX(-18deg);
256
+ pointer-events: none;
257
+ opacity: 0.55;
258
+ z-index: 2;
259
+ }
151
260
 
152
261
  &:hover {
153
262
  transform: rotateY(0deg) rotateX(0deg);
@@ -358,7 +467,7 @@
358
467
  position: relative;
359
468
  }
360
469
 
361
- /* pola.rs-inspired minimal geometric rule (subtle, high-contrast, works in light/dark) */
470
+ /* Structural command-line divider for section cadence */
362
471
  .quick-start-band::after {
363
472
  content: "";
364
473
  position: absolute;
@@ -426,10 +535,28 @@
426
535
  border-color 0.25s ease,
427
536
  transform 0.25s ease,
428
537
  box-shadow 0.25s ease;
538
+ box-shadow: var(--shadow-sm);
539
+ overflow: hidden;
540
+
541
+ &::before {
542
+ content: "";
543
+ position: absolute;
544
+ left: 0;
545
+ right: 0;
546
+ top: 0;
547
+ height: 1px;
548
+ background: linear-gradient(
549
+ 90deg,
550
+ color-mix(in srgb, var(--viking-accent) 35%, transparent),
551
+ transparent
552
+ );
553
+ opacity: 0.45;
554
+ pointer-events: none;
555
+ }
429
556
 
430
557
  &:hover {
431
558
  border-color: var(--viking-accent);
432
- transform: translateY(-4px);
559
+ transform: translateY(-2px);
433
560
  box-shadow: var(--shadow-hover);
434
561
  }
435
562
 
@@ -542,6 +669,8 @@
542
669
  border-radius: 16px;
543
670
  background: color-mix(in srgb, var(--viking-accent) 6%, var(--color-surface));
544
671
  border: 1px solid color-mix(in srgb, var(--viking-accent) 18%, transparent);
672
+ position: relative;
673
+ overflow: hidden;
545
674
  transition:
546
675
  border-color 0.2s ease,
547
676
  box-shadow 0.2s ease;
@@ -571,6 +700,16 @@
571
700
  color: var(--text-muted);
572
701
  line-height: 1.45;
573
702
  }
703
+
704
+ &::after {
705
+ content: "";
706
+ position: absolute;
707
+ inset: 8px;
708
+ border: 1px solid color-mix(in srgb, var(--viking-metallic-400) 26%, transparent);
709
+ border-radius: inherit;
710
+ opacity: 0.5;
711
+ pointer-events: none;
712
+ }
574
713
  }
575
714
 
576
715
  /* ── Integrations strip ── */
@@ -665,7 +804,23 @@
665
804
  padding: var(--viking-space-9) 0;
666
805
  }
667
806
 
668
- /* double divider accent for each capability showcase */
807
+ &::before {
808
+ content: "";
809
+ position: absolute;
810
+ left: 0;
811
+ top: 0;
812
+ right: 0;
813
+ height: 1px;
814
+ background: linear-gradient(
815
+ 90deg,
816
+ transparent,
817
+ color-mix(in srgb, var(--viking-accent) 22%, transparent),
818
+ transparent
819
+ );
820
+ opacity: 0.25;
821
+ }
822
+
823
+ /* Structured divider marker for each capability showcase */
669
824
  &::after {
670
825
  content: "";
671
826
  position: absolute;
@@ -721,6 +876,20 @@
721
876
  line-height: 1.65;
722
877
  margin: 0 0 24px 0;
723
878
  }
879
+
880
+ &::after {
881
+ content: "";
882
+ display: block;
883
+ width: 42px;
884
+ height: 1px;
885
+ margin-top: 18px;
886
+ background: linear-gradient(
887
+ 90deg,
888
+ var(--viking-accent),
889
+ transparent
890
+ );
891
+ opacity: 0.35;
892
+ }
724
893
  }
725
894
 
726
895
  .showcase-link {
@@ -749,6 +918,31 @@
749
918
  border-radius: var(--viking-radius-xl, 16px);
750
919
  padding: var(--viking-card-padding, var(--viking-space-4));
751
920
  box-shadow: var(--shadow-md);
921
+ position: relative;
922
+ overflow: hidden;
923
+
924
+ &::before {
925
+ content: "";
926
+ position: absolute;
927
+ inset: 0;
928
+ border: 1px solid color-mix(in srgb, var(--viking-metallic-500) 24%, transparent);
929
+ border-radius: inherit;
930
+ box-shadow: inset 0 1px 0 color-mix(in srgb, var(--viking-white) 6%, transparent);
931
+ pointer-events: none;
932
+ }
933
+
934
+ &::after {
935
+ content: "";
936
+ position: absolute;
937
+ top: 0;
938
+ left: 18px;
939
+ width: 36px;
940
+ height: 12px;
941
+ border-bottom: 1px solid color-mix(in srgb, var(--viking-accent) 35%, transparent);
942
+ border-left: 1px solid color-mix(in srgb, var(--viking-accent) 18%, transparent);
943
+ opacity: 0.45;
944
+ pointer-events: none;
945
+ }
752
946
  }
753
947
 
754
948
  .visual-panel-header {
@@ -795,6 +989,8 @@
795
989
  border-radius: var(--viking-radius-lg);
796
990
  padding: var(--viking-card-padding-compact, var(--viking-space-3));
797
991
  position: relative;
992
+ border-color: color-mix(in srgb, var(--viking-accent) 12%, var(--border));
993
+ box-shadow: var(--shadow-sm);
798
994
 
799
995
  .metric-label {
800
996
  display: block;
@@ -847,7 +1043,7 @@
847
1043
  position: relative;
848
1044
  }
849
1045
 
850
- /* pola.rs-inspired double divider accent */
1046
+ /* Structured double divider accent */
851
1047
  .widget-showcase::after {
852
1048
  content: "";
853
1049
  position: absolute;
@@ -928,6 +1124,29 @@
928
1124
  border-radius: var(--viking-radius-xl, 16px);
929
1125
  padding: var(--viking-card-padding, var(--viking-space-4));
930
1126
  box-shadow: var(--shadow-md);
1127
+ position: relative;
1128
+ overflow: hidden;
1129
+ border-color: color-mix(in srgb, var(--viking-border-strong) 85%, transparent);
1130
+
1131
+ &::before {
1132
+ content: "";
1133
+ position: absolute;
1134
+ inset: 0;
1135
+ pointer-events: none;
1136
+ background:
1137
+ radial-gradient(
1138
+ 140px 42px at 16px 0,
1139
+ color-mix(in srgb, var(--viking-accent) 10%, transparent),
1140
+ transparent
1141
+ ),
1142
+ linear-gradient(
1143
+ 90deg,
1144
+ transparent,
1145
+ color-mix(in srgb, var(--viking-accent-strong) 16%, transparent),
1146
+ transparent
1147
+ );
1148
+ opacity: 0.35;
1149
+ }
931
1150
  }
932
1151
 
933
1152
  /* ── Pricing ── */
@@ -938,7 +1157,7 @@
938
1157
  position: relative;
939
1158
  }
940
1159
 
941
- /* pola.rs-inspired double divider accent */
1160
+ /* Structured double divider accent */
942
1161
  .pricing-showcase::after {
943
1162
  content: "";
944
1163
  position: absolute;
@@ -1005,6 +1224,9 @@
1005
1224
  border-radius: var(--viking-radius-xl);
1006
1225
  background: var(--color-surface);
1007
1226
  border: 1px solid var(--border);
1227
+ box-shadow: var(--shadow-sm);
1228
+ position: relative;
1229
+ overflow: hidden;
1008
1230
  transition:
1009
1231
  transform 0.3s ease,
1010
1232
  box-shadow 0.3s ease;
@@ -1020,16 +1242,34 @@
1020
1242
  }
1021
1243
 
1022
1244
  &:hover {
1023
- transform: translateY(-8px);
1245
+ transform: translateY(-2px);
1246
+ border-color: var(--viking-accent);
1024
1247
  box-shadow: var(--shadow-hover);
1025
1248
  }
1026
1249
 
1250
+ &::before {
1251
+ content: "";
1252
+ position: absolute;
1253
+ left: 0;
1254
+ right: 0;
1255
+ top: 0;
1256
+ height: 1px;
1257
+ background: linear-gradient(
1258
+ 90deg,
1259
+ color-mix(in srgb, var(--viking-accent) 24%, transparent),
1260
+ transparent
1261
+ );
1262
+ opacity: 0.45;
1263
+ pointer-events: none;
1264
+ }
1265
+
1027
1266
  h3 {
1028
1267
  font-size: 1.1rem;
1029
1268
  color: var(--text-muted);
1030
1269
  margin: 0;
1031
1270
  text-transform: uppercase;
1032
1271
  letter-spacing: 0.1em;
1272
+ font-weight: var(--viking-font-weight-semibold);
1033
1273
  }
1034
1274
 
1035
1275
  .price {
@@ -1081,6 +1321,7 @@
1081
1321
  var(--viking-accent) 6%,
1082
1322
  var(--color-surface)
1083
1323
  );
1324
+ box-shadow: inset 0 1px 0 color-mix(in srgb, var(--viking-white) 8%, transparent);
1084
1325
 
1085
1326
  .recommended-badge {
1086
1327
  position: absolute;
@@ -136,6 +136,10 @@ body.backend-swagger {
136
136
  background: transparent !important;
137
137
  }
138
138
 
139
+ .swagger-ui .scheme-container span {
140
+ color: var(--viking-text, var(--text-color));
141
+ }
142
+
139
143
  .swagger-ui .scheme-container .schemes > label {
140
144
  color: var(--viking-text-muted, var(--text-muted));
141
145
  font-size: 0.72rem;
@@ -211,9 +215,14 @@ body.backend-swagger {
211
215
  outline-offset: var(--viking-ring-offset, 2px);
212
216
  }
213
217
 
218
+ .swagger-ui .scheme-container span.scheme-title {
219
+ color: var(--viking-text, var(--text-color));
220
+ }
221
+
214
222
  .swagger-ui .btn.authorize,
215
223
  .swagger-ui .btn.authorize.unlocked,
216
- .swagger-ui .btn.execute {
224
+ .swagger-ui .btn.execute,
225
+ .swagger-ui .authorization__btn {
217
226
  background: var(--viking-accent, var(--color-primary));
218
227
  border-color: color-mix(
219
228
  in srgb,
@@ -224,10 +233,41 @@ body.backend-swagger {
224
233
  box-shadow: var(--viking-shadow-sm);
225
234
  min-height: var(--viking-control-height, 40px);
226
235
  border-radius: var(--viking-radius, 8px);
236
+ display: inline-flex;
237
+ align-items: center;
238
+ justify-content: center;
239
+ gap: var(--viking-space-1, 8px);
240
+ text-align: center;
241
+ line-height: 1;
242
+ min-width: auto;
243
+ white-space: nowrap;
244
+ justify-content: center;
245
+ align-items: center;
246
+ }
247
+
248
+ .swagger-ui .btn.authorize .viking-icon,
249
+ .swagger-ui .btn.authorize svg,
250
+ .swagger-ui .btn.execute .viking-icon,
251
+ .swagger-ui .btn.execute svg,
252
+ .swagger-ui .authorization__btn svg {
253
+ display: inline-flex;
254
+ align-items: center;
255
+ justify-content: center;
256
+ }
257
+
258
+ .swagger-ui .btn.authorize .viking-icon,
259
+ .swagger-ui .btn.authorize svg,
260
+ .swagger-ui .btn.execute .viking-icon,
261
+ .swagger-ui .btn.execute svg,
262
+ .swagger-ui .authorization__btn svg {
263
+ display: inline-flex;
264
+ align-items: center;
265
+ justify-content: center;
227
266
  }
228
267
 
229
268
  .swagger-ui .btn.authorize:hover,
230
269
  .swagger-ui .btn.authorize.unlocked:hover,
270
+ .swagger-ui .authorization__btn:hover,
231
271
  .swagger-ui .btn.execute:hover {
232
272
  background: var(--viking-accent-hover, var(--viking-teal-500));
233
273
  border-color: color-mix(
@@ -239,6 +279,57 @@ body.backend-swagger {
239
279
  box-shadow: var(--viking-shadow-md);
240
280
  }
241
281
 
282
+ .swagger-ui .btn.authorize svg,
283
+ .swagger-ui .btn.execute svg,
284
+ .swagger-ui .btn.authorization__btn svg,
285
+ .swagger-ui .authorization__btn svg {
286
+ width: 16px;
287
+ height: 16px;
288
+ flex-shrink: 0;
289
+ fill: var(--viking-accent-content, var(--viking-white-pure));
290
+ display: inline-flex;
291
+ align-items: center;
292
+ justify-content: center;
293
+ }
294
+
295
+ .swagger-ui .btn.authorize .viking-icon,
296
+ .swagger-ui .btn.execute .viking-icon,
297
+ .swagger-ui .authorization__btn .viking-icon {
298
+ width: 16px;
299
+ height: 16px;
300
+ flex-shrink: 0;
301
+ display: inline-flex;
302
+ align-items: center;
303
+ justify-content: center;
304
+ }
305
+
306
+ .swagger-ui .btn.authorize .viking-icon svg,
307
+ .swagger-ui .btn.execute .viking-icon svg,
308
+ .swagger-ui .authorization__btn .viking-icon svg {
309
+ display: inline-block;
310
+ width: 100%;
311
+ height: 100%;
312
+ fill: currentColor;
313
+ margin: 0;
314
+ }
315
+
316
+ .swagger-ui .btn.authorize .authorization-btn-icon,
317
+ .swagger-ui .btn.execute .authorization-btn-icon,
318
+ .swagger-ui .authorization__btn .authorization-btn-icon {
319
+ display: inline-flex;
320
+ align-items: center;
321
+ justify-content: center;
322
+ }
323
+
324
+ .swagger-ui .scheme-container .authorization__btn,
325
+ .swagger-ui .btn.authorization__btn {
326
+ min-height: var(--viking-control-height, 40px);
327
+ height: var(--viking-control-height, 40px);
328
+ padding: 0 var(--viking-space-2, 16px);
329
+ box-sizing: border-box;
330
+ text-align: center;
331
+ }
332
+
242
333
  /* ── Tag groups ──────────────────────────────────────────────────────────── */
243
334
  .swagger-ui .opblock-tag-section {
244
335
  margin: 0;
@@ -9,6 +9,8 @@
9
9
  @use 'layout-enforcement';
10
10
  @use 'page-shell';
11
11
  @use 'layout-shell';
12
+ @use 'static-navbar';
13
+ @use 'components/footer';
12
14
 
13
15
  // ============================================================================
14
16
  // Viking-UI design tokens
@@ -28,7 +28,7 @@ export class VikingCardWc extends HTMLElementBase {
28
28
  static readonly legacyTag = "viking-card-wc";
29
29
 
30
30
  static get observedAttributes(): string[] {
31
- return ["compact", "interactive", "title"];
31
+ return ["compact", "interactive", "title", "loading"];
32
32
  }
33
33
 
34
34
  connectedCallback(): void {
@@ -48,6 +48,7 @@ export class VikingCardWc extends HTMLElementBase {
48
48
  "viking-card-interactive",
49
49
  this.hasAttribute("interactive"),
50
50
  );
51
+ this.classList.toggle("viking-card-loading", this.hasAttribute("loading"));
51
52
 
52
53
  const title = this.getAttribute("title");
53
54
  if (title) {