@dataengineeringformachinelearning/viking-ui 4.0.4 → 4.0.5

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 (246) hide show
  1. package/README.md +35 -11
  2. package/dist/README.md +35 -11
  3. package/dist/design-tokens.css +300 -85
  4. package/dist/fesm2022/dataengineeringformachinelearning-viking-ui.mjs +100 -64
  5. package/dist/fesm2022/dataengineeringformachinelearning-viking-ui.mjs.map +1 -1
  6. package/dist/icons.js +306 -0
  7. package/dist/package.json +24 -5
  8. package/{src/lib/site-drakkar/site-drakkar.config.ts → dist/site-drakkar.js} +64 -130
  9. package/dist/src/tokens/viking-tokens.json +9 -7
  10. package/dist/types/dataengineeringformachinelearning-viking-ui.d.ts +97 -3
  11. package/dist/viking-components.css +161 -70
  12. package/dist/viking-tokens.json +9 -7
  13. package/dist/viking-ui-elements.js +44 -32
  14. package/dist/viking-ui.css +1 -1
  15. package/dist/web-components.js +44 -32
  16. package/package.json +30 -8
  17. package/dist/scripts/build-web-components.mjs +0 -37
  18. package/dist/src/web/badge/viking-badge-wc.ts +0 -116
  19. package/dist/src/web/button/viking-button-wc.ts +0 -165
  20. package/dist/src/web/callout/viking-callout-wc.ts +0 -105
  21. package/dist/src/web/card/viking-card-wc.ts +0 -67
  22. package/dist/src/web/core/base.ts +0 -56
  23. package/dist/src/web/core/dom.ts +0 -53
  24. package/dist/src/web/core/icons-inline.ts +0 -44
  25. package/dist/src/web/core/styles.ts +0 -1261
  26. package/dist/src/web/core/types.ts +0 -19
  27. package/dist/src/web/field/viking-field-wc.ts +0 -154
  28. package/dist/src/web/index.ts +0 -73
  29. package/dist/src/web/input/viking-input-wc.ts +0 -211
  30. package/dist/src/web/modal/viking-modal-wc.ts +0 -187
  31. package/dist/src/web/search-palette/viking-search-palette-wc.ts +0 -495
  32. package/dist/src/web/select/viking-select-wc.ts +0 -218
  33. package/dist/src/web/suite-header/viking-suite-header-wc.ts +0 -729
  34. package/dist/src/web/suite-search-palette/viking-suite-search-palette-wc.ts +0 -234
  35. package/dist/src/web/theme-toggle/viking-theme-toggle-wc.ts +0 -139
  36. package/dist/src/web/types.ts +0 -37
  37. package/dist/src/web/web-components.spec.ts +0 -297
  38. package/src/assets/drakkar-favicon.svg +0 -17
  39. package/src/assets/fonts/inter/InterVariable-Italic.woff2 +0 -0
  40. package/src/assets/fonts/inter/InterVariable.woff2 +0 -0
  41. package/src/core/brand/deml-lockup.svg +0 -5
  42. package/src/core/brand/deml-mark-compact.svg +0 -4
  43. package/src/core/brand/deml-mark-filled.svg +0 -3
  44. package/src/core/brand/deml-mark-outline.svg +0 -4
  45. package/src/core/brand-icons.ts +0 -62
  46. package/src/core/icons.spec.ts +0 -52
  47. package/src/core/icons.ts +0 -206
  48. package/src/core/integration-brand-icons.ts +0 -77
  49. package/src/core/lucide-paths.generated.ts +0 -130
  50. package/src/core/types.ts +0 -85
  51. package/src/core/uid.ts +0 -7
  52. package/src/elements/button/viking-button.ts +0 -201
  53. package/src/elements/card/viking-card.ts +0 -60
  54. package/src/elements/core/dom.ts +0 -33
  55. package/src/elements/core/styles.ts +0 -28
  56. package/src/elements/modal/viking-modal.ts +0 -154
  57. package/src/index.ts +0 -1
  58. package/src/lib/accordion/accordion.ts +0 -126
  59. package/src/lib/app-header/app-header.scss +0 -274
  60. package/src/lib/app-header/app-header.ts +0 -43
  61. package/src/lib/app-sidebar/app-sidebar.scss +0 -415
  62. package/src/lib/app-sidebar/app-sidebar.ts +0 -29
  63. package/src/lib/auth-panel/auth-panel.spec.ts +0 -132
  64. package/src/lib/auth-panel/auth-panel.ts +0 -228
  65. package/src/lib/autocomplete/autocomplete.ts +0 -223
  66. package/src/lib/avatar/avatar.ts +0 -126
  67. package/src/lib/badge/badge.ts +0 -182
  68. package/src/lib/bar/bar.ts +0 -31
  69. package/src/lib/brand/brand.ts +0 -60
  70. package/src/lib/breadcrumbs/breadcrumbs.ts +0 -81
  71. package/src/lib/button/button-group.ts +0 -40
  72. package/src/lib/button/button.scss +0 -119
  73. package/src/lib/button/button.ts +0 -98
  74. package/src/lib/calendar/calendar.ts +0 -253
  75. package/src/lib/callout/callout.ts +0 -211
  76. package/src/lib/card/card-title.spec.ts +0 -27
  77. package/src/lib/card/card-title.ts +0 -50
  78. package/src/lib/card/card.ts +0 -200
  79. package/src/lib/carousel/carousel.ts +0 -206
  80. package/src/lib/chart/chart-zoom.spec.ts +0 -65
  81. package/src/lib/chart/chart-zoom.ts +0 -71
  82. package/src/lib/chart/chart.ts +0 -1257
  83. package/src/lib/chart-card-header/chart-card-header.ts +0 -80
  84. package/src/lib/chart-empty-state/chart-empty-state.ts +0 -146
  85. package/src/lib/chart-panel/chart-panel.ts +0 -133
  86. package/src/lib/checkbox/checkbox.ts +0 -139
  87. package/src/lib/color-picker/color-picker.ts +0 -148
  88. package/src/lib/command/command.ts +0 -260
  89. package/src/lib/composer/composer.ts +0 -180
  90. package/src/lib/confirm-dialog/confirm-dialog.ts +0 -163
  91. package/src/lib/confirm-dialog/dialog.service.ts +0 -79
  92. package/src/lib/context/context.ts +0 -75
  93. package/src/lib/core/brand-icons.ts +0 -62
  94. package/src/lib/core/cva.ts +0 -33
  95. package/src/lib/core/icons.ts +0 -206
  96. package/src/lib/core/integration-brand-icons.ts +0 -77
  97. package/src/lib/core/lucide-paths.generated.ts +0 -130
  98. package/src/lib/date-picker/date-picker.ts +0 -139
  99. package/src/lib/dropdown/dropdown.ts +0 -188
  100. package/src/lib/editor/editor.ts +0 -170
  101. package/src/lib/empty-state/empty-state.ts +0 -100
  102. package/src/lib/fab/fab.ts +0 -76
  103. package/src/lib/field/field.ts +0 -111
  104. package/src/lib/file-upload/file-upload.ts +0 -208
  105. package/src/lib/footer/footer.scss +0 -162
  106. package/src/lib/footer/footer.ts +0 -28
  107. package/src/lib/form-section/form-section.ts +0 -200
  108. package/src/lib/forms.spec.ts +0 -92
  109. package/src/lib/gauge-arc/gauge-arc.ts +0 -85
  110. package/src/lib/hud-panel/hud-panel.ts +0 -27
  111. package/src/lib/icon/icon.ts +0 -284
  112. package/src/lib/icon-badge/icon-badge.ts +0 -87
  113. package/src/lib/icon-heading/icon-heading.spec.ts +0 -32
  114. package/src/lib/icon-heading/icon-heading.ts +0 -38
  115. package/src/lib/icon-text/icon-text.ts +0 -120
  116. package/src/lib/input/input.ts +0 -119
  117. package/src/lib/kanban/kanban.ts +0 -211
  118. package/src/lib/kbd/kbd.ts +0 -32
  119. package/src/lib/label/label.ts +0 -39
  120. package/src/lib/loading-overlay/loading-overlay.ts +0 -80
  121. package/src/lib/menubar/menubar.ts +0 -77
  122. package/src/lib/metric-card/metric-card.ts +0 -33
  123. package/src/lib/modal/modal.ts +0 -207
  124. package/src/lib/native-select/native-select.ts +0 -124
  125. package/src/lib/navbar/navbar.ts +0 -124
  126. package/src/lib/navigation-menu/navigation-menu.ts +0 -116
  127. package/src/lib/otp-input/otp-input.ts +0 -164
  128. package/src/lib/page-back-link/page-back-link.ts +0 -74
  129. package/src/lib/page-header/page-header.ts +0 -70
  130. package/src/lib/pagination/pagination.ts +0 -157
  131. package/src/lib/pillbox/pillbox.ts +0 -157
  132. package/src/lib/popover/popover.ts +0 -92
  133. package/src/lib/profile/profile.ts +0 -73
  134. package/src/lib/progress/progress.ts +0 -123
  135. package/src/lib/radio/radio.ts +0 -132
  136. package/src/lib/ring-gauge/ring-gauge.ts +0 -75
  137. package/src/lib/scroll-area/scroll-area.ts +0 -57
  138. package/src/lib/search-palette/search-palette.scss +0 -288
  139. package/src/lib/search-palette/search-palette.ts +0 -114
  140. package/src/lib/select/select.ts +0 -292
  141. package/src/lib/separator/separator.ts +0 -59
  142. package/src/lib/sheet/sheet.ts +0 -192
  143. package/src/lib/sidebar-nav/sidebar-nav.scss +0 -218
  144. package/src/lib/sidebar-nav/sidebar-nav.ts +0 -158
  145. package/src/lib/site-drakkar/site-footer.ts +0 -133
  146. package/src/lib/site-drakkar/site-navbar.scss +0 -2
  147. package/src/lib/site-drakkar/site-navbar.ts +0 -286
  148. package/src/lib/site-drakkar/suite-search-items.spec.ts +0 -61
  149. package/src/lib/site-drakkar/suite-search-items.ts +0 -246
  150. package/src/lib/skeleton/skeleton.ts +0 -51
  151. package/src/lib/slider/slider.ts +0 -133
  152. package/src/lib/spinner/spinner.ts +0 -75
  153. package/src/lib/status-metric-row/status-metric-row.ts +0 -74
  154. package/src/lib/suite-search-palette/suite-search-palette.ts +0 -95
  155. package/src/lib/switch/switch.ts +0 -131
  156. package/src/lib/table/table.ts +0 -137
  157. package/src/lib/tabs/tab-panel.ts +0 -61
  158. package/src/lib/tabs/tab.ts +0 -107
  159. package/src/lib/tabs/tabs.ts +0 -109
  160. package/src/lib/textarea/textarea.ts +0 -103
  161. package/src/lib/theme-toggle/theme-toggle.spec.ts +0 -40
  162. package/src/lib/theme-toggle/theme-toggle.ts +0 -40
  163. package/src/lib/time-picker/time-picker.ts +0 -197
  164. package/src/lib/timeline/timeline.ts +0 -152
  165. package/src/lib/toast/toast.ts +0 -196
  166. package/src/lib/toggle/toggle-group.ts +0 -60
  167. package/src/lib/toggle/toggle.ts +0 -101
  168. package/src/lib/tooltip/tooltip.ts +0 -119
  169. package/src/lib/typography/heading.ts +0 -52
  170. package/src/lib/typography/text.ts +0 -51
  171. package/src/lib/uptime-bar/uptime-bar.ts +0 -55
  172. package/src/lib/verification-code-field/verification-code-field.ts +0 -149
  173. package/src/lib/whitepaper-cta/whitepaper-cta.scss +0 -130
  174. package/src/lib/whitepaper-cta/whitepaper-cta.ts +0 -78
  175. package/src/lib/wizard/wizard.ts +0 -80
  176. package/src/public-api.ts +0 -172
  177. package/src/styles/_buttons.scss +0 -386
  178. package/src/styles/_component-primitives.scss +0 -183
  179. package/src/styles/_drakkar-buttons.scss +0 -85
  180. package/src/styles/_fonts.scss +0 -22
  181. package/src/styles/_forms.scss +0 -66
  182. package/src/styles/_input.scss +0 -106
  183. package/src/styles/_layout-enforcement.scss +0 -229
  184. package/src/styles/_layout-rhythm.scss +0 -158
  185. package/src/styles/_legacy-aliases.scss +0 -212
  186. package/src/styles/_series-colors.scss +0 -24
  187. package/src/styles/_static-primitives.scss +0 -857
  188. package/src/styles/_typography.scss +0 -87
  189. package/src/styles/_variables.scss +0 -527
  190. package/src/styles/components/a11y.scss +0 -90
  191. package/src/styles/components/badges.scss +0 -102
  192. package/src/styles/components/extracted-utilities.scss +0 -459
  193. package/src/styles/components/footer.scss +0 -168
  194. package/src/styles/components/icon-heading.scss +0 -47
  195. package/src/styles/components/icon-inline.scss +0 -101
  196. package/src/styles/components/layout.scss +0 -59
  197. package/src/styles/components/utilities.scss +0 -131
  198. package/src/styles/components/viking-inspired.scss +0 -204
  199. package/src/styles/components/whitepaper-cta.scss +0 -130
  200. package/src/styles/components-bundle.scss +0 -9
  201. package/src/styles/components.scss +0 -442
  202. package/src/styles/deml-components.scss +0 -10
  203. package/src/styles/index.scss +0 -8
  204. package/src/styles/layout-shell.scss +0 -111
  205. package/src/styles/page-shell.scss +0 -859
  206. package/src/styles/static-navbar.scss +0 -1250
  207. package/src/styles/surfaces/backend.scss +0 -154
  208. package/src/styles/surfaces/docs-global.scss +0 -73
  209. package/src/styles/surfaces/docs-shell.scss +0 -437
  210. package/src/styles/surfaces/docs-showcase.scss +0 -1153
  211. package/src/styles/surfaces/marketing-cta.scss +0 -62
  212. package/src/styles/surfaces/marketing-docs-bento.scss +0 -67
  213. package/src/styles/surfaces/marketing-global.scss +0 -748
  214. package/src/styles/surfaces/marketing-landing.scss +0 -1526
  215. package/src/styles/surfaces/marketing-publication.scss +0 -535
  216. package/src/styles/surfaces/marketing-theme.scss +0 -14
  217. package/src/styles/surfaces/swagger-ui.scss +0 -1013
  218. package/src/styles/tokens-export.scss +0 -18
  219. package/src/styles/tokens.scss +0 -5
  220. package/src/styles/viking-ui-bundle.scss +0 -23
  221. package/src/styles/viking-ui.scss +0 -272
  222. package/src/tokens/series-presets.ts +0 -15
  223. package/src/tokens/tailwind.preset.js +0 -209
  224. package/src/tokens/viking-tokens.json +0 -318
  225. package/src/viking-ui.spec.ts +0 -416
  226. package/src/web/badge/viking-badge-wc.ts +0 -116
  227. package/src/web/button/viking-button-wc.ts +0 -165
  228. package/src/web/callout/viking-callout-wc.ts +0 -105
  229. package/src/web/card/viking-card-wc.ts +0 -67
  230. package/src/web/core/base.ts +0 -56
  231. package/src/web/core/dom.ts +0 -53
  232. package/src/web/core/icons-inline.ts +0 -44
  233. package/src/web/core/styles.ts +0 -1261
  234. package/src/web/core/types.ts +0 -19
  235. package/src/web/field/viking-field-wc.ts +0 -154
  236. package/src/web/index.ts +0 -73
  237. package/src/web/input/viking-input-wc.ts +0 -211
  238. package/src/web/modal/viking-modal-wc.ts +0 -187
  239. package/src/web/search-palette/viking-search-palette-wc.ts +0 -495
  240. package/src/web/select/viking-select-wc.ts +0 -218
  241. package/src/web/suite-header/viking-suite-header-wc.ts +0 -729
  242. package/src/web/suite-search-palette/viking-suite-search-palette-wc.ts +0 -234
  243. package/src/web/theme-toggle/viking-theme-toggle-wc.ts +0 -139
  244. package/src/web/types.ts +0 -37
  245. package/src/web/web-components.spec.ts +0 -297
  246. package/src/web-components/index.ts +0 -1
@@ -364,6 +364,12 @@ var VIKING_BUTTON_STYLES = `
364
364
  }
365
365
 
366
366
  .viking-btn {
367
+ --viking-btn-depth-shadow: var(--viking-shadow-sm);
368
+ --viking-btn-hover-shadow: var(--viking-shadow-hover);
369
+ --viking-btn-press-shadow:
370
+ inset 0 1px 2px color-mix(in srgb, var(--viking-black) 28%, transparent),
371
+ var(--viking-shadow-xs);
372
+
367
373
  font-family: inherit;
368
374
  font-size: var(--viking-font-size-ui, var(--viking-font-size-sm));
369
375
  font-weight: var(--viking-font-weight-semibold);
@@ -372,10 +378,10 @@ var VIKING_BUTTON_STYLES = `
372
378
  display: inline-flex;
373
379
  align-items: center;
374
380
  justify-content: center;
375
- gap: var(--viking-space-1);
381
+ gap: var(--viking-space-1-5);
376
382
  min-height: var(--viking-control-height);
377
- padding: 0 var(--viking-control-padding-x);
378
- border-radius: var(--viking-radius-lg);
383
+ padding: var(--viking-space-half) var(--viking-control-padding-x);
384
+ border-radius: var(--viking-radius-md);
379
385
  border: 1px solid transparent;
380
386
  cursor: pointer;
381
387
  text-decoration: none;
@@ -390,7 +396,7 @@ var VIKING_BUTTON_STYLES = `
390
396
  -webkit-tap-highlight-color: transparent;
391
397
  box-sizing: border-box;
392
398
  overflow: hidden;
393
- box-shadow: var(--viking-shadow-sm);
399
+ box-shadow: var(--viking-btn-depth-shadow);
394
400
  }
395
401
 
396
402
  .viking-btn::before {
@@ -405,7 +411,7 @@ var VIKING_BUTTON_STYLES = `
405
411
  transparent
406
412
  );
407
413
  pointer-events: none;
408
- opacity: 0.82;
414
+ opacity: 0.88;
409
415
  transition: var(--viking-transition-interactive);
410
416
  }
411
417
 
@@ -423,9 +429,13 @@ var VIKING_BUTTON_STYLES = `
423
429
  box-shadow: none !important;
424
430
  }
425
431
 
432
+ .viking-btn[aria-busy='true'] {
433
+ cursor: wait;
434
+ }
435
+
426
436
  .viking-btn[aria-busy='true']::before,
427
437
  .viking-btn[aria-busy='true'] .viking-btn-label {
428
- opacity: 0.85;
438
+ opacity: 0.78;
429
439
  transform: translateY(1px);
430
440
  }
431
441
 
@@ -529,27 +539,26 @@ var VIKING_BUTTON_STYLES = `
529
539
  flex-shrink: 0;
530
540
  pointer-events: none;
531
541
  flex: 0 0 auto;
542
+ margin-block: calc(var(--viking-space-half) * -1);
532
543
  }
533
544
 
534
545
  .viking-btn-outline {
535
546
  background: var(--viking-surface);
536
547
  color: var(--viking-text);
537
548
  border-color: var(--viking-border-strong);
538
- box-shadow: var(--viking-shadow-sm);
549
+ box-shadow: var(--viking-btn-depth-shadow);
539
550
  }
540
551
 
541
552
  .viking-btn-outline:hover:not(:disabled):not([aria-busy='true']) {
542
- background: var(--viking-surface-alt);
553
+ background: color-mix(in srgb, var(--viking-accent) 5%, var(--viking-surface-alt));
543
554
  border-color: color-mix(in srgb, var(--viking-accent) 45%, var(--viking-border-strong));
544
- box-shadow: var(--viking-shadow-md);
555
+ box-shadow: var(--viking-btn-hover-shadow);
545
556
  transform: translateY(var(--viking-state-hover-lift));
546
557
  }
547
558
 
548
559
  .viking-btn-outline:active:not(:disabled):not([aria-busy='true']) {
549
560
  transform: translateY(0) scale(var(--viking-state-active-scale));
550
- box-shadow: inset 0 1px 2px
551
- color-mix(in srgb, var(--viking-black) 28%, transparent),
552
- var(--viking-shadow-sm);
561
+ box-shadow: var(--viking-btn-press-shadow);
553
562
  border-color: var(--viking-border-strong);
554
563
  }
555
564
 
@@ -557,21 +566,21 @@ var VIKING_BUTTON_STYLES = `
557
566
  background: var(--viking-accent);
558
567
  color: var(--viking-accent-content);
559
568
  border-color: color-mix(in srgb, var(--viking-accent) 82%, var(--viking-black));
560
- box-shadow: var(--viking-shadow-sm);
569
+ box-shadow:
570
+ var(--viking-btn-depth-shadow),
571
+ inset 0 1px 0 color-mix(in srgb, var(--viking-white-pure) 12%, transparent);
561
572
  }
562
573
 
563
574
  .viking-btn-primary:hover:not(:disabled):not([aria-busy='true']) {
564
575
  background: var(--viking-accent-hover);
565
576
  border-color: var(--viking-accent-hover);
566
- box-shadow: var(--viking-shadow-hover);
577
+ box-shadow: var(--viking-btn-hover-shadow);
567
578
  transform: translateY(var(--viking-state-hover-lift));
568
579
  }
569
580
 
570
581
  .viking-btn-primary:active:not(:disabled):not([aria-busy='true']) {
571
582
  transform: translateY(0) scale(var(--viking-state-active-scale));
572
- box-shadow: inset 0 1px 2px
573
- color-mix(in srgb, var(--viking-black) 28%, transparent),
574
- var(--viking-shadow-sm);
583
+ box-shadow: var(--viking-btn-press-shadow);
575
584
  border-color: color-mix(in srgb, var(--viking-accent) 82%, var(--viking-black));
576
585
  }
577
586
 
@@ -579,21 +588,21 @@ var VIKING_BUTTON_STYLES = `
579
588
  background: var(--viking-accent-secondary);
580
589
  color: var(--viking-accent-secondary-content);
581
590
  border-color: color-mix(in srgb, var(--viking-accent-secondary) 82%, var(--viking-black));
582
- box-shadow: var(--viking-shadow-sm);
591
+ box-shadow:
592
+ var(--viking-btn-depth-shadow),
593
+ inset 0 1px 0 color-mix(in srgb, var(--viking-white-pure) 10%, transparent);
583
594
  }
584
595
 
585
596
  .viking-btn-secondary:hover:not(:disabled):not([aria-busy='true']) {
586
597
  background: var(--viking-accent-secondary-hover);
587
598
  border-color: var(--viking-accent-secondary-hover);
588
- box-shadow: var(--viking-shadow-hover);
599
+ box-shadow: var(--viking-btn-hover-shadow);
589
600
  transform: translateY(var(--viking-state-hover-lift));
590
601
  }
591
602
 
592
603
  .viking-btn-secondary:active:not(:disabled):not([aria-busy='true']) {
593
604
  transform: translateY(0) scale(var(--viking-state-active-scale));
594
- box-shadow: inset 0 1px 2px
595
- color-mix(in srgb, var(--viking-black) 28%, transparent),
596
- var(--viking-shadow-sm);
605
+ box-shadow: var(--viking-btn-press-shadow);
597
606
  border-color: color-mix(in srgb, var(--viking-accent-secondary) 82%, var(--viking-black));
598
607
  }
599
608
 
@@ -607,13 +616,13 @@ var VIKING_BUTTON_STYLES = `
607
616
  .viking-btn-filled:hover:not(:disabled):not([aria-busy='true']) {
608
617
  border-color: color-mix(in srgb, var(--viking-accent) 45%, var(--viking-border));
609
618
  background: color-mix(in srgb, var(--viking-accent) 8%, var(--viking-surface-alt));
610
- box-shadow: var(--viking-shadow-sm);
619
+ box-shadow: var(--viking-btn-depth-shadow);
611
620
  transform: translateY(var(--viking-state-hover-lift));
612
621
  }
613
622
 
614
623
  .viking-btn-filled:active:not(:disabled):not([aria-busy='true']) {
615
624
  transform: translateY(0) scale(var(--viking-state-active-scale));
616
- box-shadow: var(--viking-shadow-sm);
625
+ box-shadow: var(--viking-btn-press-shadow);
617
626
  border-color: color-mix(in srgb, var(--viking-accent) 20%, var(--viking-border));
618
627
  background: color-mix(in srgb, var(--viking-surface-alt) 84%, var(--viking-accent));
619
628
  }
@@ -622,13 +631,15 @@ var VIKING_BUTTON_STYLES = `
622
631
  background: var(--viking-danger);
623
632
  color: var(--viking-on-danger);
624
633
  border-color: color-mix(in srgb, var(--viking-danger) 85%, var(--viking-black));
625
- box-shadow: var(--viking-shadow-sm);
634
+ box-shadow:
635
+ var(--viking-btn-depth-shadow),
636
+ inset 0 1px 0 color-mix(in srgb, var(--viking-white-pure) 10%, transparent);
626
637
  }
627
638
 
628
639
  .viking-btn-danger:hover:not(:disabled):not([aria-busy='true']) {
629
640
  background: color-mix(in srgb, var(--viking-danger) 88%, var(--viking-white));
630
641
  border-color: color-mix(in srgb, var(--viking-danger) 92%, var(--viking-white));
631
- box-shadow: var(--viking-shadow-hover);
642
+ box-shadow: var(--viking-btn-hover-shadow);
632
643
  transform: translateY(var(--viking-state-hover-lift));
633
644
  }
634
645
 
@@ -636,9 +647,7 @@ var VIKING_BUTTON_STYLES = `
636
647
  transform: translateY(0) scale(var(--viking-state-active-scale));
637
648
  border-color: color-mix(in srgb, var(--viking-danger) 72%, var(--viking-black));
638
649
  background: color-mix(in srgb, var(--viking-danger) 84%, var(--viking-black));
639
- box-shadow: inset 0 1px 2px
640
- color-mix(in srgb, var(--viking-black) 28%, transparent),
641
- var(--viking-shadow-sm);
650
+ box-shadow: var(--viking-btn-press-shadow);
642
651
  }
643
652
 
644
653
  .viking-btn-ghost {
@@ -652,6 +661,8 @@ var VIKING_BUTTON_STYLES = `
652
661
  .viking-btn-ghost:hover:not(:disabled):not([aria-busy='true']) {
653
662
  background: var(--viking-accent-soft);
654
663
  color: var(--viking-accent-strong);
664
+ border-color: var(--viking-border-subtle);
665
+ transform: translateY(var(--viking-state-hover-lift));
655
666
  }
656
667
 
657
668
  .viking-btn-ghost:active:not(:disabled):not([aria-busy='true']) {
@@ -697,11 +708,12 @@ var VIKING_BUTTON_STYLES = `
697
708
  }
698
709
 
699
710
  .viking-btn-spinner {
700
- width: 1.125rem;
701
- height: 1.125rem;
711
+ flex: 0 0 auto;
712
+ width: var(--viking-icon-size-sm, 18px);
713
+ height: var(--viking-icon-size-sm, 18px);
702
714
  border: 2px solid currentColor;
703
715
  border-right-color: transparent;
704
- border-radius: 50%;
716
+ border-radius: var(--viking-radius-pill);
705
717
  animation: viking-spin 0.8s linear infinite;
706
718
  }
707
719
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dataengineeringformachinelearning/viking-ui",
3
- "version": "4.0.4",
3
+ "version": "4.0.5",
4
4
  "description": "Universal Viking-UI design system for Astro, Angular, and Django.",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",
@@ -31,10 +31,22 @@
31
31
  },
32
32
  "./dist/index.js": "./dist/fesm2022/dataengineeringformachinelearning-viking-ui.mjs",
33
33
  "./dist/index.d.ts": "./dist/types/dataengineeringformachinelearning-viking-ui.d.ts",
34
+ "./dist/icons.js": "./dist/icons.js",
35
+ "./dist/site-drakkar.js": "./dist/site-drakkar.js",
34
36
  "./dist/viking-ui.css": "./dist/viking-ui.css",
35
37
  "./dist/viking-ui-elements.js": "./dist/viking-ui-elements.js",
36
38
  "./dist/web-components.js": "./dist/web-components.js",
37
39
  "./dist/widget.js": "./dist/widget.js",
40
+ "./icons": {
41
+ "types": "./dist/types/dataengineeringformachinelearning-viking-ui.d.ts",
42
+ "import": "./dist/icons.js",
43
+ "default": "./dist/icons.js"
44
+ },
45
+ "./site-drakkar": {
46
+ "types": "./dist/types/dataengineeringformachinelearning-viking-ui.d.ts",
47
+ "import": "./dist/site-drakkar.js",
48
+ "default": "./dist/site-drakkar.js"
49
+ },
38
50
  "./elements": {
39
51
  "types": "./dist/types/dataengineeringformachinelearning-viking-ui.d.ts",
40
52
  "import": "./dist/web-components.js",
@@ -48,6 +60,8 @@
48
60
  "import": "./dist/web-components.js",
49
61
  "default": "./dist/web-components.js"
50
62
  },
63
+ "./widget": "./dist/widget.js",
64
+ "./widget.js": "./dist/widget.js",
51
65
  "./css": "./dist/viking-ui.css",
52
66
  "./css/index.css": "./dist/viking-ui.css",
53
67
  "./css/viking-ui.css": "./dist/viking-ui.css",
@@ -61,6 +75,10 @@
61
75
  "./tokens": "./dist/viking-tokens.json",
62
76
  "./tokens.json": "./dist/viking-tokens.json",
63
77
  "./viking-tokens.json": "./dist/viking-tokens.json",
78
+ "./tokens/tailwind.preset": "./dist/src/tokens/tailwind.preset.js",
79
+ "./tokens/tailwind.preset.js": "./dist/src/tokens/tailwind.preset.js",
80
+ "./manifest": "./dist/viking.manifest.json",
81
+ "./viking.manifest.json": "./dist/viking.manifest.json",
64
82
  "./components.css": "./dist/viking-components.css",
65
83
  "./deml-components.css": "./dist/deml-components.css",
66
84
  "./viking-ui.css": "./dist/viking-ui.css",
@@ -68,8 +86,8 @@
68
86
  },
69
87
  "files": [
70
88
  "dist",
71
- "src",
72
- "README.md"
89
+ "README.md",
90
+ "LICENSE"
73
91
  ],
74
92
  "scripts": {
75
93
  "clean": "rm -rf dist",
@@ -80,7 +98,7 @@
80
98
  "build:compat": "node scripts/write-compat-entry.mjs",
81
99
  "storybook": "npm run build:css && storybook dev --config-dir .storybook --port 6006",
82
100
  "build-storybook": "npm run build:css && storybook build --config-dir .storybook --output-dir ./storybook-static",
83
- "chromatic": "npm run build-storybook && chromatic --project-token=${CHROMATIC_PROJECT_TOKEN} --exit-zero-on-changes",
101
+ "chromatic": "npm run build-storybook && chromatic --project-token=${CHROMATIC_PROJECT_TOKEN} --storybook-build-dir ./storybook-static --exit-zero-on-changes",
84
102
  "validate": "node ../../scripts/validate_viking_ui_assets.mjs",
85
103
  "test": "node --test test/*.test.mjs",
86
104
  "pack:check": "npm pack --dry-run",
@@ -93,11 +111,12 @@
93
111
  },
94
112
  "sideEffects": [
95
113
  "./dist/viking-ui-elements.js",
114
+ "./dist/web-components.js",
115
+ "./dist/widget.js",
96
116
  "./dist/viking-ui.css",
97
117
  "./dist/design-tokens.css",
98
118
  "./dist/viking-components.css",
99
- "./dist/deml-components.css",
100
- "./src/index.ts"
119
+ "./dist/deml-components.css"
101
120
  ],
102
121
  "devDependencies": {
103
122
  "@angular/common": "^22.0.0",
@@ -105,13 +124,16 @@
105
124
  "@angular/compiler-cli": "^22.0.0",
106
125
  "@angular/core": "^22.0.0",
107
126
  "@angular/forms": "^22.0.0",
108
- "@chromatic-com/storybook": "^3.2.7",
109
127
  "@storybook/addon-a11y": "^8.6.12",
110
128
  "@storybook/addon-essentials": "^8.6.12",
129
+ "@storybook/builder-vite": "^8.6.18",
111
130
  "@storybook/html": "^8.6.12",
131
+ "@storybook/html-vite": "^8.6.18",
112
132
  "esbuild": "^0.28.1",
113
133
  "ng-packagr": "^22.0.0",
114
134
  "sass": "^1.101.0",
115
- "typescript": "~6.0.3"
135
+ "storybook": "^8.6.18",
136
+ "typescript": "~6.0.3",
137
+ "vite": "^6.4.1"
116
138
  }
117
139
  }
@@ -1,37 +0,0 @@
1
- /**
2
- * Bundles Viking-UI Web Components for framework-agnostic usage.
3
- * Output: viking-ui-elements.js (IIFE, auto-registers custom elements)
4
- */
5
- import { execSync } from "node:child_process";
6
- import fs from "node:fs";
7
- import path from "node:path";
8
- import { fileURLToPath } from "node:url";
9
-
10
- const dirname = path.dirname(fileURLToPath(import.meta.url));
11
- const pkgDir = path.join(dirname, "..");
12
- const rootDir = path.join(pkgDir, "..", "..");
13
- const docsDir = path.join(rootDir, "viking-ui-docs");
14
- const outDir = path.join(docsDir, "dist", "static-css");
15
- const entry = path.join(pkgDir, "src", "web", "index.ts");
16
- const outFile = path.join(outDir, "viking-ui-elements.js");
17
-
18
- const esbuildCandidates = [
19
- path.join(rootDir, "frontend", "node_modules", ".bin", "esbuild"),
20
- path.join(docsDir, "node_modules", ".bin", "esbuild"),
21
- ];
22
- const esbuildBin =
23
- esbuildCandidates.find((candidate) => fs.existsSync(candidate)) ?? "esbuild";
24
-
25
- fs.mkdirSync(outDir, { recursive: true });
26
-
27
- execSync(
28
- `"${esbuildBin}" "${entry}" --bundle --format=iife --global-name=VikingUI --outfile="${outFile}" --target=es2022 --minify`,
29
- { cwd: pkgDir, stdio: "inherit" },
30
- );
31
-
32
- console.log(`Wrote ${outFile}`);
33
-
34
- // Mirror to docs public assets
35
- const publicAssetsDir = path.join(docsDir, "public", "assets");
36
- fs.mkdirSync(publicAssetsDir, { recursive: true });
37
- fs.copyFileSync(outFile, path.join(publicAssetsDir, "viking-ui-elements.js"));
@@ -1,116 +0,0 @@
1
- import { attachShadowStyles } from "../core/base";
2
- import {
3
- defineCustomElement,
4
- defineCustomElementAlias,
5
- HTMLElementBase,
6
- } from "../core/dom";
7
- import { renderInlineIcon, TONE_ICON_NAMES } from "../core/icons-inline";
8
- import { VIKING_BADGE_STYLES } from "../core/styles";
9
- import type { VikingWcTone } from "../core/types";
10
-
11
- const TONES = new Set<VikingWcTone>([
12
- "accent",
13
- "secondary",
14
- "success",
15
- "warning",
16
- "danger",
17
- "info",
18
- "muted",
19
- "subtle",
20
- ]);
21
-
22
- /**
23
- * Framework-agnostic Viking badge Web Component.
24
- * Tag: `viking-badge` (legacy alias: `viking-badge-wc`)
25
- *
26
- * @attr tone - Semantic color: accent | secondary | success | warning | danger | info | muted
27
- * @attr size - Compact density: sm
28
- * @attr icon - Viking icon registry name (pairs with label for a11y)
29
- * @attr removable - Shows remove control; dispatches `viking-removed`
30
- *
31
- * @example
32
- * <viking-badge-wc tone="success" icon="check">Healthy</viking-badge-wc>
33
- */
34
- export class VikingBadgeWc extends HTMLElementBase {
35
- static readonly tag = "viking-badge";
36
- static readonly legacyTag = "viking-badge-wc";
37
-
38
- static get observedAttributes(): string[] {
39
- return ["tone", "size", "icon", "removable"];
40
- }
41
-
42
- private readonly shadow: ShadowRoot;
43
-
44
- constructor() {
45
- super();
46
- this.shadow = this.attachShadow({ mode: "open" });
47
- attachShadowStyles(this.shadow, VIKING_BADGE_STYLES);
48
- }
49
-
50
- connectedCallback(): void {
51
- this.render();
52
- }
53
-
54
- attributeChangedCallback(): void {
55
- if (this.isConnected) {
56
- this.render();
57
- }
58
- }
59
-
60
- private get tone(): VikingWcTone | null {
61
- const value = (this.getAttribute("tone") ?? "") as VikingWcTone;
62
- return TONES.has(value) ? value : null;
63
- }
64
-
65
- private get size(): "sm" | null {
66
- return this.getAttribute("size") === "sm" ? "sm" : null;
67
- }
68
-
69
- private get removable(): boolean {
70
- return (
71
- this.hasAttribute("removable") &&
72
- this.getAttribute("removable") !== "false"
73
- );
74
- }
75
-
76
- private readonly onRemove = (): void => {
77
- this.dispatchEvent(
78
- new CustomEvent("viking-removed", { bubbles: true, composed: true }),
79
- );
80
- };
81
-
82
- private render(): void {
83
- const tone = this.tone;
84
- if (tone && this.getAttribute("tone") !== tone) {
85
- this.setAttribute("tone", tone);
86
- } else if (!tone && this.hasAttribute("tone")) {
87
- this.removeAttribute("tone");
88
- }
89
-
90
- const size = this.size;
91
- if (size && this.getAttribute("size") !== size) {
92
- this.setAttribute("size", size);
93
- } else if (!size && this.hasAttribute("size")) {
94
- this.removeAttribute("size");
95
- }
96
-
97
- const iconName =
98
- this.getAttribute("icon") ?? (tone ? TONE_ICON_NAMES[tone] : null);
99
- const iconMarkup = iconName ? renderInlineIcon(iconName, 16) : "";
100
-
101
- this.shadow.innerHTML = `
102
- ${iconMarkup}
103
- <span part="label"><slot></slot></span>
104
- ${this.removable ? `<button type="button" class="viking-badge-remove" part="remove" aria-label="Remove">${renderInlineIcon("x", 14)}</button>` : ""}
105
- `;
106
-
107
- this.shadow
108
- .querySelector(".viking-badge-remove")
109
- ?.addEventListener("click", this.onRemove);
110
- }
111
- }
112
-
113
- export const registerVikingBadgeWc = (): void => {
114
- defineCustomElement(VikingBadgeWc.tag, VikingBadgeWc);
115
- defineCustomElementAlias(VikingBadgeWc.legacyTag, VikingBadgeWc);
116
- };
@@ -1,165 +0,0 @@
1
- import { attachShadowStyles, readBoolAttr } from "../core/base";
2
- import {
3
- defineCustomElement,
4
- defineCustomElementAlias,
5
- escapeHtml,
6
- HTMLElementBase,
7
- } from "../core/dom";
8
- import { VIKING_BUTTON_STYLES } from "../core/styles";
9
-
10
- const VARIANTS = new Set([
11
- "outline",
12
- "primary",
13
- "secondary",
14
- "filled",
15
- "danger",
16
- "ghost",
17
- "subtle",
18
- ]);
19
-
20
- const SIZES = new Set(["sm", "xs"]);
21
-
22
- /**
23
- * Framework-agnostic Viking button Web Component.
24
- * Tag: `viking-button` (legacy alias: `viking-button-wc`)
25
- *
26
- * @example
27
- * <viking-button variant="primary">Launch</viking-button>
28
- */
29
- export class VikingButtonWc extends HTMLElementBase {
30
- static readonly tag = "viking-button";
31
- static readonly legacyTag = "viking-button-wc";
32
-
33
- static get observedAttributes(): string[] {
34
- return [
35
- "variant",
36
- "size",
37
- "type",
38
- "disabled",
39
- "loading",
40
- "href",
41
- "target",
42
- "aria-label",
43
- "aria-busy",
44
- "square",
45
- "full-width",
46
- "compact",
47
- ];
48
- }
49
-
50
- private readonly shadow: ShadowRoot;
51
- private control: HTMLButtonElement | HTMLAnchorElement | null = null;
52
-
53
- constructor() {
54
- super();
55
- this.shadow = this.attachShadow({ mode: "open" });
56
- attachShadowStyles(this.shadow, VIKING_BUTTON_STYLES);
57
- }
58
-
59
- connectedCallback(): void {
60
- this.render();
61
- this.syncHostSemantics();
62
- this.control?.addEventListener("click", this.onClick);
63
- }
64
-
65
- disconnectedCallback(): void {
66
- this.control?.removeEventListener("click", this.onClick);
67
- }
68
-
69
- attributeChangedCallback(): void {
70
- if (this.isConnected) {
71
- this.render();
72
- this.syncHostSemantics();
73
- }
74
- }
75
-
76
- private readonly onClick = (event: Event): void => {
77
- if (this.disabled || this.loading) {
78
- event.preventDefault();
79
- event.stopPropagation();
80
- return;
81
- }
82
- this.dispatchEvent(
83
- new CustomEvent("viking-press", {
84
- bubbles: true,
85
- composed: true,
86
- detail: event,
87
- }),
88
- );
89
- };
90
-
91
- private get variant(): string {
92
- const value = this.getAttribute("variant") ?? "outline";
93
- return VARIANTS.has(value) ? value : "outline";
94
- }
95
-
96
- private get size(): string | null {
97
- const value = this.getAttribute("size");
98
- return value && SIZES.has(value) ? value : null;
99
- }
100
-
101
- private get disabled(): boolean {
102
- return readBoolAttr(this, "disabled");
103
- }
104
-
105
- private get loading(): boolean {
106
- return readBoolAttr(this, "loading");
107
- }
108
-
109
- private get square(): boolean {
110
- return readBoolAttr(this, "square");
111
- }
112
-
113
- private syncHostSemantics(): void {
114
- if (!this.hasAttribute("role")) {
115
- this.setAttribute("role", this.getAttribute("href") ? "link" : "button");
116
- }
117
- }
118
-
119
- private render(): void {
120
- const href = this.getAttribute("href");
121
- const isLink = Boolean(href);
122
- const tag = isLink ? "a" : "button";
123
-
124
- const classes = [
125
- "viking-btn",
126
- `viking-btn-${this.variant}`,
127
- this.size ? `viking-btn-${this.size}` : "",
128
- this.square ? "viking-btn-square" : "",
129
- ]
130
- .filter(Boolean)
131
- .join(" ");
132
-
133
- const label = this.getAttribute("aria-label") ?? "";
134
- const busy =
135
- this.getAttribute("aria-busy") === "true" || this.loading ? "true" : null;
136
- const type = escapeHtml(this.getAttribute("type") ?? "button");
137
- const hrefValue = href ? escapeHtml(href) : "";
138
- const target = this.getAttribute("target");
139
- const safeTarget = target ? escapeHtml(target) : "";
140
-
141
- this.shadow.innerHTML = `
142
- <${tag}
143
- class="${classes}"
144
- part="control"
145
- ${isLink ? `href="${hrefValue}"` : `type="${type}"`}
146
- ${isLink && safeTarget ? `target="${safeTarget}"` : ""}
147
- ${isLink && target === "_blank" ? 'rel="noopener noreferrer"' : ""}
148
- ${this.disabled || this.loading ? "disabled" : ""}
149
- ${label ? `aria-label="${escapeHtml(label)}"` : ""}
150
- ${busy ? `aria-busy="${busy}"` : ""}
151
- ${this.disabled && isLink ? 'aria-disabled="true" tabindex="-1"' : ""}
152
- >
153
- ${this.loading ? '<span class="viking-btn-spinner" aria-hidden="true"></span>' : ""}
154
- <span class="viking-btn-label" part="label"><slot></slot></span>
155
- </${tag}>
156
- `;
157
-
158
- this.control = this.shadow.querySelector(tag);
159
- }
160
- }
161
-
162
- export const registerVikingButtonWc = (): void => {
163
- defineCustomElement(VikingButtonWc.tag, VikingButtonWc);
164
- defineCustomElementAlias(VikingButtonWc.legacyTag, VikingButtonWc);
165
- };