@vonage/vivid 3.0.0-next.134 → 3.0.0-next.136

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 (91) hide show
  1. package/combobox/index.js +3 -1
  2. package/custom-elements.json +455 -0
  3. package/index.js +12 -6
  4. package/lib/components.d.ts +4 -0
  5. package/lib/menu-item/menu-item.d.ts +1 -0
  6. package/lib/number-field/number-field.d.ts +2 -2
  7. package/lib/select/definition.d.ts +3 -0
  8. package/lib/select/index.d.ts +1 -0
  9. package/lib/select/select.d.ts +17 -0
  10. package/lib/select/select.template.d.ts +4 -0
  11. package/lib/tab/definition.d.ts +3 -0
  12. package/lib/tab/index.d.ts +1 -0
  13. package/lib/tab/tab.d.ts +9 -0
  14. package/lib/tab/tab.template.d.ts +3 -0
  15. package/lib/tab-panel/definition.d.ts +3 -0
  16. package/lib/tab-panel/index.d.ts +1 -0
  17. package/lib/tab-panel/tab-panel.d.ts +3 -0
  18. package/lib/tab-panel/tab-panel.template.d.ts +2 -0
  19. package/lib/tabs/definition.d.ts +3 -0
  20. package/lib/tabs/index.d.ts +1 -0
  21. package/lib/tabs/tabs.d.ts +10 -0
  22. package/lib/tabs/tabs.template.d.ts +2 -0
  23. package/lib/text-area/text-area.d.ts +2 -2
  24. package/lib/text-field/text-field.d.ts +2 -2
  25. package/listbox/index.js +2 -0
  26. package/note/index.js +1 -0
  27. package/number-field/index.js +3 -3
  28. package/option/index.js +1 -0
  29. package/package.json +1 -1
  30. package/select/index.js +34 -0
  31. package/shared/definition.js +1 -1
  32. package/shared/definition11.js +1 -1
  33. package/shared/definition12.js +1 -1
  34. package/shared/definition13.js +1 -1
  35. package/shared/definition14.js +1 -1
  36. package/shared/definition16.js +1 -1
  37. package/shared/definition17.js +4 -11
  38. package/shared/definition19.js +2 -2
  39. package/shared/definition2.js +1 -1
  40. package/shared/definition20.js +1 -1
  41. package/shared/definition21.js +1 -1
  42. package/shared/definition22.js +1 -1
  43. package/shared/definition23.js +1 -1
  44. package/shared/definition25.js +2 -2
  45. package/shared/definition27.js +20 -8
  46. package/shared/definition29.js +1 -1
  47. package/shared/definition30.js +1 -1
  48. package/shared/definition31.js +3 -2
  49. package/shared/definition32.js +1 -1
  50. package/shared/definition33.js +1 -1
  51. package/shared/definition34.js +1 -1
  52. package/shared/definition35.js +1 -1
  53. package/shared/definition36.js +618 -70
  54. package/shared/definition37.js +66 -572
  55. package/shared/definition38.js +526 -81
  56. package/shared/definition39.js +85 -218
  57. package/shared/definition4.js +1 -1
  58. package/shared/definition40.js +51 -103
  59. package/shared/definition41.js +23 -68
  60. package/shared/definition42.js +440 -0
  61. package/shared/definition43.js +281 -0
  62. package/shared/definition44.js +119 -0
  63. package/shared/definition45.js +77 -0
  64. package/shared/definition5.js +1 -1
  65. package/shared/definition6.js +1 -1
  66. package/shared/definition7.js +1 -1
  67. package/shared/definition8.js +1 -1
  68. package/shared/definition9.js +1 -1
  69. package/shared/form-elements.js +19 -13
  70. package/shared/listbox.js +2 -9
  71. package/shared/numbers.js +10 -1
  72. package/shared/patterns/focus.d.ts +1 -1
  73. package/shared/patterns/form-elements/form-elements.d.ts +20 -8
  74. package/shared/select.options.js +10 -0
  75. package/shared/strings.js +9 -0
  76. package/shared/text-field.js +1 -1
  77. package/side-drawer/index.js +1 -1
  78. package/slider/index.js +1 -1
  79. package/styles/core/all.css +1 -1
  80. package/styles/core/theme.css +1 -1
  81. package/styles/core/typography.css +1 -1
  82. package/styles/tokens/theme-dark.css +4 -4
  83. package/styles/tokens/theme-light.css +4 -4
  84. package/switch/index.js +2 -1
  85. package/tab/index.js +16 -0
  86. package/tab-panel/index.js +4 -0
  87. package/tabs/index.js +24 -0
  88. package/text-area/index.js +1 -1
  89. package/text-field/index.js +1 -1
  90. package/tooltip/index.js +1 -1
  91. package/vivid.api.json +420 -0
@@ -1,280 +1,147 @@
1
- import { F as FoundationElement, _ as __decorate, a as attr, Z as nullableNumberConverter, N as observable, b as __metadata, h as html, r as registerFactory } from './index.js';
1
+ import { F as FoundationElement, _ as __decorate, a as attr, N as observable, 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 { C as CheckableFormAssociated } from './form-associated.js';
5
+ import { a as keySpace, k as keyEnter } from './key-codes.js';
4
6
  import './affix.js';
5
- import './focus.js';
6
- import { f as formElements, g as getFeedbackTemplate } from './form-elements.js';
7
- import { D as DelegatesARIATextbox } from './text-field2.js';
8
- import { a as applyMixins } from './apply-mixins.js';
9
- import { F as FormAssociated } from './form-associated.js';
10
7
  import { f as focusTemplateFactory } from './focus2.js';
8
+ import './form-elements.js';
11
9
  import { w as when } from './when.js';
12
- import { r as ref } from './ref.js';
13
10
  import { c as classNames } from './class-names.js';
14
11
 
15
- class _TextArea extends FoundationElement {
12
+ class _Switch extends FoundationElement {
16
13
  }
17
14
  /**
18
- * A form-associated base class for the {@link @microsoft/fast-foundation#(TextArea:class)} component.
15
+ * A form-associated base class for the {@link @microsoft/fast-foundation#(Switch:class)} component.
19
16
  *
20
17
  * @internal
21
18
  */
22
- class FormAssociatedTextArea extends FormAssociated(_TextArea) {
19
+ class FormAssociatedSwitch extends CheckableFormAssociated(_Switch) {
23
20
  constructor() {
24
21
  super(...arguments);
25
- this.proxy = document.createElement("textarea");
22
+ this.proxy = document.createElement("input");
26
23
  }
27
24
  }
28
25
 
29
26
  /**
30
- * Resize mode for a TextArea
31
- * @public
32
- */
33
- const TextAreaResize = {
34
- /**
35
- * No resize.
36
- */
37
- none: "none",
38
- /**
39
- * Resize vertically and horizontally.
40
- */
41
- both: "both",
42
- /**
43
- * Resize horizontally.
44
- */
45
- horizontal: "horizontal",
46
- /**
47
- * Resize vertically.
48
- */
49
- vertical: "vertical",
50
- };
51
-
52
- /**
53
- * A Text Area Custom HTML Element.
54
- * Based largely on the {@link https://developer.mozilla.org/en-US/docs/Web/HTML/Element/textarea | <textarea> element }.
27
+ * A Switch Custom HTML Element.
28
+ * Implements the {@link https://www.w3.org/TR/wai-aria-1.1/#switch | ARIA switch }.
55
29
  *
56
- * @slot - The default slot for the label
30
+ * @slot - The deafult slot for the label
31
+ * @slot checked-message - The message when in a checked state
32
+ * @slot unchecked-message - The message when in an unchecked state
57
33
  * @csspart label - The label
58
- * @csspart root - The element wrapping the control
59
- * @csspart control - The textarea element
60
- * @fires change - Emits a custom 'change' event when the textarea emits a change event
34
+ * @csspart switch - The element representing the switch, which wraps the indicator
35
+ * @csspart status-message - The wrapper for the status messages
36
+ * @csspart checked-message - The checked message
37
+ * @csspart unchecked-message - The unchecked message
38
+ * @fires change - Emits a custom change event when the checked state changes
61
39
  *
62
40
  * @public
63
41
  */
64
- class TextArea$1 extends FormAssociatedTextArea {
42
+ class Switch$1 extends FormAssociatedSwitch {
65
43
  constructor() {
66
- super(...arguments);
44
+ super();
67
45
  /**
68
- * The resize mode of the element.
69
- * @public
70
- * @remarks
71
- * HTML Attribute: resize
46
+ * The element's value to be included in form submission when checked.
47
+ * Default to "on" to reach parity with input[type="checkbox"]
48
+ *
49
+ * @internal
72
50
  */
73
- this.resize = TextAreaResize.none;
51
+ this.initialValue = "on";
74
52
  /**
75
- * Sizes the element horizontally by a number of character columns.
76
- *
77
- * @public
78
- * @remarks
79
- * HTML Attribute: cols
53
+ * @internal
80
54
  */
81
- this.cols = 20;
55
+ this.keypressHandler = (e) => {
56
+ if (this.readOnly) {
57
+ return;
58
+ }
59
+ switch (e.key) {
60
+ case keyEnter:
61
+ case keySpace:
62
+ this.checked = !this.checked;
63
+ break;
64
+ }
65
+ };
82
66
  /**
83
67
  * @internal
84
68
  */
85
- this.handleTextInput = () => {
86
- this.value = this.control.value;
69
+ this.clickHandler = (e) => {
70
+ if (!this.disabled && !this.readOnly) {
71
+ this.checked = !this.checked;
72
+ }
87
73
  };
74
+ this.proxy.setAttribute("type", "checkbox");
88
75
  }
89
76
  readOnlyChanged() {
90
- if (this.proxy instanceof HTMLTextAreaElement) {
77
+ if (this.proxy instanceof HTMLInputElement) {
91
78
  this.proxy.readOnly = this.readOnly;
92
79
  }
93
- }
94
- autofocusChanged() {
95
- if (this.proxy instanceof HTMLTextAreaElement) {
96
- this.proxy.autofocus = this.autofocus;
97
- }
98
- }
99
- listChanged() {
100
- if (this.proxy instanceof HTMLTextAreaElement) {
101
- this.proxy.setAttribute("list", this.list);
102
- }
103
- }
104
- maxlengthChanged() {
105
- if (this.proxy instanceof HTMLTextAreaElement) {
106
- this.proxy.maxLength = this.maxlength;
107
- }
108
- }
109
- minlengthChanged() {
110
- if (this.proxy instanceof HTMLTextAreaElement) {
111
- this.proxy.minLength = this.minlength;
112
- }
113
- }
114
- spellcheckChanged() {
115
- if (this.proxy instanceof HTMLTextAreaElement) {
116
- this.proxy.spellcheck = this.spellcheck;
117
- }
80
+ this.readOnly
81
+ ? this.classList.add("readonly")
82
+ : this.classList.remove("readonly");
118
83
  }
119
84
  /**
120
- * Selects all the text in the text area
121
- *
122
- * @public
85
+ * @internal
123
86
  */
124
- select() {
125
- this.control.select();
87
+ checkedChanged(prev, next) {
88
+ super.checkedChanged(prev, next);
126
89
  /**
127
- * The select event does not permeate the shadow DOM boundary.
128
- * This fn effectively proxies the select event,
129
- * emitting a `select` event whenever the internal
130
- * control emits a `select` event
90
+ * @deprecated - this behavior already exists in the template and should not exist in the class.
131
91
  */
132
- this.$emit("select");
133
- }
134
- /**
135
- * Change event handler for inner control.
136
- * @remarks
137
- * "Change" events are not `composable` so they will not
138
- * permeate the shadow DOM boundary. This fn effectively proxies
139
- * the change event, emitting a `change` event whenever the internal
140
- * control emits a `change` event
141
- * @internal
142
- */
143
- handleChange() {
144
- this.$emit("change");
145
- }
146
- /** {@inheritDoc (FormAssociated:interface).validate} */
147
- validate() {
148
- super.validate(this.control);
92
+ this.checked ? this.classList.add("checked") : this.classList.remove("checked");
149
93
  }
150
94
  }
151
95
  __decorate([
152
- attr({ mode: "boolean" })
153
- ], TextArea$1.prototype, "readOnly", void 0);
154
- __decorate([
155
- attr
156
- ], TextArea$1.prototype, "resize", void 0);
157
- __decorate([
158
- attr({ mode: "boolean" })
159
- ], TextArea$1.prototype, "autofocus", void 0);
160
- __decorate([
161
- attr({ attribute: "form" })
162
- ], TextArea$1.prototype, "formId", void 0);
163
- __decorate([
164
- attr
165
- ], TextArea$1.prototype, "list", void 0);
166
- __decorate([
167
- attr({ converter: nullableNumberConverter })
168
- ], TextArea$1.prototype, "maxlength", void 0);
169
- __decorate([
170
- attr({ converter: nullableNumberConverter })
171
- ], TextArea$1.prototype, "minlength", void 0);
172
- __decorate([
173
- attr
174
- ], TextArea$1.prototype, "name", void 0);
175
- __decorate([
176
- attr
177
- ], TextArea$1.prototype, "placeholder", void 0);
178
- __decorate([
179
- attr({ converter: nullableNumberConverter, mode: "fromView" })
180
- ], TextArea$1.prototype, "cols", void 0);
181
- __decorate([
182
- attr({ converter: nullableNumberConverter, mode: "fromView" })
183
- ], TextArea$1.prototype, "rows", void 0);
184
- __decorate([
185
- attr({ mode: "boolean" })
186
- ], TextArea$1.prototype, "spellcheck", void 0);
96
+ attr({ attribute: "readonly", mode: "boolean" })
97
+ ], Switch$1.prototype, "readOnly", void 0);
187
98
  __decorate([
188
99
  observable
189
- ], TextArea$1.prototype, "defaultSlottedNodes", void 0);
190
- applyMixins(TextArea$1, DelegatesARIATextbox);
100
+ ], Switch$1.prototype, "defaultSlottedNodes", void 0);
191
101
 
192
- var css_248z = "/**\n * Do not edit directly\n * Generated on Thu, 12 Jan 2023 07:26:42 GMT\n */\n:host {\n display: inline-block;\n}\n\n.base {\n display: inline-grid;\n width: 100%;\n gap: 4px;\n grid-template-columns: 1fr max-content;\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-400);\n --_appearance-color-fill: var(--vvd-color-neutral-200);\n --_appearance-color-outline: var(--vvd-color-neutral-400);\n}\n.base:where(:disabled, .disabled).appearance-ghost {\n --_appearance-color-text: var(--vvd-color-neutral-400);\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-100);\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-400);\n --_appearance-color-fill: transparent;\n --_appearance-color-outline: transparent;\n}\n.base.connotation-success {\n --_connotation-color-primary: var(--vvd-color-success-500);\n --_connotation-color-backdrop: var(--vvd-color-success-50);\n --_connotation-color-intermediate: var(--vvd-color-success-500);\n --_connotation-color-firm: var(--vvd-color-success-600);\n --_connotation-color-faint: var(--vvd-color-success-50);\n --_connotation-color-soft: var(--vvd-color-success-100);\n}\n.base.connotation-alert {\n --_connotation-color-primary: var(--vvd-color-alert-500);\n --_connotation-color-backdrop: var(--vvd-color-alert-50);\n --_connotation-color-intermediate: var(--vvd-color-alert-500);\n --_connotation-color-firm: var(--vvd-color-alert-600);\n --_connotation-color-faint: var(--vvd-color-alert-50);\n --_connotation-color-soft: var(--vvd-color-alert-100);\n}\n.base:not(.connotation-success, .connotation-alert) {\n --_connotation-color-primary: var(--vvd-color-canvas-text);\n --_connotation-color-backdrop: var(--vvd-color-canvas);\n --_connotation-color-intermediate: var(--vvd-color-neutral-500);\n --_connotation-color-firm: var(--vvd-color-canvas-text);\n --_connotation-color-faint: var(--vvd-color-neutral-50);\n --_connotation-color-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/3;\n grid-row: 1;\n line-height: 20px;\n}\n\n.fieldset {\n position: relative;\n display: flex;\n align-items: center;\n border-radius: 6px;\n grid-column: 1/3;\n}\n\n.control {\n width: 100%;\n padding: 8px 16px;\n border: 0 none;\n background-color: var(--_appearance-color-fill);\n border-radius: inherit;\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 min-block-size: calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density, 0), 2)));\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 -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 -webkit-text-fill-color: var(--_low-ink-color); /* 1. sets text fill to current `color` for safari */\n}\n@supports selector(:focus-visible) {\n .control:focus {\n outline: none;\n }\n}\n\n.focus-indicator {\n --focus-stroke-gap-color: transparent;\n pointer-events: none;\n}\n.fieldset:not(:focus-visible, :focus-within) > .focus-indicator {\n display: none;\n}";
102
+ var css_248z = "/**\n * Do not edit directly\n * Generated on Tue, 17 Jan 2023 16:12:43 GMT\n */\n.control {\n display: inline-flex;\n gap: 8px;\n}\n.control.connotation-cta {\n --_connotation-color-primary-text: var(--vvd-color-canvas);\n --_connotation-color-primary: var(--vvd-color-cta-500);\n --_connotation-color-primary-increment: var(--vvd-color-cta-600);\n --_connotation-color-backdrop: var(--vvd-color-cta-50);\n --_connotation-color-firm: var(--vvd-color-cta-600);\n --_connotation-color-intermediate: var(--vvd-color-cta-500);\n}\n.control.connotation-alert {\n --_connotation-color-primary-text: var(--vvd-color-canvas);\n --_connotation-color-primary: var(--vvd-color-alert-500);\n --_connotation-color-primary-increment: var(--vvd-color-alert-600);\n --_connotation-color-backdrop: var(--vvd-color-alert-50);\n --_connotation-color-firm: var(--vvd-color-alert-600);\n --_connotation-color-intermediate: var(--vvd-color-alert-500);\n}\n.control.connotation-success {\n --_connotation-color-primary-text: var(--vvd-color-canvas);\n --_connotation-color-primary: var(--vvd-color-success-500);\n --_connotation-color-primary-increment: var(--vvd-color-success-600);\n --_connotation-color-backdrop: var(--vvd-color-success-50);\n --_connotation-color-firm: var(--vvd-color-success-600);\n --_connotation-color-intermediate: var(--vvd-color-success-500);\n}\n.control:not(.connotation-cta, .connotation-alert, .connotation-success) {\n --_connotation-color-primary-text: var(--vvd-color-canvas);\n --_connotation-color-primary: var(--vvd-color-canvas-text);\n --_connotation-color-primary-increment: var(--vvd-color-neutral-800);\n --_connotation-color-backdrop: var(--vvd-color-canvas);\n --_connotation-color-firm: var(--vvd-color-canvas-text);\n --_connotation-color-intermediate: var(--vvd-color-neutral-500);\n}\n.control {\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.control.appearance-filled {\n --_appearance-color-text: var(--_connotation-color-primary-text);\n --_appearance-color-fill: var(--_connotation-color-primary);\n --_appearance-color-outline: transparent;\n}\n.control:where(: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.control:where(:hover, .hover):where(:not(:disabled, .disabled, .readonly)).appearance-filled {\n --_appearance-color-text: var(--_connotation-color-primary-text);\n --_appearance-color-fill: var(--_connotation-color-primary-increment);\n --_appearance-color-outline: transparent;\n}\n.control:where(:disabled, .disabled) {\n --_appearance-color-text: var(--vvd-color-neutral-400);\n --_appearance-color-fill: var(--vvd-color-neutral-200);\n --_appearance-color-outline: var(--vvd-color-neutral-400);\n}\n.control:where(:disabled, .disabled).appearance-filled {\n --_appearance-color-text: var(--vvd-color-neutral-400);\n --_appearance-color-fill: var(--vvd-color-neutral-200);\n --_appearance-color-outline: transparent;\n}\n.control:where(.readonly):where(:not(:disabled, .disabled)) {\n --_appearance-color-text: var(--vvd-color-canvas-text);\n --_appearance-color-fill: var(--vvd-color-neutral-100);\n --_appearance-color-outline: var(--vvd-color-neutral-400);\n}\n.control:where(.readonly):where(:not(:disabled, .disabled)).appearance-filled {\n --_appearance-color-text: var(--vvd-color-neutral-800);\n --_appearance-color-fill: var(--vvd-color-neutral-200);\n --_appearance-color-outline: transparent;\n}\n@supports selector(:focus-visible) {\n .control:focus {\n outline: none;\n }\n}\n@supports (user-select: none) {\n .control {\n user-select: none;\n }\n}\n.control:not(.disabled) {\n cursor: pointer;\n}\n.control.disabled {\n cursor: not-allowed;\n}\n\n.switch {\n --_switch-inline-size: calc(calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density, 0), 2) - 20)) * 1.8);\n position: relative;\n display: flex;\n box-sizing: border-box;\n align-items: center;\n background-color: var(--_appearance-color-fill);\n block-size: calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density, 0), 2) - 20));\n border-radius: calc(calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density, 0), 2) - 20)) / .5);\n box-shadow: inset 0 0 0 1px var(--_appearance-color-outline);\n inline-size: var(--_switch-inline-size);\n transition: all 0.2s ease-in-out 0s;\n}\n\n.checked-indicator {\n --_switch-checked-indicator-size: calc(calc(1px * (40 + 4 * clamp(-1, var(--vvd-size-density, 0), 2) - 20)) / 1.6667);\n --_switch-gutter: calc(var(--_switch-checked-indicator-size) / 3);\n block-size: var(--_switch-checked-indicator-size);\n border-radius: inherit;\n inline-size: var(--_switch-checked-indicator-size);\n margin-inline-start: auto;\n transition: all 0.2s ease-in-out 0s;\n}\n.control.appearance-filled .checked-indicator {\n background-color: var(--vvd-color-neutral-100);\n}\n.control:not(.appearance-filled) .checked-indicator {\n background-color: var(--_appearance-color-outline);\n}\n.control:not(.checked) .checked-indicator {\n transform: translateX(calc(-1 * var(--_switch-inline-size) + var(--_switch-checked-indicator-size) + var(--_switch-gutter)));\n}\n.control.checked .checked-indicator {\n transform: translateX(calc(-1 * var(--_switch-gutter)));\n}\n\n.label {\n color: var(--vvd-color-canvas-text);\n cursor: pointer;\n font: var(--vvd-typography-base);\n}\n\n.focus-indicator {\n --focus-inset: -4px;\n --focus-stroke-gap-color: transparent;\n border-radius: 14px;\n}\n.control:not(:focus-visible) .focus-indicator {\n display: none;\n}";
193
103
 
194
- let TextArea = class TextArea extends TextArea$1 {};
195
- __decorate([attr, __metadata("design:type", String)], TextArea.prototype, "wrap", void 0);
196
- TextArea = __decorate([formElements], TextArea);
104
+ class Switch extends Switch$1 {}
105
+ __decorate([attr, __metadata("design:type", String)], Switch.prototype, "label", void 0);
106
+ __decorate([attr, __metadata("design:type", String)], Switch.prototype, "connotation", void 0);
197
107
 
198
- let _ = t => t,
108
+ let _2 = t => t,
199
109
  _t,
200
110
  _t2;
201
- const getClasses = ({
202
- value,
203
- errorValidationMessage,
204
- disabled,
205
- placeholder,
206
- readOnly,
207
- successText
208
- }) => classNames('base', ['readonly', readOnly], ['placeholder', Boolean(placeholder)], ['disabled', disabled], ['error connotation-alert', Boolean(errorValidationMessage)], ['has-value', Boolean(value)], ['success connotation-success', !!successText]);
209
- function renderLabel() {
210
- return html(_t || (_t = _`
211
- <label for="control" class="label">
212
- ${0}
213
- </label>`), x => x.label);
214
- }
215
- const TextAreaTemplate = context => {
111
+ const getClasses = _ => classNames('control', ['appearance-filled', _.checked && !_.disabled && !_.readOnly], ['checked', _.checked], ['disabled', _.disabled], ['readonly', _.readOnly], [`connotation-${_.connotation}`, Boolean(_.checked) && Boolean(_.connotation)]);
112
+ const SwitchTemplate = context => {
216
113
  const focusTemplate = focusTemplateFactory(context);
217
- return html(_t2 || (_t2 = _`
218
- <div class="${0}">
219
- ${0}
220
- <div class="fieldset">
221
- <textarea class="control"
222
- ?autofocus="${0}"
223
- placeholder="${0}"
224
- name="${0}"
225
- maxlength="${0}"
226
- rows="${0}"
227
- cols="${0}"
228
- wrap="${0}"
229
- ?readonly="${0}"
230
- ?required="${0}"
231
- ?spellcheck="${0}"
232
- :value="${0}"
233
- aria-atomic="${0}"
234
- aria-busy="${0}"
235
- aria-controls="${0}"
236
- aria-current="${0}"
237
- aria-describedby="${0}"
238
- aria-details="${0}"
114
+ return html(_t || (_t = _2`
115
+ <div
116
+ class="${0}"
117
+ role="switch"
118
+ aria-checked="${0}"
239
119
  aria-disabled="${0}"
240
- aria-errormessage="${0}"
241
- aria-flowto="${0}"
242
- aria-haspopup="${0}"
243
- aria-hidden="${0}"
244
- aria-invalid="${0}"
245
- aria-keyshortcuts="${0}"
246
- aria-label="${0}"
247
- aria-labelledby="${0}"
248
- aria-live="${0}"
249
- aria-owns="${0}"
250
- aria-relevant="${0}"
251
- aria-roledescription="${0}"
252
- @input="${0}"
253
- @change="${0}"
120
+ aria-readonly="${0}"
121
+ tabindex="${0}"
122
+ @keypress="${0}"
123
+ @click="${0}"
124
+ >
125
+ <div class="switch">
126
+ <span class="checked-indicator"></span>
127
+ ${0}
128
+ </div>
129
+ ${0}
130
+ </div>
131
+ `), getClasses, x => x.checked, x => x.disabled, x => x.readOnly, x => x.disabled ? null : 0, (x, c) => x.keypressHandler(c.event), (x, c) => x.clickHandler(c.event), () => focusTemplate, when(x => x.label, html(_t2 || (_t2 = _2`<div class="label">
254
132
  ${0}
255
- >
256
- </textarea>
257
- ${0}
258
- </div>
259
- ${0}
260
- ${0}
261
- ${0}
262
- </div>
263
- `), getClasses, when(x => x.label, renderLabel()), x => x.autofocus, x => x.placeholder ? x.placeholder : null, x => x.name ? x.name : null, x => x.maxlength ? x.maxlength : null, x => x.rows ? x.rows : null, x => x.cols ? x.cols : null, x => x.wrap ? x.wrap : null, x => x.readOnly, x => x.required, x => x.spellcheck, x => x.value, x => x.ariaAtomic, x => x.ariaBusy, x => x.ariaControls, x => x.ariaCurrent, x => x.ariaDescribedby, x => x.ariaDetails, x => x.ariaDisabled, x => x.ariaErrormessage, x => x.ariaFlowto, x => x.ariaHaspopup, x => x.ariaHidden, x => x.ariaInvalid, x => x.ariaKeyshortcuts, x => x.ariaLabel, x => x.ariaLabelledby, x => x.ariaLive, x => x.ariaOwns, x => x.ariaRelevant, x => x.ariaRoledescription, x => x.handleTextInput(), x => x.handleChange(), ref('control'), () => focusTemplate, when(x => {
264
- var _a;
265
- return !x.successText && !x.errorValidationMessage && ((_a = x.helperText) === null || _a === void 0 ? void 0 : _a.length);
266
- }, getFeedbackTemplate('helper', context)), when(x => !x.successText && x.errorValidationMessage, getFeedbackTemplate('error', context)), when(x => x.successText, getFeedbackTemplate('success', context)));
133
+ </div>`), x => x.label)));
267
134
  };
268
135
 
269
- const textAreaDefinition = TextArea.compose({
270
- baseName: 'text-area',
271
- template: TextAreaTemplate,
136
+ const switchDefinition = Switch.compose({
137
+ baseName: 'switch',
138
+ template: SwitchTemplate,
272
139
  styles: css_248z,
273
140
  shadowOptions: {
274
141
  delegatesFocus: true
275
142
  }
276
143
  });
277
- const textAreaRegistries = [textAreaDefinition(), ...iconRegistries, ...focusRegistries];
278
- const registerTextArea = registerFactory(textAreaRegistries);
144
+ const switchRegistries = [switchDefinition(), ...iconRegistries, ...focusRegistries];
145
+ const registerSwitch = registerFactory(switchRegistries);
279
146
 
280
- export { textAreaRegistries as a, registerTextArea as r, textAreaDefinition as t };
147
+ export { switchRegistries as a, registerSwitch as r, switchDefinition as s };
@@ -1,7 +1,7 @@
1
1
  import { h as html, r as registerFactory } from './index.js';
2
2
  import { F as Focus } from './focus.js';
3
3
 
4
- var css_248z = "/**\n * Do not edit directly\n * Generated on Thu, 12 Jan 2023 07:26:42 GMT\n */\n:host {\n display: contents;\n border-radius: inherit;\n}\n\n.control {\n position: absolute;\n z-index: 1;\n box-sizing: border-box;\n border-radius: inherit;\n box-shadow: inset 0 0 0 3px var(--focus-stroke-gap-color, currentColor);\n inset: var(--focus-inset, 0);\n outline: 2px solid var(--focus-stroke-color, var(--vvd-color-canvas-text));\n outline-offset: -2px;\n}";
4
+ var css_248z = "/**\n * Do not edit directly\n * Generated on Tue, 17 Jan 2023 16:12:43 GMT\n */\n:host {\n display: contents;\n border-radius: inherit;\n}\n\n.control {\n position: absolute;\n z-index: 1;\n box-sizing: border-box;\n border-radius: inherit;\n box-shadow: inset 0 0 0 3px var(--focus-stroke-gap-color, currentColor);\n inset: var(--focus-inset, 0);\n outline: 2px solid var(--focus-stroke-color, var(--vvd-color-canvas-text));\n outline-offset: -2px;\n}";
5
5
 
6
6
  let _ = t => t,
7
7
  _t;
@@ -1,119 +1,67 @@
1
- import { _ as __decorate, a as attr, b as __metadata, h as html, r as registerFactory } from './index.js';
2
- import { f as focusRegistries } from './definition4.js';
1
+ import { F as FoundationElement, _ as __decorate, a as attr, b as __metadata, h as html, r as registerFactory } from './index.js';
3
2
  import { i as iconRegistries } from './definition3.js';
3
+ import { f as focusRegistries } from './definition4.js';
4
4
  import { b as AffixIcon, a as affixIconTemplateFactory } from './affix.js';
5
- import './focus.js';
6
- import { f as formElements, g as getFeedbackTemplate } from './form-elements.js';
7
- import { T as TextField$1 } from './text-field2.js';
8
5
  import { a as applyMixins } from './apply-mixins.js';
9
- import { c as css_248z } from './text-field.js';
10
6
  import { f as focusTemplateFactory } from './focus2.js';
11
- import { w as when } from './when.js';
12
- import { r as ref } from './ref.js';
13
7
  import { c as classNames } from './class-names.js';
14
8
 
15
- let TextField = class TextField extends TextField$1 {};
16
- __decorate([attr, __metadata("design:type", String)], TextField.prototype, "appearance", void 0);
17
- __decorate([attr, __metadata("design:type", String)], TextField.prototype, "shape", void 0);
18
- __decorate([attr, __metadata("design:type", String)], TextField.prototype, "autoComplete", void 0);
19
- TextField = __decorate([formElements], TextField);
20
- applyMixins(TextField, AffixIcon);
9
+ /**
10
+ * A Tab Component to be used with {@link @microsoft/fast-foundation#(Tabs:class)}
11
+ *
12
+ * @slot - The default slot for the tab content
13
+ *
14
+ * @public
15
+ */
16
+ class Tab$1 extends FoundationElement {
17
+ }
18
+ __decorate([
19
+ attr({ mode: "boolean" })
20
+ ], Tab$1.prototype, "disabled", void 0);
21
+
22
+ var css_248z = "/**\n * Do not edit directly\n * Generated on Tue, 17 Jan 2023 16:12:43 GMT\n */\n@supports selector(:focus-visible) {\n :host(:focus) {\n outline: none;\n }\n}\n:host(.vertical) {\n justify-content: end;\n grid-column: 1/auto;\n}\n\n.base {\n position: relative;\n display: flex;\n box-sizing: border-box;\n align-items: center;\n padding: var(--_tabs-tablist-gutter);\n background-color: var(--_appearance-color-fill);\n border-radius: 6px;\n box-shadow: inset 0 0 0 1px var(--_appearance-color-outline);\n color: var(--_appearance-color-text);\n font: var(--vvd-typography-base);\n gap: var(--_tabs-tablist-gutter);\n min-block-size: 48px;\n vertical-align: middle;\n white-space: nowrap;\n}\n.base {\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(--_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-400);\n --_appearance-color-fill: transparent;\n --_appearance-color-outline: transparent;\n}\n.base:where(:active, .active):where(:not(:disabled, .disabled)) {\n --_appearance-color-text: var(--_connotation-color-primary);\n --_appearance-color-fill: var(--_connotation-color-soft);\n --_appearance-color-outline: transparent;\n}\n@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}\n:host(.vertical) .base {\n padding-inline-start: calc(var(--_tabs-active-indicator-stroke-width) + var(--_tabs-tablist-gutter));\n}\n\n:host(:not(:focus-visible)) .focus-indicator {\n display: none;\n}\n\n.icon {\n font-size: 20px;\n}\n\n:host(:not(.vertical)) .base::after {\n position: absolute;\n background: currentColor;\n block-size: 2px;\n content: \"\";\n inline-size: calc(100% + var(--_tabs-tablist-gutter) * 2);\n inset-block-end: calc(var(--_tabs-tablist-gutter) * -2);\n margin-inline: calc(var(--_tabs-tablist-gutter) * -2);\n pointer-events: none;\n transition-property: opacity;\n}\n:host(:not(.vertical)):host([aria-selected=true]) .base::after {\n transition-delay: 0.2s;\n}\n:host(:not(.vertical)):host(:not([aria-selected=true])) .base::after {\n opacity: 0;\n}";
23
+
24
+ class Tab extends Tab$1 {
25
+ constructor() {
26
+ super(...arguments);
27
+ this.tabIndex = '-1';
28
+ this.ariaSelected = null;
29
+ }
30
+ }
31
+ __decorate([attr, __metadata("design:type", String)], Tab.prototype, "label", void 0);
32
+ __decorate([attr({
33
+ mode: 'fromView'
34
+ }), __metadata("design:type", Object)], Tab.prototype, "tabIndex", void 0);
35
+ __decorate([attr({
36
+ attribute: 'aria-selected'
37
+ }), __metadata("design:type", Object)], Tab.prototype, "ariaSelected", void 0);
38
+ applyMixins(Tab, AffixIcon);
21
39
 
22
40
  let _ = t => t,
23
- _t,
24
- _t2,
25
- _t3;
26
- const getStateClasses = ({
27
- errorValidationMessage,
41
+ _t;
42
+ const getClasses = ({
28
43
  disabled,
29
- value,
30
- readOnly,
31
- placeholder,
32
- appearance,
33
- shape,
34
- label,
35
- successText
36
- }) => 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)]);
37
- function renderLabel() {
38
- return html(_t || (_t = _`
39
- <label for="control" class="label">
40
- ${0}
41
- </label>`), x => x.label);
42
- }
43
- function renderCharCount() {
44
- return html(_t2 || (_t2 = _`
45
- <span class="char-count">${0} / ${0}</span>
46
- `), x => x.value ? x.value.length : 0, x => x.maxlength);
47
- }
48
- const TextfieldTemplate = context => {
44
+ ariaSelected
45
+ }) => classNames('base', ['disabled', Boolean(disabled)], ['selected', ariaSelected === 'true']);
46
+ function TabTemplate(context) {
49
47
  const affixIconTemplate = affixIconTemplateFactory(context);
50
48
  const focusTemplate = focusTemplateFactory(context);
51
- return html(_t3 || (_t3 = _`
52
- <div class="base ${0}">
53
- ${0}
54
- ${0}
55
- <div class="fieldset">
49
+ return html(_t || (_t = _`
50
+ <template slot="tab" role="tab" aria-disabled="${0}" aria-selected="${0}">
51
+ <div class="${0}">
56
52
  ${0}
57
- <input class="control"
58
- id="control"
59
- @input="${0}"
60
- @change="${0}"
61
- ?autofocus="${0}"
62
- ?disabled="${0}"
63
- list="${0}"
64
- maxlength="${0}"
65
- minlength="${0}"
66
- pattern="${0}"
67
- placeholder="${0}"
68
- ?readonly="${0}"
69
- ?required="${0}"
70
- size="${0}"
71
- autocomplete="${0}"
72
- name="${0}"
73
- ?spellcheck="${0}"
74
- :value="${0}"
75
- type="${0}"
76
- aria-atomic="${0}"
77
- aria-busy="${0}"
78
- aria-controls="${0}"
79
- aria-current="${0}"
80
- aria-describedby="${0}"
81
- aria-details="${0}"
82
- aria-disabled="${0}"
83
- aria-errormessage="${0}"
84
- aria-flowto="${0}"
85
- aria-haspopup="${0}"
86
- aria-hidden="${0}"
87
- aria-invalid="${0}"
88
- aria-keyshortcuts="${0}"
89
- aria-label="${0}"
90
- aria-labelledby="${0}"
91
- aria-live="${0}"
92
- aria-owns="${0}"
93
- aria-relevant="${0}"
94
- aria-roledescription="${0}"
95
- ${0}
96
- />
97
53
  ${0}
98
- </div>
99
- ${0}
100
- ${0}
101
- ${0}
102
- </div>`), getStateClasses, when(x => x.charCount && x.maxlength, renderCharCount()), when(x => x.label, renderLabel()), x => affixIconTemplate(x.icon), x => x.handleTextInput(), x => x.handleChange(), x => x.autofocus, x => x.disabled, x => x.list, x => x.maxlength, x => x.minlength, x => x.pattern, x => x.placeholder, x => x.readOnly, x => x.required, x => x.size, x => x.autoComplete, x => x.name, x => x.spellcheck, x => x.value, x => x.type, x => x.ariaAtomic, x => x.ariaBusy, x => x.ariaControls, x => x.ariaCurrent, x => x.ariaDescribedby, x => x.ariaDetails, x => x.ariaDisabled, x => x.ariaErrormessage, x => x.ariaFlowto, x => x.ariaHaspopup, x => x.ariaHidden, x => x.ariaInvalid, x => x.ariaKeyshortcuts, x => x.ariaLabel, x => x.ariaLabelledby, x => x.ariaLive, x => x.ariaOwns, x => x.ariaRelevant, x => x.ariaRoledescription, ref('control'), () => focusTemplate, when(x => {
103
- var _a;
104
- return !x.successText && !x.errorValidationMessage && ((_a = x.helperText) === null || _a === void 0 ? void 0 : _a.length);
105
- }, getFeedbackTemplate('helper', context)), when(x => !x.successText && x.errorValidationMessage, getFeedbackTemplate('error', context)), when(x => x.successText, getFeedbackTemplate('success', context)));
106
- };
54
+ ${0}
55
+ </div>
56
+ </template>`), x => x.disabled, x => x.ariaSelected, getClasses, () => focusTemplate, x => affixIconTemplate(x.icon), x => x.label);
57
+ }
107
58
 
108
- const textFieldDefinition = TextField.compose({
109
- baseName: 'text-field',
110
- template: TextfieldTemplate,
111
- styles: css_248z,
112
- shadowOptions: {
113
- delegatesFocus: true
114
- }
59
+ const tabDefinition = Tab.compose({
60
+ baseName: 'tab',
61
+ template: TabTemplate,
62
+ styles: css_248z
115
63
  });
116
- const textFieldRegistries = [textFieldDefinition(), ...iconRegistries, ...focusRegistries];
117
- const registerTextField = registerFactory(textFieldRegistries);
64
+ const tabRegistries = [tabDefinition(), ...iconRegistries, ...focusRegistries];
65
+ const registerTab = registerFactory(tabRegistries);
118
66
 
119
- export { textFieldRegistries as a, registerTextField as r, textFieldDefinition as t };
67
+ export { tabDefinition as a, registerTab as r, tabRegistries as t };