@dataengineeringformachinelearning/viking-ui 4.0.2 → 4.0.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/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dataengineeringformachinelearning/viking-ui",
3
- "version": "4.0.2",
3
+ "version": "4.0.3",
4
4
  "description": "Universal Viking-UI design system for Astro, Angular, and Django.",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",
@@ -24,7 +24,13 @@
24
24
  "types": "./types/dataengineeringformachinelearning-viking-ui.d.ts",
25
25
  "default": "./fesm2022/dataengineeringformachinelearning-viking-ui.mjs"
26
26
  },
27
+ "./angular": {
28
+ "types": "./dist/types/dataengineeringformachinelearning-viking-ui.d.ts",
29
+ "import": "./dist/fesm2022/dataengineeringformachinelearning-viking-ui.mjs",
30
+ "default": "./dist/fesm2022/dataengineeringformachinelearning-viking-ui.mjs"
31
+ },
27
32
  "./dist/index.js": "./dist/fesm2022/dataengineeringformachinelearning-viking-ui.mjs",
33
+ "./dist/index.d.ts": "./dist/types/dataengineeringformachinelearning-viking-ui.d.ts",
28
34
  "./dist/viking-ui.css": "./dist/viking-ui.css",
29
35
  "./dist/viking-ui-elements.js": "./dist/viking-ui-elements.js",
30
36
  "./dist/web-components.js": "./dist/web-components.js",
@@ -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,10 @@ export class VikingCardWc extends HTMLElementBase {
48
48
  "viking-card-interactive",
49
49
  this.hasAttribute("interactive"),
50
50
  );
51
+ this.classList.toggle(
52
+ "viking-card-loading",
53
+ this.hasAttribute("loading"),
54
+ );
51
55
 
52
56
  const title = this.getAttribute("title");
53
57
  if (title) {
@@ -39,7 +39,7 @@ export const VIKING_BUTTON_STYLES = `
39
39
  gap: var(--viking-space-1);
40
40
  min-height: var(--viking-control-height);
41
41
  padding: 0 var(--viking-control-padding-x);
42
- border-radius: var(--viking-radius);
42
+ border-radius: var(--viking-radius-lg);
43
43
  border: 1px solid transparent;
44
44
  cursor: pointer;
45
45
  text-decoration: none;
@@ -48,9 +48,29 @@ export const VIKING_BUTTON_STYLES = `
48
48
  min-width: var(--viking-btn-min-width, 120px);
49
49
  white-space: nowrap;
50
50
  position: relative;
51
+ background-clip: padding-box;
52
+ isolation: isolate;
51
53
  user-select: none;
52
54
  -webkit-tap-highlight-color: transparent;
53
55
  box-sizing: border-box;
56
+ overflow: hidden;
57
+ box-shadow: var(--viking-shadow-sm);
58
+ }
59
+
60
+ .viking-btn::before {
61
+ content: "";
62
+ position: absolute;
63
+ inset: 1px 1px auto;
64
+ height: 1px;
65
+ background: linear-gradient(
66
+ 90deg,
67
+ transparent,
68
+ color-mix(in srgb, var(--viking-metallic-100) 45%, transparent),
69
+ transparent
70
+ );
71
+ pointer-events: none;
72
+ opacity: 0.82;
73
+ transition: var(--viking-transition-interactive);
54
74
  }
55
75
 
56
76
  .viking-btn:focus-visible {
@@ -67,6 +87,36 @@ export const VIKING_BUTTON_STYLES = `
67
87
  box-shadow: none !important;
68
88
  }
69
89
 
90
+ .viking-btn[aria-busy='true']::before,
91
+ .viking-btn[aria-busy='true'] .viking-btn-label {
92
+ opacity: 0.85;
93
+ transform: translateY(1px);
94
+ }
95
+
96
+ .viking-btn[aria-busy='true'] .viking-btn-spinner {
97
+ opacity: 0.85;
98
+ }
99
+
100
+ .viking-btn::after {
101
+ content: "";
102
+ position: absolute;
103
+ inset: auto 0 0 0;
104
+ height: 1px;
105
+ background: linear-gradient(
106
+ 90deg,
107
+ transparent,
108
+ color-mix(
109
+ in srgb,
110
+ var(--viking-metallic-100) 18%,
111
+ transparent
112
+ ),
113
+ transparent
114
+ );
115
+ pointer-events: none;
116
+ opacity: 0.45;
117
+ transition: var(--viking-transition-interactive);
118
+ }
119
+
70
120
  .viking-btn-sm {
71
121
  min-height: var(--viking-control-height-sm);
72
122
  padding: 0 var(--viking-space-2);
@@ -131,6 +181,20 @@ export const VIKING_BUTTON_STYLES = `
131
181
  height: var(--viking-icon-size-md, 20px);
132
182
  }
133
183
 
184
+ ::slotted(viking-icon),
185
+ ::slotted(.viking-icon),
186
+ ::slotted([data-viking-icon]) {
187
+ display: inline-flex;
188
+ align-items: center;
189
+ justify-content: center;
190
+ width: var(--viking-icon-size-md);
191
+ height: var(--viking-icon-size-md);
192
+ line-height: 1;
193
+ flex-shrink: 0;
194
+ pointer-events: none;
195
+ flex: 0 0 auto;
196
+ }
197
+
134
198
  .viking-btn-outline {
135
199
  background: var(--viking-surface);
136
200
  color: var(--viking-text);
@@ -145,6 +209,14 @@ export const VIKING_BUTTON_STYLES = `
145
209
  transform: translateY(var(--viking-state-hover-lift));
146
210
  }
147
211
 
212
+ .viking-btn-outline:active:not(:disabled):not([aria-busy='true']) {
213
+ transform: translateY(0) scale(var(--viking-state-active-scale));
214
+ box-shadow: inset 0 1px 2px
215
+ color-mix(in srgb, var(--viking-black) 28%, transparent),
216
+ var(--viking-shadow-sm);
217
+ border-color: var(--viking-border-strong);
218
+ }
219
+
148
220
  .viking-btn-primary {
149
221
  background: var(--viking-accent);
150
222
  color: var(--viking-accent-content);
@@ -159,6 +231,14 @@ export const VIKING_BUTTON_STYLES = `
159
231
  transform: translateY(var(--viking-state-hover-lift));
160
232
  }
161
233
 
234
+ .viking-btn-primary:active:not(:disabled):not([aria-busy='true']) {
235
+ transform: translateY(0) scale(var(--viking-state-active-scale));
236
+ box-shadow: inset 0 1px 2px
237
+ color-mix(in srgb, var(--viking-black) 28%, transparent),
238
+ var(--viking-shadow-sm);
239
+ border-color: color-mix(in srgb, var(--viking-accent) 82%, var(--viking-black));
240
+ }
241
+
162
242
  .viking-btn-secondary {
163
243
  background: var(--viking-accent-secondary);
164
244
  color: var(--viking-accent-secondary-content);
@@ -173,6 +253,14 @@ export const VIKING_BUTTON_STYLES = `
173
253
  transform: translateY(var(--viking-state-hover-lift));
174
254
  }
175
255
 
256
+ .viking-btn-secondary:active:not(:disabled):not([aria-busy='true']) {
257
+ transform: translateY(0) scale(var(--viking-state-active-scale));
258
+ box-shadow: inset 0 1px 2px
259
+ color-mix(in srgb, var(--viking-black) 28%, transparent),
260
+ var(--viking-shadow-sm);
261
+ border-color: color-mix(in srgb, var(--viking-accent-secondary) 82%, var(--viking-black));
262
+ }
263
+
176
264
  .viking-btn-filled {
177
265
  background: var(--viking-surface-alt);
178
266
  color: var(--viking-text);
@@ -187,6 +275,13 @@ export const VIKING_BUTTON_STYLES = `
187
275
  transform: translateY(var(--viking-state-hover-lift));
188
276
  }
189
277
 
278
+ .viking-btn-filled:active:not(:disabled):not([aria-busy='true']) {
279
+ transform: translateY(0) scale(var(--viking-state-active-scale));
280
+ box-shadow: var(--viking-shadow-sm);
281
+ border-color: color-mix(in srgb, var(--viking-accent) 20%, var(--viking-border));
282
+ background: color-mix(in srgb, var(--viking-surface-alt) 84%, var(--viking-accent));
283
+ }
284
+
190
285
  .viking-btn-danger {
191
286
  background: var(--viking-danger);
192
287
  color: var(--viking-on-danger);
@@ -196,10 +291,20 @@ export const VIKING_BUTTON_STYLES = `
196
291
 
197
292
  .viking-btn-danger:hover:not(:disabled):not([aria-busy='true']) {
198
293
  background: color-mix(in srgb, var(--viking-danger) 88%, var(--viking-white));
294
+ border-color: color-mix(in srgb, var(--viking-danger) 92%, var(--viking-white));
199
295
  box-shadow: var(--viking-shadow-hover);
200
296
  transform: translateY(var(--viking-state-hover-lift));
201
297
  }
202
298
 
299
+ .viking-btn-danger:active:not(:disabled):not([aria-busy='true']) {
300
+ transform: translateY(0) scale(var(--viking-state-active-scale));
301
+ border-color: color-mix(in srgb, var(--viking-danger) 72%, var(--viking-black));
302
+ background: color-mix(in srgb, var(--viking-danger) 84%, var(--viking-black));
303
+ box-shadow: inset 0 1px 2px
304
+ color-mix(in srgb, var(--viking-black) 28%, transparent),
305
+ var(--viking-shadow-sm);
306
+ }
307
+
203
308
  .viking-btn-ghost {
204
309
  background: transparent;
205
310
  color: var(--viking-text);
@@ -213,6 +318,12 @@ export const VIKING_BUTTON_STYLES = `
213
318
  color: var(--viking-accent-strong);
214
319
  }
215
320
 
321
+ .viking-btn-ghost:active:not(:disabled):not([aria-busy='true']) {
322
+ transform: translateY(0) scale(var(--viking-state-active-scale));
323
+ background: var(--viking-accent-soft);
324
+ color: var(--viking-accent-strong);
325
+ }
326
+
216
327
  .viking-btn-subtle {
217
328
  background: transparent;
218
329
  color: var(--viking-text-muted);
@@ -227,6 +338,13 @@ export const VIKING_BUTTON_STYLES = `
227
338
  border-color: var(--viking-border-strong);
228
339
  }
229
340
 
341
+ .viking-btn-subtle:active:not(:disabled):not([aria-busy='true']) {
342
+ transform: translateY(0) scale(var(--viking-state-active-scale));
343
+ border-color: var(--viking-border);
344
+ background: color-mix(in srgb, var(--viking-accent-soft) 70%, var(--viking-surface));
345
+ box-shadow: inset 0 1px 2px color-mix(in srgb, var(--viking-black) 24%, transparent);
346
+ }
347
+
230
348
  .viking-btn:active:not(:disabled):not([aria-busy='true']) {
231
349
  transform: translateY(0) scale(var(--viking-state-active-scale));
232
350
  }
@@ -234,7 +352,12 @@ export const VIKING_BUTTON_STYLES = `
234
352
  .viking-btn-label {
235
353
  display: inline-flex;
236
354
  align-items: center;
237
- line-height: inherit;
355
+ gap: var(--viking-space-1);
356
+ line-height: 1.2;
357
+ min-width: 0;
358
+ justify-content: center;
359
+ text-align: center;
360
+ white-space: nowrap;
238
361
  }
239
362
 
240
363
  .viking-btn-spinner {
@@ -204,6 +204,17 @@ const VIKING_SUITE_HEADER_STYLES = `
204
204
  text-transform: uppercase;
205
205
  }
206
206
 
207
+ .suite-header__auth-icon,
208
+ .suite-header__menu-icon,
209
+ .suite-header__action-icon,
210
+ .suite-header__avatar-icon,
211
+ .suite-header__chevron {
212
+ display: inline-flex;
213
+ align-items: center;
214
+ justify-content: center;
215
+ flex-shrink: 0;
216
+ }
217
+
207
218
  .suite-header__auth-link:hover {
208
219
  background: var(--viking-accent-hover);
209
220
  color: var(--viking-accent-content);
@@ -356,6 +367,10 @@ viking-suite-command-palette {
356
367
  .suite-header__menu-button {
357
368
  display: none;
358
369
  }
370
+
371
+ .suite-header[data-menu-open='true'] .suite-header__mobile {
372
+ display: none;
373
+ }
359
374
  }
360
375
  `;
361
376
 
@@ -888,6 +888,7 @@ declare class VikingSiteNavbar {
888
888
  readonly context: _angular_core.InputSignal<SiteDrakkarContext>;
889
889
  readonly urls: _angular_core.InputSignal<SiteUrls>;
890
890
  readonly isAuthenticated: _angular_core.InputSignal<boolean>;
891
+ readonly isBusy: _angular_core.InputSignal<boolean>;
891
892
  readonly theme: _angular_core.InputSignal<"dark" | "light">;
892
893
  readonly showSearch: _angular_core.InputSignal<boolean>;
893
894
  readonly login: _angular_core.OutputEmitterRef<void>;
@@ -904,7 +905,7 @@ declare class VikingSiteNavbar {
904
905
  protected closeMobileMenu(): void;
905
906
  protected openSearch(): void;
906
907
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<VikingSiteNavbar, never>;
907
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<VikingSiteNavbar, "viking-site-navbar", never, { "context": { "alias": "context"; "required": false; "isSignal": true; }; "urls": { "alias": "urls"; "required": false; "isSignal": true; }; "isAuthenticated": { "alias": "isAuthenticated"; "required": false; "isSignal": true; }; "theme": { "alias": "theme"; "required": false; "isSignal": true; }; "showSearch": { "alias": "showSearch"; "required": false; "isSignal": true; }; }, { "login": "login"; "logout": "logout"; "themeToggle": "themeToggle"; "searchOpen": "searchOpen"; }, never, never, true, never>;
908
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<VikingSiteNavbar, "viking-site-navbar", never, { "context": { "alias": "context"; "required": false; "isSignal": true; }; "urls": { "alias": "urls"; "required": false; "isSignal": true; }; "isAuthenticated": { "alias": "isAuthenticated"; "required": false; "isSignal": true; }; "isBusy": { "alias": "isBusy"; "required": false; "isSignal": true; }; "theme": { "alias": "theme"; "required": false; "isSignal": true; }; "showSearch": { "alias": "showSearch"; "required": false; "isSignal": true; }; }, { "login": "login"; "logout": "logout"; "themeToggle": "themeToggle"; "searchOpen": "searchOpen"; }, never, never, true, never>;
908
909
  }
909
910
 
910
911
  /**