@vonage/vivid 3.0.0-next.13 → 3.0.0-next.130

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 (296) hide show
  1. package/README.md +160 -33
  2. package/accordion/index.js +4 -60
  3. package/accordion-item/index.js +14 -118
  4. package/action-group/index.js +5 -0
  5. package/avatar/index.js +11 -0
  6. package/badge/index.js +9 -53
  7. package/banner/index.js +20 -218
  8. package/breadcrumb/index.js +7 -96
  9. package/breadcrumb-item/index.js +15 -46
  10. package/button/index.js +19 -763
  11. package/calendar/index.js +5 -1520
  12. package/calendar-event/index.js +9 -0
  13. package/card/index.js +10 -133
  14. package/checkbox/index.js +16 -0
  15. package/combobox/index.js +33 -0
  16. package/custom-elements.json +5570 -0
  17. package/dialog/index.js +24 -0
  18. package/divider/index.js +6 -0
  19. package/elevation/index.js +4 -30
  20. package/fab/index.js +22 -0
  21. package/focus/index.js +4 -2
  22. package/header/index.js +6 -0
  23. package/icon/index.js +8 -36
  24. package/index.js +70 -26
  25. package/layout/index.js +4 -52
  26. package/lib/accordion/definition.d.ts +1 -0
  27. package/lib/accordion/index.d.ts +1 -2
  28. package/lib/accordion-item/definition.d.ts +1 -0
  29. package/lib/accordion-item/index.d.ts +1 -3
  30. package/lib/action-group/action-group.d.ts +10 -0
  31. package/lib/{sidenav-item/sidenav-item.template.d.ts → action-group/action-group.template.d.ts} +2 -2
  32. package/lib/action-group/definition.d.ts +1 -0
  33. package/lib/action-group/index.d.ts +1 -0
  34. package/lib/avatar/avatar.d.ts +15 -0
  35. package/lib/avatar/avatar.template.d.ts +4 -0
  36. package/lib/avatar/definition.d.ts +1 -0
  37. package/lib/avatar/index.d.ts +1 -0
  38. package/lib/badge/badge.d.ts +2 -4
  39. package/lib/badge/definition.d.ts +3 -0
  40. package/lib/badge/index.d.ts +1 -3
  41. package/lib/banner/banner.d.ts +1 -1
  42. package/lib/banner/banner.template.d.ts +0 -2
  43. package/lib/banner/definition.d.ts +1 -0
  44. package/lib/banner/index.d.ts +1 -2
  45. package/lib/breadcrumb/breadcrumb.template.d.ts +4 -0
  46. package/lib/breadcrumb/definition.d.ts +1 -0
  47. package/lib/breadcrumb/index.d.ts +1 -2
  48. package/lib/breadcrumb-item/definition.d.ts +1 -0
  49. package/lib/breadcrumb-item/index.d.ts +1 -3
  50. package/lib/button/button.d.ts +3 -3
  51. package/lib/button/definition.d.ts +1 -0
  52. package/lib/button/index.d.ts +1 -21
  53. package/lib/calendar/calendar.d.ts +3 -1
  54. package/lib/calendar/definition.d.ts +1 -0
  55. package/lib/calendar/index.d.ts +1 -3
  56. package/lib/calendar-event/calendar-event.d.ts +14 -0
  57. package/lib/calendar-event/calendar-event.template.d.ts +4 -0
  58. package/lib/calendar-event/definition.d.ts +1 -0
  59. package/lib/calendar-event/index.d.ts +1 -0
  60. package/lib/card/card.d.ts +2 -2
  61. package/lib/card/definition.d.ts +1 -0
  62. package/lib/card/index.d.ts +1 -5
  63. package/lib/checkbox/checkbox.d.ts +5 -0
  64. package/lib/checkbox/checkbox.template.d.ts +4 -0
  65. package/lib/checkbox/definition.d.ts +1 -0
  66. package/lib/checkbox/index.d.ts +1 -0
  67. package/lib/combobox/combobox.d.ts +14 -0
  68. package/lib/combobox/combobox.template.d.ts +4 -0
  69. package/lib/combobox/definition.d.ts +3 -0
  70. package/lib/combobox/index.d.ts +1 -0
  71. package/lib/components.d.ts +40 -16
  72. package/lib/dialog/definition.d.ts +1 -0
  73. package/lib/dialog/dialog.d.ts +23 -0
  74. package/lib/dialog/dialog.template.d.ts +4 -0
  75. package/lib/dialog/index.d.ts +1 -0
  76. package/lib/divider/definition.d.ts +1 -0
  77. package/lib/divider/divider.d.ts +3 -0
  78. package/lib/divider/divider.template.d.ts +4 -0
  79. package/lib/divider/index.d.ts +1 -0
  80. package/lib/elevation/definition.d.ts +1 -0
  81. package/lib/elevation/elevation.d.ts +1 -0
  82. package/lib/elevation/index.d.ts +1 -2
  83. package/lib/enums.d.ts +14 -6
  84. package/lib/fab/definition.d.ts +3 -0
  85. package/lib/fab/fab.d.ts +13 -0
  86. package/lib/fab/fab.template.d.ts +4 -0
  87. package/lib/fab/index.d.ts +1 -0
  88. package/lib/focus/definition.d.ts +3 -0
  89. package/lib/focus/index.d.ts +1 -2
  90. package/lib/{sidenav-item/index.d.ts → header/definition.d.ts} +2 -2
  91. package/lib/header/header.d.ts +5 -0
  92. package/lib/header/header.template.d.ts +4 -0
  93. package/lib/header/index.d.ts +1 -0
  94. package/lib/icon/definition.d.ts +3 -0
  95. package/lib/icon/icon.d.ts +5 -7
  96. package/lib/icon/index.d.ts +1 -2
  97. package/lib/layout/definition.d.ts +3 -0
  98. package/lib/layout/index.d.ts +1 -2
  99. package/lib/layout/layout.d.ts +4 -4
  100. package/lib/listbox/definition.d.ts +3 -0
  101. package/lib/listbox/index.d.ts +1 -0
  102. package/lib/listbox/listbox.d.ts +6 -0
  103. package/lib/listbox/listbox.template.d.ts +4 -0
  104. package/lib/menu/definition.d.ts +11 -0
  105. package/lib/menu/index.d.ts +1 -0
  106. package/lib/menu/menu.d.ts +10 -0
  107. package/lib/menu/menu.template.d.ts +3 -0
  108. package/lib/menu-item/definition.d.ts +3 -0
  109. package/lib/menu-item/index.d.ts +1 -0
  110. package/lib/menu-item/menu-item.d.ts +7 -0
  111. package/lib/menu-item/menu-item.template.d.ts +5 -0
  112. package/lib/nav/definition.d.ts +3 -0
  113. package/lib/nav/index.d.ts +1 -0
  114. package/lib/nav/nav.d.ts +3 -0
  115. package/lib/nav/nav.template.d.ts +4 -0
  116. package/lib/nav-disclosure/definition.d.ts +3 -0
  117. package/lib/nav-disclosure/index.d.ts +1 -0
  118. package/lib/nav-disclosure/nav-disclosure.d.ts +10 -0
  119. package/lib/nav-disclosure/nav-disclosure.template.d.ts +4 -0
  120. package/lib/nav-item/definition.d.ts +3 -0
  121. package/lib/nav-item/index.d.ts +1 -0
  122. package/lib/{sidenav-item/sidenav-item.d.ts → nav-item/nav-item.d.ts} +2 -2
  123. package/lib/nav-item/nav-item.template.d.ts +4 -0
  124. package/lib/note/definition.d.ts +3 -0
  125. package/lib/note/index.d.ts +1 -0
  126. package/lib/note/note.d.ts +10 -0
  127. package/lib/{text/text.template.d.ts → note/note.template.d.ts} +2 -2
  128. package/lib/number-field/definition.d.ts +4 -0
  129. package/lib/number-field/index.d.ts +1 -0
  130. package/lib/number-field/number-field.d.ts +14 -0
  131. package/lib/number-field/number-field.template.d.ts +4 -0
  132. package/lib/option/definition.d.ts +3 -0
  133. package/lib/option/index.d.ts +1 -0
  134. package/lib/option/option.d.ts +9 -0
  135. package/lib/option/option.template.d.ts +4 -0
  136. package/lib/popup/definition.d.ts +4 -0
  137. package/lib/popup/index.d.ts +1 -4
  138. package/lib/popup/popup.d.ts +8 -4
  139. package/lib/progress/definition.d.ts +3 -0
  140. package/lib/progress/index.d.ts +1 -2
  141. package/lib/progress/progress.d.ts +1 -1
  142. package/lib/progress-ring/definition.d.ts +3 -0
  143. package/lib/progress-ring/index.d.ts +1 -2
  144. package/lib/progress-ring/progress-ring.d.ts +2 -1
  145. package/lib/radio/definition.d.ts +3 -0
  146. package/lib/radio/index.d.ts +1 -0
  147. package/lib/radio/radio.d.ts +4 -0
  148. package/lib/radio/radio.template.d.ts +4 -0
  149. package/lib/radio-group/definition.d.ts +11 -0
  150. package/lib/radio-group/index.d.ts +1 -0
  151. package/lib/radio-group/radio-group.d.ts +4 -0
  152. package/lib/radio-group/radio-group.template.d.ts +4 -0
  153. package/lib/side-drawer/definition.d.ts +3 -0
  154. package/lib/side-drawer/index.d.ts +1 -2
  155. package/lib/side-drawer/side-drawer.d.ts +3 -2
  156. package/lib/slider/definition.d.ts +3 -0
  157. package/lib/slider/index.d.ts +1 -0
  158. package/lib/slider/slider.d.ts +4 -0
  159. package/lib/slider/slider.template.d.ts +4 -0
  160. package/lib/switch/definition.d.ts +3 -0
  161. package/lib/switch/index.d.ts +1 -0
  162. package/lib/switch/switch.d.ts +7 -0
  163. package/lib/switch/switch.template.d.ts +4 -0
  164. package/lib/text-anchor/definition.d.ts +3 -0
  165. package/lib/text-anchor/index.d.ts +1 -2
  166. package/lib/text-area/definition.d.ts +3 -0
  167. package/lib/text-area/index.d.ts +1 -0
  168. package/lib/text-area/text-area.d.ts +9 -0
  169. package/lib/text-area/text-area.template.d.ts +4 -0
  170. package/lib/text-field/definition.d.ts +3 -0
  171. package/lib/text-field/index.d.ts +1 -0
  172. package/lib/text-field/text-field.d.ts +14 -0
  173. package/lib/text-field/text-field.template.d.ts +4 -0
  174. package/lib/tooltip/definition.d.ts +3 -0
  175. package/lib/tooltip/index.d.ts +1 -3
  176. package/lib/tooltip/tooltip.d.ts +6 -6
  177. package/listbox/index.js +25 -0
  178. package/menu/index.js +30 -0
  179. package/menu-item/index.js +20 -0
  180. package/nav/index.js +4 -0
  181. package/nav-disclosure/index.js +17 -0
  182. package/nav-item/index.js +22 -0
  183. package/note/index.js +15 -0
  184. package/number-field/index.js +459 -0
  185. package/option/index.js +20 -0
  186. package/package.json +22 -11
  187. package/popup/index.js +21 -2062
  188. package/progress/index.js +6 -98
  189. package/progress-ring/index.js +6 -75
  190. package/radio/index.js +12 -0
  191. package/radio-group/index.js +11 -0
  192. package/shared/affix.js +2 -8
  193. package/shared/anchor.js +11 -3
  194. package/shared/apply-mixins.js +5 -4
  195. package/shared/aria-global.js +2 -86
  196. package/shared/aria.js +9 -0
  197. package/shared/base-progress.js +6 -1
  198. package/shared/breadcrumb-item.js +2 -2
  199. package/shared/button.js +200 -0
  200. package/shared/calendar-event.js +19 -0
  201. package/shared/definition.js +53 -0
  202. package/shared/definition10.js +99 -0
  203. package/shared/definition11.js +48 -0
  204. package/shared/definition12.js +1523 -0
  205. package/shared/definition13.js +111 -0
  206. package/shared/definition14.js +114 -0
  207. package/shared/definition15.js +32 -0
  208. package/shared/definition16.js +172 -0
  209. package/shared/definition17.js +734 -0
  210. package/shared/definition18.js +1644 -0
  211. package/shared/definition19.js +261 -0
  212. package/shared/definition2.js +106 -0
  213. package/shared/definition20.js +223 -0
  214. package/shared/definition21.js +78 -0
  215. package/shared/definition22.js +87 -0
  216. package/shared/definition23.js +58 -0
  217. package/shared/definition24.js +44 -0
  218. package/shared/definition25.js +58 -0
  219. package/shared/definition26.js +348 -0
  220. package/shared/definition27.js +351 -0
  221. package/shared/definition28.js +21 -0
  222. package/shared/definition29.js +75 -0
  223. package/shared/definition3.js +29 -0
  224. package/shared/definition30.js +31 -0
  225. package/shared/definition31.js +56 -0
  226. package/shared/definition32.js +94 -0
  227. package/shared/definition33.js +77 -0
  228. package/shared/definition34.js +45 -0
  229. package/shared/definition35.js +435 -0
  230. package/shared/definition36.js +86 -0
  231. package/shared/definition37.js +592 -0
  232. package/shared/definition38.js +147 -0
  233. package/shared/definition39.js +280 -0
  234. package/shared/definition4.js +19 -0
  235. package/shared/definition40.js +119 -0
  236. package/shared/definition41.js +77 -0
  237. package/shared/definition5.js +38 -0
  238. package/shared/definition6.js +60 -0
  239. package/shared/definition7.js +45 -0
  240. package/shared/definition8.js +113 -0
  241. package/shared/definition9.js +107 -0
  242. package/shared/design-system/index.d.ts +1 -1
  243. package/shared/dialog-polyfill.esm.js +858 -0
  244. package/shared/direction.js +20 -0
  245. package/shared/dom.js +8 -0
  246. package/shared/enums.js +70 -0
  247. package/shared/es.object.assign.js +2 -3
  248. package/shared/es.regexp.to-string.js +59 -0
  249. package/shared/focus.js +5 -0
  250. package/shared/focus2.js +11 -0
  251. package/shared/form-associated.js +466 -0
  252. package/shared/form-elements.js +121 -0
  253. package/shared/icon.js +538 -567
  254. package/shared/index.js +1664 -83
  255. package/shared/key-codes.js +97 -0
  256. package/shared/listbox.js +1002 -0
  257. package/shared/numbers.js +25 -0
  258. package/shared/patterns/affix.d.ts +1 -1
  259. package/shared/patterns/focus.d.ts +3 -0
  260. package/shared/patterns/form-elements/form-elements.d.ts +31 -0
  261. package/shared/patterns/form-elements/index.d.ts +1 -0
  262. package/shared/patterns/index.d.ts +2 -0
  263. package/shared/radio.js +127 -0
  264. package/shared/ref.js +41 -0
  265. package/shared/slotted.js +1 -1
  266. package/shared/start-end.js +50 -0
  267. package/shared/string-trim.js +40 -0
  268. package/shared/text-anchor.js +0 -2
  269. package/shared/text-anchor.template.js +6 -5
  270. package/shared/text-field.js +3 -0
  271. package/shared/text-field2.js +225 -0
  272. package/shared/to-string.js +51 -0
  273. package/side-drawer/index.js +5 -81
  274. package/slider/index.js +17 -0
  275. package/styles/core/all.css +83 -0
  276. package/styles/core/theme.css +11 -0
  277. package/styles/core/typography.css +77 -0
  278. package/styles/tokens/theme-dark.css +228 -0
  279. package/styles/tokens/theme-light.css +228 -0
  280. package/switch/index.js +17 -0
  281. package/text-anchor/index.js +11 -6
  282. package/text-area/index.js +23 -0
  283. package/text-field/index.js +24 -0
  284. package/tooltip/index.js +18 -55
  285. package/vivid.api.json +3275 -0
  286. package/lib/text/index.d.ts +0 -2
  287. package/lib/text/text.d.ts +0 -10
  288. package/shared/index2.js +0 -21
  289. package/shared/object-set-prototype-of.js +0 -1009
  290. package/shared/style-inject.es.js +0 -28
  291. package/shared/web.dom-collections.iterator.js +0 -473
  292. package/sidenav-item/index.js +0 -39
  293. package/styles/fonts/spezia.css +0 -23
  294. package/styles/themes/dark.css +0 -205
  295. package/styles/themes/light.css +0 -205
  296. package/text/index.js +0 -46
@@ -0,0 +1,734 @@
1
+ import { U as DOM, V as Observable, _ as __decorate, a as attr, N as observable, b as __metadata, h as html, r as registerFactory } from './index.js';
2
+ import { i as iconRegistries } from './definition3.js';
3
+ import { P as Popup, p as popupRegistries } from './definition18.js';
4
+ import { f as focusRegistries } from './definition4.js';
5
+ import { l as listboxOptionRegistries } from './definition19.js';
6
+ import { c as css_248z$1 } from './text-field.js';
7
+ import { b as AffixIcon, a as affixIconTemplateFactory } from './affix.js';
8
+ import './focus.js';
9
+ import { f as formElements } from './form-elements.js';
10
+ import { L as Listbox, u as uniqueId, D as DelegatesARIAListbox, a as Listbox$1 } from './listbox.js';
11
+ import { S as StartEnd } from './start-end.js';
12
+ import { a as applyMixins } from './apply-mixins.js';
13
+ import { F as FormAssociated } from './form-associated.js';
14
+ import { l as limit } from './numbers.js';
15
+ import { f as focusTemplateFactory } from './focus2.js';
16
+ import { s as slotted } from './slotted.js';
17
+ import { r as ref } from './ref.js';
18
+ import { w as when } from './when.js';
19
+ import { c as classNames } from './class-names.js';
20
+
21
+ /**
22
+ * Positioning directions for the listbox when a select is open.
23
+ * @public
24
+ */
25
+ const SelectPosition = {
26
+ above: "above",
27
+ below: "below",
28
+ };
29
+
30
+ class _Combobox extends Listbox {
31
+ }
32
+ /**
33
+ * A form-associated base class for the {@link (Combobox:class)} component.
34
+ *
35
+ * @internal
36
+ */
37
+ class FormAssociatedCombobox extends FormAssociated(_Combobox) {
38
+ constructor() {
39
+ super(...arguments);
40
+ this.proxy = document.createElement("input");
41
+ }
42
+ }
43
+
44
+ /**
45
+ * Autocomplete values for combobox.
46
+ * @public
47
+ */
48
+ const ComboboxAutocomplete = {
49
+ inline: "inline",
50
+ list: "list",
51
+ both: "both",
52
+ none: "none",
53
+ };
54
+
55
+ /**
56
+ * A Combobox Custom HTML Element.
57
+ * Implements the {@link https://w3c.github.io/aria-practices/#combobox | ARIA combobox }.
58
+ *
59
+ * @slot start - Content which can be provided before the input
60
+ * @slot end - Content which can be provided after the input
61
+ * @slot control - Used to replace the input element representing the combobox
62
+ * @slot indicator - The visual indicator representing the expanded state
63
+ * @slot - The default slot for the options
64
+ * @csspart control - The wrapper element containing the input area, including start and end
65
+ * @csspart selected-value - The input element representing the selected value
66
+ * @csspart indicator - The element wrapping the indicator slot
67
+ * @csspart listbox - The wrapper for the listbox slotted options
68
+ * @fires change - Fires a custom 'change' event when the value updates
69
+ *
70
+ * @public
71
+ */
72
+ class Combobox$1 extends FormAssociatedCombobox {
73
+ constructor() {
74
+ super(...arguments);
75
+ /**
76
+ * The internal value property.
77
+ *
78
+ * @internal
79
+ */
80
+ this._value = "";
81
+ /**
82
+ * The collection of currently filtered options.
83
+ *
84
+ * @public
85
+ */
86
+ this.filteredOptions = [];
87
+ /**
88
+ * The current filter value.
89
+ *
90
+ * @internal
91
+ */
92
+ this.filter = "";
93
+ /**
94
+ * The initial state of the position attribute.
95
+ *
96
+ * @internal
97
+ */
98
+ this.forcedPosition = false;
99
+ /**
100
+ * The unique id for the internal listbox element.
101
+ *
102
+ * @internal
103
+ */
104
+ this.listboxId = uniqueId("listbox-");
105
+ /**
106
+ * The max height for the listbox when opened.
107
+ *
108
+ * @internal
109
+ */
110
+ this.maxHeight = 0;
111
+ /**
112
+ * The open attribute.
113
+ *
114
+ * @public
115
+ * @remarks
116
+ * HTML Attribute: open
117
+ */
118
+ this.open = false;
119
+ }
120
+ /**
121
+ * Reset the element to its first selectable option when its parent form is reset.
122
+ *
123
+ * @internal
124
+ */
125
+ formResetCallback() {
126
+ super.formResetCallback();
127
+ this.setDefaultSelectedOption();
128
+ this.updateValue();
129
+ }
130
+ /** {@inheritDoc (FormAssociated:interface).validate} */
131
+ validate() {
132
+ super.validate(this.control);
133
+ }
134
+ get isAutocompleteInline() {
135
+ return (this.autocomplete === ComboboxAutocomplete.inline || this.isAutocompleteBoth);
136
+ }
137
+ get isAutocompleteList() {
138
+ return this.autocomplete === ComboboxAutocomplete.list || this.isAutocompleteBoth;
139
+ }
140
+ get isAutocompleteBoth() {
141
+ return this.autocomplete === ComboboxAutocomplete.both;
142
+ }
143
+ /**
144
+ * Sets focus and synchronize ARIA attributes when the open property changes.
145
+ *
146
+ * @param prev - the previous open value
147
+ * @param next - the current open value
148
+ *
149
+ * @internal
150
+ */
151
+ openChanged() {
152
+ if (this.open) {
153
+ this.ariaControls = this.listboxId;
154
+ this.ariaExpanded = "true";
155
+ this.setPositioning();
156
+ this.focusAndScrollOptionIntoView();
157
+ // focus is directed to the element when `open` is changed programmatically
158
+ DOM.queueUpdate(() => this.focus());
159
+ return;
160
+ }
161
+ this.ariaControls = "";
162
+ this.ariaExpanded = "false";
163
+ }
164
+ /**
165
+ * The list of options.
166
+ *
167
+ * @public
168
+ * @remarks
169
+ * Overrides `Listbox.options`.
170
+ */
171
+ get options() {
172
+ Observable.track(this, "options");
173
+ return this.filteredOptions.length ? this.filteredOptions : this._options;
174
+ }
175
+ set options(value) {
176
+ this._options = value;
177
+ Observable.notify(this, "options");
178
+ }
179
+ /**
180
+ * Updates the placeholder on the proxy element.
181
+ * @internal
182
+ */
183
+ placeholderChanged() {
184
+ if (this.proxy instanceof HTMLInputElement) {
185
+ this.proxy.placeholder = this.placeholder;
186
+ }
187
+ }
188
+ positionChanged(prev, next) {
189
+ this.positionAttribute = next;
190
+ this.setPositioning();
191
+ }
192
+ /**
193
+ * The value property.
194
+ *
195
+ * @public
196
+ */
197
+ get value() {
198
+ Observable.track(this, "value");
199
+ return this._value;
200
+ }
201
+ set value(next) {
202
+ var _a, _b, _c;
203
+ const prev = `${this._value}`;
204
+ if (this.$fastController.isConnected && this.options) {
205
+ const selectedIndex = this.options.findIndex(el => el.text.toLowerCase() === next.toLowerCase());
206
+ const prevSelectedValue = (_a = this.options[this.selectedIndex]) === null || _a === void 0 ? void 0 : _a.text;
207
+ const nextSelectedValue = (_b = this.options[selectedIndex]) === null || _b === void 0 ? void 0 : _b.text;
208
+ this.selectedIndex =
209
+ prevSelectedValue !== nextSelectedValue
210
+ ? selectedIndex
211
+ : this.selectedIndex;
212
+ next = ((_c = this.firstSelectedOption) === null || _c === void 0 ? void 0 : _c.text) || next;
213
+ }
214
+ if (prev !== next) {
215
+ this._value = next;
216
+ super.valueChanged(prev, next);
217
+ Observable.notify(this, "value");
218
+ }
219
+ }
220
+ /**
221
+ * Handle opening and closing the listbox when the combobox is clicked.
222
+ *
223
+ * @param e - the mouse event
224
+ * @internal
225
+ */
226
+ clickHandler(e) {
227
+ if (this.disabled) {
228
+ return;
229
+ }
230
+ if (this.open) {
231
+ const captured = e.target.closest(`option,[role=option]`);
232
+ if (!captured || captured.disabled) {
233
+ return;
234
+ }
235
+ this.selectedOptions = [captured];
236
+ this.control.value = captured.text;
237
+ this.clearSelectionRange();
238
+ this.updateValue(true);
239
+ }
240
+ this.open = !this.open;
241
+ if (this.open) {
242
+ this.control.focus();
243
+ }
244
+ return true;
245
+ }
246
+ connectedCallback() {
247
+ super.connectedCallback();
248
+ this.forcedPosition = !!this.positionAttribute;
249
+ if (this.value) {
250
+ this.initialValue = this.value;
251
+ }
252
+ }
253
+ /**
254
+ * Synchronize the `aria-disabled` property when the `disabled` property changes.
255
+ *
256
+ * @param prev - The previous disabled value
257
+ * @param next - The next disabled value
258
+ *
259
+ * @internal
260
+ */
261
+ disabledChanged(prev, next) {
262
+ if (super.disabledChanged) {
263
+ super.disabledChanged(prev, next);
264
+ }
265
+ this.ariaDisabled = this.disabled ? "true" : "false";
266
+ }
267
+ /**
268
+ * Filter available options by text value.
269
+ *
270
+ * @public
271
+ */
272
+ filterOptions() {
273
+ if (!this.autocomplete || this.autocomplete === ComboboxAutocomplete.none) {
274
+ this.filter = "";
275
+ }
276
+ const filter = this.filter.toLowerCase();
277
+ this.filteredOptions = this._options.filter(o => o.text.toLowerCase().startsWith(this.filter.toLowerCase()));
278
+ if (this.isAutocompleteList) {
279
+ if (!this.filteredOptions.length && !filter) {
280
+ this.filteredOptions = this._options;
281
+ }
282
+ this._options.forEach(o => {
283
+ o.hidden = !this.filteredOptions.includes(o);
284
+ });
285
+ }
286
+ }
287
+ /**
288
+ * Focus the control and scroll the first selected option into view.
289
+ *
290
+ * @internal
291
+ * @remarks
292
+ * Overrides: `Listbox.focusAndScrollOptionIntoView`
293
+ */
294
+ focusAndScrollOptionIntoView() {
295
+ if (this.contains(document.activeElement)) {
296
+ this.control.focus();
297
+ if (this.firstSelectedOption) {
298
+ requestAnimationFrame(() => {
299
+ var _a;
300
+ (_a = this.firstSelectedOption) === null || _a === void 0 ? void 0 : _a.scrollIntoView({ block: "nearest" });
301
+ });
302
+ }
303
+ }
304
+ }
305
+ /**
306
+ * Handle focus state when the element or its children lose focus.
307
+ *
308
+ * @param e - The focus event
309
+ * @internal
310
+ */
311
+ focusoutHandler(e) {
312
+ this.syncValue();
313
+ if (!this.open) {
314
+ return true;
315
+ }
316
+ const focusTarget = e.relatedTarget;
317
+ if (this.isSameNode(focusTarget)) {
318
+ this.focus();
319
+ return;
320
+ }
321
+ if (!this.options || !this.options.includes(focusTarget)) {
322
+ this.open = false;
323
+ }
324
+ }
325
+ /**
326
+ * Handle content changes on the control input.
327
+ *
328
+ * @param e - the input event
329
+ * @internal
330
+ */
331
+ inputHandler(e) {
332
+ this.filter = this.control.value;
333
+ this.filterOptions();
334
+ if (!this.isAutocompleteInline) {
335
+ this.selectedIndex = this.options
336
+ .map(option => option.text)
337
+ .indexOf(this.control.value);
338
+ }
339
+ if (e.inputType.includes("deleteContent") || !this.filter.length) {
340
+ return true;
341
+ }
342
+ if (this.isAutocompleteList && !this.open) {
343
+ this.open = true;
344
+ }
345
+ if (this.isAutocompleteInline) {
346
+ if (this.filteredOptions.length) {
347
+ this.selectedOptions = [this.filteredOptions[0]];
348
+ this.selectedIndex = this.options.indexOf(this.firstSelectedOption);
349
+ this.setInlineSelection();
350
+ }
351
+ else {
352
+ this.selectedIndex = -1;
353
+ }
354
+ }
355
+ return;
356
+ }
357
+ /**
358
+ * Handle keydown actions for listbox navigation.
359
+ *
360
+ * @param e - the keyboard event
361
+ * @internal
362
+ */
363
+ keydownHandler(e) {
364
+ const key = e.key;
365
+ if (e.ctrlKey || e.shiftKey) {
366
+ return true;
367
+ }
368
+ switch (key) {
369
+ case "Enter": {
370
+ this.syncValue();
371
+ if (this.isAutocompleteInline) {
372
+ this.filter = this.value;
373
+ }
374
+ this.open = false;
375
+ this.clearSelectionRange();
376
+ break;
377
+ }
378
+ case "Escape": {
379
+ if (!this.isAutocompleteInline) {
380
+ this.selectedIndex = -1;
381
+ }
382
+ if (this.open) {
383
+ this.open = false;
384
+ break;
385
+ }
386
+ this.value = "";
387
+ this.control.value = "";
388
+ this.filter = "";
389
+ this.filterOptions();
390
+ break;
391
+ }
392
+ case "Tab": {
393
+ this.setInputToSelection();
394
+ if (!this.open) {
395
+ return true;
396
+ }
397
+ e.preventDefault();
398
+ this.open = false;
399
+ break;
400
+ }
401
+ case "ArrowUp":
402
+ case "ArrowDown": {
403
+ this.filterOptions();
404
+ if (!this.open) {
405
+ this.open = true;
406
+ break;
407
+ }
408
+ if (this.filteredOptions.length > 0) {
409
+ super.keydownHandler(e);
410
+ }
411
+ if (this.isAutocompleteInline) {
412
+ this.setInlineSelection();
413
+ }
414
+ break;
415
+ }
416
+ default: {
417
+ return true;
418
+ }
419
+ }
420
+ }
421
+ /**
422
+ * Handle keyup actions for value input and text field manipulations.
423
+ *
424
+ * @param e - the keyboard event
425
+ * @internal
426
+ */
427
+ keyupHandler(e) {
428
+ const key = e.key;
429
+ switch (key) {
430
+ case "ArrowLeft":
431
+ case "ArrowRight":
432
+ case "Backspace":
433
+ case "Delete":
434
+ case "Home":
435
+ case "End": {
436
+ this.filter = this.control.value;
437
+ this.selectedIndex = -1;
438
+ this.filterOptions();
439
+ break;
440
+ }
441
+ }
442
+ }
443
+ /**
444
+ * Ensure that the selectedIndex is within the current allowable filtered range.
445
+ *
446
+ * @param prev - the previous selected index value
447
+ * @param next - the current selected index value
448
+ *
449
+ * @internal
450
+ */
451
+ selectedIndexChanged(prev, next) {
452
+ if (this.$fastController.isConnected) {
453
+ next = limit(-1, this.options.length - 1, next);
454
+ // we only want to call the super method when the selectedIndex is in range
455
+ if (next !== this.selectedIndex) {
456
+ this.selectedIndex = next;
457
+ return;
458
+ }
459
+ super.selectedIndexChanged(prev, next);
460
+ }
461
+ }
462
+ /**
463
+ * Move focus to the previous selectable option.
464
+ *
465
+ * @internal
466
+ * @remarks
467
+ * Overrides `Listbox.selectPreviousOption`
468
+ */
469
+ selectPreviousOption() {
470
+ if (!this.disabled && this.selectedIndex >= 0) {
471
+ this.selectedIndex = this.selectedIndex - 1;
472
+ }
473
+ }
474
+ /**
475
+ * Set the default selected options at initialization or reset.
476
+ *
477
+ * @internal
478
+ * @remarks
479
+ * Overrides `Listbox.setDefaultSelectedOption`
480
+ */
481
+ setDefaultSelectedOption() {
482
+ if (this.$fastController.isConnected && this.options) {
483
+ const selectedIndex = this.options.findIndex(el => el.getAttribute("selected") !== null || el.selected);
484
+ this.selectedIndex = selectedIndex;
485
+ if (!this.dirtyValue && this.firstSelectedOption) {
486
+ this.value = this.firstSelectedOption.text;
487
+ }
488
+ this.setSelectedOptions();
489
+ }
490
+ }
491
+ /**
492
+ * Focus and set the content of the control based on the first selected option.
493
+ *
494
+ * @internal
495
+ */
496
+ setInputToSelection() {
497
+ if (this.firstSelectedOption) {
498
+ this.control.value = this.firstSelectedOption.text;
499
+ this.control.focus();
500
+ }
501
+ }
502
+ /**
503
+ * Focus, set and select the content of the control based on the first selected option.
504
+ *
505
+ * @internal
506
+ */
507
+ setInlineSelection() {
508
+ if (this.firstSelectedOption) {
509
+ this.setInputToSelection();
510
+ this.control.setSelectionRange(this.filter.length, this.control.value.length, "backward");
511
+ }
512
+ }
513
+ /**
514
+ * Determines if a value update should involve emitting a change event, then updates the value.
515
+ *
516
+ * @internal
517
+ */
518
+ syncValue() {
519
+ var _a;
520
+ const newValue = this.selectedIndex > -1 ? (_a = this.firstSelectedOption) === null || _a === void 0 ? void 0 : _a.text : this.control.value;
521
+ this.updateValue(this.value !== newValue);
522
+ }
523
+ /**
524
+ * Calculate and apply listbox positioning based on available viewport space.
525
+ *
526
+ * @param force - direction to force the listbox to display
527
+ * @public
528
+ */
529
+ setPositioning() {
530
+ const currentBox = this.getBoundingClientRect();
531
+ const viewportHeight = window.innerHeight;
532
+ const availableBottom = viewportHeight - currentBox.bottom;
533
+ this.position = this.forcedPosition
534
+ ? this.positionAttribute
535
+ : currentBox.top > availableBottom
536
+ ? SelectPosition.above
537
+ : SelectPosition.below;
538
+ this.positionAttribute = this.forcedPosition
539
+ ? this.positionAttribute
540
+ : this.position;
541
+ this.maxHeight =
542
+ this.position === SelectPosition.above ? ~~currentBox.top : ~~availableBottom;
543
+ }
544
+ /**
545
+ * Ensure that the entire list of options is used when setting the selected property.
546
+ *
547
+ * @param prev - the previous list of selected options
548
+ * @param next - the current list of selected options
549
+ *
550
+ * @internal
551
+ * @remarks
552
+ * Overrides: `Listbox.selectedOptionsChanged`
553
+ */
554
+ selectedOptionsChanged(prev, next) {
555
+ if (this.$fastController.isConnected) {
556
+ this._options.forEach(o => {
557
+ o.selected = next.includes(o);
558
+ });
559
+ }
560
+ }
561
+ /**
562
+ * Synchronize the form-associated proxy and update the value property of the element.
563
+ *
564
+ * @param prev - the previous collection of slotted option elements
565
+ * @param next - the next collection of slotted option elements
566
+ *
567
+ * @internal
568
+ */
569
+ slottedOptionsChanged(prev, next) {
570
+ super.slottedOptionsChanged(prev, next);
571
+ this.updateValue();
572
+ }
573
+ /**
574
+ * Sets the value and to match the first selected option.
575
+ *
576
+ * @param shouldEmit - if true, the change event will be emitted
577
+ *
578
+ * @internal
579
+ */
580
+ updateValue(shouldEmit) {
581
+ var _a;
582
+ if (this.$fastController.isConnected) {
583
+ this.value = ((_a = this.firstSelectedOption) === null || _a === void 0 ? void 0 : _a.text) || this.control.value;
584
+ this.control.value = this.value;
585
+ }
586
+ if (shouldEmit) {
587
+ this.$emit("change");
588
+ }
589
+ }
590
+ /**
591
+ * @internal
592
+ */
593
+ clearSelectionRange() {
594
+ const controlValueLength = this.control.value.length;
595
+ this.control.setSelectionRange(controlValueLength, controlValueLength);
596
+ }
597
+ }
598
+ __decorate([
599
+ attr({ attribute: "autocomplete", mode: "fromView" })
600
+ ], Combobox$1.prototype, "autocomplete", void 0);
601
+ __decorate([
602
+ observable
603
+ ], Combobox$1.prototype, "maxHeight", void 0);
604
+ __decorate([
605
+ attr({ attribute: "open", mode: "boolean" })
606
+ ], Combobox$1.prototype, "open", void 0);
607
+ __decorate([
608
+ attr
609
+ ], Combobox$1.prototype, "placeholder", void 0);
610
+ __decorate([
611
+ attr({ attribute: "position" })
612
+ ], Combobox$1.prototype, "positionAttribute", void 0);
613
+ __decorate([
614
+ observable
615
+ ], Combobox$1.prototype, "position", void 0);
616
+ /**
617
+ * Includes ARIA states and properties relating to the ARIA combobox role.
618
+ *
619
+ * @public
620
+ */
621
+ class DelegatesARIACombobox {
622
+ }
623
+ __decorate([
624
+ observable
625
+ ], DelegatesARIACombobox.prototype, "ariaAutoComplete", void 0);
626
+ __decorate([
627
+ observable
628
+ ], DelegatesARIACombobox.prototype, "ariaControls", void 0);
629
+ applyMixins(DelegatesARIACombobox, DelegatesARIAListbox);
630
+ applyMixins(Combobox$1, StartEnd, DelegatesARIACombobox);
631
+
632
+ var css_248z = "/**\n * Do not edit directly\n * Generated on Thu, 05 Jan 2023 11:33:10 GMT\n */\n:host {\n position: relative;\n}\n\n.control {\n display: flex;\n padding-inline-end: 44px;\n}\n\n.icon {\n inset-inline-end: 16px;\n inset-inline-start: unset;\n}\n:not(.disabled) .icon {\n cursor: pointer;\n}\n.disabled .icon {\n cursor: not-allowed;\n}\n\n.listbox {\n padding: 4px;\n background-color: var(--_appearance-color-fill);\n border-radius: 6px;\n box-shadow: inset 0 0 0 1px var(--_appearance-color-outline);\n contain: paint;\n}\n.listbox {\n --_connotation-color-backdrop: var(--vvd-color-canvas);\n --_connotation-color-intermediate: var(--vvd-color-neutral-500);\n --_connotation-color-primary: var(--vvd-color-canvas-text);\n --_connotation-color-soft: var(--vvd-color-neutral-100);\n}\n.listbox {\n --_appearance-color-text: var(--vvd-color-canvas-text);\n --_appearance-color-fill: var(--_connotation-color-backdrop);\n --_appearance-color-outline: var(--_connotation-color-intermediate);\n}\n.listbox.appearance-ghost {\n --_appearance-color-text: var(--_connotation-color-primary);\n --_appearance-color-fill: transparent;\n --_appearance-color-outline: transparent;\n}\n.listbox:where(:disabled, .disabled) {\n --_appearance-color-text: var(--vvd-color-neutral-400);\n --_appearance-color-fill: var(--vvd-color-neutral-200);\n --_appearance-color-outline: var(--vvd-color-neutral-400);\n}\n.listbox:where(:disabled, .disabled).appearance-ghost {\n --_appearance-color-text: var(--vvd-color-neutral-400);\n --_appearance-color-fill: transparent;\n --_appearance-color-outline: transparent;\n}\n\n.popup {\n --_popup-width: 100%;\n}";
633
+
634
+ let Combobox = class Combobox extends Combobox$1 {
635
+ connectedCallback() {
636
+ super.connectedCallback();
637
+ this._popup.anchor = this._anchor;
638
+ }
639
+ };
640
+ __decorate([attr, __metadata("design:type", String)], Combobox.prototype, "placement", void 0);
641
+ Combobox = __decorate([formElements], Combobox);
642
+ applyMixins(Combobox, AffixIcon);
643
+
644
+ let _ = t => t,
645
+ _t,
646
+ _t2,
647
+ _t3;
648
+ function renderLabel() {
649
+ return html(_t || (_t = _`
650
+ <label for="control" class="label">
651
+ ${0}
652
+ </label>`), x => x.label);
653
+ }
654
+ const getStateClasses = ({
655
+ disabled,
656
+ placeholder,
657
+ label
658
+ }) => classNames('base', ['disabled', disabled], ['placeholder', Boolean(placeholder)], ['no-label', !label]);
659
+ function renderInput(context) {
660
+ const affixIconTemplate = affixIconTemplateFactory(context);
661
+ const focusTemplate = focusTemplateFactory(context);
662
+ return html(_t2 || (_t2 = _`
663
+ <div class="${0}" ${0}>
664
+ ${0}
665
+ <div class="fieldset">
666
+ <input
667
+ id="control"
668
+ class="control"
669
+ aria-activedescendant="${0}"
670
+ aria-autocomplete="${0}"
671
+ aria-controls="${0}"
672
+ aria-disabled="${0}"
673
+ aria-expanded="${0}"
674
+ aria-haspopup="listbox"
675
+ placeholder="${0}"
676
+ role="combobox"
677
+ type="text"
678
+ ?disabled="${0}"
679
+ :value="${0}"
680
+ @input="${0}"
681
+ @keyup="${0}"
682
+ ${0}
683
+ />
684
+ ${0}
685
+ ${0}
686
+ </div>
687
+ </div>`), getStateClasses, ref('_anchor'), when(x => x.label, renderLabel()), x => x.open ? x.ariaActiveDescendant : null, x => x.ariaAutoComplete, x => x.ariaControls, x => x.ariaDisabled, x => x.ariaExpanded, x => x.placeholder, x => x.disabled, x => x.value, (x, c) => x.inputHandler(c.event), (x, c) => x.keyupHandler(c.event), ref('control'), () => affixIconTemplate('chevron-down-line'), () => focusTemplate);
688
+ }
689
+ const comboboxTemplate = context => {
690
+ const popupTag = context.tagFor(Popup);
691
+ return html(_t3 || (_t3 = _`
692
+ <template
693
+ aria-disabled="${0}"
694
+ autocomplete="${0}"
695
+ tabindex="${0}"
696
+ @click="${0}"
697
+ @focusout="${0}"
698
+ @keydown="${0}"
699
+ >
700
+ ${0}
701
+ <${0} class="popup"
702
+ ?open="${0}"
703
+ placement="${0}"
704
+ strategy="absolute"
705
+ ${0}>
706
+ <div id="${0}"
707
+ class="listbox"
708
+ role="listbox"
709
+ ?disabled="${0}"
710
+ ${0}>
711
+ <slot ${0}>
712
+ </slot>
713
+ </div>
714
+ </${0}>
715
+ </template>
716
+ `), x => x.ariaDisabled, x => x.autocomplete, x => !x.disabled ? '0' : null, (x, c) => x.clickHandler(c.event), (x, c) => x.focusoutHandler(c.event), (x, c) => x.keydownHandler(c.event), () => renderInput(context), popupTag, x => x.open, x => x.placement, ref('_popup'), x => x.listboxId, x => x.disabled, ref('listbox'), slotted({
717
+ filter: Listbox$1.slottedOptionFilter,
718
+ flatten: true,
719
+ property: 'slottedOptions'
720
+ }), popupTag);
721
+ };
722
+
723
+ const combobox = Combobox.compose({
724
+ baseName: 'combobox',
725
+ template: comboboxTemplate,
726
+ styles: [css_248z$1, css_248z],
727
+ shadowOptions: {
728
+ delegatesFocus: true
729
+ }
730
+ })();
731
+ const comboboxRegistries = [combobox, ...iconRegistries, ...popupRegistries, ...focusRegistries, ...listboxOptionRegistries];
732
+ const registerCombobox = registerFactory(comboboxRegistries);
733
+
734
+ export { comboboxRegistries as a, combobox as c, registerCombobox as r };