@vonage/vivid 3.39.0 → 3.41.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 (182) hide show
  1. package/accordion/index.js +2 -2
  2. package/accordion-item/index.js +2 -2
  3. package/alert/index.js +7 -5
  4. package/audio-player/index.js +33 -0
  5. package/avatar/index.js +2 -2
  6. package/badge/index.js +2 -2
  7. package/banner/index.js +9 -5
  8. package/breadcrumb/index.js +1 -1
  9. package/breadcrumb-item/index.js +3 -3
  10. package/button/index.js +5 -4
  11. package/calendar/index.js +1 -1
  12. package/calendar-event/index.js +1 -1
  13. package/card/index.js +4 -3
  14. package/checkbox/index.js +3 -3
  15. package/combobox/index.js +9 -7
  16. package/custom-elements.json +809 -5
  17. package/data-grid/index.js +3 -2
  18. package/date-picker/index.js +11 -9
  19. package/date-range-picker/index.js +11 -9
  20. package/dialog/index.js +10 -6
  21. package/divider/index.js +1 -1
  22. package/elevation/index.js +1 -1
  23. package/empty-state/index.js +2 -2
  24. package/fab/index.js +3 -3
  25. package/file-picker/index.js +6 -5
  26. package/focus/index.js +1 -1
  27. package/header/index.js +2 -2
  28. package/icon/index.js +1 -1
  29. package/index.js +60 -55
  30. package/layout/index.js +1 -1
  31. package/lib/alert/alert.d.ts +3 -1
  32. package/lib/alert/locale.d.ts +3 -0
  33. package/lib/audio-player/audio-player.d.ts +17 -0
  34. package/lib/audio-player/audio-player.template.d.ts +4 -0
  35. package/lib/audio-player/definition.d.ts +4 -0
  36. package/lib/audio-player/locale.d.ts +5 -0
  37. package/lib/banner/banner.d.ts +3 -1
  38. package/lib/banner/locale.d.ts +3 -0
  39. package/lib/card/card.d.ts +3 -0
  40. package/lib/card/card.template.d.ts +1 -1
  41. package/lib/card/definition.d.ts +1 -0
  42. package/lib/checkbox/checkbox.d.ts +2 -0
  43. package/lib/components.d.ts +2 -0
  44. package/lib/dialog/dialog.d.ts +4 -0
  45. package/lib/dialog/locale.d.ts +3 -0
  46. package/lib/enums.d.ts +2 -1
  47. package/lib/menu/menu.d.ts +1 -0
  48. package/lib/number-field/locale.d.ts +4 -0
  49. package/lib/number-field/number-field.d.ts +4 -2
  50. package/lib/progress/progress.d.ts +1 -0
  51. package/lib/progress-ring/progress-ring.d.ts +1 -0
  52. package/lib/radio/radio.d.ts +1 -0
  53. package/lib/selectable-box/definition.d.ts +3 -0
  54. package/lib/selectable-box/selectable-box.d.ts +12 -0
  55. package/lib/selectable-box/selectable-box.template.d.ts +4 -0
  56. package/lib/slider/definition.d.ts +1 -0
  57. package/lib/slider/slider.d.ts +5 -0
  58. package/lib/split-button/locale.d.ts +3 -0
  59. package/lib/split-button/split-button.d.ts +3 -1
  60. package/lib/text-area/text-area.d.ts +3 -0
  61. package/lib/text-field/text-field.d.ts +5 -2
  62. package/listbox/index.js +5 -4
  63. package/locales/en-GB.js +21 -0
  64. package/locales/en-US.js +21 -0
  65. package/locales/ja-JP.js +21 -0
  66. package/locales/zh-CN.js +21 -0
  67. package/menu/index.js +9 -8
  68. package/menu-item/index.js +3 -3
  69. package/nav/index.js +1 -1
  70. package/nav-disclosure/index.js +3 -3
  71. package/nav-item/index.js +3 -3
  72. package/note/index.js +2 -2
  73. package/number-field/index.js +8 -6
  74. package/option/index.js +3 -3
  75. package/package.json +1 -1
  76. package/pagination/index.js +6 -5
  77. package/popup/index.js +7 -6
  78. package/progress/index.js +1 -1
  79. package/progress-ring/index.js +1 -1
  80. package/radio/index.js +2 -2
  81. package/radio-group/index.js +2 -2
  82. package/select/index.js +10 -8
  83. package/selectable-box/index.js +23 -0
  84. package/shared/Reflector.js +65 -0
  85. package/shared/date-picker/calendar/segment.d.ts +21 -0
  86. package/shared/date-picker/date-picker-base.d.ts +1 -0
  87. package/shared/definition.js +3 -3
  88. package/shared/definition10.js +89 -227
  89. package/shared/definition11.js +151 -29
  90. package/shared/definition12.js +37 -766
  91. package/shared/definition13.js +747 -106
  92. package/shared/definition14.js +122 -192
  93. package/shared/definition15.js +156 -664
  94. package/shared/definition16.js +576 -1123
  95. package/shared/definition17.js +1278 -143
  96. package/shared/definition18.js +64 -298
  97. package/shared/definition19.js +358 -211
  98. package/shared/definition2.js +2 -2
  99. package/shared/definition20.js +259 -67
  100. package/shared/definition21.js +66 -58
  101. package/shared/definition22.js +43 -84
  102. package/shared/definition23.js +76 -2352
  103. package/shared/definition24.js +2362 -45
  104. package/shared/definition25.js +63 -27
  105. package/shared/definition26.js +24 -51
  106. package/shared/definition27.js +36 -813
  107. package/shared/definition28.js +837 -49
  108. package/shared/definition29.js +52 -89
  109. package/shared/definition3.js +1 -1
  110. package/shared/definition30.js +88 -24
  111. package/shared/definition31.js +25 -12
  112. package/shared/definition32.js +12 -52
  113. package/shared/definition33.js +28 -487
  114. package/shared/definition34.js +442 -197
  115. package/shared/definition35.js +260 -185
  116. package/shared/definition36.js +188 -69
  117. package/shared/definition37.js +72 -52
  118. package/shared/definition38.js +65 -421
  119. package/shared/definition39.js +435 -35
  120. package/shared/definition4.js +44 -16
  121. package/shared/definition40.js +32 -680
  122. package/shared/definition41.js +661 -77
  123. package/shared/definition42.js +103 -555
  124. package/shared/definition43.js +76 -103
  125. package/shared/definition44.js +522 -87
  126. package/shared/definition45.js +133 -22
  127. package/shared/definition46.js +131 -58
  128. package/shared/definition47.js +16 -501
  129. package/shared/definition48.js +69 -23
  130. package/shared/definition49.js +477 -108
  131. package/shared/definition5.js +160 -44
  132. package/shared/definition50.js +25 -271
  133. package/shared/definition51.js +103 -122
  134. package/shared/definition52.js +277 -122
  135. package/shared/definition53.js +274 -103
  136. package/shared/definition54.js +126 -71
  137. package/shared/definition55.js +128 -294
  138. package/shared/definition56.js +91 -13
  139. package/shared/definition57.js +298 -39
  140. package/shared/definition58.js +11 -175
  141. package/shared/definition59.js +47 -0
  142. package/shared/definition6.js +43 -33
  143. package/shared/definition60.js +181 -0
  144. package/shared/definition7.js +39 -105
  145. package/shared/definition8.js +122 -38
  146. package/shared/definition9.js +56 -89
  147. package/shared/enums.js +72 -0
  148. package/shared/icon.js +2 -2
  149. package/shared/index2.js +28 -1
  150. package/shared/key-codes.js +1 -1
  151. package/shared/key-codes2.js +9 -0
  152. package/shared/listbox.js +3 -8
  153. package/shared/localization/Locale.d.ts +12 -0
  154. package/shared/patterns/form-elements/form-elements.d.ts +6 -6
  155. package/shared/presentationDate.js +196 -143
  156. package/shared/radio.js +7 -0
  157. package/shared/text-field.js +1 -1
  158. package/shared/utils/Reflector.d.ts +8 -0
  159. package/shared/utils/randomId.d.ts +1 -0
  160. package/side-drawer/index.js +1 -1
  161. package/slider/index.js +3 -3
  162. package/split-button/index.js +6 -3
  163. package/style.css +889 -722
  164. package/styles/core/all.css +1 -1
  165. package/styles/core/theme.css +1 -1
  166. package/styles/core/typography.css +1 -1
  167. package/styles/tokens/theme-dark.css +4 -4
  168. package/styles/tokens/theme-light.css +4 -4
  169. package/styles/tokens/vivid-2-compat.css +1 -1
  170. package/switch/index.js +3 -3
  171. package/tab/index.js +3 -3
  172. package/tab-panel/index.js +1 -1
  173. package/tabs/index.js +5 -5
  174. package/tag/index.js +3 -3
  175. package/tag-group/index.js +1 -1
  176. package/text-area/index.js +4 -3
  177. package/text-field/index.js +4 -3
  178. package/toggletip/index.js +8 -7
  179. package/tooltip/index.js +8 -7
  180. package/tree-item/index.js +3 -3
  181. package/tree-view/index.js +1 -1
  182. package/vivid.api.json +392 -0
@@ -1,8 +1,84 @@
1
- import { a as attr, F as FoundationElement, h as html, r as registerFactory } from './index.js';
2
- import { P as Popup, p as popupRegistries } from './definition58.js';
1
+ import { a as attr, o as observable, h as html, r as registerFactory } from './index.js';
2
+ import { f as focusRegistries } from './definition58.js';
3
+ import { a as iconRegistries } from './definition26.js';
4
+ import { A as AffixIcon, a as affixIconTemplateFactory } 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 { R as Reflector } from './Reflector.js';
7
+ import { m as memoizeWith } from './icon.js';
8
+ import { T as TextField$1 } from './text-field2.js';
9
+ import { a as applyMixins } from './apply-mixins.js';
10
+ import { s as styles } from './text-field.js';
11
+ import { f as focusTemplateFactory } from './focus2.js';
12
+ import { w as when } from './when.js';
13
+ import { s as slotted } from './slotted.js';
3
14
  import { c as classNames } from './class-names.js';
4
15
 
5
- const styles = "/**\n * Do not edit directly\n * Generated on Tue, 17 Oct 2023 15:27:52 GMT\n */\n.control {\n pointer-events: none;\n}\n\n.tooltip {\n width: var(--tooltip-inline-size, auto);\n}\n.tooltip-text {\n padding: 8px 12px;\n color: var(--vvd-color-canvas-text);\n font: var(--vvd-typography-base-bold);\n}";
16
+ // Unique ID creation requires a high quality random # generator. In the browser we therefore
17
+ // require the crypto API and do not support built-in fallback to lower quality random number
18
+ // generators (like Math.random()).
19
+ let getRandomValues;
20
+ const rnds8 = new Uint8Array(16);
21
+ function rng() {
22
+ // lazy load so that environments that need to polyfill have a chance to do so
23
+ if (!getRandomValues) {
24
+ // getRandomValues needs to be invoked in a context where "this" is a Crypto implementation.
25
+ getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto);
26
+
27
+ if (!getRandomValues) {
28
+ throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');
29
+ }
30
+ }
31
+
32
+ return getRandomValues(rnds8);
33
+ }
34
+
35
+ /**
36
+ * Convert array of 16 byte values to UUID string format of the form:
37
+ * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
38
+ */
39
+
40
+ const byteToHex = [];
41
+
42
+ for (let i = 0; i < 256; ++i) {
43
+ byteToHex.push((i + 0x100).toString(16).slice(1));
44
+ }
45
+
46
+ function unsafeStringify(arr, offset = 0) {
47
+ // Note: Be careful editing this code! It's been tuned for performance
48
+ // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434
49
+ return byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]];
50
+ }
51
+
52
+ const randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);
53
+ const native = {
54
+ randomUUID
55
+ };
56
+
57
+ function v4(options, buf, offset) {
58
+ if (native.randomUUID && !buf && !options) {
59
+ return native.randomUUID();
60
+ }
61
+
62
+ options = options || {};
63
+ const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`
64
+
65
+ rnds[6] = rnds[6] & 0x0f | 0x40;
66
+ rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided
67
+
68
+ if (buf) {
69
+ offset = offset || 0;
70
+
71
+ for (let i = 0; i < 16; ++i) {
72
+ buf[offset + i] = rnds[i];
73
+ }
74
+
75
+ return buf;
76
+ }
77
+
78
+ return unsafeStringify(rnds);
79
+ }
80
+
81
+ const generateRandomId = () => v4();
6
82
 
7
83
  var __defProp = Object.defineProperty;
8
84
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
@@ -15,126 +91,221 @@ var __decorateClass = (decorators, target, key, kind) => {
15
91
  __defProp(target, key, result);
16
92
  return result;
17
93
  };
18
- class Tooltip extends FoundationElement {
94
+ const safariWorkaroundClassName = "_vvd-3-text-field-safari-workaround";
95
+ const getSafariWorkaroundStyleSheet = memoizeWith(() => "", () => {
96
+ const styleSheet = new CSSStyleSheet();
97
+ const supportsReplaceSync = "replaceSync" in styleSheet;
98
+ if (supportsReplaceSync) {
99
+ styleSheet.replaceSync(`
100
+ .${safariWorkaroundClassName}::placeholder {
101
+ opacity: 1 !important;
102
+ -webkit-text-fill-color: var(--_low-ink-color) !important;
103
+ }`);
104
+ }
105
+ return styleSheet;
106
+ });
107
+ const installSafariWorkaroundStyle = (forElement) => {
108
+ const root = forElement.getRootNode();
109
+ const workaroundStyleSheet = getSafariWorkaroundStyleSheet();
110
+ const supportsAdoptedStyleSheets = "adoptedStyleSheets" in root;
111
+ if (!supportsAdoptedStyleSheets) {
112
+ return;
113
+ }
114
+ if (!root.adoptedStyleSheets.includes(workaroundStyleSheet)) {
115
+ root.adoptedStyleSheets = [...root.adoptedStyleSheets, workaroundStyleSheet];
116
+ }
117
+ };
118
+ let TextField = class extends TextField$1 {
19
119
  constructor() {
20
120
  super(...arguments);
21
- this.#anchorEl = null;
22
- this.open = false;
23
- this.#observeMissingAnchor = (anchorId) => {
24
- this.#observer = new MutationObserver(() => {
25
- const anchor = document.getElementById(anchorId);
26
- if (anchor) {
27
- this.#anchorEl = anchor;
28
- this.#anchorUpdated();
29
- this.#observer.disconnect();
30
- this.#observer = void 0;
31
- }
32
- });
33
- this.#observer.observe(document.body, { childList: true, subtree: true });
34
- };
35
- this.#show = () => {
36
- this.open = true;
37
- };
38
- this.#hide = () => {
39
- this.open = false;
40
- };
41
- this.#closeOnEscape = (e) => {
42
- if (e.key === "Escape")
43
- this.#hide();
44
- };
121
+ /**
122
+ * @internal
123
+ */
124
+ this._labelEl = null;
45
125
  }
46
- #anchorEl;
47
- #observer;
48
- anchorChanged(_, newValue) {
49
- if (this.#anchorEl)
50
- this.#removeEventListener();
51
- this.#observer?.disconnect();
52
- this.#anchorEl = newValue instanceof HTMLElement ? newValue : document.getElementById(newValue);
53
- if (this.#anchorEl) {
54
- this.#anchorUpdated();
55
- } else {
56
- this.#observeMissingAnchor(newValue);
126
+ /**
127
+ * @internal
128
+ */
129
+ labelChanged() {
130
+ if (this._labelEl) {
131
+ this.#handleLabelChange(this._labelEl);
57
132
  }
58
133
  }
59
- #observeMissingAnchor;
60
- disconnectedCallback() {
61
- super.disconnectedCallback();
62
- this.#removeEventListener();
63
- this.#observer?.disconnect();
64
- document.removeEventListener("keydown", this.#closeOnEscape);
65
- }
66
- #anchorUpdated() {
67
- this.#removeEventListener();
68
- this.#addEventListener();
134
+ #handleLabelChange(labelEl) {
135
+ if (!this.label) {
136
+ labelEl.remove();
137
+ } else {
138
+ labelEl.textContent = this.label;
139
+ if (!labelEl.isConnected) {
140
+ this.appendChild(labelEl);
141
+ }
142
+ }
69
143
  }
70
- #addEventListener() {
71
- if (this.#anchorEl) {
72
- this.#anchorEl.addEventListener("mouseover", this.#show);
73
- this.#anchorEl.addEventListener("mouseout", this.#hide);
74
- this.#anchorEl.addEventListener("focusin", this.#show);
75
- this.#anchorEl.addEventListener("focusout", this.#hide);
144
+ #reflectToInput;
145
+ connectedCallback() {
146
+ super.connectedCallback();
147
+ if (!this.control) {
148
+ const uniqueId = this.id || generateRandomId();
149
+ const controlId = `vvd-text-field-control-${uniqueId}`;
150
+ const input = document.createElement("input");
151
+ input.slot = "_control";
152
+ input.id = controlId;
153
+ input.className = safariWorkaroundClassName;
154
+ this.control = input;
155
+ this.#reflectToInput = new Reflector(this, input);
156
+ this.#reflectToInput.booleanAttribute("autofocus", "autofocus");
157
+ this.#reflectToInput.booleanAttribute("disabled", "disabled");
158
+ this.#reflectToInput.booleanAttribute("readOnly", "readonly");
159
+ this.#reflectToInput.booleanAttribute("required", "required");
160
+ this.#reflectToInput.booleanAttribute("spellcheck", "spellcheck");
161
+ this.#reflectToInput.attribute("list", "list");
162
+ this.#reflectToInput.attribute("maxlength", "maxlength");
163
+ this.#reflectToInput.attribute("minlength", "minlength");
164
+ this.#reflectToInput.attribute("pattern", "pattern");
165
+ this.#reflectToInput.attribute("placeholder", "placeholder");
166
+ this.#reflectToInput.attribute("size", "size");
167
+ this.#reflectToInput.attribute("autoComplete", "autocomplete");
168
+ this.#reflectToInput.attribute("type", "type");
169
+ this.#reflectToInput.attribute("ariaAtomic", "aria-atomic");
170
+ this.#reflectToInput.attribute("ariaBusy", "aria-busy");
171
+ this.#reflectToInput.attribute("ariaControls", "aria-controls");
172
+ this.#reflectToInput.attribute("ariaCurrent", "aria-current");
173
+ this.#reflectToInput.attribute("ariaDescribedby", "aria-describedby");
174
+ this.#reflectToInput.attribute("ariaDetails", "aria-details");
175
+ this.#reflectToInput.attribute("ariaDisabled", "aria-disabled");
176
+ this.#reflectToInput.attribute("ariaErrormessage", "aria-errormessage");
177
+ this.#reflectToInput.attribute("ariaFlowto", "aria-flowto");
178
+ this.#reflectToInput.attribute("ariaHaspopup", "aria-haspopup");
179
+ this.#reflectToInput.attribute("ariaHidden", "aria-hidden");
180
+ this.#reflectToInput.attribute("ariaInvalid", "aria-invalid");
181
+ this.#reflectToInput.attribute("ariaKeyshortcuts", "aria-keyshortcuts");
182
+ this.#reflectToInput.attribute("ariaLabel", "aria-label");
183
+ this.#reflectToInput.attribute("ariaLabelledby", "aria-labelledby");
184
+ this.#reflectToInput.attribute("ariaLive", "aria-live");
185
+ this.#reflectToInput.attribute("ariaOwns", "aria-owns");
186
+ this.#reflectToInput.attribute("ariaRelevant", "aria-relevant");
187
+ this.#reflectToInput.attribute("ariaRoledescription", "aria-roledescription");
188
+ this.#reflectToInput.property("value", "value", true);
189
+ input.addEventListener("input", () => {
190
+ this.handleTextInput();
191
+ });
192
+ input.addEventListener("change", () => {
193
+ this.handleChange();
194
+ });
195
+ input.addEventListener("blur", () => {
196
+ this.$emit("blur");
197
+ });
198
+ input.addEventListener("focus", () => {
199
+ this.$emit("focus");
200
+ });
201
+ this.appendChild(input);
202
+ const label = document.createElement("label");
203
+ label.slot = "_label";
204
+ label.htmlFor = controlId;
205
+ this._labelEl = label;
206
+ this.#handleLabelChange(label);
207
+ installSafariWorkaroundStyle(this);
76
208
  }
77
209
  }
78
- #removeEventListener() {
79
- this.#anchorEl?.removeEventListener("mouseover", this.#show);
80
- this.#anchorEl?.removeEventListener("mouseout", this.#hide);
81
- this.#anchorEl?.removeEventListener("focusin", this.#show);
82
- this.#anchorEl?.removeEventListener("focusout", this.#hide);
210
+ disconnectedCallback() {
211
+ super.disconnectedCallback();
212
+ this.#reflectToInput.destroy();
83
213
  }
84
- #show;
85
- #hide;
86
- #closeOnEscape;
87
- openChanged(_, newValue) {
88
- if (_ === void 0)
89
- return;
90
- if (newValue) {
91
- document.addEventListener("keydown", this.#closeOnEscape);
92
- } else {
93
- document.removeEventListener("keydown", this.#closeOnEscape);
94
- }
214
+ focus() {
215
+ this.control?.focus();
95
216
  }
96
- }
217
+ };
97
218
  __decorateClass([
98
219
  attr
99
- ], Tooltip.prototype, "text", 2);
220
+ ], TextField.prototype, "appearance", 2);
100
221
  __decorateClass([
101
- attr({ mode: "fromView" })
102
- ], Tooltip.prototype, "placement", 2);
222
+ attr
223
+ ], TextField.prototype, "shape", 2);
103
224
  __decorateClass([
104
- attr({ mode: "boolean" })
105
- ], Tooltip.prototype, "open", 2);
225
+ attr
226
+ ], TextField.prototype, "autoComplete", 2);
106
227
  __decorateClass([
107
- attr({ mode: "fromView" })
108
- ], Tooltip.prototype, "anchor", 2);
228
+ observable
229
+ ], TextField.prototype, "actionItemsSlottedContent", 2);
230
+ __decorateClass([
231
+ observable
232
+ ], TextField.prototype, "leadingActionItemsSlottedContent", 2);
233
+ TextField = __decorateClass([
234
+ errorText,
235
+ formElements
236
+ ], TextField);
237
+ applyMixins(TextField, AffixIcon, FormElementCharCount, FormElementHelperText, FormElementSuccessText);
109
238
 
110
- const getClasses = ({
111
- open
239
+ const getStateClasses = ({
240
+ errorValidationMessage,
241
+ disabled,
242
+ value,
243
+ readOnly,
244
+ placeholder,
245
+ appearance,
246
+ shape,
247
+ label,
248
+ successText,
249
+ actionItemsSlottedContent,
250
+ leadingActionItemsSlottedContent,
251
+ icon
112
252
  }) => classNames(
113
- "control",
114
- ["open", Boolean(open)]
253
+ ["error connotation-alert", Boolean(errorValidationMessage)],
254
+ ["disabled", disabled],
255
+ ["has-value", Boolean(value)],
256
+ ["readonly", readOnly],
257
+ ["placeholder", Boolean(placeholder)],
258
+ [`appearance-${appearance}`, Boolean(appearance)],
259
+ [`shape-${shape}`, Boolean(shape)],
260
+ ["no-label", !label],
261
+ ["has-icon", !!icon],
262
+ ["success connotation-success", Boolean(successText)],
263
+ ["action-items", !!actionItemsSlottedContent?.length],
264
+ ["leading-action-items", !!leadingActionItemsSlottedContent?.length],
265
+ ["no-leading", !(leadingActionItemsSlottedContent?.length || icon)]
115
266
  );
116
- const TooltipTemplate = (context) => {
117
- const popupTag = context.tagFor(Popup);
267
+ function renderCharCount() {
268
+ return html`
269
+ <span class="char-count">${(x) => x.value ? x.value.length : 0} / ${(x) => x.maxlength}</span>
270
+ `;
271
+ }
272
+ const TextfieldTemplate = (context) => {
273
+ const affixIconTemplate = affixIconTemplateFactory(context);
274
+ const focusTemplate = focusTemplateFactory(context);
118
275
  return html`
119
- <${popupTag} class="${getClasses}" arrow alternate
120
- :placement=${(x) => x.placement}
121
- :anchor="${(x) => x.anchor}"
122
- :open=${(x) => x.open}
123
- exportparts="vvd-theme-alternate">
124
- <div class="tooltip" role="tooltip">
125
- <header part="vvd-theme-alternate" class="tooltip-header">
126
- <div class="tooltip-text">${(x) => x.text}</div>
127
- </header>
128
- </div>
129
- </${popupTag}>`;
276
+ <div class="base ${getStateClasses}">
277
+ ${when((x) => x.charCount && x.maxlength, renderCharCount())}
278
+ <slot class="label" name="_label"></slot>
279
+ <div class="fieldset">
280
+ <div class="leading-items-wrapper">
281
+ <slot name="leading-action-items" ${slotted("leadingActionItemsSlottedContent")}></slot>
282
+ ${(x) => affixIconTemplate(x.icon)}
283
+ </div>
284
+
285
+ <div class="wrapper">
286
+ <slot class="control" name="_control"></slot>
287
+ ${() => focusTemplate}
288
+ </div>
289
+ <div class="action-items-wrapper">
290
+ <slot name="action-items" ${slotted("actionItemsSlottedContent")}></slot>
291
+ </div>
292
+
293
+ </div>
294
+ ${when((x) => !x.successText && !x.errorValidationMessage && x.helperText?.length, getFeedbackTemplate("helper", context))}
295
+ ${when((x) => !x.successText && x.errorValidationMessage, getFeedbackTemplate("error", context))}
296
+ ${when((x) => x.successText, getFeedbackTemplate("success", context))}
297
+ </div>`;
130
298
  };
131
299
 
132
- const tooltipDefinition = Tooltip.compose({
133
- baseName: "tooltip",
134
- template: TooltipTemplate,
135
- styles
300
+ const textFieldDefinition = TextField.compose({
301
+ baseName: "text-field",
302
+ template: TextfieldTemplate,
303
+ styles,
304
+ shadowOptions: {
305
+ delegatesFocus: true
306
+ }
136
307
  });
137
- const tooltipRegistries = [tooltipDefinition(), ...popupRegistries];
138
- const registerTooltip = registerFactory(tooltipRegistries);
308
+ const textFieldRegistries = [textFieldDefinition(), ...iconRegistries, ...focusRegistries];
309
+ const registerTextField = registerFactory(textFieldRegistries);
139
310
 
140
- export { tooltipRegistries as a, registerTooltip as r, tooltipDefinition as t };
311
+ export { TextField as T, textFieldRegistries as a, registerTextField as r, textFieldDefinition as t };
@@ -1,18 +1,9 @@
1
- import { a as attr, h as html, r as registerFactory } from './index.js';
2
- import { a as iconRegistries } from './definition25.js';
3
- import { f as focusRegistries } from './definition56.js';
4
- import { A as AffixIcon, a as affixIconTemplateFactory, I as IconWrapper } from './affix.js';
5
- import { T as TreeItem$1 } from './tree-item.js';
6
- import { a as applyMixins } from './apply-mixins.js';
7
- import { I as Icon } from './icon.js';
8
- import { f as focusTemplateFactory } from './focus2.js';
9
- import { e as elements, s as slotted } from './slotted.js';
10
- import { c as children } from './children.js';
1
+ import { a as attr, F as FoundationElement, D as DOM, h as html, r as registerFactory } from './index.js';
2
+ import { P as Popup, p as popupRegistries } from './definition60.js';
11
3
  import { w as when } from './when.js';
12
4
  import { c as classNames } from './class-names.js';
13
- import { r as ref } from './ref.js';
14
5
 
15
- const styles = "/**\n * Do not edit directly\n * Generated on Tue, 17 Oct 2023 15:27:52 GMT\n */\n@supports selector(:focus-visible) {\n :host(:focus-visible) {\n outline: none;\n }\n}\n:host([disabled]) {\n cursor: not-allowed;\n}\n\n.control {\n position: relative;\n display: inline-flex;\n box-sizing: border-box;\n align-items: center;\n background-color: var(--_appearance-color-fill);\n border-radius: 6px;\n box-shadow: inset 0 0 0 1px var(--_appearance-color-outline);\n color: var(--_appearance-color-text);\n font: var(--vvd-typography-base);\n gap: 12px;\n hyphens: auto;\n inline-size: 100%;\n min-block-size: calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density, 0), 2)));\n padding-inline: 16px;\n text-decoration: none;\n vertical-align: middle;\n word-break: break-word;\n}\n.control {\n --_appearance-color-text: var(--_connotation-color-primary);\n --_appearance-color-fill: transparent;\n --_appearance-color-outline: transparent;\n}\n.control:where(:disabled, .disabled) {\n --_appearance-color-text: var(--vvd-color-neutral-300);\n --_appearance-color-fill: transparent;\n --_appearance-color-outline: transparent;\n}\n.control:where(:hover, .hover):where(:not(:disabled, .disabled, .readonly)) {\n --_appearance-color-text: var(--_connotation-color-primary);\n --_appearance-color-fill: var(--_connotation-color-faint);\n --_appearance-color-outline: transparent;\n}\n.control:where(:active, .active):where(:not(:disabled, .disabled)) {\n --_appearance-color-text: var(--_connotation-color-primary);\n --_appearance-color-fill: var(--_connotation-color-soft);\n --_appearance-color-outline: transparent;\n}\n.control:where(.selected, [aria-current]):where(:not(:disabled, .disabled, :hover, .hover)) {\n --_appearance-color-text: var(--_connotation-color-primary-text);\n --_appearance-color-fill: var(--_connotation-color-primary);\n --_appearance-color-outline: transparent;\n}\n.control:where(.selected, [aria-current]):where(:hover, .hover) {\n --_appearance-color-text: var(--_connotation-color-primary-text);\n --_appearance-color-fill: var(--_connotation-color-primary-increment);\n --_appearance-color-outline: transparent;\n}\n.control {\n /* @cssprop [--vvd-tree-item-accent-primary=var(--vvd-color-canvas-text)] */\n --_connotation-color-primary: var(--vvd-tree-item-accent-primary, var(--vvd-color-canvas-text));\n /* @cssprop [--vvd-tree-item-accent-primary-text=var(--vvd-color-canvas)] */\n --_connotation-color-primary-text: var(--vvd-tree-item-accent-primary-text, var(--vvd-color-canvas));\n /* @cssprop [--vvd-tree-item-accent-primary-increment=var(--vvd-color-neutral-800)] */\n --_connotation-color-primary-increment: var(--vvd-tree-item-accent-primary-increment, var(--vvd-color-neutral-800));\n /* @cssprop [--vvd-tree-item-accent-faint=var(--vvd-color-neutral-50)] */\n --_connotation-color-faint: var(--vvd-tree-item-accent-faint, var(--vvd-color-neutral-50));\n /* @cssprop [--vvd-tree-item-accent-soft=var(--vvd-color-neutral-100)] */\n --_connotation-color-soft: var(--vvd-tree-item-accent-soft, var(--vvd-color-neutral-100));\n}\n@supports selector(:focus-visible) {\n .control:focus-visible {\n outline: none;\n }\n}\n@supports (user-select: none) {\n .control {\n user-select: none;\n }\n}\n.control:not(.disabled) {\n cursor: pointer;\n}\n.control.disabled {\n pointer-events: none;\n}\n.control .text {\n font: var(--vvd-typography-base);\n}\n\n.expandCollapseButton {\n display: flex;\n align-items: center;\n border-radius: 6px;\n font-size: 20px;\n}\n.expandCollapseButton .expandCollapseIcon {\n margin: 4px;\n}\n.expandCollapseButton:hover {\n background-color: var(--vvd-color-neutral-100);\n}\n.selected .expandCollapseButton:hover {\n background-color: var(--vvd-color-neutral-700);\n}\n\n.items {\n display: flex;\n flex-direction: column;\n gap: 4px;\n margin-block: 4px;\n padding-inline-start: 48px;\n}\n\n:host(:not(:focus-visible)) .focus-indicator {\n display: none;\n}\n\nslot[name=icon] {\n font-size: 20px;\n line-height: 1;\n}\n.control:not(.disabled, .selected) slot[name=icon] {\n color: var(--vvd-color-neutral-600);\n}";
6
+ const styles = "/**\n * Do not edit directly\n * Generated on Wed, 22 Nov 2023 16:09:43 GMT\n */\n.control {\n display: inline-block;\n}\n\n.content-wrapper {\n width: var(--toggletip-inline-size, auto);\n padding: 16px;\n}\n\n.headline {\n font: var(--vvd-typography-base-bold);\n}\n\n.action-items {\n display: flex;\n justify-content: flex-end;\n gap: 10px;\n}\n\n::slotted([slot=action-items]) {\n margin-block-start: 16px;\n}";
16
7
 
17
8
  var __defProp = Object.defineProperty;
18
9
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
@@ -25,71 +16,135 @@ var __decorateClass = (decorators, target, key, kind) => {
25
16
  __defProp(target, key, result);
26
17
  return result;
27
18
  };
28
- class TreeItem extends TreeItem$1 {
19
+ class Toggletip extends FoundationElement {
20
+ constructor() {
21
+ super(...arguments);
22
+ this.#anchorEl = null;
23
+ this.#observeMissingAnchor = (anchorId) => {
24
+ this.#observer = new MutationObserver(() => {
25
+ const anchor = document.getElementById(anchorId);
26
+ if (anchor) {
27
+ this.#anchorEl = anchor;
28
+ this.#setupAnchor(this.#anchorEl);
29
+ this.#observer.disconnect();
30
+ this.#observer = void 0;
31
+ }
32
+ });
33
+ this.#observer.observe(document.body, { childList: true, subtree: true });
34
+ };
35
+ this.#ANCHOR_ARIA_LABEL_SUFFIX = " ; Show more information";
36
+ this.alternate = false;
37
+ this.placement = "right";
38
+ this.anchor = "";
39
+ this.open = false;
40
+ this.#openIfClosed = () => {
41
+ if (!this.open)
42
+ DOM.queueUpdate(() => this.open = true);
43
+ };
44
+ this.#closeOnClickOutside = (e) => {
45
+ if (!this.contains(e.target))
46
+ this.open = false;
47
+ };
48
+ this.#closeOnEscape = (e) => {
49
+ if (e.key === "Escape")
50
+ this.open = false;
51
+ };
52
+ }
53
+ #observer;
54
+ #anchorEl;
55
+ #observeMissingAnchor;
56
+ #ANCHOR_ARIA_LABEL_SUFFIX;
57
+ anchorChanged(_, newValue) {
58
+ if (this.#anchorEl)
59
+ this.#cleanupAnchor(this.#anchorEl);
60
+ this.#observer?.disconnect();
61
+ this.#anchorEl = newValue instanceof HTMLElement ? newValue : document.getElementById(newValue);
62
+ if (this.#anchorEl) {
63
+ this.#setupAnchor(this.#anchorEl);
64
+ } else {
65
+ this.#observeMissingAnchor(newValue);
66
+ }
67
+ }
68
+ openChanged(oldValue, newValue) {
69
+ if (oldValue === void 0)
70
+ return;
71
+ if (newValue) {
72
+ document.addEventListener("click", this.#closeOnClickOutside);
73
+ document.addEventListener("keydown", this.#closeOnEscape);
74
+ this.setAttribute("role", "status");
75
+ } else {
76
+ document.removeEventListener("click", this.#closeOnClickOutside);
77
+ document.removeEventListener("keydown", this.#closeOnEscape);
78
+ this.removeAttribute("role");
79
+ }
80
+ if (this.#anchorEl) {
81
+ this.#anchorEl.ariaExpanded = this.open.toString();
82
+ }
83
+ }
84
+ disconnectedCallback() {
85
+ super.disconnectedCallback();
86
+ if (this.#anchorEl)
87
+ this.#cleanupAnchor(this.#anchorEl);
88
+ this.#observer?.disconnect();
89
+ document.removeEventListener("keydown", this.#closeOnEscape);
90
+ }
91
+ #setupAnchor(a) {
92
+ a.addEventListener("click", this.#openIfClosed, true);
93
+ a.ariaLabel = (a.ariaLabel ?? "") + this.#ANCHOR_ARIA_LABEL_SUFFIX;
94
+ }
95
+ #cleanupAnchor(a) {
96
+ a.removeEventListener("click", this.#openIfClosed, true);
97
+ if (a.ariaLabel)
98
+ a.ariaLabel = a.ariaLabel.replace(this.#ANCHOR_ARIA_LABEL_SUFFIX, "");
99
+ }
100
+ #openIfClosed;
101
+ #closeOnClickOutside;
102
+ #closeOnEscape;
29
103
  }
30
104
  __decorateClass([
31
105
  attr
32
- ], TreeItem.prototype, "text", 2);
33
- applyMixins(TreeItem, AffixIcon);
106
+ ], Toggletip.prototype, "headline", 2);
107
+ __decorateClass([
108
+ attr({ mode: "boolean" })
109
+ ], Toggletip.prototype, "alternate", 2);
110
+ __decorateClass([
111
+ attr({ mode: "fromView" })
112
+ ], Toggletip.prototype, "placement", 2);
113
+ __decorateClass([
114
+ attr({ mode: "fromView" })
115
+ ], Toggletip.prototype, "anchor", 2);
116
+ __decorateClass([
117
+ attr({ mode: "boolean" })
118
+ ], Toggletip.prototype, "open", 2);
34
119
 
35
- const getClasses = ({
36
- disabled,
37
- selected
38
- }) => classNames(
39
- "control",
40
- ["disabled", disabled],
41
- ["selected", Boolean(selected)]
42
- );
43
- const expandCollapseButton = (context) => {
44
- const iconTag = context.tagFor(Icon);
120
+ const getClasses = (_) => classNames("control");
121
+ const ToggletipTemplate = (context) => {
122
+ const popup = context.tagFor(Popup);
45
123
  return html`
46
- <div aria-hidden="true"
47
- class="expandCollapseButton"
48
- @click="${(x, c) => x.handleExpandCollapseButtonClick(c.event)}"
49
- ${ref("expandCollapseButton")}
50
- >
51
- <${iconTag} class="expandCollapseIcon" name="${(x) => x.expanded ? "chevron-down-line" : "chevron-right-line"}"></${iconTag}>
52
- </div>`;
53
- };
54
- const TreeItemTemplate = (context) => {
55
- const affixIconTemplate = affixIconTemplateFactory(context);
56
- const focusTemplate = focusTemplateFactory(context);
57
- return html`
58
- <template
59
- role="treeitem"
60
- slot="${(x) => x.isNestedItem() ? "item" : void 0}"
61
- tabindex="-1"
62
- aria-expanded="${(x) => x.childItems && x.childItems.length > 0 ? x.expanded : void 0}"
63
- aria-selected="${(x) => x.selected}"
64
- aria-disabled="${(x) => x.disabled}"
65
- @focusin="${(x, c) => x.handleFocus(c.event)}"
66
- @focusout="${(x, c) => x.handleBlur(c.event)}"
67
- ${children({ property: "childItems", filter: elements(context.tagFor(TreeItem)) })}
68
- >
69
- <div class="${getClasses}">
70
- ${() => focusTemplate}
71
- ${when((x) => x.childItems && x.childItems.length > 0, expandCollapseButton(context))}
72
- ${(x) => affixIconTemplate(x.icon, IconWrapper.Slot)}
73
- ${(x) => x.text}
124
+ <${popup}
125
+ class="${getClasses}"
126
+ arrow
127
+ :anchor="${(x) => x.anchor}"
128
+ :open="${(x) => x.open}"
129
+ ?alternate="${(x) => !x.alternate}"
130
+ placement="${(x) => x.placement}"
131
+ exportparts="vvd-theme-alternate"
132
+ >
133
+ <div class="content-wrapper">
134
+ ${when((x) => x.headline, html`<header class="headline">${(x) => x.headline}</header>`)}
135
+ <slot></slot>
136
+ <footer class="action-items"><slot name="action-items"></slot></footer>
74
137
  </div>
75
- ${when(
76
- (x) => x.childItems && x.childItems.length > 0 && x.expanded,
77
- html`
78
- <div role="group" class="items">
79
- <slot name="item" ${slotted("items")}></slot>
80
- </div>`
81
- )}
82
- </template>`;
138
+ </${popup}>
139
+ `;
83
140
  };
84
141
 
85
- const treeItemDefinition = TreeItem.compose(
86
- {
87
- baseName: "tree-item",
88
- template: TreeItemTemplate,
89
- styles
90
- }
91
- );
92
- const treeItemRegistries = [treeItemDefinition(), ...iconRegistries, ...focusRegistries];
93
- const registerTreeItem = registerFactory(treeItemRegistries);
142
+ const toggletipDefinition = Toggletip.compose({
143
+ baseName: "toggletip",
144
+ template: ToggletipTemplate,
145
+ styles
146
+ });
147
+ const toggletipRegistries = [toggletipDefinition(), ...popupRegistries];
148
+ const registerToggletip = registerFactory(toggletipRegistries);
94
149
 
95
- export { treeItemRegistries as a, registerTreeItem as r, treeItemDefinition as t };
150
+ export { toggletipRegistries as a, registerToggletip as r, toggletipDefinition as t };