@vonage/vivid 3.31.0 → 3.34.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 (237) hide show
  1. package/accordion/index.js +5 -5
  2. package/accordion-item/index.js +4 -4
  3. package/action-group/index.js +1 -1
  4. package/alert/index.js +8 -7
  5. package/avatar/index.js +2 -2
  6. package/badge/index.js +2 -2
  7. package/banner/index.js +5 -5
  8. package/breadcrumb/index.js +1 -1
  9. package/breadcrumb-item/index.js +3 -3
  10. package/button/index.js +4 -4
  11. package/calendar/index.js +1 -1
  12. package/calendar-event/index.js +1 -1
  13. package/card/index.js +3 -3
  14. package/checkbox/index.js +7 -4
  15. package/combobox/index.js +10 -9
  16. package/custom-elements.json +996 -29
  17. package/data-grid/index.js +2 -2
  18. package/date-picker/index.js +35 -0
  19. package/dialog/index.js +6 -6
  20. package/divider/index.js +1 -1
  21. package/elevation/index.js +1 -1
  22. package/empty-state/index.js +2 -2
  23. package/fab/index.js +4 -4
  24. package/file-picker/index.js +7 -6
  25. package/focus/index.js +1 -1
  26. package/header/index.js +2 -2
  27. package/icon/index.js +1 -1
  28. package/index.d.ts +1 -0
  29. package/index.js +68 -66
  30. package/layout/index.js +1 -1
  31. package/lib/button/button.d.ts +2 -0
  32. package/lib/calendar/calendar.d.ts +1 -1
  33. package/lib/components.d.ts +20 -19
  34. package/lib/date-picker/calendar/calendarGrid.d.ts +17 -0
  35. package/lib/date-picker/calendar/dateStr.d.ts +7 -0
  36. package/lib/date-picker/calendar/month.d.ts +12 -0
  37. package/lib/date-picker/calendar/monthPickerGrid.d.ts +10 -0
  38. package/lib/date-picker/calendar/presentationDate.d.ts +4 -0
  39. package/lib/date-picker/calendar/year.d.ts +2 -0
  40. package/lib/date-picker/date-picker.d.ts +18 -0
  41. package/lib/date-picker/date-picker.template.d.ts +4 -0
  42. package/lib/date-picker/definition.d.ts +3 -0
  43. package/lib/date-picker/locale.d.ts +21 -0
  44. package/lib/icon/icon.d.ts +0 -1
  45. package/lib/listbox/listbox.d.ts +9 -1
  46. package/lib/select/select.d.ts +4 -2
  47. package/lib/text-field/text-field.d.ts +1 -0
  48. package/listbox/index.js +22 -17
  49. package/locales/en-GB.d.ts +3 -0
  50. package/locales/en-GB.js +59 -0
  51. package/locales/en-US.d.ts +3 -0
  52. package/locales/en-US.js +59 -0
  53. package/locales/ja-JP.d.ts +3 -0
  54. package/locales/ja-JP.js +59 -0
  55. package/locales/zh-CN.d.ts +3 -0
  56. package/locales/zh-CN.js +59 -0
  57. package/menu/index.js +8 -8
  58. package/menu-item/index.js +4 -4
  59. package/nav/index.js +1 -1
  60. package/nav-disclosure/index.js +3 -3
  61. package/nav-item/index.js +3 -3
  62. package/note/index.js +4 -4
  63. package/number-field/index.js +8 -7
  64. package/option/index.js +5 -4
  65. package/package.json +2 -15
  66. package/pagination/index.js +5 -5
  67. package/popup/index.js +6 -6
  68. package/progress/index.js +1 -1
  69. package/progress-ring/index.js +1 -1
  70. package/radio/index.js +2 -2
  71. package/radio-group/index.js +1 -1
  72. package/select/index.js +10 -9
  73. package/shared/affix.js +25 -9
  74. package/shared/apply-mixins.js +1 -1
  75. package/shared/breadcrumb-item.js +5 -5
  76. package/shared/button.js +13 -13
  77. package/shared/calendar-event.js +36 -16
  78. package/shared/definition.js +133 -194
  79. package/shared/definition10.js +225 -40
  80. package/shared/definition11.js +36 -32
  81. package/shared/definition12.js +763 -98
  82. package/shared/definition13.js +125 -89
  83. package/shared/definition14.js +207 -27
  84. package/shared/definition15.js +710 -731
  85. package/shared/definition16.js +1289 -47
  86. package/shared/definition17.js +6113 -93
  87. package/shared/definition18.js +242 -164
  88. package/shared/definition19.js +47 -692
  89. package/shared/definition2.js +199 -117
  90. package/shared/definition20.js +59 -1671
  91. package/shared/definition21.js +95 -255
  92. package/shared/definition22.js +2218 -1167
  93. package/shared/definition23.js +57 -219
  94. package/shared/definition24.js +27 -68
  95. package/shared/definition25.js +54 -38
  96. package/shared/definition26.js +395 -70
  97. package/shared/definition27.js +381 -2223
  98. package/shared/definition28.js +85 -44
  99. package/shared/definition29.js +27 -40
  100. package/shared/definition3.js +61 -24
  101. package/shared/definition30.js +13 -427
  102. package/shared/definition31.js +49 -360
  103. package/shared/definition32.js +466 -13
  104. package/shared/definition33.js +273 -63
  105. package/shared/definition34.js +195 -25
  106. package/shared/definition35.js +86 -35
  107. package/shared/definition36.js +66 -427
  108. package/shared/definition37.js +430 -190
  109. package/shared/definition38.js +34 -52
  110. package/shared/definition39.js +683 -31
  111. package/shared/definition4.js +157 -12
  112. package/shared/definition40.js +97 -422
  113. package/shared/definition41.js +473 -543
  114. package/shared/definition42.js +122 -73
  115. package/shared/definition43.js +103 -502
  116. package/shared/definition44.js +23 -101
  117. package/shared/definition45.js +76 -126
  118. package/shared/definition46.js +494 -48
  119. package/shared/definition47.js +23 -23
  120. package/shared/definition48.js +126 -476
  121. package/shared/definition49.js +275 -98
  122. package/shared/definition5.js +71 -36
  123. package/shared/definition50.js +157 -16
  124. package/shared/definition51.js +133 -263
  125. package/shared/definition52.js +131 -115
  126. package/shared/definition53.js +85 -120
  127. package/shared/definition54.js +295 -111
  128. package/shared/definition55.js +12 -71
  129. package/shared/definition56.js +39 -295
  130. package/shared/definition57.js +181 -0
  131. package/shared/definition6.js +56 -111
  132. package/shared/definition7.js +119 -187
  133. package/shared/definition8.js +58 -23
  134. package/shared/definition9.js +92 -66
  135. package/shared/focus.js +2 -1
  136. package/shared/focus2.js +1 -1
  137. package/shared/form-associated.js +2 -2
  138. package/shared/icon.js +48 -27
  139. package/shared/index.js +7 -27
  140. package/shared/index2.js +202 -0
  141. package/shared/key-codes.js +1 -1
  142. package/shared/listbox.js +88 -11
  143. package/shared/localization/Locale.d.ts +4 -0
  144. package/shared/localization/index.d.ts +7 -0
  145. package/shared/patterns/form-elements/form-elements.d.ts +4 -4
  146. package/shared/patterns/index.d.ts +1 -0
  147. package/shared/patterns/localized.d.ts +4 -0
  148. package/shared/radio.js +23 -7
  149. package/shared/repeat.js +1 -1
  150. package/shared/text-anchor.js +21 -4
  151. package/shared/text-anchor.template.js +37 -40
  152. package/shared/text-field.js +2 -2
  153. package/shared/text-field2.js +15 -15
  154. package/shared/tree-item.js +12 -12
  155. package/side-drawer/index.js +1 -1
  156. package/slider/index.js +2 -2
  157. package/split-button/index.js +3 -3
  158. package/style.css +6097 -0
  159. package/styles/core/all.css +25 -3
  160. package/styles/core/theme.css +1 -1
  161. package/styles/core/typography.css +25 -3
  162. package/styles/tokens/theme-dark.css +4 -4
  163. package/styles/tokens/theme-light.css +4 -4
  164. package/styles/tokens/vivid-2-compat.css +2 -2
  165. package/switch/index.js +5 -4
  166. package/tab/index.js +3 -3
  167. package/tab-panel/index.js +1 -1
  168. package/tabs/index.js +5 -5
  169. package/tag/index.js +3 -3
  170. package/tag-group/index.js +1 -1
  171. package/text-anchor/index.js +1 -1
  172. package/text-area/index.js +5 -4
  173. package/text-field/index.js +5 -4
  174. package/toggletip/index.js +7 -7
  175. package/tooltip/index.js +7 -7
  176. package/tree-item/index.js +3 -3
  177. package/tree-view/index.js +1 -1
  178. package/vivid.api.json +137 -0
  179. package/lib/accordion/index.d.ts +0 -1
  180. package/lib/accordion-item/index.d.ts +0 -1
  181. package/lib/action-group/index.d.ts +0 -1
  182. package/lib/alert/index.d.ts +0 -1
  183. package/lib/avatar/index.d.ts +0 -1
  184. package/lib/badge/index.d.ts +0 -1
  185. package/lib/banner/index.d.ts +0 -1
  186. package/lib/breadcrumb/index.d.ts +0 -1
  187. package/lib/breadcrumb-item/index.d.ts +0 -1
  188. package/lib/button/index.d.ts +0 -1
  189. package/lib/calendar/index.d.ts +0 -1
  190. package/lib/calendar-event/index.d.ts +0 -1
  191. package/lib/card/index.d.ts +0 -1
  192. package/lib/checkbox/index.d.ts +0 -1
  193. package/lib/combobox/index.d.ts +0 -1
  194. package/lib/data-grid/index.d.ts +0 -1
  195. package/lib/dialog/index.d.ts +0 -1
  196. package/lib/divider/index.d.ts +0 -1
  197. package/lib/elevation/index.d.ts +0 -1
  198. package/lib/empty-state/index.d.ts +0 -1
  199. package/lib/fab/index.d.ts +0 -1
  200. package/lib/file-picker/index.d.ts +0 -1
  201. package/lib/focus/index.d.ts +0 -1
  202. package/lib/header/index.d.ts +0 -1
  203. package/lib/icon/index.d.ts +0 -1
  204. package/lib/layout/index.d.ts +0 -1
  205. package/lib/listbox/index.d.ts +0 -1
  206. package/lib/menu/index.d.ts +0 -1
  207. package/lib/menu-item/index.d.ts +0 -1
  208. package/lib/nav/index.d.ts +0 -1
  209. package/lib/nav-disclosure/index.d.ts +0 -1
  210. package/lib/nav-item/index.d.ts +0 -1
  211. package/lib/note/index.d.ts +0 -1
  212. package/lib/number-field/index.d.ts +0 -1
  213. package/lib/option/index.d.ts +0 -1
  214. package/lib/pagination/index.d.ts +0 -1
  215. package/lib/popup/index.d.ts +0 -1
  216. package/lib/progress/index.d.ts +0 -1
  217. package/lib/progress-ring/index.d.ts +0 -1
  218. package/lib/radio/index.d.ts +0 -1
  219. package/lib/radio-group/index.d.ts +0 -1
  220. package/lib/select/index.d.ts +0 -1
  221. package/lib/side-drawer/index.d.ts +0 -1
  222. package/lib/slider/index.d.ts +0 -1
  223. package/lib/split-button/index.d.ts +0 -1
  224. package/lib/switch/index.d.ts +0 -1
  225. package/lib/tab/index.d.ts +0 -1
  226. package/lib/tab-panel/index.d.ts +0 -1
  227. package/lib/tabs/index.d.ts +0 -1
  228. package/lib/tag/index.d.ts +0 -1
  229. package/lib/tag-group/index.d.ts +0 -1
  230. package/lib/text-anchor/index.d.ts +0 -1
  231. package/lib/text-area/index.d.ts +0 -1
  232. package/lib/text-field/index.d.ts +0 -1
  233. package/lib/toggletip/index.d.ts +0 -1
  234. package/lib/tooltip/index.d.ts +0 -1
  235. package/lib/tree-item/index.d.ts +0 -1
  236. package/lib/tree-view/index.d.ts +0 -1
  237. package/shared/form-elements.js +0 -162
@@ -1,25 +1,166 @@
1
- import { F as FoundationElement, h as html, r as registerFactory } from './index.js';
1
+ import { a as attr, o as observable, h as html, r as registerFactory } from './index.js';
2
+ import { f as focusRegistries } from './definition55.js';
3
+ import { a as iconRegistries } from './definition24.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 { T as TextField$1 } from './text-field2.js';
7
+ import { a as applyMixins } from './apply-mixins.js';
8
+ import { s as styles } from './text-field.js';
9
+ import { f as focusTemplateFactory } from './focus2.js';
10
+ import { w as when } from './when.js';
11
+ import { s as slotted } from './slotted.js';
12
+ import { r as ref } from './ref.js';
2
13
  import { c as classNames } from './class-names.js';
3
14
 
4
- var css_248z = ".base {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n}";
5
-
6
- class TagGroup extends FoundationElement {}
15
+ var __defProp = Object.defineProperty;
16
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
17
+ var __decorateClass = (decorators, target, key, kind) => {
18
+ var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
19
+ for (var i = decorators.length - 1, decorator; i >= 0; i--)
20
+ if (decorator = decorators[i])
21
+ result = (kind ? decorator(target, key, result) : decorator(result)) || result;
22
+ if (kind && result)
23
+ __defProp(target, key, result);
24
+ return result;
25
+ };
26
+ let TextField = class extends TextField$1 {
27
+ };
28
+ __decorateClass([
29
+ attr
30
+ ], TextField.prototype, "appearance", 2);
31
+ __decorateClass([
32
+ attr
33
+ ], TextField.prototype, "shape", 2);
34
+ __decorateClass([
35
+ attr
36
+ ], TextField.prototype, "autoComplete", 2);
37
+ __decorateClass([
38
+ observable
39
+ ], TextField.prototype, "actionItemsSlottedContent", 2);
40
+ __decorateClass([
41
+ observable
42
+ ], TextField.prototype, "leadingActionItemsSlottedContent", 2);
43
+ TextField = __decorateClass([
44
+ errorText,
45
+ formElements
46
+ ], TextField);
47
+ applyMixins(TextField, AffixIcon, FormElementCharCount, FormElementHelperText, FormElementSuccessText);
7
48
 
8
- const getClasses = _ => classNames('base');
9
- const TagGroupTemplate = () => {
49
+ const getStateClasses = ({
50
+ errorValidationMessage,
51
+ disabled,
52
+ value,
53
+ readOnly,
54
+ placeholder,
55
+ appearance,
56
+ shape,
57
+ label,
58
+ successText,
59
+ actionItemsSlottedContent,
60
+ leadingActionItemsSlottedContent,
61
+ icon
62
+ }) => classNames(
63
+ ["error connotation-alert", Boolean(errorValidationMessage)],
64
+ ["disabled", disabled],
65
+ ["has-value", Boolean(value)],
66
+ ["readonly", readOnly],
67
+ ["placeholder", Boolean(placeholder)],
68
+ [`appearance-${appearance}`, Boolean(appearance)],
69
+ [`shape-${shape}`, Boolean(shape)],
70
+ ["no-label", !label],
71
+ ["has-icon", !!icon],
72
+ ["success connotation-success", Boolean(successText)],
73
+ ["action-items", !!actionItemsSlottedContent?.length],
74
+ ["leading-action-items", !!leadingActionItemsSlottedContent?.length],
75
+ ["no-leading", !(leadingActionItemsSlottedContent?.length || icon)]
76
+ );
77
+ function renderLabel() {
78
+ return html`
79
+ <label for="control" class="label">
80
+ ${(x) => x.label}
81
+ </label>`;
82
+ }
83
+ function renderCharCount() {
10
84
  return html`
11
- <div class="${getClasses}" role="listbox" aria-orientation="horizontal">
12
- <slot></slot>
13
- </div>
85
+ <span class="char-count">${(x) => x.value ? x.value.length : 0} / ${(x) => x.maxlength}</span>
14
86
  `;
87
+ }
88
+ const TextfieldTemplate = (context) => {
89
+ const affixIconTemplate = affixIconTemplateFactory(context);
90
+ const focusTemplate = focusTemplateFactory(context);
91
+ return html`
92
+ <div class="base ${getStateClasses}">
93
+ ${when((x) => x.charCount && x.maxlength, renderCharCount())}
94
+ ${when((x) => x.label, renderLabel())}
95
+ <div class="fieldset">
96
+ <div class="leading-items-wrapper">
97
+ <slot name="leading-action-items" ${slotted("leadingActionItemsSlottedContent")}></slot>
98
+ ${(x) => affixIconTemplate(x.icon)}
99
+ </div>
100
+
101
+ <div class="wrapper">
102
+ <input class="control"
103
+ id="control"
104
+ @input="${(x) => x.handleTextInput()}"
105
+ @change="${(x) => x.handleChange()}"
106
+ ?autofocus="${(x) => x.autofocus}"
107
+ ?disabled="${(x) => x.disabled}"
108
+ list="${(x) => x.list}"
109
+ maxlength="${(x) => x.maxlength}"
110
+ minlength="${(x) => x.minlength}"
111
+ pattern="${(x) => x.pattern}"
112
+ placeholder="${(x) => x.placeholder}"
113
+ ?readonly="${(x) => x.readOnly}"
114
+ ?required="${(x) => x.required}"
115
+ size="${(x) => x.size}"
116
+ autocomplete="${(x) => x.autoComplete}"
117
+ name="${(x) => x.name}"
118
+ ?spellcheck="${(x) => x.spellcheck}"
119
+ :value="${(x) => x.value}"
120
+ type="${(x) => x.type}"
121
+ aria-atomic="${(x) => x.ariaAtomic}"
122
+ aria-busy="${(x) => x.ariaBusy}"
123
+ aria-controls="${(x) => x.ariaControls}"
124
+ aria-current="${(x) => x.ariaCurrent}"
125
+ aria-describedby="${(x) => x.ariaDescribedby}"
126
+ aria-details="${(x) => x.ariaDetails}"
127
+ aria-disabled="${(x) => x.ariaDisabled}"
128
+ aria-errormessage="${(x) => x.ariaErrormessage}"
129
+ aria-flowto="${(x) => x.ariaFlowto}"
130
+ aria-haspopup="${(x) => x.ariaHaspopup}"
131
+ aria-hidden="${(x) => x.ariaHidden}"
132
+ aria-invalid="${(x) => x.ariaInvalid}"
133
+ aria-keyshortcuts="${(x) => x.ariaKeyshortcuts}"
134
+ aria-label="${(x) => x.ariaLabel}"
135
+ aria-labelledby="${(x) => x.ariaLabelledby}"
136
+ aria-live="${(x) => x.ariaLive}"
137
+ aria-owns="${(x) => x.ariaOwns}"
138
+ aria-relevant="${(x) => x.ariaRelevant}"
139
+ aria-roledescription="${(x) => x.ariaRoledescription}"
140
+ ${ref("control")}
141
+ />
142
+ ${() => focusTemplate}
143
+ </div>
144
+ <div class="action-items-wrapper">
145
+ <slot name="action-items" ${slotted("actionItemsSlottedContent")}></slot>
146
+ </div>
147
+
148
+ </div>
149
+ ${when((x) => !x.successText && !x.errorValidationMessage && x.helperText?.length, getFeedbackTemplate("helper", context))}
150
+ ${when((x) => !x.successText && x.errorValidationMessage, getFeedbackTemplate("error", context))}
151
+ ${when((x) => x.successText, getFeedbackTemplate("success", context))}
152
+ </div>`;
15
153
  };
16
154
 
17
- const tagGroupDefinition = TagGroup.compose({
18
- baseName: 'tag-group',
19
- template: TagGroupTemplate,
20
- styles: css_248z
155
+ const textFieldDefinition = TextField.compose({
156
+ baseName: "text-field",
157
+ template: TextfieldTemplate,
158
+ styles,
159
+ shadowOptions: {
160
+ delegatesFocus: true
161
+ }
21
162
  });
22
- const tagGroupRegistries = [tagGroupDefinition()];
23
- const registerTagGroup = registerFactory(tagGroupRegistries);
163
+ const textFieldRegistries = [textFieldDefinition(), ...iconRegistries, ...focusRegistries];
164
+ const registerTextField = registerFactory(textFieldRegistries);
24
165
 
25
- export { tagGroupRegistries as a, registerTagGroup as r, tagGroupDefinition as t };
166
+ export { TextField as T, textFieldRegistries as a, registerTextField as r, textFieldDefinition as t };
@@ -1,280 +1,150 @@
1
- import { F as FoundationElement, _ as __decorate, a as attr, n as nullableNumberConverter, o as observable, b as __metadata, h as html, r as registerFactory } from './index.js';
2
- import { i as iconRegistries } from './definition3.js';
3
- import { f as focusRegistries } from './definition4.js';
4
- import './affix.js';
5
- import './focus.js';
6
- import { e as errorText, f as formElements, F as FormElementSuccessText, a as FormElementHelperText, b as FormElementCharCount, g as getFeedbackTemplate } from './form-elements.js';
7
- import { D as DelegatesARIATextbox } from './text-field2.js';
8
- import { a as applyMixins } from './apply-mixins.js';
9
- import { F as FormAssociated } from './form-associated.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 './definition57.js';
10
3
  import { w as when } from './when.js';
11
- import { r as ref } from './ref.js';
12
4
  import { c as classNames } from './class-names.js';
13
5
 
14
- class _TextArea extends FoundationElement {
15
- }
16
- /**
17
- * A form-associated base class for the {@link @microsoft/fast-foundation#(TextArea:class)} component.
18
- *
19
- * @internal
20
- */
21
- class FormAssociatedTextArea extends FormAssociated(_TextArea) {
22
- constructor() {
23
- super(...arguments);
24
- this.proxy = document.createElement("textarea");
25
- }
26
- }
6
+ const styles = "/**\n * Do not edit directly\n * Generated on Mon, 04 Sep 2023 12:44:18 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}";
27
7
 
28
- /**
29
- * Resize mode for a TextArea
30
- * @public
31
- */
32
- const TextAreaResize = {
33
- /**
34
- * No resize.
35
- */
36
- none: "none",
37
- /**
38
- * Resize vertically and horizontally.
39
- */
40
- both: "both",
41
- /**
42
- * Resize horizontally.
43
- */
44
- horizontal: "horizontal",
45
- /**
46
- * Resize vertically.
47
- */
48
- vertical: "vertical",
8
+ var __defProp = Object.defineProperty;
9
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
10
+ var __decorateClass = (decorators, target, key, kind) => {
11
+ var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
12
+ for (var i = decorators.length - 1, decorator; i >= 0; i--)
13
+ if (decorator = decorators[i])
14
+ result = (kind ? decorator(target, key, result) : decorator(result)) || result;
15
+ if (kind && result)
16
+ __defProp(target, key, result);
17
+ return result;
49
18
  };
50
-
51
- /**
52
- * A Text Area Custom HTML Element.
53
- * Based largely on the {@link https://developer.mozilla.org/en-US/docs/Web/HTML/Element/textarea | <textarea> element }.
54
- *
55
- * @slot - The default slot for the label
56
- * @csspart label - The label
57
- * @csspart root - The element wrapping the control
58
- * @csspart control - The textarea element
59
- * @fires change - Emits a custom 'change' event when the textarea emits a change event
60
- *
61
- * @public
62
- */
63
- class TextArea$1 extends FormAssociatedTextArea {
64
- constructor() {
65
- super(...arguments);
66
- /**
67
- * The resize mode of the element.
68
- * @public
69
- * @remarks
70
- * HTML Attribute: resize
71
- */
72
- this.resize = TextAreaResize.none;
73
- /**
74
- * Sizes the element horizontally by a number of character columns.
75
- *
76
- * @public
77
- * @remarks
78
- * HTML Attribute: cols
79
- */
80
- this.cols = 20;
81
- /**
82
- * @internal
83
- */
84
- this.handleTextInput = () => {
85
- this.value = this.control.value;
86
- };
87
- }
88
- readOnlyChanged() {
89
- if (this.proxy instanceof HTMLTextAreaElement) {
90
- this.proxy.readOnly = this.readOnly;
91
- }
92
- }
93
- autofocusChanged() {
94
- if (this.proxy instanceof HTMLTextAreaElement) {
95
- this.proxy.autofocus = this.autofocus;
96
- }
97
- }
98
- listChanged() {
99
- if (this.proxy instanceof HTMLTextAreaElement) {
100
- this.proxy.setAttribute("list", this.list);
101
- }
102
- }
103
- maxlengthChanged() {
104
- if (this.proxy instanceof HTMLTextAreaElement) {
105
- this.proxy.maxLength = this.maxlength;
106
- }
107
- }
108
- minlengthChanged() {
109
- if (this.proxy instanceof HTMLTextAreaElement) {
110
- this.proxy.minLength = this.minlength;
111
- }
112
- }
113
- spellcheckChanged() {
114
- if (this.proxy instanceof HTMLTextAreaElement) {
115
- this.proxy.spellcheck = this.spellcheck;
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;
116
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);
117
66
  }
118
- /**
119
- * Selects all the text in the text area
120
- *
121
- * @public
122
- */
123
- select() {
124
- this.control.select();
125
- /**
126
- * The select event does not permeate the shadow DOM boundary.
127
- * This fn effectively proxies the select event,
128
- * emitting a `select` event whenever the internal
129
- * control emits a `select` event
130
- */
131
- this.$emit("select");
132
- }
133
- /**
134
- * Change event handler for inner control.
135
- * @remarks
136
- * "Change" events are not `composable` so they will not
137
- * permeate the shadow DOM boundary. This fn effectively proxies
138
- * the change event, emitting a `change` event whenever the internal
139
- * control emits a `change` event
140
- * @internal
141
- */
142
- handleChange() {
143
- this.$emit("change");
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");
144
79
  }
145
- /** {@inheritDoc (FormAssociated:interface).validate} */
146
- validate() {
147
- super.validate(this.control);
80
+ if (this.#anchorEl) {
81
+ this.#anchorEl.ariaExpanded = this.open.toString();
148
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;
149
103
  }
150
- __decorate([
151
- attr({ mode: "boolean" })
152
- ], TextArea$1.prototype, "readOnly", void 0);
153
- __decorate([
154
- attr
155
- ], TextArea$1.prototype, "resize", void 0);
156
- __decorate([
157
- attr({ mode: "boolean" })
158
- ], TextArea$1.prototype, "autofocus", void 0);
159
- __decorate([
160
- attr({ attribute: "form" })
161
- ], TextArea$1.prototype, "formId", void 0);
162
- __decorate([
163
- attr
164
- ], TextArea$1.prototype, "list", void 0);
165
- __decorate([
166
- attr({ converter: nullableNumberConverter })
167
- ], TextArea$1.prototype, "maxlength", void 0);
168
- __decorate([
169
- attr({ converter: nullableNumberConverter })
170
- ], TextArea$1.prototype, "minlength", void 0);
171
- __decorate([
172
- attr
173
- ], TextArea$1.prototype, "name", void 0);
174
- __decorate([
175
- attr
176
- ], TextArea$1.prototype, "placeholder", void 0);
177
- __decorate([
178
- attr({ converter: nullableNumberConverter, mode: "fromView" })
179
- ], TextArea$1.prototype, "cols", void 0);
180
- __decorate([
181
- attr({ converter: nullableNumberConverter, mode: "fromView" })
182
- ], TextArea$1.prototype, "rows", void 0);
183
- __decorate([
184
- attr({ mode: "boolean" })
185
- ], TextArea$1.prototype, "spellcheck", void 0);
186
- __decorate([
187
- observable
188
- ], TextArea$1.prototype, "defaultSlottedNodes", void 0);
189
- applyMixins(TextArea$1, DelegatesARIATextbox);
190
-
191
- var css_248z = "/**\n * Do not edit directly\n * Generated on Thu, 17 Aug 2023 11:13:18 GMT\n */\n:host {\n display: inline-block;\n}\n\n.base {\n display: inline-grid;\n grid-template-columns: 1fr max-content;\n inline-size: 100%;\n row-gap: 4px;\n}\n.base {\n --_appearance-color-text: var(--vvd-color-canvas-text);\n --_appearance-color-fill: var(--_connotation-color-backdrop);\n --_appearance-color-outline: var(--_connotation-color-intermediate);\n}\n.base.appearance-ghost {\n --_appearance-color-text: var(--_connotation-color-primary);\n --_appearance-color-fill: transparent;\n --_appearance-color-outline: transparent;\n}\n.base:where(:hover, .hover):where(:not(:disabled, .disabled, .readonly)) {\n --_appearance-color-text: var(--vvd-color-canvas-text);\n --_appearance-color-fill: var(--_connotation-color-backdrop);\n --_appearance-color-outline: var(--_connotation-color-firm);\n}\n.base:where(:hover, .hover):where(:not(:disabled, .disabled, .readonly)).appearance-ghost {\n --_appearance-color-text: var(--_connotation-color-primary);\n --_appearance-color-fill: var(--_connotation-color-faint);\n --_appearance-color-outline: transparent;\n}\n.base:where(:disabled, .disabled) {\n --_appearance-color-text: var(--vvd-color-neutral-300);\n --_appearance-color-fill: var(--vvd-color-neutral-100);\n --_appearance-color-outline: var(--vvd-color-neutral-300);\n}\n.base:where(:disabled, .disabled).appearance-ghost {\n --_appearance-color-text: var(--vvd-color-neutral-300);\n --_appearance-color-fill: transparent;\n --_appearance-color-outline: transparent;\n}\n.base:where(.readonly):where(:not(:disabled, .disabled)) {\n --_appearance-color-text: var(--vvd-color-canvas-text);\n --_appearance-color-fill: var(--vvd-color-neutral-200);\n --_appearance-color-outline: var(--vvd-color-neutral-400);\n}\n.base:where(.readonly):where(:not(:disabled, .disabled)).appearance-ghost {\n --_appearance-color-text: var(--vvd-color-neutral-600);\n --_appearance-color-fill: transparent;\n --_appearance-color-outline: transparent;\n}\n.base.connotation-success {\n /* @cssprop [--vvd-text-area-success-primary=var(--vvd-color-success-500)] */\n --_connotation-color-primary: var(--vvd-text-area-success-primary, var(--vvd-color-success-500));\n /* @cssprop [--vvd-text-area-success-backdrop=var(--vvd-color-success-50)] */\n --_connotation-color-backdrop: var(--vvd-text-area-success-backdrop, var(--vvd-color-success-50));\n /* @cssprop [--vvd-text-area-success-intermediate=var(--vvd-color-success-500)] */\n --_connotation-color-intermediate: var(--vvd-text-area-success-intermediate, var(--vvd-color-success-500));\n /* @cssprop [--vvd-text-area-success-firm=var(--vvd-color-success-600)] */\n --_connotation-color-firm: var(--vvd-text-area-success-firm, var(--vvd-color-success-600));\n /* @cssprop [--vvd-text-area-success-faint=var(--vvd-color-success-50)] */\n --_connotation-color-faint: var(--vvd-text-area-success-faint, var(--vvd-color-success-50));\n /* @cssprop [--vvd-text-area-success-soft=var(--vvd-color-success-100)] */\n --_connotation-color-soft: var(--vvd-text-area-success-soft, var(--vvd-color-success-100));\n}\n.base.connotation-alert {\n /* @cssprop [--vvd-text-area-alert-primary=var(--vvd-color-alert-500)] */\n --_connotation-color-primary: var(--vvd-text-area-alert-primary, var(--vvd-color-alert-500));\n /* @cssprop [--vvd-text-area-alert-backdrop=var(--vvd-color-alert-50)] */\n --_connotation-color-backdrop: var(--vvd-text-area-alert-backdrop, var(--vvd-color-alert-50));\n /* @cssprop [--vvd-text-area-alert-intermediate=var(--vvd-color-alert-500)] */\n --_connotation-color-intermediate: var(--vvd-text-area-alert-intermediate, var(--vvd-color-alert-500));\n /* @cssprop [--vvd-text-area-alert-firm=var(--vvd-color-alert-600)] */\n --_connotation-color-firm: var(--vvd-text-area-alert-firm, var(--vvd-color-alert-600));\n /* @cssprop [--vvd-text-area-alert-faint=var(--vvd-color-alert-50)] */\n --_connotation-color-faint: var(--vvd-text-area-alert-faint, var(--vvd-color-alert-50));\n /* @cssprop [--vvd-text-area-alert-soft=var(--vvd-color-alert-100)] */\n --_connotation-color-soft: var(--vvd-text-area-alert-soft, var(--vvd-color-alert-100));\n}\n.base:not(.connotation-success, .connotation-alert) {\n /* @cssprop [--vvd-text-area-accent-primary=var(--vvd-color-canvas-text)] */\n --_connotation-color-primary: var(--vvd-text-area-accent-primary, var(--vvd-color-canvas-text));\n /* @cssprop [--vvd-text-area-accent-backdrop=var(--vvd-color-canvas)] */\n --_connotation-color-backdrop: var(--vvd-text-area-accent-backdrop, var(--vvd-color-canvas));\n /* @cssprop [--vvd-text-area-accent-intermediate=var(--vvd-color-neutral-500)] */\n --_connotation-color-intermediate: var(--vvd-text-area-accent-intermediate, var(--vvd-color-neutral-500));\n /* @cssprop [--vvd-text-area-accent-firm=var(--vvd-color-canvas-text)] */\n --_connotation-color-firm: var(--vvd-text-area-accent-firm, var(--vvd-color-canvas-text));\n /* @cssprop [--vvd-text-area-accent-faint=var(--vvd-color-neutral-50)] */\n --_connotation-color-faint: var(--vvd-text-area-accent-faint, var(--vvd-color-neutral-50));\n /* @cssprop [--vvd-text-area-accent-soft=var(--vvd-color-neutral-100)] */\n --_connotation-color-soft: var(--vvd-text-area-accent-soft, var(--vvd-color-neutral-100));\n}\n@supports (user-select: none) {\n .base {\n user-select: none;\n }\n}\n.base:not(.disabled) {\n --_low-ink-color: var(--vvd-color-neutral-600);\n}\n.base.disabled {\n --_low-ink-color: var(--_appearance-color-text);\n pointer-events: none;\n}\n\n.label {\n color: var(--vvd-color-canvas-text);\n contain: inline-size;\n font: var(--vvd-typography-base);\n grid-column: 1/2;\n grid-row: 1;\n line-height: 20px;\n}\n\n.char-count {\n color: var(--_low-ink-color);\n font: var(--vvd-typography-base);\n grid-column: 2/-1;\n}\n\n.control {\n padding: 8px 16px;\n border: 0 none;\n appearance: none; /* for box-shadow visibility on IOS */\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 grid-column: 1/-1;\n min-block-size: calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density, 0), 2)));\n resize: none;\n transition: box-shadow 0.2s, background-color 0.2s, color 0.2s;\n}\n.control:disabled {\n cursor: not-allowed;\n opacity: 1; /* 2. correct opacity on iOS */\n pointer-events: none;\n -webkit-text-fill-color: var(--_appearance-color-text); /* 1. sets text fill to current `color` for safari */\n}\n.control::placeholder, .control:disabled::placeholder {\n opacity: 1; /* 2. correct opacity on iOS */\n pointer-events: none;\n -webkit-text-fill-color: var(--_low-ink-color); /* 1. sets text fill to current `color` for safari */\n}\n.control:focus {\n outline: 2px solid var(--focus-stroke-color, currentColor);\n outline-offset: -2px;\n}\n:host([resize=both]) .control {\n resize: both;\n}\n:host([resize=horizontal]) .control {\n resize: horizontal;\n}\n:host([resize=vertical]) .control {\n resize: vertical;\n}";
104
+ __decorateClass([
105
+ attr
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);
192
119
 
193
- let TextArea = class TextArea extends TextArea$1 {};
194
- __decorate([attr, __metadata("design:type", String)], TextArea.prototype, "wrap", void 0);
195
- TextArea = __decorate([errorText, formElements], TextArea);
196
- applyMixins(TextArea, FormElementCharCount, FormElementHelperText, FormElementSuccessText);
197
-
198
- const getClasses = ({
199
- value,
200
- errorValidationMessage,
201
- disabled,
202
- placeholder,
203
- readOnly,
204
- successText
205
- }) => classNames('base', ['readonly', readOnly], ['placeholder', Boolean(placeholder)], ['disabled', disabled], ['error connotation-alert', Boolean(errorValidationMessage)], ['has-value', Boolean(value)], ['success connotation-success', !!successText]);
206
- function renderLabel() {
207
- return html`
208
- <label for="control" class="label">
209
- ${x => x.label}
210
- </label>`;
211
- }
212
- function renderCharCount() {
120
+ const getClasses = (_) => classNames("control");
121
+ const ToggletipTemplate = (context) => {
122
+ const popup = context.tagFor(Popup);
213
123
  return html`
214
- <span class="char-count">${x => x.value ? x.value.length : 0} / ${x => x.maxlength}</span>
215
- `;
216
- }
217
- const TextAreaTemplate = context => {
218
- return html`
219
- <div class="${getClasses}">
220
- ${when(x => x.charCount && x.maxlength, renderCharCount())}
221
- ${when(x => x.label, renderLabel())}
222
- <textarea class="control"
223
- ?autofocus="${x => x.autofocus}"
224
- placeholder="${x => x.placeholder ? x.placeholder : null}"
225
- name="${x => x.name ? x.name : null}"
226
- maxlength="${x => x.maxlength ? x.maxlength : null}"
227
- rows="${x => x.rows ? x.rows : null}"
228
- cols="${x => x.cols ? x.cols : null}"
229
- wrap="${x => x.wrap ? x.wrap : null}"
230
- ?readonly="${x => x.readOnly}"
231
- ?disabled="${x => x.disabled}"
232
- ?required="${x => x.required}"
233
- ?spellcheck="${x => x.spellcheck}"
234
- :value="${x => x.value}"
235
- aria-atomic="${x => x.ariaAtomic}"
236
- aria-busy="${x => x.ariaBusy}"
237
- aria-controls="${x => x.ariaControls}"
238
- aria-current="${x => x.ariaCurrent}"
239
- aria-describedby="${x => x.ariaDescribedby}"
240
- aria-details="${x => x.ariaDetails}"
241
- aria-disabled="${x => x.ariaDisabled}"
242
- aria-errormessage="${x => x.ariaErrormessage}"
243
- aria-flowto="${x => x.ariaFlowto}"
244
- aria-haspopup="${x => x.ariaHaspopup}"
245
- aria-hidden="${x => x.ariaHidden}"
246
- aria-invalid="${x => x.ariaInvalid}"
247
- aria-keyshortcuts="${x => x.ariaKeyshortcuts}"
248
- aria-label="${x => x.ariaLabel}"
249
- aria-labelledby="${x => x.ariaLabelledby}"
250
- aria-live="${x => x.ariaLive}"
251
- aria-owns="${x => x.ariaOwns}"
252
- aria-relevant="${x => x.ariaRelevant}"
253
- aria-roledescription="${x => x.ariaRoledescription}"
254
- @input="${x => x.handleTextInput()}"
255
- @change="${x => x.handleChange()}"
256
- ${ref('control')}
257
- >
258
- </textarea>
259
- ${when(x => {
260
- var _a;
261
- return !x.successText && !x.errorValidationMessage && ((_a = x.helperText) === null || _a === void 0 ? void 0 : _a.length);
262
- }, getFeedbackTemplate('helper', context))}
263
- ${when(x => !x.successText && x.errorValidationMessage, getFeedbackTemplate('error', context))}
264
- ${when(x => x.successText, getFeedbackTemplate('success', context))}
265
- </div>
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>
137
+ </div>
138
+ </${popup}>
266
139
  `;
267
140
  };
268
141
 
269
- const textAreaDefinition = TextArea.compose({
270
- baseName: 'text-area',
271
- template: TextAreaTemplate,
272
- styles: css_248z,
273
- shadowOptions: {
274
- delegatesFocus: true
275
- }
142
+ const toggletipDefinition = Toggletip.compose({
143
+ baseName: "toggletip",
144
+ template: ToggletipTemplate,
145
+ styles
276
146
  });
277
- const textAreaRegistries = [textAreaDefinition(), ...iconRegistries, ...focusRegistries];
278
- const registerTextArea = registerFactory(textAreaRegistries);
147
+ const toggletipRegistries = [toggletipDefinition(), ...popupRegistries];
148
+ const registerToggletip = registerFactory(toggletipRegistries);
279
149
 
280
- export { textAreaRegistries as a, registerTextArea as r, textAreaDefinition as t };
150
+ export { toggletipRegistries as a, registerToggletip as r, toggletipDefinition as t };