@vonage/vivid 4.25.0 → 4.27.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 (196) hide show
  1. package/custom-elements.json +3371 -1999
  2. package/lib/accordion-item/accordion-item.d.ts +2 -2
  3. package/lib/action-group/action-group.d.ts +1 -1
  4. package/lib/alert/alert.d.ts +5 -5
  5. package/lib/audio-player/audio-player.d.ts +3 -3
  6. package/lib/avatar/avatar.d.ts +393 -1
  7. package/lib/avatar/avatar.template.d.ts +2 -2
  8. package/lib/badge/badge.d.ts +2 -2
  9. package/lib/banner/banner.d.ts +6 -6
  10. package/lib/breadcrumb/breadcrumb.d.ts +1 -1
  11. package/lib/breadcrumb-item/breadcrumb-item.d.ts +1 -1
  12. package/lib/button/button.d.ts +6 -6
  13. package/lib/calendar/calendar.d.ts +2 -0
  14. package/lib/calendar-event/calendar-event.d.ts +1 -1
  15. package/lib/card/card.d.ts +1 -1
  16. package/lib/checkbox/checkbox.d.ts +10 -10
  17. package/lib/combobox/combobox.d.ts +11 -11
  18. package/lib/data-grid/data-grid-cell.d.ts +6 -4
  19. package/lib/data-grid/data-grid-row.d.ts +1 -0
  20. package/lib/data-grid/data-grid.d.ts +1 -1
  21. package/lib/date-picker/date-picker.d.ts +75 -75
  22. package/lib/date-picker/date-picker.template.d.ts +1 -1
  23. package/lib/date-range-picker/date-range-picker.d.ts +44 -44
  24. package/lib/date-range-picker/date-range-picker.template.d.ts +1 -1
  25. package/lib/date-time-picker/date-time-picker.d.ts +64 -64
  26. package/lib/date-time-picker/date-time-picker.template.d.ts +1 -1
  27. package/lib/dial-pad/dial-pad.d.ts +3 -3
  28. package/lib/dialog/dialog.d.ts +5 -4
  29. package/lib/divider/divider.d.ts +1 -1
  30. package/lib/fab/fab.d.ts +2 -2
  31. package/lib/file-picker/file-picker.d.ts +10 -10
  32. package/lib/header/header.d.ts +1 -1
  33. package/lib/menu/menu.d.ts +2 -2
  34. package/lib/menu-item/menu-item.d.ts +3 -3
  35. package/lib/nav/nav.d.ts +1 -1
  36. package/lib/nav-disclosure/nav-disclosure.d.ts +3 -3
  37. package/lib/nav-item/nav-item.d.ts +3 -3
  38. package/lib/note/note.d.ts +2 -2
  39. package/lib/number-field/locale.d.ts +3 -2
  40. package/lib/number-field/number-field.d.ts +15 -15
  41. package/lib/option/option.d.ts +3 -3
  42. package/lib/pagination/locale.d.ts +5 -0
  43. package/lib/pagination/pagination.d.ts +341 -2
  44. package/lib/popup/popup.d.ts +1 -0
  45. package/lib/progress/progress.d.ts +1 -1
  46. package/lib/progress-ring/progress-ring.d.ts +1 -1
  47. package/lib/radio/radio.d.ts +3 -3
  48. package/lib/radio-group/radio-group.d.ts +4 -4
  49. package/lib/range-slider/range-slider.d.ts +5 -5
  50. package/lib/rich-text-editor/menubar/menubar.d.ts +3 -3
  51. package/lib/rich-text-editor/rich-text-editor.d.ts +3 -3
  52. package/lib/searchable-select/locale.d.ts +1 -1
  53. package/lib/searchable-select/option-tag.d.ts +3 -3
  54. package/lib/searchable-select/searchable-select.d.ts +15 -15
  55. package/lib/select/select.d.ts +12 -12
  56. package/lib/selectable-box/selectable-box.d.ts +1 -1
  57. package/lib/slider/slider.d.ts +5 -5
  58. package/lib/split-button/split-button.d.ts +6 -6
  59. package/lib/switch/switch.d.ts +2 -2
  60. package/lib/tab/tab.d.ts +6 -6
  61. package/lib/tab-panel/tab-panel.d.ts +1 -1
  62. package/lib/tag/locale.d.ts +3 -0
  63. package/lib/tag/tag.d.ts +343 -6
  64. package/lib/tag-group/tag-group.d.ts +1 -1
  65. package/lib/text-area/text-area.d.ts +14 -14
  66. package/lib/text-field/text-field.d.ts +16 -16
  67. package/lib/time-picker/time-picker.d.ts +21 -21
  68. package/lib/toggletip/toggletip.d.ts +1 -1
  69. package/lib/tooltip/tooltip.d.ts +1 -1
  70. package/lib/tree-item/tree-item.d.ts +3 -3
  71. package/lib/tree-view/tree-view.d.ts +1 -1
  72. package/lib/video-player/video-player.d.ts +3 -3
  73. package/locales/de-DE.cjs +40 -5
  74. package/locales/de-DE.js +40 -5
  75. package/locales/en-GB.cjs +40 -5
  76. package/locales/en-GB.js +40 -5
  77. package/locales/en-US.cjs +40 -5
  78. package/locales/en-US.js +40 -5
  79. package/locales/ja-JP.cjs +40 -5
  80. package/locales/ja-JP.js +40 -5
  81. package/locales/zh-CN.cjs +40 -5
  82. package/locales/zh-CN.js +40 -5
  83. package/package.json +73 -45
  84. package/shared/aria/delegates-aria.d.ts +1 -1
  85. package/shared/aria/host-semantics.d.ts +1 -1
  86. package/shared/calendar-picker.template.cjs +40 -13
  87. package/shared/calendar-picker.template.js +40 -13
  88. package/shared/definition.cjs +19 -3
  89. package/shared/definition.js +20 -4
  90. package/shared/definition11.cjs +1 -1
  91. package/shared/definition11.js +1 -1
  92. package/shared/definition13.cjs +25 -0
  93. package/shared/definition13.js +26 -1
  94. package/shared/definition15.cjs +1 -1
  95. package/shared/definition15.js +1 -1
  96. package/shared/definition16.cjs +1 -1
  97. package/shared/definition16.js +1 -1
  98. package/shared/definition17.cjs +602 -522
  99. package/shared/definition17.js +600 -520
  100. package/shared/definition18.cjs +8 -1
  101. package/shared/definition18.js +8 -1
  102. package/shared/definition19.cjs +9 -2
  103. package/shared/definition19.js +9 -2
  104. package/shared/definition2.cjs +1 -1
  105. package/shared/definition2.js +1 -1
  106. package/shared/definition20.cjs +3 -1
  107. package/shared/definition20.js +3 -1
  108. package/shared/definition21.cjs +2 -2
  109. package/shared/definition21.js +2 -2
  110. package/shared/definition22.cjs +9 -3
  111. package/shared/definition22.js +9 -3
  112. package/shared/definition28.cjs +2 -2
  113. package/shared/definition28.js +2 -2
  114. package/shared/definition3.cjs +1 -1
  115. package/shared/definition3.js +1 -1
  116. package/shared/definition30.cjs +1 -1
  117. package/shared/definition30.js +1 -1
  118. package/shared/definition31.cjs +1 -1
  119. package/shared/definition31.js +1 -1
  120. package/shared/definition32.cjs +1 -1
  121. package/shared/definition32.js +1 -1
  122. package/shared/definition36.cjs +41 -30
  123. package/shared/definition36.js +34 -23
  124. package/shared/definition38.cjs +30 -23
  125. package/shared/definition38.js +30 -23
  126. package/shared/definition4.cjs +1 -1
  127. package/shared/definition4.js +1 -1
  128. package/shared/definition41.cjs +1 -1
  129. package/shared/definition41.js +1 -1
  130. package/shared/definition42.cjs +2 -2
  131. package/shared/definition42.js +2 -2
  132. package/shared/definition44.cjs +129 -117
  133. package/shared/definition44.js +130 -118
  134. package/shared/definition45.cjs +17 -7
  135. package/shared/definition45.js +17 -7
  136. package/shared/definition46.cjs +1 -1
  137. package/shared/definition46.js +1 -1
  138. package/shared/definition49.cjs +6 -6
  139. package/shared/definition49.js +6 -6
  140. package/shared/definition54.cjs +2 -2
  141. package/shared/definition54.js +2 -2
  142. package/shared/definition56.cjs +5 -4
  143. package/shared/definition56.js +5 -4
  144. package/shared/definition57.cjs +1 -1
  145. package/shared/definition57.js +1 -1
  146. package/shared/definition58.cjs +1 -1
  147. package/shared/definition58.js +1 -1
  148. package/shared/definition59.cjs +3 -1
  149. package/shared/definition59.js +3 -1
  150. package/shared/definition6.cjs +45 -12
  151. package/shared/definition6.js +45 -12
  152. package/shared/definition63.cjs +2 -2
  153. package/shared/definition63.js +2 -2
  154. package/shared/definition64.cjs +136 -38
  155. package/shared/definition64.js +136 -38
  156. package/shared/definition67.cjs +36 -15
  157. package/shared/definition67.js +37 -16
  158. package/shared/feedback/feedback-message.d.ts +1 -1
  159. package/shared/feedback/mixins.d.ts +2 -2
  160. package/shared/form-associated.cjs +4 -0
  161. package/shared/form-associated.js +4 -0
  162. package/shared/foundation/button/button.d.ts +1 -1
  163. package/shared/foundation/vivid-element/vivid-element.d.ts +2 -0
  164. package/shared/key-codes.js +1 -1
  165. package/shared/localization/Locale.d.ts +4 -0
  166. package/shared/mixins.cjs +4 -1
  167. package/shared/mixins.js +4 -1
  168. package/shared/patterns/affix.d.ts +2 -2
  169. package/shared/patterns/char-count/char-count.d.ts +1 -1
  170. package/shared/patterns/form-elements/with-success-text.d.ts +1 -1
  171. package/shared/patterns/linkable.d.ts +1 -1
  172. package/shared/patterns/localized.d.ts +1 -1
  173. package/shared/patterns/trapped-focus.d.ts +1 -1
  174. package/shared/picker-field/mixins/calendar-picker.d.ts +2 -2
  175. package/shared/picker-field/mixins/calendar-picker.locale.d.ts +5 -0
  176. package/shared/picker-field/mixins/calendar-picker.template.d.ts +2 -2
  177. package/shared/picker-field/mixins/calendar-segments/segment.d.ts +1 -0
  178. package/shared/picker-field/mixins/inline-time-picker/inline-time-picker.d.ts +1 -1
  179. package/shared/picker-field/mixins/min-max-calendar-picker.d.ts +4 -4
  180. package/shared/picker-field/mixins/single-date-picker.d.ts +4 -4
  181. package/shared/picker-field/mixins/single-value-picker.d.ts +1 -1
  182. package/shared/picker-field/mixins/time-selection-picker.d.ts +2 -2
  183. package/shared/picker-field/mixins/time-selection-picker.template.d.ts +2 -2
  184. package/shared/picker-field/picker-field.d.ts +3 -3
  185. package/shared/picker-field.template.cjs +13 -13
  186. package/shared/picker-field.template.js +13 -13
  187. package/shared/vivid-element.cjs +11 -1
  188. package/shared/vivid-element.js +11 -1
  189. package/styles/core/all.css +5 -5
  190. package/styles/core/theme.css +2 -2
  191. package/styles/core/typography.css +4 -4
  192. package/styles/fonts/spezia-variable.css +15 -15
  193. package/styles/tokens/theme-dark.css +4 -4
  194. package/styles/tokens/theme-light.css +4 -4
  195. package/styles/tokens/vivid-2-compat.css +1 -1
  196. package/vivid.api.json +395 -277
@@ -1,68 +1,19 @@
1
- import { V as VividElement, a as attr, h as html, f as defineVividComponent, D as DOM, n as nullableNumberConverter, d as createRegisterFunction } from './vivid-element.js';
2
- import { L as Localized } from './localized.js';
1
+ import { h as html, V as VividElement, a as attr, f as defineVividComponent, D as DOM, n as nullableNumberConverter, d as createRegisterFunction } from './vivid-element.js';
3
2
  import { B as Button, b as buttonDefinition } from './definition11.js';
4
- import { D as Divider } from './divider.js';
3
+ import { d as dividerDefinition } from './definition23.js';
4
+ import { l as listboxOptionDefinition } from './definition37.js';
5
5
  import { T as Tooltip, t as tooltipDefinition } from './definition61.js';
6
- import { S as Select, s as selectDefinition } from './definition46.js';
7
- import { L as ListboxOption } from './option.js';
8
6
  import { M as Menu, m as menuDefinition } from './definition31.js';
9
7
  import { M as MenuItem, m as menuItemDefinition } from './definition30.js';
8
+ import { S as Select, s as selectDefinition } from './definition46.js';
9
+ import { D as Divider } from './divider.js';
10
+ import { L as ListboxOption } from './option.js';
10
11
  import { r as repeat } from './repeat.js';
11
12
  import { c as classNames } from './class-names.js';
12
- import { l as listboxOptionDefinition } from './definition37.js';
13
- import { d as dividerDefinition } from './definition23.js';
13
+ import { L as Localized } from './localized.js';
14
14
 
15
15
  const styles$1 = "@charset \"UTF-8\";.ProseMirror li{position:relative}.ProseMirror-hideselection *::selection{background:transparent}.ProseMirror-hideselection *::-moz-selection{background:transparent}.ProseMirror-hideselection{caret-color:transparent}.ProseMirror [draggable][contenteditable=false]{user-select:text}.ProseMirror-selectednode{outline:2px solid #8cf}li.ProseMirror-selectednode{outline:none}li.ProseMirror-selectednode:after{content:\"\";position:absolute;inset:-2px -2px -2px -32px;border:2px solid #8cf;pointer-events:none}img.ProseMirror-separator{display:inline!important;border:none!important;margin:0!important}.ProseMirror-textblock-dropdown{min-width:3em}.ProseMirror-menu{margin:0 -4px;line-height:1}.ProseMirror-tooltip .ProseMirror-menu{width:-webkit-fit-content;width:fit-content;white-space:pre}.ProseMirror-menuitem{margin-right:3px;display:inline-block}.ProseMirror-menuseparator{border-right:1px solid #ddd;margin-right:3px}.ProseMirror-menu-dropdown,.ProseMirror-menu-dropdown-menu{font-size:90%;white-space:nowrap}.ProseMirror-menu-dropdown{vertical-align:1px;cursor:pointer;position:relative;padding-right:15px}.ProseMirror-menu-dropdown-wrap{padding:1px 0 1px 4px;display:inline-block;position:relative}.ProseMirror-menu-dropdown:after{content:\"\";border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid currentColor;opacity:.6;position:absolute;right:4px;top:calc(50% - 2px)}.ProseMirror-menu-dropdown-menu,.ProseMirror-menu-submenu{position:absolute;background:#fff;color:#666;border:1px solid #aaa;padding:2px}.ProseMirror-menu-dropdown-menu{z-index:15;min-width:6em}.ProseMirror-menu-dropdown-item{cursor:pointer;padding:2px 8px 2px 4px}.ProseMirror-menu-dropdown-item:hover{background:#f2f2f2}.ProseMirror-menu-submenu-wrap{position:relative;margin-right:-4px}.ProseMirror-menu-submenu-label:after{content:\"\";border-top:4px solid transparent;border-bottom:4px solid transparent;border-left:4px solid currentColor;opacity:.6;position:absolute;right:4px;top:calc(50% - 4px)}.ProseMirror-menu-submenu{display:none;min-width:4em;left:100%;top:-3px}.ProseMirror-menu-active{background:#eee;border-radius:4px}.ProseMirror-menu-disabled{opacity:.3}.ProseMirror-menu-submenu-wrap:hover .ProseMirror-menu-submenu,.ProseMirror-menu-submenu-wrap-active .ProseMirror-menu-submenu{display:block}.ProseMirror-menubar{border-top-left-radius:inherit;border-top-right-radius:inherit;position:relative;min-height:1em;color:#666;padding:1px 6px;top:0;left:0;right:0;border-bottom:1px solid silver;background:#fff;z-index:10;-moz-box-sizing:border-box;box-sizing:border-box;overflow:visible}.ProseMirror-icon{display:inline-block;line-height:.8;vertical-align:-2px;padding:2px 8px;cursor:pointer}.ProseMirror-menu-disabled.ProseMirror-icon{cursor:default}.ProseMirror-icon svg{fill:currentColor;height:1em}.ProseMirror-icon span{vertical-align:text-top}.ProseMirror-gapcursor{display:none;pointer-events:none;position:absolute}.ProseMirror-gapcursor:after{content:\"\";display:block;position:absolute;top:-2px;width:20px;border-top:1px solid black;animation:ProseMirror-cursor-blink 1.1s steps(2,start) infinite}@keyframes ProseMirror-cursor-blink{to{visibility:hidden}}.ProseMirror-focused .ProseMirror-gapcursor{display:block}.ProseMirror-example-setup-style hr{padding:2px 10px;border:none;margin:1em 0}.ProseMirror-example-setup-style hr:after{content:\"\";display:block;height:1px;background-color:silver;line-height:2px}.ProseMirror ul,.ProseMirror ol{padding-left:30px}.ProseMirror blockquote{padding-left:1em;border-left:3px solid #eee;margin-left:0;margin-right:0}.ProseMirror-example-setup-style img{cursor:default}.ProseMirror-prompt{background:#fff;padding:5px 10px 5px 15px;border:1px solid silver;position:fixed;border-radius:3px;z-index:11;box-shadow:-.5px 2px 5px #0003}.ProseMirror-prompt h5{margin:0;font-weight:400;font-size:100%;color:#444}.ProseMirror-prompt input[type=text],.ProseMirror-prompt textarea{background:#eee;border:none;outline:none}.ProseMirror-prompt input[type=text]{padding:0 4px}.ProseMirror-prompt-close{position:absolute;left:2px;top:1px;color:#666;border:none;background:transparent;padding:0}.ProseMirror-prompt-close:after{content:\"✕\";font-size:12px}.ProseMirror-invalid{background:#ffc;border:1px solid #cc7;border-radius:4px;padding:5px 10px;position:absolute;min-width:10em}.ProseMirror-prompt-buttons{margin-top:5px;display:none}.placeholder:before{position:absolute;color:var(--vvd-color-neutral-600);content:attr(data-placeholder);font:var(--vvd-typography-base);pointer-events:none}.editor{box-sizing:border-box;background:var(--vvd-color-canvas);background-clip:padding-box;color:var(--vvd-color-canvas-text)}.ProseMirror{position:relative;box-sizing:border-box;padding:10px 16px;block-size:120px;font:var(--vvd-typography-base);font-feature-settings:\"liga\" 0;font-variant-ligatures:none;line-height:1.2;outline:none;overflow-y:auto;white-space:break-spaces;word-wrap:break-word}.ProseMirror pre{white-space:pre-wrap}.ProseMirror p{margin-bottom:1em}.ProseMirror p:first-child,.ProseMirror h1:first-child,.ProseMirror h2:first-child,.ProseMirror h3:first-child,.ProseMirror h4:first-child,.ProseMirror h5:first-child,.ProseMirror h6:first-child{margin-top:10px}h2{font:var(--vvd-typography-heading-4)}h3{font:var(--vvd-typography-base-extended)}p{font:var(--vvd-typography-base)}:host{display:block}#editor{--scrollbar-track-color: transparent;--scrollbar-thumb-color: color-mix(in srgb, var(--vvd-color-neutral-950), transparent 70%)}#editor{scrollbar-color:var(--scrollbar-thumb-color) var(--scrollbar-track-color);scrollbar-width:thin}#editor ::-webkit-scrollbar{width:4px}#editor ::-webkit-scrollbar-track{background:var(--scrollbar-track-color)}#editor ::-webkit-scrollbar-thumb{border:0;border-radius:4px;background-color:var(--scrollbar-fallback-track-color, var(--scrollbar-thumb-color))}#editor{position:relative;display:flex;flex-direction:column;block-size:100%;overflow-y:auto}[contenteditable=true]{overflow:unset;block-size:unset}#attachments-wrapper{order:1}#attachments-wrapper .divider{padding:0 12px}.hidden{display:none}.drag-overlay{position:absolute;z-index:10;display:none;align-items:center;justify-content:center;border:1px dashed var(--vvd-color-cta-400);border-radius:8px;background:var(--vvd-color-cta-100);font:var(--vvd-typography-base);inset:0;opacity:.8;pointer-events:none;transition:opacity .2s}.drag-over .drag-overlay{display:flex}";
16
16
 
17
- const styles = ":host{display:flex;align-items:center;background-color:var(--vvd-color-neutral-50);gap:4px}:host .hide-menubar{display:none}.title{--_text-primary-custom-size: var(--vvd-typography-heading-4)}.subtitle{--_text-primary-custom-size: var(--vvd-typography-base-extended)}.body{--_text-primary-custom-size: var(--vvd-typography-base)}.divider{height:28px}#text-block{width:104px}";
18
-
19
- var __defProp$1 = Object.defineProperty;
20
- var __decorateClass$1 = (decorators, target, key, kind) => {
21
- var result = void 0 ;
22
- for (var i = decorators.length - 1, decorator; i >= 0; i--)
23
- if (decorator = decorators[i])
24
- result = (decorator(target, key, result) ) || result;
25
- if (result) __defProp$1(target, key, result);
26
- return result;
27
- };
28
- class MenuBar extends Localized(VividElement) {
29
- get #textEditorElement() {
30
- return this.parentElement;
31
- }
32
- #updateTextStyleState = () => {
33
- this.dispatchEvent(
34
- new CustomEvent("text-styles-changed", {
35
- detail: this.#textEditorElement?.selectionStyles
36
- })
37
- );
38
- };
39
- connectedCallback() {
40
- super.connectedCallback();
41
- this.#textEditorElement.addEventListener(
42
- "selection-changed",
43
- this.#updateTextStyleState
44
- );
45
- this.#textEditorElement.addEventListener(
46
- "change",
47
- this.#updateTextStyleState
48
- );
49
- }
50
- disconnectedCallback() {
51
- super.disconnectedCallback();
52
- this.#textEditorElement?.removeEventListener(
53
- "selection-changed",
54
- this.#updateTextStyleState
55
- );
56
- this.#textEditorElement?.removeEventListener(
57
- "change",
58
- this.#updateTextStyleState
59
- );
60
- }
61
- }
62
- __decorateClass$1([
63
- attr({ attribute: "menu-items" })
64
- ], MenuBar.prototype, "menuItems");
65
-
66
17
  function notifyMenuBarChange(menuBar, eventName, payload) {
67
18
  menuBar.$emit(eventName, payload, { bubbles: false, composed: false });
68
19
  return true;
@@ -303,6 +254,53 @@ const MENU_BAR_ITEMS = {
303
254
  }
304
255
  };
305
256
 
257
+ var __defProp$1 = Object.defineProperty;
258
+ var __decorateClass$1 = (decorators, target, key, kind) => {
259
+ var result = void 0 ;
260
+ for (var i = decorators.length - 1, decorator; i >= 0; i--)
261
+ if (decorator = decorators[i])
262
+ result = (decorator(target, key, result) ) || result;
263
+ if (result) __defProp$1(target, key, result);
264
+ return result;
265
+ };
266
+ class MenuBar extends Localized(VividElement) {
267
+ get #textEditorElement() {
268
+ return this.parentElement;
269
+ }
270
+ #updateTextStyleState = () => {
271
+ this.dispatchEvent(
272
+ new CustomEvent("text-styles-changed", {
273
+ detail: this.#textEditorElement?.selectionStyles
274
+ })
275
+ );
276
+ };
277
+ connectedCallback() {
278
+ super.connectedCallback();
279
+ this.#textEditorElement.addEventListener(
280
+ "selection-changed",
281
+ this.#updateTextStyleState
282
+ );
283
+ this.#textEditorElement.addEventListener(
284
+ "change",
285
+ this.#updateTextStyleState
286
+ );
287
+ }
288
+ disconnectedCallback() {
289
+ super.disconnectedCallback();
290
+ this.#textEditorElement?.removeEventListener(
291
+ "selection-changed",
292
+ this.#updateTextStyleState
293
+ );
294
+ this.#textEditorElement?.removeEventListener(
295
+ "change",
296
+ this.#updateTextStyleState
297
+ );
298
+ }
299
+ }
300
+ __decorateClass$1([
301
+ attr({ attribute: "menu-items" })
302
+ ], MenuBar.prototype, "menuItems");
303
+
306
304
  const getClasses$1 = (menuBar) => classNames("control", [
307
305
  "hide-menubar",
308
306
  getValidMenuItems(menuBar).length === 0
@@ -332,6 +330,8 @@ const MenuBarTemplate = (context) => {
332
330
  </template>`;
333
331
  };
334
332
 
333
+ const styles = ":host{display:flex;align-items:center;background-color:var(--vvd-color-neutral-50);gap:4px}:host .hide-menubar{display:none}.title{--_text-primary-custom-size: var(--vvd-typography-heading-4)}.subtitle{--_text-primary-custom-size: var(--vvd-typography-base-extended)}.body{--_text-primary-custom-size: var(--vvd-typography-base)}.divider{height:28px}#text-block{width:104px}";
334
+
335
335
  const menuBarDefinition = defineVividComponent(
336
336
  "menubar",
337
337
  MenuBar,
@@ -7065,6 +7065,7 @@ const isEquivalentPosition = function (node, off, targetNode, targetOff) {
7065
7065
  };
7066
7066
  const atomElements = /^(img|br|input|textarea|hr)$/i;
7067
7067
  function scanFor(node, off, targetNode, targetOff, dir) {
7068
+ var _a;
7068
7069
  for (;;) {
7069
7070
  if (node == targetNode && off == targetOff)
7070
7071
  return true;
@@ -7077,10 +7078,17 @@ function scanFor(node, off, targetNode, targetOff, dir) {
7077
7078
  node = parent;
7078
7079
  }
7079
7080
  else if (node.nodeType == 1) {
7080
- node = node.childNodes[off + (dir < 0 ? -1 : 0)];
7081
- if (node.contentEditable == "false")
7082
- return false;
7083
- off = dir < 0 ? nodeSize(node) : 0;
7081
+ let child = node.childNodes[off + (dir < 0 ? -1 : 0)];
7082
+ if (child.nodeType == 1 && child.contentEditable == "false") {
7083
+ if ((_a = child.pmViewDesc) === null || _a === void 0 ? void 0 : _a.ignoreForSelection)
7084
+ off += dir;
7085
+ else
7086
+ return false;
7087
+ }
7088
+ else {
7089
+ node = child;
7090
+ off = dir < 0 ? nodeSize(node) : 0;
7091
+ }
7084
7092
  }
7085
7093
  else {
7086
7094
  return false;
@@ -7201,7 +7209,7 @@ const safari = !ie$1 && !!nav && /Apple Computer/.test(nav.vendor);
7201
7209
  // Is true for both iOS and iPadOS for convenience
7202
7210
  const ios = safari && (/Mobile\/\w+/.test(agent) || !!nav && nav.maxTouchPoints > 2);
7203
7211
  const mac$3 = ios || (nav ? /Mac/.test(nav.platform) : false);
7204
- const windows = nav ? /Win/.test(nav.platform) : false;
7212
+ const windows$1 = nav ? /Win/.test(nav.platform) : false;
7205
7213
  const android = /Android \d/.test(agent);
7206
7214
  const webkit = !!doc && "webkitFontSmoothing" in doc.documentElement.style;
7207
7215
  const webkit_version = webkit ? +(/\bAppleWebKit\/(\d+)/.exec(navigator.userAgent) || [0, 0])[1] : 0;
@@ -8164,6 +8172,7 @@ class ViewDesc {
8164
8172
  }
8165
8173
  get domAtom() { return false; }
8166
8174
  get ignoreForCoords() { return false; }
8175
+ get ignoreForSelection() { return false; }
8167
8176
  isText(text) { return false; }
8168
8177
  }
8169
8178
  // A widget desc represents a widget decoration, which is a DOM node
@@ -8208,6 +8217,7 @@ class WidgetViewDesc extends ViewDesc {
8208
8217
  super.destroy();
8209
8218
  }
8210
8219
  get domAtom() { return true; }
8220
+ get ignoreForSelection() { return !!this.widget.type.spec.relaxedSide; }
8211
8221
  get side() { return this.widget.type.side; }
8212
8222
  }
8213
8223
  class CompositionViewDesc extends ViewDesc {
@@ -9671,7 +9681,7 @@ function setSelFocus(view, node, offset) {
9671
9681
  }
9672
9682
  function findDirection(view, pos) {
9673
9683
  let $pos = view.state.doc.resolve(pos);
9674
- if (!(chrome || windows) && $pos.parent.inlineContent) {
9684
+ if (!(chrome || windows$1) && $pos.parent.inlineContent) {
9675
9685
  let coords = view.coordsAtPos(pos);
9676
9686
  if (pos > $pos.start()) {
9677
9687
  let before = view.coordsAtPos(pos - 1);
@@ -10077,7 +10087,7 @@ class InputState {
10077
10087
  this.mouseDown = null;
10078
10088
  this.lastKeyCode = null;
10079
10089
  this.lastKeyCodeTime = 0;
10080
- this.lastClick = { time: 0, x: 0, y: 0, type: "" };
10090
+ this.lastClick = { time: 0, x: 0, y: 0, type: "", button: 0 };
10081
10091
  this.lastSelectionOrigin = null;
10082
10092
  this.lastSelectionTime = 0;
10083
10093
  this.lastIOSEnter = 0;
@@ -10205,8 +10215,9 @@ editHandlers.keypress = (view, _event) => {
10205
10215
  let sel = view.state.selection;
10206
10216
  if (!(sel instanceof TextSelection) || !sel.$from.sameParent(sel.$to)) {
10207
10217
  let text = String.fromCharCode(event.charCode);
10208
- if (!/[\r\n]/.test(text) && !view.someProp("handleTextInput", f => f(view, sel.$from.pos, sel.$to.pos, text)))
10209
- view.dispatch(view.state.tr.insertText(text).scrollIntoView());
10218
+ let deflt = () => view.state.tr.insertText(text).scrollIntoView();
10219
+ if (!/[\r\n]/.test(text) && !view.someProp("handleTextInput", f => f(view, sel.$from.pos, sel.$to.pos, text, deflt)))
10220
+ view.dispatch(deflt());
10210
10221
  event.preventDefault();
10211
10222
  }
10212
10223
  };
@@ -10318,13 +10329,14 @@ handlers.mousedown = (view, _event) => {
10318
10329
  view.input.shiftKey = event.shiftKey;
10319
10330
  let flushed = forceDOMFlush(view);
10320
10331
  let now = Date.now(), type = "singleClick";
10321
- if (now - view.input.lastClick.time < 500 && isNear(event, view.input.lastClick) && !event[selectNodeModifier]) {
10332
+ if (now - view.input.lastClick.time < 500 && isNear(event, view.input.lastClick) && !event[selectNodeModifier] &&
10333
+ view.input.lastClick.button == event.button) {
10322
10334
  if (view.input.lastClick.type == "singleClick")
10323
10335
  type = "doubleClick";
10324
10336
  else if (view.input.lastClick.type == "doubleClick")
10325
10337
  type = "tripleClick";
10326
10338
  }
10327
- view.input.lastClick = { time: now, x: event.clientX, y: event.clientY, type };
10339
+ view.input.lastClick = { time: now, x: event.clientX, y: event.clientY, type, button: event.button };
10328
10340
  let pos = view.posAtCoords(eventCoords(event));
10329
10341
  if (!pos)
10330
10342
  return;
@@ -10581,10 +10593,10 @@ function endComposition(view, restarting = false) {
10581
10593
  view.domObserver.forceFlush();
10582
10594
  clearComposition(view);
10583
10595
  if (restarting || view.docView && view.docView.dirty) {
10584
- let sel = selectionFromDOM(view);
10585
- if (sel && !sel.eq(view.state.selection))
10596
+ let sel = selectionFromDOM(view), cur = view.state.selection;
10597
+ if (sel && !sel.eq(cur))
10586
10598
  view.dispatch(view.state.tr.setSelection(sel));
10587
- else if ((view.markCursor || restarting) && !view.state.selection.empty)
10599
+ else if ((view.markCursor || restarting) && !cur.$from.node(cur.$from.sharedDepth(cur.to)).inlineContent)
10588
10600
  view.dispatch(view.state.tr.deleteSelection());
10589
10601
  else
10590
10602
  view.updateState(view.state);
@@ -12089,7 +12101,26 @@ function readDOMChange(view, from, to, typeOver, addedNodes) {
12089
12101
  }, 20);
12090
12102
  }
12091
12103
  let chFrom = change.start, chTo = change.endA;
12092
- let tr, storedMarks, markChange;
12104
+ let mkTr = (base) => {
12105
+ let tr = base || view.state.tr.replace(chFrom, chTo, parse.doc.slice(change.start - parse.from, change.endB - parse.from));
12106
+ if (parse.sel) {
12107
+ let sel = resolveSelection(view, tr.doc, parse.sel);
12108
+ // Chrome will sometimes, during composition, report the
12109
+ // selection in the wrong place. If it looks like that is
12110
+ // happening, don't update the selection.
12111
+ // Edge just doesn't move the cursor forward when you start typing
12112
+ // in an empty block or between br nodes.
12113
+ if (sel && !(chrome && view.composing && sel.empty &&
12114
+ (change.start != change.endB || view.input.lastChromeDelete < Date.now() - 100) &&
12115
+ (sel.head == chFrom || sel.head == tr.mapping.map(chTo) - 1) ||
12116
+ ie$1 && sel.empty && sel.head == chFrom))
12117
+ tr.setSelection(sel);
12118
+ }
12119
+ if (compositionID)
12120
+ tr.setMeta("composition", compositionID);
12121
+ return tr.scrollIntoView();
12122
+ };
12123
+ let markChange;
12093
12124
  if (inlineChange) {
12094
12125
  if ($from.pos == $to.pos) { // Deletion
12095
12126
  // IE11 sometimes weirdly moves the DOM selection around after
@@ -12098,46 +12129,33 @@ function readDOMChange(view, from, to, typeOver, addedNodes) {
12098
12129
  view.domObserver.suppressSelectionUpdates();
12099
12130
  setTimeout(() => selectionToDOM(view), 20);
12100
12131
  }
12101
- tr = view.state.tr.delete(chFrom, chTo);
12102
- storedMarks = doc.resolve(change.start).marksAcross(doc.resolve(change.endA));
12132
+ let tr = mkTr(view.state.tr.delete(chFrom, chTo));
12133
+ let marks = doc.resolve(change.start).marksAcross(doc.resolve(change.endA));
12134
+ if (marks)
12135
+ tr.ensureMarks(marks);
12136
+ view.dispatch(tr);
12103
12137
  }
12104
12138
  else if ( // Adding or removing a mark
12105
12139
  change.endA == change.endB &&
12106
12140
  (markChange = isMarkChange($from.parent.content.cut($from.parentOffset, $to.parentOffset), $fromA.parent.content.cut($fromA.parentOffset, change.endA - $fromA.start())))) {
12107
- tr = view.state.tr;
12141
+ let tr = mkTr(view.state.tr);
12108
12142
  if (markChange.type == "add")
12109
12143
  tr.addMark(chFrom, chTo, markChange.mark);
12110
12144
  else
12111
12145
  tr.removeMark(chFrom, chTo, markChange.mark);
12146
+ view.dispatch(tr);
12112
12147
  }
12113
12148
  else if ($from.parent.child($from.index()).isText && $from.index() == $to.index() - ($to.textOffset ? 0 : 1)) {
12114
12149
  // Both positions in the same text node -- simply insert text
12115
12150
  let text = $from.parent.textBetween($from.parentOffset, $to.parentOffset);
12116
- if (view.someProp("handleTextInput", f => f(view, chFrom, chTo, text)))
12117
- return;
12118
- tr = view.state.tr.insertText(text, chFrom, chTo);
12119
- }
12120
- }
12121
- if (!tr)
12122
- tr = view.state.tr.replace(chFrom, chTo, parse.doc.slice(change.start - parse.from, change.endB - parse.from));
12123
- if (parse.sel) {
12124
- let sel = resolveSelection(view, tr.doc, parse.sel);
12125
- // Chrome will sometimes, during composition, report the
12126
- // selection in the wrong place. If it looks like that is
12127
- // happening, don't update the selection.
12128
- // Edge just doesn't move the cursor forward when you start typing
12129
- // in an empty block or between br nodes.
12130
- if (sel && !(chrome && view.composing && sel.empty &&
12131
- (change.start != change.endB || view.input.lastChromeDelete < Date.now() - 100) &&
12132
- (sel.head == chFrom || sel.head == tr.mapping.map(chTo) - 1) ||
12133
- ie$1 && sel.empty && sel.head == chFrom))
12134
- tr.setSelection(sel);
12135
- }
12136
- if (storedMarks)
12137
- tr.ensureMarks(storedMarks);
12138
- if (compositionID)
12139
- tr.setMeta("composition", compositionID);
12140
- view.dispatch(tr.scrollIntoView());
12151
+ let deflt = () => mkTr(view.state.tr.insertText(text, chFrom, chTo));
12152
+ if (!view.someProp("handleTextInput", f => f(view, chFrom, chTo, text, deflt)))
12153
+ view.dispatch(deflt());
12154
+ }
12155
+ }
12156
+ else {
12157
+ view.dispatch(mkTr());
12158
+ }
12141
12159
  }
12142
12160
  function resolveSelection(view, doc, parsedSel) {
12143
12161
  if (Math.max(parsedSel.anchor, parsedSel.head) > doc.content.size)
@@ -12731,22 +12749,6 @@ class EditorView {
12731
12749
  return dispatchEvent(this, event);
12732
12750
  }
12733
12751
  /**
12734
- Dispatch a transaction. Will call
12735
- [`dispatchTransaction`](https://prosemirror.net/docs/ref/#view.DirectEditorProps.dispatchTransaction)
12736
- when given, and otherwise defaults to applying the transaction to
12737
- the current state and calling
12738
- [`updateState`](https://prosemirror.net/docs/ref/#view.EditorView.updateState) with the result.
12739
- This method is bound to the view instance, so that it can be
12740
- easily passed around.
12741
- */
12742
- dispatch(tr) {
12743
- let dispatchTransaction = this._props.dispatchTransaction;
12744
- if (dispatchTransaction)
12745
- dispatchTransaction.call(this, tr);
12746
- else
12747
- this.updateState(this.state.apply(tr));
12748
- }
12749
- /**
12750
12752
  @internal
12751
12753
  */
12752
12754
  domSelectionRange() {
@@ -12763,6 +12765,13 @@ class EditorView {
12763
12765
  return this.root.getSelection();
12764
12766
  }
12765
12767
  }
12768
+ EditorView.prototype.dispatch = function (tr) {
12769
+ let dispatchTransaction = this._props.dispatchTransaction;
12770
+ if (dispatchTransaction)
12771
+ dispatchTransaction.call(this, tr);
12772
+ else
12773
+ this.updateState(this.state.apply(tr));
12774
+ };
12766
12775
  function computeDocDeco(view) {
12767
12776
  let attrs = Object.create(null);
12768
12777
  attrs.class = "ProseMirror";
@@ -12950,7 +12959,8 @@ function keyName(event) {
12950
12959
  return name
12951
12960
  }
12952
12961
 
12953
- const mac$1 = typeof navigator != "undefined" ? /Mac|iP(hone|[oa]d)/.test(navigator.platform) : false;
12962
+ const mac$1 = typeof navigator != "undefined" && /Mac|iP(hone|[oa]d)/.test(navigator.platform);
12963
+ const windows = typeof navigator != "undefined" && /Win/.test(navigator.platform);
12954
12964
  function normalizeKeyName(name) {
12955
12965
  let parts = name.split(/-(?!$)/), result = parts[parts.length - 1];
12956
12966
  if (result == "Space")
@@ -13056,12 +13066,14 @@ function keydownHandler(bindings) {
13056
13066
  if (noShift && noShift(view.state, view.dispatch, view))
13057
13067
  return true;
13058
13068
  }
13059
- if ((event.shiftKey || event.altKey || event.metaKey || name.charCodeAt(0) > 127) &&
13069
+ if ((event.altKey || event.metaKey || event.ctrlKey) &&
13070
+ // Ctrl-Alt may be used for AltGr on Windows
13071
+ !(windows && event.ctrlKey && event.altKey) &&
13060
13072
  (baseName = base[event.keyCode]) && baseName != name) {
13061
13073
  // Try falling back to the keyCode when there's a modifier
13062
13074
  // active or the character produced isn't ASCII, and our table
13063
13075
  // produces a different name from the the keyCode. See #668,
13064
- // #1060
13076
+ // #1060, #1529.
13065
13077
  let fromCode = map[modifiers(baseName, event)];
13066
13078
  if (fromCode && fromCode(view.state, view.dispatch, view))
13067
13079
  return true;
@@ -21,7 +21,7 @@ const slotted = require('./slotted.cjs');
21
21
  const classNames = require('./class-names.cjs');
22
22
  const repeat = require('./repeat.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(:focus-visible){outline:none}:host{display:inline-block;inline-size:300px;--_low-ink-color: var(--vvd-color-neutral-600)}:host([disabled]){--_low-ink-color: var(--vvd-color-neutral-400);cursor:not-allowed}.control-wrapper{display:flex;flex-direction:column;gap:4px}.label{color:var(--vvd-color-canvas-text);font:var(--vvd-typography-base)}.selection-count{color:var(--_low-ink-color);font:var(--vvd-typography-base)}.fieldset{--_connotation-color-primary: var(--vvd-searchable-select-accent-primary, var(--vvd-color-canvas-text));--_connotation-color-primary-text: var(--vvd-searchable-select-accent-primary-text, var(--vvd-color-canvas));--_connotation-color-primary-increment: var(--vvd-searchable-select-accent-primary-increment, var(--vvd-color-neutral-800));--_connotation-color-intermediate: var(--vvd-searchable-select-accent-intermediate, var(--vvd-color-neutral-500));--_connotation-color-faint: var(--vvd-searchable-select-accent-faint, var(--vvd-color-neutral-50));--_connotation-color-soft: var(--vvd-searchable-select-accent-soft, var(--vvd-color-neutral-100));--_connotation-color-firm: var(--vvd-searchable-select-accent-firm, var(--vvd-color-canvas-text));--_connotation-color-fierce: var(--vvd-searchable-select-accent-fierce, var(--vvd-color-neutral-700))}.fieldset{--_appearance-color-text: var(--vvd-color-canvas-text);--_appearance-color-fill: var(--vvd-color-canvas);--_appearance-color-outline: var(--vvd-color-neutral-500)}.fieldset.appearance-ghost{--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: transparent;--_appearance-color-outline: transparent}.fieldset: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)}.fieldset: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}.fieldset: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)}.fieldset:where(.disabled,:disabled).appearance-ghost{--_appearance-color-text: var(--vvd-color-neutral-300);--_appearance-color-fill: transparent;--_appearance-color-outline: transparent}.fieldset: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)}.fieldset:where(.readonly):where(:not(.disabled,:disabled)).appearance-ghost{--_appearance-color-text: var(--vvd-color-neutral-600);--_appearance-color-fill: transparent;--_appearance-color-outline: transparent}.fieldset: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)}.fieldset:where(.error):where(:not(.disabled,:disabled)).appearance-ghost{--_appearance-color-text: notSet;--_appearance-color-fill: var(--vvd-color-alert-50);--_appearance-color-outline: transparent}.fieldset: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)}.fieldset:where(.success):where(:not(.disabled,:disabled)).appearance-ghost{--_appearance-color-text: notSet;--_appearance-color-fill: var(--vvd-color-success-50);--_appearance-color-outline: transparent}.fieldset{display:flex;align-items:center;justify-content:space-between;background-color:var(--_appearance-color-fill);box-shadow:inset 0 0 0 1px var(--_appearance-color-outline);color:var(--_appearance-color-text);font:var(--vvd-typography-base);gap:8px;padding-block:8px;padding-inline:16px;transition:box-shadow .2s,background-color .2s}.fieldset:focus-within{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}:host(:not([shape=pill])) .fieldset{border-radius:8px}:host([shape=pill]) .fieldset{border-radius:24px}.popup-wrapper{position:relative}.content-area{display:flex;overflow:hidden;flex:1;flex-direction:column;gap:8px;min-block-size:24px}.tag-row{display:flex;gap:8px;inline-size:100%}.tag-row.contains-only-input:not(:focus-within){display:contents}.tag-wrapper{overflow:hidden}.tag{max-inline-size:100%}input{box-sizing:border-box;flex:1;border:none;background:none;block-size:24px;font:var(--vvd-typography-base);max-inline-size:100%;min-inline-size:100px;outline:none}.contains-only-input input:not(:focus){position:absolute;block-size:0;inline-size:0;min-inline-size:0;opacity:0;pointer-events:none}.listbox{display:flex;flex-direction:column;padding:4px;gap:2px;max-block-size:var(--searchable-select-height, 408px);overflow-y:auto}.empty-message{display:flex;align-items:center;justify-content:center;color:var(--vvd-color-neutral-300);font:var(--vvd-typography-base);min-block-size:40px;text-align:center}::part(popup-base){inline-size:max-content;min-inline-size:var(--_searchable-select-fixed-width, 100%)}slot[name=icon]{font-size:20px}.visually-hidden{position:absolute;overflow:hidden;width:1px;height:1px;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}";
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(:focus-visible){outline:none}:host{display:inline-block;inline-size:300px;--_low-ink-color: var(--vvd-color-neutral-600)}:host([disabled]){--_low-ink-color: var(--vvd-color-neutral-400);cursor:not-allowed}.control-wrapper{display:flex;flex-direction:column;gap:4px}.label{color:var(--vvd-color-canvas-text);font:var(--vvd-typography-base)}.selection-count{color:var(--_low-ink-color);font:var(--vvd-typography-base)}.fieldset{--_connotation-color-primary: var(--vvd-searchable-select-accent-primary, var(--vvd-color-canvas-text));--_connotation-color-primary-text: var(--vvd-searchable-select-accent-primary-text, var(--vvd-color-canvas));--_connotation-color-primary-increment: var(--vvd-searchable-select-accent-primary-increment, var(--vvd-color-neutral-800));--_connotation-color-intermediate: var(--vvd-searchable-select-accent-intermediate, var(--vvd-color-neutral-500));--_connotation-color-faint: var(--vvd-searchable-select-accent-faint, var(--vvd-color-neutral-50));--_connotation-color-soft: var(--vvd-searchable-select-accent-soft, var(--vvd-color-neutral-100));--_connotation-color-firm: var(--vvd-searchable-select-accent-firm, var(--vvd-color-canvas-text));--_connotation-color-fierce: var(--vvd-searchable-select-accent-fierce, var(--vvd-color-neutral-700))}.fieldset{--_appearance-color-text: var(--vvd-color-canvas-text);--_appearance-color-fill: var(--vvd-color-canvas);--_appearance-color-outline: var(--vvd-color-neutral-500)}.fieldset.appearance-ghost{--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: transparent;--_appearance-color-outline: transparent}.fieldset: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)}.fieldset: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}.fieldset: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)}.fieldset:where(.disabled,:disabled).appearance-ghost{--_appearance-color-text: var(--vvd-color-neutral-300);--_appearance-color-fill: transparent;--_appearance-color-outline: transparent}.fieldset: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)}.fieldset:where(.readonly):where(:not(.disabled,:disabled)).appearance-ghost{--_appearance-color-text: var(--vvd-color-neutral-600);--_appearance-color-fill: transparent;--_appearance-color-outline: transparent}.fieldset: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)}.fieldset:where(.error):where(:not(.disabled,:disabled)).appearance-ghost{--_appearance-color-text: notSet;--_appearance-color-fill: var(--vvd-color-alert-50);--_appearance-color-outline: transparent}.fieldset: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)}.fieldset:where(.success):where(:not(.disabled,:disabled)).appearance-ghost{--_appearance-color-text: notSet;--_appearance-color-fill: var(--vvd-color-success-50);--_appearance-color-outline: transparent}.fieldset{display:flex;align-items:center;justify-content:space-between;background-color:var(--_appearance-color-fill);box-shadow:inset 0 0 0 1px var(--_appearance-color-outline);color:var(--_appearance-color-text);font:var(--vvd-typography-base);gap:8px;padding-block:8px;padding-inline:16px;transition:box-shadow .2s,background-color .2s}.fieldset:focus-within{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}:host(:not([shape=pill])) .fieldset{border-radius:8px}:host([shape=pill]) .fieldset{border-radius:24px}.popup-wrapper{position:relative}.content-area{display:flex;overflow:hidden;flex:1;flex-direction:column;gap:8px;min-block-size:24px}.tag-row{display:flex;gap:8px;inline-size:100%}.tag-row.contains-only-input:not(:focus-within){display:contents}.tag-wrapper{overflow:hidden}.tag{max-inline-size:100%}input{box-sizing:border-box;flex:1;border:none;background:none;block-size:24px;font:var(--vvd-typography-base);max-inline-size:100%;min-inline-size:min(100px,40%);outline:none}.contains-only-input input:not(:focus){position:absolute;block-size:0;inline-size:0;min-inline-size:0;opacity:0;pointer-events:none}.listbox{display:flex;flex-direction:column;padding:4px;gap:2px;max-block-size:var(--searchable-select-height, 408px);overflow-y:auto}.empty-message{display:flex;align-items:center;justify-content:center;color:var(--vvd-color-neutral-300);font:var(--vvd-typography-base);min-block-size:40px;text-align:center}::part(popup-base){inline-size:max-content;min-inline-size:var(--_searchable-select-fixed-width, 100%)}slot[name=icon]{font-size:20px}.visually-hidden{position:absolute;overflow:hidden;width:1px;height:1px;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}";
25
25
 
26
26
  const optionTagStyles = ".base.connotation-cta{--_connotation-color-contrast: var(--vvd-option-tag-cta-contrast, var(--vvd-color-cta-800))}.base:not(.connotation-cta){--_connotation-color-contrast: var(--vvd-option-tag-accent-contrast, var(--vvd-color-neutral-800))}.base{position:relative;display:inline-flex;box-sizing:border-box;align-items:center;background-color:var(--fill-color);block-size:calc(1px*(24 + 4*clamp(-1,var(--vvd-size-density, 0),2)));box-shadow:inset 0 0 0 1px var(--outline-color);color:var(--text-color);column-gap:8px;font:var(--vvd-typography-base-bold);max-inline-size:100%;padding-inline:8px;user-select:none;vertical-align:middle}.base:not(.disabled){--text-color: var(--_connotation-color-contrast);--fill-color: color-mix( in srgb, var(--_connotation-color-contrast), transparent 87.5% );--outline-color: transparent}.base.disabled{--text-color: var(--vvd-color-neutral-300);--fill-color: color-mix( in srgb, var(--vvd-color-neutral-800), transparent 87.5% );--outline-color: transparent}.base:not(.shape-pill){border-radius:4px}.base.shape-pill{border-radius:16px}.label{overflow:hidden;max-inline-size:100%;text-overflow:ellipsis;white-space:nowrap}slot[name=icon]{font-size:calc(calc(1px*(24 + 4*clamp(-1,var(--vvd-size-density, 0),2))) / 1.5);line-height:1}.icon-placeholder{inline-size:calc(calc(1px*(24 + 4*clamp(-1,var(--vvd-size-density, 0),2))) / 1.5)}.remove-button{display:flex;align-items:center;border-radius:inherit;cursor:pointer;outline:none}.disabled .remove-button{pointer-events:none}.remove-button:focus-visible:before{--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));position:absolute;z-index:1;display:block;border-radius:inherit;content:\"\";inset:0;pointer-events:none}";
27
27
 
@@ -227,7 +227,6 @@ class SearchableSelect extends mixins.WithFeedback(
227
227
  */
228
228
  _onInputFocus(_) {
229
229
  this.#updateFilteredOptions();
230
- this.open = true;
231
230
  }
232
231
  /**
233
232
  * @internal
@@ -247,6 +246,9 @@ class SearchableSelect extends mixins.WithFeedback(
247
246
  switch (e.key) {
248
247
  case "Enter":
249
248
  this.#selectHighlightedOption();
249
+ if (this._inputValue === "") {
250
+ this.open = !this.open;
251
+ }
250
252
  return false;
251
253
  case "Escape":
252
254
  this.open = false;
@@ -423,6 +425,13 @@ class SearchableSelect extends mixins.WithFeedback(
423
425
  optionFilterChanged() {
424
426
  this.#updateFilteredOptions();
425
427
  }
428
+ /**
429
+ * @internal
430
+ */
431
+ loadingChanged(_oldValue, newValue) {
432
+ this._changeDescription = this.locale.searchableSelect.loadingOptionsMessage;
433
+ if (_oldValue && !newValue) this._changeDescription = "";
434
+ }
426
435
  #updateFilteredOptions() {
427
436
  const newFilteredOptions = [];
428
437
  const optionFilter = this.optionFilter ?? ((option, searchText) => option.text.toLowerCase().includes(searchText.toLowerCase()));
@@ -462,7 +471,8 @@ class SearchableSelect extends mixins.WithFeedback(
462
471
  this._changeDescription = this.locale.searchableSelect.optionFocusedMessage(
463
472
  highlightedOption.text,
464
473
  this._highlightedOptionIndex + 1,
465
- this._filteredEnabledOptions.length
474
+ this._filteredEnabledOptions.length,
475
+ highlightedOption.selected
466
476
  );
467
477
  }
468
478
  }
@@ -693,7 +703,7 @@ class SearchableSelect extends mixins.WithFeedback(
693
703
  return;
694
704
  }
695
705
  const capturedOption = e.target.closest(
696
- `option,[role=option]`
706
+ `option,[role=option],[data-vvd-component=option]`
697
707
  );
698
708
  if (capturedOption && !capturedOption.disabled) {
699
709
  this.#handleOptionInteraction(capturedOption);
@@ -720,7 +730,7 @@ class SearchableSelect extends mixins.WithFeedback(
720
730
  this.#updateSelectionLimit();
721
731
  }
722
732
  #updateSelectionLimit() {
723
- if (!this.multiple || typeof this.maxSelected !== "number" || this.maxSelected <= 0) {
733
+ if (!this.multiple || !this._slottedOptions || typeof this.maxSelected !== "number" || this.maxSelected <= 0) {
724
734
  return;
725
735
  }
726
736
  const options = this._slottedOptions.filter(
@@ -1101,13 +1111,13 @@ function renderFieldset(context) {
1101
1111
  size="super-condensed"
1102
1112
  icon="close-line"
1103
1113
  appearance="ghost-light"
1104
- tabindex="-1"
1114
+ tabindex="0"
1105
1115
  ></${buttonTag}>`
1106
1116
  )}
1107
1117
  <div @mousedown="${() => false}" @click="${(x) => x._onChevronClick()}">
1108
1118
  ${when.when(
1109
1119
  (x) => x.loading,
1110
- vividElement.html`<${progressRingTag} indeterminate size="-6"></${progressRingTag}>`
1120
+ vividElement.html`<${progressRingTag} indeterminate size="-6" aria-hidden="true"></${progressRingTag}>`
1111
1121
  )}
1112
1122
  ${when.when((x) => !x.loading, chevronTemplate)}
1113
1123
  </div>
@@ -19,7 +19,7 @@ import { s as slotted } from './slotted.js';
19
19
  import { c as classNames } from './class-names.js';
20
20
  import { r as repeat } from './repeat.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(:focus-visible){outline:none}:host{display:inline-block;inline-size:300px;--_low-ink-color: var(--vvd-color-neutral-600)}:host([disabled]){--_low-ink-color: var(--vvd-color-neutral-400);cursor:not-allowed}.control-wrapper{display:flex;flex-direction:column;gap:4px}.label{color:var(--vvd-color-canvas-text);font:var(--vvd-typography-base)}.selection-count{color:var(--_low-ink-color);font:var(--vvd-typography-base)}.fieldset{--_connotation-color-primary: var(--vvd-searchable-select-accent-primary, var(--vvd-color-canvas-text));--_connotation-color-primary-text: var(--vvd-searchable-select-accent-primary-text, var(--vvd-color-canvas));--_connotation-color-primary-increment: var(--vvd-searchable-select-accent-primary-increment, var(--vvd-color-neutral-800));--_connotation-color-intermediate: var(--vvd-searchable-select-accent-intermediate, var(--vvd-color-neutral-500));--_connotation-color-faint: var(--vvd-searchable-select-accent-faint, var(--vvd-color-neutral-50));--_connotation-color-soft: var(--vvd-searchable-select-accent-soft, var(--vvd-color-neutral-100));--_connotation-color-firm: var(--vvd-searchable-select-accent-firm, var(--vvd-color-canvas-text));--_connotation-color-fierce: var(--vvd-searchable-select-accent-fierce, var(--vvd-color-neutral-700))}.fieldset{--_appearance-color-text: var(--vvd-color-canvas-text);--_appearance-color-fill: var(--vvd-color-canvas);--_appearance-color-outline: var(--vvd-color-neutral-500)}.fieldset.appearance-ghost{--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: transparent;--_appearance-color-outline: transparent}.fieldset: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)}.fieldset: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}.fieldset: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)}.fieldset:where(.disabled,:disabled).appearance-ghost{--_appearance-color-text: var(--vvd-color-neutral-300);--_appearance-color-fill: transparent;--_appearance-color-outline: transparent}.fieldset: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)}.fieldset:where(.readonly):where(:not(.disabled,:disabled)).appearance-ghost{--_appearance-color-text: var(--vvd-color-neutral-600);--_appearance-color-fill: transparent;--_appearance-color-outline: transparent}.fieldset: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)}.fieldset:where(.error):where(:not(.disabled,:disabled)).appearance-ghost{--_appearance-color-text: notSet;--_appearance-color-fill: var(--vvd-color-alert-50);--_appearance-color-outline: transparent}.fieldset: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)}.fieldset:where(.success):where(:not(.disabled,:disabled)).appearance-ghost{--_appearance-color-text: notSet;--_appearance-color-fill: var(--vvd-color-success-50);--_appearance-color-outline: transparent}.fieldset{display:flex;align-items:center;justify-content:space-between;background-color:var(--_appearance-color-fill);box-shadow:inset 0 0 0 1px var(--_appearance-color-outline);color:var(--_appearance-color-text);font:var(--vvd-typography-base);gap:8px;padding-block:8px;padding-inline:16px;transition:box-shadow .2s,background-color .2s}.fieldset:focus-within{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}:host(:not([shape=pill])) .fieldset{border-radius:8px}:host([shape=pill]) .fieldset{border-radius:24px}.popup-wrapper{position:relative}.content-area{display:flex;overflow:hidden;flex:1;flex-direction:column;gap:8px;min-block-size:24px}.tag-row{display:flex;gap:8px;inline-size:100%}.tag-row.contains-only-input:not(:focus-within){display:contents}.tag-wrapper{overflow:hidden}.tag{max-inline-size:100%}input{box-sizing:border-box;flex:1;border:none;background:none;block-size:24px;font:var(--vvd-typography-base);max-inline-size:100%;min-inline-size:100px;outline:none}.contains-only-input input:not(:focus){position:absolute;block-size:0;inline-size:0;min-inline-size:0;opacity:0;pointer-events:none}.listbox{display:flex;flex-direction:column;padding:4px;gap:2px;max-block-size:var(--searchable-select-height, 408px);overflow-y:auto}.empty-message{display:flex;align-items:center;justify-content:center;color:var(--vvd-color-neutral-300);font:var(--vvd-typography-base);min-block-size:40px;text-align:center}::part(popup-base){inline-size:max-content;min-inline-size:var(--_searchable-select-fixed-width, 100%)}slot[name=icon]{font-size:20px}.visually-hidden{position:absolute;overflow:hidden;width:1px;height:1px;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}";
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(:focus-visible){outline:none}:host{display:inline-block;inline-size:300px;--_low-ink-color: var(--vvd-color-neutral-600)}:host([disabled]){--_low-ink-color: var(--vvd-color-neutral-400);cursor:not-allowed}.control-wrapper{display:flex;flex-direction:column;gap:4px}.label{color:var(--vvd-color-canvas-text);font:var(--vvd-typography-base)}.selection-count{color:var(--_low-ink-color);font:var(--vvd-typography-base)}.fieldset{--_connotation-color-primary: var(--vvd-searchable-select-accent-primary, var(--vvd-color-canvas-text));--_connotation-color-primary-text: var(--vvd-searchable-select-accent-primary-text, var(--vvd-color-canvas));--_connotation-color-primary-increment: var(--vvd-searchable-select-accent-primary-increment, var(--vvd-color-neutral-800));--_connotation-color-intermediate: var(--vvd-searchable-select-accent-intermediate, var(--vvd-color-neutral-500));--_connotation-color-faint: var(--vvd-searchable-select-accent-faint, var(--vvd-color-neutral-50));--_connotation-color-soft: var(--vvd-searchable-select-accent-soft, var(--vvd-color-neutral-100));--_connotation-color-firm: var(--vvd-searchable-select-accent-firm, var(--vvd-color-canvas-text));--_connotation-color-fierce: var(--vvd-searchable-select-accent-fierce, var(--vvd-color-neutral-700))}.fieldset{--_appearance-color-text: var(--vvd-color-canvas-text);--_appearance-color-fill: var(--vvd-color-canvas);--_appearance-color-outline: var(--vvd-color-neutral-500)}.fieldset.appearance-ghost{--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: transparent;--_appearance-color-outline: transparent}.fieldset: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)}.fieldset: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}.fieldset: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)}.fieldset:where(.disabled,:disabled).appearance-ghost{--_appearance-color-text: var(--vvd-color-neutral-300);--_appearance-color-fill: transparent;--_appearance-color-outline: transparent}.fieldset: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)}.fieldset:where(.readonly):where(:not(.disabled,:disabled)).appearance-ghost{--_appearance-color-text: var(--vvd-color-neutral-600);--_appearance-color-fill: transparent;--_appearance-color-outline: transparent}.fieldset: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)}.fieldset:where(.error):where(:not(.disabled,:disabled)).appearance-ghost{--_appearance-color-text: notSet;--_appearance-color-fill: var(--vvd-color-alert-50);--_appearance-color-outline: transparent}.fieldset: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)}.fieldset:where(.success):where(:not(.disabled,:disabled)).appearance-ghost{--_appearance-color-text: notSet;--_appearance-color-fill: var(--vvd-color-success-50);--_appearance-color-outline: transparent}.fieldset{display:flex;align-items:center;justify-content:space-between;background-color:var(--_appearance-color-fill);box-shadow:inset 0 0 0 1px var(--_appearance-color-outline);color:var(--_appearance-color-text);font:var(--vvd-typography-base);gap:8px;padding-block:8px;padding-inline:16px;transition:box-shadow .2s,background-color .2s}.fieldset:focus-within{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}:host(:not([shape=pill])) .fieldset{border-radius:8px}:host([shape=pill]) .fieldset{border-radius:24px}.popup-wrapper{position:relative}.content-area{display:flex;overflow:hidden;flex:1;flex-direction:column;gap:8px;min-block-size:24px}.tag-row{display:flex;gap:8px;inline-size:100%}.tag-row.contains-only-input:not(:focus-within){display:contents}.tag-wrapper{overflow:hidden}.tag{max-inline-size:100%}input{box-sizing:border-box;flex:1;border:none;background:none;block-size:24px;font:var(--vvd-typography-base);max-inline-size:100%;min-inline-size:min(100px,40%);outline:none}.contains-only-input input:not(:focus){position:absolute;block-size:0;inline-size:0;min-inline-size:0;opacity:0;pointer-events:none}.listbox{display:flex;flex-direction:column;padding:4px;gap:2px;max-block-size:var(--searchable-select-height, 408px);overflow-y:auto}.empty-message{display:flex;align-items:center;justify-content:center;color:var(--vvd-color-neutral-300);font:var(--vvd-typography-base);min-block-size:40px;text-align:center}::part(popup-base){inline-size:max-content;min-inline-size:var(--_searchable-select-fixed-width, 100%)}slot[name=icon]{font-size:20px}.visually-hidden{position:absolute;overflow:hidden;width:1px;height:1px;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}";
23
23
 
24
24
  const optionTagStyles = ".base.connotation-cta{--_connotation-color-contrast: var(--vvd-option-tag-cta-contrast, var(--vvd-color-cta-800))}.base:not(.connotation-cta){--_connotation-color-contrast: var(--vvd-option-tag-accent-contrast, var(--vvd-color-neutral-800))}.base{position:relative;display:inline-flex;box-sizing:border-box;align-items:center;background-color:var(--fill-color);block-size:calc(1px*(24 + 4*clamp(-1,var(--vvd-size-density, 0),2)));box-shadow:inset 0 0 0 1px var(--outline-color);color:var(--text-color);column-gap:8px;font:var(--vvd-typography-base-bold);max-inline-size:100%;padding-inline:8px;user-select:none;vertical-align:middle}.base:not(.disabled){--text-color: var(--_connotation-color-contrast);--fill-color: color-mix( in srgb, var(--_connotation-color-contrast), transparent 87.5% );--outline-color: transparent}.base.disabled{--text-color: var(--vvd-color-neutral-300);--fill-color: color-mix( in srgb, var(--vvd-color-neutral-800), transparent 87.5% );--outline-color: transparent}.base:not(.shape-pill){border-radius:4px}.base.shape-pill{border-radius:16px}.label{overflow:hidden;max-inline-size:100%;text-overflow:ellipsis;white-space:nowrap}slot[name=icon]{font-size:calc(calc(1px*(24 + 4*clamp(-1,var(--vvd-size-density, 0),2))) / 1.5);line-height:1}.icon-placeholder{inline-size:calc(calc(1px*(24 + 4*clamp(-1,var(--vvd-size-density, 0),2))) / 1.5)}.remove-button{display:flex;align-items:center;border-radius:inherit;cursor:pointer;outline:none}.disabled .remove-button{pointer-events:none}.remove-button:focus-visible:before{--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));position:absolute;z-index:1;display:block;border-radius:inherit;content:\"\";inset:0;pointer-events:none}";
25
25
 
@@ -225,7 +225,6 @@ class SearchableSelect extends WithFeedback(
225
225
  */
226
226
  _onInputFocus(_) {
227
227
  this.#updateFilteredOptions();
228
- this.open = true;
229
228
  }
230
229
  /**
231
230
  * @internal
@@ -245,6 +244,9 @@ class SearchableSelect extends WithFeedback(
245
244
  switch (e.key) {
246
245
  case "Enter":
247
246
  this.#selectHighlightedOption();
247
+ if (this._inputValue === "") {
248
+ this.open = !this.open;
249
+ }
248
250
  return false;
249
251
  case "Escape":
250
252
  this.open = false;
@@ -421,6 +423,13 @@ class SearchableSelect extends WithFeedback(
421
423
  optionFilterChanged() {
422
424
  this.#updateFilteredOptions();
423
425
  }
426
+ /**
427
+ * @internal
428
+ */
429
+ loadingChanged(_oldValue, newValue) {
430
+ this._changeDescription = this.locale.searchableSelect.loadingOptionsMessage;
431
+ if (_oldValue && !newValue) this._changeDescription = "";
432
+ }
424
433
  #updateFilteredOptions() {
425
434
  const newFilteredOptions = [];
426
435
  const optionFilter = this.optionFilter ?? ((option, searchText) => option.text.toLowerCase().includes(searchText.toLowerCase()));
@@ -460,7 +469,8 @@ class SearchableSelect extends WithFeedback(
460
469
  this._changeDescription = this.locale.searchableSelect.optionFocusedMessage(
461
470
  highlightedOption.text,
462
471
  this._highlightedOptionIndex + 1,
463
- this._filteredEnabledOptions.length
472
+ this._filteredEnabledOptions.length,
473
+ highlightedOption.selected
464
474
  );
465
475
  }
466
476
  }
@@ -691,7 +701,7 @@ class SearchableSelect extends WithFeedback(
691
701
  return;
692
702
  }
693
703
  const capturedOption = e.target.closest(
694
- `option,[role=option]`
704
+ `option,[role=option],[data-vvd-component=option]`
695
705
  );
696
706
  if (capturedOption && !capturedOption.disabled) {
697
707
  this.#handleOptionInteraction(capturedOption);
@@ -718,7 +728,7 @@ class SearchableSelect extends WithFeedback(
718
728
  this.#updateSelectionLimit();
719
729
  }
720
730
  #updateSelectionLimit() {
721
- if (!this.multiple || typeof this.maxSelected !== "number" || this.maxSelected <= 0) {
731
+ if (!this.multiple || !this._slottedOptions || typeof this.maxSelected !== "number" || this.maxSelected <= 0) {
722
732
  return;
723
733
  }
724
734
  const options = this._slottedOptions.filter(
@@ -1099,13 +1109,13 @@ function renderFieldset(context) {
1099
1109
  size="super-condensed"
1100
1110
  icon="close-line"
1101
1111
  appearance="ghost-light"
1102
- tabindex="-1"
1112
+ tabindex="0"
1103
1113
  ></${buttonTag}>`
1104
1114
  )}
1105
1115
  <div @mousedown="${() => false}" @click="${(x) => x._onChevronClick()}">
1106
1116
  ${when(
1107
1117
  (x) => x.loading,
1108
- html`<${progressRingTag} indeterminate size="-6"></${progressRingTag}>`
1118
+ html`<${progressRingTag} indeterminate size="-6" aria-hidden="true"></${progressRingTag}>`
1109
1119
  )}
1110
1120
  ${when((x) => !x.loading, chevronTemplate)}
1111
1121
  </div>
@@ -399,7 +399,7 @@ class Select extends mixins.WithLightDOMFeedback(
399
399
  return;
400
400
  }
401
401
  const clickedOption = e.target.closest(
402
- `option,[role=option]`
402
+ `option,[role=option],[data-vvd-component=option]`
403
403
  );
404
404
  if (clickedOption && clickedOption.disabled) {
405
405
  return;
@@ -397,7 +397,7 @@ class Select extends WithLightDOMFeedback(
397
397
  return;
398
398
  }
399
399
  const clickedOption = e.target.closest(
400
- `option,[role=option]`
400
+ `option,[role=option],[data-vvd-component=option]`
401
401
  );
402
402
  if (clickedOption && clickedOption.disabled) {
403
403
  return;