@vonage/vivid 3.52.0 → 3.53.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 (289) hide show
  1. package/README.md +1 -1
  2. package/accordion/index.cjs +1 -1
  3. package/accordion/index.js +1 -1
  4. package/accordion-item/index.cjs +1 -1
  5. package/accordion-item/index.js +1 -1
  6. package/alert/index.cjs +3 -3
  7. package/alert/index.js +3 -3
  8. package/audio-player/index.cjs +3 -3
  9. package/audio-player/index.js +3 -3
  10. package/avatar/index.cjs +1 -1
  11. package/avatar/index.js +1 -1
  12. package/badge/index.cjs +1 -1
  13. package/badge/index.js +1 -1
  14. package/banner/index.cjs +2 -2
  15. package/banner/index.js +2 -2
  16. package/breadcrumb-item/index.cjs +1 -1
  17. package/breadcrumb-item/index.js +1 -1
  18. package/button/index.cjs +2 -2
  19. package/button/index.js +2 -2
  20. package/card/index.cjs +2 -2
  21. package/card/index.js +2 -2
  22. package/checkbox/index.cjs +3 -2
  23. package/checkbox/index.js +3 -2
  24. package/combobox/index.cjs +5 -5
  25. package/combobox/index.js +5 -5
  26. package/custom-elements.json +717 -4
  27. package/data-grid/index.cjs +1 -1
  28. package/data-grid/index.js +1 -1
  29. package/date-picker/index.cjs +7 -6
  30. package/date-picker/index.js +7 -6
  31. package/date-range-picker/index.cjs +7 -6
  32. package/date-range-picker/index.js +7 -6
  33. package/dial-pad/index.cjs +33 -0
  34. package/dial-pad/index.js +31 -0
  35. package/dialog/index.cjs +4 -4
  36. package/dialog/index.js +4 -4
  37. package/divider/index.cjs +1 -1
  38. package/divider/index.js +1 -1
  39. package/elevation/index.cjs +1 -1
  40. package/elevation/index.js +1 -1
  41. package/empty-state/index.cjs +2 -2
  42. package/empty-state/index.js +2 -2
  43. package/fab/index.cjs +2 -2
  44. package/fab/index.js +2 -2
  45. package/file-picker/index.cjs +4 -3
  46. package/file-picker/index.js +4 -3
  47. package/header/index.cjs +2 -2
  48. package/header/index.js +2 -2
  49. package/icon/index.cjs +1 -1
  50. package/icon/index.js +1 -1
  51. package/index.cjs +132 -122
  52. package/index.js +46 -43
  53. package/layout/index.cjs +1 -1
  54. package/layout/index.js +1 -1
  55. package/lib/components.d.ts +2 -0
  56. package/lib/dial-pad/definition.d.ts +3 -0
  57. package/lib/dial-pad/dial-pad.d.ts +14 -0
  58. package/lib/dial-pad/dial-pad.template.d.ts +4 -0
  59. package/lib/dial-pad/locale.d.ts +18 -0
  60. package/lib/enums.d.ts +6 -0
  61. package/lib/text-anchor/definition.d.ts +1 -0
  62. package/lib/text-anchor/text-anchor.d.ts +5 -0
  63. package/lib/video-player/definition.d.ts +3 -0
  64. package/lib/video-player/locale.d.ts +1 -0
  65. package/lib/video-player/video-player.d.ts +17 -0
  66. package/lib/video-player/video-player.template.d.ts +4 -0
  67. package/listbox/index.cjs +2 -2
  68. package/listbox/index.js +2 -2
  69. package/locales/en-GB.cjs +30 -0
  70. package/locales/en-GB.js +30 -0
  71. package/locales/en-US.cjs +198 -0
  72. package/locales/en-US.js +198 -0
  73. package/locales/ja-JP.cjs +197 -0
  74. package/locales/ja-JP.js +197 -0
  75. package/locales/zh-CN.cjs +199 -0
  76. package/locales/zh-CN.js +199 -0
  77. package/menu/index.cjs +6 -6
  78. package/menu/index.js +6 -6
  79. package/menu-item/index.cjs +2 -2
  80. package/menu-item/index.js +2 -2
  81. package/nav/index.cjs +1 -1
  82. package/nav/index.js +1 -1
  83. package/nav-disclosure/index.cjs +2 -2
  84. package/nav-disclosure/index.js +2 -2
  85. package/nav-item/index.cjs +2 -2
  86. package/nav-item/index.js +2 -2
  87. package/note/index.cjs +2 -2
  88. package/note/index.js +2 -2
  89. package/number-field/index.cjs +5 -4
  90. package/number-field/index.js +5 -4
  91. package/option/index.cjs +2 -2
  92. package/option/index.js +2 -2
  93. package/package.json +1 -1
  94. package/pagination/index.cjs +3 -3
  95. package/pagination/index.js +3 -3
  96. package/popup/index.cjs +4 -4
  97. package/popup/index.js +4 -4
  98. package/progress/index.cjs +1 -1
  99. package/progress/index.js +1 -1
  100. package/progress-ring/index.cjs +1 -1
  101. package/progress-ring/index.js +1 -1
  102. package/radio/index.cjs +1 -1
  103. package/radio/index.js +1 -1
  104. package/radio-group/index.cjs +1 -1
  105. package/radio-group/index.js +1 -1
  106. package/range-slider/index.cjs +2 -2
  107. package/range-slider/index.js +2 -2
  108. package/select/index.cjs +7 -6
  109. package/select/index.js +7 -6
  110. package/selectable-box/index.cjs +5 -4
  111. package/selectable-box/index.js +5 -4
  112. package/shared/applyMixinsWithObservables.cjs +15 -0
  113. package/shared/applyMixinsWithObservables.js +13 -0
  114. package/shared/definition.cjs +1 -1
  115. package/shared/definition.js +1 -1
  116. package/shared/definition11.cjs +3 -3
  117. package/shared/definition11.js +3 -3
  118. package/shared/definition14.cjs +2 -2
  119. package/shared/definition14.js +2 -2
  120. package/shared/definition15.cjs +8 -9
  121. package/shared/definition15.js +8 -9
  122. package/shared/definition16.cjs +3 -3
  123. package/shared/definition16.js +3 -3
  124. package/shared/definition17.cjs +2 -2
  125. package/shared/definition17.js +3 -3
  126. package/shared/definition18.cjs +3 -3
  127. package/shared/definition18.js +3 -3
  128. package/shared/definition19.cjs +3 -3
  129. package/shared/definition19.js +3 -3
  130. package/shared/definition20.cjs +186 -227
  131. package/shared/definition20.js +181 -222
  132. package/shared/definition21.cjs +264 -67
  133. package/shared/definition21.js +263 -65
  134. package/shared/definition22.cjs +66 -57
  135. package/shared/definition22.js +64 -56
  136. package/shared/definition23.cjs +42 -76
  137. package/shared/definition23.js +41 -75
  138. package/shared/definition24.cjs +70 -2402
  139. package/shared/definition24.js +69 -2401
  140. package/shared/definition25.cjs +2402 -46
  141. package/shared/definition25.js +2401 -45
  142. package/shared/definition26.cjs +63 -30
  143. package/shared/definition26.js +62 -29
  144. package/shared/definition27.cjs +28 -56
  145. package/shared/definition27.js +27 -55
  146. package/shared/definition28.cjs +35 -881
  147. package/shared/definition28.js +34 -879
  148. package/shared/definition29.cjs +893 -60
  149. package/shared/definition29.js +893 -61
  150. package/shared/definition30.cjs +68 -86
  151. package/shared/definition30.js +67 -85
  152. package/shared/definition31.cjs +86 -21
  153. package/shared/definition31.js +86 -21
  154. package/shared/definition32.cjs +24 -12
  155. package/shared/definition32.js +23 -11
  156. package/shared/definition33.cjs +11 -50
  157. package/shared/definition33.js +10 -49
  158. package/shared/definition34.cjs +26 -515
  159. package/shared/definition34.js +26 -515
  160. package/shared/definition35.cjs +448 -194
  161. package/shared/definition35.js +448 -192
  162. package/shared/definition36.cjs +256 -202
  163. package/shared/definition36.js +253 -201
  164. package/shared/definition37.cjs +204 -65
  165. package/shared/definition37.js +203 -63
  166. package/shared/definition38.cjs +63 -57
  167. package/shared/definition38.js +60 -55
  168. package/shared/definition39.cjs +65 -432
  169. package/shared/definition39.js +64 -431
  170. package/shared/definition4.cjs +2 -2
  171. package/shared/definition4.js +2 -2
  172. package/shared/definition40.cjs +441 -34
  173. package/shared/definition40.js +438 -31
  174. package/shared/definition41.cjs +34 -576
  175. package/shared/definition41.js +33 -575
  176. package/shared/definition42.cjs +531 -654
  177. package/shared/definition42.js +531 -654
  178. package/shared/definition43.cjs +690 -114
  179. package/shared/definition43.js +689 -113
  180. package/shared/definition44.cjs +124 -79
  181. package/shared/definition44.js +122 -77
  182. package/shared/definition45.cjs +78 -520
  183. package/shared/definition45.js +77 -518
  184. package/shared/definition46.cjs +520 -119
  185. package/shared/definition46.js +518 -118
  186. package/shared/definition47.cjs +118 -135
  187. package/shared/definition47.js +117 -134
  188. package/shared/definition48.cjs +151 -19
  189. package/shared/definition48.js +150 -18
  190. package/shared/definition49.cjs +21 -84
  191. package/shared/definition49.js +20 -83
  192. package/shared/definition5.cjs +1 -1
  193. package/shared/definition5.js +1 -1
  194. package/shared/definition50.cjs +52 -505
  195. package/shared/definition50.js +51 -504
  196. package/shared/definition51.cjs +526 -28
  197. package/shared/definition51.js +525 -27
  198. package/shared/definition52.cjs +28 -123
  199. package/shared/definition52.js +26 -122
  200. package/shared/definition53.cjs +110 -309
  201. package/shared/definition53.js +110 -308
  202. package/shared/definition54.cjs +255 -271
  203. package/shared/definition54.js +255 -271
  204. package/shared/definition55.cjs +262 -791
  205. package/shared/definition55.js +261 -790
  206. package/shared/definition56.cjs +818 -107
  207. package/shared/definition56.js +817 -106
  208. package/shared/definition57.cjs +85 -55
  209. package/shared/definition57.js +84 -54
  210. package/shared/definition58.cjs +125 -72
  211. package/shared/definition58.js +124 -71
  212. package/shared/definition59.cjs +72 -285
  213. package/shared/definition59.js +73 -286
  214. package/shared/definition6.cjs +1 -1
  215. package/shared/definition6.js +1 -1
  216. package/shared/definition60.cjs +298 -39
  217. package/shared/definition60.js +297 -38
  218. package/shared/definition61.cjs +65739 -1688
  219. package/shared/definition61.js +65738 -1687
  220. package/shared/definition62.cjs +50 -0
  221. package/shared/definition62.js +46 -0
  222. package/shared/definition63.cjs +1828 -0
  223. package/shared/definition63.js +1824 -0
  224. package/shared/definition7.cjs +2 -2
  225. package/shared/definition7.js +2 -2
  226. package/shared/definition8.cjs +2 -2
  227. package/shared/definition8.js +2 -2
  228. package/shared/definition9.cjs +1 -1
  229. package/shared/definition9.js +1 -1
  230. package/shared/enums.cjs +8 -0
  231. package/shared/enums.js +8 -1
  232. package/shared/index2.cjs +66 -37
  233. package/shared/index2.js +66 -37
  234. package/shared/key-codes2.js +1 -1
  235. package/shared/listbox.cjs +1 -1
  236. package/shared/listbox.js +1 -1
  237. package/shared/localization/Locale.d.ts +4 -0
  238. package/shared/patterns/form-elements/form-elements.d.ts +2 -3
  239. package/shared/presentationDate.cjs +16 -5
  240. package/shared/presentationDate.js +16 -5
  241. package/shared/text-anchor.cjs +6 -0
  242. package/shared/text-anchor.js +6 -0
  243. package/shared/text-anchor.template.cjs +6 -1
  244. package/shared/text-anchor.template.js +6 -1
  245. package/shared/text-field.cjs +1 -1
  246. package/shared/text-field.js +1 -1
  247. package/shared/utils/applyMixinsWithObservables.d.ts +1 -0
  248. package/side-drawer/index.cjs +1 -1
  249. package/side-drawer/index.js +1 -1
  250. package/slider/index.cjs +1 -1
  251. package/slider/index.js +1 -1
  252. package/split-button/index.cjs +2 -2
  253. package/split-button/index.js +2 -2
  254. package/style.css +1 -0
  255. package/styles/core/all.css +1 -1
  256. package/styles/core/theme.css +1 -1
  257. package/styles/core/typography.css +1 -1
  258. package/styles/tokens/theme-dark.css +4 -4
  259. package/styles/tokens/theme-light.css +4 -4
  260. package/styles/tokens/vivid-2-compat.css +1 -1
  261. package/switch/index.cjs +2 -2
  262. package/switch/index.js +2 -2
  263. package/tab/index.cjs +2 -2
  264. package/tab/index.js +2 -2
  265. package/tab-panel/index.cjs +1 -1
  266. package/tab-panel/index.js +1 -1
  267. package/tabs/index.cjs +4 -4
  268. package/tabs/index.js +4 -4
  269. package/tag/index.cjs +2 -2
  270. package/tag/index.js +2 -2
  271. package/tag-group/index.cjs +1 -1
  272. package/tag-group/index.js +1 -1
  273. package/text-area/index.cjs +4 -3
  274. package/text-area/index.js +4 -3
  275. package/text-field/index.cjs +4 -3
  276. package/text-field/index.js +4 -3
  277. package/time-picker/index.cjs +8 -7
  278. package/time-picker/index.js +8 -7
  279. package/toggletip/index.cjs +5 -5
  280. package/toggletip/index.js +5 -5
  281. package/tooltip/index.cjs +5 -5
  282. package/tooltip/index.js +5 -5
  283. package/tree-item/index.cjs +2 -2
  284. package/tree-item/index.js +2 -2
  285. package/tree-view/index.cjs +1 -1
  286. package/tree-view/index.js +1 -1
  287. package/video-player/index.cjs +17 -0
  288. package/video-player/index.js +15 -0
  289. package/vivid.api.json +311 -0
@@ -1,14 +1,206 @@
1
- import { B as Button, a as buttonRegistries } from './definition11.js';
2
- import { a as attr, F as FoundationElement, o as observable, v as volatile, h as html, r as registerFactory } from './index.js';
3
- import { b as Size, S as Shape } from './enums.js';
4
- import { e as elements } from './slotted.js';
5
- import { r as ref } from './ref.js';
6
- import { c as children } from './children.js';
7
- import { r as repeat } from './repeat.js';
8
- import { c as classNames } from './class-names.js';
1
+ import { F as FoundationElement, O as Observable, _ as __decorate, o as observable, a as attr, h as html, r as registerFactory } from './index.js';
2
+ import { a as iconRegistries } from './definition27.js';
3
+ import { b as AffixIconWithTrailing, a as affixIconTemplateFactory, I as IconWrapper } from './affix.js';
4
+ import { A as ARIAGlobalStatesAndProperties } from './aria-global.js';
5
+ import { S as StartEnd } from './start-end.js';
6
+ import { a as applyMixins } from './apply-mixins.js';
7
+ import { i as isHTMLElement } from './dom.js';
9
8
  import { w as when } from './when.js';
9
+ import { c as classNames } from './class-names.js';
10
10
 
11
- const styles = ".control{display:inline-flex;justify-content:space-between}.control:not(.shape-pill){border-radius:4px}.control.shape-pill{border-radius:14px}.buttons-wrapper{display:flex;column-gap:4px}.vwc-pagination-button[size=super-condensed]{--base-size:calc(1px*(24 + 4*clamp(-1, var(--vvd-size-density, 0), 2)))}.vwc-pagination-button[size=condensed]{--base-size:calc(1px*(32 + 4*clamp(-1, var(--vvd-size-density, 0), 2)))}.vwc-pagination-button[size=normal]{--base-size:calc(1px*(40 + 4*clamp(-1, var(--vvd-size-density, 0), 2)))}.vwc-pagination-button::part(button){padding-inline:0}.dots{align-self:center;text-align:center}.dots:not(.size-super-condensed){font:var(--vvd-typography-base-bold)}.dots.size-super-condensed{font:var(--vvd-typography-base-condensed-bold);inline-size:calc(1px*(24 + 4*clamp(-1,var(--vvd-size-density, 0),2)))}.dots.size-condensed{inline-size:calc(1px*(32 + 4*clamp(-1,var(--vvd-size-density, 0),2)))}.dots.size-normal{inline-size:calc(1px*(40 + 4*clamp(-1,var(--vvd-size-density, 0),2)))}\n";
11
+ /**
12
+ * Determines if the element is a {@link (ListboxOption:class)}
13
+ *
14
+ * @param element - the element to test.
15
+ * @public
16
+ */
17
+ function isListboxOption(el) {
18
+ return (isHTMLElement(el) &&
19
+ (el.getAttribute("role") === "option" ||
20
+ el instanceof HTMLOptionElement));
21
+ }
22
+ /**
23
+ * An Option Custom HTML Element.
24
+ * Implements {@link https://www.w3.org/TR/wai-aria-1.1/#option | ARIA option }.
25
+ *
26
+ * @slot start - Content which can be provided before the listbox option content
27
+ * @slot end - Content which can be provided after the listbox option content
28
+ * @slot - The default slot for listbox option content
29
+ * @csspart content - Wraps the listbox option content
30
+ *
31
+ * @public
32
+ */
33
+ let ListboxOption$1 = class ListboxOption extends FoundationElement {
34
+ constructor(text, value, defaultSelected, selected) {
35
+ super();
36
+ /**
37
+ * The defaultSelected state of the option.
38
+ * @public
39
+ */
40
+ this.defaultSelected = false;
41
+ /**
42
+ * Tracks whether the "selected" property has been changed.
43
+ * @internal
44
+ */
45
+ this.dirtySelected = false;
46
+ /**
47
+ * The checked state of the control.
48
+ *
49
+ * @public
50
+ */
51
+ this.selected = this.defaultSelected;
52
+ /**
53
+ * Track whether the value has been changed from the initial value
54
+ */
55
+ this.dirtyValue = false;
56
+ if (text) {
57
+ this.textContent = text;
58
+ }
59
+ if (value) {
60
+ this.initialValue = value;
61
+ }
62
+ if (defaultSelected) {
63
+ this.defaultSelected = defaultSelected;
64
+ }
65
+ if (selected) {
66
+ this.selected = selected;
67
+ }
68
+ this.proxy = new Option(`${this.textContent}`, this.initialValue, this.defaultSelected, this.selected);
69
+ this.proxy.disabled = this.disabled;
70
+ }
71
+ /**
72
+ * Updates the ariaChecked property when the checked property changes.
73
+ *
74
+ * @param prev - the previous checked value
75
+ * @param next - the current checked value
76
+ *
77
+ * @public
78
+ */
79
+ checkedChanged(prev, next) {
80
+ if (typeof next === "boolean") {
81
+ this.ariaChecked = next ? "true" : "false";
82
+ return;
83
+ }
84
+ this.ariaChecked = null;
85
+ }
86
+ /**
87
+ * Updates the proxy's text content when the default slot changes.
88
+ * @param prev - the previous content value
89
+ * @param next - the current content value
90
+ *
91
+ * @internal
92
+ */
93
+ contentChanged(prev, next) {
94
+ if (this.proxy instanceof HTMLOptionElement) {
95
+ this.proxy.textContent = this.textContent;
96
+ }
97
+ this.$emit("contentchange", null, { bubbles: true });
98
+ }
99
+ defaultSelectedChanged() {
100
+ if (!this.dirtySelected) {
101
+ this.selected = this.defaultSelected;
102
+ if (this.proxy instanceof HTMLOptionElement) {
103
+ this.proxy.selected = this.defaultSelected;
104
+ }
105
+ }
106
+ }
107
+ disabledChanged(prev, next) {
108
+ this.ariaDisabled = this.disabled ? "true" : "false";
109
+ if (this.proxy instanceof HTMLOptionElement) {
110
+ this.proxy.disabled = this.disabled;
111
+ }
112
+ }
113
+ selectedAttributeChanged() {
114
+ this.defaultSelected = this.selectedAttribute;
115
+ if (this.proxy instanceof HTMLOptionElement) {
116
+ this.proxy.defaultSelected = this.defaultSelected;
117
+ }
118
+ }
119
+ selectedChanged() {
120
+ this.ariaSelected = this.selected ? "true" : "false";
121
+ if (!this.dirtySelected) {
122
+ this.dirtySelected = true;
123
+ }
124
+ if (this.proxy instanceof HTMLOptionElement) {
125
+ this.proxy.selected = this.selected;
126
+ }
127
+ }
128
+ initialValueChanged(previous, next) {
129
+ // If the value is clean and the component is connected to the DOM
130
+ // then set value equal to the attribute value.
131
+ if (!this.dirtyValue) {
132
+ this.value = this.initialValue;
133
+ this.dirtyValue = false;
134
+ }
135
+ }
136
+ get label() {
137
+ var _a;
138
+ return (_a = this.value) !== null && _a !== void 0 ? _a : this.text;
139
+ }
140
+ get text() {
141
+ var _a, _b;
142
+ return (_b = (_a = this.textContent) === null || _a === void 0 ? void 0 : _a.replace(/\s+/g, " ").trim()) !== null && _b !== void 0 ? _b : "";
143
+ }
144
+ set value(next) {
145
+ const newValue = `${next !== null && next !== void 0 ? next : ""}`;
146
+ this._value = newValue;
147
+ this.dirtyValue = true;
148
+ if (this.proxy instanceof HTMLOptionElement) {
149
+ this.proxy.value = newValue;
150
+ }
151
+ Observable.notify(this, "value");
152
+ }
153
+ get value() {
154
+ var _a;
155
+ Observable.track(this, "value");
156
+ return (_a = this._value) !== null && _a !== void 0 ? _a : this.text;
157
+ }
158
+ get form() {
159
+ return this.proxy ? this.proxy.form : null;
160
+ }
161
+ };
162
+ __decorate([
163
+ observable
164
+ ], ListboxOption$1.prototype, "checked", void 0);
165
+ __decorate([
166
+ observable
167
+ ], ListboxOption$1.prototype, "content", void 0);
168
+ __decorate([
169
+ observable
170
+ ], ListboxOption$1.prototype, "defaultSelected", void 0);
171
+ __decorate([
172
+ attr({ mode: "boolean" })
173
+ ], ListboxOption$1.prototype, "disabled", void 0);
174
+ __decorate([
175
+ attr({ attribute: "selected", mode: "boolean" })
176
+ ], ListboxOption$1.prototype, "selectedAttribute", void 0);
177
+ __decorate([
178
+ observable
179
+ ], ListboxOption$1.prototype, "selected", void 0);
180
+ __decorate([
181
+ attr({ attribute: "value", mode: "fromView" })
182
+ ], ListboxOption$1.prototype, "initialValue", void 0);
183
+ /**
184
+ * States and properties relating to the ARIA `option` role.
185
+ *
186
+ * @public
187
+ */
188
+ class DelegatesARIAListboxOption {
189
+ }
190
+ __decorate([
191
+ observable
192
+ ], DelegatesARIAListboxOption.prototype, "ariaChecked", void 0);
193
+ __decorate([
194
+ observable
195
+ ], DelegatesARIAListboxOption.prototype, "ariaPosInSet", void 0);
196
+ __decorate([
197
+ observable
198
+ ], DelegatesARIAListboxOption.prototype, "ariaSelected", void 0);
199
+ __decorate([
200
+ observable
201
+ ], DelegatesARIAListboxOption.prototype, "ariaSetSize", void 0);
202
+ applyMixins(DelegatesARIAListboxOption, ARIAGlobalStatesAndProperties);
203
+ applyMixins(ListboxOption$1, StartEnd, DelegatesARIAListboxOption);
12
204
 
13
205
  var __defProp = Object.defineProperty;
14
206
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
@@ -21,211 +213,71 @@ var __decorateClass = (decorators, target, key, kind) => {
21
213
  __defProp(target, key, result);
22
214
  return result;
23
215
  };
24
- const MAX_DIGITS_AND_PLACEHOLDERS = 7;
25
- const totalConverter = {
26
- fromView: (value) => parseInt(value, 10),
27
- toView: (value) => value.toString()
28
- };
29
- class Pagination extends FoundationElement {
30
- constructor() {
31
- super();
32
- this.navIcons = false;
33
- this.total = 0;
34
- this.selectedIndex = 0;
35
- this.addEventListener("tabpressed", (e) => {
36
- const { value: currentLabel, shiftKey } = e.detail;
37
- const index = this.paginationButtons.findIndex(
38
- (button) => Number(button.label) === currentLabel
39
- );
40
- const focusDirection = shiftKey ? -1 : 1;
41
- const newIndex = index + focusDirection;
42
- if (newIndex < 0) {
43
- return this.prevButton.focus();
44
- }
45
- if (newIndex > this.paginationButtons.length - 1) {
46
- return this.nextButton.focus();
47
- }
48
- this.paginationButtons && this.paginationButtons[index + focusDirection].focus();
49
- });
50
- }
51
- get pagesList() {
52
- return new Array(
53
- this.total < MAX_DIGITS_AND_PLACEHOLDERS ? this.total : MAX_DIGITS_AND_PLACEHOLDERS
54
- ).fill(0).map((_, i, arr) => {
55
- if (i === 0)
56
- return 1;
57
- if (i === arr.length - 1)
58
- return this.total;
59
- if (this.selectedIndex !== void 0 && this.total > MAX_DIGITS_AND_PLACEHOLDERS) {
60
- if (this.selectedIndex < 4) {
61
- if (i === MAX_DIGITS_AND_PLACEHOLDERS - 2)
62
- return "...";
63
- }
64
- if (this.selectedIndex >= 4 && this.selectedIndex <= this.total - 5) {
65
- if (i > 1 && i < MAX_DIGITS_AND_PLACEHOLDERS - 2)
66
- return this.selectedIndex + (i - 2);
67
- if (i === 1 || i === MAX_DIGITS_AND_PLACEHOLDERS - 2)
68
- return "...";
69
- }
70
- if (this.selectedIndex > this.total - 5) {
71
- if (i > 1)
72
- return this.total - (6 - i);
73
- if (i === 1)
74
- return "...";
75
- }
76
- }
77
- return i + 1;
78
- });
216
+ class ListboxOption extends ListboxOption$1 {
217
+ // #region overrides base class accessor
218
+ set text(value) {
219
+ this._text = value;
79
220
  }
80
- totalChanged(_, newValue) {
81
- if (newValue < 0) {
82
- this.total = 0;
83
- }
84
- this.selectedIndex = 0;
221
+ get text() {
222
+ return this._text ?? "";
85
223
  }
86
- selectedIndexChanged(oldValue, newValue) {
87
- if (oldValue === void 0)
88
- return;
89
- this.$emit("pagination-change", {
90
- selectedIndex: newValue,
91
- total: this.total,
92
- oldIndex: oldValue
93
- });
224
+ get label() {
225
+ return this._label ?? this.text;
94
226
  }
95
- paginationButtonsChanged(_, newValue) {
96
- newValue.forEach((button) => {
97
- button.shadowRoot.querySelector("button").setAttribute("part", "button");
98
- });
227
+ set label(value) {
228
+ this._label = value;
99
229
  }
230
+ // #endregion overrides
100
231
  }
101
232
  __decorateClass([
102
- attr
103
- ], Pagination.prototype, "size", 2);
104
- __decorateClass([
105
- attr
106
- ], Pagination.prototype, "shape", 2);
107
- __decorateClass([
108
- observable
109
- ], Pagination.prototype, "paginationButtons", 2);
110
- __decorateClass([
111
- observable
112
- ], Pagination.prototype, "prevButton", 2);
113
- __decorateClass([
114
- observable
115
- ], Pagination.prototype, "nextButton", 2);
116
- __decorateClass([
117
- attr({ attribute: "nav-icons", mode: "boolean" })
118
- ], Pagination.prototype, "navIcons", 2);
119
- __decorateClass([
120
- volatile
121
- ], Pagination.prototype, "pagesList", 1);
122
- __decorateClass([
123
- attr({ mode: "reflect", converter: totalConverter })
124
- ], Pagination.prototype, "total", 2);
233
+ attr({
234
+ attribute: "text"
235
+ })
236
+ ], ListboxOption.prototype, "_text", 2);
125
237
  __decorateClass([
126
238
  attr({
127
- mode: "reflect",
128
- converter: totalConverter,
129
- attribute: "selected-index"
239
+ attribute: "label"
130
240
  })
131
- ], Pagination.prototype, "selectedIndex", 2);
241
+ ], ListboxOption.prototype, "_label", 2);
242
+ applyMixins(ListboxOption, AffixIconWithTrailing);
132
243
 
133
- const ALLOWED_SIZES = [Size.SuperCondensed, Size.Condensed, Size.Normal];
134
- const ALLOWED_SHAPES = [Shape.Rounded, Shape.Pill];
135
- const handleSelection = (value, { parent: x }) => {
136
- return x.selectedIndex = Number(value) - 1;
137
- };
138
- const handleKeyDown = (value, { event, parent }) => {
139
- if (event.key === " " || event.key === "Enter") {
140
- handleSelection(value, { parent });
141
- }
142
- if (event.key === "Tab") {
143
- event.target.dispatchEvent(
144
- new CustomEvent("tabpressed", {
145
- detail: { value, shiftKey: event.shiftKey },
146
- bubbles: true,
147
- composed: true
148
- })
149
- );
150
- }
151
- };
152
- const getClasses = (_) => classNames("control");
153
- function getButtonAppearance(value, { parent }) {
154
- return parent.selectedIndex === Number(value) - 1 ? "filled" : "ghost";
155
- }
156
- const paginationButtonRenderer = (buttonTag) => html` ${when(
157
- (value) => value !== "...",
158
- html`
159
- <${buttonTag} class="vwc-pagination-button"
160
- label="${(value) => value}"
161
- appearance="${getButtonAppearance}"
162
- size="${(_, { parent: x }) => getPaginationSize(x)}"
163
- shape="${(_, { parent: x }) => getPaginationShape(x)}"
164
- style="inline-size: ${(value) => getPaginationButtonWidth(value)};"
165
- tabindex="0"
166
- aria-current="${(value, { parent }) => parent.selectedIndex === Number(value) - 1}"
167
- @click="${handleSelection}"
168
- @keydown="${handleKeyDown}">
169
- </${buttonTag}>
170
- `
171
- )}
172
- ${when(
173
- (value) => value === "...",
174
- html` <div class="dots size-${(_, { parent: x }) => getPaginationSize(x)}">
175
- ...
176
- </div>`
177
- )}`;
178
- const getPaginationSize = (x) => {
179
- if (!x.size || !ALLOWED_SIZES.includes(x.size)) {
180
- return Size.SuperCondensed;
181
- }
182
- return x.size;
183
- };
184
- const getPaginationShape = (x) => {
185
- if (!x.shape || !ALLOWED_SHAPES.includes(x.shape)) {
186
- return Shape.Rounded;
187
- }
188
- return x.shape;
189
- };
190
- const getPaginationButtonWidth = (value) => {
191
- return `calc(var(--base-size) + ${String(value).length - 1}ch)`;
192
- };
193
- const PaginationTemplate = (context) => {
194
- const buttonTag = context.tagFor(Button);
195
- const paginationButtonTemplate = paginationButtonRenderer(buttonTag);
244
+ const getClasses = ({ icon, disabled, selected, checked }) => classNames(
245
+ "base",
246
+ ["disabled", disabled],
247
+ ["selected", Boolean(selected)],
248
+ ["active", Boolean(checked)],
249
+ ["icon", Boolean(icon)]
250
+ );
251
+ const ListboxOptionTemplate = (context) => {
252
+ const affixIconTemplate = affixIconTemplateFactory(context);
196
253
  return html`
197
- <div class="${getClasses}">
198
- <${buttonTag} class="prev-button" ${ref("prevButton")}
199
- label="${(x) => !x.navIcons ? "Previous" : null}"
200
- icon="${(x) => x.navIcons ? "chevron-left-line" : null}"
201
- size="${getPaginationSize}"
202
- shape="${getPaginationShape}"
203
- ?disabled="${(x) => x.total === 0 || x.selectedIndex === 0}"
204
- @click="${(x) => x.selectedIndex !== void 0 && x.selectedIndex--}"
205
- ></${buttonTag}>
206
- <div id="buttons-wrapper" class="buttons-wrapper" ${children({
207
- property: "paginationButtons",
208
- filter: elements(buttonTag)
209
- })}>
210
- ${repeat((x) => x.pagesList, paginationButtonTemplate, { positioning: true })}
211
- </div>
212
- <${buttonTag} class="next-button" ${ref("nextButton")}
213
- label="${(x) => !x.navIcons ? "Next" : null}"
214
- icon="${(x) => x.navIcons ? "chevron-right-line" : null}"
215
- size="${getPaginationSize}"
216
- shape="${getPaginationShape}"
217
- ?disabled="${(x) => x.total === 0 || x.selectedIndex === x.total - 1}"
218
- @click="${(x) => x.selectedIndex !== void 0 && x.selectedIndex++}"
219
- ></${buttonTag}>
220
- </div>`;
254
+ <template
255
+ aria-checked="${(x) => x.ariaChecked}"
256
+ aria-disabled="${(x) => x.ariaDisabled}"
257
+ aria-posinset="${(x) => x.ariaPosInSet}"
258
+ aria-selected="${(x) => x.ariaSelected}"
259
+ aria-setsize="${(x) => x.ariaSetSize}"
260
+ role="option"
261
+ >
262
+ <div class="${getClasses}">
263
+ ${(x) => affixIconTemplate(x.icon, IconWrapper.Slot)}
264
+ ${when((x) => x.text, html`<div class="text">${(x) => x.text}</div>`)}
265
+ </div>
266
+ </template>
267
+ `;
221
268
  };
222
269
 
223
- const paginationDefinition = Pagination.compose({
224
- baseName: "pagination",
225
- template: PaginationTemplate,
270
+ const styles = ":host([disabled]){cursor:not-allowed}.base{display: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(--_option-appearance-color-text, 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;vertical-align:middle;word-break:break-word}.base{--_connotation-color-primary: var(--vvd-option-accent-primary, var(--vvd-color-canvas-text));--_connotation-color-primary-text: var(--vvd-option-accent-primary-text, var(--vvd-color-canvas));--_connotation-color-primary-increment: var(--vvd-option-accent-primary-increment, var(--vvd-color-neutral-800));--_connotation-color-firm: var(--vvd-option-accent-firm, var(--vvd-color-canvas-text));--_connotation-color-faint: var(--vvd-option-accent-faint, var(--vvd-color-neutral-50));--_connotation-color-soft: var(--vvd-option-accent-soft, var(--vvd-color-neutral-100));--_connotation-color-pale: var(--vvd-option-accent-pale, var(--vvd-color-neutral-300));--_connotation-color-dim: var(--vvd-option-accent-dim, var(--vvd-color-neutral-200))}.base{--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: transparent;--_appearance-color-outline: transparent}.base:where(.hover,:hover):where(:not(.disabled,:disabled,.readonly)){--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: var(--_connotation-color-faint);--_appearance-color-outline: transparent}.base:where(.disabled,:disabled){--_appearance-color-text: var(--vvd-color-neutral-300);--_appearance-color-fill: transparent;--_appearance-color-outline: transparent}.base:where(.active,:active):where(:not(.disabled,:disabled)){--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: var(--_connotation-color-soft);--_appearance-color-outline: transparent}.base:where(.selected):where(:not(.disabled,:disabled)){--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: var(--_connotation-color-soft);--_appearance-color-outline: transparent}.base:where(.selected):where(.hover,:hover):where(:not(.disabled,:disabled,.readonly)){--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: var(--_connotation-color-dim);--_appearance-color-outline: transparent}@supports (user-select: none){.base{user-select:none}}.base:not(.disabled){cursor:pointer}.base.disabled{pointer-events:none}.base .text{font:var(--vvd-typography-base)}:host([aria-checked=true]) .base{--focus-stroke-color: var(--vvd-color-neutral-500);--focus-stroke-gap-color: transparent;box-shadow:inset 0 0 0 3px var(--focus-stroke-gap-color, currentColor);outline:2px solid var(--focus-stroke-color, var(--vvd-color-canvas-text));outline-offset:calc(-2px - var(--focus-inset, 0px))}slot[name=icon]{font-size:20px;line-height:1}.base:not(.disabled,.selected) slot[name=icon]{color:var(--vvd-color-neutral-600)}\n";
271
+
272
+ const listboxOptionDefinition = ListboxOption.compose({
273
+ baseName: "option",
274
+ template: ListboxOptionTemplate,
226
275
  styles
227
276
  });
228
- const paginationRegistries = [paginationDefinition(), buttonRegistries];
229
- const registerPagination = registerFactory(paginationRegistries);
277
+ const listboxOptionRegistries = [
278
+ listboxOptionDefinition(),
279
+ ...iconRegistries
280
+ ];
281
+ const registerOption = registerFactory(listboxOptionRegistries);
230
282
 
231
- export { paginationRegistries as a, paginationDefinition as p, registerPagination as r };
283
+ export { ListboxOption as L, listboxOptionRegistries as a, isListboxOption as i, listboxOptionDefinition as l, registerOption as r };