@vonage/vivid 4.30.1 → 5.0.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 (141) hide show
  1. package/custom-elements.json +129 -172
  2. package/lib/accordion-item/accordion-item.d.ts +42 -1
  3. package/lib/action-group/action-group.d.ts +42 -1
  4. package/lib/alert/alert.d.ts +84 -2
  5. package/lib/audio-player/audio-player.d.ts +42 -1
  6. package/lib/avatar/avatar.d.ts +42 -1
  7. package/lib/badge/badge.d.ts +42 -1
  8. package/lib/banner/banner.d.ts +126 -3
  9. package/lib/breadcrumb/breadcrumb.d.ts +42 -1
  10. package/lib/breadcrumb-item/breadcrumb-item.d.ts +42 -1
  11. package/lib/button/button.d.ts +126 -3
  12. package/lib/calendar-event/calendar-event.d.ts +42 -1
  13. package/lib/card/card.d.ts +42 -1
  14. package/lib/checkbox/checkbox.d.ts +252 -7
  15. package/lib/combobox/combobox.d.ts +252 -6
  16. package/lib/data-grid/data-grid-cell.d.ts +419 -2
  17. package/lib/data-grid/data-grid-row.d.ts +380 -1
  18. package/lib/date-picker/date-picker.d.ts +336 -8
  19. package/lib/date-range-picker/date-range-picker.d.ts +168 -4
  20. package/lib/date-time-picker/date-time-picker.d.ts +336 -8
  21. package/lib/dial-pad/dial-pad.d.ts +42 -1
  22. package/lib/dialog/dialog.d.ts +84 -2
  23. package/lib/divider/divider.d.ts +42 -1
  24. package/lib/fab/fab.d.ts +42 -1
  25. package/lib/file-picker/file-picker.d.ts +252 -6
  26. package/lib/file-picker/locale.d.ts +1 -0
  27. package/lib/header/header.d.ts +42 -1
  28. package/lib/menu/menu.d.ts +84 -2
  29. package/lib/menu-item/menu-item.d.ts +84 -2
  30. package/lib/nav/nav.d.ts +42 -1
  31. package/lib/nav-disclosure/nav-disclosure.d.ts +84 -2
  32. package/lib/nav-item/nav-item.d.ts +84 -2
  33. package/lib/note/note.d.ts +42 -1
  34. package/lib/number-field/number-field.d.ts +336 -8
  35. package/lib/option/option.d.ts +84 -2
  36. package/lib/pagination/pagination.d.ts +42 -1
  37. package/lib/progress/progress.d.ts +42 -1
  38. package/lib/progress-ring/progress-ring.d.ts +42 -1
  39. package/lib/radio/radio.d.ts +126 -4
  40. package/lib/radio-group/radio-group.d.ts +42 -1
  41. package/lib/range-slider/range-slider.d.ts +126 -3
  42. package/lib/rich-text-editor/menubar/menubar.d.ts +42 -1
  43. package/lib/rich-text-editor/rich-text-editor.d.ts +42 -1
  44. package/lib/searchable-select/option-tag.d.ts +42 -1
  45. package/lib/searchable-select/searchable-select.d.ts +336 -8
  46. package/lib/select/select.d.ts +294 -7
  47. package/lib/selectable-box/selectable-box.d.ts +42 -2
  48. package/lib/slider/slider.d.ts +126 -3
  49. package/lib/split-button/split-button.d.ts +126 -3
  50. package/lib/switch/switch.d.ts +84 -2
  51. package/lib/tab/tab.d.ts +126 -3
  52. package/lib/tab-panel/tab-panel.d.ts +42 -1
  53. package/lib/tag/tag.d.ts +126 -3
  54. package/lib/tag-group/tag-group.d.ts +42 -1
  55. package/lib/text-area/text-area.d.ts +294 -7
  56. package/lib/text-field/text-field.d.ts +336 -8
  57. package/lib/time-picker/time-picker.d.ts +168 -4
  58. package/lib/toggletip/locale.d.ts +3 -0
  59. package/lib/toggletip/toggletip.d.ts +430 -11
  60. package/lib/tooltip/tooltip.d.ts +42 -1
  61. package/lib/tree-item/tree-item.d.ts +84 -2
  62. package/lib/tree-view/tree-view.d.ts +42 -1
  63. package/lib/video-player/video-player.d.ts +42 -1
  64. package/locales/de-DE.cjs +8 -1
  65. package/locales/de-DE.js +8 -1
  66. package/locales/en-GB.cjs +8 -1
  67. package/locales/en-GB.js +8 -1
  68. package/locales/en-US.cjs +8 -1
  69. package/locales/en-US.js +8 -1
  70. package/locales/ja-JP.cjs +8 -1
  71. package/locales/ja-JP.js +8 -1
  72. package/locales/zh-CN.cjs +8 -1
  73. package/locales/zh-CN.js +8 -1
  74. package/package.json +1 -1
  75. package/shared/anchored.js +1 -1
  76. package/shared/aria/aria-mixin.d.ts +43 -2
  77. package/shared/aria/attribute-removal.d.ts +3 -0
  78. package/shared/aria/delegate-aria-behavior.d.ts +0 -3
  79. package/shared/aria/delegates-aria.d.ts +42 -1
  80. package/shared/aria/host-semantics.d.ts +42 -1
  81. package/shared/definition13.cjs +1 -1
  82. package/shared/definition13.js +1 -1
  83. package/shared/definition15.cjs +6 -2
  84. package/shared/definition15.js +6 -2
  85. package/shared/definition17.cjs +61 -78
  86. package/shared/definition17.js +61 -78
  87. package/shared/definition26.cjs +37 -2
  88. package/shared/definition26.js +37 -2
  89. package/shared/definition30.cjs +8 -4
  90. package/shared/definition30.js +8 -4
  91. package/shared/definition31.cjs +7 -7
  92. package/shared/definition31.js +7 -7
  93. package/shared/definition42.cjs +0 -4
  94. package/shared/definition42.js +0 -4
  95. package/shared/definition47.cjs +0 -8
  96. package/shared/definition47.js +1 -9
  97. package/shared/definition5.cjs +1 -1
  98. package/shared/definition5.js +1 -1
  99. package/shared/definition54.cjs +1 -1
  100. package/shared/definition54.js +1 -1
  101. package/shared/definition60.cjs +7 -6
  102. package/shared/definition60.js +7 -6
  103. package/shared/definition62.cjs +1 -1
  104. package/shared/definition62.js +1 -1
  105. package/shared/definition63.cjs +1 -2
  106. package/shared/definition63.js +1 -2
  107. package/shared/delegates-aria.cjs +4 -25
  108. package/shared/delegates-aria.js +4 -25
  109. package/shared/divider.cjs +8 -3
  110. package/shared/divider.js +8 -3
  111. package/shared/feedback/feedback-message.d.ts +42 -1
  112. package/shared/feedback/mixins.d.ts +84 -2
  113. package/shared/foundation/button/button.d.ts +84 -2
  114. package/shared/foundation/form-associated/form-associated.d.ts +84 -2
  115. package/shared/foundation/vivid-element/vivid-element.d.ts +43 -2
  116. package/shared/listbox.cjs +1 -1
  117. package/shared/listbox.js +1 -1
  118. package/shared/localization/Locale.d.ts +2 -0
  119. package/shared/option.cjs +15 -2
  120. package/shared/option.js +16 -3
  121. package/shared/patterns/affix.d.ts +84 -2
  122. package/shared/patterns/anchored.d.ts +84 -2
  123. package/shared/patterns/char-count/char-count.d.ts +42 -1
  124. package/shared/patterns/form-elements/form-element.d.ts +84 -2
  125. package/shared/patterns/form-elements/with-error-text.d.ts +126 -3
  126. package/shared/patterns/form-elements/with-success-text.d.ts +42 -1
  127. package/shared/patterns/linkable.d.ts +42 -1
  128. package/shared/patterns/localized.d.ts +42 -1
  129. package/shared/patterns/trapped-focus.d.ts +42 -1
  130. package/shared/picker-field/mixins/calendar-picker.d.ts +84 -2
  131. package/shared/picker-field/mixins/calendar-picker.template.d.ts +84 -2
  132. package/shared/picker-field/mixins/inline-time-picker/inline-time-picker.d.ts +42 -1
  133. package/shared/picker-field/mixins/min-max-calendar-picker.d.ts +168 -4
  134. package/shared/picker-field/mixins/single-date-picker.d.ts +252 -6
  135. package/shared/picker-field/mixins/single-value-picker.d.ts +84 -2
  136. package/shared/picker-field/mixins/time-selection-picker.d.ts +168 -4
  137. package/shared/picker-field/mixins/time-selection-picker.template.d.ts +168 -4
  138. package/shared/picker-field/picker-field.d.ts +252 -6
  139. package/shared/vivid-element.cjs +56 -5
  140. package/shared/vivid-element.js +56 -5
  141. package/vivid.api.json +2 -93
@@ -13,7 +13,7 @@ const when = require('./when.cjs');
13
13
  const ref = require('./ref.cjs');
14
14
  const classNames = require('./class-names.cjs');
15
15
 
16
- const styles = ":host{display:block;max-inline-size:400px}.base{display:flex;flex-direction:column;block-size:inherit;max-block-size:inherit;--_low-ink-color: var(--vvd-color-neutral-600)}.control-wrapper{display:flex;flex-direction:column;block-size:inherit;gap:4px;max-block-size:inherit}.control{display:flex;box-sizing:border-box;flex-wrap:wrap;align-items:center;justify-content:center;padding:16px;border:1px dashed var(--vvd-color-neutral-400);border-radius:8px;background-color:var(--vvd-color-cta-50);color:var(--vvd-color-neutral-600);cursor:pointer;font:var(--vvd-typography-base);gap:8px;inline-size:100%;min-block-size:52px;outline:none;transition:all .3s ease}.control:not(.size-expanded){min-block-size:52px}.control.size-expanded{min-block-size:120px}.control:focus-visible{--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))}.control:hover,.control:active,.control:focus-visible{background-color:var(--vvd-color-cta-100)}.main{pointer-events:none}.dz-preview{display:grid;box-sizing:border-box;padding:8px;border:1px solid var(--vvd-color-neutral-300);border-radius:8px;background-color:var(--file-picker-list-item-background-color, var(--vvd-color-canvas));grid-template-columns:1fr auto;grid-template-rows:auto auto;inline-size:100%}.dz-preview .dz-details{display:flex;min-width:0;flex-direction:column;max-inline-size:100%}.dz-preview .dz-details .dz-filename{overflow:hidden;color:var(--vvd-color-canvas-text);font:var(--vvd-typography-base);text-overflow:ellipsis;white-space:nowrap}.dz-preview .dz-details .dz-size{color:var(--vvd-color-neutral-600);font:var(--vvd-typography-base-condensed)}.dz-preview .dz-error-message{display:flex;align-items:center;color:var(--vvd-color-alert-600);font:var(--vvd-typography-base-condensed-bold);gap:4px;margin-block-start:4px}.dz-preview:not(.dz-error) .dz-error-message{display:none}.dz-preview.dz-error{border:1px solid var(--vvd-color-alert-500);background-color:var(--vvd-color-alert-50)}.dz-preview.dz-error .dz-details .dz-size,.dz-preview.dz-error .dz-progress{display:none}.dz-preview .remove-btn{display:inline;align-self:center;grid-column:2/-1;grid-row:1/-1}.preview-list{--scrollbar-track-color: transparent;--scrollbar-thumb-color: color-mix(in srgb, var(--vvd-color-neutral-950), transparent 70%)}.preview-list{scrollbar-color:var(--scrollbar-thumb-color) var(--scrollbar-track-color);scrollbar-width:thin}.preview-list ::-webkit-scrollbar{width:4px}.preview-list ::-webkit-scrollbar-track{background:var(--scrollbar-track-color)}.preview-list ::-webkit-scrollbar-thumb{border:0;border-radius:4px;background-color:var(--scrollbar-fallback-track-color, var(--scrollbar-thumb-color))}.preview-list{display:flex;flex-direction:column;gap:12px;margin-block-start:12px;overflow-y:auto}.preview-list:empty{display:none}";
16
+ const styles = ":host{display:block;max-inline-size:400px}.base{display:flex;flex-direction:column;block-size:inherit;max-block-size:inherit;--_low-ink-color: var(--vvd-color-neutral-600)}.control-wrapper{display:flex;flex-direction:column;block-size:inherit;gap:4px;max-block-size:inherit}.control{position:relative;display:flex;box-sizing:border-box;flex-wrap:wrap;align-items:center;justify-content:center;padding:16px;border:1px dashed var(--vvd-color-neutral-400);border-radius:8px;background-color:var(--vvd-color-cta-50);color:var(--vvd-color-neutral-600);cursor:pointer;font:var(--vvd-typography-base);gap:8px;inline-size:100%;min-block-size:52px;outline:none;transition:all .3s ease}.control .upload-text{display:flex;align-items:center;justify-content:center;color:var(--vvd-color-neutral-600);isolation:isolate;pointer-events:none;text-align:center;transition:all .3s ease}.control:hover .upload-text,.control.dz-drag-hover .upload-text{color:var(--vvd-color-neutral-800)}.control:not(.size-expanded){min-block-size:52px}.control.size-expanded{min-block-size:120px}.control:focus-visible{--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))}.control:hover,.control:active,.control:focus-visible{border-color:var(--vvd-color-cta-400);background-color:var(--vvd-color-cta-100);box-shadow:0 2px 8px #0000001a;transform:translateY(-1px)}.control:active{box-shadow:0 1px 4px #0000001a;transform:translateY(0)}.control.dz-drag-hover{border-color:var(--vvd-color-cta-200);background-color:var(--vvd-color-cta-200);outline:2px dashed var(--vvd-color-cta-500);transform:scale(1.02)}.upload-icon{animation:subtle-pulse 2s ease-in-out infinite;color:var(--vvd-color-cta-600);pointer-events:none;transition:all .3s ease}.control:hover .upload-icon{animation:none;color:var(--vvd-color-cta-700);transform:scale(1.1)}.control:active .upload-icon{transform:scale(1.05)}.control.dz-drag-hover .upload-icon{animation:none;color:var(--vvd-color-neutral-800);transform:scale(1.15)}@keyframes subtle-pulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.8;transform:scale(1.05)}}.main{pointer-events:none}.dz-preview{display:grid;box-sizing:border-box;padding:8px;border:1px solid var(--vvd-color-neutral-300);border-radius:8px;background-color:var(--file-picker-list-item-background-color, var(--vvd-color-canvas));grid-template-columns:1fr auto;grid-template-rows:auto auto;inline-size:100%}.dz-preview .dz-details{display:flex;min-width:0;flex-direction:column;max-inline-size:100%}.dz-preview .dz-details .dz-filename{overflow:hidden;color:var(--vvd-color-canvas-text);font:var(--vvd-typography-base);text-overflow:ellipsis;white-space:nowrap}.dz-preview .dz-details .dz-size{color:var(--vvd-color-neutral-600);font:var(--vvd-typography-base-condensed)}.dz-preview .dz-error-message{display:flex;align-items:center;color:var(--vvd-color-alert-600);font:var(--vvd-typography-base-condensed-bold);gap:4px;margin-block-start:4px}.dz-preview:not(.dz-error) .dz-error-message{display:none}.dz-preview.dz-error{border:1px solid var(--vvd-color-alert-500);background-color:var(--vvd-color-alert-50)}.dz-preview.dz-error .dz-details .dz-size,.dz-preview.dz-error .dz-progress{display:none}.dz-preview .remove-btn{display:inline;align-self:center;grid-column:2/-1;grid-row:1/-1}.preview-list{--scrollbar-track-color: transparent;--scrollbar-thumb-color: color-mix(in srgb, var(--vvd-color-neutral-950), transparent 70%)}.preview-list{scrollbar-color:var(--scrollbar-thumb-color) var(--scrollbar-track-color);scrollbar-width:thin}.preview-list ::-webkit-scrollbar{width:4px}.preview-list ::-webkit-scrollbar-track{background:var(--scrollbar-track-color)}.preview-list ::-webkit-scrollbar-thumb{border:0;border-radius:4px;background-color:var(--scrollbar-fallback-track-color, var(--scrollbar-thumb-color))}.preview-list{display:flex;flex-direction:column;gap:12px;margin-block-start:12px;overflow-y:auto}.preview-list:empty{display:none}";
17
17
 
18
18
  var objectExtend = extend;
19
19
 
@@ -2311,6 +2311,7 @@ class FilePicker extends mixins.WithFeedback(
2311
2311
  const previewList = this.shadowRoot.querySelector(
2312
2312
  ".preview-list"
2313
2313
  );
2314
+ this.#setupDragEventHandlers(control);
2314
2315
  this.#dropzone = new $3ed269f2f0fb224b$export$2e2bcd8739ae039(control, {
2315
2316
  url: "/",
2316
2317
  // dummy url, we do not use dropzone's upload functionality
@@ -2338,6 +2339,34 @@ class FilePicker extends mixins.WithFeedback(
2338
2339
  });
2339
2340
  this.#syncSingleFileState();
2340
2341
  }
2342
+ /**
2343
+ * Sets up drag event handlers for enhanced visual feedback
2344
+ * @private
2345
+ */
2346
+ #setupDragEventHandlers(control) {
2347
+ control.addEventListener("dragenter", (e) => {
2348
+ e.preventDefault();
2349
+ e.stopPropagation();
2350
+ control.classList.add("dz-drag-hover");
2351
+ });
2352
+ control.addEventListener("dragover", (e) => {
2353
+ e.preventDefault();
2354
+ e.stopPropagation();
2355
+ control.classList.add("dz-drag-hover");
2356
+ });
2357
+ control.addEventListener("dragleave", (e) => {
2358
+ e.preventDefault();
2359
+ e.stopPropagation();
2360
+ if (!control.contains(e.relatedTarget)) {
2361
+ control.classList.remove("dz-drag-hover");
2362
+ }
2363
+ });
2364
+ control.addEventListener("drop", (e) => {
2365
+ e.preventDefault();
2366
+ e.stopPropagation();
2367
+ control.classList.remove("dz-drag-hover");
2368
+ });
2369
+ }
2341
2370
  disconnectedCallback() {
2342
2371
  super.disconnectedCallback();
2343
2372
  this.#dropzone.destroy();
@@ -2486,7 +2515,13 @@ const FilePickerTemplate = (context) => {
2486
2515
  role: "button"
2487
2516
  })}
2488
2517
  >
2489
- <slot class="main"></slot>
2518
+ <vwc-icon
2519
+ class="upload-icon"
2520
+ name="cloud-upload-line"
2521
+ size="-4"
2522
+ label="${(x) => x.locale.filePicker.uploadFilesLabel}"
2523
+ ></vwc-icon>
2524
+ <span class="upload-text"><slot></slot></span>
2490
2525
  </div>
2491
2526
  ${(x) => x._getFeedbackTemplate(context)}
2492
2527
  </div>
@@ -11,7 +11,7 @@ import { w as when } from './when.js';
11
11
  import { r as ref } from './ref.js';
12
12
  import { c as classNames } from './class-names.js';
13
13
 
14
- const styles = ":host{display:block;max-inline-size:400px}.base{display:flex;flex-direction:column;block-size:inherit;max-block-size:inherit;--_low-ink-color: var(--vvd-color-neutral-600)}.control-wrapper{display:flex;flex-direction:column;block-size:inherit;gap:4px;max-block-size:inherit}.control{display:flex;box-sizing:border-box;flex-wrap:wrap;align-items:center;justify-content:center;padding:16px;border:1px dashed var(--vvd-color-neutral-400);border-radius:8px;background-color:var(--vvd-color-cta-50);color:var(--vvd-color-neutral-600);cursor:pointer;font:var(--vvd-typography-base);gap:8px;inline-size:100%;min-block-size:52px;outline:none;transition:all .3s ease}.control:not(.size-expanded){min-block-size:52px}.control.size-expanded{min-block-size:120px}.control:focus-visible{--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))}.control:hover,.control:active,.control:focus-visible{background-color:var(--vvd-color-cta-100)}.main{pointer-events:none}.dz-preview{display:grid;box-sizing:border-box;padding:8px;border:1px solid var(--vvd-color-neutral-300);border-radius:8px;background-color:var(--file-picker-list-item-background-color, var(--vvd-color-canvas));grid-template-columns:1fr auto;grid-template-rows:auto auto;inline-size:100%}.dz-preview .dz-details{display:flex;min-width:0;flex-direction:column;max-inline-size:100%}.dz-preview .dz-details .dz-filename{overflow:hidden;color:var(--vvd-color-canvas-text);font:var(--vvd-typography-base);text-overflow:ellipsis;white-space:nowrap}.dz-preview .dz-details .dz-size{color:var(--vvd-color-neutral-600);font:var(--vvd-typography-base-condensed)}.dz-preview .dz-error-message{display:flex;align-items:center;color:var(--vvd-color-alert-600);font:var(--vvd-typography-base-condensed-bold);gap:4px;margin-block-start:4px}.dz-preview:not(.dz-error) .dz-error-message{display:none}.dz-preview.dz-error{border:1px solid var(--vvd-color-alert-500);background-color:var(--vvd-color-alert-50)}.dz-preview.dz-error .dz-details .dz-size,.dz-preview.dz-error .dz-progress{display:none}.dz-preview .remove-btn{display:inline;align-self:center;grid-column:2/-1;grid-row:1/-1}.preview-list{--scrollbar-track-color: transparent;--scrollbar-thumb-color: color-mix(in srgb, var(--vvd-color-neutral-950), transparent 70%)}.preview-list{scrollbar-color:var(--scrollbar-thumb-color) var(--scrollbar-track-color);scrollbar-width:thin}.preview-list ::-webkit-scrollbar{width:4px}.preview-list ::-webkit-scrollbar-track{background:var(--scrollbar-track-color)}.preview-list ::-webkit-scrollbar-thumb{border:0;border-radius:4px;background-color:var(--scrollbar-fallback-track-color, var(--scrollbar-thumb-color))}.preview-list{display:flex;flex-direction:column;gap:12px;margin-block-start:12px;overflow-y:auto}.preview-list:empty{display:none}";
14
+ const styles = ":host{display:block;max-inline-size:400px}.base{display:flex;flex-direction:column;block-size:inherit;max-block-size:inherit;--_low-ink-color: var(--vvd-color-neutral-600)}.control-wrapper{display:flex;flex-direction:column;block-size:inherit;gap:4px;max-block-size:inherit}.control{position:relative;display:flex;box-sizing:border-box;flex-wrap:wrap;align-items:center;justify-content:center;padding:16px;border:1px dashed var(--vvd-color-neutral-400);border-radius:8px;background-color:var(--vvd-color-cta-50);color:var(--vvd-color-neutral-600);cursor:pointer;font:var(--vvd-typography-base);gap:8px;inline-size:100%;min-block-size:52px;outline:none;transition:all .3s ease}.control .upload-text{display:flex;align-items:center;justify-content:center;color:var(--vvd-color-neutral-600);isolation:isolate;pointer-events:none;text-align:center;transition:all .3s ease}.control:hover .upload-text,.control.dz-drag-hover .upload-text{color:var(--vvd-color-neutral-800)}.control:not(.size-expanded){min-block-size:52px}.control.size-expanded{min-block-size:120px}.control:focus-visible{--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))}.control:hover,.control:active,.control:focus-visible{border-color:var(--vvd-color-cta-400);background-color:var(--vvd-color-cta-100);box-shadow:0 2px 8px #0000001a;transform:translateY(-1px)}.control:active{box-shadow:0 1px 4px #0000001a;transform:translateY(0)}.control.dz-drag-hover{border-color:var(--vvd-color-cta-200);background-color:var(--vvd-color-cta-200);outline:2px dashed var(--vvd-color-cta-500);transform:scale(1.02)}.upload-icon{animation:subtle-pulse 2s ease-in-out infinite;color:var(--vvd-color-cta-600);pointer-events:none;transition:all .3s ease}.control:hover .upload-icon{animation:none;color:var(--vvd-color-cta-700);transform:scale(1.1)}.control:active .upload-icon{transform:scale(1.05)}.control.dz-drag-hover .upload-icon{animation:none;color:var(--vvd-color-neutral-800);transform:scale(1.15)}@keyframes subtle-pulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.8;transform:scale(1.05)}}.main{pointer-events:none}.dz-preview{display:grid;box-sizing:border-box;padding:8px;border:1px solid var(--vvd-color-neutral-300);border-radius:8px;background-color:var(--file-picker-list-item-background-color, var(--vvd-color-canvas));grid-template-columns:1fr auto;grid-template-rows:auto auto;inline-size:100%}.dz-preview .dz-details{display:flex;min-width:0;flex-direction:column;max-inline-size:100%}.dz-preview .dz-details .dz-filename{overflow:hidden;color:var(--vvd-color-canvas-text);font:var(--vvd-typography-base);text-overflow:ellipsis;white-space:nowrap}.dz-preview .dz-details .dz-size{color:var(--vvd-color-neutral-600);font:var(--vvd-typography-base-condensed)}.dz-preview .dz-error-message{display:flex;align-items:center;color:var(--vvd-color-alert-600);font:var(--vvd-typography-base-condensed-bold);gap:4px;margin-block-start:4px}.dz-preview:not(.dz-error) .dz-error-message{display:none}.dz-preview.dz-error{border:1px solid var(--vvd-color-alert-500);background-color:var(--vvd-color-alert-50)}.dz-preview.dz-error .dz-details .dz-size,.dz-preview.dz-error .dz-progress{display:none}.dz-preview .remove-btn{display:inline;align-self:center;grid-column:2/-1;grid-row:1/-1}.preview-list{--scrollbar-track-color: transparent;--scrollbar-thumb-color: color-mix(in srgb, var(--vvd-color-neutral-950), transparent 70%)}.preview-list{scrollbar-color:var(--scrollbar-thumb-color) var(--scrollbar-track-color);scrollbar-width:thin}.preview-list ::-webkit-scrollbar{width:4px}.preview-list ::-webkit-scrollbar-track{background:var(--scrollbar-track-color)}.preview-list ::-webkit-scrollbar-thumb{border:0;border-radius:4px;background-color:var(--scrollbar-fallback-track-color, var(--scrollbar-thumb-color))}.preview-list{display:flex;flex-direction:column;gap:12px;margin-block-start:12px;overflow-y:auto}.preview-list:empty{display:none}";
15
15
 
16
16
  var objectExtend = extend;
17
17
 
@@ -2309,6 +2309,7 @@ class FilePicker extends WithFeedback(
2309
2309
  const previewList = this.shadowRoot.querySelector(
2310
2310
  ".preview-list"
2311
2311
  );
2312
+ this.#setupDragEventHandlers(control);
2312
2313
  this.#dropzone = new $3ed269f2f0fb224b$export$2e2bcd8739ae039(control, {
2313
2314
  url: "/",
2314
2315
  // dummy url, we do not use dropzone's upload functionality
@@ -2336,6 +2337,34 @@ class FilePicker extends WithFeedback(
2336
2337
  });
2337
2338
  this.#syncSingleFileState();
2338
2339
  }
2340
+ /**
2341
+ * Sets up drag event handlers for enhanced visual feedback
2342
+ * @private
2343
+ */
2344
+ #setupDragEventHandlers(control) {
2345
+ control.addEventListener("dragenter", (e) => {
2346
+ e.preventDefault();
2347
+ e.stopPropagation();
2348
+ control.classList.add("dz-drag-hover");
2349
+ });
2350
+ control.addEventListener("dragover", (e) => {
2351
+ e.preventDefault();
2352
+ e.stopPropagation();
2353
+ control.classList.add("dz-drag-hover");
2354
+ });
2355
+ control.addEventListener("dragleave", (e) => {
2356
+ e.preventDefault();
2357
+ e.stopPropagation();
2358
+ if (!control.contains(e.relatedTarget)) {
2359
+ control.classList.remove("dz-drag-hover");
2360
+ }
2361
+ });
2362
+ control.addEventListener("drop", (e) => {
2363
+ e.preventDefault();
2364
+ e.stopPropagation();
2365
+ control.classList.remove("dz-drag-hover");
2366
+ });
2367
+ }
2339
2368
  disconnectedCallback() {
2340
2369
  super.disconnectedCallback();
2341
2370
  this.#dropzone.destroy();
@@ -2484,7 +2513,13 @@ const FilePickerTemplate = (context) => {
2484
2513
  role: "button"
2485
2514
  })}
2486
2515
  >
2487
- <slot class="main"></slot>
2516
+ <vwc-icon
2517
+ class="upload-icon"
2518
+ name="cloud-upload-line"
2519
+ size="-4"
2520
+ label="${(x) => x.locale.filePicker.uploadFilesLabel}"
2521
+ ></vwc-icon>
2522
+ <span class="upload-text"><slot></slot></span>
2488
2523
  </div>
2489
2524
  ${(x) => x._getFeedbackTemplate(context)}
2490
2525
  </div>
@@ -30,7 +30,14 @@ var __decorateClass = (decorators, target, key, kind) => {
30
30
  class MenuItem extends hostSemantics.HostSemantics(affix.AffixIcon(vividElement.VividElement)) {
31
31
  constructor() {
32
32
  super();
33
- // eslint-disable-next-line @repo/repo/no-attribute-default-value
33
+ /**
34
+ * The role of the element.
35
+ *
36
+ * @deprecated Use `control-type` instead for checkbox and radio items. If the menu item is not a direct descendant of a menu, role will default to `presentation`.
37
+ * @public
38
+ * @remarks
39
+ * HTML Attribute: role
40
+ */
34
41
  this.role = MenuItemRole.menuitem;
35
42
  this.checked = false;
36
43
  /**
@@ -223,9 +230,6 @@ __decorateClass([
223
230
  __decorateClass([
224
231
  vividElement.attr({ mode: "boolean" })
225
232
  ], MenuItem.prototype, "expanded");
226
- __decorateClass([
227
- vividElement.attr
228
- ], MenuItem.prototype, "role");
229
233
  __decorateClass([
230
234
  vividElement.observable
231
235
  ], MenuItem.prototype, "_isPresentational");
@@ -28,7 +28,14 @@ var __decorateClass = (decorators, target, key, kind) => {
28
28
  class MenuItem extends HostSemantics(AffixIcon(VividElement)) {
29
29
  constructor() {
30
30
  super();
31
- // eslint-disable-next-line @repo/repo/no-attribute-default-value
31
+ /**
32
+ * The role of the element.
33
+ *
34
+ * @deprecated Use `control-type` instead for checkbox and radio items. If the menu item is not a direct descendant of a menu, role will default to `presentation`.
35
+ * @public
36
+ * @remarks
37
+ * HTML Attribute: role
38
+ */
32
39
  this.role = MenuItemRole.menuitem;
33
40
  this.checked = false;
34
41
  /**
@@ -221,9 +228,6 @@ __decorateClass([
221
228
  __decorateClass([
222
229
  attr({ mode: "boolean" })
223
230
  ], MenuItem.prototype, "expanded");
224
- __decorateClass([
225
- attr
226
- ], MenuItem.prototype, "role");
227
231
  __decorateClass([
228
232
  observable
229
233
  ], MenuItem.prototype, "_isPresentational");
@@ -211,7 +211,7 @@ class Menu extends anchored.Anchored(delegatesAria.DelegatesAria(vividElement.Vi
211
211
  }
212
212
  }
213
213
  get #triggerBehaviour() {
214
- return this.trigger ?? "legacy";
214
+ return this.trigger ?? "auto";
215
215
  }
216
216
  openChanged(_, newValue) {
217
217
  if (newValue) {
@@ -232,19 +232,19 @@ class Menu extends anchored.Anchored(delegatesAria.DelegatesAria(vividElement.Vi
232
232
  #setupAnchor(a) {
233
233
  a.addEventListener("click", this.#onAnchorClick, true);
234
234
  a.addEventListener("focusout", this._onFocusout);
235
- a.setAttribute("aria-haspopup", "menu");
235
+ a.ariaHasPopup = "menu";
236
236
  this.#updateAnchor(a);
237
237
  }
238
238
  #updateAnchor(a) {
239
- a.setAttribute("aria-expanded", this.open.toString());
240
- a.setAttribute("data-expanded", this.open.toString());
239
+ a.ariaExpanded = this.open.toString();
240
+ a.dataset.expanded = this.open.toString();
241
241
  }
242
242
  #cleanupAnchor(a) {
243
243
  a.removeEventListener("click", this.#onAnchorClick, true);
244
244
  a.removeEventListener("focusout", this._onFocusout);
245
- a.removeAttribute("aria-haspopup");
246
- a.removeAttribute("aria-expanded");
247
- a.removeAttribute("data-expanded");
245
+ a.ariaHasPopup = null;
246
+ a.ariaExpanded = null;
247
+ delete a.dataset.expanded;
248
248
  }
249
249
  #onAnchorClick;
250
250
  /**
@@ -209,7 +209,7 @@ class Menu extends Anchored(DelegatesAria(VividElement)) {
209
209
  }
210
210
  }
211
211
  get #triggerBehaviour() {
212
- return this.trigger ?? "legacy";
212
+ return this.trigger ?? "auto";
213
213
  }
214
214
  openChanged(_, newValue) {
215
215
  if (newValue) {
@@ -230,19 +230,19 @@ class Menu extends Anchored(DelegatesAria(VividElement)) {
230
230
  #setupAnchor(a) {
231
231
  a.addEventListener("click", this.#onAnchorClick, true);
232
232
  a.addEventListener("focusout", this._onFocusout);
233
- a.setAttribute("aria-haspopup", "menu");
233
+ a.ariaHasPopup = "menu";
234
234
  this.#updateAnchor(a);
235
235
  }
236
236
  #updateAnchor(a) {
237
- a.setAttribute("aria-expanded", this.open.toString());
238
- a.setAttribute("data-expanded", this.open.toString());
237
+ a.ariaExpanded = this.open.toString();
238
+ a.dataset.expanded = this.open.toString();
239
239
  }
240
240
  #cleanupAnchor(a) {
241
241
  a.removeEventListener("click", this.#onAnchorClick, true);
242
242
  a.removeEventListener("focusout", this._onFocusout);
243
- a.removeAttribute("aria-haspopup");
244
- a.removeAttribute("aria-expanded");
245
- a.removeAttribute("data-expanded");
243
+ a.ariaHasPopup = null;
244
+ a.ariaExpanded = null;
245
+ delete a.dataset.expanded;
246
246
  }
247
247
  #onAnchorClick;
248
248
  /**
@@ -24,7 +24,6 @@ class Radio extends withErrorText.WithErrorText(
24
24
  ) {
25
25
  constructor() {
26
26
  super();
27
- this.ariaLabel = null;
28
27
  /**
29
28
  * The element's value to be included in form submission when checked.
30
29
  * Default to "on" to reach parity with input[type="radio"]
@@ -177,9 +176,6 @@ class Radio extends withErrorText.WithErrorText(
177
176
  }
178
177
  }
179
178
  }
180
- __decorateClass([
181
- vividElement.attr({ attribute: "aria-label" })
182
- ], Radio.prototype, "ariaLabel");
183
179
  __decorateClass([
184
180
  vividElement.attr
185
181
  ], Radio.prototype, "connotation");
@@ -22,7 +22,6 @@ class Radio extends WithErrorText(
22
22
  ) {
23
23
  constructor() {
24
24
  super();
25
- this.ariaLabel = null;
26
25
  /**
27
26
  * The element's value to be included in form submission when checked.
28
27
  * Default to "on" to reach parity with input[type="radio"]
@@ -175,9 +174,6 @@ class Radio extends WithErrorText(
175
174
  }
176
175
  }
177
176
  }
178
- __decorateClass([
179
- attr({ attribute: "aria-label" })
180
- ], Radio.prototype, "ariaLabel");
181
177
  __decorateClass([
182
178
  attr
183
179
  ], Radio.prototype, "connotation");
@@ -23,7 +23,6 @@ class SelectableBox extends delegatesAria.DelegatesAria(vividElement.VividElemen
23
23
  constructor() {
24
24
  super(...arguments);
25
25
  this.checked = false;
26
- this.clickable = false;
27
26
  this.clickableBox = false;
28
27
  this.controlPlacement = "end-stacked";
29
28
  this.tight = false;
@@ -49,13 +48,6 @@ __decorateClass([
49
48
  vividElement.attr({ mode: "boolean" })
50
49
  ], SelectableBox.prototype, "checked");
51
50
  __decorateClass([
52
- vividElement.attr({ mode: "boolean" })
53
- ], SelectableBox.prototype, "clickable");
54
- __decorateClass([
55
- vividElement.replaces({
56
- deprecatedPropertyName: "clickable",
57
- fromDeprecated: (v) => v
58
- }),
59
51
  vividElement.attr({ attribute: "clickable-box", mode: "boolean" })
60
52
  ], SelectableBox.prototype, "clickableBox");
61
53
  __decorateClass([
@@ -1,6 +1,6 @@
1
1
  import { C as Checkbox, c as checkboxDefinition } from './definition15.js';
2
2
  import { R as Radio, r as radioDefinition } from './definition42.js';
3
- import { V as VividElement, a as attr, r as replaces, h as html, d as createRegisterFunction, f as defineVividComponent } from './vivid-element.js';
3
+ import { V as VividElement, a as attr, h as html, d as createRegisterFunction, f as defineVividComponent } from './vivid-element.js';
4
4
  import { D as DelegatesAria, d as delegateAria } from './delegates-aria.js';
5
5
  import { C as Connotation } from './enums.js';
6
6
  import { c as classNames } from './class-names.js';
@@ -21,7 +21,6 @@ class SelectableBox extends DelegatesAria(VividElement) {
21
21
  constructor() {
22
22
  super(...arguments);
23
23
  this.checked = false;
24
- this.clickable = false;
25
24
  this.clickableBox = false;
26
25
  this.controlPlacement = "end-stacked";
27
26
  this.tight = false;
@@ -47,13 +46,6 @@ __decorateClass([
47
46
  attr({ mode: "boolean" })
48
47
  ], SelectableBox.prototype, "checked");
49
48
  __decorateClass([
50
- attr({ mode: "boolean" })
51
- ], SelectableBox.prototype, "clickable");
52
- __decorateClass([
53
- replaces({
54
- deprecatedPropertyName: "clickable",
55
- fromDeprecated: (v) => v
56
- }),
57
49
  attr({ attribute: "clickable-box", mode: "boolean" })
58
50
  ], SelectableBox.prototype, "clickableBox");
59
51
  __decorateClass([
@@ -379,7 +379,7 @@ const AudioPlayerTemplate = (context) => {
379
379
  ${when.when(
380
380
  (x) => Boolean(x.playbackRates),
381
381
  vividElement.html`
382
- <${menuTag} class="playback-rates" trigger="auto" placement="top-start" auto-dismiss id="playback-menu" position-strategy="absolute">
382
+ <${menuTag} class="playback-rates" placement="top-start" auto-dismiss id="playback-menu" position-strategy="absolute">
383
383
  <${buttonTag} id="playback-open-button"
384
384
  class="playback-button"
385
385
  slot="anchor"
@@ -377,7 +377,7 @@ const AudioPlayerTemplate = (context) => {
377
377
  ${when(
378
378
  (x) => Boolean(x.playbackRates),
379
379
  html`
380
- <${menuTag} class="playback-rates" trigger="auto" placement="top-start" auto-dismiss id="playback-menu" position-strategy="absolute">
380
+ <${menuTag} class="playback-rates" placement="top-start" auto-dismiss id="playback-menu" position-strategy="absolute">
381
381
  <${buttonTag} id="playback-open-button"
382
382
  class="playback-button"
383
383
  slot="anchor"
@@ -34,7 +34,7 @@ const oppositeOrientation = (orientation) => orientation === TabsOrientation.hor
34
34
  const gridProperty = (orientation) => orientation === TabsOrientation.horizontal ? "gridColumn" : "gridRow";
35
35
  const translateProperty = (orientation) => orientation === TabsOrientation.horizontal ? "translateX" : "translateY";
36
36
  const offsetProperty = (orientation) => orientation === TabsOrientation.horizontal ? "offsetLeft" : "offsetTop";
37
- const isFocusableElement = (el) => el.getAttribute("aria-disabled") !== "true" && !el.hasAttribute("hidden");
37
+ const isFocusableElement = (el) => el.getAttribute("aria-disabled") !== "true" && !el.disabled && !el.hasAttribute("hidden");
38
38
  class Tabs extends vividElement.VividElement {
39
39
  constructor() {
40
40
  super(...arguments);
@@ -32,7 +32,7 @@ const oppositeOrientation = (orientation) => orientation === TabsOrientation.hor
32
32
  const gridProperty = (orientation) => orientation === TabsOrientation.horizontal ? "gridColumn" : "gridRow";
33
33
  const translateProperty = (orientation) => orientation === TabsOrientation.horizontal ? "translateX" : "translateY";
34
34
  const offsetProperty = (orientation) => orientation === TabsOrientation.horizontal ? "offsetLeft" : "offsetTop";
35
- const isFocusableElement = (el) => el.getAttribute("aria-disabled") !== "true" && !el.hasAttribute("hidden");
35
+ const isFocusableElement = (el) => el.getAttribute("aria-disabled") !== "true" && !el.disabled && !el.hasAttribute("hidden");
36
36
  class Tabs extends VividElement {
37
37
  constructor() {
38
38
  super(...arguments);
@@ -3,6 +3,7 @@
3
3
  const definition = require('./definition67.cjs');
4
4
  const vividElement = require('./vivid-element.cjs');
5
5
  const anchored = require('./anchored.cjs');
6
+ const localized = require('./localized.cjs');
6
7
  const index = require('./index.cjs');
7
8
  const classNames = require('./class-names.cjs');
8
9
  const when = require('./when.cjs');
@@ -18,10 +19,10 @@ var __decorateClass = (decorators, target, key, kind) => {
18
19
  if (result) __defProp(target, key, result);
19
20
  return result;
20
21
  };
21
- class Toggletip extends anchored.Anchored(vividElement.VividElement) {
22
+ class Toggletip extends localized.Localized(anchored.Anchored(vividElement.VividElement)) {
22
23
  constructor() {
23
24
  super(...arguments);
24
- this.#ANCHOR_ARIA_LABEL_SUFFIX = " ; Show more information";
25
+ this.#originalAriaLabel = null;
25
26
  this.alternate = false;
26
27
  this.placement = "right";
27
28
  this.open = false;
@@ -39,7 +40,7 @@ class Toggletip extends anchored.Anchored(vividElement.VividElement) {
39
40
  }
40
41
  };
41
42
  }
42
- #ANCHOR_ARIA_LABEL_SUFFIX;
43
+ #originalAriaLabel;
43
44
  openChanged(oldValue, newValue) {
44
45
  if (oldValue === void 0) return;
45
46
  if (newValue) {
@@ -69,7 +70,8 @@ class Toggletip extends anchored.Anchored(vividElement.VividElement) {
69
70
  }
70
71
  #setupAnchor(a) {
71
72
  a.addEventListener("click", this.#openIfClosed, true);
72
- a.ariaLabel = (a.ariaLabel ?? "") + this.#ANCHOR_ARIA_LABEL_SUFFIX;
73
+ this.#originalAriaLabel = a.ariaLabel;
74
+ a.ariaLabel = `${this.locale.toggletip.anchorLabel(a.ariaLabel || "")}`;
73
75
  this.#updateAnchor(a);
74
76
  }
75
77
  #updateAnchor(a) {
@@ -78,8 +80,7 @@ class Toggletip extends anchored.Anchored(vividElement.VividElement) {
78
80
  }
79
81
  #cleanupAnchor(a) {
80
82
  a.removeEventListener("click", this.#openIfClosed, true);
81
- if (a.ariaLabel)
82
- a.ariaLabel = a.ariaLabel.replace(this.#ANCHOR_ARIA_LABEL_SUFFIX, "");
83
+ if (a.ariaLabel) a.ariaLabel = this.#originalAriaLabel;
83
84
  a.removeAttribute("aria-expanded");
84
85
  a.removeAttribute("data-expanded");
85
86
  }
@@ -1,6 +1,7 @@
1
1
  import { P as Popup, p as popupDefinition } from './definition67.js';
2
2
  import { D as DOM, V as VividElement, a as attr, h as html, d as createRegisterFunction, f as defineVividComponent } from './vivid-element.js';
3
3
  import { A as Anchored, a as anchorSlotTemplateFactory } from './anchored.js';
4
+ import { L as Localized } from './localized.js';
4
5
  import { h as handleEscapeKeyAndStopPropogation } from './index.js';
5
6
  import { c as classNames } from './class-names.js';
6
7
  import { w as when } from './when.js';
@@ -16,10 +17,10 @@ var __decorateClass = (decorators, target, key, kind) => {
16
17
  if (result) __defProp(target, key, result);
17
18
  return result;
18
19
  };
19
- class Toggletip extends Anchored(VividElement) {
20
+ class Toggletip extends Localized(Anchored(VividElement)) {
20
21
  constructor() {
21
22
  super(...arguments);
22
- this.#ANCHOR_ARIA_LABEL_SUFFIX = " ; Show more information";
23
+ this.#originalAriaLabel = null;
23
24
  this.alternate = false;
24
25
  this.placement = "right";
25
26
  this.open = false;
@@ -37,7 +38,7 @@ class Toggletip extends Anchored(VividElement) {
37
38
  }
38
39
  };
39
40
  }
40
- #ANCHOR_ARIA_LABEL_SUFFIX;
41
+ #originalAriaLabel;
41
42
  openChanged(oldValue, newValue) {
42
43
  if (oldValue === void 0) return;
43
44
  if (newValue) {
@@ -67,7 +68,8 @@ class Toggletip extends Anchored(VividElement) {
67
68
  }
68
69
  #setupAnchor(a) {
69
70
  a.addEventListener("click", this.#openIfClosed, true);
70
- a.ariaLabel = (a.ariaLabel ?? "") + this.#ANCHOR_ARIA_LABEL_SUFFIX;
71
+ this.#originalAriaLabel = a.ariaLabel;
72
+ a.ariaLabel = `${this.locale.toggletip.anchorLabel(a.ariaLabel || "")}`;
71
73
  this.#updateAnchor(a);
72
74
  }
73
75
  #updateAnchor(a) {
@@ -76,8 +78,7 @@ class Toggletip extends Anchored(VividElement) {
76
78
  }
77
79
  #cleanupAnchor(a) {
78
80
  a.removeEventListener("click", this.#openIfClosed, true);
79
- if (a.ariaLabel)
80
- a.ariaLabel = a.ariaLabel.replace(this.#ANCHOR_ARIA_LABEL_SUFFIX, "");
81
+ if (a.ariaLabel) a.ariaLabel = this.#originalAriaLabel;
81
82
  a.removeAttribute("aria-expanded");
82
83
  a.removeAttribute("data-expanded");
83
84
  }
@@ -23,7 +23,7 @@ var __decorateClass = (decorators, target, key, kind) => {
23
23
  return result;
24
24
  };
25
25
  function isTreeItemElement(el) {
26
- return dom.isHTMLElement(el) && el.getAttribute("role") === "treeitem";
26
+ return dom.isHTMLElement(el) && (el.getAttribute("role") === "treeitem" || el instanceof TreeItem);
27
27
  }
28
28
  class TreeItem extends hostSemantics.HostSemantics(affix.AffixIcon(vividElement.VividElement)) {
29
29
  constructor() {
@@ -21,7 +21,7 @@ var __decorateClass = (decorators, target, key, kind) => {
21
21
  return result;
22
22
  };
23
23
  function isTreeItemElement(el) {
24
- return isHTMLElement(el) && el.getAttribute("role") === "treeitem";
24
+ return isHTMLElement(el) && (el.getAttribute("role") === "treeitem" || el instanceof TreeItem);
25
25
  }
26
26
  class TreeItem extends HostSemantics(AffixIcon(VividElement)) {
27
27
  constructor() {
@@ -27,8 +27,7 @@ function getDisplayedNodes(rootNode, selector) {
27
27
  );
28
28
  const visibleNodes = nodes.filter((node) => {
29
29
  if (node.parentElement instanceof definition.TreeItem) {
30
- if (node.parentElement.getAttribute("aria-expanded") === "true")
31
- return true;
30
+ if (node.parentElement.expanded) return true;
32
31
  } else {
33
32
  return true;
34
33
  }
@@ -25,8 +25,7 @@ function getDisplayedNodes(rootNode, selector) {
25
25
  );
26
26
  const visibleNodes = nodes.filter((node) => {
27
27
  if (node.parentElement instanceof TreeItem) {
28
- if (node.parentElement.getAttribute("aria-expanded") === "true")
29
- return true;
28
+ if (node.parentElement.expanded) return true;
30
29
  } else {
31
30
  return true;
32
31
  }
@@ -9,7 +9,6 @@ class DelegateAriaBehavior {
9
9
  this.source = null;
10
10
  this.bindingBehaviours = [];
11
11
  this.onSourceAriaPropertyChanged = (source, property) => {
12
- this.mitigateAccessibilityIssues(source);
13
12
  if (!this.forwardedProperties.has(property)) {
14
13
  return;
15
14
  }
@@ -17,7 +16,6 @@ class DelegateAriaBehavior {
17
16
  };
18
17
  this.boundProperties = params.boundProperties;
19
18
  this.forwardedProperties = params.forwardedProperties;
20
- this.isMitigationDisabled = params.disableAccessibilityMitigation;
21
19
  }
22
20
  bind(source) {
23
21
  this.source = source;
@@ -27,7 +25,6 @@ class DelegateAriaBehavior {
27
25
  this.forwardedProperties,
28
26
  this.target
29
27
  );
30
- this.mitigateAccessibilityIssues(source);
31
28
  }
32
29
  unbind() {
33
30
  if (this.source === null) {
@@ -70,38 +67,20 @@ class DelegateAriaBehavior {
70
67
  forwardPropertyToTarget(target, property, value) {
71
68
  vividElement.DOM.setAttribute(target, vividElement.ariaAttributeName(property), value);
72
69
  }
73
- /**
74
- * Sets role to presentation unless there are properties present that prohibit it.
75
- * Using role="presentation" will cause non-global states or properties to be ignored.
76
- * See: https://www.w3.org/TR/wai-aria-1.3/#conflict_resolution_presentation_none
77
- */
78
- mitigateAccessibilityIssues(source) {
79
- if (this.isMitigationDisabled) {
80
- return;
81
- }
82
- const hasProhibitedProperties = Boolean(
83
- source.ariaLabel || source.ariaBrailleLabel || source.ariaChecked
84
- );
85
- if (hasProhibitedProperties) {
86
- source.removeAttribute("role");
87
- } else {
88
- source.setAttribute("role", "presentation");
89
- }
90
- }
91
70
  }
92
71
 
93
72
  function delegateAria(boundProperties = {}, options = {}) {
94
73
  const forwardedProperties = new Set(
95
- (options.onlySpecified ? [] : vividElement.ariaMixinProperties).filter((p) => p !== "role").filter((p) => !(p in boundProperties))
74
+ (options.onlySpecified ? [] : vividElement.ariaMixinProperties).filter(
75
+ (p) => !(p in boundProperties)
76
+ )
96
77
  );
97
- const disableAccessibilityMitigation = boundProperties.role instanceof Function;
98
78
  return new vividElement.AttachedBehaviorHTMLDirective(
99
79
  "vvd-delegate-aria",
100
80
  DelegateAriaBehavior,
101
81
  {
102
82
  boundProperties,
103
- forwardedProperties,
104
- disableAccessibilityMitigation
83
+ forwardedProperties
105
84
  }
106
85
  );
107
86
  }