@vonage/vivid 4.12.0 → 4.13.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 (124) hide show
  1. package/custom-elements.json +2339 -288
  2. package/lib/accordion/accordion.d.ts +21 -2
  3. package/lib/accordion-item/accordion-item.d.ts +6 -2
  4. package/lib/calendar/calendar.d.ts +1 -1
  5. package/lib/date-picker/date-picker.d.ts +1 -0
  6. package/lib/file-picker/file-picker.d.ts +6 -0
  7. package/lib/menu/menu.d.ts +16 -3
  8. package/lib/menu-item/menu-item.d.ts +10 -2
  9. package/lib/option/option.d.ts +27 -7
  10. package/lib/radio/radio.d.ts +12 -2
  11. package/lib/radio/radio.form-associated.d.ts +10 -0
  12. package/lib/radio-group/radio-group.d.ts +20 -2
  13. package/lib/switch/switch.d.ts +5 -2
  14. package/lib/switch/switch.form-associated.d.ts +10 -0
  15. package/lib/tab/tab.d.ts +3 -2
  16. package/lib/tab-panel/tab-panel.d.ts +2 -2
  17. package/lib/tabs/tabs.d.ts +33 -11
  18. package/lib/text-area/text-area.d.ts +25 -3
  19. package/lib/text-area/text-field.form-associated.d.ts +10 -0
  20. package/lib/text-field/text-field.d.ts +28 -3
  21. package/lib/text-field/text-field.form-associated.d.ts +10 -0
  22. package/package.json +1 -1
  23. package/shared/date-picker/date-picker-base.d.ts +1 -0
  24. package/shared/definition.cjs +29 -72
  25. package/shared/definition.js +30 -73
  26. package/shared/definition11.cjs +1 -1
  27. package/shared/definition11.js +1 -1
  28. package/shared/definition16.cjs +1 -2
  29. package/shared/definition16.js +1 -2
  30. package/shared/definition17.cjs +3 -3
  31. package/shared/definition17.js +3 -3
  32. package/shared/definition18.cjs +6 -1
  33. package/shared/definition18.js +6 -1
  34. package/shared/definition19.cjs +17 -8
  35. package/shared/definition19.js +17 -8
  36. package/shared/definition2.cjs +154 -187
  37. package/shared/definition2.js +157 -190
  38. package/shared/definition20.cjs +3 -2
  39. package/shared/definition20.js +3 -2
  40. package/shared/definition21.cjs +1 -1
  41. package/shared/definition21.js +1 -1
  42. package/shared/definition24.cjs +1 -1
  43. package/shared/definition24.js +1 -1
  44. package/shared/definition25.cjs +24 -3
  45. package/shared/definition25.js +24 -3
  46. package/shared/definition29.cjs +358 -559
  47. package/shared/definition29.js +359 -560
  48. package/shared/definition30.cjs +2 -0
  49. package/shared/definition30.js +2 -0
  50. package/shared/definition35.cjs +223 -3
  51. package/shared/definition35.js +223 -3
  52. package/shared/definition36.cjs +149 -14
  53. package/shared/definition36.js +150 -15
  54. package/shared/definition40.cjs +226 -399
  55. package/shared/definition40.js +229 -402
  56. package/shared/definition42.cjs +3 -2
  57. package/shared/definition42.js +3 -2
  58. package/shared/definition43.cjs +1 -0
  59. package/shared/definition43.js +1 -0
  60. package/shared/definition44.cjs +1 -1
  61. package/shared/definition44.js +1 -1
  62. package/shared/definition46.cjs +1 -1
  63. package/shared/definition46.js +1 -1
  64. package/shared/definition47.cjs +8 -16
  65. package/shared/definition47.js +4 -12
  66. package/shared/definition49.cjs +64 -89
  67. package/shared/definition49.js +66 -91
  68. package/shared/definition5.cjs +1 -1
  69. package/shared/definition5.js +1 -1
  70. package/shared/definition50.cjs +1 -11
  71. package/shared/definition50.js +1 -11
  72. package/shared/definition51.cjs +5 -15
  73. package/shared/definition51.js +6 -16
  74. package/shared/definition52.cjs +284 -20
  75. package/shared/definition52.js +288 -24
  76. package/shared/definition55.cjs +160 -180
  77. package/shared/definition55.js +160 -180
  78. package/shared/definition56.cjs +3 -307
  79. package/shared/definition56.js +5 -309
  80. package/shared/definition57.cjs +34 -11
  81. package/shared/definition57.js +30 -7
  82. package/shared/definition61.cjs +1 -1
  83. package/shared/definition61.js +1 -1
  84. package/shared/definition62.cjs +17 -8
  85. package/shared/definition62.js +17 -8
  86. package/shared/definition64.cjs +18 -7
  87. package/shared/definition64.js +19 -8
  88. package/shared/form-associated.cjs +1 -1
  89. package/shared/form-associated.js +1 -1
  90. package/shared/icon.cjs +1 -1
  91. package/shared/icon.js +1 -1
  92. package/shared/index.cjs +1 -0
  93. package/shared/index.js +1 -1
  94. package/shared/key-codes.cjs +1 -94
  95. package/shared/key-codes.js +2 -89
  96. package/shared/key-codes2.cjs +87 -1
  97. package/shared/key-codes2.js +83 -2
  98. package/shared/listbox.cjs +204 -10
  99. package/shared/listbox.js +200 -6
  100. package/shared/{direction.cjs → localization.cjs} +12 -3
  101. package/shared/{direction.js → localization.js} +12 -3
  102. package/shared/numbers.cjs +0 -12
  103. package/shared/numbers.js +1 -12
  104. package/shared/presentationDate.cjs +22 -8
  105. package/shared/presentationDate.js +16 -2
  106. package/shared/radio.cjs +92 -117
  107. package/shared/radio.js +93 -118
  108. package/shared/slider.template.cjs +2 -15
  109. package/shared/slider.template.js +2 -14
  110. package/shared/strings.cjs +26 -0
  111. package/shared/strings.js +25 -1
  112. package/shared/text-field2.cjs +538 -194
  113. package/shared/text-field2.js +539 -195
  114. package/styles/core/all.css +21 -1
  115. package/styles/core/theme.css +21 -1
  116. package/styles/core/typography.css +1 -1
  117. package/styles/tokens/theme-dark.css +4 -4
  118. package/styles/tokens/theme-light.css +4 -4
  119. package/styles/tokens/vivid-2-compat.css +1 -1
  120. package/vivid.api.json +44 -0
  121. package/shared/Reflector.cjs +0 -71
  122. package/shared/Reflector.js +0 -69
  123. package/shared/listbox-option.cjs +0 -204
  124. package/shared/listbox-option.js +0 -201
@@ -2,17 +2,7 @@
2
2
 
3
3
  const index = require('./index.cjs');
4
4
 
5
- /**
6
- * A TabPanel Component to be used with {@link @microsoft/fast-foundation#(Tabs:class)}
7
- *
8
- * @slot - The default slot for the tabpanel content
9
- *
10
- * @public
11
- */
12
- let TabPanel$1 = class TabPanel extends index.FoundationElement {
13
- };
14
-
15
- class TabPanel extends TabPanel$1 {
5
+ class TabPanel extends index.FoundationElement {
16
6
  }
17
7
 
18
8
  function TabPanelTemplate() {
@@ -1,16 +1,6 @@
1
1
  import { F as FoundationElement, h as html, r as registerFactory } from './index.js';
2
2
 
3
- /**
4
- * A TabPanel Component to be used with {@link @microsoft/fast-foundation#(Tabs:class)}
5
- *
6
- * @slot - The default slot for the tabpanel content
7
- *
8
- * @public
9
- */
10
- let TabPanel$1 = class TabPanel extends FoundationElement {
11
- };
12
-
13
- class TabPanel extends TabPanel$1 {
3
+ class TabPanel extends FoundationElement {
14
4
  }
15
5
 
16
6
  function TabPanelTemplate() {
@@ -7,20 +7,7 @@ const applyMixins = require('./apply-mixins.cjs');
7
7
  const localized = require('./localized.cjs');
8
8
  const classNames = require('./class-names.cjs');
9
9
 
10
- /**
11
- * A Tab Component to be used with {@link @microsoft/fast-foundation#(Tabs:class)}
12
- *
13
- * @slot - The default slot for the tab content
14
- *
15
- * @public
16
- */
17
- let Tab$1 = class Tab extends index.FoundationElement {
18
- };
19
- index.__decorate([
20
- index.attr({ mode: "boolean" })
21
- ], Tab$1.prototype, "disabled", void 0);
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}.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}";
10
+ 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;justify-content:var(--_tab-justify-content);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
11
 
25
12
  var __defProp = Object.defineProperty;
26
13
  var __decorateClass = (decorators, target, key, kind) => {
@@ -31,7 +18,7 @@ var __decorateClass = (decorators, target, key, kind) => {
31
18
  if (result) __defProp(target, key, result);
32
19
  return result;
33
20
  };
34
- class Tab extends Tab$1 {
21
+ class Tab extends index.FoundationElement {
35
22
  constructor() {
36
23
  super(...arguments);
37
24
  this.removable = false;
@@ -49,6 +36,9 @@ class Tab extends Tab$1 {
49
36
  return false;
50
37
  }
51
38
  }
39
+ __decorateClass([
40
+ index.attr({ mode: "boolean" })
41
+ ], Tab.prototype, "disabled");
52
42
  __decorateClass([
53
43
  index.attr
54
44
  ], Tab.prototype, "connotation");
@@ -1,24 +1,11 @@
1
- import { F as FoundationElement, _ as __decorate, a as attr, h as html, r as registerFactory } from './index.js';
1
+ import { F as FoundationElement, a as attr, h as html, r as registerFactory } from './index.js';
2
2
  import { a as iconRegistries } from './definition27.js';
3
3
  import { b as AffixIconWithTrailing, a as affixIconTemplateFactory, I as IconWrapper } from './affix.js';
4
4
  import { a as applyMixins } from './apply-mixins.js';
5
5
  import { L as Localized } from './localized.js';
6
6
  import { c as classNames } from './class-names.js';
7
7
 
8
- /**
9
- * A Tab Component to be used with {@link @microsoft/fast-foundation#(Tabs:class)}
10
- *
11
- * @slot - The default slot for the tab content
12
- *
13
- * @public
14
- */
15
- let Tab$1 = class Tab extends FoundationElement {
16
- };
17
- __decorate([
18
- attr({ mode: "boolean" })
19
- ], Tab$1.prototype, "disabled", void 0);
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}.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}";
8
+ 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;justify-content:var(--_tab-justify-content);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
9
 
23
10
  var __defProp = Object.defineProperty;
24
11
  var __decorateClass = (decorators, target, key, kind) => {
@@ -29,7 +16,7 @@ var __decorateClass = (decorators, target, key, kind) => {
29
16
  if (result) __defProp(target, key, result);
30
17
  return result;
31
18
  };
32
- class Tab extends Tab$1 {
19
+ class Tab extends FoundationElement {
33
20
  constructor() {
34
21
  super(...arguments);
35
22
  this.removable = false;
@@ -47,6 +34,9 @@ class Tab extends Tab$1 {
47
34
  return false;
48
35
  }
49
36
  }
37
+ __decorateClass([
38
+ attr({ mode: "boolean" })
39
+ ], Tab.prototype, "disabled");
50
40
  __decorateClass([
51
41
  attr
52
42
  ], Tab.prototype, "connotation");
@@ -3,9 +3,10 @@
3
3
  const index = require('./index.cjs');
4
4
  const definition = require('./definition51.cjs');
5
5
  const definition$1 = require('./definition50.cjs');
6
+ const keyCodes$1 = require('./key-codes.cjs');
6
7
  const startEnd = require('./start-end.cjs');
7
8
  const applyMixins = require('./apply-mixins.cjs');
8
- const keyCodes = require('./key-codes.cjs');
9
+ const keyCodes = require('./key-codes2.cjs');
9
10
  const strings = require('./strings.cjs');
10
11
  const numbers = require('./numbers.cjs');
11
12
  const ref = require('./ref.cjs');
@@ -340,7 +341,7 @@ let Tabs$1 = class Tabs extends index.FoundationElement {
340
341
  adjust(adjustment) {
341
342
  const focusableTabs = this.tabs.filter(t => this.isFocusableElement(t));
342
343
  const currentActiveTabIndex = focusableTabs.indexOf(this.activetab);
343
- const nextTabIndex = numbers.limit(0, focusableTabs.length - 1, currentActiveTabIndex + adjustment);
344
+ const nextTabIndex = strings.limit(0, focusableTabs.length - 1, currentActiveTabIndex + adjustment);
344
345
  // the index of the next focusable tab within the context of all available tabs
345
346
  const nextIndex = this.tabs.indexOf(focusableTabs[nextTabIndex]);
346
347
  if (nextIndex > -1) {
@@ -383,7 +384,15 @@ index.__decorate([
383
384
  ], Tabs$1.prototype, "showActiveIndicator", void 0);
384
385
  applyMixins.applyMixins(Tabs$1, startEnd.StartEnd);
385
386
 
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
+ let uniqueIdCounter = 0;
388
+ /**
389
+ * Generates a unique ID based on incrementing a counter.
390
+ */
391
+ function uniqueId(prefix = "") {
392
+ return `${prefix}${uniqueIdCounter++}`;
393
+ }
394
+
395
+ 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.layout-stretch .scroll-shadow{flex:1}.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.layout-stretch .tablist{--_tab-justify-content: center;--_tabs-tablist-column: 1fr}.tablist .base:not(.layout-stretch){--_tabs-tablist-column: auto}.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-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}.tablist-wrapper{--scrollbar-track-color: transparent;--scrollbar-thumb-color: color-mix(in srgb, var(--vvd-color-neutral-950), transparent 70%)}.tablist-wrapper{scrollbar-color:var(--scrollbar-thumb-color) var(--scrollbar-track-color);scrollbar-width:thin}.tablist-wrapper ::-webkit-scrollbar{width:4px}.tablist-wrapper ::-webkit-scrollbar-track{background:var(--scrollbar-track-color)}.tablist-wrapper ::-webkit-scrollbar-thumb{border:0;border-radius:4px;background-color:var(--scrollbar-thumb-color)}.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;--scrollbar-track-color: transparent;--scrollbar-thumb-color: color-mix(in srgb, var(--vvd-color-neutral-950), transparent 70%)}.base.scroll .tabpanel{scrollbar-color:var(--scrollbar-thumb-color) var(--scrollbar-track-color);scrollbar-width:thin}.base.scroll .tabpanel ::-webkit-scrollbar{width:4px}.base.scroll .tabpanel ::-webkit-scrollbar-track{background:var(--scrollbar-track-color)}.base.scroll .tabpanel ::-webkit-scrollbar-thumb{border:0;border-radius:4px;background-color:var(--scrollbar-thumb-color)}.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
396
 
388
397
  var __defProp = Object.defineProperty;
389
398
  var __decorateClass = (decorators, target, key, kind) => {
@@ -395,43 +404,269 @@ var __decorateClass = (decorators, target, key, kind) => {
395
404
  return result;
396
405
  };
397
406
  const ACTIVE_TAB_WIDTH = "--_tabs-active-tab-inline-size";
398
- class Tabs extends Tabs$1 {
407
+ const TABLIST_COLUMN = "--_tabs-tablist-column";
408
+ class Tabs extends index.FoundationElement {
399
409
  constructor() {
400
- super();
410
+ super(...arguments);
411
+ // eslint-disable-next-line @nrwl/nx/workspace/no-attribute-default-value
412
+ this.orientation = TabsOrientation.horizontal;
413
+ // eslint-disable-next-line @nrwl/nx/workspace/no-attribute-default-value
414
+ this.activeindicator = true;
415
+ this.showActiveIndicator = true;
416
+ this.prevActiveTabIndex = 0;
417
+ this.activeTabIndex = 0;
418
+ this.tabIds = [];
419
+ this.tabpanelIds = [];
420
+ this.change = () => {
421
+ this.$emit("change", this.activetab);
422
+ };
423
+ this.isDisabledElement = (el) => {
424
+ return el.getAttribute("aria-disabled") === "true";
425
+ };
426
+ this.isHiddenElement = (el) => {
427
+ return el.hasAttribute("hidden");
428
+ };
429
+ this.isFocusableElement = (el) => {
430
+ return !this.isDisabledElement(el) && !this.isHiddenElement(el);
431
+ };
432
+ this.setTabs = () => {
433
+ const gridHorizontalProperty = "gridColumn";
434
+ const gridVerticalProperty = "gridRow";
435
+ const gridProperty = this.isHorizontal() ? gridHorizontalProperty : gridVerticalProperty;
436
+ this.activeTabIndex = this.getActiveIndex();
437
+ this.showActiveIndicator = false;
438
+ if (this.isHorizontal()) {
439
+ this.tablist.style.setProperty(
440
+ "grid-template-columns",
441
+ `repeat(${this.tabs.length}, var(${TABLIST_COLUMN}))`
442
+ );
443
+ } else {
444
+ this.tablist.style.removeProperty("grid-template-columns");
445
+ }
446
+ this.tabs.forEach((tab, index) => {
447
+ if (tab.slot === "tab") {
448
+ const isActiveTab = this.activeTabIndex === index && this.isFocusableElement(tab);
449
+ if (this.activeindicator && this.isFocusableElement(tab)) {
450
+ this.showActiveIndicator = true;
451
+ }
452
+ const tabId = this.tabIds[index];
453
+ const tabpanelId = this.tabpanelIds[index];
454
+ tab.setAttribute("id", tabId);
455
+ tab.setAttribute("aria-selected", isActiveTab ? "true" : "false");
456
+ tab.setAttribute("aria-controls", tabpanelId);
457
+ tab.addEventListener("click", this.handleTabClick);
458
+ tab.addEventListener("keydown", this.handleTabKeyDown);
459
+ tab.setAttribute("tabindex", isActiveTab ? "0" : "-1");
460
+ if (isActiveTab) {
461
+ this.activetab = tab;
462
+ this.activeid = tabId;
463
+ }
464
+ }
465
+ tab.style[gridHorizontalProperty] = "";
466
+ tab.style[gridVerticalProperty] = "";
467
+ tab.style[gridProperty] = `${index + 1}`;
468
+ !this.isHorizontal() ? tab.classList.add("vertical") : tab.classList.remove("vertical");
469
+ });
470
+ };
471
+ this.setTabPanels = () => {
472
+ this.tabpanels.forEach((tabpanel, index) => {
473
+ const tabId = this.tabIds[index];
474
+ const tabpanelId = this.tabpanelIds[index];
475
+ tabpanel.setAttribute("id", tabpanelId);
476
+ tabpanel.setAttribute("aria-labelledby", tabId);
477
+ this.activeTabIndex !== index ? tabpanel.setAttribute("hidden", "") : tabpanel.removeAttribute("hidden");
478
+ });
479
+ };
480
+ this.handleTabClick = (event) => {
481
+ const selectedTab = event.currentTarget;
482
+ if (selectedTab.nodeType === 1 && this.isFocusableElement(selectedTab)) {
483
+ this.prevActiveTabIndex = this.activeTabIndex;
484
+ this.activeTabIndex = this.tabs.indexOf(selectedTab);
485
+ this.setComponent();
486
+ }
487
+ };
488
+ this.handleTabKeyDown = (event) => {
489
+ if (this.isHorizontal()) {
490
+ switch (event.key) {
491
+ case keyCodes$1.keyArrowLeft:
492
+ event.preventDefault();
493
+ this.adjustBackward(event);
494
+ break;
495
+ case keyCodes$1.keyArrowRight:
496
+ event.preventDefault();
497
+ this.adjustForward(event);
498
+ break;
499
+ }
500
+ } else {
501
+ switch (event.key) {
502
+ case keyCodes$1.keyArrowUp:
503
+ event.preventDefault();
504
+ this.adjustBackward(event);
505
+ break;
506
+ case keyCodes$1.keyArrowDown:
507
+ event.preventDefault();
508
+ this.adjustForward(event);
509
+ break;
510
+ }
511
+ }
512
+ switch (event.key) {
513
+ case keyCodes$1.keyHome:
514
+ event.preventDefault();
515
+ this.adjust(-this.activeTabIndex);
516
+ break;
517
+ case keyCodes$1.keyEnd:
518
+ event.preventDefault();
519
+ this.adjust(this.tabs.length - this.activeTabIndex - 1);
520
+ break;
521
+ }
522
+ };
523
+ this.adjustForward = (_) => {
524
+ this.#moveToNextTab(1);
525
+ };
526
+ this.adjustBackward = (_) => {
527
+ this.#moveToNextTab(-1);
528
+ };
529
+ this.moveToTabByIndex = (group, index) => {
530
+ const tab = group[index];
531
+ this.activetab = tab;
532
+ this.prevActiveTabIndex = this.activeTabIndex;
533
+ this.activeTabIndex = index;
534
+ tab.focus();
535
+ this.setComponent();
536
+ };
401
537
  this.scrollablePanel = false;
402
538
  this._actionItemsSlottedContent = [];
403
- this.handleActiveIndicatorPosition = () => this.#handleActiveIndicatorPosition();
404
- this.animateActiveIndicator = () => this.#animateActiveIndicator();
405
- }
406
- connotationChanged() {
407
- this.#updateTabsConnotation();
408
539
  }
540
+ /**
541
+ * @internal
542
+ */
409
543
  orientationChanged() {
410
- super.orientationChanged();
544
+ if (this.$fastController.isConnected) {
545
+ this.setTabs();
546
+ this.setTabPanels();
547
+ this.handleActiveIndicatorPosition();
548
+ }
411
549
  this.patchIndicatorStyleTransition();
412
550
  if (!this.activeIndicatorRef) return;
413
551
  if (this.orientation === TabsOrientation.vertical) {
414
552
  this.activeIndicatorRef.style.removeProperty(ACTIVE_TAB_WIDTH);
415
553
  }
416
554
  }
417
- activeidChanged(oldValue, newValue) {
418
- super.activeidChanged(oldValue, newValue);
555
+ /**
556
+ * @internal
557
+ */
558
+ activeidChanged(oldValue, _) {
559
+ if (this.$fastController.isConnected && this.tabs.length <= this.tabpanels.length) {
560
+ this.prevActiveTabIndex = this.tabs.findIndex(
561
+ (item) => item.id === oldValue
562
+ );
563
+ this.setTabs();
564
+ this.setTabPanels();
565
+ this.handleActiveIndicatorPosition();
566
+ }
419
567
  this.patchIndicatorStyleTransition();
420
568
  this.#updateTabsConnotation();
421
569
  this.#scrollToIndex(this.activeTabIndex);
422
570
  }
571
+ /**
572
+ * @internal
573
+ */
423
574
  tabsChanged() {
424
- super.tabsChanged();
575
+ if (this.$fastController.isConnected && this.tabs.length <= this.tabpanels.length) {
576
+ this.tabIds = this.getTabIds();
577
+ this.tabpanelIds = this.getTabPanelIds();
578
+ this.setTabs();
579
+ this.setTabPanels();
580
+ this.handleActiveIndicatorPosition();
581
+ }
425
582
  this.patchIndicatorStyleTransition();
426
583
  this.#updateScrollStatus();
427
584
  }
428
- #updateScrollStatus() {
429
- this.tablist.parentElement.dispatchEvent(new Event("scroll"));
430
- }
585
+ /**
586
+ * @internal
587
+ */
431
588
  tabpanelsChanged() {
432
- super.tabpanelsChanged();
589
+ if (this.$fastController.isConnected && this.tabpanels.length <= this.tabs.length) {
590
+ this.tabIds = this.getTabIds();
591
+ this.tabpanelIds = this.getTabPanelIds();
592
+ this.setTabs();
593
+ this.setTabPanels();
594
+ this.handleActiveIndicatorPosition();
595
+ }
433
596
  this.patchIndicatorStyleTransition();
434
597
  }
598
+ getActiveIndex() {
599
+ const id = this.activeid;
600
+ if (id !== void 0) {
601
+ return this.tabIds.indexOf(this.activeid) === -1 ? 0 : this.tabIds.indexOf(this.activeid);
602
+ } else {
603
+ return 0;
604
+ }
605
+ }
606
+ getTabIds() {
607
+ return this.tabs.map((tab) => {
608
+ return tab.getAttribute("id") ?? `tab-${uniqueId()}`;
609
+ });
610
+ }
611
+ getTabPanelIds() {
612
+ return this.tabpanels.map((tabPanel) => {
613
+ return tabPanel.getAttribute("id") ?? `panel-${uniqueId()}`;
614
+ });
615
+ }
616
+ setComponent() {
617
+ if (this.activeTabIndex !== this.prevActiveTabIndex) {
618
+ this.activeid = this.tabIds[this.activeTabIndex];
619
+ this.focusTab();
620
+ this.change();
621
+ }
622
+ }
623
+ isHorizontal() {
624
+ return this.orientation === TabsOrientation.horizontal;
625
+ }
626
+ /**
627
+ * The adjust method for FASTTabs
628
+ * @public
629
+ * @remarks
630
+ * This method allows the active index to be adjusted by numerical increments
631
+ */
632
+ adjust(adjustment) {
633
+ const focusableTabs = this.tabs.filter((t) => this.isFocusableElement(t));
634
+ const currentActiveTabIndex = focusableTabs.indexOf(this.activetab);
635
+ const nextTabIndex = numbers.limit(
636
+ 0,
637
+ focusableTabs.length - 1,
638
+ currentActiveTabIndex + adjustment
639
+ );
640
+ const nextIndex = this.tabs.indexOf(focusableTabs[nextTabIndex]);
641
+ if (nextIndex > -1) {
642
+ this.moveToTabByIndex(this.tabs, nextIndex);
643
+ }
644
+ }
645
+ #moveToNextTab(direction) {
646
+ const activeIndex = this.tabs.indexOf(this.activetab);
647
+ for (let offset = 1; offset < this.tabs.length; offset++) {
648
+ const index = (activeIndex + direction * offset + this.tabs.length) % this.tabs.length;
649
+ if (this.isFocusableElement(this.tabs[index])) {
650
+ this.moveToTabByIndex(this.tabs, index);
651
+ break;
652
+ }
653
+ }
654
+ }
655
+ focusTab() {
656
+ this.tabs[this.activeTabIndex].focus();
657
+ }
658
+ /**
659
+ * @internal
660
+ */
661
+ connotationChanged() {
662
+ this.#updateTabsConnotation();
663
+ }
664
+ #updateScrollStatus() {
665
+ this.tablist.parentElement.dispatchEvent(new Event("scroll"));
666
+ }
667
+ /**
668
+ * @internal
669
+ */
435
670
  patchIndicatorStyleTransition() {
436
671
  if (!this.activetab || !this.activeIndicatorRef) return;
437
672
  if (this.orientation === TabsOrientation.vertical || !this.showActiveIndicator)
@@ -441,6 +676,9 @@ class Tabs extends Tabs$1 {
441
676
  }
442
677
  connectedCallback() {
443
678
  super.connectedCallback();
679
+ this.tabIds = this.getTabIds();
680
+ this.tabpanelIds = this.getTabPanelIds();
681
+ this.activeTabIndex = this.getActiveIndex();
444
682
  requestAnimationFrame(() => this.#updateScrollStatus());
445
683
  const scrollWrapper = this.tablist.parentElement;
446
684
  this.#resizeObserver = new ResizeObserver(() => {
@@ -496,12 +734,12 @@ class Tabs extends Tabs$1 {
496
734
  #getTranslateProperty() {
497
735
  return this.isHorizontal() ? "translateX" : "translateY";
498
736
  }
499
- #handleActiveIndicatorPosition() {
737
+ handleActiveIndicatorPosition() {
500
738
  if (this.showActiveIndicator && this.activeindicator) {
501
739
  this.animateActiveIndicator();
502
740
  }
503
741
  }
504
- #animateActiveIndicator() {
742
+ animateActiveIndicator() {
505
743
  const offsetProperty = this.isHorizontal() ? "offsetLeft" : "offsetTop";
506
744
  const currentOffset = this.activeIndicatorRef[offsetProperty];
507
745
  const currentGridValue = this.activeIndicatorRef.style[this.#getGridProperty()];
@@ -523,6 +761,27 @@ class Tabs extends Tabs$1 {
523
761
  });
524
762
  }
525
763
  }
764
+ __decorateClass([
765
+ index.attr
766
+ ], Tabs.prototype, "orientation");
767
+ __decorateClass([
768
+ index.attr
769
+ ], Tabs.prototype, "activeid");
770
+ __decorateClass([
771
+ index.observable
772
+ ], Tabs.prototype, "tabs");
773
+ __decorateClass([
774
+ index.observable
775
+ ], Tabs.prototype, "tabpanels");
776
+ __decorateClass([
777
+ index.attr({ mode: "boolean" })
778
+ ], Tabs.prototype, "activeindicator");
779
+ __decorateClass([
780
+ index.observable
781
+ ], Tabs.prototype, "activeIndicatorRef");
782
+ __decorateClass([
783
+ index.observable
784
+ ], Tabs.prototype, "showActiveIndicator");
526
785
  __decorateClass([
527
786
  index.observable
528
787
  ], Tabs.prototype, "tablist");
@@ -535,6 +794,9 @@ __decorateClass([
535
794
  __decorateClass([
536
795
  index.attr({ mode: "boolean", attribute: "scrollable-panel" })
537
796
  ], Tabs.prototype, "scrollablePanel");
797
+ __decorateClass([
798
+ index.attr({ attribute: "tabs-layout" })
799
+ ], Tabs.prototype, "tabsLayout");
538
800
  __decorateClass([
539
801
  index.observable
540
802
  ], Tabs.prototype, "_actionItemsSlottedContent");
@@ -544,9 +806,11 @@ const getClasses = ({
544
806
  orientation,
545
807
  gutters,
546
808
  scrollablePanel,
809
+ tabsLayout,
547
810
  _actionItemsSlottedContent
548
811
  }) => classNames.classNames(
549
812
  "base",
813
+ `layout-${tabsLayout ?? "align-start"}`,
550
814
  [`connotation-${connotation}`, Boolean(connotation)],
551
815
  [`orientation-${orientation}`, Boolean(orientation)],
552
816
  `gutters-${gutters ?? "small"}`,