@vonage/vivid 5.3.0 → 5.5.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 (263) hide show
  1. package/accordion-item/definition.js +1 -1
  2. package/alert/definition.cjs +1 -1
  3. package/alert/definition.js +2 -2
  4. package/badge/definition.js +1 -1
  5. package/banner/definition.js +1 -1
  6. package/bundled/base-color-picker.cjs +18 -13
  7. package/bundled/base-color-picker.js +98 -81
  8. package/bundled/calendar-picker.template.cjs +7 -7
  9. package/bundled/calendar-picker.template.js +102 -102
  10. package/bundled/char-count.cjs +1 -1
  11. package/bundled/char-count.js +1 -1
  12. package/bundled/definition10.cjs +1 -1
  13. package/bundled/definition10.js +2 -2
  14. package/bundled/definition11.cjs +12 -19
  15. package/bundled/definition11.js +87 -66
  16. package/bundled/definition12.cjs +19 -10
  17. package/bundled/definition12.js +217 -36
  18. package/bundled/definition13.cjs +10 -1
  19. package/bundled/definition13.js +38 -14
  20. package/bundled/definition14.cjs +1 -5
  21. package/bundled/definition14.js +15 -24
  22. package/bundled/definition15.cjs +5 -30
  23. package/bundled/definition15.js +22 -73
  24. package/bundled/definition16.cjs +30 -19
  25. package/bundled/definition16.js +74 -97
  26. package/bundled/definition17.cjs +19 -13
  27. package/bundled/definition17.js +83 -117
  28. package/bundled/definition18.cjs +13 -12
  29. package/bundled/definition18.js +114 -71
  30. package/bundled/definition19.cjs +26 -27
  31. package/bundled/definition19.js +171 -180
  32. package/bundled/definition2.cjs +9 -9
  33. package/bundled/definition2.js +84 -129
  34. package/bundled/definition3.cjs +1 -1
  35. package/bundled/definition3.js +1 -1
  36. package/bundled/definition6.cjs +3 -3
  37. package/bundled/definition6.js +19 -19
  38. package/bundled/definition9.cjs +5 -5
  39. package/bundled/definition9.js +394 -392
  40. package/bundled/listbox.cjs +1 -1
  41. package/bundled/listbox.js +82 -102
  42. package/bundled/localized.cjs +1 -1
  43. package/bundled/localized.js +48 -31
  44. package/bundled/mixins.cjs +1 -1
  45. package/bundled/mixins.js +1 -1
  46. package/bundled/picker-field.template.cjs +14 -14
  47. package/bundled/picker-field.template.js +35 -56
  48. package/bundled/time-selection-picker.template.cjs +12 -12
  49. package/bundled/time-selection-picker.template.js +13 -12
  50. package/bundled/trapped-focus.cjs +1 -0
  51. package/bundled/trapped-focus.js +26 -0
  52. package/bundled/vivid-element.cjs +5 -1
  53. package/bundled/vivid-element.js +401 -358
  54. package/calendar/index.cjs +13 -13
  55. package/calendar/index.js +171 -143
  56. package/card/definition.cjs +1 -1
  57. package/card/definition.js +1 -1
  58. package/color-picker/definition.cjs +209 -113
  59. package/color-picker/definition.js +209 -113
  60. package/color-picker/index.cjs +104 -75
  61. package/color-picker/index.js +412 -326
  62. package/combobox/definition.cjs +7 -27
  63. package/combobox/definition.js +8 -28
  64. package/combobox/index.cjs +6 -6
  65. package/combobox/index.js +57 -71
  66. package/contextual-help/index.cjs +1 -1
  67. package/contextual-help/index.js +1 -1
  68. package/custom-elements.json +354 -2
  69. package/data-grid/index.cjs +1 -1
  70. package/data-grid/index.js +1 -1
  71. package/date-picker/definition.cjs +1 -1
  72. package/date-picker/definition.js +1 -1
  73. package/date-picker/index.cjs +1 -1
  74. package/date-picker/index.js +2 -2
  75. package/date-range-picker/definition.cjs +1 -1
  76. package/date-range-picker/definition.js +1 -1
  77. package/date-range-picker/index.cjs +1 -1
  78. package/date-range-picker/index.js +2 -2
  79. package/date-time-picker/definition.cjs +1 -1
  80. package/date-time-picker/definition.js +1 -1
  81. package/date-time-picker/index.cjs +1 -1
  82. package/date-time-picker/index.js +2 -2
  83. package/dial-pad/definition.cjs +139 -0
  84. package/dial-pad/definition.js +139 -0
  85. package/dial-pad/index.cjs +27 -20
  86. package/dial-pad/index.js +177 -100
  87. package/dialog/definition.cjs +2 -2
  88. package/dialog/definition.js +2 -2
  89. package/dialog/index.cjs +7 -7
  90. package/dialog/index.js +6 -6
  91. package/divider/index.cjs +1 -1
  92. package/divider/index.js +1 -1
  93. package/elevation/definition.cjs +1 -1
  94. package/elevation/definition.js +1 -1
  95. package/fab/definition.js +1 -1
  96. package/header/definition.cjs +1 -1
  97. package/header/definition.js +1 -1
  98. package/icon/definition.cjs +56 -22
  99. package/icon/definition.js +56 -22
  100. package/index.cjs +3 -4
  101. package/index.js +2 -3
  102. package/lib/accordion/accordion.d.ts +1 -1
  103. package/lib/accordion/definition.d.ts +1 -1
  104. package/lib/audio-player/audio-player.d.ts +1 -1
  105. package/lib/color-picker/color-picker.d.ts +390 -12
  106. package/lib/color-picker/locale.d.ts +4 -0
  107. package/lib/combobox/combobox.d.ts +1 -0
  108. package/lib/combobox/combobox.options.d.ts +1 -1
  109. package/lib/date-picker/date-picker.d.ts +38 -38
  110. package/lib/date-range-picker/date-range-picker.d.ts +20 -20
  111. package/lib/date-time-picker/date-time-picker.d.ts +40 -40
  112. package/lib/dial-pad/dial-pad.d.ts +1 -0
  113. package/lib/divider/divider.d.ts +1 -1
  114. package/lib/icon/icon.d.ts +1 -0
  115. package/lib/menu-item/menu-item-role.d.ts +1 -1
  116. package/lib/popup/popup.d.ts +1 -1
  117. package/lib/searchable-select/locale.d.ts +4 -0
  118. package/lib/searchable-select/searchable-select.d.ts +3 -0
  119. package/lib/select/select.d.ts +3 -1
  120. package/lib/simple-color-picker/simple-color-picker.d.ts +2 -1
  121. package/lib/slider/slider.d.ts +1 -1
  122. package/lib/tabs/tabs.d.ts +2 -2
  123. package/lib/text-area/text-area.d.ts +1 -1
  124. package/lib/text-field/text-field.d.ts +1 -1
  125. package/lib/time-picker/time-picker.d.ts +20 -20
  126. package/locales/de-DE.cjs +20 -3
  127. package/locales/de-DE.js +20 -3
  128. package/locales/en-GB.cjs +21 -4
  129. package/locales/en-GB.js +21 -4
  130. package/locales/en-US.cjs +21 -4
  131. package/locales/en-US.js +21 -4
  132. package/locales/ja-JP.cjs +20 -3
  133. package/locales/ja-JP.js +20 -3
  134. package/locales/zh-CN.cjs +19 -2
  135. package/locales/zh-CN.js +19 -2
  136. package/menu/definition.cjs +4 -4
  137. package/menu/definition.js +4 -4
  138. package/nav-disclosure/definition.js +1 -1
  139. package/nav-item/definition.js +1 -1
  140. package/note/definition.js +1 -1
  141. package/number-field/definition.js +1 -1
  142. package/number-field/index.cjs +1 -1
  143. package/number-field/index.js +3 -3
  144. package/option/definition.cjs +6 -77
  145. package/option/definition.js +3 -78
  146. package/option/index.cjs +1 -1
  147. package/option/index.js +1 -1
  148. package/package.json +31 -5
  149. package/popup/definition.cjs +2 -2
  150. package/popup/definition.js +2 -2
  151. package/progress-ring/index.cjs +1 -1
  152. package/progress-ring/index.js +1 -1
  153. package/radio/index.cjs +1 -1
  154. package/radio/index.js +1 -1
  155. package/radio-group/index.cjs +1 -1
  156. package/radio-group/index.js +1 -1
  157. package/range-slider/definition.cjs +1 -1
  158. package/range-slider/definition.js +1 -1
  159. package/rich-text-editor/definition.cjs +2 -3
  160. package/rich-text-editor/definition.js +1 -2
  161. package/rich-text-editor/index.cjs +27 -27
  162. package/rich-text-editor/index.js +1209 -1199
  163. package/searchable-select/definition.cjs +103 -11
  164. package/searchable-select/definition.js +103 -11
  165. package/searchable-select/index.cjs +81 -69
  166. package/searchable-select/index.js +359 -273
  167. package/select/definition.cjs +30 -44
  168. package/select/definition.js +30 -44
  169. package/selectable-box/definition.cjs +1 -1
  170. package/selectable-box/definition.js +1 -1
  171. package/selectable-box/index.cjs +1 -1
  172. package/selectable-box/index.js +2 -2
  173. package/shared/aria/aria-mixin.d.ts +1 -1
  174. package/shared/color-picker/base-color-picker.d.ts +2 -1
  175. package/shared/foundation/listbox/listbox.d.ts +4 -0
  176. package/shared/picker-field/mixins/calendar-picker.d.ts +10 -10
  177. package/shared/picker-field/mixins/calendar-picker.template.d.ts +10 -10
  178. package/shared/picker-field/mixins/min-max-calendar-picker.d.ts +20 -20
  179. package/shared/picker-field/mixins/single-date-picker.d.ts +28 -28
  180. package/shared/picker-field/mixins/single-value-picker.d.ts +8 -8
  181. package/shared/picker-field/mixins/time-selection-picker.d.ts +20 -20
  182. package/shared/picker-field/mixins/time-selection-picker.template.d.ts +20 -20
  183. package/simple-color-picker/definition.cjs +9 -7
  184. package/simple-color-picker/definition.js +9 -7
  185. package/simple-color-picker/index.cjs +6 -6
  186. package/simple-color-picker/index.js +41 -39
  187. package/slider/definition.cjs +1 -1
  188. package/slider/definition.js +1 -1
  189. package/split-button/definition.js +1 -1
  190. package/styles/core/all.css +1 -1
  191. package/styles/core/theme.css +1 -1
  192. package/styles/core/typography.css +1 -1
  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/tab/definition.js +1 -1
  197. package/tag/definition.cjs +34 -14
  198. package/tag/definition.js +35 -15
  199. package/tag/index.cjs +25 -12
  200. package/tag/index.js +64 -47
  201. package/tag-group/definition.cjs +1 -2
  202. package/tag-group/definition.js +1 -2
  203. package/tag-group/index.cjs +1 -1
  204. package/tag-group/index.js +11 -12
  205. package/text-area/index.cjs +1 -1
  206. package/text-area/index.js +2 -2
  207. package/text-field/definition.js +1 -1
  208. package/time-picker/definition.cjs +1 -1
  209. package/time-picker/definition.js +1 -1
  210. package/time-picker/index.cjs +1 -1
  211. package/time-picker/index.js +1 -1
  212. package/toggletip/definition.cjs +1 -1
  213. package/toggletip/definition.js +1 -1
  214. package/toggletip/index.cjs +1 -1
  215. package/toggletip/index.js +1 -1
  216. package/tooltip/definition.cjs +3 -3
  217. package/tooltip/definition.js +3 -3
  218. package/tooltip/index.cjs +1 -1
  219. package/tooltip/index.js +1 -1
  220. package/tree-item/definition.cjs +1 -1
  221. package/tree-item/definition.js +1 -1
  222. package/tree-view/definition.cjs +1 -1
  223. package/tree-view/definition.js +1 -1
  224. package/unbundled/affix.js +1 -1
  225. package/unbundled/base-color-picker.cjs +36 -18
  226. package/unbundled/base-color-picker.js +36 -18
  227. package/unbundled/calendar-picker.template.cjs +2 -2
  228. package/unbundled/calendar-picker.template.js +2 -2
  229. package/unbundled/definition.js +1 -1
  230. package/unbundled/definition2.js +1 -1
  231. package/unbundled/definition3.cjs +222 -141
  232. package/unbundled/definition3.js +220 -139
  233. package/unbundled/definition4.cjs +145 -235
  234. package/unbundled/definition4.js +143 -233
  235. package/unbundled/definition5.cjs +269 -27
  236. package/unbundled/definition5.js +267 -26
  237. package/unbundled/definition6.cjs +56 -0
  238. package/unbundled/definition6.js +52 -0
  239. package/unbundled/listbox.cjs +41 -63
  240. package/unbundled/listbox.js +39 -61
  241. package/unbundled/picker-field.template.cjs +3 -36
  242. package/unbundled/picker-field.template.js +3 -35
  243. package/unbundled/slider.template.cjs +1 -1
  244. package/unbundled/slider.template.js +1 -1
  245. package/unbundled/time-selection-picker.template.cjs +2 -1
  246. package/unbundled/time-selection-picker.template.js +2 -1
  247. package/unbundled/trapped-focus.cjs +37 -0
  248. package/unbundled/trapped-focus.js +34 -0
  249. package/unbundled/vivid-element.cjs +1 -1
  250. package/unbundled/vivid-element.js +1 -1
  251. package/video-player/definition.cjs +56 -16
  252. package/video-player/definition.js +56 -16
  253. package/video-player/index.cjs +36 -36
  254. package/video-player/index.js +2461 -2445
  255. package/visually-hidden/index.cjs +1 -1
  256. package/visually-hidden/index.js +1 -1
  257. package/vivid.api.json +285 -38
  258. package/bundled/_has.cjs +0 -1
  259. package/bundled/_has.js +0 -34
  260. package/bundled/option.cjs +0 -1
  261. package/bundled/option.js +0 -158
  262. package/unbundled/option.cjs +0 -217
  263. package/unbundled/option.js +0 -214
package/fab/definition.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { iconDefinition } from '../icon/definition.js';
2
2
  import { d as defineVividComponent, c as createRegisterFunction } from '../unbundled/vivid-element.js';
3
3
  import { attr, ref, html } from '@microsoft/fast-element';
4
- import { A as AffixIconWithTrailing, a as affixIconTemplateFactory, I as IconWrapper } from '../unbundled/affix.js';
4
+ import { b as AffixIconWithTrailing, a as affixIconTemplateFactory, I as IconWrapper } from '../unbundled/affix.js';
5
5
  import { V as VividFoundationButton } from '../unbundled/button.js';
6
6
  import { classNames } from '@microsoft/fast-web-utilities';
7
7
  import { d as delegateAria } from '../unbundled/delegates-aria.js';
@@ -2,7 +2,7 @@
2
2
 
3
3
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
4
 
5
- const elevation_definition = require('../unbundled/definition5.cjs');
5
+ const elevation_definition = require('../unbundled/definition6.cjs');
6
6
  const vividElement = require('../unbundled/vivid-element.cjs');
7
7
  const fastElement = require('@microsoft/fast-element');
8
8
  const delegatesAria = require('../unbundled/delegates-aria.cjs');
@@ -1,4 +1,4 @@
1
- import { E as Elevation, e as elevationDefinition } from '../unbundled/definition5.js';
1
+ import { E as Elevation, e as elevationDefinition } from '../unbundled/definition6.js';
2
2
  import { V as VividElement, d as defineVividComponent, c as createRegisterFunction } from '../unbundled/vivid-element.js';
3
3
  import { attr, html } from '@microsoft/fast-element';
4
4
  import { D as DelegatesAria, d as delegateAria } from '../unbundled/delegates-aria.js';
@@ -5,7 +5,6 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
5
5
  const vividElement = require('../unbundled/vivid-element.cjs');
6
6
  const visuallyHidden_definition = require('../visually-hidden/definition.cjs');
7
7
  const fastElement = require('@microsoft/fast-element');
8
- const ramda = require('ramda');
9
8
  const fastWebUtilities = require('@microsoft/fast-web-utilities');
10
9
 
11
10
  const styles = ":host{display:inline-block;vertical-align:sub}.control.connotation-accent{--_connotation-color-primary: var(--vvd-icon-accent-primary, var(--vvd-color-canvas-text))}.control.connotation-announcement{--_connotation-color-primary: var(--vvd-icon-announcement-primary, var(--vvd-color-announcement-500))}.control.connotation-cta{--_connotation-color-primary: var(--vvd-icon-cta-primary, var(--vvd-color-cta-500))}.control.connotation-success{--_connotation-color-primary: var(--vvd-icon-success-primary, var(--vvd-color-success-500))}.control.connotation-warning{--_connotation-color-primary: var(--vvd-icon-warning-primary, var(--vvd-color-warning-300))}.control.connotation-alert{--_connotation-color-primary: var(--vvd-icon-alert-primary, var(--vvd-color-alert-500))}.control.connotation-information{--_connotation-color-primary: var(--vvd-icon-information-primary, var(--vvd-color-information-500))}.control.size--6{--_icon-block-size: calc(1px*(40 + 4*clamp(-1, var(--vvd-size-density, 0), 2)) - (1px*(24 + 4*clamp(-1, var(--vvd-size-density, 0), 2)))) }.control.size--5{--_icon-block-size: calc(1px*(20 + 4*clamp(-1, var(--vvd-size-density, 0), 2))) }.control.size--4{--_icon-block-size: calc(1px*(24 + 4*clamp(-1, var(--vvd-size-density, 0), 2))) }.control.size--3{--_icon-block-size: calc(1px*(28 + 4*clamp(-1, var(--vvd-size-density, 0), 2))) }.control.size--2{--_icon-block-size: calc(1px*(32 + 4*clamp(-1, var(--vvd-size-density, 0), 2))) }.control.size--1{--_icon-block-size: calc(1px*(36 + 4*clamp(-1, var(--vvd-size-density, 0), 2))) }.control.size-0{--_icon-block-size: calc(1px*(40 + 4*clamp(-1, var(--vvd-size-density, 0), 2))) }.control.size-1{--_icon-block-size: calc(1px*(44 + 4*clamp(-1, var(--vvd-size-density, 0), 2))) }.control.size-2{--_icon-block-size: calc(1px*(48 + 4*clamp(-1, var(--vvd-size-density, 0), 2))) }.control.size-3{--_icon-block-size: calc(1px*(52 + 4*clamp(-1, var(--vvd-size-density, 0), 2))) }.control.size-4{--_icon-block-size: calc(1px*(56 + 4*clamp(-1, var(--vvd-size-density, 0), 2))) }.control.size-5{--_icon-block-size: calc(1px*(60 + 4*clamp(-1, var(--vvd-size-density, 0), 2))) }.control:not(.size--6,.size--5,.size--4,.size--3,.size--2,.size--1,.size-0,.size-1,.size-2,.size-3,.size-4,.size-5){--_icon-block-size: 1em}.control{display:flex;margin:unset;block-size:var(--_icon-block-size);color:currentColor;contain:strict;inline-size:var(--_icon-block-size)}.control[class*=connotation]{color:var(--_connotation-color-primary)}slot,svg,::slotted(:where(svg,img)){margin:auto;block-size:inherit;inline-size:inherit}";
@@ -66,24 +65,50 @@ const extractSvg = (response) => {
66
65
  assertIsValidResponse(response);
67
66
  return response.text();
68
67
  };
69
- const loadSvg = (iconId, signal) => fetch(baseUrlTemplate([iconId, "svg"].join("."), ICONS_VERSION), {
70
- signal
71
- }).then(extractSvg);
72
- const resolveIcon = ramda.memoizeWith(
73
- ramda.identity,
74
- (iconId, signal) => iconId.trim() ? loadSvg(iconId, signal) : Promise.resolve("")
68
+ const loadSvg = (iconId, signal) => fetch(baseUrlTemplate(`${iconId}.svg`, ICONS_VERSION), { signal }).then(
69
+ extractSvg
75
70
  );
71
+ const normalizeKey = (iconId) => (iconId ?? "").trim();
72
+ const iconCache = /* @__PURE__ */ new Map();
73
+ const resolveIcon = (iconId, signal) => {
74
+ const key = normalizeKey(iconId);
75
+ if (!key) return Promise.resolve("");
76
+ const cached = iconCache.get(key);
77
+ if (cached && !cached.signal?.aborted) {
78
+ return cached.promise;
79
+ }
80
+ const promise = loadSvg(key, signal).then((svg) => {
81
+ const entry = iconCache.get(key);
82
+ if (entry && entry.promise === promise && signal.aborted) {
83
+ iconCache.delete(key);
84
+ throw signal.reason ?? new DOMException("Aborted", "AbortError");
85
+ }
86
+ return svg;
87
+ }).catch((err) => {
88
+ const entry = iconCache.get(key);
89
+ if (entry && entry.promise === promise) {
90
+ iconCache.delete(key);
91
+ }
92
+ throw err;
93
+ });
94
+ iconCache.set(key, { promise, signal });
95
+ return promise;
96
+ };
76
97
  class Icon extends vividElement.VividElement {
77
98
  constructor() {
78
99
  super(...arguments);
79
100
  this.iconLoaded = false;
101
+ this.#currentRequestId = 0;
80
102
  this.#abortController = null;
81
103
  }
104
+ #currentRequestId;
82
105
  get iconUrl() {
83
- return !this.name ? this._svg : baseUrlTemplate(`${this.name}.svg`, ICONS_VERSION);
106
+ const key = normalizeKey(this.name);
107
+ return key ? baseUrlTemplate(`${key}.svg`, ICONS_VERSION) : this._svg;
84
108
  }
85
109
  #abortController;
86
110
  async nameChanged() {
111
+ const requestId = ++this.#currentRequestId;
87
112
  if (this.#abortController) {
88
113
  this.#abortController.abort();
89
114
  }
@@ -91,21 +116,30 @@ class Icon extends vividElement.VividElement {
91
116
  this._svg = void 0;
92
117
  this.iconLoaded = false;
93
118
  let timeout = setTimeout(() => {
94
- this._svg = PLACEHOLDER_ICON;
95
- timeout = setTimeout(() => {
96
- if (this._svg === PLACEHOLDER_ICON) {
97
- this._svg = void 0;
98
- }
99
- }, PLACEHOLDER_TIMEOUT);
119
+ if (this.#currentRequestId === requestId) {
120
+ this._svg = PLACEHOLDER_ICON;
121
+ timeout = setTimeout(() => {
122
+ if (this.#currentRequestId === requestId && this._svg === PLACEHOLDER_ICON) {
123
+ this._svg = void 0;
124
+ }
125
+ }, PLACEHOLDER_TIMEOUT);
126
+ }
100
127
  }, PLACEHOLDER_DELAY);
101
- await resolveIcon(this.name ? this.name : "", this.#abortController.signal).then((svg) => {
102
- this._svg = svg;
103
- }).catch(() => {
104
- this._svg = void 0;
105
- }).finally(() => {
106
- clearTimeout(timeout);
107
- this.iconLoaded = true;
108
- });
128
+ try {
129
+ const svg = await resolveIcon(this.name, this.#abortController.signal);
130
+ if (this.#currentRequestId === requestId) {
131
+ this._svg = svg;
132
+ }
133
+ } catch {
134
+ if (this.#currentRequestId === requestId) {
135
+ this._svg = void 0;
136
+ }
137
+ } finally {
138
+ if (this.#currentRequestId === requestId) {
139
+ clearTimeout(timeout);
140
+ this.iconLoaded = true;
141
+ }
142
+ }
109
143
  }
110
144
  }
111
145
  __decorateClass([
@@ -1,7 +1,6 @@
1
1
  import { V as VividElement, d as defineVividComponent, c as createRegisterFunction } from '../unbundled/vivid-element.js';
2
2
  import { VwcVisuallyHiddenElement as VisuallyHidden, visuallyHiddenDefinition } from '../visually-hidden/definition.js';
3
3
  import { attr, observable, volatile, when, html } from '@microsoft/fast-element';
4
- import { memoizeWith, identity } from 'ramda';
5
4
  import { classNames } from '@microsoft/fast-web-utilities';
6
5
 
7
6
  const styles = ":host{display:inline-block;vertical-align:sub}.control.connotation-accent{--_connotation-color-primary: var(--vvd-icon-accent-primary, var(--vvd-color-canvas-text))}.control.connotation-announcement{--_connotation-color-primary: var(--vvd-icon-announcement-primary, var(--vvd-color-announcement-500))}.control.connotation-cta{--_connotation-color-primary: var(--vvd-icon-cta-primary, var(--vvd-color-cta-500))}.control.connotation-success{--_connotation-color-primary: var(--vvd-icon-success-primary, var(--vvd-color-success-500))}.control.connotation-warning{--_connotation-color-primary: var(--vvd-icon-warning-primary, var(--vvd-color-warning-300))}.control.connotation-alert{--_connotation-color-primary: var(--vvd-icon-alert-primary, var(--vvd-color-alert-500))}.control.connotation-information{--_connotation-color-primary: var(--vvd-icon-information-primary, var(--vvd-color-information-500))}.control.size--6{--_icon-block-size: calc(1px*(40 + 4*clamp(-1, var(--vvd-size-density, 0), 2)) - (1px*(24 + 4*clamp(-1, var(--vvd-size-density, 0), 2)))) }.control.size--5{--_icon-block-size: calc(1px*(20 + 4*clamp(-1, var(--vvd-size-density, 0), 2))) }.control.size--4{--_icon-block-size: calc(1px*(24 + 4*clamp(-1, var(--vvd-size-density, 0), 2))) }.control.size--3{--_icon-block-size: calc(1px*(28 + 4*clamp(-1, var(--vvd-size-density, 0), 2))) }.control.size--2{--_icon-block-size: calc(1px*(32 + 4*clamp(-1, var(--vvd-size-density, 0), 2))) }.control.size--1{--_icon-block-size: calc(1px*(36 + 4*clamp(-1, var(--vvd-size-density, 0), 2))) }.control.size-0{--_icon-block-size: calc(1px*(40 + 4*clamp(-1, var(--vvd-size-density, 0), 2))) }.control.size-1{--_icon-block-size: calc(1px*(44 + 4*clamp(-1, var(--vvd-size-density, 0), 2))) }.control.size-2{--_icon-block-size: calc(1px*(48 + 4*clamp(-1, var(--vvd-size-density, 0), 2))) }.control.size-3{--_icon-block-size: calc(1px*(52 + 4*clamp(-1, var(--vvd-size-density, 0), 2))) }.control.size-4{--_icon-block-size: calc(1px*(56 + 4*clamp(-1, var(--vvd-size-density, 0), 2))) }.control.size-5{--_icon-block-size: calc(1px*(60 + 4*clamp(-1, var(--vvd-size-density, 0), 2))) }.control:not(.size--6,.size--5,.size--4,.size--3,.size--2,.size--1,.size-0,.size-1,.size-2,.size-3,.size-4,.size-5){--_icon-block-size: 1em}.control{display:flex;margin:unset;block-size:var(--_icon-block-size);color:currentColor;contain:strict;inline-size:var(--_icon-block-size)}.control[class*=connotation]{color:var(--_connotation-color-primary)}slot,svg,::slotted(:where(svg,img)){margin:auto;block-size:inherit;inline-size:inherit}";
@@ -62,24 +61,50 @@ const extractSvg = (response) => {
62
61
  assertIsValidResponse(response);
63
62
  return response.text();
64
63
  };
65
- const loadSvg = (iconId, signal) => fetch(baseUrlTemplate([iconId, "svg"].join("."), ICONS_VERSION), {
66
- signal
67
- }).then(extractSvg);
68
- const resolveIcon = memoizeWith(
69
- identity,
70
- (iconId, signal) => iconId.trim() ? loadSvg(iconId, signal) : Promise.resolve("")
64
+ const loadSvg = (iconId, signal) => fetch(baseUrlTemplate(`${iconId}.svg`, ICONS_VERSION), { signal }).then(
65
+ extractSvg
71
66
  );
67
+ const normalizeKey = (iconId) => (iconId ?? "").trim();
68
+ const iconCache = /* @__PURE__ */ new Map();
69
+ const resolveIcon = (iconId, signal) => {
70
+ const key = normalizeKey(iconId);
71
+ if (!key) return Promise.resolve("");
72
+ const cached = iconCache.get(key);
73
+ if (cached && !cached.signal?.aborted) {
74
+ return cached.promise;
75
+ }
76
+ const promise = loadSvg(key, signal).then((svg) => {
77
+ const entry = iconCache.get(key);
78
+ if (entry && entry.promise === promise && signal.aborted) {
79
+ iconCache.delete(key);
80
+ throw signal.reason ?? new DOMException("Aborted", "AbortError");
81
+ }
82
+ return svg;
83
+ }).catch((err) => {
84
+ const entry = iconCache.get(key);
85
+ if (entry && entry.promise === promise) {
86
+ iconCache.delete(key);
87
+ }
88
+ throw err;
89
+ });
90
+ iconCache.set(key, { promise, signal });
91
+ return promise;
92
+ };
72
93
  class Icon extends VividElement {
73
94
  constructor() {
74
95
  super(...arguments);
75
96
  this.iconLoaded = false;
97
+ this.#currentRequestId = 0;
76
98
  this.#abortController = null;
77
99
  }
100
+ #currentRequestId;
78
101
  get iconUrl() {
79
- return !this.name ? this._svg : baseUrlTemplate(`${this.name}.svg`, ICONS_VERSION);
102
+ const key = normalizeKey(this.name);
103
+ return key ? baseUrlTemplate(`${key}.svg`, ICONS_VERSION) : this._svg;
80
104
  }
81
105
  #abortController;
82
106
  async nameChanged() {
107
+ const requestId = ++this.#currentRequestId;
83
108
  if (this.#abortController) {
84
109
  this.#abortController.abort();
85
110
  }
@@ -87,21 +112,30 @@ class Icon extends VividElement {
87
112
  this._svg = void 0;
88
113
  this.iconLoaded = false;
89
114
  let timeout = setTimeout(() => {
90
- this._svg = PLACEHOLDER_ICON;
91
- timeout = setTimeout(() => {
92
- if (this._svg === PLACEHOLDER_ICON) {
93
- this._svg = void 0;
94
- }
95
- }, PLACEHOLDER_TIMEOUT);
115
+ if (this.#currentRequestId === requestId) {
116
+ this._svg = PLACEHOLDER_ICON;
117
+ timeout = setTimeout(() => {
118
+ if (this.#currentRequestId === requestId && this._svg === PLACEHOLDER_ICON) {
119
+ this._svg = void 0;
120
+ }
121
+ }, PLACEHOLDER_TIMEOUT);
122
+ }
96
123
  }, PLACEHOLDER_DELAY);
97
- await resolveIcon(this.name ? this.name : "", this.#abortController.signal).then((svg) => {
98
- this._svg = svg;
99
- }).catch(() => {
100
- this._svg = void 0;
101
- }).finally(() => {
102
- clearTimeout(timeout);
103
- this.iconLoaded = true;
104
- });
124
+ try {
125
+ const svg = await resolveIcon(this.name, this.#abortController.signal);
126
+ if (this.#currentRequestId === requestId) {
127
+ this._svg = svg;
128
+ }
129
+ } catch {
130
+ if (this.#currentRequestId === requestId) {
131
+ this._svg = void 0;
132
+ }
133
+ } finally {
134
+ if (this.#currentRequestId === requestId) {
135
+ clearTimeout(timeout);
136
+ this.iconLoaded = true;
137
+ }
138
+ }
105
139
  }
106
140
  }
107
141
  __decorateClass([
package/index.cjs CHANGED
@@ -44,8 +44,7 @@ const navItem_definition = require('./nav-item/definition.cjs');
44
44
  const nav_definition = require('./nav/definition.cjs');
45
45
  const note_definition = require('./note/definition.cjs');
46
46
  const numberField_definition = require('./number-field/definition.cjs');
47
- const option_definition = require('./option/definition.cjs');
48
- const option = require('./unbundled/option.cjs');
47
+ const option_definition = require('./unbundled/definition3.cjs');
49
48
  const pagination_definition = require('./pagination/definition.cjs');
50
49
  const progressRing_definition = require('./progress-ring/definition.cjs');
51
50
  const progress_definition = require('./progress/definition.cjs');
@@ -72,7 +71,7 @@ const timePicker_definition = require('./time-picker/definition.cjs');
72
71
  const timeSelectionPicker_template = require('./unbundled/time-selection-picker.template.cjs');
73
72
  const toggletip_definition = require('./toggletip/definition.cjs');
74
73
  const tooltip_definition = require('./tooltip/definition.cjs');
75
- const treeItem_definition = require('./unbundled/definition3.cjs');
74
+ const treeItem_definition = require('./unbundled/definition4.cjs');
76
75
  const treeView_definition = require('./tree-view/definition.cjs');
77
76
  const videoPlayer_definition = require('./video-player/definition.cjs');
78
77
 
@@ -208,9 +207,9 @@ exports.registerNote = note_definition.registerNote;
208
207
  exports.VwcNumberFieldElement = numberField_definition.VwcNumberFieldElement;
209
208
  exports.numberFieldDefinition = numberField_definition.numberFieldDefinition;
210
209
  exports.registerNumberField = numberField_definition.registerNumberField;
210
+ exports.VwcOptionElement = option_definition.ListboxOption;
211
211
  exports.listboxOptionDefinition = option_definition.listboxOptionDefinition;
212
212
  exports.registerOption = option_definition.registerOption;
213
- exports.VwcOptionElement = option.ListboxOption;
214
213
  exports.VwcPaginationElement = pagination_definition.VwcPaginationElement;
215
214
  exports.paginationDefinition = pagination_definition.paginationDefinition;
216
215
  exports.registerPagination = pagination_definition.registerPagination;
package/index.js CHANGED
@@ -40,8 +40,7 @@ export { VwcNavItemElement, navItemDefinition, registerNavItem } from './nav-ite
40
40
  export { VwcNavElement, navDefinition, registerNav } from './nav/definition.js';
41
41
  export { VwcNoteElement, noteDefinition, registerNote } from './note/definition.js';
42
42
  export { VwcNumberFieldElement, numberFieldDefinition, registerNumberField } from './number-field/definition.js';
43
- export { listboxOptionDefinition, registerOption } from './option/definition.js';
44
- export { L as VwcOptionElement } from './unbundled/option.js';
43
+ export { L as VwcOptionElement, l as listboxOptionDefinition, r as registerOption } from './unbundled/definition3.js';
45
44
  export { VwcPaginationElement, paginationDefinition, registerPagination } from './pagination/definition.js';
46
45
  export { VwcProgressRingElement, progressRingDefinition, registerProgressRing } from './progress-ring/definition.js';
47
46
  export { VwcProgressElement, progressDefinition, registerProgress } from './progress/definition.js';
@@ -68,6 +67,6 @@ export { registerTimePicker, timePickerDefinition } from './time-picker/definiti
68
67
  export { T as VwcTimePickerElement } from './unbundled/time-selection-picker.template.js';
69
68
  export { VwcToggletipElement, registerToggletip, toggletipDefinition } from './toggletip/definition.js';
70
69
  export { VwcTooltipElement, registerTooltip, tooltipDefinition } from './tooltip/definition.js';
71
- export { T as VwcTreeItemElement, r as registerTreeItem, t as treeItemDefinition } from './unbundled/definition3.js';
70
+ export { T as VwcTreeItemElement, r as registerTreeItem, t as treeItemDefinition } from './unbundled/definition4.js';
72
71
  export { VwcTreeViewElement, registerTreeView, treeViewDefinition } from './tree-view/definition.js';
73
72
  export { VwcVideoPlayerElement, registerVideoPlayer, videoPlayerDefinition } from './video-player/definition.js';
@@ -3,7 +3,7 @@ export declare const AccordionExpandMode: {
3
3
  readonly single: "single";
4
4
  readonly multi: "multi";
5
5
  };
6
- export type AccordionExpandMode = typeof AccordionExpandMode[keyof typeof AccordionExpandMode];
6
+ export type AccordionExpandMode = (typeof AccordionExpandMode)[keyof typeof AccordionExpandMode];
7
7
  export declare class Accordion extends VividElement {
8
8
  expandmode: AccordionExpandMode;
9
9
  activeid: string | null;
@@ -3,6 +3,6 @@ export declare const AccordionExpandMode: {
3
3
  readonly single: "single";
4
4
  readonly multi: "multi";
5
5
  };
6
- export type AccordionExpandMode = typeof AccordionExpandMode[keyof typeof AccordionExpandMode];
6
+ export type AccordionExpandMode = (typeof AccordionExpandMode)[keyof typeof AccordionExpandMode];
7
7
  export declare const registerAccordion: (prefix?: string) => void;
8
8
  export { Accordion as VwcAccordionElement };
@@ -8,7 +8,7 @@ export declare const SKIP_DIRECTIONS: {
8
8
  FORWARD: number;
9
9
  BACKWARD: number;
10
10
  };
11
- export type SKIP_DIRECTIONS_TYPE = typeof SKIP_DIRECTIONS[keyof typeof SKIP_DIRECTIONS];
11
+ export type SKIP_DIRECTIONS_TYPE = (typeof SKIP_DIRECTIONS)[keyof typeof SKIP_DIRECTIONS];
12
12
  export declare function formatTime(time: number): string;
13
13
  declare const AudioPlayer_base: {
14
14
  new (...args: any[]): {