@vonage/vivid 4.9.0 → 4.11.0

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 (103) hide show
  1. package/custom-elements.json +2792 -83
  2. package/lib/badge/badge.d.ts +1 -1
  3. package/lib/breadcrumb-item/breadcrumb-item.d.ts +1 -1
  4. package/lib/button/button.d.ts +1 -1
  5. package/lib/checkbox/checkbox.d.ts +8 -2
  6. package/lib/checkbox/checkbox.form-associated.d.ts +10 -0
  7. package/lib/dialog/dialog.d.ts +4 -0
  8. package/lib/divider/divider.d.ts +11 -2
  9. package/lib/enums.d.ts +1 -0
  10. package/lib/fab/fab.d.ts +1 -1
  11. package/lib/file-picker/file-picker.d.ts +3 -0
  12. package/lib/icon/icon.d.ts +2 -1
  13. package/lib/slider/slider.d.ts +30 -6
  14. package/lib/slider/slider.form-associated.d.ts +10 -0
  15. package/lib/split-button/split-button.d.ts +1 -1
  16. package/lib/tabs/tabs.d.ts +1 -0
  17. package/lib/text-field/text-field.d.ts +1 -0
  18. package/package.json +1 -1
  19. package/shared/aria-global2.cjs +93 -0
  20. package/shared/aria-global2.js +91 -0
  21. package/shared/breadcrumb-item.cjs +2 -89
  22. package/shared/breadcrumb-item.js +1 -88
  23. package/shared/definition11.cjs +201 -5
  24. package/shared/definition11.js +199 -4
  25. package/shared/definition15.cjs +49 -90
  26. package/shared/definition15.js +50 -91
  27. package/shared/definition16.cjs +9 -7
  28. package/shared/definition16.js +9 -7
  29. package/shared/definition20.cjs +16 -11
  30. package/shared/definition20.js +16 -11
  31. package/shared/definition21.cjs +34 -4
  32. package/shared/definition21.js +34 -4
  33. package/shared/definition22.cjs +32 -51
  34. package/shared/definition22.js +33 -52
  35. package/shared/definition24.cjs +156 -2
  36. package/shared/definition24.js +157 -3
  37. package/shared/definition25.cjs +106 -56
  38. package/shared/definition25.js +106 -56
  39. package/shared/definition29.cjs +1 -1
  40. package/shared/definition29.js +1 -1
  41. package/shared/definition30.cjs +1 -1
  42. package/shared/definition30.js +1 -1
  43. package/shared/definition35.cjs +2 -2
  44. package/shared/definition35.js +2 -2
  45. package/shared/definition37.cjs +1 -1
  46. package/shared/definition37.js +1 -1
  47. package/shared/definition4.cjs +5 -6
  48. package/shared/definition4.js +1 -2
  49. package/shared/definition40.cjs +11 -4
  50. package/shared/definition40.js +8 -1
  51. package/shared/definition42.cjs +3 -22
  52. package/shared/definition42.js +2 -21
  53. package/shared/definition43.cjs +1 -2
  54. package/shared/definition43.js +1 -2
  55. package/shared/definition44.js +1 -1
  56. package/shared/definition47.cjs +369 -502
  57. package/shared/definition47.js +370 -503
  58. package/shared/definition5.cjs +5 -5
  59. package/shared/definition5.js +2 -2
  60. package/shared/definition51.cjs +1 -1
  61. package/shared/definition51.js +1 -1
  62. package/shared/definition52.cjs +63 -26
  63. package/shared/definition52.js +63 -26
  64. package/shared/definition56.cjs +45 -43
  65. package/shared/definition56.js +45 -43
  66. package/shared/definition57.cjs +1 -1
  67. package/shared/definition57.js +1 -1
  68. package/shared/definition64.cjs +242 -79
  69. package/shared/definition64.js +242 -79
  70. package/shared/definition7.cjs +1 -1
  71. package/shared/definition7.js +1 -1
  72. package/shared/definition8.cjs +1 -1
  73. package/shared/definition8.js +1 -1
  74. package/shared/enums.cjs +1 -0
  75. package/shared/enums.js +1 -0
  76. package/shared/form-associated.js +1 -1
  77. package/shared/{patterns → foundation/anchor}/anchor.d.ts +1 -1
  78. package/shared/foundation/button/button.d.ts +27 -0
  79. package/shared/foundation/button/button.template.d.ts +4 -0
  80. package/shared/foundation/button/index.d.ts +2 -0
  81. package/shared/foundation/patterns/index.d.ts +1 -0
  82. package/shared/icon.cjs +11 -5
  83. package/shared/icon.js +11 -5
  84. package/shared/index.cjs +22 -2
  85. package/shared/index.js +22 -2
  86. package/shared/key-codes2.js +1 -1
  87. package/shared/patterns/form-elements/form-elements.d.ts +6 -6
  88. package/shared/presentationDate.cjs +4328 -4042
  89. package/shared/presentationDate.js +4327 -4041
  90. package/shared/slider.template.cjs +23 -1
  91. package/shared/slider.template.js +21 -2
  92. package/styles/core/all.css +1 -1
  93. package/styles/core/theme.css +1 -1
  94. package/styles/core/typography.css +1 -1
  95. package/styles/tokens/theme-dark.css +35 -14
  96. package/styles/tokens/theme-light.css +35 -14
  97. package/styles/tokens/vivid-2-compat.css +1 -1
  98. package/vivid.api.json +62 -5
  99. package/shared/aria2.cjs +0 -11
  100. package/shared/aria2.js +0 -9
  101. package/shared/button.cjs +0 -202
  102. package/shared/button.js +0 -200
  103. /package/shared/{patterns → foundation/patterns}/aria-global.d.ts +0 -0
@@ -238,7 +238,7 @@ const isMenuItemChekced = (playbackRate, { parent }) => {
238
238
  return playbackRate === parent.playbackRate;
239
239
  };
240
240
  function renderButton(context) {
241
- const buttonTag = context.tagFor(definition$1.Button);
241
+ const buttonTag = context.tagFor(definition$1.Button$1);
242
242
  return index.html`<${buttonTag} class="pause" @click="${(x) => x.paused ? x.play() : x.pause()}"
243
243
  icon="${(x) => x.paused ? "play-solid" : "pause-solid"}"
244
244
  aria-label="${(x) => x.paused ? x.playButtonAriaLabel || x.locale.audioPlayer.playButtonLabel : x.pauseButtonAriaLabel || x.locale.audioPlayer.pauseButtonLabel}"
@@ -248,7 +248,7 @@ function renderButton(context) {
248
248
  ></${buttonTag}>`;
249
249
  }
250
250
  function renderBackwardSkipButtons(context) {
251
- const buttonTag = context.tagFor(definition$1.Button);
251
+ const buttonTag = context.tagFor(definition$1.Button$1);
252
252
  return index.html`
253
253
  <${buttonTag} class="skip backward"
254
254
  @click="${(element) => skip(element, SKIP_DIRECTIONS.BACKWARD)}"
@@ -261,7 +261,7 @@ function renderBackwardSkipButtons(context) {
261
261
  `;
262
262
  }
263
263
  function renderForwardSkipButtons(context) {
264
- const buttonTag = context.tagFor(definition$1.Button);
264
+ const buttonTag = context.tagFor(definition$1.Button$1);
265
265
  return index.html`
266
266
  <${buttonTag} class="skip forward"
267
267
  @click="${(element) => skip(element, SKIP_DIRECTIONS.FORWARD)}"
@@ -299,7 +299,7 @@ function handlePlaybackRateClick(playbackRate, context) {
299
299
  }
300
300
  const AudioPlayerTemplate = (context) => {
301
301
  const menuTag = context.tagFor(definition.Menu);
302
- const buttonTag = context.tagFor(definition$1.Button);
302
+ const buttonTag = context.tagFor(definition$1.Button$1);
303
303
  const menuItemTag = context.tagFor(definition.MenuItem);
304
304
  return index.html` <div class="wrapper">
305
305
  <div class="base ${getClasses}">
@@ -319,7 +319,7 @@ const AudioPlayerTemplate = (context) => {
319
319
  ${when.when(
320
320
  (x) => Boolean(x.playbackRates),
321
321
  index.html`
322
- <${menuTag} class="playback-rates" trigger="auto" placement="top-start" auto-dismiss id="playback-menu">
322
+ <${menuTag} class="playback-rates" trigger="auto" placement="top-start" auto-dismiss id="playback-menu" position-strategy="absolute">
323
323
  <${buttonTag} id="playback-open-button"
324
324
  class="playback-button"
325
325
  slot="anchor"
@@ -1,5 +1,5 @@
1
1
  import { F as FoundationElement, O as Observable, a as attr, h as html, r as registerFactory } from './index.js';
2
- import { B as Button, a as buttonRegistries } from './definition11.js';
2
+ import { c as Button, a as buttonRegistries } from './definition11.js';
3
3
  import { S as Slider, a as sliderRegistries } from './definition47.js';
4
4
  import { a as menuRegistries } from './definition30.js';
5
5
  import { M as MediaSkipBy } from './enums.js';
@@ -317,7 +317,7 @@ const AudioPlayerTemplate = (context) => {
317
317
  ${when(
318
318
  (x) => Boolean(x.playbackRates),
319
319
  html`
320
- <${menuTag} class="playback-rates" trigger="auto" placement="top-start" auto-dismiss id="playback-menu">
320
+ <${menuTag} class="playback-rates" trigger="auto" placement="top-start" auto-dismiss id="playback-menu" position-strategy="absolute">
321
321
  <${buttonTag} id="playback-open-button"
322
322
  class="playback-button"
323
323
  slot="anchor"
@@ -20,7 +20,7 @@ index.__decorate([
20
20
  index.attr({ mode: "boolean" })
21
21
  ], Tab$1.prototype, "disabled", void 0);
22
22
 
23
- const styles = ":host{--_vvd-tab-accent-firm-wrapper: var( --vvd-tab-accent-firm );--_vvd-tab-cta-firm-wrapper: var( --vvd-tab-cta-firm )}.base{--vvd-tab-accent-firm: var( --_vvd-tab-accent-firm-wrapper, var(--vvd-tab-accent-primary) );--vvd-tab-cta-firm: var( --_vvd-tab-cta-firm-wrapper, var(--vvd-tab-cta-primary) )}:host(.vertical){justify-content:end;grid-column:1/auto}:host([disabled]){cursor:not-allowed}:host([removable]){position:relative}:host(:focus-visible){outline:none}.base{--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: transparent;--_appearance-color-outline: transparent}.base:where(.hover,:hover):where(:not(.disabled,:disabled,.readonly)){--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: var(--_connotation-color-faint);--_appearance-color-outline: transparent}.base:where(.disabled,:disabled){--_appearance-color-text: var(--vvd-color-neutral-300);--_appearance-color-fill: transparent;--_appearance-color-outline: transparent}.base:where(.active,:active):where(:not(.disabled,:disabled)){--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: var(--_connotation-color-soft);--_appearance-color-outline: transparent}.base.connotation-cta{--_connotation-color-primary-text: var(--vvd-tab-cta-primary-text, var(--vvd-color-canvas));--_connotation-color-firm: var(--vvd-tab-cta-firm, var(--vvd-color-cta-600));--_connotation-color-faint: var(--vvd-tab-cta-faint, var(--vvd-color-cta-50));--_connotation-color-fierce: var(--vvd-tab-cta-fierce, var(--vvd-color-cta-700));--_connotation-color-pale: var(--vvd-tab-cta-pale, var(--vvd-color-cta-300));--_connotation-color-soft: var(--vvd-tab-cta-soft, var(--vvd-color-cta-100))}.base:not(.connotation-cta){--_connotation-color-primary-text: var(--vvd-tab-accent-primary-text, var(--vvd-color-canvas));--_connotation-color-firm: var(--vvd-tab-accent-firm, var(--vvd-color-canvas-text));--_connotation-color-faint: var(--vvd-tab-accent-faint, var(--vvd-color-neutral-50));--_connotation-color-fierce: var(--vvd-tab-accent-fierce, var(--vvd-color-neutral-700));--_connotation-color-pale: var(--vvd-tab-accent-pale, var(--vvd-color-neutral-300));--_connotation-color-soft: var(--vvd-tab-accent-soft, var(--vvd-color-neutral-100))}.base{position:relative;display:flex;box-sizing:border-box;align-items:center;padding:var(--_tabs-tablist-gutter);background-color:var(--_appearance-color-fill);box-shadow:inset 0 0 0 1px var(--_appearance-color-outline);color:var(--_appearance-color-text);font:var(--vvd-typography-base-bold);gap:var(--_tabs-tablist-gutter);min-block-size:40px;vertical-align:middle;white-space:nowrap}@supports (user-select: none){.base{user-select:none}}.base:not(.shape-sharp){border-radius:8px}.base:not(.disabled){cursor:pointer}.base.disabled{pointer-events:none}.base.removable{padding-inline-end:40px}:host(:focus-visible) .base{--focus-stroke-gap-color: transparent;box-shadow:inset 0 0 0 3px var(--focus-stroke-gap-color, currentColor);outline:2px solid var(--focus-stroke-color, var(--vvd-color-canvas-text));outline-offset:calc(-2px - var(--focus-inset, 0px))}:host(.vertical) .base{margin-inline-start:var(--_tabs-active-indicator-stroke-width)}slot[name=icon]{font-size:20px;line-height:1}.icon-trailing slot[name=icon]{display:inline-block;order:1;margin-inline-start:auto}:host(:not(.vertical)) .base:after{position:absolute;border-radius:2px;background:currentColor;block-size:2px;content:\"\";inline-size:100%;inset-block-end:0;inset-inline-start:0;pointer-events:none;transition-property:opacity}:host(:not(.vertical)):host([aria-selected=true]) .base:after{transition-delay:.2s}:host(:not(.vertical)):host(:not([aria-selected=true])) .base:after{opacity:0}.close{position:absolute;display:flex;align-items:center;justify-content:center;block-size:24px;inline-size:24px;inset-block-start:50%;inset-inline-end:4px;transform:translateY(-50%)}.close vwc-icon{font-size:12px}.close .icon{display:flex;align-items:center;justify-content:center}";
23
+ const styles = ":host{--_vvd-tab-accent-firm-wrapper: var( --vvd-tab-accent-firm );--_vvd-tab-cta-firm-wrapper: var( --vvd-tab-cta-firm )}.base{--vvd-tab-accent-firm: var( --_vvd-tab-accent-firm-wrapper, var(--vvd-tab-accent-primary) );--vvd-tab-cta-firm: var( --_vvd-tab-cta-firm-wrapper, var(--vvd-tab-cta-primary) )}:host(.vertical){justify-content:end;grid-column:1/auto}:host([disabled]){cursor:not-allowed}:host([removable]){position:relative}:host(:focus-visible){outline:none}.base{--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: transparent;--_appearance-color-outline: transparent}.base:where(.hover,:hover):where(:not(.disabled,:disabled,.readonly)){--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: var(--_connotation-color-faint);--_appearance-color-outline: transparent}.base:where(.disabled,:disabled){--_appearance-color-text: var(--vvd-color-neutral-300);--_appearance-color-fill: transparent;--_appearance-color-outline: transparent}.base:where(.active,:active):where(:not(.disabled,:disabled)){--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: var(--_connotation-color-soft);--_appearance-color-outline: transparent}.base.connotation-cta{--_connotation-color-primary-text: var(--vvd-tab-cta-primary-text, var(--vvd-color-canvas));--_connotation-color-firm: var(--vvd-tab-cta-firm, var(--vvd-color-cta-600));--_connotation-color-faint: var(--vvd-tab-cta-faint, var(--vvd-color-cta-50));--_connotation-color-fierce: var(--vvd-tab-cta-fierce, var(--vvd-color-cta-700));--_connotation-color-pale: var(--vvd-tab-cta-pale, var(--vvd-color-cta-300));--_connotation-color-soft: var(--vvd-tab-cta-soft, var(--vvd-color-cta-100))}.base:not(.connotation-cta){--_connotation-color-primary-text: var(--vvd-tab-accent-primary-text, var(--vvd-color-canvas));--_connotation-color-firm: var(--vvd-tab-accent-firm, var(--vvd-color-canvas-text));--_connotation-color-faint: var(--vvd-tab-accent-faint, var(--vvd-color-neutral-50));--_connotation-color-fierce: var(--vvd-tab-accent-fierce, var(--vvd-color-neutral-700));--_connotation-color-pale: var(--vvd-tab-accent-pale, var(--vvd-color-neutral-300));--_connotation-color-soft: var(--vvd-tab-accent-soft, var(--vvd-color-neutral-100))}.base{position:relative;display:flex;box-sizing:border-box;align-items:center;padding:var(--_tabs-tablist-gutter);background-color:var(--_appearance-color-fill);box-shadow:inset 0 0 0 1px var(--_appearance-color-outline);color:var(--_appearance-color-text);font:var(--vvd-typography-base-bold);gap:var(--_tabs-tablist-gutter);min-block-size:40px;vertical-align:middle;white-space:nowrap}@supports (user-select: none){.base{user-select:none}}.base:not(.shape-sharp){border-radius:8px}.base:not(.disabled){cursor:pointer}.base.disabled{pointer-events:none}.base.removable{padding-inline-end:40px}:host(:focus-visible) .base{--focus-stroke-gap-color: transparent;box-shadow:inset 0 0 0 3px var(--focus-stroke-gap-color, currentColor);outline:2px solid var(--focus-stroke-color, var(--vvd-color-canvas-text));outline-offset:calc(-2px - var(--focus-inset, 0px))}:host(.vertical) .base{margin-inline-start:var(--_tabs-active-indicator-stroke-width)}slot[name=icon]{font-size:20px;line-height:1}.icon-trailing slot[name=icon]{display:inline-block;order:1;margin-inline-start:auto}.close{position:absolute;display:flex;align-items:center;justify-content:center;block-size:24px;inline-size:24px;inset-block-start:50%;inset-inline-end:4px;transform:translateY(-50%)}.close vwc-icon{font-size:12px}.close .icon{display:flex;align-items:center;justify-content:center}";
24
24
 
25
25
  var __defProp = Object.defineProperty;
26
26
  var __decorateClass = (decorators, target, key, kind) => {
@@ -18,7 +18,7 @@ __decorate([
18
18
  attr({ mode: "boolean" })
19
19
  ], Tab$1.prototype, "disabled", void 0);
20
20
 
21
- const styles = ":host{--_vvd-tab-accent-firm-wrapper: var( --vvd-tab-accent-firm );--_vvd-tab-cta-firm-wrapper: var( --vvd-tab-cta-firm )}.base{--vvd-tab-accent-firm: var( --_vvd-tab-accent-firm-wrapper, var(--vvd-tab-accent-primary) );--vvd-tab-cta-firm: var( --_vvd-tab-cta-firm-wrapper, var(--vvd-tab-cta-primary) )}:host(.vertical){justify-content:end;grid-column:1/auto}:host([disabled]){cursor:not-allowed}:host([removable]){position:relative}:host(:focus-visible){outline:none}.base{--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: transparent;--_appearance-color-outline: transparent}.base:where(.hover,:hover):where(:not(.disabled,:disabled,.readonly)){--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: var(--_connotation-color-faint);--_appearance-color-outline: transparent}.base:where(.disabled,:disabled){--_appearance-color-text: var(--vvd-color-neutral-300);--_appearance-color-fill: transparent;--_appearance-color-outline: transparent}.base:where(.active,:active):where(:not(.disabled,:disabled)){--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: var(--_connotation-color-soft);--_appearance-color-outline: transparent}.base.connotation-cta{--_connotation-color-primary-text: var(--vvd-tab-cta-primary-text, var(--vvd-color-canvas));--_connotation-color-firm: var(--vvd-tab-cta-firm, var(--vvd-color-cta-600));--_connotation-color-faint: var(--vvd-tab-cta-faint, var(--vvd-color-cta-50));--_connotation-color-fierce: var(--vvd-tab-cta-fierce, var(--vvd-color-cta-700));--_connotation-color-pale: var(--vvd-tab-cta-pale, var(--vvd-color-cta-300));--_connotation-color-soft: var(--vvd-tab-cta-soft, var(--vvd-color-cta-100))}.base:not(.connotation-cta){--_connotation-color-primary-text: var(--vvd-tab-accent-primary-text, var(--vvd-color-canvas));--_connotation-color-firm: var(--vvd-tab-accent-firm, var(--vvd-color-canvas-text));--_connotation-color-faint: var(--vvd-tab-accent-faint, var(--vvd-color-neutral-50));--_connotation-color-fierce: var(--vvd-tab-accent-fierce, var(--vvd-color-neutral-700));--_connotation-color-pale: var(--vvd-tab-accent-pale, var(--vvd-color-neutral-300));--_connotation-color-soft: var(--vvd-tab-accent-soft, var(--vvd-color-neutral-100))}.base{position:relative;display:flex;box-sizing:border-box;align-items:center;padding:var(--_tabs-tablist-gutter);background-color:var(--_appearance-color-fill);box-shadow:inset 0 0 0 1px var(--_appearance-color-outline);color:var(--_appearance-color-text);font:var(--vvd-typography-base-bold);gap:var(--_tabs-tablist-gutter);min-block-size:40px;vertical-align:middle;white-space:nowrap}@supports (user-select: none){.base{user-select:none}}.base:not(.shape-sharp){border-radius:8px}.base:not(.disabled){cursor:pointer}.base.disabled{pointer-events:none}.base.removable{padding-inline-end:40px}:host(:focus-visible) .base{--focus-stroke-gap-color: transparent;box-shadow:inset 0 0 0 3px var(--focus-stroke-gap-color, currentColor);outline:2px solid var(--focus-stroke-color, var(--vvd-color-canvas-text));outline-offset:calc(-2px - var(--focus-inset, 0px))}:host(.vertical) .base{margin-inline-start:var(--_tabs-active-indicator-stroke-width)}slot[name=icon]{font-size:20px;line-height:1}.icon-trailing slot[name=icon]{display:inline-block;order:1;margin-inline-start:auto}:host(:not(.vertical)) .base:after{position:absolute;border-radius:2px;background:currentColor;block-size:2px;content:\"\";inline-size:100%;inset-block-end:0;inset-inline-start:0;pointer-events:none;transition-property:opacity}:host(:not(.vertical)):host([aria-selected=true]) .base:after{transition-delay:.2s}:host(:not(.vertical)):host(:not([aria-selected=true])) .base:after{opacity:0}.close{position:absolute;display:flex;align-items:center;justify-content:center;block-size:24px;inline-size:24px;inset-block-start:50%;inset-inline-end:4px;transform:translateY(-50%)}.close vwc-icon{font-size:12px}.close .icon{display:flex;align-items:center;justify-content:center}";
21
+ const styles = ":host{--_vvd-tab-accent-firm-wrapper: var( --vvd-tab-accent-firm );--_vvd-tab-cta-firm-wrapper: var( --vvd-tab-cta-firm )}.base{--vvd-tab-accent-firm: var( --_vvd-tab-accent-firm-wrapper, var(--vvd-tab-accent-primary) );--vvd-tab-cta-firm: var( --_vvd-tab-cta-firm-wrapper, var(--vvd-tab-cta-primary) )}:host(.vertical){justify-content:end;grid-column:1/auto}:host([disabled]){cursor:not-allowed}:host([removable]){position:relative}:host(:focus-visible){outline:none}.base{--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: transparent;--_appearance-color-outline: transparent}.base:where(.hover,:hover):where(:not(.disabled,:disabled,.readonly)){--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: var(--_connotation-color-faint);--_appearance-color-outline: transparent}.base:where(.disabled,:disabled){--_appearance-color-text: var(--vvd-color-neutral-300);--_appearance-color-fill: transparent;--_appearance-color-outline: transparent}.base:where(.active,:active):where(:not(.disabled,:disabled)){--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: var(--_connotation-color-soft);--_appearance-color-outline: transparent}.base.connotation-cta{--_connotation-color-primary-text: var(--vvd-tab-cta-primary-text, var(--vvd-color-canvas));--_connotation-color-firm: var(--vvd-tab-cta-firm, var(--vvd-color-cta-600));--_connotation-color-faint: var(--vvd-tab-cta-faint, var(--vvd-color-cta-50));--_connotation-color-fierce: var(--vvd-tab-cta-fierce, var(--vvd-color-cta-700));--_connotation-color-pale: var(--vvd-tab-cta-pale, var(--vvd-color-cta-300));--_connotation-color-soft: var(--vvd-tab-cta-soft, var(--vvd-color-cta-100))}.base:not(.connotation-cta){--_connotation-color-primary-text: var(--vvd-tab-accent-primary-text, var(--vvd-color-canvas));--_connotation-color-firm: var(--vvd-tab-accent-firm, var(--vvd-color-canvas-text));--_connotation-color-faint: var(--vvd-tab-accent-faint, var(--vvd-color-neutral-50));--_connotation-color-fierce: var(--vvd-tab-accent-fierce, var(--vvd-color-neutral-700));--_connotation-color-pale: var(--vvd-tab-accent-pale, var(--vvd-color-neutral-300));--_connotation-color-soft: var(--vvd-tab-accent-soft, var(--vvd-color-neutral-100))}.base{position:relative;display:flex;box-sizing:border-box;align-items:center;padding:var(--_tabs-tablist-gutter);background-color:var(--_appearance-color-fill);box-shadow:inset 0 0 0 1px var(--_appearance-color-outline);color:var(--_appearance-color-text);font:var(--vvd-typography-base-bold);gap:var(--_tabs-tablist-gutter);min-block-size:40px;vertical-align:middle;white-space:nowrap}@supports (user-select: none){.base{user-select:none}}.base:not(.shape-sharp){border-radius:8px}.base:not(.disabled){cursor:pointer}.base.disabled{pointer-events:none}.base.removable{padding-inline-end:40px}:host(:focus-visible) .base{--focus-stroke-gap-color: transparent;box-shadow:inset 0 0 0 3px var(--focus-stroke-gap-color, currentColor);outline:2px solid var(--focus-stroke-color, var(--vvd-color-canvas-text));outline-offset:calc(-2px - var(--focus-inset, 0px))}:host(.vertical) .base{margin-inline-start:var(--_tabs-active-indicator-stroke-width)}slot[name=icon]{font-size:20px;line-height:1}.icon-trailing slot[name=icon]{display:inline-block;order:1;margin-inline-start:auto}.close{position:absolute;display:flex;align-items:center;justify-content:center;block-size:24px;inline-size:24px;inset-block-start:50%;inset-inline-end:4px;transform:translateY(-50%)}.close vwc-icon{font-size:12px}.close .icon{display:flex;align-items:center;justify-content:center}";
22
22
 
23
23
  var __defProp = Object.defineProperty;
24
24
  var __decorateClass = (decorators, target, key, kind) => {
@@ -383,7 +383,7 @@ index.__decorate([
383
383
  ], Tabs$1.prototype, "showActiveIndicator", void 0);
384
384
  applyMixins.applyMixins(Tabs$1, startEnd.StartEnd);
385
385
 
386
- const styles = ":host{display:block}.base{--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: transparent;--_appearance-color-outline: transparent}.base.connotation-cta{--_connotation-color-firm: var(--vvd-tabs-cta-firm, var(--vvd-color-cta-600))}.base:not(.connotation-cta){--_connotation-color-firm: var(--vvd-tabs-accent-firm, var(--vvd-color-canvas-text))}.base{display:grid;box-sizing:border-box}.base.orientation-vertical{overflow:hidden;block-size:inherit;grid-template-columns:auto 1fr;grid-template-rows:1fr}.base:not(.orientation-vertical){grid-template-columns:1fr;grid-template-rows:auto 1fr;max-block-size:100%}.base:not(.orientation-vertical) .scroll-shadow{position:relative;overflow:hidden;inline-size:100%;isolation:isolate}.base:not(.orientation-vertical) .scroll-shadow.start-scroll:before,.base:not(.orientation-vertical) .scroll-shadow.start-scroll:after,.base:not(.orientation-vertical) .scroll-shadow.end-scroll:before,.base:not(.orientation-vertical) .scroll-shadow.end-scroll:after{position:absolute;content:\"\";inline-size:10px;inset-block:0;opacity:0;transition:opacity .1s}.base:not(.orientation-vertical) .scroll-shadow.start-scroll:before{z-index:1;box-shadow:inset 7px 1px 5px -3px var(--vvd-color-neutral-950);inset-inline-start:0;opacity:.2}.base:not(.orientation-vertical) .scroll-shadow.end-scroll:after{box-shadow:inset -7px 1px 5px -3px var(--vvd-color-neutral-950);inset-inline-end:0;opacity:.2}.tablist{--_tabs-tablist-gutter: 8px;--_tabs-active-indicator-stroke-width: 2px;position:relative;display:grid;box-sizing:border-box;color:var(--_appearance-color-text)}.base.orientation-vertical .tablist{padding:var(--_tabs-tablist-gutter);grid-row:1/2;grid-template-columns:auto 1fr;grid-template-rows:auto;inline-size:100%;place-self:flex-start end;row-gap:var(--_tabs-tablist-gutter)}.base:not(.orientation-vertical) .tablist{justify-content:flex-start;column-gap:var(--_tabs-tablist-gutter);grid-auto-flow:column;grid-template-columns:auto;grid-template-rows:auto auto;inline-size:100%;padding-inline:var(--_tabs-tablist-gutter)}.base:not(.orientation-vertical) .tablist-wrapper{overflow:auto hidden;align-self:end;border-bottom:1px solid var(--vvd-color-neutral-300);inline-size:100%}.base.orientation-vertical .tablist-wrapper{overflow:hidden auto;block-size:100%;box-shadow:1px 0 0 0 var(--vvd-color-neutral-300)}.tablist-wrapper::-webkit-scrollbar{display:none}.tabpanel{box-sizing:border-box;block-size:100%;min-block-size:0;min-inline-size:0}.base.scroll .tabpanel{overflow-y:auto}.base.gutters-small .tabpanel{padding:calc(1px*(40 + 4*clamp(-1,var(--vvd-size-density, 0),2)) - (1px*(24 + 4*clamp(-1,var(--vvd-size-density, 0),2))))}.active-indicator{background:currentColor;margin-inline-start:calc(var(--_tabs-tablist-gutter) * -1)}.base.orientation-vertical .active-indicator{align-self:center;border-radius:2px;block-size:80%;grid-area:1/1/auto/auto;inline-size:var(--_tabs-active-indicator-stroke-width)}.base:not(.orientation-vertical) .active-indicator{position:absolute;z-index:1;block-size:var(--_tabs-active-indicator-stroke-width);grid-column:1/auto;inline-size:calc(var(--_tabs-active-tab-inline-size) - 32px);inset-block-end:0;inset-inline-start:8px;justify-self:center;padding-inline:var(--_tabs-tablist-gutter)}.activeIndicatorTransition{transition:transform .2s ease-out 0s,inline-size .2s ease-out 0s}.base:not(.orientation-vertical) .active-indicator:not(.activeIndicatorTransition){opacity:0}";
386
+ const styles = ":host{display:block}.base{--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: transparent;--_appearance-color-outline: transparent}.base.connotation-cta{--_connotation-color-firm: var(--vvd-tabs-cta-firm, var(--vvd-color-cta-600))}.base:not(.connotation-cta){--_connotation-color-firm: var(--vvd-tabs-accent-firm, var(--vvd-color-canvas-text))}.base{--_tabs-tablist-gutter: 8px;--_tabs-active-indicator-stroke-width: 2px;display:grid;box-sizing:border-box}.base.orientation-vertical{overflow:hidden;block-size:inherit;grid-template-columns:auto 1fr;grid-template-rows:1fr}.base:not(.orientation-vertical){grid-template-columns:1fr;grid-template-rows:auto 1fr;max-block-size:100%}.base:not(.orientation-vertical) .scroll-shadow{position:relative;overflow:hidden;isolation:isolate}.base:not(.orientation-vertical) .scroll-shadow.start-scroll:before,.base:not(.orientation-vertical) .scroll-shadow.start-scroll:after,.base:not(.orientation-vertical) .scroll-shadow.end-scroll:before,.base:not(.orientation-vertical) .scroll-shadow.end-scroll:after{position:absolute;content:\"\";inline-size:10px;inset-block:0;opacity:0;transition:opacity .1s}.base:not(.orientation-vertical) .scroll-shadow.start-scroll:before{z-index:1;box-shadow:inset 7px 1px 5px -3px var(--vvd-color-neutral-950);inset-inline-start:0;opacity:.2}.base:not(.orientation-vertical) .scroll-shadow.end-scroll:after{box-shadow:inset -7px 1px 5px -3px var(--vvd-color-neutral-950);inset-inline-end:0;opacity:.2}.tabs{display:flex;overflow:hidden}.base.orientation-vertical .tabs{flex-direction:column;box-shadow:1px 0 0 0 var(--vvd-color-neutral-300)}.base.orientation-horizontal .tabs{flex-direction:row;border-bottom:1px solid var(--vvd-color-neutral-300)}.tablist{position:relative;display:grid;box-sizing:border-box;color:var(--_appearance-color-text)}.base.orientation-vertical .tablist{padding:var(--_tabs-tablist-gutter);grid-row:1/2;grid-template-columns:auto 1fr;grid-template-rows:auto;inline-size:100%;place-self:flex-start end;row-gap:var(--_tabs-tablist-gutter)}.base:not(.orientation-vertical) .tablist{justify-content:flex-start;column-gap:var(--_tabs-tablist-gutter);grid-auto-flow:column;grid-template-columns:auto;grid-template-rows:auto auto;inline-size:100%;padding-inline:var(--_tabs-tablist-gutter)}.base.has-action-items.orientation-vertical .tablist{padding-block-end:0}.base.has-action-items:not(.orientation-vertical) .tablist{padding-inline-end:0}.base:not(.orientation-vertical) .tablist-wrapper{overflow:auto hidden;align-self:end;inline-size:100%}.base.orientation-vertical .tablist-wrapper{overflow:hidden auto;block-size:100%}.tablist-wrapper::-webkit-scrollbar{display:none}slot[name=action-items]{display:flex}.base.has-action-items.orientation-horizontal slot[name=action-items]{align-items:center;margin-inline:var(--_tabs-tablist-gutter)}.base.has-action-items.orientation-vertical slot[name=action-items]{margin-block:var(--_tabs-tablist-gutter)}.tabpanel{box-sizing:border-box;block-size:100%;min-block-size:0;min-inline-size:0}.base.scroll .tabpanel{overflow-y:auto}.base.gutters-small .tabpanel{padding:calc(1px*(40 + 4*clamp(-1,var(--vvd-size-density, 0),2)) - (1px*(24 + 4*clamp(-1,var(--vvd-size-density, 0),2))))}.active-indicator{background:currentColor;margin-inline-start:calc(var(--_tabs-tablist-gutter) * -1)}.base.orientation-vertical .active-indicator{align-self:center;border-radius:2px;block-size:80%;grid-area:1/1/auto/auto;inline-size:var(--_tabs-active-indicator-stroke-width)}.base:not(.orientation-vertical) .active-indicator{position:absolute;z-index:1;border-radius:2px;block-size:var(--_tabs-active-indicator-stroke-width);grid-column:1/auto;inline-size:calc(var(--_tabs-active-tab-inline-size));inset-block-end:0;inset-inline-start:8px}.activeIndicatorTransition{transition:transform .2s ease-out 0s,inline-size .2s ease-out 0s}";
387
387
 
388
388
  var __defProp = Object.defineProperty;
389
389
  var __decorateClass = (decorators, target, key, kind) => {
@@ -397,8 +397,11 @@ var __decorateClass = (decorators, target, key, kind) => {
397
397
  const ACTIVE_TAB_WIDTH = "--_tabs-active-tab-inline-size";
398
398
  class Tabs extends Tabs$1 {
399
399
  constructor() {
400
- super(...arguments);
400
+ super();
401
401
  this.scrollablePanel = false;
402
+ this._actionItemsSlottedContent = [];
403
+ this.handleActiveIndicatorPosition = () => this.#handleActiveIndicatorPosition();
404
+ this.animateActiveIndicator = () => this.#animateActiveIndicator();
402
405
  }
403
406
  connotationChanged() {
404
407
  this.#updateTabsConnotation();
@@ -410,17 +413,16 @@ class Tabs extends Tabs$1 {
410
413
  if (this.orientation === TabsOrientation.vertical) {
411
414
  this.activeIndicatorRef.style.removeProperty(ACTIVE_TAB_WIDTH);
412
415
  }
413
- this.#patchActiveID();
414
416
  }
415
417
  activeidChanged(oldValue, newValue) {
416
418
  super.activeidChanged(oldValue, newValue);
417
419
  this.patchIndicatorStyleTransition();
418
- this.#patchActiveID();
420
+ this.#updateTabsConnotation();
421
+ this.#scrollToIndex(this.activeTabIndex);
419
422
  }
420
423
  tabsChanged() {
421
424
  super.tabsChanged();
422
425
  this.patchIndicatorStyleTransition();
423
- this.#patchActiveID();
424
426
  this.#updateScrollStatus();
425
427
  }
426
428
  #updateScrollStatus() {
@@ -429,7 +431,6 @@ class Tabs extends Tabs$1 {
429
431
  tabpanelsChanged() {
430
432
  super.tabpanelsChanged();
431
433
  this.patchIndicatorStyleTransition();
432
- this.#patchActiveID();
433
434
  }
434
435
  patchIndicatorStyleTransition() {
435
436
  if (!this.activetab || !this.activeIndicatorRef) return;
@@ -444,6 +445,7 @@ class Tabs extends Tabs$1 {
444
445
  const scrollWrapper = this.tablist.parentElement;
445
446
  this.#resizeObserver = new ResizeObserver(() => {
446
447
  this.#updateScrollStatus();
448
+ this.patchIndicatorStyleTransition();
447
449
  });
448
450
  this.#resizeObserver.observe(scrollWrapper);
449
451
  }
@@ -467,7 +469,7 @@ class Tabs extends Tabs$1 {
467
469
  return this.shadowRoot.querySelector(".tablist-wrapper");
468
470
  }
469
471
  #scrollToIndex(index) {
470
- const tab = this.tabs[index];
472
+ const tab = this.tabs?.[index];
471
473
  if (!tab) return;
472
474
  let left = 0;
473
475
  let top = 0;
@@ -488,13 +490,37 @@ class Tabs extends Tabs$1 {
488
490
  }
489
491
  this.#tabListWrapper.scrollTo({ top, left, behavior: "smooth" });
490
492
  }
491
- // adapted FAST fix https://github.com/microsoft/fast/pull/6606
492
- #patchActiveID() {
493
- if (!this.activetab) return;
494
- const idx = this.tabs.indexOf(this.activetab);
495
- this.activeid = this["tabIds"][idx];
496
- this.#updateTabsConnotation();
497
- this.#scrollToIndex(idx);
493
+ #getGridProperty() {
494
+ return this.isHorizontal() ? "gridColumn" : "gridRow";
495
+ }
496
+ #getTranslateProperty() {
497
+ return this.isHorizontal() ? "translateX" : "translateY";
498
+ }
499
+ #handleActiveIndicatorPosition() {
500
+ if (this.showActiveIndicator && this.activeindicator) {
501
+ this.animateActiveIndicator();
502
+ }
503
+ }
504
+ #animateActiveIndicator() {
505
+ const offsetProperty = this.isHorizontal() ? "offsetLeft" : "offsetTop";
506
+ const currentOffset = this.activeIndicatorRef[offsetProperty];
507
+ const currentGridValue = this.activeIndicatorRef.style[this.#getGridProperty()];
508
+ this.activeIndicatorRef.style[this.#getGridProperty()] = `${this.activeTabIndex + 1}`;
509
+ const targetOffset = this.activeIndicatorRef[offsetProperty];
510
+ this.activeIndicatorRef.style[this.#getGridProperty()] = currentGridValue;
511
+ const relativeOffset = targetOffset - currentOffset;
512
+ this.activeIndicatorRef.style.transform = `${this.#getTranslateProperty()}(${relativeOffset}px)`;
513
+ this.activeIndicatorRef.classList.add("activeIndicatorTransition");
514
+ }
515
+ /**
516
+ * @internal
517
+ */
518
+ activeIndicatorRefChanged() {
519
+ this.activeIndicatorRef.addEventListener("transitionend", () => {
520
+ this.activeIndicatorRef.style[this.#getGridProperty()] = `${this.activeTabIndex + 1}`;
521
+ this.activeIndicatorRef.style.transform = `${this.#getTranslateProperty()}(0px)`;
522
+ this.activeIndicatorRef.classList.remove("activeIndicatorTransition");
523
+ });
498
524
  }
499
525
  }
500
526
  __decorateClass([
@@ -509,18 +535,23 @@ __decorateClass([
509
535
  __decorateClass([
510
536
  index.attr({ mode: "boolean", attribute: "scrollable-panel" })
511
537
  ], Tabs.prototype, "scrollablePanel");
538
+ __decorateClass([
539
+ index.observable
540
+ ], Tabs.prototype, "_actionItemsSlottedContent");
512
541
 
513
542
  const getClasses = ({
514
543
  connotation,
515
544
  orientation,
516
545
  gutters,
517
- scrollablePanel
546
+ scrollablePanel,
547
+ _actionItemsSlottedContent
518
548
  }) => classNames.classNames(
519
549
  "base",
520
550
  [`connotation-${connotation}`, Boolean(connotation)],
521
551
  [`orientation-${orientation}`, Boolean(orientation)],
522
552
  `gutters-${gutters ?? "small"}`,
523
- ["scroll", Boolean(scrollablePanel)]
553
+ ["scroll", Boolean(scrollablePanel)],
554
+ ["has-action-items", Boolean(_actionItemsSlottedContent.length)]
524
555
  );
525
556
  function setNoScrollState(scrollShadow, scrollWrapper) {
526
557
  if (scrollWrapper.scrollWidth <= scrollWrapper.clientWidth) {
@@ -552,21 +583,27 @@ function TabsTemplate() {
552
583
  return index.html`
553
584
  <template>
554
585
  <div class="${getClasses}">
555
- <div class="scroll-shadow">
556
- <div class="tablist-wrapper" @scroll="${setShadowWhenScrollTabs}">
557
- <div class="tablist" role="tablist" ${ref.ref("tablist")}>
558
- <slot name="tab" ${slotted.slotted("tabs")}></slot>
559
- ${when.when(
586
+ <div class="tabs">
587
+ <div class="scroll-shadow">
588
+ <div class="tablist-wrapper" @scroll="${setShadowWhenScrollTabs}">
589
+ <div class="tablist" role="tablist" ${ref.ref("tablist")}>
590
+ <slot name="tab" ${slotted.slotted("tabs")}></slot>
591
+ ${when.when(
560
592
  (x) => x.showActiveIndicator,
561
593
  index.html`
562
- <div
563
- ${ref.ref("activeIndicatorRef")}
564
- class="active-indicator"
565
- ></div>
566
- `
594
+ <div
595
+ ${ref.ref("activeIndicatorRef")}
596
+ class="active-indicator"
597
+ ></div>
598
+ `
567
599
  )}
600
+ </div>
568
601
  </div>
569
602
  </div>
603
+ <slot
604
+ name="action-items"
605
+ ${slotted.slotted("_actionItemsSlottedContent")}
606
+ ></slot>
570
607
  </div>
571
608
  <div class="tabpanel" part="tab-panel">
572
609
  <slot name="tabpanel" ${slotted.slotted("tabpanels")}></slot>
@@ -381,7 +381,7 @@ __decorate([
381
381
  ], Tabs$1.prototype, "showActiveIndicator", void 0);
382
382
  applyMixins(Tabs$1, StartEnd);
383
383
 
384
- const styles = ":host{display:block}.base{--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: transparent;--_appearance-color-outline: transparent}.base.connotation-cta{--_connotation-color-firm: var(--vvd-tabs-cta-firm, var(--vvd-color-cta-600))}.base:not(.connotation-cta){--_connotation-color-firm: var(--vvd-tabs-accent-firm, var(--vvd-color-canvas-text))}.base{display:grid;box-sizing:border-box}.base.orientation-vertical{overflow:hidden;block-size:inherit;grid-template-columns:auto 1fr;grid-template-rows:1fr}.base:not(.orientation-vertical){grid-template-columns:1fr;grid-template-rows:auto 1fr;max-block-size:100%}.base:not(.orientation-vertical) .scroll-shadow{position:relative;overflow:hidden;inline-size:100%;isolation:isolate}.base:not(.orientation-vertical) .scroll-shadow.start-scroll:before,.base:not(.orientation-vertical) .scroll-shadow.start-scroll:after,.base:not(.orientation-vertical) .scroll-shadow.end-scroll:before,.base:not(.orientation-vertical) .scroll-shadow.end-scroll:after{position:absolute;content:\"\";inline-size:10px;inset-block:0;opacity:0;transition:opacity .1s}.base:not(.orientation-vertical) .scroll-shadow.start-scroll:before{z-index:1;box-shadow:inset 7px 1px 5px -3px var(--vvd-color-neutral-950);inset-inline-start:0;opacity:.2}.base:not(.orientation-vertical) .scroll-shadow.end-scroll:after{box-shadow:inset -7px 1px 5px -3px var(--vvd-color-neutral-950);inset-inline-end:0;opacity:.2}.tablist{--_tabs-tablist-gutter: 8px;--_tabs-active-indicator-stroke-width: 2px;position:relative;display:grid;box-sizing:border-box;color:var(--_appearance-color-text)}.base.orientation-vertical .tablist{padding:var(--_tabs-tablist-gutter);grid-row:1/2;grid-template-columns:auto 1fr;grid-template-rows:auto;inline-size:100%;place-self:flex-start end;row-gap:var(--_tabs-tablist-gutter)}.base:not(.orientation-vertical) .tablist{justify-content:flex-start;column-gap:var(--_tabs-tablist-gutter);grid-auto-flow:column;grid-template-columns:auto;grid-template-rows:auto auto;inline-size:100%;padding-inline:var(--_tabs-tablist-gutter)}.base:not(.orientation-vertical) .tablist-wrapper{overflow:auto hidden;align-self:end;border-bottom:1px solid var(--vvd-color-neutral-300);inline-size:100%}.base.orientation-vertical .tablist-wrapper{overflow:hidden auto;block-size:100%;box-shadow:1px 0 0 0 var(--vvd-color-neutral-300)}.tablist-wrapper::-webkit-scrollbar{display:none}.tabpanel{box-sizing:border-box;block-size:100%;min-block-size:0;min-inline-size:0}.base.scroll .tabpanel{overflow-y:auto}.base.gutters-small .tabpanel{padding:calc(1px*(40 + 4*clamp(-1,var(--vvd-size-density, 0),2)) - (1px*(24 + 4*clamp(-1,var(--vvd-size-density, 0),2))))}.active-indicator{background:currentColor;margin-inline-start:calc(var(--_tabs-tablist-gutter) * -1)}.base.orientation-vertical .active-indicator{align-self:center;border-radius:2px;block-size:80%;grid-area:1/1/auto/auto;inline-size:var(--_tabs-active-indicator-stroke-width)}.base:not(.orientation-vertical) .active-indicator{position:absolute;z-index:1;block-size:var(--_tabs-active-indicator-stroke-width);grid-column:1/auto;inline-size:calc(var(--_tabs-active-tab-inline-size) - 32px);inset-block-end:0;inset-inline-start:8px;justify-self:center;padding-inline:var(--_tabs-tablist-gutter)}.activeIndicatorTransition{transition:transform .2s ease-out 0s,inline-size .2s ease-out 0s}.base:not(.orientation-vertical) .active-indicator:not(.activeIndicatorTransition){opacity:0}";
384
+ const styles = ":host{display:block}.base{--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: transparent;--_appearance-color-outline: transparent}.base.connotation-cta{--_connotation-color-firm: var(--vvd-tabs-cta-firm, var(--vvd-color-cta-600))}.base:not(.connotation-cta){--_connotation-color-firm: var(--vvd-tabs-accent-firm, var(--vvd-color-canvas-text))}.base{--_tabs-tablist-gutter: 8px;--_tabs-active-indicator-stroke-width: 2px;display:grid;box-sizing:border-box}.base.orientation-vertical{overflow:hidden;block-size:inherit;grid-template-columns:auto 1fr;grid-template-rows:1fr}.base:not(.orientation-vertical){grid-template-columns:1fr;grid-template-rows:auto 1fr;max-block-size:100%}.base:not(.orientation-vertical) .scroll-shadow{position:relative;overflow:hidden;isolation:isolate}.base:not(.orientation-vertical) .scroll-shadow.start-scroll:before,.base:not(.orientation-vertical) .scroll-shadow.start-scroll:after,.base:not(.orientation-vertical) .scroll-shadow.end-scroll:before,.base:not(.orientation-vertical) .scroll-shadow.end-scroll:after{position:absolute;content:\"\";inline-size:10px;inset-block:0;opacity:0;transition:opacity .1s}.base:not(.orientation-vertical) .scroll-shadow.start-scroll:before{z-index:1;box-shadow:inset 7px 1px 5px -3px var(--vvd-color-neutral-950);inset-inline-start:0;opacity:.2}.base:not(.orientation-vertical) .scroll-shadow.end-scroll:after{box-shadow:inset -7px 1px 5px -3px var(--vvd-color-neutral-950);inset-inline-end:0;opacity:.2}.tabs{display:flex;overflow:hidden}.base.orientation-vertical .tabs{flex-direction:column;box-shadow:1px 0 0 0 var(--vvd-color-neutral-300)}.base.orientation-horizontal .tabs{flex-direction:row;border-bottom:1px solid var(--vvd-color-neutral-300)}.tablist{position:relative;display:grid;box-sizing:border-box;color:var(--_appearance-color-text)}.base.orientation-vertical .tablist{padding:var(--_tabs-tablist-gutter);grid-row:1/2;grid-template-columns:auto 1fr;grid-template-rows:auto;inline-size:100%;place-self:flex-start end;row-gap:var(--_tabs-tablist-gutter)}.base:not(.orientation-vertical) .tablist{justify-content:flex-start;column-gap:var(--_tabs-tablist-gutter);grid-auto-flow:column;grid-template-columns:auto;grid-template-rows:auto auto;inline-size:100%;padding-inline:var(--_tabs-tablist-gutter)}.base.has-action-items.orientation-vertical .tablist{padding-block-end:0}.base.has-action-items:not(.orientation-vertical) .tablist{padding-inline-end:0}.base:not(.orientation-vertical) .tablist-wrapper{overflow:auto hidden;align-self:end;inline-size:100%}.base.orientation-vertical .tablist-wrapper{overflow:hidden auto;block-size:100%}.tablist-wrapper::-webkit-scrollbar{display:none}slot[name=action-items]{display:flex}.base.has-action-items.orientation-horizontal slot[name=action-items]{align-items:center;margin-inline:var(--_tabs-tablist-gutter)}.base.has-action-items.orientation-vertical slot[name=action-items]{margin-block:var(--_tabs-tablist-gutter)}.tabpanel{box-sizing:border-box;block-size:100%;min-block-size:0;min-inline-size:0}.base.scroll .tabpanel{overflow-y:auto}.base.gutters-small .tabpanel{padding:calc(1px*(40 + 4*clamp(-1,var(--vvd-size-density, 0),2)) - (1px*(24 + 4*clamp(-1,var(--vvd-size-density, 0),2))))}.active-indicator{background:currentColor;margin-inline-start:calc(var(--_tabs-tablist-gutter) * -1)}.base.orientation-vertical .active-indicator{align-self:center;border-radius:2px;block-size:80%;grid-area:1/1/auto/auto;inline-size:var(--_tabs-active-indicator-stroke-width)}.base:not(.orientation-vertical) .active-indicator{position:absolute;z-index:1;border-radius:2px;block-size:var(--_tabs-active-indicator-stroke-width);grid-column:1/auto;inline-size:calc(var(--_tabs-active-tab-inline-size));inset-block-end:0;inset-inline-start:8px}.activeIndicatorTransition{transition:transform .2s ease-out 0s,inline-size .2s ease-out 0s}";
385
385
 
386
386
  var __defProp = Object.defineProperty;
387
387
  var __decorateClass = (decorators, target, key, kind) => {
@@ -395,8 +395,11 @@ var __decorateClass = (decorators, target, key, kind) => {
395
395
  const ACTIVE_TAB_WIDTH = "--_tabs-active-tab-inline-size";
396
396
  class Tabs extends Tabs$1 {
397
397
  constructor() {
398
- super(...arguments);
398
+ super();
399
399
  this.scrollablePanel = false;
400
+ this._actionItemsSlottedContent = [];
401
+ this.handleActiveIndicatorPosition = () => this.#handleActiveIndicatorPosition();
402
+ this.animateActiveIndicator = () => this.#animateActiveIndicator();
400
403
  }
401
404
  connotationChanged() {
402
405
  this.#updateTabsConnotation();
@@ -408,17 +411,16 @@ class Tabs extends Tabs$1 {
408
411
  if (this.orientation === TabsOrientation.vertical) {
409
412
  this.activeIndicatorRef.style.removeProperty(ACTIVE_TAB_WIDTH);
410
413
  }
411
- this.#patchActiveID();
412
414
  }
413
415
  activeidChanged(oldValue, newValue) {
414
416
  super.activeidChanged(oldValue, newValue);
415
417
  this.patchIndicatorStyleTransition();
416
- this.#patchActiveID();
418
+ this.#updateTabsConnotation();
419
+ this.#scrollToIndex(this.activeTabIndex);
417
420
  }
418
421
  tabsChanged() {
419
422
  super.tabsChanged();
420
423
  this.patchIndicatorStyleTransition();
421
- this.#patchActiveID();
422
424
  this.#updateScrollStatus();
423
425
  }
424
426
  #updateScrollStatus() {
@@ -427,7 +429,6 @@ class Tabs extends Tabs$1 {
427
429
  tabpanelsChanged() {
428
430
  super.tabpanelsChanged();
429
431
  this.patchIndicatorStyleTransition();
430
- this.#patchActiveID();
431
432
  }
432
433
  patchIndicatorStyleTransition() {
433
434
  if (!this.activetab || !this.activeIndicatorRef) return;
@@ -442,6 +443,7 @@ class Tabs extends Tabs$1 {
442
443
  const scrollWrapper = this.tablist.parentElement;
443
444
  this.#resizeObserver = new ResizeObserver(() => {
444
445
  this.#updateScrollStatus();
446
+ this.patchIndicatorStyleTransition();
445
447
  });
446
448
  this.#resizeObserver.observe(scrollWrapper);
447
449
  }
@@ -465,7 +467,7 @@ class Tabs extends Tabs$1 {
465
467
  return this.shadowRoot.querySelector(".tablist-wrapper");
466
468
  }
467
469
  #scrollToIndex(index) {
468
- const tab = this.tabs[index];
470
+ const tab = this.tabs?.[index];
469
471
  if (!tab) return;
470
472
  let left = 0;
471
473
  let top = 0;
@@ -486,13 +488,37 @@ class Tabs extends Tabs$1 {
486
488
  }
487
489
  this.#tabListWrapper.scrollTo({ top, left, behavior: "smooth" });
488
490
  }
489
- // adapted FAST fix https://github.com/microsoft/fast/pull/6606
490
- #patchActiveID() {
491
- if (!this.activetab) return;
492
- const idx = this.tabs.indexOf(this.activetab);
493
- this.activeid = this["tabIds"][idx];
494
- this.#updateTabsConnotation();
495
- this.#scrollToIndex(idx);
491
+ #getGridProperty() {
492
+ return this.isHorizontal() ? "gridColumn" : "gridRow";
493
+ }
494
+ #getTranslateProperty() {
495
+ return this.isHorizontal() ? "translateX" : "translateY";
496
+ }
497
+ #handleActiveIndicatorPosition() {
498
+ if (this.showActiveIndicator && this.activeindicator) {
499
+ this.animateActiveIndicator();
500
+ }
501
+ }
502
+ #animateActiveIndicator() {
503
+ const offsetProperty = this.isHorizontal() ? "offsetLeft" : "offsetTop";
504
+ const currentOffset = this.activeIndicatorRef[offsetProperty];
505
+ const currentGridValue = this.activeIndicatorRef.style[this.#getGridProperty()];
506
+ this.activeIndicatorRef.style[this.#getGridProperty()] = `${this.activeTabIndex + 1}`;
507
+ const targetOffset = this.activeIndicatorRef[offsetProperty];
508
+ this.activeIndicatorRef.style[this.#getGridProperty()] = currentGridValue;
509
+ const relativeOffset = targetOffset - currentOffset;
510
+ this.activeIndicatorRef.style.transform = `${this.#getTranslateProperty()}(${relativeOffset}px)`;
511
+ this.activeIndicatorRef.classList.add("activeIndicatorTransition");
512
+ }
513
+ /**
514
+ * @internal
515
+ */
516
+ activeIndicatorRefChanged() {
517
+ this.activeIndicatorRef.addEventListener("transitionend", () => {
518
+ this.activeIndicatorRef.style[this.#getGridProperty()] = `${this.activeTabIndex + 1}`;
519
+ this.activeIndicatorRef.style.transform = `${this.#getTranslateProperty()}(0px)`;
520
+ this.activeIndicatorRef.classList.remove("activeIndicatorTransition");
521
+ });
496
522
  }
497
523
  }
498
524
  __decorateClass([
@@ -507,18 +533,23 @@ __decorateClass([
507
533
  __decorateClass([
508
534
  attr({ mode: "boolean", attribute: "scrollable-panel" })
509
535
  ], Tabs.prototype, "scrollablePanel");
536
+ __decorateClass([
537
+ observable
538
+ ], Tabs.prototype, "_actionItemsSlottedContent");
510
539
 
511
540
  const getClasses = ({
512
541
  connotation,
513
542
  orientation,
514
543
  gutters,
515
- scrollablePanel
544
+ scrollablePanel,
545
+ _actionItemsSlottedContent
516
546
  }) => classNames(
517
547
  "base",
518
548
  [`connotation-${connotation}`, Boolean(connotation)],
519
549
  [`orientation-${orientation}`, Boolean(orientation)],
520
550
  `gutters-${gutters ?? "small"}`,
521
- ["scroll", Boolean(scrollablePanel)]
551
+ ["scroll", Boolean(scrollablePanel)],
552
+ ["has-action-items", Boolean(_actionItemsSlottedContent.length)]
522
553
  );
523
554
  function setNoScrollState(scrollShadow, scrollWrapper) {
524
555
  if (scrollWrapper.scrollWidth <= scrollWrapper.clientWidth) {
@@ -550,21 +581,27 @@ function TabsTemplate() {
550
581
  return html`
551
582
  <template>
552
583
  <div class="${getClasses}">
553
- <div class="scroll-shadow">
554
- <div class="tablist-wrapper" @scroll="${setShadowWhenScrollTabs}">
555
- <div class="tablist" role="tablist" ${ref("tablist")}>
556
- <slot name="tab" ${slotted("tabs")}></slot>
557
- ${when(
584
+ <div class="tabs">
585
+ <div class="scroll-shadow">
586
+ <div class="tablist-wrapper" @scroll="${setShadowWhenScrollTabs}">
587
+ <div class="tablist" role="tablist" ${ref("tablist")}>
588
+ <slot name="tab" ${slotted("tabs")}></slot>
589
+ ${when(
558
590
  (x) => x.showActiveIndicator,
559
591
  html`
560
- <div
561
- ${ref("activeIndicatorRef")}
562
- class="active-indicator"
563
- ></div>
564
- `
592
+ <div
593
+ ${ref("activeIndicatorRef")}
594
+ class="active-indicator"
595
+ ></div>
596
+ `
565
597
  )}
598
+ </div>
566
599
  </div>
567
600
  </div>
601
+ <slot
602
+ name="action-items"
603
+ ${slotted("_actionItemsSlottedContent")}
604
+ ></slot>
568
605
  </div>
569
606
  <div class="tabpanel" part="tab-panel">
570
607
  <slot name="tabpanel" ${slotted("tabpanels")}></slot>
@@ -13,59 +13,57 @@ const when = require('./when.cjs');
13
13
  const slotted = require('./slotted.cjs');
14
14
  const classNames = require('./class-names.cjs');
15
15
 
16
- // Unique ID creation requires a high quality random # generator. In the browser we therefore
17
- // require the crypto API and do not support built-in fallback to lower quality random number
18
- // generators (like Math.random()).
16
+ const byteToHex = [];
17
+ for (let i = 0; i < 256; ++i) {
18
+ byteToHex.push((i + 0x100).toString(16).slice(1));
19
+ }
20
+ function unsafeStringify(arr, offset = 0) {
21
+ return (byteToHex[arr[offset + 0]] +
22
+ byteToHex[arr[offset + 1]] +
23
+ byteToHex[arr[offset + 2]] +
24
+ byteToHex[arr[offset + 3]] +
25
+ '-' +
26
+ byteToHex[arr[offset + 4]] +
27
+ byteToHex[arr[offset + 5]] +
28
+ '-' +
29
+ byteToHex[arr[offset + 6]] +
30
+ byteToHex[arr[offset + 7]] +
31
+ '-' +
32
+ byteToHex[arr[offset + 8]] +
33
+ byteToHex[arr[offset + 9]] +
34
+ '-' +
35
+ byteToHex[arr[offset + 10]] +
36
+ byteToHex[arr[offset + 11]] +
37
+ byteToHex[arr[offset + 12]] +
38
+ byteToHex[arr[offset + 13]] +
39
+ byteToHex[arr[offset + 14]] +
40
+ byteToHex[arr[offset + 15]]).toLowerCase();
41
+ }
42
+
19
43
  let getRandomValues;
20
44
  const rnds8 = new Uint8Array(16);
21
45
  function rng() {
22
- // lazy load so that environments that need to polyfill have a chance to do so
23
- if (!getRandomValues) {
24
- // getRandomValues needs to be invoked in a context where "this" is a Crypto implementation.
25
- getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto);
26
-
27
46
  if (!getRandomValues) {
28
- throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');
47
+ if (typeof crypto === 'undefined' || !crypto.getRandomValues) {
48
+ throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');
49
+ }
50
+ getRandomValues = crypto.getRandomValues.bind(crypto);
29
51
  }
30
- }
31
-
32
- return getRandomValues(rnds8);
33
- }
34
-
35
- /**
36
- * Convert array of 16 byte values to UUID string format of the form:
37
- * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
38
- */
39
-
40
- const byteToHex = [];
41
-
42
- for (let i = 0; i < 256; ++i) {
43
- byteToHex.push((i + 0x100).toString(16).slice(1));
44
- }
45
-
46
- function unsafeStringify(arr, offset = 0) {
47
- // Note: Be careful editing this code! It's been tuned for performance
48
- // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434
49
- return byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]];
52
+ return getRandomValues(rnds8);
50
53
  }
51
54
 
52
55
  const randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);
53
- const native = {
54
- randomUUID
55
- };
56
+ const native = { randomUUID };
56
57
 
57
58
  function v4(options, buf, offset) {
58
- if (native.randomUUID && !buf && !options) {
59
- return native.randomUUID();
60
- }
61
-
62
- options = options || {};
63
- const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`
64
-
65
- rnds[6] = rnds[6] & 0x0f | 0x40;
66
- rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided
67
-
68
- return unsafeStringify(rnds);
59
+ if (native.randomUUID && !buf && !options) {
60
+ return native.randomUUID();
61
+ }
62
+ options = options || {};
63
+ const rnds = options.random || (options.rng || rng)();
64
+ rnds[6] = (rnds[6] & 0x0f) | 0x40;
65
+ rnds[8] = (rnds[8] & 0x3f) | 0x80;
66
+ return unsafeStringify(rnds);
69
67
  }
70
68
 
71
69
  const generateRandomId = () => v4();
@@ -189,6 +187,7 @@ exports.TextField = class TextField extends textField.TextField {
189
187
  __privateGet(this, _reflectToInput).attribute("size", "size");
190
188
  __privateGet(this, _reflectToInput).attribute("autoComplete", "autocomplete");
191
189
  __privateGet(this, _reflectToInput).attribute("type", "type");
190
+ __privateGet(this, _reflectToInput).attribute("inputMode", "inputmode");
192
191
  __privateGet(this, _reflectToInput).attribute("ariaAtomic", "aria-atomic");
193
192
  __privateGet(this, _reflectToInput).attribute("ariaBusy", "aria-busy");
194
193
  __privateGet(this, _reflectToInput).attribute("ariaCurrent", "aria-current");
@@ -294,6 +293,9 @@ __decorateClass([
294
293
  __decorateClass([
295
294
  index.attr()
296
295
  ], exports.TextField.prototype, "scale", 2);
296
+ __decorateClass([
297
+ index.attr({ attribute: "inputmode" })
298
+ ], exports.TextField.prototype, "inputMode", 2);
297
299
  __decorateClass([
298
300
  index.observable
299
301
  ], exports.TextField.prototype, "actionItemsSlottedContent", 2);