@vonage/vivid 3.30.0 → 3.32.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 (135) hide show
  1. package/alert/index.js +2 -1
  2. package/checkbox/index.js +2 -1
  3. package/combobox/index.js +2 -1
  4. package/custom-elements.json +811 -18
  5. package/date-picker/index.js +35 -0
  6. package/dialog/index.js +1 -1
  7. package/divider/index.js +1 -1
  8. package/empty-state/index.js +1 -1
  9. package/fab/index.js +1 -1
  10. package/file-picker/index.js +3 -2
  11. package/header/index.js +1 -1
  12. package/index.d.ts +1 -0
  13. package/index.js +48 -46
  14. package/layout/index.js +1 -1
  15. package/lib/button/button.d.ts +2 -0
  16. package/lib/components.d.ts +20 -19
  17. package/lib/date-picker/calendar/calendarGrid.d.ts +17 -0
  18. package/lib/date-picker/calendar/dateStr.d.ts +6 -0
  19. package/lib/date-picker/calendar/month.d.ts +11 -0
  20. package/lib/date-picker/calendar/monthPickerGrid.d.ts +10 -0
  21. package/lib/date-picker/calendar/presentationDate.d.ts +4 -0
  22. package/lib/date-picker/date-picker.d.ts +16 -0
  23. package/lib/date-picker/date-picker.template.d.ts +4 -0
  24. package/lib/date-picker/definition.d.ts +3 -0
  25. package/lib/date-picker/index.d.ts +1 -0
  26. package/lib/date-picker/locale.d.ts +21 -0
  27. package/lib/nav-disclosure/nav-disclosure.d.ts +1 -0
  28. package/lib/pagination/definition.d.ts +1 -0
  29. package/lib/pagination/pagination.d.ts +3 -1
  30. package/lib/select/select.d.ts +4 -2
  31. package/listbox/index.js +3 -2
  32. package/locales/en-GB.d.ts +3 -0
  33. package/locales/en-GB.js +25 -0
  34. package/locales/en-US.d.ts +3 -0
  35. package/locales/en-US.js +25 -0
  36. package/locales/ja-JP.d.ts +3 -0
  37. package/locales/ja-JP.js +25 -0
  38. package/locales/zh-CN.d.ts +3 -0
  39. package/locales/zh-CN.js +25 -0
  40. package/menu/index.js +2 -2
  41. package/menu-item/index.js +1 -1
  42. package/nav/index.js +1 -1
  43. package/nav-disclosure/index.js +1 -1
  44. package/nav-item/index.js +1 -1
  45. package/note/index.js +3 -2
  46. package/number-field/index.js +4 -3
  47. package/option/index.js +2 -1
  48. package/package.json +2 -1
  49. package/pagination/index.js +1 -1
  50. package/progress/index.js +1 -1
  51. package/radio/index.js +1 -1
  52. package/radio-group/index.js +1 -1
  53. package/select/index.js +3 -2
  54. package/shared/definition.js +1 -1
  55. package/shared/definition10.js +1 -1
  56. package/shared/definition11.js +1 -1
  57. package/shared/definition12.js +1 -1
  58. package/shared/definition14.js +1 -1
  59. package/shared/definition15.js +1 -1
  60. package/shared/definition16.js +1 -1
  61. package/shared/definition17.js +1 -1
  62. package/shared/definition18.js +2 -2
  63. package/shared/definition19.js +2 -2
  64. package/shared/definition2.js +1 -1
  65. package/shared/definition21.js +3 -3
  66. package/shared/definition22.js +2 -2
  67. package/shared/definition23.js +5750 -189
  68. package/shared/definition24.js +116 -68
  69. package/shared/definition25.js +68 -38
  70. package/shared/definition26.js +222 -74
  71. package/shared/definition27.js +33 -2282
  72. package/shared/definition28.js +76 -47
  73. package/shared/definition29.js +2287 -38
  74. package/shared/definition30.js +39 -417
  75. package/shared/definition31.js +38 -364
  76. package/shared/definition32.js +427 -12
  77. package/shared/definition33.js +351 -53
  78. package/shared/definition34.js +12 -26
  79. package/shared/definition35.js +67 -31
  80. package/shared/definition36.js +20 -431
  81. package/shared/definition37.js +34 -181
  82. package/shared/definition38.js +427 -45
  83. package/shared/definition39.js +195 -33
  84. package/shared/definition4.js +1 -1
  85. package/shared/definition40.js +53 -425
  86. package/shared/definition41.js +29 -645
  87. package/shared/definition42.js +420 -73
  88. package/shared/definition43.js +549 -444
  89. package/shared/definition44.js +68 -90
  90. package/shared/definition45.js +501 -79
  91. package/shared/definition46.js +84 -45
  92. package/shared/definition47.js +131 -17
  93. package/shared/definition48.js +44 -471
  94. package/shared/definition49.js +21 -108
  95. package/shared/definition5.js +1 -1
  96. package/shared/definition50.js +487 -15
  97. package/shared/definition51.js +92 -255
  98. package/shared/definition52.js +16 -115
  99. package/shared/definition53.js +264 -115
  100. package/shared/definition54.js +91 -82
  101. package/shared/definition55.js +111 -65
  102. package/shared/definition56.js +64 -291
  103. package/shared/definition57.js +303 -0
  104. package/shared/definition6.js +2 -2
  105. package/shared/definition7.js +10 -3
  106. package/shared/definition9.js +1 -1
  107. package/shared/{form-elements.js → index2.js} +14 -2
  108. package/shared/localization/Locale.d.ts +4 -0
  109. package/shared/localization/index.d.ts +7 -0
  110. package/shared/patterns/form-elements/form-elements.d.ts +4 -4
  111. package/shared/patterns/index.d.ts +1 -0
  112. package/shared/patterns/localized.d.ts +4 -0
  113. package/shared/text-field.js +1 -1
  114. package/side-drawer/index.js +1 -1
  115. package/slider/index.js +1 -1
  116. package/split-button/index.js +1 -1
  117. package/styles/core/all.css +25 -3
  118. package/styles/core/theme.css +1 -1
  119. package/styles/core/typography.css +25 -3
  120. package/styles/tokens/theme-dark.css +4 -4
  121. package/styles/tokens/theme-light.css +4 -4
  122. package/styles/tokens/vivid-2-compat.css +14 -0
  123. package/switch/index.js +3 -2
  124. package/tab/index.js +1 -1
  125. package/tab-panel/index.js +1 -1
  126. package/tabs/index.js +3 -3
  127. package/tag/index.js +1 -1
  128. package/tag-group/index.js +1 -1
  129. package/text-area/index.js +3 -2
  130. package/text-field/index.js +3 -2
  131. package/toggletip/index.js +1 -1
  132. package/tooltip/index.js +1 -1
  133. package/tree-item/index.js +1 -1
  134. package/tree-view/index.js +1 -1
  135. package/vivid.api.json +262 -0
@@ -1,280 +1,117 @@
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';
1
+ import { F as FoundationElement, d as __classPrivateFieldGet, _ as __decorate, a as attr, b as __metadata, h as html, r as registerFactory } from './index.js';
2
2
  import { i as iconRegistries } from './definition3.js';
3
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';
4
+ import { b as AffixIcon, a as affixIconTemplateFactory } from './affix.js';
8
5
  import { a as applyMixins } from './apply-mixins.js';
9
- import { F as FormAssociated } from './form-associated.js';
6
+ import { f as focusTemplateFactory } from './focus2.js';
7
+ import { I as Icon } from './icon.js';
10
8
  import { w as when } from './when.js';
11
- import { r as ref } from './ref.js';
12
9
  import { c as classNames } from './class-names.js';
13
10
 
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
- }
27
-
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",
49
- };
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;
116
- }
117
- }
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");
11
+ var _Tag_select;
12
+ class Tag extends FoundationElement {
13
+ constructor() {
14
+ super(...arguments);
15
+ this.removable = false;
16
+ this.disabled = false;
17
+ this.selectable = false;
18
+ this.selected = false;
19
+ _Tag_select.set(this, () => {
20
+ if (!this.selectable || this.disabled) {
21
+ return;
22
+ }
23
+ this.selected = !this.selected;
24
+ this.$emit('selected-change');
25
+ });
26
+ }
27
+ remove() {
28
+ if (!this.removable || this.selectable) {
29
+ return;
132
30
  }
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");
31
+ this.$emit('removed');
32
+ this.parentElement && this.parentElement.removeChild(this);
33
+ }
34
+ handleKeydown(e) {
35
+ if (e.key === 'Enter') {
36
+ __classPrivateFieldGet(this, _Tag_select, "f").call(this);
144
37
  }
145
- /** {@inheritDoc (FormAssociated:interface).validate} */
146
- validate() {
147
- super.validate(this.control);
38
+ if (e.key === 'Delete' || e.key === 'Backspace') {
39
+ this.remove();
148
40
  }
41
+ return true;
42
+ }
43
+ handleClick() {
44
+ __classPrivateFieldGet(this, _Tag_select, "f").call(this);
45
+ }
149
46
  }
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 Mon, 14 Aug 2023 13:17:40 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}";
47
+ _Tag_select = new WeakMap();
48
+ __decorate([attr, __metadata("design:type", String)], Tag.prototype, "connotation", void 0);
49
+ __decorate([attr, __metadata("design:type", String)], Tag.prototype, "shape", void 0);
50
+ __decorate([attr, __metadata("design:type", String)], Tag.prototype, "appearance", void 0);
51
+ __decorate([attr, __metadata("design:type", String)], Tag.prototype, "label", void 0);
52
+ __decorate([attr({
53
+ mode: 'boolean'
54
+ }), __metadata("design:type", Object)], Tag.prototype, "removable", void 0);
55
+ __decorate([attr({
56
+ mode: 'boolean'
57
+ }), __metadata("design:type", Object)], Tag.prototype, "disabled", void 0);
58
+ __decorate([attr({
59
+ mode: 'boolean'
60
+ }), __metadata("design:type", Object)], Tag.prototype, "selectable", void 0);
61
+ __decorate([attr({
62
+ mode: 'boolean'
63
+ }), __metadata("design:type", Object)], Tag.prototype, "selected", void 0);
64
+ applyMixins(Tag, AffixIcon);
192
65
 
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);
66
+ var css_248z = "/**\n * Do not edit directly\n * Generated on Tue, 22 Aug 2023 13:37:39 GMT\n */\n.base {\n --tag-block-size: calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density, 0), 2) - 16));\n position: relative;\n display: inline-flex;\n box-sizing: border-box;\n align-items: center;\n background-color: var(--_appearance-color-fill);\n block-size: var(--tag-block-size);\n box-shadow: inset 0 0 0 1px var(--_appearance-color-outline);\n color: var(--_appearance-color-text);\n column-gap: 8px;\n font: var(--vvd-typography-base-bold);\n max-inline-size: 100%;\n padding-inline: 8px;\n vertical-align: middle;\n /* Shape */\n}\n.base.connotation-cta {\n /* @cssprop [--vvd-tag-cta-contrast=var(--vvd-color-cta-800)] */\n --_connotation-color-contrast: var(--vvd-tag-cta-contrast, var(--vvd-color-cta-800));\n /* @cssprop [--vvd-tag-cta-soft=var(--vvd-color-cta-100)] */\n --_connotation-color-soft: var(--vvd-tag-cta-soft, var(--vvd-color-cta-100));\n /* @cssprop [--vvd-tag-cta-pale=var(--vvd-color-cta-300)] */\n --_connotation-color-pale: var(--vvd-tag-cta-pale, var(--vvd-color-cta-300));\n /* @cssprop [--vvd-tag-cta-fierce=var(--vvd-color-cta-700)] */\n --_connotation-color-fierce: var(--vvd-tag-cta-fierce, var(--vvd-color-cta-700));\n /* @cssprop [--vvd-tag-cta-firm=var(--vvd-color-cta-600)] */\n --_connotation-color-firm: var(--vvd-tag-cta-firm, var(--vvd-color-cta-600));\n /* @cssprop [--vvd-tag-cta-faint=var(--vvd-color-cta-50)] */\n --_connotation-color-faint: var(--vvd-tag-cta-faint, var(--vvd-color-cta-50));\n /* @cssprop [--vvd-tag-cta-dim=var(--vvd-color-cta-200)] */\n --_connotation-color-dim: var(--vvd-tag-cta-dim, var(--vvd-color-cta-200));\n}\n.base:not(.connotation-cta) {\n /* @cssprop [--vvd-tag-accent-contrast=var(--vvd-color-neutral-800)] */\n --_connotation-color-contrast: var(--vvd-tag-accent-contrast, var(--vvd-color-neutral-800));\n /* @cssprop [--vvd-tag-accent-soft=var(--vvd-color-neutral-100)] */\n --_connotation-color-soft: var(--vvd-tag-accent-soft, var(--vvd-color-neutral-100));\n /* @cssprop [--vvd-tag-accent-pale=var(--vvd-color-neutral-300)] */\n --_connotation-color-pale: var(--vvd-tag-accent-pale, var(--vvd-color-neutral-300));\n /* @cssprop [--vvd-tag-accent-fierce=var(--vvd-color-neutral-700)] */\n --_connotation-color-fierce: var(--vvd-tag-accent-fierce, var(--vvd-color-neutral-700));\n /* @cssprop [--vvd-tag-accent-firm=var(--vvd-color-canvas-text)] */\n --_connotation-color-firm: var(--vvd-tag-accent-firm, var(--vvd-color-canvas-text));\n /* @cssprop [--vvd-tag-accent-faint=var(--vvd-color-neutral-50)] */\n --_connotation-color-faint: var(--vvd-tag-accent-faint, var(--vvd-color-neutral-50));\n /* @cssprop [--vvd-tag-accent-dim=var(--vvd-color-neutral-200)] */\n --_connotation-color-dim: var(--vvd-tag-accent-dim, var(--vvd-color-neutral-200));\n}\n.base {\n --_appearance-color-text: var(--_connotation-color-contrast);\n --_appearance-color-fill: var(--_connotation-color-soft);\n --_appearance-color-outline: transparent;\n}\n.base.appearance-duotone {\n --_appearance-color-text: var(--_connotation-color-fierce);\n --_appearance-color-fill: transparent;\n --_appearance-color-outline: var(--_connotation-color-pale);\n}\n.base:where(:hover, .hover):where(:not(:disabled, .disabled, .readonly)) {\n --_appearance-color-text: var(--_connotation-color-contrast);\n --_appearance-color-fill: var(--_connotation-color-faint);\n --_appearance-color-outline: transparent;\n}\n.base:where(:hover, .hover):where(:not(:disabled, .disabled, .readonly)).appearance-duotone {\n --_appearance-color-text: var(--_connotation-color-fierce);\n --_appearance-color-fill: transparent;\n --_appearance-color-outline: var(--_connotation-color-firm);\n}\n.base:where(:active, .active):where(:not(:disabled, .disabled)) {\n --_appearance-color-text: var(--_connotation-color-contrast);\n --_appearance-color-fill: var(--_connotation-color-dim);\n --_appearance-color-outline: transparent;\n}\n.base:where(:active, .active):where(:not(:disabled, .disabled)).appearance-duotone {\n --_appearance-color-text: var(--_connotation-color-fierce);\n --_appearance-color-fill: var(--_connotation-color-faint);\n --_appearance-color-outline: var(--_connotation-color-pale);\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: transparent;\n}\n.base:where(:disabled, .disabled).appearance-duotone {\n --_appearance-color-text: var(--vvd-color-neutral-300);\n --_appearance-color-fill: transparent;\n --_appearance-color-outline: var(--vvd-color-neutral-100);\n}\n.base:where(.selected, [aria-current]):where(:not(:disabled, .disabled, :hover, .hover)) {\n --_appearance-color-text: var(--_connotation-color-contrast);\n --_appearance-color-fill: var(--_connotation-color-pale);\n --_appearance-color-outline: transparent;\n}\n.base:where(.selected, [aria-current]):where(:not(:disabled, .disabled, :hover, .hover)).appearance-duotone {\n --_appearance-color-text: var(--_connotation-color-fierce);\n --_appearance-color-fill: var(--_connotation-color-faint);\n --_appearance-color-outline: var(--_connotation-color-pale);\n}\n.base:not(.shape-pill) {\n border-radius: 4px;\n}\n.base.shape-pill {\n border-radius: 14px;\n}\n@supports selector(:focus-visible) {\n .base:focus-visible {\n outline: none;\n }\n}\n@supports (user-select: none) {\n .base {\n user-select: none;\n }\n}\n.base:not(.disabled) {\n cursor: pointer;\n}\n.base.disabled {\n cursor: not-allowed;\n pointer-events: none;\n}\n.base.removable {\n cursor: auto;\n}\n\n.label {\n overflow: hidden;\n max-inline-size: 100%;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.icon {\n font-size: calc(var(--tag-block-size) / 1.5);\n line-height: 1;\n}\n.icon > * {\n vertical-align: middle;\n}\n\n.dismiss-button {\n display: flex;\n align-items: center;\n background-color: var(--_appearance-color-fill);\n border-radius: inherit;\n cursor: pointer;\n}\n\n.base:not(:focus-visible) .focus-indicator {\n display: none;\n}";
197
67
 
198
68
  const getClasses = ({
199
- value,
200
- errorValidationMessage,
69
+ connotation,
70
+ appearance,
71
+ shape,
201
72
  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() {
73
+ selectable,
74
+ removable,
75
+ selected
76
+ }) => classNames('base', ['disabled', disabled], ['selectable', selectable], ['active', selectable && selected], ['removable', removable && !selectable], [`connotation-${connotation}`, Boolean(connotation)], [`appearance-${appearance}`, Boolean(appearance)], [`shape-${shape}`, Boolean(shape)]);
77
+ function renderDismissButton(iconTag) {
213
78
  return html`
214
- <span class="char-count">${x => x.value ? x.value.length : 0} / ${x => x.maxlength}</span>
215
- `;
79
+ <span
80
+ aria-hidden="true"
81
+ class="dismiss-button"
82
+ @click="${x => x.remove()}">
83
+ <${iconTag} name="close-line"></${iconTag}>
84
+ </span>`;
216
85
  }
217
- const TextAreaTemplate = context => {
86
+ const tagTemplate = context => {
87
+ const affixIconTemplate = affixIconTemplateFactory(context);
88
+ const iconTag = context.tagFor(Icon);
89
+ const focusTemplate = focusTemplateFactory(context);
218
90
  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>
266
- `;
91
+ <span class="${getClasses}"
92
+ role="option"
93
+ aria-disabled="${x => x.disabled}"
94
+ aria-selected="${x => x.selectable}"
95
+ tabindex="${x => x.disabled ? null : 0}"
96
+ @keydown="${(x, c) => x.handleKeydown(c.event)}"
97
+ @click="${x => x.handleClick()}">
98
+ ${x => affixIconTemplate(x.icon)}
99
+ ${when(x => x.label, x => html`<span class="label">${x.label}</span>`)}
100
+ ${when(x => x.removable && !x.selectable, renderDismissButton(iconTag))}
101
+ ${when(x => x.selectable && x.selected, html`<${iconTag} class="selectable-icon" name="check-circle-solid"></${iconTag}>`)}
102
+ ${() => focusTemplate}
103
+ </span>`;
267
104
  };
268
105
 
269
- const textAreaDefinition = TextArea.compose({
270
- baseName: 'text-area',
271
- template: TextAreaTemplate,
106
+ const tagDefinition = Tag.compose({
107
+ baseName: 'tag',
108
+ template: tagTemplate,
272
109
  styles: css_248z,
273
110
  shadowOptions: {
274
111
  delegatesFocus: true
275
112
  }
276
113
  });
277
- const textAreaRegistries = [textAreaDefinition(), ...iconRegistries, ...focusRegistries];
278
- const registerTextArea = registerFactory(textAreaRegistries);
114
+ const tagRegistries = [tagDefinition(), ...iconRegistries, ...focusRegistries];
115
+ const registerTag = registerFactory(tagRegistries);
279
116
 
280
- export { textAreaRegistries as a, registerTextArea as r, textAreaDefinition as t };
117
+ export { registerTag as r, tagDefinition as t };
@@ -1,124 +1,25 @@
1
- import { _ as __decorate, a as attr, b as __metadata, o as observable, h as html, r as registerFactory } from './index.js';
2
- import { f as focusRegistries } from './definition4.js';
3
- import { i as iconRegistries } from './definition3.js';
4
- import { b as AffixIcon, a as affixIconTemplateFactory } from './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 { T as TextField$1 } from './text-field2.js';
8
- import { a as applyMixins } from './apply-mixins.js';
9
- import { c as css_248z } from './text-field.js';
10
- import { f as focusTemplateFactory } from './focus2.js';
11
- import { w as when } from './when.js';
12
- import { r as ref } from './ref.js';
13
- import { s as slotted } from './slotted.js';
1
+ import { F as FoundationElement, h as html, r as registerFactory } from './index.js';
14
2
  import { c as classNames } from './class-names.js';
15
3
 
16
- let TextField = class TextField extends TextField$1 {};
17
- __decorate([attr, __metadata("design:type", String)], TextField.prototype, "appearance", void 0);
18
- __decorate([attr, __metadata("design:type", String)], TextField.prototype, "shape", void 0);
19
- __decorate([attr, __metadata("design:type", String)], TextField.prototype, "autoComplete", void 0);
20
- __decorate([observable, __metadata("design:type", Array)], TextField.prototype, "actionItemsSlottedContent", void 0);
21
- TextField = __decorate([errorText, formElements], TextField);
22
- applyMixins(TextField, AffixIcon, FormElementCharCount, FormElementHelperText, FormElementSuccessText);
4
+ var css_248z = ".base {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n}";
23
5
 
24
- const getStateClasses = ({
25
- errorValidationMessage,
26
- disabled,
27
- value,
28
- readOnly,
29
- placeholder,
30
- appearance,
31
- shape,
32
- label,
33
- successText,
34
- actionItemsSlottedContent
35
- }) => classNames(['error connotation-alert', Boolean(errorValidationMessage)], ['disabled', disabled], ['has-value', Boolean(value)], ['readonly', readOnly], ['placeholder', Boolean(placeholder)], [`appearance-${appearance}`, Boolean(appearance)], [`shape-${shape}`, Boolean(shape)], ['no-label', !label], ['success connotation-success', Boolean(successText)], ['action-items', !!(actionItemsSlottedContent === null || actionItemsSlottedContent === void 0 ? void 0 : actionItemsSlottedContent.length)]);
36
- function renderLabel() {
37
- return html`
38
- <label for="control" class="label">
39
- ${x => x.label}
40
- </label>`;
41
- }
42
- function renderCharCount() {
6
+ class TagGroup extends FoundationElement {}
7
+
8
+ const getClasses = _ => classNames('base');
9
+ const TagGroupTemplate = () => {
43
10
  return html`
44
- <span class="char-count">${x => x.value ? x.value.length : 0} / ${x => x.maxlength}</span>
11
+ <div class="${getClasses}" role="listbox" aria-orientation="horizontal">
12
+ <slot></slot>
13
+ </div>
45
14
  `;
46
- }
47
- const TextfieldTemplate = context => {
48
- const affixIconTemplate = affixIconTemplateFactory(context);
49
- const focusTemplate = focusTemplateFactory(context);
50
- return html`
51
- <div class="base ${getStateClasses}">
52
- ${when(x => x.charCount && x.maxlength, renderCharCount())}
53
- ${when(x => x.label, renderLabel())}
54
- <div class="fieldset">
55
- ${x => affixIconTemplate(x.icon)}
56
- <div class="wrapper">
57
- <input class="control"
58
- id="control"
59
- @input="${x => x.handleTextInput()}"
60
- @change="${x => x.handleChange()}"
61
- ?autofocus="${x => x.autofocus}"
62
- ?disabled="${x => x.disabled}"
63
- list="${x => x.list}"
64
- maxlength="${x => x.maxlength}"
65
- minlength="${x => x.minlength}"
66
- pattern="${x => x.pattern}"
67
- placeholder="${x => x.placeholder}"
68
- ?readonly="${x => x.readOnly}"
69
- ?required="${x => x.required}"
70
- size="${x => x.size}"
71
- autocomplete="${x => x.autoComplete}"
72
- name="${x => x.name}"
73
- ?spellcheck="${x => x.spellcheck}"
74
- :value="${x => x.value}"
75
- type="${x => x.type}"
76
- aria-atomic="${x => x.ariaAtomic}"
77
- aria-busy="${x => x.ariaBusy}"
78
- aria-controls="${x => x.ariaControls}"
79
- aria-current="${x => x.ariaCurrent}"
80
- aria-describedby="${x => x.ariaDescribedby}"
81
- aria-details="${x => x.ariaDetails}"
82
- aria-disabled="${x => x.ariaDisabled}"
83
- aria-errormessage="${x => x.ariaErrormessage}"
84
- aria-flowto="${x => x.ariaFlowto}"
85
- aria-haspopup="${x => x.ariaHaspopup}"
86
- aria-hidden="${x => x.ariaHidden}"
87
- aria-invalid="${x => x.ariaInvalid}"
88
- aria-keyshortcuts="${x => x.ariaKeyshortcuts}"
89
- aria-label="${x => x.ariaLabel}"
90
- aria-labelledby="${x => x.ariaLabelledby}"
91
- aria-live="${x => x.ariaLive}"
92
- aria-owns="${x => x.ariaOwns}"
93
- aria-relevant="${x => x.ariaRelevant}"
94
- aria-roledescription="${x => x.ariaRoledescription}"
95
- ${ref('control')}
96
- />
97
- ${() => focusTemplate}
98
- </div>
99
- <div class="action-items-wrapper">
100
- <slot name="action-items" ${slotted('actionItemsSlottedContent')}></slot>
101
- </div>
102
-
103
- </div>
104
- ${when(x => {
105
- var _a;
106
- return !x.successText && !x.errorValidationMessage && ((_a = x.helperText) === null || _a === void 0 ? void 0 : _a.length);
107
- }, getFeedbackTemplate('helper', context))}
108
- ${when(x => !x.successText && x.errorValidationMessage, getFeedbackTemplate('error', context))}
109
- ${when(x => x.successText, getFeedbackTemplate('success', context))}
110
- </div>`;
111
15
  };
112
16
 
113
- const textFieldDefinition = TextField.compose({
114
- baseName: 'text-field',
115
- template: TextfieldTemplate,
116
- styles: css_248z,
117
- shadowOptions: {
118
- delegatesFocus: true
119
- }
17
+ const tagGroupDefinition = TagGroup.compose({
18
+ baseName: 'tag-group',
19
+ template: TagGroupTemplate,
20
+ styles: css_248z
120
21
  });
121
- const textFieldRegistries = [textFieldDefinition(), ...iconRegistries, ...focusRegistries];
122
- const registerTextField = registerFactory(textFieldRegistries);
22
+ const tagGroupRegistries = [tagGroupDefinition()];
23
+ const registerTagGroup = registerFactory(tagGroupRegistries);
123
24
 
124
- export { textFieldRegistries as a, registerTextField as r, textFieldDefinition as t };
25
+ export { tagGroupRegistries as a, registerTagGroup as r, tagGroupDefinition as t };