@vonage/vivid 3.39.0 → 3.40.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 (147) hide show
  1. package/accordion/index.js +1 -1
  2. package/accordion-item/index.js +1 -1
  3. package/alert/index.js +3 -2
  4. package/banner/index.js +2 -1
  5. package/breadcrumb-item/index.js +1 -1
  6. package/button/index.js +2 -1
  7. package/card/index.js +1 -1
  8. package/checkbox/index.js +1 -1
  9. package/combobox/index.js +5 -3
  10. package/custom-elements.json +512 -0
  11. package/data-grid/index.js +1 -0
  12. package/date-picker/index.js +6 -4
  13. package/date-range-picker/index.js +5 -3
  14. package/dialog/index.js +6 -2
  15. package/elevation/index.js +1 -1
  16. package/fab/index.js +1 -1
  17. package/file-picker/index.js +2 -1
  18. package/focus/index.js +1 -1
  19. package/header/index.js +1 -1
  20. package/index.js +23 -19
  21. package/lib/checkbox/checkbox.d.ts +1 -0
  22. package/lib/components.d.ts +1 -0
  23. package/lib/dialog/dialog.d.ts +4 -0
  24. package/lib/dialog/locale.d.ts +3 -0
  25. package/lib/menu/menu.d.ts +1 -0
  26. package/lib/number-field/locale.d.ts +4 -0
  27. package/lib/number-field/number-field.d.ts +4 -2
  28. package/lib/progress/progress.d.ts +1 -0
  29. package/lib/progress-ring/progress-ring.d.ts +1 -0
  30. package/lib/radio/radio.d.ts +1 -0
  31. package/lib/selectable-box/definition.d.ts +3 -0
  32. package/lib/selectable-box/selectable-box.d.ts +13 -0
  33. package/lib/selectable-box/selectable-box.template.d.ts +4 -0
  34. package/lib/slider/definition.d.ts +1 -0
  35. package/lib/slider/slider.d.ts +5 -0
  36. package/lib/text-area/text-area.d.ts +3 -0
  37. package/lib/text-field/text-field.d.ts +5 -2
  38. package/listbox/index.js +3 -2
  39. package/locales/en-GB.js +7 -0
  40. package/locales/en-US.js +7 -0
  41. package/locales/ja-JP.js +7 -0
  42. package/locales/zh-CN.js +7 -0
  43. package/menu/index.js +4 -3
  44. package/menu-item/index.js +1 -1
  45. package/nav-disclosure/index.js +1 -1
  46. package/nav-item/index.js +1 -1
  47. package/number-field/index.js +3 -1
  48. package/option/index.js +1 -1
  49. package/package.json +1 -1
  50. package/pagination/index.js +2 -1
  51. package/popup/index.js +4 -3
  52. package/radio/index.js +1 -1
  53. package/select/index.js +5 -3
  54. package/selectable-box/index.js +23 -0
  55. package/shared/Reflector.js +65 -0
  56. package/shared/date-picker/calendar/segment.d.ts +21 -0
  57. package/shared/date-picker/date-picker-base.d.ts +1 -0
  58. package/shared/definition.js +2 -2
  59. package/shared/definition10.js +4 -73
  60. package/shared/definition11.js +1 -1
  61. package/shared/definition12.js +1 -1
  62. package/shared/definition13.js +2 -2
  63. package/shared/definition14.js +12 -5
  64. package/shared/definition15.js +3 -3
  65. package/shared/definition16.js +22 -8
  66. package/shared/definition17.js +5 -5
  67. package/shared/definition18.js +15 -8
  68. package/shared/definition19.js +18 -10
  69. package/shared/definition2.js +2 -2
  70. package/shared/definition20.js +1 -1
  71. package/shared/definition21.js +1 -1
  72. package/shared/definition22.js +2 -2
  73. package/shared/definition23.js +4 -3
  74. package/shared/definition24.js +2 -2
  75. package/shared/definition27.js +13 -4
  76. package/shared/definition28.js +2 -2
  77. package/shared/definition29.js +2 -2
  78. package/shared/definition3.js +1 -1
  79. package/shared/definition30.js +2 -2
  80. package/shared/definition32.js +1 -1
  81. package/shared/definition33.js +19 -4
  82. package/shared/definition34.js +2 -2
  83. package/shared/definition35.js +3 -2
  84. package/shared/definition36.js +11 -3
  85. package/shared/definition37.js +13 -9
  86. package/shared/definition38.js +2 -2
  87. package/shared/definition39.js +5 -4
  88. package/shared/definition4.js +4 -3
  89. package/shared/definition40.js +4 -4
  90. package/shared/definition41.js +111 -76
  91. package/shared/definition42.js +77 -557
  92. package/shared/definition43.js +568 -102
  93. package/shared/definition44.js +104 -135
  94. package/shared/definition45.js +153 -17
  95. package/shared/definition46.js +16 -79
  96. package/shared/definition47.js +53 -475
  97. package/shared/definition48.js +493 -25
  98. package/shared/definition49.js +22 -121
  99. package/shared/definition5.js +1 -1
  100. package/shared/definition50.js +114 -261
  101. package/shared/definition51.js +258 -119
  102. package/shared/definition52.js +258 -109
  103. package/shared/definition53.js +84 -74
  104. package/shared/definition54.js +114 -69
  105. package/shared/definition55.js +81 -292
  106. package/shared/definition56.js +302 -13
  107. package/shared/definition57.js +11 -41
  108. package/shared/definition58.js +20 -154
  109. package/shared/definition59.js +181 -0
  110. package/shared/definition6.js +1 -1
  111. package/shared/definition7.js +3 -2
  112. package/shared/definition8.js +2 -2
  113. package/shared/enums.js +71 -0
  114. package/shared/icon.js +1 -1
  115. package/shared/index2.js +28 -1
  116. package/shared/key-codes.js +1 -1
  117. package/shared/key-codes2.js +9 -0
  118. package/shared/listbox.js +2 -7
  119. package/shared/localization/Locale.d.ts +4 -0
  120. package/shared/presentationDate.js +194 -141
  121. package/shared/radio.js +7 -0
  122. package/shared/text-field.js +1 -1
  123. package/shared/utils/Reflector.d.ts +8 -0
  124. package/shared/utils/randomId.d.ts +1 -0
  125. package/side-drawer/index.js +1 -1
  126. package/slider/index.js +2 -2
  127. package/split-button/index.js +2 -2
  128. package/style.css +686 -559
  129. package/styles/core/all.css +1 -1
  130. package/styles/core/theme.css +1 -1
  131. package/styles/core/typography.css +1 -1
  132. package/styles/tokens/theme-dark.css +4 -4
  133. package/styles/tokens/theme-light.css +4 -4
  134. package/styles/tokens/vivid-2-compat.css +1 -1
  135. package/switch/index.js +2 -2
  136. package/tab/index.js +2 -2
  137. package/tab-panel/index.js +1 -1
  138. package/tabs/index.js +4 -4
  139. package/tag/index.js +2 -2
  140. package/tag-group/index.js +1 -1
  141. package/text-area/index.js +3 -2
  142. package/text-field/index.js +3 -2
  143. package/toggletip/index.js +5 -4
  144. package/tooltip/index.js +5 -4
  145. package/tree-item/index.js +2 -2
  146. package/tree-view/index.js +1 -1
  147. package/vivid.api.json +141 -0
@@ -1,13 +1,8 @@
1
1
  import { a as attr, F as FoundationElement, 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 { a as applyMixins } from './apply-mixins.js';
6
- import { f as focusTemplateFactory } from './focus2.js';
7
- import { I as Icon } from './icon.js';
8
- import { w as when } from './when.js';
9
2
  import { c as classNames } from './class-names.js';
10
3
 
4
+ const styles = ".base {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n}";
5
+
11
6
  var __defProp = Object.defineProperty;
12
7
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
13
8
  var __decorateClass = (decorators, target, key, kind) => {
@@ -19,129 +14,35 @@ var __decorateClass = (decorators, target, key, kind) => {
19
14
  __defProp(target, key, result);
20
15
  return result;
21
16
  };
22
- class Tag extends FoundationElement {
17
+ class TagGroup extends FoundationElement {
23
18
  constructor() {
24
19
  super(...arguments);
25
- this.removable = false;
26
- this.disabled = false;
27
- this.selectable = false;
28
- this.selected = false;
29
- this.#select = () => {
30
- if (!this.selectable || this.disabled) {
31
- return;
32
- }
33
- this.selected = !this.selected;
34
- this.$emit("selected-change");
35
- };
36
- }
37
- remove() {
38
- if (!this.removable || this.selectable) {
39
- return;
40
- }
41
- this.$emit("removed");
42
- this.parentElement && this.parentElement.removeChild(this);
43
- }
44
- #select;
45
- handleKeydown(e) {
46
- if (e.key === "Enter") {
47
- this.#select();
48
- }
49
- if (e.key === "Delete" || e.key === "Backspace") {
50
- this.remove();
51
- }
52
- return true;
53
- }
54
- handleClick() {
55
- this.#select();
20
+ this.ariaLabel = null;
56
21
  }
57
22
  }
58
23
  __decorateClass([
59
- attr
60
- ], Tag.prototype, "connotation", 2);
61
- __decorateClass([
62
- attr
63
- ], Tag.prototype, "shape", 2);
64
- __decorateClass([
65
- attr
66
- ], Tag.prototype, "appearance", 2);
67
- __decorateClass([
68
- attr
69
- ], Tag.prototype, "label", 2);
70
- __decorateClass([
71
- attr({ mode: "boolean" })
72
- ], Tag.prototype, "removable", 2);
73
- __decorateClass([
74
- attr({ mode: "boolean" })
75
- ], Tag.prototype, "disabled", 2);
76
- __decorateClass([
77
- attr({ mode: "boolean" })
78
- ], Tag.prototype, "selectable", 2);
79
- __decorateClass([
80
- attr({ mode: "boolean" })
81
- ], Tag.prototype, "selected", 2);
82
- applyMixins(Tag, AffixIcon);
83
-
84
- const styles = "/**\n * Do not edit directly\n * Generated on Tue, 17 Oct 2023 15:27:52 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\nslot[name=icon] {\n font-size: calc(var(--tag-block-size) / 1.5);\n line-height: 1;\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.focus-indicator {\n --focus-stroke-gap-color: transparent;\n}\n.base:not(:focus-visible) .focus-indicator {\n display: none;\n}";
24
+ attr({ attribute: "aria-label" })
25
+ ], TagGroup.prototype, "ariaLabel", 2);
85
26
 
86
- const getClasses = ({
87
- connotation,
88
- appearance,
89
- shape,
90
- disabled,
91
- selectable,
92
- removable,
93
- selected
94
- }) => classNames(
95
- "base",
96
- ["disabled", disabled],
97
- ["selectable", selectable],
98
- ["active", selectable && selected],
99
- ["removable", removable && !selectable],
100
- [`connotation-${connotation}`, Boolean(connotation)],
101
- [`appearance-${appearance}`, Boolean(appearance)],
102
- [`shape-${shape}`, Boolean(shape)]
27
+ const getClasses = (_) => classNames(
28
+ "base"
103
29
  );
104
- function renderDismissButton(iconTag) {
30
+ const TagGroupTemplate = () => {
105
31
  return html`
106
- <span
107
- aria-hidden="true"
108
- class="dismiss-button"
109
- @click="${(x) => x.remove()}">
110
- <${iconTag} name="close-line"></${iconTag}>
111
- </span>`;
112
- }
113
- const tagTemplate = (context) => {
114
- const affixIconTemplate = affixIconTemplateFactory(context);
115
- const iconTag = context.tagFor(Icon);
116
- const focusTemplate = focusTemplateFactory(context);
117
- return html`
118
- <span class="${getClasses}"
119
- role="option"
120
- aria-disabled="${(x) => x.disabled}"
121
- aria-selected="${(x) => x.selectable}"
122
- tabindex="${(x) => x.disabled ? null : 0}"
123
- @keydown="${(x, c) => x.handleKeydown(c.event)}"
124
- @click="${(x) => x.handleClick()}">
125
- ${(x) => affixIconTemplate(x.icon, IconWrapper.Slot)}
126
- ${when((x) => x.label, (x) => html`<span class="label">${x.label}</span>`)}
127
- ${when((x) => x.removable && !x.selectable, renderDismissButton(iconTag))}
128
- ${when(
129
- (x) => x.selectable && x.selected,
130
- html`<${iconTag} class="selectable-icon" name="check-circle-solid"></${iconTag}>`
131
- )}
132
- ${() => focusTemplate}
133
- </span>`;
32
+ <div class="${getClasses}" role="listbox" aria-orientation="horizontal" aria-label="${(x) => x.ariaLabel}">
33
+ <slot></slot>
34
+ </div>
35
+ `;
134
36
  };
135
37
 
136
- const tagDefinition = Tag.compose({
137
- baseName: "tag",
138
- template: tagTemplate,
139
- styles,
140
- shadowOptions: {
141
- delegatesFocus: true
38
+ const tagGroupDefinition = TagGroup.compose(
39
+ {
40
+ baseName: "tag-group",
41
+ template: TagGroupTemplate,
42
+ styles
142
43
  }
143
- });
144
- const tagRegistries = [tagDefinition(), ...iconRegistries, ...focusRegistries];
145
- const registerTag = registerFactory(tagRegistries);
44
+ );
45
+ const tagGroupRegistries = [tagGroupDefinition()];
46
+ const registerTagGroup = registerFactory(tagGroupRegistries);
146
47
 
147
- export { registerTag as r, tagDefinition as t };
48
+ export { tagGroupRegistries as a, registerTagGroup as r, tagGroupDefinition as t };
@@ -4,7 +4,7 @@ import { I as Icon } from './icon.js';
4
4
  import { w as when } from './when.js';
5
5
  import { c as classNames } from './class-names.js';
6
6
 
7
- const styles = "/**\n * Do not edit directly\n * Generated on Tue, 17 Oct 2023 15:27:52 GMT\n */\n.base {\n display: inline-flex;\n overflow: hidden;\n align-items: center;\n justify-content: center;\n background-color: var(--_appearance-color-fill);\n block-size: var(--_size);\n box-shadow: inset 0 0 0 1px var(--_appearance-color-outline);\n color: var(--_appearance-color-text);\n inline-size: var(--_size);\n vertical-align: middle;\n}\n.base.connotation-cta {\n /* @cssprop [--vvd-avatar-cta-primary=var(--vvd-color-cta-500)] */\n --_connotation-color-primary: var(--vvd-avatar-cta-primary, var(--vvd-color-cta-500));\n /* @cssprop [--vvd-avatar-cta-primary-text=var(--vvd-color-canvas)] */\n --_connotation-color-primary-text: var(--vvd-avatar-cta-primary-text, var(--vvd-color-canvas));\n /* @cssprop [--vvd-avatar-cta-firm=var(--vvd-color-cta-600)] */\n --_connotation-color-firm: var(--vvd-avatar-cta-firm, var(--vvd-color-cta-600));\n /* @cssprop [--vvd-avatar-cta-fierce=var(--vvd-color-cta-700)] */\n --_connotation-color-fierce: var(--vvd-avatar-cta-fierce, var(--vvd-color-cta-700));\n /* @cssprop [--vvd-avatar-cta-pale=var(--vvd-color-cta-300)] */\n --_connotation-color-pale: var(--vvd-avatar-cta-pale, var(--vvd-color-cta-300));\n /* @cssprop [--vvd-avatar-cta-soft=var(--vvd-color-cta-100)] */\n --_connotation-color-soft: var(--vvd-avatar-cta-soft, var(--vvd-color-cta-100));\n}\n.base:not(.connotation-cta) {\n /* @cssprop [--vvd-avatar-accent-primary=var(--vvd-color-canvas-text)] */\n --_connotation-color-primary: var(--vvd-avatar-accent-primary, var(--vvd-color-canvas-text));\n /* @cssprop [--vvd-avatar-accent-primary-text=var(--vvd-color-canvas)] */\n --_connotation-color-primary-text: var(--vvd-avatar-accent-primary-text, var(--vvd-color-canvas));\n /* @cssprop [--vvd-avatar-accent-firm=var(--vvd-color-canvas-text)] */\n --_connotation-color-firm: var(--vvd-avatar-accent-firm, var(--vvd-color-canvas-text));\n /* @cssprop [--vvd-avatar-accent-fierce=var(--vvd-color-neutral-700)] */\n --_connotation-color-fierce: var(--vvd-avatar-accent-fierce, var(--vvd-color-neutral-700));\n /* @cssprop [--vvd-avatar-accent-pale=var(--vvd-color-neutral-300)] */\n --_connotation-color-pale: var(--vvd-avatar-accent-pale, var(--vvd-color-neutral-300));\n /* @cssprop [--vvd-avatar-accent-soft=var(--vvd-color-neutral-100)] */\n --_connotation-color-soft: var(--vvd-avatar-accent-soft, var(--vvd-color-neutral-100));\n}\n.base {\n --_appearance-color-text: var(--_connotation-color-primary-text);\n --_appearance-color-fill: var(--_connotation-color-primary);\n --_appearance-color-outline: transparent;\n}\n.base.appearance-outlined {\n --_appearance-color-text: var(--_connotation-color-firm);\n --_appearance-color-fill: transparent;\n --_appearance-color-outline: var(--_connotation-color-firm);\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.appearance-subtle {\n --_appearance-color-text: var(--_connotation-color-contrast);\n --_appearance-color-fill: var(--_connotation-color-soft);\n --_appearance-color-outline: transparent;\n}\n.base.size-condensed {\n --_size: calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density, 0), 2) - 8));\n}\n.base.size-condensed .initials {\n font: var(--vvd-typography-base-condensed-bold);\n}\n.base.size-condensed .icon {\n font-size: calc(calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density, 0), 2) - 8)) / 2);\n line-height: 1;\n}\n.base.size-expanded {\n --_size: calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density, 0), 2) + 8));\n}\n.base.size-expanded .initials {\n font: var(--vvd-typography-heading-4);\n}\n.base.size-expanded .icon {\n font-size: calc(calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density, 0), 2) + 8)) / 2);\n line-height: 1;\n}\n.base:not(.size-condensed, .size-expanded) {\n --_size: calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density, 0), 2)));\n}\n.base:not(.size-condensed, .size-expanded) .initials {\n font: var(--vvd-typography-base-extended-bold);\n}\n.base:not(.size-condensed, .size-expanded) .icon {\n font-size: calc(calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density, 0), 2))) / 2);\n line-height: 1;\n}\n.base:not(.shape-pill) {\n border-radius: 6px;\n}\n.base.shape-pill {\n border-radius: 50%;\n}\n.base .initials {\n text-transform: uppercase;\n}\n.base ::slotted(*) {\n block-size: 100%;\n inline-size: 100%;\n object-fit: cover;\n}";
7
+ const styles = "/**\n * Do not edit directly\n * Generated on Wed, 01 Nov 2023 12:16:28 GMT\n */\n.base {\n display: inline-flex;\n overflow: hidden;\n align-items: center;\n justify-content: center;\n background-color: var(--_appearance-color-fill);\n block-size: var(--_size);\n box-shadow: inset 0 0 0 1px var(--_appearance-color-outline);\n color: var(--_appearance-color-text);\n inline-size: var(--_size);\n vertical-align: middle;\n}\n.base.connotation-cta {\n /* @cssprop [--vvd-avatar-cta-primary=var(--vvd-color-cta-500)] */\n --_connotation-color-primary: var(--vvd-avatar-cta-primary, var(--vvd-color-cta-500));\n /* @cssprop [--vvd-avatar-cta-primary-text=var(--vvd-color-canvas)] */\n --_connotation-color-primary-text: var(--vvd-avatar-cta-primary-text, var(--vvd-color-canvas));\n /* @cssprop [--vvd-avatar-cta-firm=var(--vvd-color-cta-600)] */\n --_connotation-color-firm: var(--vvd-avatar-cta-firm, var(--vvd-color-cta-600));\n /* @cssprop [--vvd-avatar-cta-fierce=var(--vvd-color-cta-700)] */\n --_connotation-color-fierce: var(--vvd-avatar-cta-fierce, var(--vvd-color-cta-700));\n /* @cssprop [--vvd-avatar-cta-pale=var(--vvd-color-cta-300)] */\n --_connotation-color-pale: var(--vvd-avatar-cta-pale, var(--vvd-color-cta-300));\n /* @cssprop [--vvd-avatar-cta-soft=var(--vvd-color-cta-100)] */\n --_connotation-color-soft: var(--vvd-avatar-cta-soft, var(--vvd-color-cta-100));\n}\n.base:not(.connotation-cta) {\n /* @cssprop [--vvd-avatar-accent-primary=var(--vvd-color-canvas-text)] */\n --_connotation-color-primary: var(--vvd-avatar-accent-primary, var(--vvd-color-canvas-text));\n /* @cssprop [--vvd-avatar-accent-primary-text=var(--vvd-color-canvas)] */\n --_connotation-color-primary-text: var(--vvd-avatar-accent-primary-text, var(--vvd-color-canvas));\n /* @cssprop [--vvd-avatar-accent-firm=var(--vvd-color-canvas-text)] */\n --_connotation-color-firm: var(--vvd-avatar-accent-firm, var(--vvd-color-canvas-text));\n /* @cssprop [--vvd-avatar-accent-fierce=var(--vvd-color-neutral-700)] */\n --_connotation-color-fierce: var(--vvd-avatar-accent-fierce, var(--vvd-color-neutral-700));\n /* @cssprop [--vvd-avatar-accent-pale=var(--vvd-color-neutral-300)] */\n --_connotation-color-pale: var(--vvd-avatar-accent-pale, var(--vvd-color-neutral-300));\n /* @cssprop [--vvd-avatar-accent-soft=var(--vvd-color-neutral-100)] */\n --_connotation-color-soft: var(--vvd-avatar-accent-soft, var(--vvd-color-neutral-100));\n}\n.base {\n --_appearance-color-text: var(--_connotation-color-primary-text);\n --_appearance-color-fill: var(--_connotation-color-primary);\n --_appearance-color-outline: transparent;\n}\n.base.appearance-outlined {\n --_appearance-color-text: var(--_connotation-color-firm);\n --_appearance-color-fill: transparent;\n --_appearance-color-outline: var(--_connotation-color-firm);\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.appearance-subtle {\n --_appearance-color-text: var(--_connotation-color-contrast);\n --_appearance-color-fill: var(--_connotation-color-soft);\n --_appearance-color-outline: transparent;\n}\n.base.size-condensed {\n --_size: calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density, 0), 2) - 8));\n}\n.base.size-condensed .initials {\n font: var(--vvd-typography-base-condensed-bold);\n}\n.base.size-condensed .icon {\n font-size: calc(calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density, 0), 2) - 8)) / 2);\n line-height: 1;\n}\n.base.size-expanded {\n --_size: calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density, 0), 2) + 8));\n}\n.base.size-expanded .initials {\n font: var(--vvd-typography-heading-4);\n}\n.base.size-expanded .icon {\n font-size: calc(calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density, 0), 2) + 8)) / 2);\n line-height: 1;\n}\n.base:not(.size-condensed, .size-expanded) {\n --_size: calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density, 0), 2)));\n}\n.base:not(.size-condensed, .size-expanded) .initials {\n font: var(--vvd-typography-base-extended-bold);\n}\n.base:not(.size-condensed, .size-expanded) .icon {\n font-size: calc(calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density, 0), 2))) / 2);\n line-height: 1;\n}\n.base:not(.shape-pill) {\n border-radius: 6px;\n}\n.base.shape-pill {\n border-radius: 50%;\n}\n.base .initials {\n text-transform: uppercase;\n}\n.base ::slotted(*) {\n block-size: 100%;\n inline-size: 100%;\n object-fit: cover;\n}";
8
8
 
9
9
  var __defProp = Object.defineProperty;
10
10
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
@@ -1,194 +1,13 @@
1
- import { F as FoundationElement, _ as __decorate, a as attr, n as nullableNumberConverter, o as observable, h as html, r as registerFactory } from './index.js';
1
+ import { a as attr, F as FoundationElement, h as html, r as registerFactory } from './index.js';
2
2
  import { a as iconRegistries } from './definition25.js';
3
- import { f as focusRegistries } from './definition56.js';
4
- import './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 { D as DelegatesARIATextbox } from './text-field2.js';
3
+ import { f as focusRegistries } from './definition57.js';
4
+ import { A as AffixIcon, a as affixIconTemplateFactory, I as IconWrapper } from './affix.js';
7
5
  import { a as applyMixins } from './apply-mixins.js';
8
- import { F as FormAssociated } from './form-associated.js';
6
+ import { f as focusTemplateFactory } from './focus2.js';
7
+ import { I as Icon } from './icon.js';
9
8
  import { w as when } from './when.js';
10
- import { r as ref } from './ref.js';
11
9
  import { c as classNames } from './class-names.js';
12
10
 
13
- class _TextArea extends FoundationElement {
14
- }
15
- /**
16
- * A form-associated base class for the {@link @microsoft/fast-foundation#(TextArea:class)} component.
17
- *
18
- * @internal
19
- */
20
- class FormAssociatedTextArea extends FormAssociated(_TextArea) {
21
- constructor() {
22
- super(...arguments);
23
- this.proxy = document.createElement("textarea");
24
- }
25
- }
26
-
27
- /**
28
- * Resize mode for a TextArea
29
- * @public
30
- */
31
- const TextAreaResize = {
32
- /**
33
- * No resize.
34
- */
35
- none: "none",
36
- /**
37
- * Resize vertically and horizontally.
38
- */
39
- both: "both",
40
- /**
41
- * Resize horizontally.
42
- */
43
- horizontal: "horizontal",
44
- /**
45
- * Resize vertically.
46
- */
47
- vertical: "vertical",
48
- };
49
-
50
- /**
51
- * A Text Area Custom HTML Element.
52
- * Based largely on the {@link https://developer.mozilla.org/en-US/docs/Web/HTML/Element/textarea | <textarea> element }.
53
- *
54
- * @slot - The default slot for the label
55
- * @csspart label - The label
56
- * @csspart root - The element wrapping the control
57
- * @csspart control - The textarea element
58
- * @fires change - Emits a custom 'change' event when the textarea emits a change event
59
- *
60
- * @public
61
- */
62
- let TextArea$1 = class TextArea extends FormAssociatedTextArea {
63
- constructor() {
64
- super(...arguments);
65
- /**
66
- * The resize mode of the element.
67
- * @public
68
- * @remarks
69
- * HTML Attribute: resize
70
- */
71
- this.resize = TextAreaResize.none;
72
- /**
73
- * Sizes the element horizontally by a number of character columns.
74
- *
75
- * @public
76
- * @remarks
77
- * HTML Attribute: cols
78
- */
79
- this.cols = 20;
80
- /**
81
- * @internal
82
- */
83
- this.handleTextInput = () => {
84
- this.value = this.control.value;
85
- };
86
- }
87
- readOnlyChanged() {
88
- if (this.proxy instanceof HTMLTextAreaElement) {
89
- this.proxy.readOnly = this.readOnly;
90
- }
91
- }
92
- autofocusChanged() {
93
- if (this.proxy instanceof HTMLTextAreaElement) {
94
- this.proxy.autofocus = this.autofocus;
95
- }
96
- }
97
- listChanged() {
98
- if (this.proxy instanceof HTMLTextAreaElement) {
99
- this.proxy.setAttribute("list", this.list);
100
- }
101
- }
102
- maxlengthChanged() {
103
- if (this.proxy instanceof HTMLTextAreaElement) {
104
- this.proxy.maxLength = this.maxlength;
105
- }
106
- }
107
- minlengthChanged() {
108
- if (this.proxy instanceof HTMLTextAreaElement) {
109
- this.proxy.minLength = this.minlength;
110
- }
111
- }
112
- spellcheckChanged() {
113
- if (this.proxy instanceof HTMLTextAreaElement) {
114
- this.proxy.spellcheck = this.spellcheck;
115
- }
116
- }
117
- /**
118
- * Selects all the text in the text area
119
- *
120
- * @public
121
- */
122
- select() {
123
- this.control.select();
124
- /**
125
- * The select event does not permeate the shadow DOM boundary.
126
- * This fn effectively proxies the select event,
127
- * emitting a `select` event whenever the internal
128
- * control emits a `select` event
129
- */
130
- this.$emit("select");
131
- }
132
- /**
133
- * Change event handler for inner control.
134
- * @remarks
135
- * "Change" events are not `composable` so they will not
136
- * permeate the shadow DOM boundary. This fn effectively proxies
137
- * the change event, emitting a `change` event whenever the internal
138
- * control emits a `change` event
139
- * @internal
140
- */
141
- handleChange() {
142
- this.$emit("change");
143
- }
144
- /** {@inheritDoc (FormAssociated:interface).validate} */
145
- validate() {
146
- super.validate(this.control);
147
- }
148
- };
149
- __decorate([
150
- attr({ mode: "boolean" })
151
- ], TextArea$1.prototype, "readOnly", void 0);
152
- __decorate([
153
- attr
154
- ], TextArea$1.prototype, "resize", void 0);
155
- __decorate([
156
- attr({ mode: "boolean" })
157
- ], TextArea$1.prototype, "autofocus", void 0);
158
- __decorate([
159
- attr({ attribute: "form" })
160
- ], TextArea$1.prototype, "formId", void 0);
161
- __decorate([
162
- attr
163
- ], TextArea$1.prototype, "list", void 0);
164
- __decorate([
165
- attr({ converter: nullableNumberConverter })
166
- ], TextArea$1.prototype, "maxlength", void 0);
167
- __decorate([
168
- attr({ converter: nullableNumberConverter })
169
- ], TextArea$1.prototype, "minlength", void 0);
170
- __decorate([
171
- attr
172
- ], TextArea$1.prototype, "name", void 0);
173
- __decorate([
174
- attr
175
- ], TextArea$1.prototype, "placeholder", void 0);
176
- __decorate([
177
- attr({ converter: nullableNumberConverter, mode: "fromView" })
178
- ], TextArea$1.prototype, "cols", void 0);
179
- __decorate([
180
- attr({ converter: nullableNumberConverter, mode: "fromView" })
181
- ], TextArea$1.prototype, "rows", void 0);
182
- __decorate([
183
- attr({ mode: "boolean" })
184
- ], TextArea$1.prototype, "spellcheck", void 0);
185
- __decorate([
186
- observable
187
- ], TextArea$1.prototype, "defaultSlottedNodes", void 0);
188
- applyMixins(TextArea$1, DelegatesARIATextbox);
189
-
190
- const styles = "/**\n * Do not edit directly\n * Generated on Tue, 17 Oct 2023 15:27:52 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 cursor: not-allowed;\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 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}";
191
-
192
11
  var __defProp = Object.defineProperty;
193
12
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
194
13
  var __decorateClass = (decorators, target, key, kind) => {
@@ -200,95 +19,129 @@ var __decorateClass = (decorators, target, key, kind) => {
200
19
  __defProp(target, key, result);
201
20
  return result;
202
21
  };
203
- let TextArea = class extends TextArea$1 {
204
- };
22
+ class Tag extends FoundationElement {
23
+ constructor() {
24
+ super(...arguments);
25
+ this.removable = false;
26
+ this.disabled = false;
27
+ this.selectable = false;
28
+ this.selected = false;
29
+ this.#select = () => {
30
+ if (!this.selectable || this.disabled) {
31
+ return;
32
+ }
33
+ this.selected = !this.selected;
34
+ this.$emit("selected-change");
35
+ };
36
+ }
37
+ remove() {
38
+ if (!this.removable || this.selectable) {
39
+ return;
40
+ }
41
+ this.$emit("removed");
42
+ this.parentElement && this.parentElement.removeChild(this);
43
+ }
44
+ #select;
45
+ handleKeydown(e) {
46
+ if (e.key === "Enter") {
47
+ this.#select();
48
+ }
49
+ if (e.key === "Delete" || e.key === "Backspace") {
50
+ this.remove();
51
+ }
52
+ return true;
53
+ }
54
+ handleClick() {
55
+ this.#select();
56
+ }
57
+ }
58
+ __decorateClass([
59
+ attr
60
+ ], Tag.prototype, "connotation", 2);
61
+ __decorateClass([
62
+ attr
63
+ ], Tag.prototype, "shape", 2);
64
+ __decorateClass([
65
+ attr
66
+ ], Tag.prototype, "appearance", 2);
205
67
  __decorateClass([
206
68
  attr
207
- ], TextArea.prototype, "wrap", 2);
208
- TextArea = __decorateClass([
209
- errorText,
210
- formElements
211
- ], TextArea);
212
- applyMixins(TextArea, FormElementCharCount, FormElementHelperText, FormElementSuccessText);
69
+ ], Tag.prototype, "label", 2);
70
+ __decorateClass([
71
+ attr({ mode: "boolean" })
72
+ ], Tag.prototype, "removable", 2);
73
+ __decorateClass([
74
+ attr({ mode: "boolean" })
75
+ ], Tag.prototype, "disabled", 2);
76
+ __decorateClass([
77
+ attr({ mode: "boolean" })
78
+ ], Tag.prototype, "selectable", 2);
79
+ __decorateClass([
80
+ attr({ mode: "boolean" })
81
+ ], Tag.prototype, "selected", 2);
82
+ applyMixins(Tag, AffixIcon);
83
+
84
+ const styles = "/**\n * Do not edit directly\n * Generated on Wed, 01 Nov 2023 12:16:28 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\nslot[name=icon] {\n font-size: calc(var(--tag-block-size) / 1.5);\n line-height: 1;\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.focus-indicator {\n --focus-stroke-gap-color: transparent;\n}\n.base:not(:focus-visible) .focus-indicator {\n display: none;\n}";
213
85
 
214
- const getClasses = ({ value, errorValidationMessage, disabled, placeholder, readOnly, successText }) => classNames(
86
+ const getClasses = ({
87
+ connotation,
88
+ appearance,
89
+ shape,
90
+ disabled,
91
+ selectable,
92
+ removable,
93
+ selected
94
+ }) => classNames(
215
95
  "base",
216
- ["readonly", readOnly],
217
- ["placeholder", Boolean(placeholder)],
218
96
  ["disabled", disabled],
219
- ["error connotation-alert", Boolean(errorValidationMessage)],
220
- ["has-value", Boolean(value)],
221
- ["success connotation-success", !!successText]
97
+ ["selectable", selectable],
98
+ ["active", selectable && selected],
99
+ ["removable", removable && !selectable],
100
+ [`connotation-${connotation}`, Boolean(connotation)],
101
+ [`appearance-${appearance}`, Boolean(appearance)],
102
+ [`shape-${shape}`, Boolean(shape)]
222
103
  );
223
- function renderLabel() {
224
- return html`
225
- <label for="control" class="label">
226
- ${(x) => x.label}
227
- </label>`;
228
- }
229
- function renderCharCount() {
104
+ function renderDismissButton(iconTag) {
230
105
  return html`
231
- <span class="char-count">${(x) => x.value ? x.value.length : 0} / ${(x) => x.maxlength}</span>
232
- `;
106
+ <span
107
+ aria-hidden="true"
108
+ class="dismiss-button"
109
+ @click="${(x) => x.remove()}">
110
+ <${iconTag} name="close-line"></${iconTag}>
111
+ </span>`;
233
112
  }
234
- const TextAreaTemplate = (context) => {
113
+ const tagTemplate = (context) => {
114
+ const affixIconTemplate = affixIconTemplateFactory(context);
115
+ const iconTag = context.tagFor(Icon);
116
+ const focusTemplate = focusTemplateFactory(context);
235
117
  return html`
236
- <div class="${getClasses}">
237
- ${when((x) => x.charCount && x.maxlength, renderCharCount())}
238
- ${when((x) => x.label, renderLabel())}
239
- <textarea class="control" id="control"
240
- ?autofocus="${(x) => x.autofocus}"
241
- placeholder="${(x) => x.placeholder ? x.placeholder : null}"
242
- name="${(x) => x.name ? x.name : null}"
243
- maxlength="${(x) => x.maxlength ? x.maxlength : null}"
244
- rows="${(x) => x.rows ? x.rows : null}"
245
- cols="${(x) => x.cols ? x.cols : null}"
246
- wrap="${(x) => x.wrap ? x.wrap : null}"
247
- ?readonly="${(x) => x.readOnly}"
248
- ?disabled="${(x) => x.disabled}"
249
- ?required="${(x) => x.required}"
250
- ?spellcheck="${(x) => x.spellcheck}"
251
- :value="${(x) => x.value}"
252
- aria-atomic="${(x) => x.ariaAtomic}"
253
- aria-busy="${(x) => x.ariaBusy}"
254
- aria-controls="${(x) => x.ariaControls}"
255
- aria-current="${(x) => x.ariaCurrent}"
256
- aria-describedby="${(x) => x.ariaDescribedby}"
257
- aria-details="${(x) => x.ariaDetails}"
258
- aria-disabled="${(x) => x.ariaDisabled}"
259
- aria-errormessage="${(x) => x.ariaErrormessage}"
260
- aria-flowto="${(x) => x.ariaFlowto}"
261
- aria-haspopup="${(x) => x.ariaHaspopup}"
262
- aria-hidden="${(x) => x.ariaHidden}"
263
- aria-invalid="${(x) => x.ariaInvalid}"
264
- aria-keyshortcuts="${(x) => x.ariaKeyshortcuts}"
265
- aria-label="${(x) => x.ariaLabel}"
266
- aria-labelledby="${(x) => x.ariaLabelledby}"
267
- aria-live="${(x) => x.ariaLive}"
268
- aria-owns="${(x) => x.ariaOwns}"
269
- aria-relevant="${(x) => x.ariaRelevant}"
270
- aria-roledescription="${(x) => x.ariaRoledescription}"
271
- @input="${(x) => x.handleTextInput()}"
272
- @change="${(x) => x.handleChange()}"
273
- ${ref("control")}
274
- >
275
- </textarea>
276
- ${when((x) => !x.successText && !x.errorValidationMessage && x.helperText?.length, getFeedbackTemplate("helper", context))}
277
- ${when((x) => !x.successText && x.errorValidationMessage, getFeedbackTemplate("error", context))}
278
- ${when((x) => x.successText, getFeedbackTemplate("success", context))}
279
- </div>
280
- `;
118
+ <span class="${getClasses}"
119
+ role="option"
120
+ aria-disabled="${(x) => x.disabled}"
121
+ aria-selected="${(x) => x.selectable}"
122
+ tabindex="${(x) => x.disabled ? null : 0}"
123
+ @keydown="${(x, c) => x.handleKeydown(c.event)}"
124
+ @click="${(x) => x.handleClick()}">
125
+ ${(x) => affixIconTemplate(x.icon, IconWrapper.Slot)}
126
+ ${when((x) => x.label, (x) => html`<span class="label">${x.label}</span>`)}
127
+ ${when((x) => x.removable && !x.selectable, renderDismissButton(iconTag))}
128
+ ${when(
129
+ (x) => x.selectable && x.selected,
130
+ html`<${iconTag} class="selectable-icon" name="check-circle-solid"></${iconTag}>`
131
+ )}
132
+ ${() => focusTemplate}
133
+ </span>`;
281
134
  };
282
135
 
283
- const textAreaDefinition = TextArea.compose({
284
- baseName: "text-area",
285
- template: TextAreaTemplate,
136
+ const tagDefinition = Tag.compose({
137
+ baseName: "tag",
138
+ template: tagTemplate,
286
139
  styles,
287
140
  shadowOptions: {
288
141
  delegatesFocus: true
289
142
  }
290
143
  });
291
- const textAreaRegistries = [textAreaDefinition(), ...iconRegistries, ...focusRegistries];
292
- const registerTextArea = registerFactory(textAreaRegistries);
144
+ const tagRegistries = [tagDefinition(), ...iconRegistries, ...focusRegistries];
145
+ const registerTag = registerFactory(tagRegistries);
293
146
 
294
- export { textAreaRegistries as a, registerTextArea as r, textAreaDefinition as t };
147
+ export { registerTag as r, tagDefinition as t };