@dataengineeringformachinelearning/viking-ui 1.0.2 → 3.0.0-alpha.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.
Files changed (129) hide show
  1. package/README.md +180 -41
  2. package/dist/deml-components.css +1122 -0
  3. package/dist/design-tokens.css +688 -0
  4. package/dist/elements/button/viking-button.d.ts +14 -0
  5. package/dist/elements/card/viking-card.d.ts +8 -0
  6. package/dist/elements/core/dom.d.ts +4 -0
  7. package/dist/elements/core/styles.d.ts +2 -0
  8. package/dist/elements/modal/viking-modal.d.ts +15 -0
  9. package/dist/fonts/inter/InterVariable-Italic.woff2 +0 -0
  10. package/dist/fonts/inter/InterVariable.woff2 +0 -0
  11. package/dist/index.d.ts +1 -0
  12. package/dist/index.js +4051 -0
  13. package/dist/lib/core/brand-icons.d.ts +29 -0
  14. package/dist/lib/core/icons.d.ts +132 -0
  15. package/dist/lib/core/integration-brand-icons.d.ts +18 -0
  16. package/dist/lib/core/lucide-paths.generated.d.ts +90 -0
  17. package/dist/lib/site-drakkar/site-drakkar.config.d.ts +50 -0
  18. package/dist/lib/site-drakkar/suite-search-items.d.ts +17 -0
  19. package/dist/viking-components.css +1837 -0
  20. package/dist/viking-tokens.json +318 -0
  21. package/dist/viking-ui-elements.js +1750 -0
  22. package/dist/viking-ui.css +1 -0
  23. package/dist/web/badge/viking-badge-wc.d.ts +28 -0
  24. package/dist/web/button/viking-button-wc.d.ts +28 -0
  25. package/dist/web/callout/viking-callout-wc.d.ts +27 -0
  26. package/dist/web/card/viking-card-wc.d.ts +29 -0
  27. package/dist/web/core/base.d.ts +12 -0
  28. package/dist/web/core/dom.d.ts +11 -0
  29. package/dist/web/core/icons-inline.d.ts +7 -0
  30. package/dist/web/core/styles.d.ts +12 -0
  31. package/dist/web/core/types.d.ts +10 -0
  32. package/dist/web/field/viking-field-wc.d.ts +32 -0
  33. package/dist/web/index.d.ts +15 -0
  34. package/dist/web/input/viking-input-wc.d.ts +32 -0
  35. package/dist/web/modal/viking-modal-wc.d.ts +50 -0
  36. package/dist/web/search-palette/viking-search-palette-wc.d.ts +64 -0
  37. package/dist/web/select/viking-select-wc.d.ts +48 -0
  38. package/dist/web/suite-header/viking-suite-header-wc.d.ts +36 -0
  39. package/dist/web/suite-search-palette/viking-suite-search-palette-wc.d.ts +39 -0
  40. package/dist/web/theme-toggle/viking-theme-toggle-wc.d.ts +19 -0
  41. package/dist/web/types.d.ts +40 -0
  42. package/dist/web-components/index.d.ts +1 -0
  43. package/dist/web-components.js +1750 -0
  44. package/dist/widget.js +1182 -0
  45. package/package.json +89 -30
  46. package/src/assets/fonts/inter/InterVariable-Italic.woff2 +0 -0
  47. package/src/assets/fonts/inter/InterVariable.woff2 +0 -0
  48. package/src/elements/button/viking-button.ts +201 -0
  49. package/src/elements/card/viking-card.ts +60 -0
  50. package/src/elements/core/dom.ts +33 -0
  51. package/src/elements/core/styles.ts +28 -0
  52. package/src/elements/modal/viking-modal.ts +154 -0
  53. package/src/index.ts +1 -0
  54. package/src/lib/core/brand-icons.ts +62 -0
  55. package/src/lib/core/icons.ts +206 -0
  56. package/src/lib/core/integration-brand-icons.ts +77 -0
  57. package/src/lib/core/lucide-paths.generated.ts +130 -0
  58. package/src/lib/site-drakkar/site-drakkar.config.ts +295 -0
  59. package/src/lib/site-drakkar/suite-search-items.ts +246 -0
  60. package/src/styles/_buttons.scss +301 -0
  61. package/src/styles/_component-primitives.scss +183 -0
  62. package/src/styles/_drakkar-buttons.scss +85 -0
  63. package/src/styles/_fonts.scss +22 -0
  64. package/src/styles/_forms.scss +66 -0
  65. package/src/styles/_input.scss +106 -0
  66. package/src/styles/_layout-enforcement.scss +166 -0
  67. package/src/styles/_layout-rhythm.scss +158 -0
  68. package/src/styles/_legacy-aliases.scss +212 -0
  69. package/src/styles/_series-colors.scss +24 -0
  70. package/src/styles/_static-primitives.scss +857 -0
  71. package/src/styles/_typography.scss +87 -0
  72. package/src/styles/_variables.scss +527 -0
  73. package/src/styles/components/a11y.scss +90 -0
  74. package/src/styles/components/badges.scss +102 -0
  75. package/src/styles/components/extracted-utilities.scss +459 -0
  76. package/src/styles/components/footer.scss +155 -0
  77. package/src/styles/components/icon-heading.scss +47 -0
  78. package/src/styles/components/icon-inline.scss +78 -0
  79. package/src/styles/components/layout.scss +59 -0
  80. package/src/styles/components/utilities.scss +131 -0
  81. package/src/styles/components/viking-inspired.scss +204 -0
  82. package/src/styles/components/whitepaper-cta.scss +130 -0
  83. package/src/styles/components-bundle.scss +9 -0
  84. package/src/styles/components.scss +175 -0
  85. package/src/styles/deml-components.scss +10 -0
  86. package/src/styles/index.scss +8 -0
  87. package/src/styles/layout-shell.scss +39 -11
  88. package/src/styles/page-shell.scss +663 -33
  89. package/src/styles/static-navbar.scss +862 -146
  90. package/src/styles/surfaces/backend.scss +142 -0
  91. package/src/styles/surfaces/docs-global.scss +73 -0
  92. package/src/styles/surfaces/docs-shell.scss +412 -0
  93. package/src/styles/surfaces/docs-showcase.scss +1051 -0
  94. package/src/styles/surfaces/marketing-cta.scss +62 -0
  95. package/src/styles/surfaces/marketing-docs-bento.scss +67 -0
  96. package/src/styles/surfaces/marketing-global.scss +748 -0
  97. package/src/styles/surfaces/marketing-landing.scss +1260 -0
  98. package/src/styles/surfaces/marketing-publication.scss +535 -0
  99. package/src/styles/surfaces/marketing-theme.scss +14 -0
  100. package/src/styles/surfaces/swagger-ui.scss +921 -0
  101. package/src/styles/tokens-export.scss +18 -0
  102. package/src/styles/tokens.scss +5 -0
  103. package/src/styles/viking-ui-bundle.scss +20 -2
  104. package/src/styles/viking-ui.scss +213 -51
  105. package/src/tokens/viking-tokens.json +318 -0
  106. package/src/web/badge/viking-badge-wc.ts +116 -0
  107. package/src/web/button/viking-button-wc.ts +165 -0
  108. package/src/web/callout/viking-callout-wc.ts +105 -0
  109. package/src/web/card/viking-card-wc.ts +66 -0
  110. package/src/web/core/base.ts +56 -0
  111. package/src/web/core/dom.ts +53 -0
  112. package/src/web/core/icons-inline.ts +44 -0
  113. package/src/web/core/styles.ts +1138 -0
  114. package/src/web/core/types.ts +19 -0
  115. package/src/web/field/viking-field-wc.ts +154 -0
  116. package/src/web/index.ts +73 -0
  117. package/src/web/input/viking-input-wc.ts +211 -0
  118. package/src/web/modal/viking-modal-wc.ts +187 -0
  119. package/src/web/search-palette/viking-search-palette-wc.ts +494 -0
  120. package/src/web/select/viking-select-wc.ts +218 -0
  121. package/src/web/suite-header/viking-suite-header-wc.ts +714 -0
  122. package/src/web/suite-search-palette/viking-suite-search-palette-wc.ts +234 -0
  123. package/src/web/theme-toggle/viking-theme-toggle-wc.ts +139 -0
  124. package/src/web/types.ts +37 -0
  125. package/src/web-components/index.ts +1 -0
  126. package/fesm2022/dataengineeringformachinelearning-viking-ui.mjs +0 -6114
  127. package/fesm2022/dataengineeringformachinelearning-viking-ui.mjs.map +0 -1
  128. package/types/dataengineeringformachinelearning-viking-ui.d.ts +0 -1397
  129. package/viking.manifest.json +0 -238
@@ -0,0 +1,1138 @@
1
+ /**
2
+ * Shadow DOM styles for Viking-UI Web Components.
3
+ * All values reference --viking-* tokens inherited from the document :root.
4
+ */
5
+
6
+ export const VIKING_BUTTON_STYLES = `
7
+ :host {
8
+ display: inline-flex;
9
+ font-family: var(--viking-font-family);
10
+ }
11
+
12
+ :host([full-width]) {
13
+ display: flex;
14
+ width: 100%;
15
+ }
16
+
17
+ :host([full-width]) .viking-btn {
18
+ width: 100%;
19
+ min-width: 0;
20
+ }
21
+
22
+ :host([compact]) .viking-btn {
23
+ min-width: 0;
24
+ }
25
+
26
+ :host([square]) {
27
+ flex: 0 0 auto;
28
+ }
29
+
30
+ .viking-btn {
31
+ font-family: inherit;
32
+ font-size: var(--viking-font-size-ui, var(--viking-font-size-sm));
33
+ font-weight: var(--viking-font-weight-semibold);
34
+ letter-spacing: var(--viking-letter-spacing-wide);
35
+ line-height: var(--viking-line-height-snug);
36
+ display: inline-flex;
37
+ align-items: center;
38
+ justify-content: center;
39
+ gap: var(--viking-space-1);
40
+ min-height: var(--viking-control-height);
41
+ padding: 0 var(--viking-control-padding-x);
42
+ border-radius: var(--viking-radius);
43
+ border: 1px solid transparent;
44
+ cursor: pointer;
45
+ text-decoration: none;
46
+ transition: var(--viking-transition-interactive);
47
+ width: auto;
48
+ min-width: var(--viking-btn-min-width, 120px);
49
+ white-space: nowrap;
50
+ position: relative;
51
+ user-select: none;
52
+ -webkit-tap-highlight-color: transparent;
53
+ box-sizing: border-box;
54
+ }
55
+
56
+ .viking-btn:focus-visible {
57
+ outline: var(--viking-ring-width) solid var(--viking-ring);
58
+ outline-offset: var(--viking-ring-offset);
59
+ z-index: 1;
60
+ }
61
+
62
+ .viking-btn:disabled,
63
+ .viking-btn[aria-busy='true'] {
64
+ opacity: var(--viking-state-disabled-opacity);
65
+ cursor: not-allowed;
66
+ transform: none !important;
67
+ box-shadow: none !important;
68
+ }
69
+
70
+ .viking-btn-sm {
71
+ min-height: var(--viking-control-height-sm);
72
+ padding: 0 var(--viking-space-2);
73
+ font-size: var(--viking-font-size-xs);
74
+ min-width: auto;
75
+ }
76
+
77
+ .viking-btn-xs {
78
+ min-height: var(--viking-control-height-xs);
79
+ padding: 0 var(--viking-space-1);
80
+ font-size: var(--viking-font-size-xs);
81
+ min-width: auto;
82
+ }
83
+
84
+ .viking-btn-square {
85
+ display: inline-grid;
86
+ place-items: center;
87
+ width: var(--viking-control-height);
88
+ min-width: var(--viking-control-height);
89
+ max-width: var(--viking-control-height);
90
+ height: var(--viking-control-height);
91
+ min-height: var(--viking-control-height);
92
+ padding: 0;
93
+ line-height: 1;
94
+ }
95
+
96
+ .viking-btn-square.viking-btn-sm {
97
+ width: var(--viking-control-height-sm);
98
+ min-width: var(--viking-control-height-sm);
99
+ max-width: var(--viking-control-height-sm);
100
+ height: var(--viking-control-height-sm);
101
+ min-height: var(--viking-control-height-sm);
102
+ }
103
+
104
+ .viking-btn-square.viking-btn-xs {
105
+ width: var(--viking-control-height-xs);
106
+ min-width: var(--viking-control-height-xs);
107
+ max-width: var(--viking-control-height-xs);
108
+ height: var(--viking-control-height-xs);
109
+ min-height: var(--viking-control-height-xs);
110
+ }
111
+
112
+ .viking-btn-square .viking-btn-label {
113
+ display: inline-grid;
114
+ place-items: center;
115
+ width: 100%;
116
+ height: 100%;
117
+ line-height: 1;
118
+ }
119
+
120
+ .viking-btn-square ::slotted(*) {
121
+ display: inline-flex;
122
+ align-items: center;
123
+ justify-content: center;
124
+ margin: 0;
125
+ line-height: 1;
126
+ }
127
+
128
+ .viking-btn-square ::slotted(svg),
129
+ .viking-btn-square ::slotted([data-viking-icon]) {
130
+ width: var(--viking-icon-size-md, 20px);
131
+ height: var(--viking-icon-size-md, 20px);
132
+ }
133
+
134
+ .viking-btn-outline {
135
+ background: var(--viking-surface);
136
+ color: var(--viking-text);
137
+ border-color: var(--viking-border-strong);
138
+ box-shadow: var(--viking-shadow-sm);
139
+ }
140
+
141
+ .viking-btn-outline:hover:not(:disabled):not([aria-busy='true']) {
142
+ background: var(--viking-surface-alt);
143
+ border-color: color-mix(in srgb, var(--viking-accent) 45%, var(--viking-border-strong));
144
+ box-shadow: var(--viking-shadow-md);
145
+ transform: translateY(var(--viking-state-hover-lift));
146
+ }
147
+
148
+ .viking-btn-primary {
149
+ background: var(--viking-accent);
150
+ color: var(--viking-accent-content);
151
+ border-color: color-mix(in srgb, var(--viking-accent) 82%, var(--viking-black));
152
+ box-shadow: var(--viking-shadow-sm);
153
+ }
154
+
155
+ .viking-btn-primary:hover:not(:disabled):not([aria-busy='true']) {
156
+ background: var(--viking-accent-hover);
157
+ border-color: var(--viking-accent-hover);
158
+ box-shadow: var(--viking-shadow-hover);
159
+ transform: translateY(var(--viking-state-hover-lift));
160
+ }
161
+
162
+ .viking-btn-secondary {
163
+ background: var(--viking-accent-secondary);
164
+ color: var(--viking-accent-secondary-content);
165
+ border-color: color-mix(in srgb, var(--viking-accent-secondary) 82%, var(--viking-black));
166
+ box-shadow: var(--viking-shadow-sm);
167
+ }
168
+
169
+ .viking-btn-secondary:hover:not(:disabled):not([aria-busy='true']) {
170
+ background: var(--viking-accent-secondary-hover);
171
+ border-color: var(--viking-accent-secondary-hover);
172
+ box-shadow: var(--viking-shadow-hover);
173
+ transform: translateY(var(--viking-state-hover-lift));
174
+ }
175
+
176
+ .viking-btn-filled {
177
+ background: var(--viking-surface-alt);
178
+ color: var(--viking-text);
179
+ border-color: var(--viking-border);
180
+ box-shadow: var(--viking-shadow-xs);
181
+ }
182
+
183
+ .viking-btn-filled:hover:not(:disabled):not([aria-busy='true']) {
184
+ border-color: color-mix(in srgb, var(--viking-accent) 45%, var(--viking-border));
185
+ background: color-mix(in srgb, var(--viking-accent) 8%, var(--viking-surface-alt));
186
+ box-shadow: var(--viking-shadow-sm);
187
+ transform: translateY(var(--viking-state-hover-lift));
188
+ }
189
+
190
+ .viking-btn-danger {
191
+ background: var(--viking-danger);
192
+ color: var(--viking-on-danger);
193
+ border-color: color-mix(in srgb, var(--viking-danger) 85%, var(--viking-black));
194
+ box-shadow: var(--viking-shadow-sm);
195
+ }
196
+
197
+ .viking-btn-danger:hover:not(:disabled):not([aria-busy='true']) {
198
+ background: color-mix(in srgb, var(--viking-danger) 88%, var(--viking-white));
199
+ box-shadow: var(--viking-shadow-hover);
200
+ transform: translateY(var(--viking-state-hover-lift));
201
+ }
202
+
203
+ .viking-btn-ghost {
204
+ background: transparent;
205
+ color: var(--viking-text);
206
+ min-width: auto;
207
+ box-shadow: none;
208
+ border-color: transparent;
209
+ }
210
+
211
+ .viking-btn-ghost:hover:not(:disabled):not([aria-busy='true']) {
212
+ background: var(--viking-accent-soft);
213
+ color: var(--viking-accent-strong);
214
+ }
215
+
216
+ .viking-btn-subtle {
217
+ background: transparent;
218
+ color: var(--viking-text-muted);
219
+ border-color: var(--viking-border-subtle);
220
+ min-width: auto;
221
+ box-shadow: none;
222
+ }
223
+
224
+ .viking-btn-subtle:hover:not(:disabled):not([aria-busy='true']) {
225
+ color: var(--viking-text);
226
+ background: var(--viking-accent-soft);
227
+ border-color: var(--viking-border-strong);
228
+ }
229
+
230
+ .viking-btn:active:not(:disabled):not([aria-busy='true']) {
231
+ transform: translateY(0) scale(var(--viking-state-active-scale));
232
+ }
233
+
234
+ .viking-btn-label {
235
+ display: inline-flex;
236
+ align-items: center;
237
+ line-height: inherit;
238
+ }
239
+
240
+ .viking-btn-spinner {
241
+ width: 1.125rem;
242
+ height: 1.125rem;
243
+ border: 2px solid currentColor;
244
+ border-right-color: transparent;
245
+ border-radius: 50%;
246
+ animation: viking-spin 0.8s linear infinite;
247
+ }
248
+
249
+ @keyframes viking-spin {
250
+ to { transform: rotate(360deg); }
251
+ }
252
+
253
+ @media (prefers-reduced-motion: reduce) {
254
+ .viking-btn-spinner { animation-duration: 0.01ms; }
255
+ .viking-btn { transition-duration: 0.01ms; }
256
+ }
257
+ `;
258
+
259
+ export const VIKING_INPUT_STYLES = `
260
+ :host {
261
+ display: block;
262
+ font-family: var(--viking-font-family);
263
+ }
264
+
265
+ .viking-input-shell {
266
+ display: flex;
267
+ align-items: center;
268
+ gap: var(--viking-space-1);
269
+ min-height: var(--viking-control-height);
270
+ padding: 0 var(--viking-space-2);
271
+ font-family: inherit;
272
+ font-size: var(--viking-font-size);
273
+ color: var(--viking-text);
274
+ background: var(--viking-surface-alt);
275
+ border: 1px solid var(--viking-border);
276
+ border-radius: var(--viking-radius-sm);
277
+ box-shadow: var(--viking-shadow-xs);
278
+ transition: var(--viking-transition-interactive);
279
+ width: 100%;
280
+ min-width: 0;
281
+ box-sizing: border-box;
282
+ }
283
+
284
+ .viking-input-shell:hover:not(.viking-disabled):not(.viking-loading) {
285
+ border-color: color-mix(in srgb, var(--viking-accent) 35%, var(--viking-border-strong));
286
+ box-shadow: var(--viking-shadow-sm);
287
+ }
288
+
289
+ .viking-input-shell:focus-within:not(.viking-loading) {
290
+ outline: var(--viking-ring-width) solid var(--viking-ring);
291
+ outline-offset: var(--viking-ring-offset);
292
+ border-color: var(--viking-accent);
293
+ box-shadow: var(--viking-shadow-sm);
294
+ }
295
+
296
+ .viking-input-shell.viking-disabled,
297
+ .viking-input-shell.viking-loading {
298
+ opacity: var(--viking-state-disabled-opacity);
299
+ }
300
+
301
+ .viking-input-shell.viking-loading {
302
+ cursor: wait;
303
+ }
304
+
305
+ .viking-input-native {
306
+ flex: 1;
307
+ min-width: 0;
308
+ width: 100%;
309
+ border: none;
310
+ outline: none !important;
311
+ background: transparent;
312
+ color: var(--viking-text);
313
+ font-family: inherit;
314
+ font-size: inherit;
315
+ padding: 0;
316
+ }
317
+
318
+ .viking-input-native::placeholder {
319
+ color: var(--viking-text-muted);
320
+ }
321
+
322
+ input {
323
+ flex: 1;
324
+ min-width: 0;
325
+ border: none;
326
+ outline: none !important;
327
+ background: transparent;
328
+ color: var(--viking-text);
329
+ font-family: inherit;
330
+ font-size: inherit;
331
+ padding: 0;
332
+ }
333
+
334
+ input::placeholder {
335
+ color: var(--viking-text-muted);
336
+ }
337
+
338
+ input:disabled {
339
+ cursor: not-allowed;
340
+ }
341
+
342
+ .viking-input-clear {
343
+ display: inline-flex;
344
+ align-items: center;
345
+ justify-content: center;
346
+ min-width: var(--viking-touch-target-comfort, 44px);
347
+ min-height: var(--viking-touch-target-comfort, 44px);
348
+ border: none;
349
+ background: transparent;
350
+ color: var(--viking-text-muted);
351
+ cursor: pointer;
352
+ padding: var(--viking-space-half);
353
+ border-radius: var(--viking-radius-pill);
354
+ transition: var(--viking-transition-interactive);
355
+ flex-shrink: 0;
356
+ -webkit-tap-highlight-color: transparent;
357
+ }
358
+
359
+ .viking-input-clear:hover {
360
+ color: var(--viking-text);
361
+ background: var(--viking-accent-soft);
362
+ }
363
+
364
+ .viking-input-clear:focus-visible {
365
+ outline: var(--viking-ring-width) solid var(--viking-ring);
366
+ outline-offset: var(--viking-ring-offset);
367
+ }
368
+
369
+ .viking-input-spinner {
370
+ width: 1rem;
371
+ height: 1rem;
372
+ border: 2px solid var(--viking-text-muted);
373
+ border-right-color: transparent;
374
+ border-radius: 50%;
375
+ animation: viking-spin 0.8s linear infinite;
376
+ flex-shrink: 0;
377
+ }
378
+
379
+ @keyframes viking-spin {
380
+ to { transform: rotate(360deg); }
381
+ }
382
+ `;
383
+
384
+ export const VIKING_FIELD_STYLES = `
385
+ :host {
386
+ display: block;
387
+ font-family: var(--viking-font-family);
388
+ color: var(--viking-text);
389
+ min-width: 0;
390
+ }
391
+
392
+ :host([hidden]) {
393
+ display: none;
394
+ }
395
+
396
+ :host([width='full']) {
397
+ width: 100%;
398
+ }
399
+
400
+ :host([width='half']) {
401
+ width: 100%;
402
+ max-width: var(--viking-select-half-max-width, min(100%, 24rem));
403
+ }
404
+
405
+ .viking-field {
406
+ display: flex;
407
+ flex-direction: column;
408
+ gap: var(--viking-space-1);
409
+ }
410
+
411
+ .viking-field-label-row {
412
+ display: flex;
413
+ align-items: baseline;
414
+ justify-content: space-between;
415
+ gap: var(--viking-space-2);
416
+ }
417
+
418
+ .viking-field-label {
419
+ display: inline-flex;
420
+ align-items: center;
421
+ gap: var(--viking-space-half);
422
+ font-size: var(--viking-font-size-ui);
423
+ font-weight: var(--viking-font-weight-bold);
424
+ color: var(--viking-text);
425
+ line-height: var(--viking-line-height-snug);
426
+ cursor: pointer;
427
+ }
428
+
429
+ .viking-field-required {
430
+ color: var(--viking-danger-text);
431
+ }
432
+
433
+ .viking-field-control {
434
+ min-width: 0;
435
+ }
436
+
437
+ .viking-field-description,
438
+ .viking-field-error {
439
+ margin: 0;
440
+ font-size: var(--viking-font-size-xs);
441
+ line-height: var(--viking-line-height-relaxed);
442
+ }
443
+
444
+ .viking-field-description {
445
+ color: var(--viking-text-muted);
446
+ }
447
+
448
+ .viking-field-error {
449
+ color: var(--viking-danger-text);
450
+ }
451
+ `;
452
+
453
+ export const VIKING_BADGE_STYLES = `
454
+ :host {
455
+ display: inline-flex;
456
+ align-items: center;
457
+ gap: var(--viking-space-half);
458
+ padding: var(--viking-space-half) var(--viking-space-1);
459
+ font-family: var(--viking-font-family);
460
+ font-size: var(--viking-font-size-xs);
461
+ font-weight: var(--viking-font-weight-semibold);
462
+ letter-spacing: var(--viking-letter-spacing-wide);
463
+ line-height: var(--viking-line-height-snug);
464
+ border-radius: var(--viking-radius-pill);
465
+ border: 1px solid var(--viking-border);
466
+ background: var(--viking-surface-alt);
467
+ color: var(--viking-text);
468
+ white-space: nowrap;
469
+ transition: var(--viking-transition-interactive);
470
+ box-shadow: var(--viking-shadow-xs);
471
+ }
472
+
473
+ :host([size='sm']) {
474
+ padding: 0 var(--viking-space-1);
475
+ font-size: var(--viking-font-size-2xs);
476
+ }
477
+
478
+ :host([tone='accent']) {
479
+ background: var(--viking-accent);
480
+ border-color: color-mix(in srgb, var(--viking-accent) 80%, var(--viking-black));
481
+ color: var(--viking-accent-content);
482
+ box-shadow: var(--viking-shadow-sm);
483
+ }
484
+
485
+ :host([tone='secondary']) {
486
+ background: color-mix(in srgb, var(--viking-accent-secondary) 16%, var(--viking-surface));
487
+ border-color: color-mix(in srgb, var(--viking-accent-secondary) 55%, transparent);
488
+ color: var(--viking-accent-secondary);
489
+ }
490
+
491
+ :host([tone='success']) {
492
+ background: color-mix(in srgb, var(--viking-success) 16%, var(--viking-surface));
493
+ border-color: color-mix(in srgb, var(--viking-success) 55%, transparent);
494
+ color: var(--viking-success);
495
+ }
496
+
497
+ :host([tone='warning']) {
498
+ background: color-mix(in srgb, var(--viking-warning) 18%, var(--viking-surface));
499
+ border-color: color-mix(in srgb, var(--viking-warning) 55%, transparent);
500
+ color: var(--viking-warning);
501
+ }
502
+
503
+ :host([tone='danger']) {
504
+ background: color-mix(in srgb, var(--viking-danger) 14%, var(--viking-surface));
505
+ border-color: color-mix(in srgb, var(--viking-danger) 50%, transparent);
506
+ color: var(--viking-danger-text);
507
+ }
508
+
509
+ :host([tone='info']) {
510
+ background: color-mix(in srgb, var(--viking-info) 14%, var(--viking-surface));
511
+ border-color: color-mix(in srgb, var(--viking-info) 50%, transparent);
512
+ color: var(--viking-info);
513
+ }
514
+
515
+ :host([tone='muted']),
516
+ :host([tone='subtle']) {
517
+ color: var(--viking-text-muted);
518
+ background: var(--viking-surface);
519
+ border-color: var(--viking-border-subtle);
520
+ }
521
+
522
+ .viking-wc-icon {
523
+ flex-shrink: 0;
524
+ }
525
+
526
+ .viking-badge-remove {
527
+ display: inline-flex;
528
+ align-items: center;
529
+ justify-content: center;
530
+ min-width: var(--viking-touch-target-comfort, 44px);
531
+ min-height: var(--viking-touch-target-comfort, 44px);
532
+ border: none;
533
+ background: transparent;
534
+ color: currentColor;
535
+ cursor: pointer;
536
+ padding: var(--viking-space-half);
537
+ border-radius: var(--viking-radius-pill);
538
+ transition: var(--viking-transition-interactive);
539
+ margin-left: calc(var(--viking-space-half) * -1);
540
+ }
541
+
542
+ .viking-badge-remove:hover {
543
+ background: color-mix(in srgb, currentColor 12%, transparent);
544
+ }
545
+
546
+ .viking-badge-remove:focus-visible {
547
+ outline: var(--viking-ring-width) solid var(--viking-ring);
548
+ outline-offset: var(--viking-ring-offset);
549
+ }
550
+ `;
551
+
552
+ export const VIKING_CALLOUT_STYLES = `
553
+ :host {
554
+ display: block;
555
+ font-family: var(--viking-font-family);
556
+ }
557
+
558
+ :host([hidden]) {
559
+ display: none;
560
+ }
561
+
562
+ .viking-callout {
563
+ display: flex;
564
+ align-items: flex-start;
565
+ gap: var(--viking-space-2);
566
+ padding: var(--viking-space-2);
567
+ border-radius: var(--viking-radius-lg);
568
+ border: 1px solid var(--viking-border);
569
+ border-left-width: 3px;
570
+ background: var(--viking-surface-alt);
571
+ color: var(--viking-text);
572
+ font-size: var(--viking-font-size-sm);
573
+ box-shadow: var(--viking-shadow-sm);
574
+ }
575
+
576
+ .viking-callout-icon {
577
+ flex-shrink: 0;
578
+ margin-top: 2px;
579
+ color: var(--viking-text-muted);
580
+ }
581
+
582
+ .viking-callout-body {
583
+ flex: 1;
584
+ min-width: 0;
585
+ }
586
+
587
+ .viking-callout-heading {
588
+ margin: 0 0 var(--viking-space-half);
589
+ font-size: var(--viking-font-size-ui);
590
+ font-weight: var(--viking-font-weight-bold);
591
+ color: var(--viking-text);
592
+ }
593
+
594
+ .viking-callout-text {
595
+ margin: 0;
596
+ color: var(--viking-text);
597
+ line-height: var(--viking-line-height-relaxed);
598
+ }
599
+
600
+ .viking-callout-close {
601
+ display: inline-flex;
602
+ align-items: center;
603
+ justify-content: center;
604
+ min-width: var(--viking-touch-target-comfort, 44px);
605
+ min-height: var(--viking-touch-target-comfort, 44px);
606
+ border: none;
607
+ background: transparent;
608
+ color: var(--viking-text-muted);
609
+ cursor: pointer;
610
+ padding: var(--viking-space-half);
611
+ border-radius: var(--viking-radius);
612
+ transition: var(--viking-transition-interactive);
613
+ flex-shrink: 0;
614
+ }
615
+
616
+ .viking-callout-close:hover {
617
+ color: var(--viking-text);
618
+ background: color-mix(in srgb, currentColor 8%, transparent);
619
+ }
620
+
621
+ .viking-callout-close:focus-visible {
622
+ outline: var(--viking-ring-width) solid var(--viking-ring);
623
+ outline-offset: var(--viking-ring-offset);
624
+ }
625
+
626
+ .viking-callout-accent {
627
+ border-color: var(--viking-accent);
628
+ border-left-color: var(--viking-accent);
629
+ background: var(--viking-accent-soft);
630
+ }
631
+
632
+ .viking-callout-accent .viking-callout-icon {
633
+ color: var(--viking-accent);
634
+ }
635
+
636
+ .viking-callout-secondary {
637
+ border-color: color-mix(in srgb, var(--viking-accent-secondary) 45%, transparent);
638
+ border-left-color: var(--viking-accent-secondary);
639
+ background: var(--viking-accent-secondary-soft);
640
+ }
641
+
642
+ .viking-callout-secondary .viking-callout-icon {
643
+ color: var(--viking-accent-secondary);
644
+ }
645
+
646
+ .viking-callout-info {
647
+ border-color: color-mix(in srgb, var(--viking-info) 45%, transparent);
648
+ border-left-color: var(--viking-info);
649
+ background: color-mix(in srgb, var(--viking-info) 10%, var(--viking-surface));
650
+ }
651
+
652
+ .viking-callout-info .viking-callout-icon {
653
+ color: var(--viking-info);
654
+ }
655
+
656
+ .viking-callout-success {
657
+ border-color: color-mix(in srgb, var(--viking-success) 45%, transparent);
658
+ border-left-color: var(--viking-success);
659
+ background: color-mix(in srgb, var(--viking-success) 10%, var(--viking-surface));
660
+ }
661
+
662
+ .viking-callout-success .viking-callout-icon {
663
+ color: var(--viking-success);
664
+ }
665
+
666
+ .viking-callout-warning {
667
+ border-color: color-mix(in srgb, var(--viking-warning) 45%, transparent);
668
+ border-left-color: var(--viking-warning);
669
+ background: color-mix(in srgb, var(--viking-warning) 12%, var(--viking-surface));
670
+ }
671
+
672
+ .viking-callout-warning .viking-callout-icon {
673
+ color: var(--viking-warning);
674
+ }
675
+
676
+ .viking-callout-danger {
677
+ border-color: var(--viking-danger);
678
+ border-left-color: var(--viking-danger);
679
+ background: color-mix(in srgb, var(--viking-crimson-600) 22%, var(--viking-surface));
680
+ color: var(--viking-white);
681
+ }
682
+
683
+ .viking-callout-danger .viking-callout-icon {
684
+ color: var(--viking-crimson-400);
685
+ }
686
+
687
+ .viking-callout-danger .viking-callout-text {
688
+ color: var(--viking-white);
689
+ }
690
+ `;
691
+
692
+ export const VIKING_SELECT_STYLES = `
693
+ :host {
694
+ display: block;
695
+ font-family: var(--viking-font-family);
696
+ min-width: 0;
697
+ }
698
+
699
+ :host([width='full']) {
700
+ width: 100%;
701
+ }
702
+
703
+ :host([width='half']) {
704
+ width: 100%;
705
+ max-width: var(--viking-select-half-max-width, min(100%, 24rem));
706
+ }
707
+
708
+ .viking-field {
709
+ display: flex;
710
+ flex-direction: column;
711
+ gap: var(--viking-space-1);
712
+ }
713
+
714
+ .viking-field-label {
715
+ font-size: var(--viking-font-size-ui);
716
+ font-weight: var(--viking-font-weight-bold);
717
+ color: var(--viking-text);
718
+ }
719
+
720
+ .viking-field-description {
721
+ margin: 0;
722
+ font-size: var(--viking-font-size-xs);
723
+ color: var(--viking-text-muted);
724
+ }
725
+
726
+ .viking-field-error {
727
+ margin: 0;
728
+ font-size: var(--viking-font-size-xs);
729
+ color: var(--viking-danger);
730
+ }
731
+
732
+ .viking-select-native {
733
+ width: 100%;
734
+ min-height: var(--viking-control-height);
735
+ padding: 0 var(--viking-space-2);
736
+ border: 1px solid var(--viking-border-strong);
737
+ border-radius: var(--viking-radius);
738
+ background: var(--viking-surface);
739
+ color: var(--viking-text);
740
+ font-family: inherit;
741
+ font-size: var(--viking-font-size);
742
+ cursor: pointer;
743
+ transition: var(--viking-transition-interactive);
744
+ box-shadow: var(--viking-shadow-sm);
745
+ }
746
+
747
+ .viking-select-native:hover:not(:disabled) {
748
+ border-color: var(--viking-accent-strong);
749
+ box-shadow: var(--viking-shadow-md);
750
+ }
751
+
752
+ .viking-select-native:focus-visible {
753
+ outline: var(--viking-ring-width) solid var(--viking-ring);
754
+ outline-offset: var(--viking-ring-offset);
755
+ }
756
+
757
+ .viking-select-native:disabled {
758
+ opacity: var(--viking-state-disabled-opacity);
759
+ cursor: not-allowed;
760
+ }
761
+
762
+ .viking-select-native[aria-invalid='true'] {
763
+ border-color: var(--viking-danger);
764
+ }
765
+ `;
766
+
767
+ export const VIKING_MODAL_STYLES = `
768
+ :host {
769
+ display: contents;
770
+ }
771
+
772
+ .viking-modal-backdrop {
773
+ position: fixed;
774
+ inset: 0;
775
+ z-index: var(--viking-z-overlay, 10001);
776
+ display: flex;
777
+ align-items: center;
778
+ justify-content: center;
779
+ padding: var(--viking-space-3);
780
+ background: var(--viking-overlay-backdrop);
781
+ backdrop-filter: blur(8px);
782
+ -webkit-backdrop-filter: blur(8px);
783
+ border: none;
784
+ animation: viking-backdrop-in var(--viking-duration-fast) var(--viking-ease-out);
785
+ }
786
+
787
+ .viking-modal-panel {
788
+ display: flex;
789
+ flex-direction: column;
790
+ gap: var(--viking-space-2);
791
+ width: min(522px, calc(100vw - var(--viking-space-4)));
792
+ max-height: calc(100vh - var(--viking-space-6));
793
+ padding: var(--viking-space-3);
794
+ border: 1px solid var(--viking-border-strong);
795
+ border-radius: var(--viking-radius-lg);
796
+ background: var(--viking-surface);
797
+ color: var(--viking-text);
798
+ box-shadow: var(--viking-shadow-lg);
799
+ font-family: var(--viking-font-family);
800
+ position: relative;
801
+ overflow: hidden;
802
+ animation: viking-modal-in var(--viking-duration) var(--viking-ease-default);
803
+ }
804
+
805
+ .viking-modal-panel::before {
806
+ content: '';
807
+ position: absolute;
808
+ inset: 0 0 auto;
809
+ height: 1px;
810
+ background: linear-gradient(
811
+ 90deg,
812
+ transparent,
813
+ color-mix(in srgb, var(--viking-metallic-200) 22%, transparent),
814
+ transparent
815
+ );
816
+ pointer-events: none;
817
+ }
818
+
819
+ .viking-modal-header {
820
+ display: flex;
821
+ align-items: flex-start;
822
+ justify-content: space-between;
823
+ gap: var(--viking-space-2);
824
+ padding-bottom: var(--viking-space-1);
825
+ border-bottom: 1px solid var(--viking-border-subtle);
826
+ }
827
+
828
+ .viking-modal-heading {
829
+ margin: 0;
830
+ font-size: var(--viking-font-size-md);
831
+ font-weight: var(--viking-font-weight-bold);
832
+ letter-spacing: var(--viking-letter-spacing-tight);
833
+ color: var(--viking-text);
834
+ line-height: var(--viking-line-height-tight);
835
+ }
836
+
837
+ .viking-modal-close {
838
+ display: inline-flex;
839
+ align-items: center;
840
+ justify-content: center;
841
+ min-width: var(--viking-touch-target-comfort, 44px);
842
+ min-height: var(--viking-touch-target-comfort, 44px);
843
+ border: 1px solid transparent;
844
+ background: transparent;
845
+ color: var(--viking-text-muted);
846
+ cursor: pointer;
847
+ border-radius: var(--viking-radius);
848
+ transition: var(--viking-transition-interactive);
849
+ flex-shrink: 0;
850
+ }
851
+
852
+ .viking-modal-close:hover {
853
+ color: var(--viking-text);
854
+ background: var(--viking-accent-soft);
855
+ border-color: var(--viking-border-subtle);
856
+ }
857
+
858
+ .viking-modal-close:focus-visible {
859
+ outline: var(--viking-ring-width) solid var(--viking-ring);
860
+ outline-offset: var(--viking-ring-offset);
861
+ }
862
+
863
+ .viking-modal-body {
864
+ overflow-y: auto;
865
+ color: var(--viking-text-muted);
866
+ font-size: var(--viking-font-size);
867
+ line-height: var(--viking-line-height-relaxed);
868
+ }
869
+
870
+ .viking-modal-footer {
871
+ display: flex;
872
+ flex-wrap: wrap;
873
+ gap: var(--viking-space-2);
874
+ justify-content: flex-end;
875
+ padding-top: var(--viking-space-2);
876
+ border-top: 1px solid var(--viking-border-subtle);
877
+ }
878
+
879
+ .viking-modal-footer:empty {
880
+ display: none;
881
+ }
882
+
883
+ @keyframes viking-backdrop-in {
884
+ from { opacity: 0; }
885
+ to { opacity: 1; }
886
+ }
887
+
888
+ @keyframes viking-modal-in {
889
+ from {
890
+ opacity: 0;
891
+ transform: translateY(var(--viking-space-1)) scale(0.98);
892
+ }
893
+ to {
894
+ opacity: 1;
895
+ transform: translateY(0) scale(1);
896
+ }
897
+ }
898
+
899
+ @media (prefers-reduced-motion: reduce) {
900
+ .viking-modal-backdrop,
901
+ .viking-modal-panel {
902
+ animation: none;
903
+ }
904
+ }
905
+ `;
906
+
907
+ export const VIKING_SEARCH_PALETTE_STYLES = `
908
+ :host {
909
+ display: contents;
910
+ }
911
+
912
+ .viking-search-palette-backdrop {
913
+ position: fixed;
914
+ inset: 0;
915
+ z-index: var(--viking-z-overlay, 10001);
916
+ display: flex;
917
+ align-items: flex-start;
918
+ justify-content: center;
919
+ padding: 10vh var(--viking-space-2) var(--viking-space-2);
920
+ background: var(--viking-overlay-backdrop);
921
+ backdrop-filter: blur(8px);
922
+ -webkit-backdrop-filter: blur(8px);
923
+ border: none;
924
+ animation: viking-backdrop-in var(--viking-duration-fast) var(--viking-ease-out);
925
+ }
926
+
927
+ .viking-search-palette-backdrop:not([open]) {
928
+ display: none !important;
929
+ pointer-events: none;
930
+ }
931
+
932
+ .viking-search-palette {
933
+ display: flex;
934
+ flex-direction: column;
935
+ background: var(--viking-surface-raised, var(--viking-surface));
936
+ border: 1px solid var(--viking-border-strong);
937
+ border-radius: var(--viking-radius-lg);
938
+ box-shadow: var(--viking-shadow-lg);
939
+ overflow: hidden;
940
+ max-width: 600px;
941
+ width: min(100%, 600px);
942
+ margin: 0 auto;
943
+ font-family: var(--viking-font-family);
944
+ color: var(--viking-text);
945
+ animation: viking-modal-in var(--viking-duration) var(--viking-ease-default);
946
+ position: relative;
947
+ isolation: isolate;
948
+ }
949
+
950
+ .viking-search-palette::before {
951
+ content: '';
952
+ position: absolute;
953
+ inset: 0 0 auto;
954
+ height: 1px;
955
+ background: linear-gradient(
956
+ 90deg,
957
+ transparent,
958
+ color-mix(in srgb, var(--viking-metallic-200) 22%, transparent),
959
+ transparent
960
+ );
961
+ pointer-events: none;
962
+ z-index: 1;
963
+ }
964
+
965
+ .viking-search-palette-header {
966
+ display: flex;
967
+ align-items: center;
968
+ padding: var(--viking-space-2);
969
+ border-bottom: 1px solid var(--viking-border);
970
+ gap: var(--viking-space-1);
971
+ background: color-mix(in srgb, var(--viking-bg) 26%, var(--viking-surface-raised));
972
+ }
973
+
974
+ .viking-search-palette-header:focus-within {
975
+ border-bottom-color: var(--viking-accent);
976
+ box-shadow: inset 0 -2px 0 var(--viking-accent-soft);
977
+ }
978
+
979
+ .viking-search-palette-icon {
980
+ color: var(--viking-text-muted);
981
+ flex-shrink: 0;
982
+ }
983
+
984
+ .viking-search-palette-input {
985
+ flex: 1;
986
+ background: none;
987
+ border: none;
988
+ outline: none;
989
+ font-size: calc(var(--viking-font-size) * 1.05);
990
+ color: var(--viking-text);
991
+ font-family: inherit;
992
+ min-width: 0;
993
+ }
994
+
995
+ .viking-search-palette-input::placeholder {
996
+ color: var(--viking-text-muted);
997
+ }
998
+
999
+ .viking-search-palette-close {
1000
+ display: inline-flex;
1001
+ align-items: center;
1002
+ justify-content: center;
1003
+ min-width: var(--viking-touch-target-comfort, 44px);
1004
+ min-height: var(--viking-touch-target-comfort, 44px);
1005
+ border: none;
1006
+ background: transparent;
1007
+ color: var(--viking-text-muted);
1008
+ cursor: pointer;
1009
+ padding: var(--viking-space-half);
1010
+ border-radius: var(--viking-radius);
1011
+ transition: var(--viking-transition-interactive);
1012
+ flex-shrink: 0;
1013
+ }
1014
+
1015
+ .viking-search-palette-close:hover {
1016
+ color: var(--viking-text);
1017
+ background: var(--viking-accent-soft);
1018
+ }
1019
+
1020
+ .viking-search-palette-close:focus-visible {
1021
+ outline: var(--viking-ring-width) solid var(--viking-ring);
1022
+ outline-offset: var(--viking-ring-offset);
1023
+ }
1024
+
1025
+ .viking-search-palette-body {
1026
+ max-height: 50vh;
1027
+ overflow-y: auto;
1028
+ padding: var(--viking-space-2);
1029
+ }
1030
+
1031
+ .viking-search-palette-footer {
1032
+ display: flex;
1033
+ align-items: center;
1034
+ justify-content: center;
1035
+ gap: var(--viking-space-1);
1036
+ padding: var(--viking-space-1) var(--viking-space-2);
1037
+ border-top: 1px solid var(--viking-border);
1038
+ font-size: calc(var(--viking-font-size) * 0.85);
1039
+ color: var(--viking-text-muted);
1040
+ }
1041
+
1042
+ .viking-kbd {
1043
+ display: inline-flex;
1044
+ align-items: center;
1045
+ justify-content: center;
1046
+ min-width: 1.5rem;
1047
+ padding: 2px 6px;
1048
+ font-family: inherit;
1049
+ font-size: calc(var(--viking-font-size) * 0.75);
1050
+ border-radius: calc(var(--viking-radius) / 2);
1051
+ border: 1px solid var(--viking-border);
1052
+ background: var(--viking-surface-alt);
1053
+ }
1054
+
1055
+ .viking-search-results {
1056
+ display: flex;
1057
+ flex-direction: column;
1058
+ gap: var(--viking-space-1);
1059
+ }
1060
+
1061
+ .viking-search-group-label {
1062
+ margin: var(--viking-space-1) 0 var(--viking-space-half);
1063
+ padding: 0 var(--viking-space-1);
1064
+ font-size: var(--viking-font-size-2xs);
1065
+ font-weight: var(--viking-font-weight-semibold);
1066
+ letter-spacing: var(--viking-letter-spacing-caps);
1067
+ text-transform: uppercase;
1068
+ color: var(--viking-text-muted);
1069
+ }
1070
+
1071
+ .viking-search-result {
1072
+ display: flex;
1073
+ align-items: center;
1074
+ min-height: var(--viking-control-height-sm, 36px);
1075
+ padding: var(--viking-space-1) var(--viking-space-2);
1076
+ border-radius: var(--viking-radius);
1077
+ background: var(--viking-surface-alt);
1078
+ border: 1px solid var(--viking-border-subtle);
1079
+ cursor: pointer;
1080
+ transition: var(--viking-transition-interactive);
1081
+ gap: var(--viking-space-1);
1082
+ text-decoration: none;
1083
+ color: inherit;
1084
+ }
1085
+
1086
+ .viking-search-result:hover,
1087
+ .viking-search-result.is-selected {
1088
+ background: color-mix(in srgb, var(--viking-accent) 10%, var(--viking-surface-alt));
1089
+ border-color: color-mix(in srgb, var(--viking-accent) 42%, var(--viking-border-strong));
1090
+ box-shadow: var(--viking-shadow-sm);
1091
+ }
1092
+
1093
+ .viking-search-result:focus-visible {
1094
+ outline: var(--viking-ring-width) solid var(--viking-ring);
1095
+ outline-offset: var(--viking-ring-offset);
1096
+ }
1097
+
1098
+ .viking-search-result-title {
1099
+ font-size: var(--viking-font-size-sm);
1100
+ font-weight: var(--viking-font-weight-semibold);
1101
+ color: var(--viking-text);
1102
+ }
1103
+
1104
+ .viking-search-result-snippet {
1105
+ font-size: var(--viking-font-size-xs);
1106
+ color: var(--viking-text-muted);
1107
+ }
1108
+
1109
+ .viking-search-empty {
1110
+ padding: var(--viking-space-3);
1111
+ text-align: center;
1112
+ color: var(--viking-text-muted);
1113
+ font-size: var(--viking-font-size-sm);
1114
+ }
1115
+
1116
+ @keyframes viking-backdrop-in {
1117
+ from { opacity: 0; }
1118
+ to { opacity: 1; }
1119
+ }
1120
+
1121
+ @keyframes viking-modal-in {
1122
+ from {
1123
+ opacity: 0;
1124
+ transform: translateY(var(--viking-space-1)) scale(0.98);
1125
+ }
1126
+ to {
1127
+ opacity: 1;
1128
+ transform: translateY(0) scale(1);
1129
+ }
1130
+ }
1131
+
1132
+ @media (prefers-reduced-motion: reduce) {
1133
+ .viking-search-palette-backdrop,
1134
+ .viking-search-palette {
1135
+ animation: none;
1136
+ }
1137
+ }
1138
+ `;