@vonage/vivid 5.3.0 → 5.4.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 (157) 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/calendar-picker.template.cjs +7 -7
  7. package/bundled/calendar-picker.template.js +101 -101
  8. package/bundled/definition11.cjs +13 -13
  9. package/bundled/definition11.js +202 -50
  10. package/bundled/definition19.cjs +24 -25
  11. package/bundled/definition19.js +152 -164
  12. package/bundled/definition6.cjs +3 -3
  13. package/bundled/definition6.js +19 -19
  14. package/bundled/definition9.cjs +5 -5
  15. package/bundled/definition9.js +394 -392
  16. package/bundled/listbox.cjs +1 -1
  17. package/bundled/listbox.js +82 -102
  18. package/bundled/localized.cjs +1 -1
  19. package/bundled/localized.js +18 -14
  20. package/bundled/vivid-element.cjs +5 -1
  21. package/bundled/vivid-element.js +401 -358
  22. package/calendar/index.cjs +1 -1
  23. package/calendar/index.js +14 -14
  24. package/card/definition.cjs +1 -1
  25. package/card/definition.js +1 -1
  26. package/color-picker/definition.cjs +1 -1
  27. package/color-picker/definition.js +1 -1
  28. package/combobox/definition.cjs +7 -27
  29. package/combobox/definition.js +8 -28
  30. package/combobox/index.cjs +6 -6
  31. package/combobox/index.js +57 -71
  32. package/custom-elements.json +305 -2
  33. package/date-picker/definition.cjs +1 -1
  34. package/date-picker/definition.js +1 -1
  35. package/date-range-picker/definition.cjs +1 -1
  36. package/date-range-picker/definition.js +1 -1
  37. package/date-time-picker/definition.cjs +1 -1
  38. package/date-time-picker/definition.js +1 -1
  39. package/dialog/definition.cjs +2 -2
  40. package/dialog/definition.js +2 -2
  41. package/dialog/index.cjs +7 -7
  42. package/dialog/index.js +6 -6
  43. package/elevation/definition.cjs +1 -1
  44. package/elevation/definition.js +1 -1
  45. package/fab/definition.js +1 -1
  46. package/header/definition.cjs +1 -1
  47. package/header/definition.js +1 -1
  48. package/index.cjs +3 -4
  49. package/index.js +2 -3
  50. package/lib/accordion/accordion.d.ts +1 -1
  51. package/lib/accordion/definition.d.ts +1 -1
  52. package/lib/audio-player/audio-player.d.ts +1 -1
  53. package/lib/combobox/combobox.d.ts +1 -0
  54. package/lib/combobox/combobox.options.d.ts +1 -1
  55. package/lib/divider/divider.d.ts +1 -1
  56. package/lib/menu-item/menu-item-role.d.ts +1 -1
  57. package/lib/popup/popup.d.ts +1 -1
  58. package/lib/searchable-select/locale.d.ts +4 -0
  59. package/lib/searchable-select/searchable-select.d.ts +3 -0
  60. package/lib/select/select.d.ts +3 -1
  61. package/lib/slider/slider.d.ts +1 -1
  62. package/lib/tabs/tabs.d.ts +2 -2
  63. package/lib/text-area/text-area.d.ts +1 -1
  64. package/lib/text-field/text-field.d.ts +1 -1
  65. package/locales/de-DE.cjs +4 -0
  66. package/locales/de-DE.js +4 -0
  67. package/locales/en-GB.cjs +4 -0
  68. package/locales/en-GB.js +4 -0
  69. package/locales/en-US.cjs +4 -0
  70. package/locales/en-US.js +4 -0
  71. package/locales/ja-JP.cjs +4 -0
  72. package/locales/ja-JP.js +4 -0
  73. package/locales/zh-CN.cjs +4 -0
  74. package/locales/zh-CN.js +4 -0
  75. package/menu/definition.cjs +4 -4
  76. package/menu/definition.js +4 -4
  77. package/nav-disclosure/definition.js +1 -1
  78. package/nav-item/definition.js +1 -1
  79. package/note/definition.js +1 -1
  80. package/number-field/definition.js +1 -1
  81. package/option/definition.cjs +6 -77
  82. package/option/definition.js +3 -78
  83. package/package.json +31 -5
  84. package/popup/definition.cjs +2 -2
  85. package/popup/definition.js +2 -2
  86. package/range-slider/definition.cjs +1 -1
  87. package/range-slider/definition.js +1 -1
  88. package/rich-text-editor/definition.cjs +2 -3
  89. package/rich-text-editor/definition.js +1 -2
  90. package/rich-text-editor/index.cjs +27 -27
  91. package/rich-text-editor/index.js +1208 -1198
  92. package/searchable-select/definition.cjs +103 -11
  93. package/searchable-select/definition.js +103 -11
  94. package/searchable-select/index.cjs +81 -69
  95. package/searchable-select/index.js +359 -273
  96. package/select/definition.cjs +24 -41
  97. package/select/definition.js +24 -41
  98. package/selectable-box/definition.cjs +1 -1
  99. package/selectable-box/definition.js +1 -1
  100. package/selectable-box/index.cjs +1 -1
  101. package/selectable-box/index.js +1 -1
  102. package/shared/aria/aria-mixin.d.ts +1 -1
  103. package/shared/foundation/listbox/listbox.d.ts +4 -0
  104. package/simple-color-picker/definition.cjs +1 -1
  105. package/simple-color-picker/definition.js +1 -1
  106. package/slider/definition.cjs +1 -1
  107. package/slider/definition.js +1 -1
  108. package/split-button/definition.js +1 -1
  109. package/styles/core/all.css +1 -1
  110. package/styles/core/theme.css +1 -1
  111. package/styles/core/typography.css +1 -1
  112. package/styles/tokens/theme-dark.css +4 -4
  113. package/styles/tokens/theme-light.css +4 -4
  114. package/styles/tokens/vivid-2-compat.css +1 -1
  115. package/tab/definition.js +1 -1
  116. package/tag/definition.js +1 -1
  117. package/text-field/definition.js +1 -1
  118. package/time-picker/definition.cjs +1 -1
  119. package/time-picker/definition.js +1 -1
  120. package/toggletip/definition.cjs +1 -1
  121. package/toggletip/definition.js +1 -1
  122. package/tooltip/definition.cjs +1 -1
  123. package/tooltip/definition.js +1 -1
  124. package/tree-item/definition.cjs +1 -1
  125. package/tree-item/definition.js +1 -1
  126. package/tree-view/definition.cjs +1 -1
  127. package/tree-view/definition.js +1 -1
  128. package/unbundled/affix.js +1 -1
  129. package/unbundled/calendar-picker.template.cjs +1 -1
  130. package/unbundled/calendar-picker.template.js +1 -1
  131. package/unbundled/definition.js +1 -1
  132. package/unbundled/definition2.js +1 -1
  133. package/unbundled/definition3.cjs +222 -141
  134. package/unbundled/definition3.js +220 -139
  135. package/unbundled/definition4.cjs +145 -235
  136. package/unbundled/definition4.js +143 -233
  137. package/unbundled/definition5.cjs +269 -27
  138. package/unbundled/definition5.js +267 -26
  139. package/unbundled/definition6.cjs +56 -0
  140. package/unbundled/definition6.js +52 -0
  141. package/unbundled/listbox.cjs +41 -63
  142. package/unbundled/listbox.js +39 -61
  143. package/unbundled/picker-field.template.cjs +1 -1
  144. package/unbundled/picker-field.template.js +1 -1
  145. package/unbundled/slider.template.cjs +1 -1
  146. package/unbundled/slider.template.js +1 -1
  147. package/unbundled/vivid-element.cjs +1 -1
  148. package/unbundled/vivid-element.js +1 -1
  149. package/video-player/definition.cjs +56 -16
  150. package/video-player/definition.js +56 -16
  151. package/video-player/index.cjs +36 -36
  152. package/video-player/index.js +2461 -2445
  153. package/vivid.api.json +285 -38
  154. package/bundled/option.cjs +0 -1
  155. package/bundled/option.js +0 -158
  156. package/unbundled/option.cjs +0 -217
  157. package/unbundled/option.js +0 -214
@@ -1,9 +1,11 @@
1
- import { B as Button, b as buttonDefinition } from './definition.js';
2
- import { E as Elevation, e as elevationDefinition } from './definition5.js';
1
+ import { VwcIconElement as Icon, iconDefinition } from '../icon/definition.js';
3
2
  import { V as VividElement, d as defineVividComponent, c as createRegisterFunction } from './vivid-element.js';
4
- import { attr, nullableNumberConverter, observable, ref, when, html } from '@microsoft/fast-element';
5
- import { inline, autoPlacement, flip, hide, size, arrow, offset, autoUpdate, computePosition } from '@floating-ui/dom';
6
- import { classNames } from '@microsoft/fast-web-utilities';
3
+ import { isHTMLElement, classNames } from '@microsoft/fast-web-utilities';
4
+ import { attr, observable, children, when, elements, slotted, html, ref } from '@microsoft/fast-element';
5
+ import { A as AffixIcon, a as affixIconTemplateFactory, I as IconWrapper } from './affix.js';
6
+ import { H as HostSemantics, a as applyHostSemantics } from './host-semantics.js';
7
+
8
+ const styles = ":host(:focus-visible){outline:none}:host([disabled]){cursor:not-allowed}.control{--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: transparent;--_appearance-color-outline: transparent}.control:disabled{--_appearance-color-text: var(--vvd-color-neutral-300);--_appearance-color-fill: transparent;--_appearance-color-outline: transparent}.control.disabled{--_appearance-color-text: var(--vvd-color-neutral-300);--_appearance-color-fill: transparent;--_appearance-color-outline: transparent}@media (hover: hover){.control:hover:where(:not(.disabled,:disabled,.readonly)){--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: var(--_connotation-color-faint);--_appearance-color-outline: transparent}}.control.hover:where(:not(.disabled,:disabled,.readonly)){--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: var(--_connotation-color-faint);--_appearance-color-outline: transparent}.control:active:where(:not(.disabled,:disabled)){--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: var(--_connotation-color-soft);--_appearance-color-outline: transparent}.control.active:where(:not(.disabled,:disabled)){--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: var(--_connotation-color-soft);--_appearance-color-outline: transparent}.control.selected:where(:not(.disabled,:disabled)){--_appearance-color-text: var(--_connotation-color-primary-text);--_appearance-color-fill: var(--_connotation-color-primary);--_appearance-color-outline: transparent}@media (hover: hover){.control.selected:hover:where(:not(.disabled,:disabled,.readonly)){--_appearance-color-text: var(--_connotation-color-primary-text);--_appearance-color-fill: var(--_connotation-color-primary-increment);--_appearance-color-outline: transparent}}.control.selected.hover:where(:not(.disabled,:disabled,.readonly)){--_appearance-color-text: var(--_connotation-color-primary-text);--_appearance-color-fill: var(--_connotation-color-primary-increment);--_appearance-color-outline: transparent}.control{--_connotation-color-primary: var(--vvd-tree-item-accent-primary, var(--vvd-color-canvas-text));--_connotation-color-primary-text: var(--vvd-tree-item-accent-primary-text, var(--vvd-color-canvas));--_connotation-color-primary-increment: var(--vvd-tree-item-accent-primary-increment, var(--vvd-color-neutral-800));--_connotation-color-faint: var(--vvd-tree-item-accent-faint, var(--vvd-color-neutral-50));--_connotation-color-soft: var(--vvd-tree-item-accent-soft, var(--vvd-color-neutral-100));--_connotation-color-firm: var(--vvd-tree-item-accent-firm, var(--vvd-color-canvas-text))}.control{position:relative;display:inline-flex;box-sizing:border-box;align-items:center;border-radius:8px;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:12px;hyphens:auto;inline-size:100%;min-block-size:calc(1px*(40 + 4*clamp(-1,var(--vvd-size-density, 0),2)));padding-inline:16px;text-decoration:none;vertical-align:middle;word-break:break-word}@supports (user-select: none){.control{user-select:none}}.control:not(.disabled){cursor:pointer}.control.disabled{pointer-events:none}:host(:focus-visible) .control{box-shadow:0 0 0 4px color-mix(in srgb,var(--vvd-color-cta-500),transparent 85%),inset 0 0 0 3px var(--focus-stroke-gap-color, currentColor);outline:1px solid var(--focus-stroke-color, var(--vvd-color-cta-500));outline-offset:calc(-1px - var(--focus-inset, 0px))}:host(:focus-visible) .control:not(.selected){--focus-stroke-gap-color: transparent}.control .text{font:var(--vvd-typography-base)}.expandCollapseButton{display:flex;align-items:center;border-radius:8px;font-size:20px}.expandCollapseButton .expandCollapseIcon{margin:4px}@media (hover: hover){.expandCollapseButton:hover{background-color:var(--vvd-color-neutral-100)}.selected .expandCollapseButton:hover{background-color:var(--vvd-color-neutral-700)}}.items{display:flex;flex-direction:column;gap:4px;margin-block-start:4px;padding-inline-start:48px}slot[name=icon]{font-size:20px;line-height:1}.control:not(.disabled,.selected) slot[name=icon]{color:var(--vvd-color-neutral-600)}";
7
9
 
8
10
  var __defProp = Object.defineProperty;
9
11
  var __decorateClass = (decorators, target, key, kind) => {
@@ -14,280 +16,188 @@ var __decorateClass = (decorators, target, key, kind) => {
14
16
  if (result) __defProp(target, key, result);
15
17
  return result;
16
18
  };
17
- const PlacementStrategy = {
18
- Flip: "flip",
19
- AutoPlacementHorizontal: "auto-placement-horizontal",
20
- AutoPlacementVertical: "auto-placement-vertical"
21
- };
22
- const placementStrategyMiddlewares = {
23
- [PlacementStrategy.Flip]: flip(),
24
- [PlacementStrategy.AutoPlacementHorizontal]: autoPlacement({
25
- allowedPlacements: [
26
- "bottom",
27
- "top",
28
- "bottom-start",
29
- "bottom-end",
30
- "top-start",
31
- "top-end"
32
- ]
33
- }),
34
- [PlacementStrategy.AutoPlacementVertical]: autoPlacement({
35
- allowedPlacements: [
36
- "left",
37
- "right",
38
- "left-start",
39
- "left-end",
40
- "right-start",
41
- "right-end"
42
- ]
43
- })
44
- };
45
- class Popup extends VividElement {
19
+ function isTreeItemElement(el) {
20
+ return isHTMLElement(el) && (el.getAttribute("role") === "treeitem" || el instanceof TreeItem);
21
+ }
22
+ class TreeItem extends HostSemantics(AffixIcon(VividElement)) {
46
23
  constructor() {
47
24
  super(...arguments);
48
- this.open = false;
49
- this.dismissible = false;
50
- this.arrow = false;
51
- this.alternate = false;
25
+ this.expanded = false;
26
+ this.selected = false;
27
+ this.disabled = false;
28
+ this.focusable = false;
52
29
  /**
53
- * The placement strategy of the popup.
30
+ * Whether the tree is nested
54
31
  *
55
32
  * @public
56
33
  */
57
- this.placementStrategy = PlacementStrategy.Flip;
58
- this.animationFrame = false;
59
- this.strategy = "fixed";
60
- this.offset = null;
61
- this.#autoUpdateCallback = () => {
62
- this.#lastPositionUpdate = this.updatePosition();
63
- return this.#lastPositionUpdate;
34
+ this.isNestedItem = () => {
35
+ return isTreeItemElement(this.parentElement);
36
+ };
37
+ /**
38
+ * Handle expand button click
39
+ *
40
+ * @internal
41
+ */
42
+ this.handleExpandCollapseButtonClick = (e) => {
43
+ if (!this.disabled && !e.defaultPrevented) {
44
+ this.expanded = !this.expanded;
45
+ }
46
+ };
47
+ /**
48
+ * Handle focus events
49
+ *
50
+ * @internal
51
+ */
52
+ this.handleFocus = (_e) => {
53
+ this.setAttribute("tabindex", "0");
54
+ };
55
+ /**
56
+ * Handle blur events
57
+ *
58
+ * @internal
59
+ */
60
+ this.handleBlur = (_e) => {
61
+ this.setAttribute("tabindex", "-1");
64
62
  };
65
63
  }
66
- get #middleware() {
67
- let middleware = [
68
- inline(),
69
- placementStrategyMiddlewares[this.placementStrategy],
70
- hide(),
71
- size({
72
- apply({ availableWidth, availableHeight, elements }) {
73
- Object.assign(elements.floating.style, {
74
- maxWidth: `${availableWidth}px`,
75
- maxHeight: `${availableHeight}px`
76
- });
77
- }
78
- })
79
- ];
80
- let offsetValue = this.offset ?? 0;
81
- if (this.arrow) {
82
- offsetValue += 12;
83
- middleware = [
84
- ...middleware,
85
- arrow({ element: this.arrowEl, padding: 10 })
86
- ];
64
+ expandedChanged() {
65
+ if (this.$fastController.isConnected) {
66
+ this.$emit("expanded-change", this);
87
67
  }
88
- if (offsetValue > 0) {
89
- middleware.unshift(offset(offsetValue));
90
- }
91
- return middleware;
92
- }
93
- #cleanup;
94
- openChanged(_, newValue) {
95
- this.#togglePopover();
96
- this.#updateAutoUpdate();
97
- this.$emit(newValue ? "vwc-popup:open" : "vwc-popup:close");
98
- }
99
- /**
100
- * @internal
101
- */
102
- animationFrameChanged() {
103
- this.#updateAutoUpdate();
104
- }
105
- /**
106
- * @internal
107
- */
108
- anchorChanged() {
109
- this.#updateAutoUpdate();
110
- }
111
- /**
112
- * @internal
113
- */
114
- strategyChanged() {
115
- this.#togglePopover();
116
68
  }
117
- connectedCallback() {
118
- super.connectedCallback();
119
- this.#togglePopover();
120
- this.#updateAutoUpdate();
121
- }
122
- disconnectedCallback() {
123
- super.disconnectedCallback();
124
- this.#updateAutoUpdate();
125
- }
126
- #updateAutoUpdate() {
127
- this.#cleanup?.();
128
- if (this.open && this.controlEl) {
129
- this.controlEl.classList.add("open");
130
- }
131
- if (this.anchorEl && this.open && this.popupEl) {
132
- this.#cleanup = autoUpdate(
133
- this.anchorEl,
134
- this.popupEl,
135
- this.#autoUpdateCallback,
136
- {
137
- animationFrame: this.animationFrame
138
- }
139
- );
69
+ selectedChanged() {
70
+ if (this.$fastController.isConnected) {
71
+ this.$emit("selected-change", this);
140
72
  }
141
73
  }
142
- #togglePopover() {
143
- if (this.popupEl && this.strategy === "fixed") {
144
- if (this.open) {
145
- this.popupEl.showPopover();
146
- } else {
147
- this.popupEl.hidePopover();
148
- }
74
+ itemsChanged() {
75
+ if (this.$fastController.isConnected) {
76
+ this.items.forEach((node) => {
77
+ if (isTreeItemElement(node)) {
78
+ node.nested = true;
79
+ }
80
+ });
149
81
  }
150
82
  }
151
- #lastPositionUpdate;
152
- #autoUpdateCallback;
153
83
  /**
154
- * Updates popup's position
84
+ * Places document focus on a tree item
155
85
  *
156
86
  * @public
87
+ * @param el - the element to focus
157
88
  */
158
- async updatePosition() {
159
- if (!this.open || !this.anchorEl) {
160
- return;
161
- }
162
- const positionData = await computePosition(this.anchorEl, this.popupEl, {
163
- placement: this.placement,
164
- strategy: this.strategy,
165
- middleware: this.#middleware
166
- });
167
- this.#assignPopupPosition(positionData);
168
- if (this.arrow) {
169
- this.#assignArrowPosition(positionData);
170
- }
171
- }
172
- #assignPopupPosition(data) {
173
- const { x: popupX, y: popupY } = data;
174
- const { referenceHidden } = data.middlewareData.hide;
175
- Object.assign(this.popupEl.style, {
176
- left: `${popupX}px`,
177
- top: `${popupY}px`,
178
- visibility: referenceHidden ? "hidden" : "visible"
179
- });
180
- }
181
- #assignArrowPosition(data) {
182
- const { x: arrowX, y: arrowY } = data.middlewareData.arrow;
183
- const styles = {
184
- left: "calc(100% - 4px)",
185
- right: "-4px",
186
- top: "calc(100% - 4px)",
187
- bottom: "-4px"
188
- };
189
- const staticAxis = data.placement.split("-")[0];
190
- Object.assign(this.arrowEl.style, {
191
- left: arrowX ? `${arrowX}px` : styles[staticAxis],
192
- top: arrowY ? `${arrowY}px` : styles[staticAxis]
193
- });
194
- }
195
- get anchorEl() {
196
- return this.anchor ?? null;
89
+ static focusItem(el) {
90
+ el.focusable = true;
91
+ el.focus();
197
92
  }
198
93
  /**
199
- * Shows the popup.
200
- * Unlike toggling the `open` attribute, show() will wait for the popup to become visible and positioned correctly.
94
+ * Gets number of children
95
+ *
96
+ * @internal
201
97
  */
202
- show() {
203
- this.open = true;
204
- return this.#lastPositionUpdate ?? Promise.resolve();
205
- }
206
- hide() {
207
- this.open = false;
98
+ childItemLength() {
99
+ const treeChildren = this.childItems.filter(
100
+ (item) => {
101
+ return isTreeItemElement(item);
102
+ }
103
+ );
104
+ return treeChildren.length;
208
105
  }
209
106
  }
210
107
  __decorateClass([
211
- attr({
212
- mode: "boolean"
213
- })
214
- ], Popup.prototype, "open");
108
+ attr
109
+ ], TreeItem.prototype, "text");
215
110
  __decorateClass([
216
- attr({
217
- mode: "boolean"
218
- })
219
- ], Popup.prototype, "dismissible");
111
+ attr({ mode: "boolean" })
112
+ ], TreeItem.prototype, "expanded");
220
113
  __decorateClass([
221
114
  attr({
222
115
  mode: "boolean"
223
116
  })
224
- ], Popup.prototype, "arrow");
117
+ ], TreeItem.prototype, "selected");
225
118
  __decorateClass([
226
- attr({
227
- mode: "boolean"
228
- })
229
- ], Popup.prototype, "alternate");
119
+ attr({ mode: "boolean" })
120
+ ], TreeItem.prototype, "disabled");
230
121
  __decorateClass([
231
- attr({ mode: "fromView" })
232
- ], Popup.prototype, "placement");
122
+ observable
123
+ ], TreeItem.prototype, "focusable");
124
+ // @ts-expect-error Type is incorrectly non-optional
233
125
  __decorateClass([
234
- attr({ mode: "boolean", attribute: "animation-frame" })
235
- ], Popup.prototype, "animationFrame");
126
+ observable
127
+ ], TreeItem.prototype, "childItems");
236
128
  __decorateClass([
237
- attr({ mode: "fromView" })
238
- ], Popup.prototype, "strategy");
129
+ observable
130
+ ], TreeItem.prototype, "items");
131
+ // @ts-expect-error Type is incorrectly non-optional
239
132
  __decorateClass([
240
- attr({ attribute: "offset", converter: nullableNumberConverter })
241
- ], Popup.prototype, "offset");
133
+ observable
134
+ ], TreeItem.prototype, "nested");
135
+ // @ts-expect-error Type is incorrectly non-optional
242
136
  __decorateClass([
243
137
  observable
244
- ], Popup.prototype, "anchor");
245
-
246
- const styles = ":host{display:var(--_popup-display, inline)}.control{border-radius:inherit;background:var(--vvd-color-surface-4dp);contain:layout}.control:not(.open){display:none}.popup-wrapper{white-space:initial;--scrollbar-track-color: transparent;--scrollbar-thumb-color: color-mix(in srgb, var(--vvd-color-neutral-950), transparent 70%)}.popup-wrapper{scrollbar-color:var(--scrollbar-thumb-color) var(--scrollbar-track-color);scrollbar-width:thin}.popup-wrapper ::-webkit-scrollbar{width:4px}.popup-wrapper ::-webkit-scrollbar-track{background:var(--scrollbar-track-color)}.popup-wrapper ::-webkit-scrollbar-thumb{border:0;border-radius:4px;background-color:var(--scrollbar-fallback-track-color, var(--scrollbar-thumb-color))}.popup-wrapper{z-index:var(--_popup-z-index, 10);overflow:visible;padding:0;border:none;border-radius:8px;margin:0;inline-size:max-content}.popup-wrapper:not(.absolute){position:fixed}.popup-wrapper.absolute{position:absolute;top:0;left:0}.popup-content{display:grid;color:var(--vvd-color-canvas-text)}.dismissible .popup-content{align-content:start;grid-template-columns:1fr auto}.arrow{position:absolute;z-index:-1;width:8px;height:8px;background:var(--vvd-color-surface-4dp);transform:rotate(45deg)}.dismissible-button{align-self:flex-start;margin-block-start:4px;margin-inline-end:4px}";
138
+ ], TreeItem.prototype, "renderCollapsedChildren");
247
139
 
248
- const getClasses = ({ open, dismissible, alternate }) => classNames(
140
+ const getClasses = ({ disabled, selected }) => classNames(
249
141
  "control",
250
- ["open", Boolean(open)],
251
- ["dismissible", Boolean(dismissible)],
252
- ["alternate", Boolean(alternate)]
142
+ ["disabled", disabled],
143
+ ["selected", Boolean(selected)]
253
144
  );
254
- function handlePopover(x) {
255
- return x.strategy && x.strategy === "fixed" ? "manual" : null;
256
- }
257
- const popupTemplate = (context) => {
258
- const elevationTag = context.tagFor(Elevation);
259
- const buttonTag = context.tagFor(Button);
145
+ const expandCollapseButton = (context) => {
146
+ const iconTag = context.tagFor(Icon);
260
147
  return html`
261
- <${elevationTag}>
262
- <div popover="${handlePopover}" class="popup-wrapper ${(x) => x.strategy}" ${ref("popupEl")} part="popup-base">
263
- <div ${ref("controlEl")} class="${getClasses}" aria-hidden="${(x) => x.open ? "false" : "true"}"
264
- part="${(x) => x.alternate ? "vvd-theme-alternate" : ""}">
265
- <div class="popup-content">
266
- <slot></slot>
267
- ${when(
268
- (x) => x.dismissible,
269
- html`<${buttonTag} size="condensed" @click="${(x) => x.open = false}"
270
- class="dismissible-button" icon="close-small-solid" shape="pill"></${buttonTag}>`
148
+ <div aria-hidden="true"
149
+ class="expandCollapseButton"
150
+ @click="${(x, c) => x.handleExpandCollapseButtonClick(c.event)}"
151
+ ${ref("expandCollapseButton")}
152
+ >
153
+ <${iconTag} class="expandCollapseIcon" name="${(x) => x.expanded ? "chevron-down-line" : "chevron-right-line"}"></${iconTag}>
154
+ </div>`;
155
+ };
156
+ const TreeItemTemplate = (context) => {
157
+ const affixIconTemplate = affixIconTemplateFactory(context);
158
+ const treeItemTagName = context.tagFor(TreeItem, true);
159
+ return html` <template
160
+ slot="${(x) => x.isNestedItem() ? "item" : void 0}"
161
+ tabindex="-1"
162
+ ${applyHostSemantics({
163
+ role: "treeitem",
164
+ ariaExpanded: (x) => x.childItems && x.childItems.length > 0 ? x.expanded : void 0,
165
+ ariaSelected: (x) => x.selected,
166
+ ariaDisabled: (x) => x.disabled
167
+ })}
168
+ @focusin="${(x, c) => x.handleFocus(c.event)}"
169
+ @focusout="${(x, c) => x.handleBlur(c.event)}"
170
+ ${children({
171
+ property: "childItems",
172
+ filter: elements(treeItemTagName)
173
+ })}
174
+ >
175
+ <div class="${getClasses}">
176
+ ${when(
177
+ (x) => x.childItems && x.childItems.length > 0,
178
+ expandCollapseButton(context)
271
179
  )}
272
- </div>
273
- ${when(
274
- (x) => x.arrow,
275
- html`<div class="arrow" ${ref("arrowEl")}></div>`
180
+ ${(x) => affixIconTemplate(x.icon, IconWrapper.Slot)}
181
+ ${(x) => x.text}
182
+ </div>
183
+ ${when(
184
+ (x) => x.childItems && x.childItems.length > 0 && x.expanded,
185
+ html` <div role="group" class="items">
186
+ <slot name="item" ${slotted("items")}></slot>
187
+ </div>`
276
188
  )}
277
- </div>
278
- </div>
279
- </${elevationTag}>`;
189
+ </template>`;
280
190
  };
281
191
 
282
- const popupDefinition = defineVividComponent(
283
- "popup",
284
- Popup,
285
- popupTemplate,
286
- [elevationDefinition, buttonDefinition],
192
+ const treeItemDefinition = defineVividComponent(
193
+ "tree-item",
194
+ TreeItem,
195
+ TreeItemTemplate,
196
+ [iconDefinition],
287
197
  {
288
198
  styles
289
199
  }
290
200
  );
291
- const registerPopup = createRegisterFunction(popupDefinition);
201
+ const registerTreeItem = createRegisterFunction(treeItemDefinition);
292
202
 
293
- export { Popup as P, PlacementStrategy as a, popupDefinition as p, registerPopup as r };
203
+ export { TreeItem as T, isTreeItemElement as i, registerTreeItem as r, treeItemDefinition as t };