@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,206 +1,317 @@
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 './definition26.js';
3
- import { b as AffixIconWithTrailing, a as affixIconTemplateFactory, I as IconWrapper } from './affix.js';
4
- import { A as ARIAGlobalStatesAndProperties } from './aria-global.js';
1
+ import { F as FoundationElement, D as DOM, _ as __decorate, a as attr, n as nullableNumberConverter, o as observable, h as html, r as registerFactory } from './index.js';
2
+ import { B as Button, a as buttonRegistries } from './definition11.js';
3
+ import { D as Divider, a as dividerRegistries } from './definition22.js';
4
+ import { A as AffixIcon } from './affix.js';
5
+ import { e as errorText, f as formElements, F as FormElementSuccessText, a as FormElementHelperText, b as FormElementCharCount, g as getFeedbackTemplate } from './index2.js';
6
+ import { L as Localized } from './localized.js';
7
+ import { a as applyMixinsWithObservables } from './applyMixinsWithObservables.js';
5
8
  import { S as StartEnd } from './start-end.js';
6
9
  import { a as applyMixins } from './apply-mixins.js';
7
- import { i as isHTMLElement } from './dom.js';
10
+ import { D as DelegatesARIATextbox } from './text-field2.js';
11
+ import { F as FormAssociated } from './form-associated.js';
12
+ import { f as keyArrowDown, e as keyArrowUp } from './key-codes.js';
13
+ import { S as Shape } from './enums.js';
8
14
  import { w as when } from './when.js';
15
+ import { r as ref } from './ref.js';
9
16
  import { c as classNames } from './class-names.js';
10
17
 
18
+ class _NumberField extends FoundationElement {
19
+ }
11
20
  /**
12
- * Determines if the element is a {@link (ListboxOption:class)}
21
+ * A form-associated base class for the {@link @microsoft/fast-foundation#(NumberField:class)} component.
13
22
  *
14
- * @param element - the element to test.
15
- * @public
23
+ * @internal
16
24
  */
17
- function isListboxOption(el) {
18
- return (isHTMLElement(el) &&
19
- (el.getAttribute("role") === "option" ||
20
- el instanceof HTMLOptionElement));
25
+ class FormAssociatedNumberField extends FormAssociated(_NumberField) {
26
+ constructor() {
27
+ super(...arguments);
28
+ this.proxy = document.createElement("input");
29
+ }
21
30
  }
31
+
22
32
  /**
23
- * An Option Custom HTML Element.
24
- * Implements {@link https://www.w3.org/TR/wai-aria-1.1/#option | ARIA option }.
33
+ * A Number Field Custom HTML Element.
34
+ * Based largely on the {@link https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/number | <input type="number" /> element }.
25
35
  *
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
36
+ * @slot start - Content which can be provided before the number field input
37
+ * @slot end - Content which can be provided after the number field input
38
+ * @slot - The default slot for the label
39
+ * @slot step-up-glyph - The glyph for the step up control
40
+ * @slot step-down-glyph - The glyph for the step down control
41
+ * @csspart label - The label
42
+ * @csspart root - The element wrapping the control, including start and end slots
43
+ * @csspart control - The element representing the input
44
+ * @csspart controls - The step up and step down controls
45
+ * @csspart step-up - The step up control
46
+ * @csspart step-down - The step down control
47
+ * @fires input - Fires a custom 'input' event when the value has changed
48
+ * @fires change - Fires a custom 'change' event when the value has changed
30
49
  *
31
50
  * @public
32
51
  */
33
- let ListboxOption$1 = class ListboxOption extends FoundationElement {
34
- constructor(text, value, defaultSelected, selected) {
35
- super();
52
+ let NumberField$1 = class NumberField extends FormAssociatedNumberField {
53
+ constructor() {
54
+ super(...arguments);
36
55
  /**
37
- * The defaultSelected state of the option.
56
+ * When true, spin buttons will not be rendered
38
57
  * @public
58
+ * @remarks
59
+ * HTML Attribute: autofocus
39
60
  */
40
- this.defaultSelected = false;
41
- /**
42
- * Tracks whether the "selected" property has been changed.
43
- * @internal
44
- */
45
- this.dirtySelected = false;
61
+ this.hideStep = false;
46
62
  /**
47
- * The checked state of the control.
48
- *
63
+ * Amount to increment or decrement the value by
49
64
  * @public
65
+ * @remarks
66
+ * HTMLAttribute: step
50
67
  */
51
- this.selected = this.defaultSelected;
68
+ this.step = 1;
52
69
  /**
53
- * Track whether the value has been changed from the initial value
70
+ * Flag to indicate that the value change is from the user input
71
+ * @internal
54
72
  */
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;
73
+ this.isUserInput = false;
74
+ }
75
+ /**
76
+ * Ensures that the max is greater than the min and that the value
77
+ * is less than the max
78
+ * @param previous - the previous max value
79
+ * @param next - updated max value
80
+ *
81
+ * @internal
82
+ */
83
+ maxChanged(previous, next) {
84
+ var _a;
85
+ this.max = Math.max(next, (_a = this.min) !== null && _a !== void 0 ? _a : next);
86
+ const min = Math.min(this.min, this.max);
87
+ if (this.min !== undefined && this.min !== min) {
88
+ this.min = min;
67
89
  }
68
- this.proxy = new Option(`${this.textContent}`, this.initialValue, this.defaultSelected, this.selected);
69
- this.proxy.disabled = this.disabled;
90
+ this.value = this.getValidValue(this.value);
70
91
  }
71
92
  /**
72
- * Updates the ariaChecked property when the checked property changes.
93
+ * Ensures that the min is less than the max and that the value
94
+ * is greater than the min
95
+ * @param previous - previous min value
96
+ * @param next - updated min value
73
97
  *
74
- * @param prev - the previous checked value
75
- * @param next - the current checked value
98
+ * @internal
99
+ */
100
+ minChanged(previous, next) {
101
+ var _a;
102
+ this.min = Math.min(next, (_a = this.max) !== null && _a !== void 0 ? _a : next);
103
+ const max = Math.max(this.min, this.max);
104
+ if (this.max !== undefined && this.max !== max) {
105
+ this.max = max;
106
+ }
107
+ this.value = this.getValidValue(this.value);
108
+ }
109
+ /**
110
+ * The value property, typed as a number.
76
111
  *
77
112
  * @public
78
113
  */
79
- checkedChanged(prev, next) {
80
- if (typeof next === "boolean") {
81
- this.ariaChecked = next ? "true" : "false";
114
+ get valueAsNumber() {
115
+ return parseFloat(super.value);
116
+ }
117
+ set valueAsNumber(next) {
118
+ this.value = next.toString();
119
+ }
120
+ /**
121
+ * Validates that the value is a number between the min and max
122
+ * @param previous - previous stored value
123
+ * @param next - value being updated
124
+ * @param updateControl - should the text field be updated with value, defaults to true
125
+ * @internal
126
+ */
127
+ valueChanged(previous, next) {
128
+ this.value = this.getValidValue(next);
129
+ if (next !== this.value) {
82
130
  return;
83
131
  }
84
- this.ariaChecked = null;
132
+ if (this.control && !this.isUserInput) {
133
+ this.control.value = this.value;
134
+ }
135
+ super.valueChanged(previous, this.value);
136
+ if (previous !== undefined && !this.isUserInput) {
137
+ this.$emit("input");
138
+ this.$emit("change");
139
+ }
140
+ this.isUserInput = false;
141
+ }
142
+ /** {@inheritDoc (FormAssociated:interface).validate} */
143
+ validate() {
144
+ super.validate(this.control);
85
145
  }
86
146
  /**
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
147
+ * Sets the internal value to a valid number between the min and max properties
148
+ * @param value - user input
90
149
  *
91
150
  * @internal
92
151
  */
93
- contentChanged(prev, next) {
94
- if (this.proxy instanceof HTMLOptionElement) {
95
- this.proxy.textContent = this.textContent;
152
+ getValidValue(value) {
153
+ var _a, _b;
154
+ let validValue = parseFloat(parseFloat(value).toPrecision(12));
155
+ if (isNaN(validValue)) {
156
+ validValue = "";
96
157
  }
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
- }
158
+ else {
159
+ validValue = Math.min(validValue, (_a = this.max) !== null && _a !== void 0 ? _a : validValue);
160
+ validValue = Math.max(validValue, (_b = this.min) !== null && _b !== void 0 ? _b : validValue).toString();
105
161
  }
162
+ return validValue;
106
163
  }
107
- disabledChanged(prev, next) {
108
- this.ariaDisabled = this.disabled ? "true" : "false";
109
- if (this.proxy instanceof HTMLOptionElement) {
110
- this.proxy.disabled = this.disabled;
111
- }
164
+ /**
165
+ * Increments the value using the step value
166
+ *
167
+ * @public
168
+ */
169
+ stepUp() {
170
+ const value = parseFloat(this.value);
171
+ const stepUpValue = !isNaN(value)
172
+ ? value + this.step
173
+ : this.min > 0
174
+ ? this.min
175
+ : this.max < 0
176
+ ? this.max
177
+ : !this.min
178
+ ? this.step
179
+ : 0;
180
+ this.value = stepUpValue.toString();
112
181
  }
113
- selectedAttributeChanged() {
114
- this.defaultSelected = this.selectedAttribute;
115
- if (this.proxy instanceof HTMLOptionElement) {
116
- this.proxy.defaultSelected = this.defaultSelected;
117
- }
182
+ /**
183
+ * Decrements the value using the step value
184
+ *
185
+ * @public
186
+ */
187
+ stepDown() {
188
+ const value = parseFloat(this.value);
189
+ const stepDownValue = !isNaN(value)
190
+ ? value - this.step
191
+ : this.min > 0
192
+ ? this.min
193
+ : this.max < 0
194
+ ? this.max
195
+ : !this.min
196
+ ? 0 - this.step
197
+ : 0;
198
+ this.value = stepDownValue.toString();
118
199
  }
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;
200
+ /**
201
+ * Sets up the initial state of the number field
202
+ * @internal
203
+ */
204
+ connectedCallback() {
205
+ super.connectedCallback();
206
+ this.proxy.setAttribute("type", "number");
207
+ this.validate();
208
+ this.control.value = this.value;
209
+ if (this.autofocus) {
210
+ DOM.queueUpdate(() => {
211
+ this.focus();
212
+ });
126
213
  }
127
214
  }
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
- }
215
+ /**
216
+ * Selects all the text in the number field
217
+ *
218
+ * @public
219
+ */
220
+ select() {
221
+ this.control.select();
222
+ /**
223
+ * The select event does not permeate the shadow DOM boundary.
224
+ * This fn effectively proxies the select event,
225
+ * emitting a `select` event whenever the internal
226
+ * control emits a `select` event
227
+ */
228
+ this.$emit("select");
135
229
  }
136
- get label() {
137
- var _a;
138
- return (_a = this.value) !== null && _a !== void 0 ? _a : this.text;
230
+ /**
231
+ * Handles the internal control's `input` event
232
+ * @internal
233
+ */
234
+ handleTextInput() {
235
+ this.control.value = this.control.value.replace(/[^0-9\-+e.]/g, "");
236
+ this.isUserInput = true;
237
+ this.value = this.control.value;
139
238
  }
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 : "";
239
+ /**
240
+ * Change event handler for inner control.
241
+ * @remarks
242
+ * "Change" events are not `composable` so they will not
243
+ * permeate the shadow DOM boundary. This fn effectively proxies
244
+ * the change event, emitting a `change` event whenever the internal
245
+ * control emits a `change` event
246
+ * @internal
247
+ */
248
+ handleChange() {
249
+ this.$emit("change");
143
250
  }
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;
251
+ /**
252
+ * Handles the internal control's `keydown` event
253
+ * @internal
254
+ */
255
+ handleKeyDown(e) {
256
+ const key = e.key;
257
+ switch (key) {
258
+ case keyArrowUp:
259
+ this.stepUp();
260
+ return false;
261
+ case keyArrowDown:
262
+ this.stepDown();
263
+ return false;
150
264
  }
151
- Observable.notify(this, "value");
265
+ return true;
152
266
  }
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;
267
+ /**
268
+ * Handles populating the input field with a validated value when
269
+ * leaving the input field.
270
+ * @internal
271
+ */
272
+ handleBlur() {
273
+ this.control.value = this.value;
160
274
  }
161
275
  };
162
276
  __decorate([
163
- observable
164
- ], ListboxOption$1.prototype, "checked", void 0);
277
+ attr({ attribute: "readonly", mode: "boolean" })
278
+ ], NumberField$1.prototype, "readOnly", void 0);
165
279
  __decorate([
166
- observable
167
- ], ListboxOption$1.prototype, "content", void 0);
280
+ attr({ mode: "boolean" })
281
+ ], NumberField$1.prototype, "autofocus", void 0);
168
282
  __decorate([
169
- observable
170
- ], ListboxOption$1.prototype, "defaultSelected", void 0);
283
+ attr({ attribute: "hide-step", mode: "boolean" })
284
+ ], NumberField$1.prototype, "hideStep", void 0);
171
285
  __decorate([
172
- attr({ mode: "boolean" })
173
- ], ListboxOption$1.prototype, "disabled", void 0);
286
+ attr
287
+ ], NumberField$1.prototype, "placeholder", void 0);
174
288
  __decorate([
175
- attr({ attribute: "selected", mode: "boolean" })
176
- ], ListboxOption$1.prototype, "selectedAttribute", void 0);
289
+ attr
290
+ ], NumberField$1.prototype, "list", void 0);
177
291
  __decorate([
178
- observable
179
- ], ListboxOption$1.prototype, "selected", void 0);
292
+ attr({ converter: nullableNumberConverter })
293
+ ], NumberField$1.prototype, "maxlength", void 0);
180
294
  __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
- }
295
+ attr({ converter: nullableNumberConverter })
296
+ ], NumberField$1.prototype, "minlength", void 0);
190
297
  __decorate([
191
- observable
192
- ], DelegatesARIAListboxOption.prototype, "ariaChecked", void 0);
298
+ attr({ converter: nullableNumberConverter })
299
+ ], NumberField$1.prototype, "size", void 0);
193
300
  __decorate([
194
- observable
195
- ], DelegatesARIAListboxOption.prototype, "ariaPosInSet", void 0);
301
+ attr({ converter: nullableNumberConverter })
302
+ ], NumberField$1.prototype, "step", void 0);
196
303
  __decorate([
197
- observable
198
- ], DelegatesARIAListboxOption.prototype, "ariaSelected", void 0);
304
+ attr({ converter: nullableNumberConverter })
305
+ ], NumberField$1.prototype, "max", void 0);
306
+ __decorate([
307
+ attr({ converter: nullableNumberConverter })
308
+ ], NumberField$1.prototype, "min", void 0);
199
309
  __decorate([
200
310
  observable
201
- ], DelegatesARIAListboxOption.prototype, "ariaSetSize", void 0);
202
- applyMixins(DelegatesARIAListboxOption, ARIAGlobalStatesAndProperties);
203
- applyMixins(ListboxOption$1, StartEnd, DelegatesARIAListboxOption);
311
+ ], NumberField$1.prototype, "defaultSlottedNodes", void 0);
312
+ applyMixins(NumberField$1, StartEnd, DelegatesARIATextbox);
313
+
314
+ const styles = ":host{display:inline-block}.base{--_text-field-gutter-start:calc(1px*(40 + 4*clamp(-1, var(--vvd-size-density, 0), 2))*.4);--_text-field-gutter-end:calc(1px*(40 + 4*clamp(-1, var(--vvd-size-density, 0), 2))*.4);--_text-field-icon-size:calc(1px*(40 + 4*clamp(-1, var(--vvd-size-density, 0), 2))/2);display:inline-grid;width:100%;gap:4px;grid-template-columns:min-content 1fr max-content}.base{--_appearance-color-text: var(--vvd-color-canvas-text);--_appearance-color-fill: var(--vvd-color-canvas);--_appearance-color-outline: var(--_connotation-color-intermediate)}.base.appearance-ghost{--_appearance-color-text: var(--_connotation-color-primary);--_appearance-color-fill: transparent;--_appearance-color-outline: transparent}.base:where(.hover,:hover):where(:not(.disabled,:disabled,.readonly)){--_appearance-color-text: var(--vvd-color-canvas-text);--_appearance-color-fill: var(--vvd-color-canvas);--_appearance-color-outline: var(--_connotation-color-fierce)}.base:where(.hover,:hover):where(:not(.disabled,:disabled,.readonly)).appearance-ghost{--_appearance-color-text: var(--_connotation-color-primary);--_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: var(--vvd-color-neutral-100);--_appearance-color-outline: var(--vvd-color-neutral-300)}.base:where(.disabled,:disabled).appearance-ghost{--_appearance-color-text: var(--vvd-color-neutral-300);--_appearance-color-fill: transparent;--_appearance-color-outline: transparent}.base:where(.readonly):where(:not(.disabled,:disabled)){--_appearance-color-text: var(--vvd-color-canvas-text);--_appearance-color-fill: var(--vvd-color-neutral-200);--_appearance-color-outline: var(--vvd-color-neutral-400)}.base:where(.readonly):where(:not(.disabled,:disabled)).appearance-ghost{--_appearance-color-text: var(--vvd-color-neutral-600);--_appearance-color-fill: transparent;--_appearance-color-outline: transparent}.base:where(.error):where(:not(.disabled,:disabled)){--_appearance-color-text: notSet;--_appearance-color-fill: var(--vvd-color-alert-50);--_appearance-color-outline: var(--vvd-color-alert-500)}.base:where(.error):where(:not(.disabled,:disabled)).appearance-ghost{--_appearance-color-text: notSet;--_appearance-color-fill: var(--vvd-color-alert-50);--_appearance-color-outline: transparent}.base:where(.success):where(:not(.disabled,:disabled)){--_appearance-color-text: notSet;--_appearance-color-fill: var(--vvd-color-success-50);--_appearance-color-outline: var(--vvd-color-success-500)}.base:where(.success):where(:not(.disabled,:disabled)).appearance-ghost{--_appearance-color-text: notSet;--_appearance-color-fill: var(--vvd-color-success-50);--_appearance-color-outline: transparent}.base{--_connotation-color-primary: var(--vvd-text-field-accent-primary, var(--vvd-color-canvas-text));--_connotation-color-primary-text: var(--vvd-text-field-accent-primary-text, var(--vvd-color-canvas));--_connotation-color-primary-increment: var(--vvd-text-field-accent-primary-increment, var(--vvd-color-neutral-800));--_connotation-color-intermediate: var(--vvd-text-field-accent-intermediate, var(--vvd-color-neutral-500));--_connotation-color-firm: var(--vvd-text-field-accent-firm, var(--vvd-color-canvas-text));--_connotation-color-fierce: var(--vvd-text-field-accent-fierce, var(--vvd-color-neutral-700));--_connotation-color-faint: var(--vvd-text-field-accent-faint, var(--vvd-color-neutral-50));--_connotation-color-soft: var(--vvd-text-field-accent-soft, var(--vvd-color-neutral-100))}@supports (user-select: none){.base{user-select:none}}.base:not(.disabled){--_low-ink-color: var(--vvd-color-neutral-600)}.base.disabled{--_low-ink-color: var(--_appearance-color-text)}.label:not(slot),.label::slotted(label){box-sizing:initial!important;padding:initial!important;margin:initial!important;color:var(--vvd-color-canvas-text)!important;contain:inline-size!important;font:var(--vvd-typography-base);grid-column:1/4;grid-row:1}.char-count+.label:not(slot),.char-count+.label::slotted(label){grid-column:1/3}.char-count{color:var(--_low-ink-color);font:var(--vvd-typography-base);grid-column:3/4}.fieldset{position:relative;display:flex;align-items:center;background-color:var(--_appearance-color-fill);font:var(--vvd-typography-base);grid-column:1/4;padding-block:0;transition:color .2s,background-color .2s}.fieldset:after{position:absolute;display:block;border-radius:inherit;block-size:100%;box-shadow:inset 0 0 0 1px var(--_appearance-color-outline);content:\"\";inline-size:100%;pointer-events:none;transition:box-shadow .2s}.fieldset:focus-visible{outline:none}.base>.fieldset{block-size:calc(1px*(40 + 4*clamp(-1,var(--vvd-size-density, 0),2)))}.base:not(.shape-pill) .fieldset{border-radius:8px}.base.shape-pill .fieldset{border-radius:24px}.wrapper{border-radius:inherit;block-size:100%;inline-size:100%}.control{border-radius:inherit;text-align:start}.control:not(slot),.control::slotted(input){width:100%!important;box-sizing:border-box!important;border:0 none!important;border-radius:inherit!important;margin:initial!important;appearance:none!important;background-color:transparent!important;block-size:100%!important;color:inherit!important;font:inherit;outline:transparent;padding-block:0!important;padding-inline:var(--_text-field-gutter-start) var(--_text-field-gutter-end)!important;text-align:inherit}.control:not(slot):disabled,.control::slotted(input:disabled){cursor:not-allowed!important;opacity:1!important;-webkit-text-fill-color:var(--_appearance-color-text)!important}.control:not(slot)::placeholder{opacity:1!important;-webkit-text-fill-color:var(--_low-ink-color)!important}.control::slotted(input:-webkit-autofill),.control:not(slot):-webkit-autofill{-webkit-box-shadow:0 0 0 1000px var(--_appearance-color-fill) inset;-webkit-text-fill-color:var(--_appearance-color-text)!important}.has-icon .control:not(slot),.has-icon .control::slotted(input){padding-inline-start:calc(var(--_text-field-icon-size) + var(--_text-field-gutter-start) * 2)!important}.icon{position:absolute;z-index:1;color:var(--_low-ink-color);font-size:var(--_text-field-icon-size);inset-block-start:50%;inset-inline-start:calc(100% + var(--_text-field-gutter-start));line-height:1;transform:translateY(-50%)}.leading-items-wrapper{position:relative}.base.no-leading .leading-items-wrapper{display:none}.action-items-wrapper{margin-inline-end:4px}.base:not(.action-items) .action-items-wrapper{display:none}@supports selector(:has(*)){.fieldset:has(.wrapper .control:focus-within):after{--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))}}@supports not selector(:has(*)){.wrapper:focus-within:after{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));--focus-stroke-gap-color: transparent;position:absolute;z-index:1;display:block;border-radius:inherit;content:\"\";inset:0}}:host([internal-part]) .fieldset{font:var(--vvd-typography-heading-4)}:host([internal-part]) .fieldset:not(:focus-within):after{block-size:1px;inset-block-end:0}:host([internal-part]) .control{text-align:center}.base{--_text-field-gutter-end: 70px}.control::-webkit-outer-spin-button,.control::-webkit-inner-spin-button{appearance:none}.control-buttons{position:absolute;z-index:1;right:3px;display:flex}.readonly .control-buttons,.disabled .control-buttons{pointer-events:none}.control-buttons .divider{margin-block:8px}.control-buttons>*{flex-shrink:0}\n";
204
315
 
205
316
  var __defProp = Object.defineProperty;
206
317
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
@@ -213,71 +324,216 @@ var __decorateClass = (decorators, target, key, kind) => {
213
324
  __defProp(target, key, result);
214
325
  return result;
215
326
  };
216
- class ListboxOption extends ListboxOption$1 {
217
- // #region overrides base class accessor
218
- set text(value) {
219
- this._text = value;
327
+ const STEP_DIRECTION = {
328
+ up: 1,
329
+ down: -1
330
+ };
331
+ const PROXY_REFLECTED_ATTRIBUTES = {
332
+ max: true,
333
+ min: true
334
+ };
335
+ function makeStep(element, direction) {
336
+ const value = parseFloat(element.value);
337
+ const stepUpValue = !isNaN(value) ? value + direction * element.step : element.min > 0 ? element.min : element.max < 0 ? element.max : !element.min ? direction * element.step : 0;
338
+ element.value = Number(stepUpValue.toFixed(12)).toString();
339
+ }
340
+ let NumberField = class extends NumberField$1 {
341
+ constructor() {
342
+ super(...arguments);
343
+ this.incrementButtonAriaLabel = null;
344
+ this.decrementButtonAriaLabel = null;
345
+ }
346
+ stepChanged(_previous, next) {
347
+ this.proxy.setAttribute(
348
+ "step",
349
+ Number.isFinite(next) ? next.toString() : ""
350
+ );
220
351
  }
221
- get text() {
222
- return this._text ?? "";
352
+ attributeChangedCallback(name, previous, next) {
353
+ super.attributeChangedCallback(name, previous, next);
354
+ if (PROXY_REFLECTED_ATTRIBUTES[name]) {
355
+ this.proxy.setAttribute(name, next);
356
+ }
223
357
  }
224
- get label() {
225
- return this._label ?? this.text;
358
+ stepUp() {
359
+ makeStep(this, STEP_DIRECTION.up);
226
360
  }
227
- set label(value) {
228
- this._label = value;
361
+ stepDown() {
362
+ makeStep(this, STEP_DIRECTION.down);
229
363
  }
230
- // #endregion overrides
231
- }
364
+ };
365
+ __decorateClass([
366
+ attr({ attribute: "increment-button-aria-label" })
367
+ ], NumberField.prototype, "incrementButtonAriaLabel", 2);
232
368
  __decorateClass([
233
- attr({
234
- attribute: "text"
235
- })
236
- ], ListboxOption.prototype, "_text", 2);
369
+ attr({ attribute: "decrement-button-aria-label" })
370
+ ], NumberField.prototype, "decrementButtonAriaLabel", 2);
237
371
  __decorateClass([
238
- attr({
239
- attribute: "label"
240
- })
241
- ], ListboxOption.prototype, "_label", 2);
242
- applyMixins(ListboxOption, AffixIconWithTrailing);
372
+ attr
373
+ ], NumberField.prototype, "appearance", 2);
374
+ __decorateClass([
375
+ attr
376
+ ], NumberField.prototype, "shape", 2);
377
+ __decorateClass([
378
+ attr
379
+ ], NumberField.prototype, "autoComplete", 2);
380
+ NumberField = __decorateClass([
381
+ errorText,
382
+ formElements
383
+ ], NumberField);
384
+ const numberInput = document.createElement("input");
385
+ numberInput.type = "number";
386
+ NumberField.prototype.getValidValue = function(value) {
387
+ if (!this.isUserInput) {
388
+ numberInput.value = value;
389
+ return numberInput.value;
390
+ }
391
+ if (value === "" || value === "-" || value === ".") {
392
+ return value;
393
+ }
394
+ const decimalSplit = value.split(".");
395
+ let valueSuffix = "";
396
+ if (decimalSplit.length === 2 && decimalSplit[1] === "") {
397
+ valueSuffix = ".";
398
+ numberInput.value = value.slice(0, -1);
399
+ } else {
400
+ numberInput.value = value;
401
+ }
402
+ if (numberInput.value === "") {
403
+ return this.currentValue;
404
+ }
405
+ return numberInput.value + valueSuffix;
406
+ };
407
+ applyMixinsWithObservables(
408
+ NumberField,
409
+ Localized,
410
+ AffixIcon,
411
+ FormElementCharCount,
412
+ FormElementHelperText,
413
+ FormElementSuccessText
414
+ );
243
415
 
244
- const getClasses = ({ icon, disabled, selected, checked }) => classNames(
245
- "base",
416
+ const getStateClasses = ({
417
+ errorValidationMessage,
418
+ disabled,
419
+ value,
420
+ readOnly,
421
+ placeholder,
422
+ appearance,
423
+ shape,
424
+ label,
425
+ successText
426
+ }) => classNames(
427
+ ["error", Boolean(errorValidationMessage)],
246
428
  ["disabled", disabled],
247
- ["selected", Boolean(selected)],
248
- ["active", Boolean(checked)],
249
- ["icon", Boolean(icon)]
429
+ ["has-value", Boolean(value)],
430
+ ["readonly", readOnly],
431
+ ["placeholder", Boolean(placeholder)],
432
+ [`appearance-${appearance}`, Boolean(appearance)],
433
+ [`shape-${shape}`, Boolean(shape)],
434
+ ["no-label", !label],
435
+ ["success", !!successText]
250
436
  );
251
- const ListboxOptionTemplate = (context) => {
252
- const affixIconTemplate = affixIconTemplateFactory(context);
437
+ function renderLabel() {
438
+ return html` <label for="control" class="label">
439
+ ${(x) => x.label}
440
+ </label>`;
441
+ }
442
+ function setControlButtonShape(numberField) {
443
+ return numberField.shape === Shape.Pill ? Shape.Pill : null;
444
+ }
445
+ function getTabIndex(numberField) {
446
+ return numberField.disabled || numberField.readOnly ? "-1" : null;
447
+ }
448
+ function numberControlButtons(context) {
449
+ const buttonTag = context.tagFor(Button);
450
+ const dividerTag = context.tagFor(Divider);
451
+ return html`
452
+ <div class="control-buttons"
453
+ ?inert="${(x) => x.disabled || x.readOnly}">
454
+ <${buttonTag} id="subtract" icon="minus-line"
455
+ aria-label=${(x) => x.decrementButtonAriaLabel || x.locale.numberField.decrementButtonLabel}
456
+ shape="${setControlButtonShape}"
457
+ type="button"
458
+ size="condensed"
459
+ tabindex="${getTabIndex}"
460
+ @click="${(x) => x.stepDown()}"></${buttonTag}>
461
+ <${dividerTag} class="divider" orientation="vertical"></${dividerTag}>
462
+ <${buttonTag} id="add" icon="plus-line"
463
+ aria-label=${(x) => x.incrementButtonAriaLabel || x.locale.numberField.incrementButtonLabel}
464
+ shape="${setControlButtonShape}"
465
+ type="button"
466
+ size="condensed"
467
+ tabindex="${getTabIndex}"
468
+ @click="${(x) => x.stepUp()}"></${buttonTag}>
469
+ </div>
470
+ `;
471
+ }
472
+ const NumberFieldTemplate = (context) => {
253
473
  return html`
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>`)}
474
+ <div class="base ${getStateClasses}">
475
+ ${when((x) => x.label, renderLabel())}
476
+ <div class="fieldset">
477
+ <div class="wrapper">
478
+ <input
479
+ class="control"
480
+ id="control"
481
+ @input="${(x) => x.handleTextInput()}"
482
+ @change="${(x) => x.handleChange()}"
483
+ ?autofocus="${(x) => x.autofocus}"
484
+ ?disabled="${(x) => x.disabled}"
485
+ list="${(x) => x.list}"
486
+ step="${(x) => x.step ? x.step : null}"
487
+ max="${(x) => x.max}"
488
+ min="${(x) => x.min}"
489
+ maxlength="${(x) => x.maxlength}"
490
+ minlength="${(x) => x.minlength}"
491
+ placeholder="${(x) => x.placeholder}"
492
+ ?readonly="${(x) => x.readOnly}"
493
+ ?required="${(x) => x.required}"
494
+ size="${(x) => x.size}"
495
+ autocomplete="${(x) => x.autoComplete}"
496
+ name="${(x) => x.name}"
497
+ ?spellcheck="${(x) => x.spellcheck}"
498
+ :value="${(x) => x.value}"
499
+ type="text"
500
+ aria-atomic="${(x) => x.ariaAtomic}"
501
+ aria-busy="${(x) => x.ariaBusy}"
502
+ aria-current="${(x) => x.ariaCurrent}"
503
+ aria-details="${(x) => x.ariaDetails}"
504
+ aria-disabled="${(x) => x.ariaDisabled}"
505
+ aria-errormessage="${(x) => x.ariaErrormessage}"
506
+ aria-haspopup="${(x) => x.ariaHaspopup}"
507
+ aria-hidden="${(x) => x.ariaHidden}"
508
+ aria-invalid="${(x) => x.ariaInvalid}"
509
+ aria-keyshortcuts="${(x) => x.ariaKeyshortcuts}"
510
+ aria-label="${(x) => x.ariaLabel}"
511
+ aria-live="${(x) => x.ariaLive}"
512
+ aria-relevant="${(x) => x.ariaRelevant}"
513
+ aria-roledescription="${(x) => x.ariaRoledescription}"
514
+ ${ref("control")}
515
+ />
516
+ </div>
517
+ ${() => numberControlButtons(context)}
265
518
  </div>
266
- </template>
519
+ ${getFeedbackTemplate(context)}
520
+ </div>
267
521
  `;
268
522
  };
269
523
 
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,
275
- styles
524
+ const numberFieldDefinition = NumberField.compose({
525
+ baseName: "number-field",
526
+ template: NumberFieldTemplate,
527
+ styles,
528
+ shadowOptions: {
529
+ delegatesFocus: true
530
+ }
276
531
  });
277
- const listboxOptionRegistries = [
278
- listboxOptionDefinition(),
279
- ...iconRegistries
532
+ const numberFieldRegistries = [
533
+ numberFieldDefinition(),
534
+ ...buttonRegistries,
535
+ ...dividerRegistries
280
536
  ];
281
- const registerOption = registerFactory(listboxOptionRegistries);
537
+ const registerNumberField = registerFactory(numberFieldRegistries);
282
538
 
283
- export { ListboxOption as L, listboxOptionRegistries as a, isListboxOption as i, listboxOptionDefinition as l, registerOption as r };
539
+ export { numberFieldRegistries as a, numberFieldDefinition as n, registerNumberField as r };