@vonage/vivid 4.28.0 → 4.30.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 (92) hide show
  1. package/custom-elements.json +707 -86
  2. package/lib/accordion-item/accordion-item.d.ts +3 -1
  3. package/lib/audio-player/audio-player.d.ts +4 -3
  4. package/lib/data-grid/data-grid.d.ts +2 -0
  5. package/lib/data-grid/locale.d.ts +1 -0
  6. package/lib/date-picker/date-picker.d.ts +4 -2
  7. package/lib/date-time-picker/date-time-picker.d.ts +6 -3
  8. package/lib/divider/definition.d.ts +1 -0
  9. package/lib/divider/divider.d.ts +5 -1
  10. package/lib/option/option.d.ts +4 -7
  11. package/lib/rich-text-editor/facades/prose-mirror-vivid.schema.d.ts +2 -1
  12. package/lib/rich-text-editor/facades/vivid-prose-mirror.facade.d.ts +2 -2
  13. package/lib/rich-text-editor/image-placeholder/definition.d.ts +2 -0
  14. package/lib/rich-text-editor/image-placeholder/image-placeholder.d.ts +7 -0
  15. package/lib/rich-text-editor/image-placeholder/image-placeholder.template.d.ts +4 -0
  16. package/lib/rich-text-editor/menubar/consts.d.ts +2 -2
  17. package/lib/rich-text-editor/menubar/definition.d.ts +2 -2
  18. package/lib/rich-text-editor/menubar/menubar.d.ts +2 -2
  19. package/lib/rich-text-editor/menubar/menubar.template.d.ts +2 -2
  20. package/lib/rich-text-editor/rich-text-editor.d.ts +1 -0
  21. package/lib/selectable-box/selectable-box.d.ts +2 -0
  22. package/lib/split-button/split-button.d.ts +1 -1
  23. package/lib/tag/tag.d.ts +1 -1
  24. package/lib/time-picker/time-picker.d.ts +4 -2
  25. package/locales/de-DE.cjs +2 -1
  26. package/locales/de-DE.js +2 -1
  27. package/locales/en-GB.cjs +2 -1
  28. package/locales/en-GB.js +2 -1
  29. package/locales/en-US.cjs +2 -1
  30. package/locales/en-US.js +2 -1
  31. package/locales/ja-JP.cjs +2 -1
  32. package/locales/ja-JP.js +2 -1
  33. package/locales/zh-CN.cjs +2 -1
  34. package/locales/zh-CN.js +2 -1
  35. package/package.json +2 -1
  36. package/shared/calendar-picker.template.cjs +6 -5
  37. package/shared/calendar-picker.template.js +6 -5
  38. package/shared/definition.cjs +11 -2
  39. package/shared/definition.js +11 -2
  40. package/shared/definition16.cjs +33 -30
  41. package/shared/definition16.js +33 -30
  42. package/shared/definition17.cjs +137 -1
  43. package/shared/definition17.js +138 -2
  44. package/shared/definition23.cjs +12 -7
  45. package/shared/definition23.js +12 -7
  46. package/shared/definition28.cjs +1 -2
  47. package/shared/definition28.js +2 -2
  48. package/shared/definition36.cjs +1 -1
  49. package/shared/definition36.js +1 -1
  50. package/shared/definition44.cjs +194 -77
  51. package/shared/definition44.js +194 -77
  52. package/shared/definition45.cjs +12 -5
  53. package/shared/definition45.js +12 -5
  54. package/shared/definition47.cjs +11 -5
  55. package/shared/definition47.js +11 -5
  56. package/shared/definition5.cjs +86 -30
  57. package/shared/definition5.js +86 -30
  58. package/shared/definition50.cjs +1 -1
  59. package/shared/definition50.js +1 -1
  60. package/shared/definition56.cjs +1 -1
  61. package/shared/definition56.js +1 -1
  62. package/shared/definition58.cjs +10 -29
  63. package/shared/definition58.js +12 -31
  64. package/shared/definition61.cjs +11 -0
  65. package/shared/definition61.js +11 -0
  66. package/shared/definition64.cjs +1 -1
  67. package/shared/definition64.js +1 -1
  68. package/shared/definition67.cjs +27 -16
  69. package/shared/definition67.js +27 -16
  70. package/shared/divider.cjs +7 -2
  71. package/shared/divider.js +7 -2
  72. package/shared/option.cjs +36 -38
  73. package/shared/option.js +37 -39
  74. package/shared/picker-field/mixins/single-date-picker.d.ts +4 -2
  75. package/shared/picker-field/mixins/single-value-picker.d.ts +2 -1
  76. package/shared/picker-field/mixins/time-selection-picker.d.ts +4 -2
  77. package/shared/picker-field/mixins/time-selection-picker.template.d.ts +4 -2
  78. package/shared/single-value-picker.cjs +40 -6
  79. package/shared/single-value-picker.js +40 -6
  80. package/shared/text-field.cjs +1 -1
  81. package/shared/text-field.js +1 -1
  82. package/shared/time-selection-picker.template.cjs +2 -2
  83. package/shared/time-selection-picker.template.js +2 -2
  84. package/shared/vivid-element.cjs +2 -1
  85. package/shared/vivid-element.js +2 -2
  86. package/styles/core/all.css +1 -1
  87. package/styles/core/theme.css +1 -1
  88. package/styles/core/typography.css +1 -1
  89. package/styles/tokens/theme-dark.css +4 -4
  90. package/styles/tokens/theme-light.css +4 -4
  91. package/styles/tokens/vivid-2-compat.css +1 -1
  92. package/vivid.api.json +294 -129
@@ -4,10 +4,11 @@ const vividElement = require('./vivid-element.cjs');
4
4
  const definition = require('./definition28.cjs');
5
5
  const affix = require('./affix.cjs');
6
6
  const ref = require('./ref.cjs');
7
+ const classNames = require('./class-names.cjs');
7
8
  const slotted = require('./slotted.cjs');
8
9
  const when = require('./when.cjs');
9
10
 
10
- const styles = ":host{--_vvd-accordion-item-accent-firm-wrapper: var( --vvd-accordion-item-accent-firm )}.heading-button{--vvd-accordion-item-accent-firm: var( --_vvd-accordion-item-accent-firm-wrapper, var(--vvd-accordion-item-accent-primary) )}:host{display:flex;box-sizing:border-box;flex-direction:column}.heading-container{margin:0}.heading-button{--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: transparent;--_appearance-color-outline: transparent}.heading-button: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}.heading-button: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}.heading-button{--_connotation-color-faint: var(--vvd-accordion-item-accent-faint, var(--vvd-color-neutral-50));--_connotation-color-soft: var(--vvd-accordion-item-accent-soft, var(--vvd-color-neutral-100));--_connotation-color-firm: var(--vvd-accordion-item-accent-firm, var(--vvd-color-canvas-text))}.heading-button{--focus-stroke-gap-color: transparent;display:flex;width:100%;align-items:center;padding:16px;border:none;background-color:var(--_appearance-color-fill);color:var(--_appearance-color-text);cursor:pointer;text-align:left}.heading-button:focus-visible{box-shadow:0 0 0 4px color-mix(in srgb,var(--vvd-color-cta-500),transparent 85%),inset 0 0 0 3px var(--focus-stroke-gap-color, currentColor);outline:1px solid var(--focus-stroke-color, var(--vvd-color-cta-500));outline-offset:calc(-1px - var(--focus-inset, 0px))}.heading-button.size-condensed{font:var(--vvd-typography-base-extended-bold);gap:12px}.heading-button:not(.size-condensed){font:var(--vvd-typography-heading-4);gap:16px}.heading-content{flex:auto}.meta{overflow:hidden;max-width:var(--accordion-item-meta-inline-size, 20%);flex-shrink:0;color:var(--vvd-color-neutral-600);text-align:end;text-overflow:ellipsis;white-space:nowrap}.heading-button:not(.size-condensed) .meta{font:var(--vvd-typography-base-bold)}.heading-button.size-condensed .meta{font:var(--vvd-typography-base-condensed-bold)}.region{display:none;padding:8px 32px 24px 16px}.region:not(.size-condensed).padded{padding-inline-start:52px}:host([expanded]) .region{display:block}.region.size-condensed.padded{padding-inline-start:44px}slot[name=icon]{color:var(--vvd-color-neutral-600)}.heading-button:not(.size-condensed) slot[name=icon]{font:inherit}.heading-button.size-condensed slot[name=icon]{font:var(--vvd-typography-base-extended)}:host(:not([icon-trailing])) slot[name=icon]:last-of-type{color:var(--_appearance-color-text)}";
11
+ const styles = ":host{--_vvd-accordion-item-accent-firm-wrapper: var( --vvd-accordion-item-accent-firm )}.heading-button{--vvd-accordion-item-accent-firm: var( --_vvd-accordion-item-accent-firm-wrapper, var(--vvd-accordion-item-accent-primary) )}:host{display:flex;box-sizing:border-box;flex-direction:column}.heading-container{margin:0}.heading-button,.heading-button.appearance-ghost-light{--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: transparent;--_appearance-color-outline: transparent}.heading-button.appearance-filled{--_appearance-color-text: var(--_connotation-color-primary-text);--_appearance-color-fill: var(--_connotation-color-primary);--_appearance-color-outline: transparent}.heading-button: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}.heading-button:where(.hover,:hover):where(:not(.disabled,:disabled,.readonly)).appearance-ghost-light{--_appearance-color-text: var(--_connotation-color-fierce-primary);--_appearance-color-fill: color-mix(in srgb, var(--_connotation-color-primary), transparent 90%);--_appearance-color-outline: transparent}.heading-button:where(.hover,:hover):where(:not(.disabled,:disabled,.readonly)).appearance-filled{--_appearance-color-text: var(--_connotation-color-primary-text);--_appearance-color-fill: var(--_connotation-color-primary-increment);--_appearance-color-outline: transparent}.heading-button: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}.heading-button:where(.active,:active):where(:not(.disabled,:disabled)).appearance-ghost-light{--_appearance-color-text: var(--_connotation-color-fierce-primary);--_appearance-color-fill: color-mix(in srgb, var(--_connotation-color-primary), transparent 80%);--_appearance-color-outline: transparent}.heading-button:where(.active,:active):where(:not(.disabled,:disabled)).appearance-filled{--_appearance-color-text: var(--_connotation-color-primary-text);--_appearance-color-fill: var(--_connotation-color-fierce);--_appearance-color-outline: transparent}.heading-button{--_connotation-color-primary: var(--vvd-accordion-item-accent-primary, var(--vvd-color-canvas-text));--_connotation-color-primary-text: var(--vvd-accordion-item-accent-primary-text, var(--vvd-color-canvas));--_connotation-color-primary-increment: var(--vvd-accordion-item-accent-primary-increment, var(--vvd-color-neutral-800));--_connotation-color-fierce: var(--vvd-accordion-item-accent-fierce, var(--vvd-color-neutral-700));--_connotation-color-faint: var(--vvd-accordion-item-accent-faint, var(--vvd-color-neutral-50));--_connotation-color-soft: var(--vvd-accordion-item-accent-soft, var(--vvd-color-neutral-100));--_connotation-color-firm: var(--vvd-accordion-item-accent-firm, var(--vvd-color-canvas-text))}.heading-button{--focus-stroke-gap-color: transparent;display:flex;width:100%;align-items:center;padding:16px;border:none;background-color:var(--_appearance-color-fill);color:var(--_appearance-color-text);cursor:pointer;text-align:left}.heading-button:focus-visible{box-shadow:0 0 0 4px color-mix(in srgb,var(--vvd-color-cta-500),transparent 85%),inset 0 0 0 3px var(--focus-stroke-gap-color, currentColor);outline:1px solid var(--focus-stroke-color, var(--vvd-color-cta-500));outline-offset:calc(-1px - var(--focus-inset, 0px))}.heading-button.size-condensed{font:var(--vvd-typography-base-extended-bold);gap:12px}.heading-button:not(.size-condensed){font:var(--vvd-typography-heading-4);gap:16px}.heading-content{flex:auto}.meta{overflow:hidden;max-width:var(--accordion-item-meta-inline-size, 20%);flex-shrink:0;color:var(--vvd-color-neutral-600);text-align:end;text-overflow:ellipsis;white-space:nowrap}.heading-button:not(.size-condensed) .meta{font:var(--vvd-typography-base-bold)}.heading-button.size-condensed .meta{font:var(--vvd-typography-base-condensed-bold)}.region{display:none;padding:8px 32px 24px 16px}.region:not(.size-condensed).padded{padding-inline-start:52px}:host([expanded]) .region{display:block}.region.size-condensed.padded{padding-inline-start:44px}slot[name=icon]{color:var(--vvd-color-neutral-600)}.heading-button:not(.size-condensed) slot[name=icon]{font:inherit}.heading-button.size-condensed slot[name=icon]{font:var(--vvd-typography-base-extended)}:host(:not([icon-trailing])) slot[name=icon]:last-of-type{color:var(--_appearance-color-text)}";
11
12
 
12
13
  var __defProp = Object.defineProperty;
13
14
  var __decorateClass = (decorators, target, key, kind) => {
@@ -43,6 +44,9 @@ __decorateClass([
43
44
  converter: vividElement.nullableNumberConverter
44
45
  })
45
46
  ], AccordionItem.prototype, "headinglevel");
47
+ __decorateClass([
48
+ vividElement.attr
49
+ ], AccordionItem.prototype, "appearance");
46
50
  __decorateClass([
47
51
  vividElement.attr({ mode: "boolean" })
48
52
  ], AccordionItem.prototype, "expanded");
@@ -69,12 +73,17 @@ __decorateClass([
69
73
  vividElement.attr
70
74
  ], AccordionItem.prototype, "size");
71
75
 
76
+ const getClasses = ({ appearance, size }) => classNames.classNames(
77
+ "heading-button",
78
+ [`appearance-${appearance}`, Boolean(appearance)],
79
+ [`size-${size}`, Boolean(size)]
80
+ );
72
81
  const header = (context, hTag) => {
73
82
  const affixIconTemplate = affix.affixIconTemplateFactory(context);
74
83
  return vividElement.html`
75
84
  <${hTag} class="heading-container">
76
85
  <button
77
- class="heading-button ${(x) => x.size ? `size-${x.size}` : ""}"
86
+ class="${getClasses}"
78
87
  id="${(x) => x.id}"
79
88
  aria-expanded="${(x) => x.expanded}"
80
89
  aria-controls="${(x) => x.id}-panel"
@@ -2,10 +2,11 @@ import { V as VividElement, a as attr, n as nullableNumberConverter, o as observ
2
2
  import { i as iconDefinition } from './definition28.js';
3
3
  import { A as AffixIconWithTrailing, a as affixIconTemplateFactory, I as IconWrapper } from './affix.js';
4
4
  import { r as ref } from './ref.js';
5
+ import { c as classNames } from './class-names.js';
5
6
  import { s as slotted } from './slotted.js';
6
7
  import { w as when } from './when.js';
7
8
 
8
- const styles = ":host{--_vvd-accordion-item-accent-firm-wrapper: var( --vvd-accordion-item-accent-firm )}.heading-button{--vvd-accordion-item-accent-firm: var( --_vvd-accordion-item-accent-firm-wrapper, var(--vvd-accordion-item-accent-primary) )}:host{display:flex;box-sizing:border-box;flex-direction:column}.heading-container{margin:0}.heading-button{--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: transparent;--_appearance-color-outline: transparent}.heading-button: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}.heading-button: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}.heading-button{--_connotation-color-faint: var(--vvd-accordion-item-accent-faint, var(--vvd-color-neutral-50));--_connotation-color-soft: var(--vvd-accordion-item-accent-soft, var(--vvd-color-neutral-100));--_connotation-color-firm: var(--vvd-accordion-item-accent-firm, var(--vvd-color-canvas-text))}.heading-button{--focus-stroke-gap-color: transparent;display:flex;width:100%;align-items:center;padding:16px;border:none;background-color:var(--_appearance-color-fill);color:var(--_appearance-color-text);cursor:pointer;text-align:left}.heading-button:focus-visible{box-shadow:0 0 0 4px color-mix(in srgb,var(--vvd-color-cta-500),transparent 85%),inset 0 0 0 3px var(--focus-stroke-gap-color, currentColor);outline:1px solid var(--focus-stroke-color, var(--vvd-color-cta-500));outline-offset:calc(-1px - var(--focus-inset, 0px))}.heading-button.size-condensed{font:var(--vvd-typography-base-extended-bold);gap:12px}.heading-button:not(.size-condensed){font:var(--vvd-typography-heading-4);gap:16px}.heading-content{flex:auto}.meta{overflow:hidden;max-width:var(--accordion-item-meta-inline-size, 20%);flex-shrink:0;color:var(--vvd-color-neutral-600);text-align:end;text-overflow:ellipsis;white-space:nowrap}.heading-button:not(.size-condensed) .meta{font:var(--vvd-typography-base-bold)}.heading-button.size-condensed .meta{font:var(--vvd-typography-base-condensed-bold)}.region{display:none;padding:8px 32px 24px 16px}.region:not(.size-condensed).padded{padding-inline-start:52px}:host([expanded]) .region{display:block}.region.size-condensed.padded{padding-inline-start:44px}slot[name=icon]{color:var(--vvd-color-neutral-600)}.heading-button:not(.size-condensed) slot[name=icon]{font:inherit}.heading-button.size-condensed slot[name=icon]{font:var(--vvd-typography-base-extended)}:host(:not([icon-trailing])) slot[name=icon]:last-of-type{color:var(--_appearance-color-text)}";
9
+ const styles = ":host{--_vvd-accordion-item-accent-firm-wrapper: var( --vvd-accordion-item-accent-firm )}.heading-button{--vvd-accordion-item-accent-firm: var( --_vvd-accordion-item-accent-firm-wrapper, var(--vvd-accordion-item-accent-primary) )}:host{display:flex;box-sizing:border-box;flex-direction:column}.heading-container{margin:0}.heading-button,.heading-button.appearance-ghost-light{--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: transparent;--_appearance-color-outline: transparent}.heading-button.appearance-filled{--_appearance-color-text: var(--_connotation-color-primary-text);--_appearance-color-fill: var(--_connotation-color-primary);--_appearance-color-outline: transparent}.heading-button: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}.heading-button:where(.hover,:hover):where(:not(.disabled,:disabled,.readonly)).appearance-ghost-light{--_appearance-color-text: var(--_connotation-color-fierce-primary);--_appearance-color-fill: color-mix(in srgb, var(--_connotation-color-primary), transparent 90%);--_appearance-color-outline: transparent}.heading-button:where(.hover,:hover):where(:not(.disabled,:disabled,.readonly)).appearance-filled{--_appearance-color-text: var(--_connotation-color-primary-text);--_appearance-color-fill: var(--_connotation-color-primary-increment);--_appearance-color-outline: transparent}.heading-button: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}.heading-button:where(.active,:active):where(:not(.disabled,:disabled)).appearance-ghost-light{--_appearance-color-text: var(--_connotation-color-fierce-primary);--_appearance-color-fill: color-mix(in srgb, var(--_connotation-color-primary), transparent 80%);--_appearance-color-outline: transparent}.heading-button:where(.active,:active):where(:not(.disabled,:disabled)).appearance-filled{--_appearance-color-text: var(--_connotation-color-primary-text);--_appearance-color-fill: var(--_connotation-color-fierce);--_appearance-color-outline: transparent}.heading-button{--_connotation-color-primary: var(--vvd-accordion-item-accent-primary, var(--vvd-color-canvas-text));--_connotation-color-primary-text: var(--vvd-accordion-item-accent-primary-text, var(--vvd-color-canvas));--_connotation-color-primary-increment: var(--vvd-accordion-item-accent-primary-increment, var(--vvd-color-neutral-800));--_connotation-color-fierce: var(--vvd-accordion-item-accent-fierce, var(--vvd-color-neutral-700));--_connotation-color-faint: var(--vvd-accordion-item-accent-faint, var(--vvd-color-neutral-50));--_connotation-color-soft: var(--vvd-accordion-item-accent-soft, var(--vvd-color-neutral-100));--_connotation-color-firm: var(--vvd-accordion-item-accent-firm, var(--vvd-color-canvas-text))}.heading-button{--focus-stroke-gap-color: transparent;display:flex;width:100%;align-items:center;padding:16px;border:none;background-color:var(--_appearance-color-fill);color:var(--_appearance-color-text);cursor:pointer;text-align:left}.heading-button:focus-visible{box-shadow:0 0 0 4px color-mix(in srgb,var(--vvd-color-cta-500),transparent 85%),inset 0 0 0 3px var(--focus-stroke-gap-color, currentColor);outline:1px solid var(--focus-stroke-color, var(--vvd-color-cta-500));outline-offset:calc(-1px - var(--focus-inset, 0px))}.heading-button.size-condensed{font:var(--vvd-typography-base-extended-bold);gap:12px}.heading-button:not(.size-condensed){font:var(--vvd-typography-heading-4);gap:16px}.heading-content{flex:auto}.meta{overflow:hidden;max-width:var(--accordion-item-meta-inline-size, 20%);flex-shrink:0;color:var(--vvd-color-neutral-600);text-align:end;text-overflow:ellipsis;white-space:nowrap}.heading-button:not(.size-condensed) .meta{font:var(--vvd-typography-base-bold)}.heading-button.size-condensed .meta{font:var(--vvd-typography-base-condensed-bold)}.region{display:none;padding:8px 32px 24px 16px}.region:not(.size-condensed).padded{padding-inline-start:52px}:host([expanded]) .region{display:block}.region.size-condensed.padded{padding-inline-start:44px}slot[name=icon]{color:var(--vvd-color-neutral-600)}.heading-button:not(.size-condensed) slot[name=icon]{font:inherit}.heading-button.size-condensed slot[name=icon]{font:var(--vvd-typography-base-extended)}:host(:not([icon-trailing])) slot[name=icon]:last-of-type{color:var(--_appearance-color-text)}";
9
10
 
10
11
  var __defProp = Object.defineProperty;
11
12
  var __decorateClass = (decorators, target, key, kind) => {
@@ -41,6 +42,9 @@ __decorateClass([
41
42
  converter: nullableNumberConverter
42
43
  })
43
44
  ], AccordionItem.prototype, "headinglevel");
45
+ __decorateClass([
46
+ attr
47
+ ], AccordionItem.prototype, "appearance");
44
48
  __decorateClass([
45
49
  attr({ mode: "boolean" })
46
50
  ], AccordionItem.prototype, "expanded");
@@ -67,12 +71,17 @@ __decorateClass([
67
71
  attr
68
72
  ], AccordionItem.prototype, "size");
69
73
 
74
+ const getClasses = ({ appearance, size }) => classNames(
75
+ "heading-button",
76
+ [`appearance-${appearance}`, Boolean(appearance)],
77
+ [`size-${size}`, Boolean(size)]
78
+ );
70
79
  const header = (context, hTag) => {
71
80
  const affixIconTemplate = affixIconTemplateFactory(context);
72
81
  return html`
73
82
  <${hTag} class="heading-container">
74
83
  <button
75
- class="heading-button ${(x) => x.size ? `size-${x.size}` : ""}"
84
+ class="${getClasses}"
76
85
  id="${(x) => x.id}"
77
86
  aria-expanded="${(x) => x.expanded}"
78
87
  aria-controls="${(x) => x.id}-panel"
@@ -21,7 +21,7 @@ const slotted = require('./slotted.cjs');
21
21
  const classNames = require('./class-names.cjs');
22
22
  const when = require('./when.cjs');
23
23
 
24
- const styles = ".chevron{display:flex;flex-shrink:0;font:var(--vvd-typography-base-extended);transform:rotate(0);transition:transform .2s}:host([data-expanded=true]) .chevron,:host([open]) .chevron{transform:rotate(180deg)}:not(.disabled) .chevron{cursor:pointer}.disabled .chevron{color:var(--_low-ink-color);cursor:not-allowed}:host{position:relative;display:inline-flex;flex-direction:column;gap:4px;--_low-ink-color: var(--vvd-color-neutral-600)}:host([disabled]){--_low-ink-color: var(--vvd-color-neutral-400);cursor:not-allowed}.base{--_text-field-gutter-end: 8px}.base{--_appearance-color-text: var(--vvd-color-canvas-text);--_appearance-color-fill: var(--vvd-color-canvas);--_appearance-color-outline: var(--vvd-color-neutral-500)}.base.appearance-ghost{--_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(--vvd-color-canvas-text);--_appearance-color-fill: var(--vvd-color-canvas);--_appearance-color-outline: var(--vvd-color-neutral-700)}.base:where(.hover,:hover):where(:not(.disabled,:disabled,.readonly)).appearance-ghost{--_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: var(--vvd-color-neutral-100);--_appearance-color-outline: var(--vvd-color-neutral-300)}.base:where(.disabled,:disabled).appearance-ghost{--_appearance-color-text: var(--vvd-color-neutral-300);--_appearance-color-fill: transparent;--_appearance-color-outline: transparent}.base:where(.readonly):where(:not(.disabled,:disabled)){--_appearance-color-text: var(--vvd-color-canvas-text);--_appearance-color-fill: var(--vvd-color-neutral-200);--_appearance-color-outline: var(--vvd-color-neutral-400)}.base:where(.readonly):where(:not(.disabled,:disabled)).appearance-ghost{--_appearance-color-text: var(--vvd-color-neutral-600);--_appearance-color-fill: transparent;--_appearance-color-outline: transparent}.base:where(.error):where(:not(.disabled,:disabled)){--_appearance-color-text: notSet;--_appearance-color-fill: var(--vvd-color-alert-50);--_appearance-color-outline: var(--vvd-color-alert-500)}.base:where(.error):where(:not(.disabled,:disabled)).appearance-ghost{--_appearance-color-text: notSet;--_appearance-color-fill: var(--vvd-color-alert-50);--_appearance-color-outline: transparent}.base:where(.success):where(:not(.disabled,:disabled)){--_appearance-color-text: notSet;--_appearance-color-fill: var(--vvd-color-success-50);--_appearance-color-outline: var(--vvd-color-success-500)}.base:where(.success):where(:not(.disabled,:disabled)).appearance-ghost{--_appearance-color-text: notSet;--_appearance-color-fill: var(--vvd-color-success-50);--_appearance-color-outline: transparent}.base:not(.shape-pill) .base{border-radius:var(--_text-field-border-radius)}.base.shape-pill .base{border-radius:var(--_text-field-pill-border-radius)}.base slot[name=icon]{position:absolute;z-index:1;display:inline-block;color:var(--_low-ink-color);font-size:var(--_text-field-icon-size);inset-block-start:50%;inset-inline-start:var(--_text-field-gutter-start);line-height:1;pointer-events:none;transform:translateY(-50%)}.base.has-meta{padding-inline-end:16px}.control{text-overflow:ellipsis;white-space:nowrap}.fieldset .leading-items-wrapper{position:relative;display:flex;flex-shrink:0;align-items:center;gap:8px;padding-inline-end:16px}.listbox{display:flex;max-height:var(--combobox-height, 408px);flex-direction:column;padding:4px;border-radius:8px;contain:paint;gap:2px;overflow-y:auto}::part(popup-base){inline-size:max-content;min-inline-size:var(--_combobox-fixed-width, 100%)}@supports selector(:has(*)){.fieldset:has(.control:focus-within):after{--focus-stroke-gap-color: transparent;box-shadow:0 0 0 4px color-mix(in srgb,var(--vvd-color-cta-500),transparent 85%),inset 0 0 0 3px var(--focus-stroke-gap-color, currentColor);outline:1px solid var(--focus-stroke-color, var(--vvd-color-cta-500));outline-offset:calc(-1px - var(--focus-inset, 0px))}}@supports not selector(:has(*)){.fieldset:focus-within:after{box-shadow:0 0 0 4px color-mix(in srgb,var(--vvd-color-cta-500),transparent 85%),inset 0 0 0 3px var(--focus-stroke-gap-color, currentColor);outline:1px solid var(--focus-stroke-color, var(--vvd-color-cta-500));outline-offset:calc(-1px - var(--focus-inset, 0px));--focus-stroke-gap-color: transparent;position:absolute;z-index:1;display:block;border-radius:inherit;content:\"\";inset:0;pointer-events:none}}";
24
+ const styles = ".chevron{display:flex;flex-shrink:0;font:var(--vvd-typography-base-extended);transform:rotate(0);transition:transform .2s}:host([data-expanded=true]) .chevron,:host([open]) .chevron{transform:rotate(180deg)}:not(.disabled) .chevron{cursor:pointer}.disabled .chevron{color:var(--_low-ink-color);cursor:not-allowed}:host{position:relative;display:inline-flex;flex-direction:column;gap:4px;--_low-ink-color: var(--vvd-color-neutral-600)}:host([disabled]){--_low-ink-color: var(--vvd-color-neutral-400);cursor:not-allowed}.base{--_text-field-gutter-end: 8px}.base{--_appearance-color-text: var(--vvd-color-canvas-text);--_appearance-color-fill: var(--vvd-color-canvas);--_appearance-color-outline: var(--vvd-color-neutral-500)}.base.appearance-ghost{--_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(--vvd-color-canvas-text);--_appearance-color-fill: var(--vvd-color-canvas);--_appearance-color-outline: var(--vvd-color-neutral-700)}.base:where(.hover,:hover):where(:not(.disabled,:disabled,.readonly)).appearance-ghost{--_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: var(--vvd-color-neutral-100);--_appearance-color-outline: var(--vvd-color-neutral-300)}.base:where(.disabled,:disabled).appearance-ghost{--_appearance-color-text: var(--vvd-color-neutral-300);--_appearance-color-fill: transparent;--_appearance-color-outline: transparent}.base:where(.readonly):where(:not(.disabled,:disabled)){--_appearance-color-text: var(--vvd-color-canvas-text);--_appearance-color-fill: var(--vvd-color-neutral-200);--_appearance-color-outline: var(--vvd-color-neutral-400)}.base:where(.readonly):where(:not(.disabled,:disabled)).appearance-ghost{--_appearance-color-text: var(--vvd-color-neutral-600);--_appearance-color-fill: transparent;--_appearance-color-outline: transparent}.base:where(.error):where(:not(.disabled,:disabled)){--_appearance-color-text: notSet;--_appearance-color-fill: var(--vvd-color-alert-50);--_appearance-color-outline: var(--vvd-color-alert-500)}.base:where(.error):where(:not(.disabled,:disabled)).appearance-ghost{--_appearance-color-text: notSet;--_appearance-color-fill: var(--vvd-color-alert-50);--_appearance-color-outline: transparent}.base:where(.success):where(:not(.disabled,:disabled)){--_appearance-color-text: notSet;--_appearance-color-fill: var(--vvd-color-success-50);--_appearance-color-outline: var(--vvd-color-success-500)}.base:where(.success):where(:not(.disabled,:disabled)).appearance-ghost{--_appearance-color-text: notSet;--_appearance-color-fill: var(--vvd-color-success-50);--_appearance-color-outline: transparent}.base:not(.shape-pill) .base{border-radius:var(--_text-field-border-radius)}.base.shape-pill .base{border-radius:var(--_text-field-pill-border-radius)}.base slot[name=icon]{position:absolute;z-index:1;display:inline-block;color:var(--_low-ink-color);font-size:var(--_text-field-icon-size);inset-block-start:50%;inset-inline-start:var(--_text-field-gutter-start);line-height:1;pointer-events:none;transform:translateY(-50%)}.base.has-meta{padding-inline-end:16px}.control{text-overflow:ellipsis;white-space:nowrap}.fieldset .leading-items-wrapper{position:relative;display:flex;flex-shrink:0;align-items:center;gap:8px;padding-inline-end:16px}.listbox{display:flex;max-height:var(--combobox-height, 408px);flex-direction:column;padding:4px;border-radius:8px;contain:paint;gap:2px;overflow-y:auto}::part(popup-base){inline-size:max-content;min-inline-size:var(--_combobox-fixed-width, 100%)}@supports selector(:has(*)){.base:not(.has-activedescendant) .fieldset:has(.control:focus-within):after{--focus-stroke-gap-color: transparent;box-shadow:0 0 0 4px color-mix(in srgb,var(--vvd-color-cta-500),transparent 85%),inset 0 0 0 3px var(--focus-stroke-gap-color, currentColor);outline:1px solid var(--focus-stroke-color, var(--vvd-color-cta-500));outline-offset:calc(-1px - var(--focus-inset, 0px))}}@supports not selector(:has(*)){.base:not(.has-activedescendant) .fieldset:focus-within:after{box-shadow:0 0 0 4px color-mix(in srgb,var(--vvd-color-cta-500),transparent 85%),inset 0 0 0 3px var(--focus-stroke-gap-color, currentColor);outline:1px solid var(--focus-stroke-color, var(--vvd-color-cta-500));outline-offset:calc(-1px - var(--focus-inset, 0px));--focus-stroke-gap-color: transparent;position:absolute;z-index:1;display:block;border-radius:inherit;content:\"\";inset:0;pointer-events:none}}::slotted([data-vvd-component=option][current-selected]){border-radius:8px;box-shadow:0 0 0 4px color-mix(in srgb,var(--vvd-color-cta-500),transparent 85%),inset 0 0 0 3px var(--focus-stroke-gap-color, currentColor);outline:1px solid var(--focus-stroke-color, var(--vvd-color-cta-500));outline-offset:calc(-1px - var(--focus-inset, 0px));--focus-stroke-gap-color: transparent}";
25
25
 
26
26
  const ComboboxAutocomplete = {
27
27
  inline: "inline",
@@ -528,7 +528,9 @@ const getStateClasses = ({
528
528
  disabled,
529
529
  placeholder,
530
530
  label,
531
- appearance
531
+ appearance,
532
+ open,
533
+ _activeDescendant
532
534
  }) => classNames.classNames(
533
535
  "base",
534
536
  ["disabled", disabled],
@@ -539,6 +541,7 @@ const getStateClasses = ({
539
541
  ["no-label", !label],
540
542
  ["has-icon", !!icon || Boolean(iconSlottedContent?.length)],
541
543
  ["has-meta", Boolean(metaSlottedContent?.length)],
544
+ ["has-activedescendant", Boolean(_activeDescendant) && open],
542
545
  ["error", Boolean(errorValidationMessage)],
543
546
  ["success", !!successText]
544
547
  );
@@ -593,42 +596,42 @@ function renderInput(context) {
593
596
  const comboboxTemplate = (context) => {
594
597
  const popupTag = context.tagFor(definition.Popup);
595
598
  return vividElement.html`
596
- <template
597
- tabindex="${(x) => !x.disabled ? "0" : null}"
598
- @click="${(x, c) => x.clickHandler(c.event)}"
599
- @focusout="${(x, c) => x.focusoutHandler(c.event)}"
600
- @keydown="${(x, { event }) => {
599
+ <template
600
+ tabindex="${(x) => !x.disabled ? "0" : null}"
601
+ @click="${(x, c) => x.clickHandler(c.event)}"
602
+ @focusout="${(x, c) => x.focusoutHandler(c.event)}"
603
+ @keydown="${(x, { event }) => {
601
604
  x.open && index.handleEscapeKeyAndStopPropogation(event);
602
605
  return x.keydownHandler(event);
603
606
  }}"
604
- >
605
- <div class="control-wrapper">
606
- ${() => renderInput(context)}
607
- <${popupTag} class="popup"
608
- style="${setFixedDropdownVarWidth}"
609
- ?open="${(x) => x.open}"
610
- placement="${(x) => x.placement ?? "bottom-start"}"
611
- strategy="${(x) => x.fixedDropdown ? "fixed" : "absolute"}"
612
- ${ref.ref("_popup")}>
613
- <div id="${(x) => x.listboxId}"
614
- class="listbox"
615
- role="listbox"
616
- ?disabled="${(x) => x.disabled}"
617
- ${ref.ref("listbox")}>
618
- <slot ${slotted.slotted({
607
+ >
608
+ <div class="control-wrapper">
609
+ ${() => renderInput(context)}
610
+ <${popupTag} class="popup"
611
+ style="${setFixedDropdownVarWidth}"
612
+ ?open="${(x) => x.open}"
613
+ placement="${(x) => x.placement ?? "bottom-start"}"
614
+ strategy="${(x) => x.fixedDropdown ? "fixed" : "absolute"}"
615
+ ${ref.ref("_popup")}>
616
+ <div id="${(x) => x.listboxId}"
617
+ class="listbox"
618
+ role="listbox"
619
+ ?disabled="${(x) => x.disabled}"
620
+ ${ref.ref("listbox")}>
621
+ <slot ${slotted.slotted({
619
622
  filter: listbox.Listbox.slottedOptionFilter,
620
623
  flatten: true,
621
624
  property: "slottedOptions"
622
625
  })}>
623
- </slot>
624
- </div>
625
- </${popupTag}>
626
- </div>
627
- <div class="feedback-wrapper" @click="${(_, c) => c.event.stopPropagation()}">
628
- ${(x) => x._getFeedbackTemplate(context)}
626
+ </slot>
629
627
  </div>
630
- </template>
631
- `;
628
+ </${popupTag}>
629
+ </div>
630
+ <div class="feedback-wrapper" @click="${(_, c) => c.event.stopPropagation()}">
631
+ ${(x) => x._getFeedbackTemplate(context)}
632
+ </div>
633
+ </template>
634
+ `;
632
635
  };
633
636
 
634
637
  const comboboxDefinition = vividElement.defineVividComponent(
@@ -19,7 +19,7 @@ import { s as slotted } from './slotted.js';
19
19
  import { c as classNames } from './class-names.js';
20
20
  import { w as when } from './when.js';
21
21
 
22
- const styles = ".chevron{display:flex;flex-shrink:0;font:var(--vvd-typography-base-extended);transform:rotate(0);transition:transform .2s}:host([data-expanded=true]) .chevron,:host([open]) .chevron{transform:rotate(180deg)}:not(.disabled) .chevron{cursor:pointer}.disabled .chevron{color:var(--_low-ink-color);cursor:not-allowed}:host{position:relative;display:inline-flex;flex-direction:column;gap:4px;--_low-ink-color: var(--vvd-color-neutral-600)}:host([disabled]){--_low-ink-color: var(--vvd-color-neutral-400);cursor:not-allowed}.base{--_text-field-gutter-end: 8px}.base{--_appearance-color-text: var(--vvd-color-canvas-text);--_appearance-color-fill: var(--vvd-color-canvas);--_appearance-color-outline: var(--vvd-color-neutral-500)}.base.appearance-ghost{--_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(--vvd-color-canvas-text);--_appearance-color-fill: var(--vvd-color-canvas);--_appearance-color-outline: var(--vvd-color-neutral-700)}.base:where(.hover,:hover):where(:not(.disabled,:disabled,.readonly)).appearance-ghost{--_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: var(--vvd-color-neutral-100);--_appearance-color-outline: var(--vvd-color-neutral-300)}.base:where(.disabled,:disabled).appearance-ghost{--_appearance-color-text: var(--vvd-color-neutral-300);--_appearance-color-fill: transparent;--_appearance-color-outline: transparent}.base:where(.readonly):where(:not(.disabled,:disabled)){--_appearance-color-text: var(--vvd-color-canvas-text);--_appearance-color-fill: var(--vvd-color-neutral-200);--_appearance-color-outline: var(--vvd-color-neutral-400)}.base:where(.readonly):where(:not(.disabled,:disabled)).appearance-ghost{--_appearance-color-text: var(--vvd-color-neutral-600);--_appearance-color-fill: transparent;--_appearance-color-outline: transparent}.base:where(.error):where(:not(.disabled,:disabled)){--_appearance-color-text: notSet;--_appearance-color-fill: var(--vvd-color-alert-50);--_appearance-color-outline: var(--vvd-color-alert-500)}.base:where(.error):where(:not(.disabled,:disabled)).appearance-ghost{--_appearance-color-text: notSet;--_appearance-color-fill: var(--vvd-color-alert-50);--_appearance-color-outline: transparent}.base:where(.success):where(:not(.disabled,:disabled)){--_appearance-color-text: notSet;--_appearance-color-fill: var(--vvd-color-success-50);--_appearance-color-outline: var(--vvd-color-success-500)}.base:where(.success):where(:not(.disabled,:disabled)).appearance-ghost{--_appearance-color-text: notSet;--_appearance-color-fill: var(--vvd-color-success-50);--_appearance-color-outline: transparent}.base:not(.shape-pill) .base{border-radius:var(--_text-field-border-radius)}.base.shape-pill .base{border-radius:var(--_text-field-pill-border-radius)}.base slot[name=icon]{position:absolute;z-index:1;display:inline-block;color:var(--_low-ink-color);font-size:var(--_text-field-icon-size);inset-block-start:50%;inset-inline-start:var(--_text-field-gutter-start);line-height:1;pointer-events:none;transform:translateY(-50%)}.base.has-meta{padding-inline-end:16px}.control{text-overflow:ellipsis;white-space:nowrap}.fieldset .leading-items-wrapper{position:relative;display:flex;flex-shrink:0;align-items:center;gap:8px;padding-inline-end:16px}.listbox{display:flex;max-height:var(--combobox-height, 408px);flex-direction:column;padding:4px;border-radius:8px;contain:paint;gap:2px;overflow-y:auto}::part(popup-base){inline-size:max-content;min-inline-size:var(--_combobox-fixed-width, 100%)}@supports selector(:has(*)){.fieldset:has(.control:focus-within):after{--focus-stroke-gap-color: transparent;box-shadow:0 0 0 4px color-mix(in srgb,var(--vvd-color-cta-500),transparent 85%),inset 0 0 0 3px var(--focus-stroke-gap-color, currentColor);outline:1px solid var(--focus-stroke-color, var(--vvd-color-cta-500));outline-offset:calc(-1px - var(--focus-inset, 0px))}}@supports not selector(:has(*)){.fieldset:focus-within:after{box-shadow:0 0 0 4px color-mix(in srgb,var(--vvd-color-cta-500),transparent 85%),inset 0 0 0 3px var(--focus-stroke-gap-color, currentColor);outline:1px solid var(--focus-stroke-color, var(--vvd-color-cta-500));outline-offset:calc(-1px - var(--focus-inset, 0px));--focus-stroke-gap-color: transparent;position:absolute;z-index:1;display:block;border-radius:inherit;content:\"\";inset:0;pointer-events:none}}";
22
+ const styles = ".chevron{display:flex;flex-shrink:0;font:var(--vvd-typography-base-extended);transform:rotate(0);transition:transform .2s}:host([data-expanded=true]) .chevron,:host([open]) .chevron{transform:rotate(180deg)}:not(.disabled) .chevron{cursor:pointer}.disabled .chevron{color:var(--_low-ink-color);cursor:not-allowed}:host{position:relative;display:inline-flex;flex-direction:column;gap:4px;--_low-ink-color: var(--vvd-color-neutral-600)}:host([disabled]){--_low-ink-color: var(--vvd-color-neutral-400);cursor:not-allowed}.base{--_text-field-gutter-end: 8px}.base{--_appearance-color-text: var(--vvd-color-canvas-text);--_appearance-color-fill: var(--vvd-color-canvas);--_appearance-color-outline: var(--vvd-color-neutral-500)}.base.appearance-ghost{--_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(--vvd-color-canvas-text);--_appearance-color-fill: var(--vvd-color-canvas);--_appearance-color-outline: var(--vvd-color-neutral-700)}.base:where(.hover,:hover):where(:not(.disabled,:disabled,.readonly)).appearance-ghost{--_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: var(--vvd-color-neutral-100);--_appearance-color-outline: var(--vvd-color-neutral-300)}.base:where(.disabled,:disabled).appearance-ghost{--_appearance-color-text: var(--vvd-color-neutral-300);--_appearance-color-fill: transparent;--_appearance-color-outline: transparent}.base:where(.readonly):where(:not(.disabled,:disabled)){--_appearance-color-text: var(--vvd-color-canvas-text);--_appearance-color-fill: var(--vvd-color-neutral-200);--_appearance-color-outline: var(--vvd-color-neutral-400)}.base:where(.readonly):where(:not(.disabled,:disabled)).appearance-ghost{--_appearance-color-text: var(--vvd-color-neutral-600);--_appearance-color-fill: transparent;--_appearance-color-outline: transparent}.base:where(.error):where(:not(.disabled,:disabled)){--_appearance-color-text: notSet;--_appearance-color-fill: var(--vvd-color-alert-50);--_appearance-color-outline: var(--vvd-color-alert-500)}.base:where(.error):where(:not(.disabled,:disabled)).appearance-ghost{--_appearance-color-text: notSet;--_appearance-color-fill: var(--vvd-color-alert-50);--_appearance-color-outline: transparent}.base:where(.success):where(:not(.disabled,:disabled)){--_appearance-color-text: notSet;--_appearance-color-fill: var(--vvd-color-success-50);--_appearance-color-outline: var(--vvd-color-success-500)}.base:where(.success):where(:not(.disabled,:disabled)).appearance-ghost{--_appearance-color-text: notSet;--_appearance-color-fill: var(--vvd-color-success-50);--_appearance-color-outline: transparent}.base:not(.shape-pill) .base{border-radius:var(--_text-field-border-radius)}.base.shape-pill .base{border-radius:var(--_text-field-pill-border-radius)}.base slot[name=icon]{position:absolute;z-index:1;display:inline-block;color:var(--_low-ink-color);font-size:var(--_text-field-icon-size);inset-block-start:50%;inset-inline-start:var(--_text-field-gutter-start);line-height:1;pointer-events:none;transform:translateY(-50%)}.base.has-meta{padding-inline-end:16px}.control{text-overflow:ellipsis;white-space:nowrap}.fieldset .leading-items-wrapper{position:relative;display:flex;flex-shrink:0;align-items:center;gap:8px;padding-inline-end:16px}.listbox{display:flex;max-height:var(--combobox-height, 408px);flex-direction:column;padding:4px;border-radius:8px;contain:paint;gap:2px;overflow-y:auto}::part(popup-base){inline-size:max-content;min-inline-size:var(--_combobox-fixed-width, 100%)}@supports selector(:has(*)){.base:not(.has-activedescendant) .fieldset:has(.control:focus-within):after{--focus-stroke-gap-color: transparent;box-shadow:0 0 0 4px color-mix(in srgb,var(--vvd-color-cta-500),transparent 85%),inset 0 0 0 3px var(--focus-stroke-gap-color, currentColor);outline:1px solid var(--focus-stroke-color, var(--vvd-color-cta-500));outline-offset:calc(-1px - var(--focus-inset, 0px))}}@supports not selector(:has(*)){.base:not(.has-activedescendant) .fieldset:focus-within:after{box-shadow:0 0 0 4px color-mix(in srgb,var(--vvd-color-cta-500),transparent 85%),inset 0 0 0 3px var(--focus-stroke-gap-color, currentColor);outline:1px solid var(--focus-stroke-color, var(--vvd-color-cta-500));outline-offset:calc(-1px - var(--focus-inset, 0px));--focus-stroke-gap-color: transparent;position:absolute;z-index:1;display:block;border-radius:inherit;content:\"\";inset:0;pointer-events:none}}::slotted([data-vvd-component=option][current-selected]){border-radius:8px;box-shadow:0 0 0 4px color-mix(in srgb,var(--vvd-color-cta-500),transparent 85%),inset 0 0 0 3px var(--focus-stroke-gap-color, currentColor);outline:1px solid var(--focus-stroke-color, var(--vvd-color-cta-500));outline-offset:calc(-1px - var(--focus-inset, 0px));--focus-stroke-gap-color: transparent}";
23
23
 
24
24
  const ComboboxAutocomplete = {
25
25
  inline: "inline",
@@ -526,7 +526,9 @@ const getStateClasses = ({
526
526
  disabled,
527
527
  placeholder,
528
528
  label,
529
- appearance
529
+ appearance,
530
+ open,
531
+ _activeDescendant
530
532
  }) => classNames(
531
533
  "base",
532
534
  ["disabled", disabled],
@@ -537,6 +539,7 @@ const getStateClasses = ({
537
539
  ["no-label", !label],
538
540
  ["has-icon", !!icon || Boolean(iconSlottedContent?.length)],
539
541
  ["has-meta", Boolean(metaSlottedContent?.length)],
542
+ ["has-activedescendant", Boolean(_activeDescendant) && open],
540
543
  ["error", Boolean(errorValidationMessage)],
541
544
  ["success", !!successText]
542
545
  );
@@ -591,42 +594,42 @@ function renderInput(context) {
591
594
  const comboboxTemplate = (context) => {
592
595
  const popupTag = context.tagFor(Popup);
593
596
  return html`
594
- <template
595
- tabindex="${(x) => !x.disabled ? "0" : null}"
596
- @click="${(x, c) => x.clickHandler(c.event)}"
597
- @focusout="${(x, c) => x.focusoutHandler(c.event)}"
598
- @keydown="${(x, { event }) => {
597
+ <template
598
+ tabindex="${(x) => !x.disabled ? "0" : null}"
599
+ @click="${(x, c) => x.clickHandler(c.event)}"
600
+ @focusout="${(x, c) => x.focusoutHandler(c.event)}"
601
+ @keydown="${(x, { event }) => {
599
602
  x.open && handleEscapeKeyAndStopPropogation(event);
600
603
  return x.keydownHandler(event);
601
604
  }}"
602
- >
603
- <div class="control-wrapper">
604
- ${() => renderInput(context)}
605
- <${popupTag} class="popup"
606
- style="${setFixedDropdownVarWidth}"
607
- ?open="${(x) => x.open}"
608
- placement="${(x) => x.placement ?? "bottom-start"}"
609
- strategy="${(x) => x.fixedDropdown ? "fixed" : "absolute"}"
610
- ${ref("_popup")}>
611
- <div id="${(x) => x.listboxId}"
612
- class="listbox"
613
- role="listbox"
614
- ?disabled="${(x) => x.disabled}"
615
- ${ref("listbox")}>
616
- <slot ${slotted({
605
+ >
606
+ <div class="control-wrapper">
607
+ ${() => renderInput(context)}
608
+ <${popupTag} class="popup"
609
+ style="${setFixedDropdownVarWidth}"
610
+ ?open="${(x) => x.open}"
611
+ placement="${(x) => x.placement ?? "bottom-start"}"
612
+ strategy="${(x) => x.fixedDropdown ? "fixed" : "absolute"}"
613
+ ${ref("_popup")}>
614
+ <div id="${(x) => x.listboxId}"
615
+ class="listbox"
616
+ role="listbox"
617
+ ?disabled="${(x) => x.disabled}"
618
+ ${ref("listbox")}>
619
+ <slot ${slotted({
617
620
  filter: Listbox.slottedOptionFilter,
618
621
  flatten: true,
619
622
  property: "slottedOptions"
620
623
  })}>
621
- </slot>
622
- </div>
623
- </${popupTag}>
624
- </div>
625
- <div class="feedback-wrapper" @click="${(_, c) => c.event.stopPropagation()}">
626
- ${(x) => x._getFeedbackTemplate(context)}
624
+ </slot>
627
625
  </div>
628
- </template>
629
- `;
626
+ </${popupTag}>
627
+ </div>
628
+ <div class="feedback-wrapper" @click="${(_, c) => c.event.stopPropagation()}">
629
+ ${(x) => x._getFeedbackTemplate(context)}
630
+ </div>
631
+ </template>
632
+ `;
630
633
  };
631
634
 
632
635
  const comboboxDefinition = defineVividComponent(
@@ -24,7 +24,7 @@ const dataGridStyles = ":host{display:block}:host([generate-header=sticky]){max-
24
24
 
25
25
  const dataGridRowStyles = ".base.connotation-cta{--_connotation-color-primary: var(--vvd-data-grid-row-cta-primary, var(--vvd-color-cta-500));--_connotation-color-primary-text: var(--vvd-data-grid-row-cta-primary-text, var(--vvd-color-canvas));--_connotation-color-primary-increment: var(--vvd-data-grid-row-cta-primary-increment, var(--vvd-color-cta-600));--_connotation-color-firm: var(--vvd-data-grid-row-cta-firm, var(--vvd-color-cta-600));--_connotation-color-faint: var(--vvd-data-grid-row-cta-faint, var(--vvd-color-cta-50));--_connotation-color-soft: var(--vvd-data-grid-row-cta-soft, var(--vvd-color-cta-100));--_connotation-color-pale: var(--vvd-data-grid-row-cta-pale, var(--vvd-color-cta-300));--_connotation-color-dim: var(--vvd-data-grid-row-cta-dim, var(--vvd-color-cta-200))}.base:not(.connotation-cta){--_connotation-color-primary: var(--vvd-data-grid-row-accent-primary, var(--vvd-color-canvas-text));--_connotation-color-primary-text: var(--vvd-data-grid-row-accent-primary-text, var(--vvd-color-canvas));--_connotation-color-primary-increment: var(--vvd-data-grid-row-accent-primary-increment, var(--vvd-color-neutral-800));--_connotation-color-firm: var(--vvd-data-grid-row-accent-firm, var(--vvd-color-canvas-text));--_connotation-color-faint: var(--vvd-data-grid-row-accent-faint, var(--vvd-color-neutral-50));--_connotation-color-soft: var(--vvd-data-grid-row-accent-soft, var(--vvd-color-neutral-100));--_connotation-color-pale: var(--vvd-data-grid-row-accent-pale, var(--vvd-color-neutral-300));--_connotation-color-dim: var(--vvd-data-grid-row-accent-dim, var(--vvd-color-neutral-200))}.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(.selected):where(:not(.disabled,:disabled)){--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: var(--_connotation-color-soft);--_appearance-color-outline: transparent}.base:where(.selected):where(.hover,:hover):where(:not(.disabled,:disabled,.readonly)){--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: var(--_connotation-color-dim);--_appearance-color-outline: transparent}.base{display:grid;width:100%;box-sizing:border-box;color:var(--vvd-color-canvas-text)}:host([row-type=sticky-header]) .base{position:sticky;z-index:9;top:0;background:var(--data-grid-row-background, var(--vvd-color-canvas))}:host([row-type=hidden-header]) .base{display:none}:host(:is([selected]):not([row-type*=header])) .base{background-color:var(--_appearance-color-fill)}";
26
26
 
27
- const dataGridCellStyles = ":host{block-size:100%;min-inline-size:80px}:host(:focus-visible){outline:none}.base.connotation-cta{--_connotation-color-primary: var(--vvd-data-grid-cell-cta-primary, var(--vvd-color-cta-500));--_connotation-color-primary-text: var(--vvd-data-grid-cell-cta-primary-text, var(--vvd-color-canvas));--_connotation-color-primary-increment: var(--vvd-data-grid-cell-cta-primary-increment, var(--vvd-color-cta-600));--_connotation-color-firm: var(--vvd-data-grid-cell-cta-firm, var(--vvd-color-cta-600));--_connotation-color-soft: var(--vvd-data-grid-cell-cta-soft, var(--vvd-color-cta-100));--_connotation-color-faint: var(--vvd-data-grid-cell-cta-faint, var(--vvd-color-cta-50));--_connotation-color-pale: var(--vvd-data-grid-cell-cta-pale, var(--vvd-color-cta-300));--_connotation-color-dim: var(--vvd-data-grid-cell-cta-dim, var(--vvd-color-cta-200))}.base:not(.connotation-cta){--_connotation-color-primary: var(--vvd-data-grid-cell-accent-primary, var(--vvd-color-canvas-text));--_connotation-color-primary-text: var(--vvd-data-grid-cell-accent-primary-text, var(--vvd-color-canvas));--_connotation-color-primary-increment: var(--vvd-data-grid-cell-accent-primary-increment, var(--vvd-color-neutral-800));--_connotation-color-firm: var(--vvd-data-grid-cell-accent-firm, var(--vvd-color-canvas-text));--_connotation-color-soft: var(--vvd-data-grid-cell-accent-soft, var(--vvd-color-neutral-100));--_connotation-color-faint: var(--vvd-data-grid-cell-accent-faint, var(--vvd-color-neutral-50));--_connotation-color-pale: var(--vvd-data-grid-cell-accent-pale, var(--vvd-color-neutral-300));--_connotation-color-dim: var(--vvd-data-grid-cell-accent-dim, var(--vvd-color-neutral-200))}.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(.selected):where(:not(.disabled,:disabled)){--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: var(--_connotation-color-soft);--_appearance-color-outline: transparent}.base:where(.selected):where(.hover,:hover):where(:not(.disabled,:disabled,.readonly)){--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: var(--_connotation-color-dim);--_appearance-color-outline: transparent}.base{display:flex;box-sizing:border-box;align-items:center;border-bottom:1px solid var(--vvd-color-neutral-300);block-size:var(--data-grid-cell-block-size, var(--_data-grid-cell-default-block-size));color:var(--_appearance-color-text);font:var(--vvd-typography-base);min-block-size:calc(1px*(48 + 4*clamp(-1,var(--vvd-size-density, 0),2)));padding-block:13px 14px;padding-inline:12px}:host(:focus-visible) .base{--focus-stroke-gap-color: transparent;box-shadow:0 0 0 4px color-mix(in srgb,var(--vvd-color-cta-500),transparent 85%),inset 0 0 0 3px var(--focus-stroke-gap-color, currentColor);outline:1px solid var(--focus-stroke-color, var(--vvd-color-cta-500));outline-offset:calc(-1px - var(--focus-inset, 0px))}:host([cell-type=columnheader]) .base{border-color:var(--vvd-color-canvas-text);font:var(--vvd-typography-base-bold);--_data-grid-cell-default-block-size: calc(1px*(48 + 4*clamp(-1, var(--vvd-size-density, 0), 2))) ;--_data-grid-cell-default-white-space: nowrap}:host(:not([cell-type=columnheader])) .base{--_data-grid-cell-default-block-size: 100%;--_data-grid-cell-default-white-space: normal}:host(:is([selected]):not([cell-type=columnheader])) .base{background-color:var(--_appearance-color-fill)}slot{display:block;overflow:hidden;text-overflow:ellipsis;white-space:var(--data-grid-cell-white-space, var(--_data-grid-cell-default-white-space))}:host(:not([cell-type=columnheader][aria-sort])) slot{inline-size:100%}.header-icon{margin-inline-start:16px}";
27
+ const dataGridCellStyles = ":host{block-size:100%;min-inline-size:80px}:host(:focus-visible){outline:none}:host([data-fixed]){position:sticky;z-index:5;background:var(--data-grid-cell-background, var(--vvd-color-surface-2dp))}:host([data-fixed]):before{position:absolute;z-index:1;top:0;right:0;width:1px;block-size:100%;box-shadow:4px 0 4px #0000001a,2px 0 2px #0000000d,1px 0 1px #0000000d;content:\"\";pointer-events:none}.base.connotation-cta{--_connotation-color-primary: var(--vvd-data-grid-cell-cta-primary, var(--vvd-color-cta-500));--_connotation-color-primary-text: var(--vvd-data-grid-cell-cta-primary-text, var(--vvd-color-canvas));--_connotation-color-primary-increment: var(--vvd-data-grid-cell-cta-primary-increment, var(--vvd-color-cta-600));--_connotation-color-firm: var(--vvd-data-grid-cell-cta-firm, var(--vvd-color-cta-600));--_connotation-color-soft: var(--vvd-data-grid-cell-cta-soft, var(--vvd-color-cta-100));--_connotation-color-faint: var(--vvd-data-grid-cell-cta-faint, var(--vvd-color-cta-50));--_connotation-color-pale: var(--vvd-data-grid-cell-cta-pale, var(--vvd-color-cta-300));--_connotation-color-dim: var(--vvd-data-grid-cell-cta-dim, var(--vvd-color-cta-200))}.base:not(.connotation-cta){--_connotation-color-primary: var(--vvd-data-grid-cell-accent-primary, var(--vvd-color-canvas-text));--_connotation-color-primary-text: var(--vvd-data-grid-cell-accent-primary-text, var(--vvd-color-canvas));--_connotation-color-primary-increment: var(--vvd-data-grid-cell-accent-primary-increment, var(--vvd-color-neutral-800));--_connotation-color-firm: var(--vvd-data-grid-cell-accent-firm, var(--vvd-color-canvas-text));--_connotation-color-soft: var(--vvd-data-grid-cell-accent-soft, var(--vvd-color-neutral-100));--_connotation-color-faint: var(--vvd-data-grid-cell-accent-faint, var(--vvd-color-neutral-50));--_connotation-color-pale: var(--vvd-data-grid-cell-accent-pale, var(--vvd-color-neutral-300));--_connotation-color-dim: var(--vvd-data-grid-cell-accent-dim, var(--vvd-color-neutral-200))}.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(.selected):where(:not(.disabled,:disabled)){--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: var(--_connotation-color-soft);--_appearance-color-outline: transparent}.base:where(.selected):where(.hover,:hover):where(:not(.disabled,:disabled,.readonly)){--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: var(--_connotation-color-dim);--_appearance-color-outline: transparent}.base{display:flex;box-sizing:border-box;align-items:center;border-bottom:1px solid var(--vvd-color-neutral-300);block-size:var(--data-grid-cell-block-size, var(--_data-grid-cell-default-block-size));color:var(--_appearance-color-text);font:var(--vvd-typography-base);min-block-size:calc(1px*(48 + 4*clamp(-1,var(--vvd-size-density, 0),2)));padding-block:13px 14px;padding-inline:12px}:host(:focus-visible) .base{--focus-stroke-gap-color: transparent;box-shadow:0 0 0 4px color-mix(in srgb,var(--vvd-color-cta-500),transparent 85%),inset 0 0 0 3px var(--focus-stroke-gap-color, currentColor);outline:1px solid var(--focus-stroke-color, var(--vvd-color-cta-500));outline-offset:calc(-1px - var(--focus-inset, 0px))}:host([cell-type=columnheader]) .base{border-color:var(--vvd-color-canvas-text);font:var(--vvd-typography-base-bold);--_data-grid-cell-default-block-size: calc(1px*(48 + 4*clamp(-1, var(--vvd-size-density, 0), 2))) ;--_data-grid-cell-default-white-space: nowrap}:host(:not([cell-type=columnheader])) .base{--_data-grid-cell-default-block-size: 100%;--_data-grid-cell-default-white-space: normal}:host(:is([selected]):not([cell-type=columnheader])) .base{background-color:var(--_appearance-color-fill)}slot{display:block;overflow:hidden;text-overflow:ellipsis;white-space:var(--data-grid-cell-white-space, var(--_data-grid-cell-default-white-space))}:host(:not([cell-type=columnheader][aria-sort])) slot{inline-size:100%}.header-icon{margin-inline-start:16px}";
28
28
 
29
29
  const DataGridCellSortStates = {
30
30
  none: "none",
@@ -117,6 +117,27 @@ class DataGridCell extends localized.Localized(vividElement.VividElement) {
117
117
  this.updateCellView();
118
118
  }
119
119
  }
120
+ /**
121
+ * Updates the fixed column style
122
+ * @internal
123
+ */
124
+ updateFixedStyle() {
125
+ if (this.fixedPosition !== void 0) {
126
+ this.setAttribute("data-fixed", "");
127
+ this.style.left = this.fixedPosition;
128
+ } else {
129
+ this.removeAttribute("data-fixed");
130
+ this.style.removeProperty("left");
131
+ }
132
+ }
133
+ /**
134
+ * Sets the fixed state and position for this cell
135
+ * @internal
136
+ */
137
+ setFixedPosition(position) {
138
+ this.fixedPosition = position;
139
+ this.updateFixedStyle();
140
+ }
120
141
  /**
121
142
  * @internal
122
143
  */
@@ -128,6 +149,7 @@ class DataGridCell extends localized.Localized(vividElement.VividElement) {
128
149
  this.style.gridColumn = `${this.columnDefinition?.gridColumn === void 0 ? 0 : this.columnDefinition.gridColumn}`;
129
150
  this.updateCellView();
130
151
  this.updateCellStyle();
152
+ this.updateFixedStyle();
131
153
  }
132
154
  /**
133
155
  * @internal
@@ -594,6 +616,10 @@ const _DataGrid = class _DataGrid extends vividElement.VividElement {
594
616
  this.columnDefinitions = null;
595
617
  this.focusRowIndex = 0;
596
618
  this.focusColumnIndex = 0;
619
+ /**
620
+ * @internal
621
+ */
622
+ this.fixedColumnsPositions = [];
597
623
  this.rowsRepeatBehavior = null;
598
624
  this.rowsPlaceholder = null;
599
625
  this.generatedHeader = null;
@@ -798,6 +824,9 @@ const _DataGrid = class _DataGrid extends vividElement.VividElement {
798
824
  gridTemplateColumnsChanged() {
799
825
  if (this.$fastController.isConnected) {
800
826
  this.updateRowIndexes();
827
+ if (this.fixedColumns && this.fixedColumns > 0) {
828
+ this.applyFixedColumns();
829
+ }
801
830
  }
802
831
  }
803
832
  /**
@@ -853,6 +882,30 @@ const _DataGrid = class _DataGrid extends vividElement.VividElement {
853
882
  this.queueFocusUpdate();
854
883
  }
855
884
  }
885
+ /**
886
+ * @internal
887
+ */
888
+ fixedColumnsChanged() {
889
+ if (this.$fastController.isConnected) {
890
+ this.applyFixedColumns();
891
+ this.setupResizeObserver();
892
+ }
893
+ }
894
+ /**
895
+ * @internal
896
+ */
897
+ setupResizeObserver() {
898
+ if (this.resizeObserver) {
899
+ this.resizeObserver.disconnect();
900
+ this.resizeObserver = void 0;
901
+ }
902
+ if (typeof ResizeObserver !== "undefined" && this.fixedColumns && this.fixedColumns > 0) {
903
+ this.resizeObserver = new ResizeObserver(() => {
904
+ this.applyFixedColumns();
905
+ });
906
+ this.resizeObserver.observe(this);
907
+ }
908
+ }
856
909
  /**
857
910
  * @internal
858
911
  */
@@ -876,6 +929,7 @@ const _DataGrid = class _DataGrid extends vividElement.VividElement {
876
929
  this.addEventListener(eventFocusOut, this.handleFocusOut);
877
930
  this.observer = new MutationObserver(this.onChildListChange);
878
931
  this.observer.observe(this, { childList: true });
932
+ this.setupResizeObserver();
879
933
  vividElement.DOM.queueUpdate(this.queueRowIndexUpdate);
880
934
  this.#setTabIndex();
881
935
  vividElement.Observable.getNotifier(this).subscribe(
@@ -896,6 +950,10 @@ const _DataGrid = class _DataGrid extends vividElement.VividElement {
896
950
  this.handleFocusOut
897
951
  );
898
952
  this.observer.disconnect();
953
+ if (this.resizeObserver) {
954
+ this.resizeObserver.disconnect();
955
+ this.resizeObserver = void 0;
956
+ }
899
957
  this.rowsPlaceholder = null;
900
958
  this.generatedHeader = null;
901
959
  vividElement.Observable.getNotifier(this).unsubscribe(
@@ -1082,6 +1140,76 @@ const _DataGrid = class _DataGrid extends vividElement.VividElement {
1082
1140
  };
1083
1141
  });
1084
1142
  }
1143
+ /**
1144
+ * @internal
1145
+ */
1146
+ applyFixedColumns() {
1147
+ if (!this.fixedColumns || this.fixedColumns <= 0) {
1148
+ this.clearFixedColumns();
1149
+ return;
1150
+ }
1151
+ this.calculateFixedColumnPositions();
1152
+ this.applyFixedColumnStyling();
1153
+ }
1154
+ /**
1155
+ * Applies fixed columns styling using cached positions
1156
+ * @internal
1157
+ */
1158
+ applyFixedColumnStyling() {
1159
+ this.rowElements.forEach((row) => {
1160
+ const cells = row.querySelectorAll(
1161
+ '[role="cell"], [role="gridcell"], [role="columnheader"]'
1162
+ );
1163
+ this.fixedColumnsPositions.forEach((position, index) => {
1164
+ if (index < cells.length) {
1165
+ const gridCell = cells[index];
1166
+ if (typeof gridCell.setFixedPosition === "function") {
1167
+ gridCell.setFixedPosition(`${position}px`);
1168
+ }
1169
+ }
1170
+ });
1171
+ });
1172
+ }
1173
+ /**
1174
+ * Calculates and caches fixed columns positions based on current layout
1175
+ * @internal
1176
+ */
1177
+ calculateFixedColumnPositions() {
1178
+ this.fixedColumnsPositions = [];
1179
+ if (this.rowElements.length === 0) return;
1180
+ const cells = this.rowElements[0].querySelectorAll(
1181
+ '[role="cell"], [role="gridcell"], [role="columnheader"]'
1182
+ );
1183
+ let accumulator = 0;
1184
+ for (let i = 0; i < Math.min(this.fixedColumns, cells.length); i++) {
1185
+ this.fixedColumnsPositions.push(accumulator);
1186
+ accumulator += cells[i].offsetWidth;
1187
+ }
1188
+ }
1189
+ /**
1190
+ * Clears all fixed columns state and styling
1191
+ * @internal
1192
+ */
1193
+ clearFixedColumns() {
1194
+ if (this.rowElements.length === 0) {
1195
+ this.fixedColumnsPositions = [];
1196
+ return;
1197
+ }
1198
+ this.rowElements.forEach((row) => {
1199
+ const cells = row.querySelectorAll(
1200
+ '[role="cell"], [role="gridcell"], [role="columnheader"]'
1201
+ );
1202
+ this.fixedColumnsPositions.forEach((_, index) => {
1203
+ if (index < cells.length) {
1204
+ const gridCell = cells[index];
1205
+ if (typeof gridCell.setFixedPosition === "function") {
1206
+ gridCell.setFixedPosition(void 0);
1207
+ }
1208
+ }
1209
+ });
1210
+ });
1211
+ this.fixedColumnsPositions = [];
1212
+ }
1085
1213
  };
1086
1214
  __decorateClass([
1087
1215
  vividElement.attr({ attribute: "no-tabbing", mode: "boolean" })
@@ -1114,6 +1242,9 @@ __decorateClass([
1114
1242
  __decorateClass([
1115
1243
  vividElement.observable
1116
1244
  ], _DataGrid.prototype, "focusColumnIndex");
1245
+ __decorateClass([
1246
+ vividElement.attr({ attribute: "fixed-columns", converter: vividElement.nullableNumberConverter })
1247
+ ], _DataGrid.prototype, "fixedColumns");
1117
1248
  __decorateClass([
1118
1249
  vividElement.observable
1119
1250
  ], _DataGrid.prototype, "defaultRowItemTemplate");
@@ -1279,6 +1410,11 @@ const DataGridCellTemplate = (context) => {
1279
1410
  >
1280
1411
  ${(x) => x.ariaSelected === "true" ? vividElement.html`<${visuallyHiddenTagName}>${(x2) => x2.locale.dataGrid.cell.selected}</${visuallyHiddenTagName}>` : null}
1281
1412
  <slot></slot>
1413
+ ${when.when(
1414
+ shouldShowSortIcons,
1415
+ vividElement.html`<${visuallyHiddenTagName}>${(x) => x.locale.dataGrid.cell.button}</${visuallyHiddenTagName}>
1416
+ `
1417
+ )}
1282
1418
  ${(_) => renderSortIcons(context)}
1283
1419
  </div>
1284
1420
  </template>