@vonage/vivid 3.1.1 → 3.1.2
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.
- package/data-grid/index.js +2 -2
- package/index.js +17 -16
- package/lib/components.d.ts +1 -0
- package/number-field/index.js +18 -448
- package/package.json +1 -1
- package/progress/index.js +1 -1
- package/progress-ring/index.js +1 -1
- package/radio/index.js +1 -1
- package/radio-group/index.js +1 -1
- package/select/index.js +1 -1
- package/shared/definition.js +1 -1
- package/shared/definition11.js +1 -1
- package/shared/definition12.js +1 -1
- package/shared/definition13.js +1 -1
- package/shared/definition14.js +1 -1
- package/shared/definition16.js +1 -1
- package/shared/definition17.js +1 -1
- package/shared/definition19.js +1 -1
- package/shared/definition2.js +1 -1
- package/shared/definition20.js +1 -1
- package/shared/definition21.js +1 -1
- package/shared/definition22.js +1 -1
- package/shared/definition23.js +1 -1
- package/shared/definition25.js +1 -1
- package/shared/definition27.js +1 -1
- package/shared/definition29.js +1 -1
- package/shared/definition30.js +1 -1
- package/shared/definition31.js +1 -1
- package/shared/definition32.js +432 -76
- package/shared/definition33.js +76 -59
- package/shared/definition34.js +67 -35
- package/shared/definition35.js +31 -422
- package/shared/definition36.js +357 -555
- package/shared/definition37.js +618 -74
- package/shared/definition38.js +70 -573
- package/shared/definition39.js +527 -81
- package/shared/definition4.js +1 -1
- package/shared/definition40.js +127 -47
- package/shared/definition41.js +51 -16
- package/shared/definition42.js +17 -425
- package/shared/definition43.js +367 -209
- package/shared/definition44.js +248 -85
- package/shared/definition45.js +110 -68
- package/shared/definition46.js +77 -0
- package/shared/definition5.js +1 -1
- package/shared/definition6.js +1 -1
- package/shared/definition7.js +1 -1
- package/shared/definition8.js +1 -1
- package/shared/definition9.js +1 -1
- package/shared/form-elements.js +1 -1
- package/shared/patterns/form-elements/form-elements.d.ts +2 -2
- package/shared/text-field.js +1 -1
- package/side-drawer/index.js +1 -1
- package/slider/index.js +1 -1
- package/styles/core/all.css +1 -1
- package/styles/core/theme.css +1 -1
- package/styles/core/typography.css +1 -1
- package/styles/tokens/theme-dark.css +4 -4
- package/styles/tokens/theme-light.css +4 -4
- package/switch/index.js +1 -1
- package/tab/index.js +1 -1
- package/tab-panel/index.js +1 -1
- package/tabs/index.js +3 -3
- package/text-area/index.js +1 -1
- package/text-field/index.js +1 -1
- package/tooltip/index.js +1 -1
- package/vivid.api.json +164 -0
package/shared/definition43.js
CHANGED
|
@@ -1,282 +1,440 @@
|
|
|
1
|
-
import { F as FoundationElement, _ as __decorate, a as attr,
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import './
|
|
5
|
-
import './focus.js';
|
|
6
|
-
import { f as formElements, F as FormElementSuccessText, a as FormElementHelperText, b as FormElementCharCount, g as getFeedbackTemplate } from './form-elements.js';
|
|
7
|
-
import { D as DelegatesARIATextbox } from './text-field2.js';
|
|
1
|
+
import { F as FoundationElement, _ as __decorate, a as attr, o as observable, b as __metadata, h as html, r as registerFactory } from './index.js';
|
|
2
|
+
import { t as tabRegistries } from './definition41.js';
|
|
3
|
+
import { t as tabPanelRegistries } from './definition42.js';
|
|
4
|
+
import { S as StartEnd } from './start-end.js';
|
|
8
5
|
import { a as applyMixins } from './apply-mixins.js';
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
6
|
+
import { h as keyArrowRight, i as keyArrowLeft, b as keyArrowDown, c as keyArrowUp, k as keyEnd, a as keyHome } from './key-codes.js';
|
|
7
|
+
import { u as uniqueId } from './strings.js';
|
|
8
|
+
import { w as wrapInBounds } from './numbers.js';
|
|
9
|
+
import { s as slotted } from './slotted.js';
|
|
11
10
|
import { w as when } from './when.js';
|
|
12
11
|
import { r as ref } from './ref.js';
|
|
13
12
|
import { c as classNames } from './class-names.js';
|
|
14
13
|
|
|
15
|
-
class _TextArea extends FoundationElement {
|
|
16
|
-
}
|
|
17
|
-
/**
|
|
18
|
-
* A form-associated base class for the {@link @microsoft/fast-foundation#(TextArea:class)} component.
|
|
19
|
-
*
|
|
20
|
-
* @internal
|
|
21
|
-
*/
|
|
22
|
-
class FormAssociatedTextArea extends FormAssociated(_TextArea) {
|
|
23
|
-
constructor() {
|
|
24
|
-
super(...arguments);
|
|
25
|
-
this.proxy = document.createElement("textarea");
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
|
|
29
14
|
/**
|
|
30
|
-
*
|
|
15
|
+
* The orientation of the {@link @microsoft/fast-foundation#(Tabs:class)} component
|
|
31
16
|
* @public
|
|
32
17
|
*/
|
|
33
|
-
const
|
|
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
|
-
*/
|
|
18
|
+
const TabsOrientation = {
|
|
49
19
|
vertical: "vertical",
|
|
20
|
+
horizontal: "horizontal",
|
|
50
21
|
};
|
|
51
|
-
|
|
52
22
|
/**
|
|
53
|
-
* A
|
|
54
|
-
*
|
|
23
|
+
* A Tabs Custom HTML Element.
|
|
24
|
+
* Implements the {@link https://www.w3.org/TR/wai-aria-1.1/#tablist | ARIA tablist }.
|
|
55
25
|
*
|
|
56
|
-
* @slot -
|
|
57
|
-
* @
|
|
58
|
-
* @
|
|
59
|
-
* @
|
|
60
|
-
* @
|
|
26
|
+
* @slot start - Content which can be provided before the tablist element
|
|
27
|
+
* @slot end - Content which can be provided after the tablist element
|
|
28
|
+
* @slot tab - The slot for tabs
|
|
29
|
+
* @slot tabpanel - The slot for tabpanels
|
|
30
|
+
* @csspart tablist - The element wrapping for the tabs
|
|
31
|
+
* @csspart tab - The tab slot
|
|
32
|
+
* @csspart activeIndicator - The visual indicator
|
|
33
|
+
* @csspart tabpanel - The tabpanel slot
|
|
34
|
+
* @fires change - Fires a custom 'change' event when a tab is clicked or during keyboard navigation
|
|
61
35
|
*
|
|
62
36
|
* @public
|
|
63
37
|
*/
|
|
64
|
-
class
|
|
38
|
+
class Tabs$1 extends FoundationElement {
|
|
65
39
|
constructor() {
|
|
66
40
|
super(...arguments);
|
|
67
41
|
/**
|
|
68
|
-
* The
|
|
42
|
+
* The orientation
|
|
69
43
|
* @public
|
|
70
44
|
* @remarks
|
|
71
|
-
* HTML Attribute:
|
|
45
|
+
* HTML Attribute: orientation
|
|
72
46
|
*/
|
|
73
|
-
this.
|
|
47
|
+
this.orientation = TabsOrientation.horizontal;
|
|
74
48
|
/**
|
|
75
|
-
*
|
|
76
|
-
*
|
|
49
|
+
* Whether or not to show the active indicator
|
|
77
50
|
* @public
|
|
78
51
|
* @remarks
|
|
79
|
-
* HTML Attribute:
|
|
52
|
+
* HTML Attribute: activeindicator
|
|
80
53
|
*/
|
|
81
|
-
this.
|
|
54
|
+
this.activeindicator = true;
|
|
82
55
|
/**
|
|
83
56
|
* @internal
|
|
84
57
|
*/
|
|
85
|
-
this.
|
|
86
|
-
|
|
58
|
+
this.showActiveIndicator = true;
|
|
59
|
+
this.prevActiveTabIndex = 0;
|
|
60
|
+
this.activeTabIndex = 0;
|
|
61
|
+
this.ticking = false;
|
|
62
|
+
this.change = () => {
|
|
63
|
+
this.$emit("change", this.activetab);
|
|
87
64
|
};
|
|
65
|
+
this.isDisabledElement = (el) => {
|
|
66
|
+
return el.getAttribute("aria-disabled") === "true";
|
|
67
|
+
};
|
|
68
|
+
this.isFocusableElement = (el) => {
|
|
69
|
+
return !this.isDisabledElement(el);
|
|
70
|
+
};
|
|
71
|
+
this.setTabs = () => {
|
|
72
|
+
const gridHorizontalProperty = "gridColumn";
|
|
73
|
+
const gridVerticalProperty = "gridRow";
|
|
74
|
+
const gridProperty = this.isHorizontal()
|
|
75
|
+
? gridHorizontalProperty
|
|
76
|
+
: gridVerticalProperty;
|
|
77
|
+
this.activeTabIndex = this.getActiveIndex();
|
|
78
|
+
this.showActiveIndicator = false;
|
|
79
|
+
this.tabs.forEach((tab, index) => {
|
|
80
|
+
if (tab.slot === "tab") {
|
|
81
|
+
const isActiveTab = this.activeTabIndex === index && this.isFocusableElement(tab);
|
|
82
|
+
if (this.activeindicator && this.isFocusableElement(tab)) {
|
|
83
|
+
this.showActiveIndicator = true;
|
|
84
|
+
}
|
|
85
|
+
const tabId = this.tabIds[index];
|
|
86
|
+
const tabpanelId = this.tabpanelIds[index];
|
|
87
|
+
tab.setAttribute("id", tabId);
|
|
88
|
+
tab.setAttribute("aria-selected", isActiveTab ? "true" : "false");
|
|
89
|
+
tab.setAttribute("aria-controls", tabpanelId);
|
|
90
|
+
tab.addEventListener("click", this.handleTabClick);
|
|
91
|
+
tab.addEventListener("keydown", this.handleTabKeyDown);
|
|
92
|
+
tab.setAttribute("tabindex", isActiveTab ? "0" : "-1");
|
|
93
|
+
if (isActiveTab) {
|
|
94
|
+
this.activetab = tab;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
// If the original property isn't emptied out,
|
|
98
|
+
// the next set will morph into a grid-area style setting that is not what we want
|
|
99
|
+
tab.style[gridHorizontalProperty] = "";
|
|
100
|
+
tab.style[gridVerticalProperty] = "";
|
|
101
|
+
tab.style[gridProperty] = `${index + 1}`;
|
|
102
|
+
!this.isHorizontal()
|
|
103
|
+
? tab.classList.add("vertical")
|
|
104
|
+
: tab.classList.remove("vertical");
|
|
105
|
+
});
|
|
106
|
+
};
|
|
107
|
+
this.setTabPanels = () => {
|
|
108
|
+
this.tabpanels.forEach((tabpanel, index) => {
|
|
109
|
+
const tabId = this.tabIds[index];
|
|
110
|
+
const tabpanelId = this.tabpanelIds[index];
|
|
111
|
+
tabpanel.setAttribute("id", tabpanelId);
|
|
112
|
+
tabpanel.setAttribute("aria-labelledby", tabId);
|
|
113
|
+
this.activeTabIndex !== index
|
|
114
|
+
? tabpanel.setAttribute("hidden", "")
|
|
115
|
+
: tabpanel.removeAttribute("hidden");
|
|
116
|
+
});
|
|
117
|
+
};
|
|
118
|
+
this.handleTabClick = (event) => {
|
|
119
|
+
const selectedTab = event.currentTarget;
|
|
120
|
+
if (selectedTab.nodeType === 1 && this.isFocusableElement(selectedTab)) {
|
|
121
|
+
this.prevActiveTabIndex = this.activeTabIndex;
|
|
122
|
+
this.activeTabIndex = this.tabs.indexOf(selectedTab);
|
|
123
|
+
this.setComponent();
|
|
124
|
+
}
|
|
125
|
+
};
|
|
126
|
+
this.handleTabKeyDown = (event) => {
|
|
127
|
+
if (this.isHorizontal()) {
|
|
128
|
+
switch (event.key) {
|
|
129
|
+
case keyArrowLeft:
|
|
130
|
+
event.preventDefault();
|
|
131
|
+
this.adjustBackward(event);
|
|
132
|
+
break;
|
|
133
|
+
case keyArrowRight:
|
|
134
|
+
event.preventDefault();
|
|
135
|
+
this.adjustForward(event);
|
|
136
|
+
break;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
switch (event.key) {
|
|
141
|
+
case keyArrowUp:
|
|
142
|
+
event.preventDefault();
|
|
143
|
+
this.adjustBackward(event);
|
|
144
|
+
break;
|
|
145
|
+
case keyArrowDown:
|
|
146
|
+
event.preventDefault();
|
|
147
|
+
this.adjustForward(event);
|
|
148
|
+
break;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
switch (event.key) {
|
|
152
|
+
case keyHome:
|
|
153
|
+
event.preventDefault();
|
|
154
|
+
this.adjust(-this.activeTabIndex);
|
|
155
|
+
break;
|
|
156
|
+
case keyEnd:
|
|
157
|
+
event.preventDefault();
|
|
158
|
+
this.adjust(this.tabs.length - this.activeTabIndex - 1);
|
|
159
|
+
break;
|
|
160
|
+
}
|
|
161
|
+
};
|
|
162
|
+
this.adjustForward = (e) => {
|
|
163
|
+
const group = this.tabs;
|
|
164
|
+
let index = 0;
|
|
165
|
+
index = this.activetab ? group.indexOf(this.activetab) + 1 : 1;
|
|
166
|
+
if (index === group.length) {
|
|
167
|
+
index = 0;
|
|
168
|
+
}
|
|
169
|
+
while (index < group.length && group.length > 1) {
|
|
170
|
+
if (this.isFocusableElement(group[index])) {
|
|
171
|
+
this.moveToTabByIndex(group, index);
|
|
172
|
+
break;
|
|
173
|
+
}
|
|
174
|
+
else if (this.activetab && index === group.indexOf(this.activetab)) {
|
|
175
|
+
break;
|
|
176
|
+
}
|
|
177
|
+
else if (index + 1 >= group.length) {
|
|
178
|
+
index = 0;
|
|
179
|
+
}
|
|
180
|
+
else {
|
|
181
|
+
index += 1;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
};
|
|
185
|
+
this.adjustBackward = (e) => {
|
|
186
|
+
const group = this.tabs;
|
|
187
|
+
let index = 0;
|
|
188
|
+
index = this.activetab ? group.indexOf(this.activetab) - 1 : 0;
|
|
189
|
+
index = index < 0 ? group.length - 1 : index;
|
|
190
|
+
while (index >= 0 && group.length > 1) {
|
|
191
|
+
if (this.isFocusableElement(group[index])) {
|
|
192
|
+
this.moveToTabByIndex(group, index);
|
|
193
|
+
break;
|
|
194
|
+
}
|
|
195
|
+
else if (index - 1 < 0) {
|
|
196
|
+
index = group.length - 1;
|
|
197
|
+
}
|
|
198
|
+
else {
|
|
199
|
+
index -= 1;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
};
|
|
203
|
+
this.moveToTabByIndex = (group, index) => {
|
|
204
|
+
const tab = group[index];
|
|
205
|
+
this.activetab = tab;
|
|
206
|
+
this.prevActiveTabIndex = this.activeTabIndex;
|
|
207
|
+
this.activeTabIndex = index;
|
|
208
|
+
tab.focus();
|
|
209
|
+
this.setComponent();
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* @internal
|
|
214
|
+
*/
|
|
215
|
+
orientationChanged() {
|
|
216
|
+
if (this.$fastController.isConnected) {
|
|
217
|
+
this.setTabs();
|
|
218
|
+
this.setTabPanels();
|
|
219
|
+
this.handleActiveIndicatorPosition();
|
|
220
|
+
}
|
|
88
221
|
}
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
222
|
+
/**
|
|
223
|
+
* @internal
|
|
224
|
+
*/
|
|
225
|
+
activeidChanged(oldValue, newValue) {
|
|
226
|
+
if (this.$fastController.isConnected &&
|
|
227
|
+
this.tabs.length <= this.tabpanels.length) {
|
|
228
|
+
this.prevActiveTabIndex = this.tabs.findIndex((item) => item.id === oldValue);
|
|
229
|
+
this.setTabs();
|
|
230
|
+
this.setTabPanels();
|
|
231
|
+
this.handleActiveIndicatorPosition();
|
|
92
232
|
}
|
|
93
233
|
}
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
234
|
+
/**
|
|
235
|
+
* @internal
|
|
236
|
+
*/
|
|
237
|
+
tabsChanged() {
|
|
238
|
+
if (this.$fastController.isConnected &&
|
|
239
|
+
this.tabs.length <= this.tabpanels.length) {
|
|
240
|
+
this.tabIds = this.getTabIds();
|
|
241
|
+
this.tabpanelIds = this.getTabPanelIds();
|
|
242
|
+
this.setTabs();
|
|
243
|
+
this.setTabPanels();
|
|
244
|
+
this.handleActiveIndicatorPosition();
|
|
97
245
|
}
|
|
98
246
|
}
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
247
|
+
/**
|
|
248
|
+
* @internal
|
|
249
|
+
*/
|
|
250
|
+
tabpanelsChanged() {
|
|
251
|
+
if (this.$fastController.isConnected &&
|
|
252
|
+
this.tabpanels.length <= this.tabs.length) {
|
|
253
|
+
this.tabIds = this.getTabIds();
|
|
254
|
+
this.tabpanelIds = this.getTabPanelIds();
|
|
255
|
+
this.setTabs();
|
|
256
|
+
this.setTabPanels();
|
|
257
|
+
this.handleActiveIndicatorPosition();
|
|
102
258
|
}
|
|
103
259
|
}
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
260
|
+
getActiveIndex() {
|
|
261
|
+
const id = this.activeid;
|
|
262
|
+
if (id !== undefined) {
|
|
263
|
+
return this.tabIds.indexOf(this.activeid) === -1
|
|
264
|
+
? 0
|
|
265
|
+
: this.tabIds.indexOf(this.activeid);
|
|
107
266
|
}
|
|
267
|
+
else {
|
|
268
|
+
return 0;
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
getTabIds() {
|
|
272
|
+
return this.tabs.map((tab) => {
|
|
273
|
+
var _a;
|
|
274
|
+
return (_a = tab.getAttribute("id")) !== null && _a !== void 0 ? _a : `tab-${uniqueId()}`;
|
|
275
|
+
});
|
|
108
276
|
}
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
277
|
+
getTabPanelIds() {
|
|
278
|
+
return this.tabpanels.map((tabPanel) => {
|
|
279
|
+
var _a;
|
|
280
|
+
return (_a = tabPanel.getAttribute("id")) !== null && _a !== void 0 ? _a : `panel-${uniqueId()}`;
|
|
281
|
+
});
|
|
282
|
+
}
|
|
283
|
+
setComponent() {
|
|
284
|
+
if (this.activeTabIndex !== this.prevActiveTabIndex) {
|
|
285
|
+
this.activeid = this.tabIds[this.activeTabIndex];
|
|
286
|
+
this.focusTab();
|
|
287
|
+
this.change();
|
|
112
288
|
}
|
|
113
289
|
}
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
290
|
+
isHorizontal() {
|
|
291
|
+
return this.orientation === TabsOrientation.horizontal;
|
|
292
|
+
}
|
|
293
|
+
handleActiveIndicatorPosition() {
|
|
294
|
+
// Ignore if we click twice on the same tab
|
|
295
|
+
if (this.showActiveIndicator &&
|
|
296
|
+
this.activeindicator &&
|
|
297
|
+
this.activeTabIndex !== this.prevActiveTabIndex) {
|
|
298
|
+
if (this.ticking) {
|
|
299
|
+
this.ticking = false;
|
|
300
|
+
}
|
|
301
|
+
else {
|
|
302
|
+
this.ticking = true;
|
|
303
|
+
this.animateActiveIndicator();
|
|
304
|
+
}
|
|
117
305
|
}
|
|
118
306
|
}
|
|
307
|
+
animateActiveIndicator() {
|
|
308
|
+
this.ticking = true;
|
|
309
|
+
const gridProperty = this.isHorizontal() ? "gridColumn" : "gridRow";
|
|
310
|
+
const translateProperty = this.isHorizontal()
|
|
311
|
+
? "translateX"
|
|
312
|
+
: "translateY";
|
|
313
|
+
const offsetProperty = this.isHorizontal() ? "offsetLeft" : "offsetTop";
|
|
314
|
+
const prev = this.activeIndicatorRef[offsetProperty];
|
|
315
|
+
this.activeIndicatorRef.style[gridProperty] = `${this.activeTabIndex + 1}`;
|
|
316
|
+
const next = this.activeIndicatorRef[offsetProperty];
|
|
317
|
+
this.activeIndicatorRef.style[gridProperty] = `${this.prevActiveTabIndex + 1}`;
|
|
318
|
+
const dif = next - prev;
|
|
319
|
+
this.activeIndicatorRef.style.transform = `${translateProperty}(${dif}px)`;
|
|
320
|
+
this.activeIndicatorRef.classList.add("activeIndicatorTransition");
|
|
321
|
+
this.activeIndicatorRef.addEventListener("transitionend", () => {
|
|
322
|
+
this.ticking = false;
|
|
323
|
+
this.activeIndicatorRef.style[gridProperty] = `${this.activeTabIndex + 1}`;
|
|
324
|
+
this.activeIndicatorRef.style.transform = `${translateProperty}(0px)`;
|
|
325
|
+
this.activeIndicatorRef.classList.remove("activeIndicatorTransition");
|
|
326
|
+
});
|
|
327
|
+
}
|
|
119
328
|
/**
|
|
120
|
-
*
|
|
121
|
-
*
|
|
329
|
+
* The adjust method for FASTTabs
|
|
122
330
|
* @public
|
|
331
|
+
* @remarks
|
|
332
|
+
* This method allows the active index to be adjusted by numerical increments
|
|
123
333
|
*/
|
|
124
|
-
|
|
125
|
-
this.
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
*/
|
|
132
|
-
this.$emit("select");
|
|
334
|
+
adjust(adjustment) {
|
|
335
|
+
this.prevActiveTabIndex = this.activeTabIndex;
|
|
336
|
+
this.activeTabIndex = wrapInBounds(0, this.tabs.length - 1, this.activeTabIndex + adjustment);
|
|
337
|
+
this.setComponent();
|
|
338
|
+
}
|
|
339
|
+
focusTab() {
|
|
340
|
+
this.tabs[this.activeTabIndex].focus();
|
|
133
341
|
}
|
|
134
342
|
/**
|
|
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
343
|
* @internal
|
|
142
344
|
*/
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
super.validate(this.control);
|
|
345
|
+
connectedCallback() {
|
|
346
|
+
super.connectedCallback();
|
|
347
|
+
this.tabIds = this.getTabIds();
|
|
348
|
+
this.tabpanelIds = this.getTabPanelIds();
|
|
349
|
+
this.activeTabIndex = this.getActiveIndex();
|
|
149
350
|
}
|
|
150
351
|
}
|
|
151
|
-
__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
352
|
__decorate([
|
|
173
353
|
attr
|
|
174
|
-
],
|
|
354
|
+
], Tabs$1.prototype, "orientation", void 0);
|
|
175
355
|
__decorate([
|
|
176
356
|
attr
|
|
177
|
-
],
|
|
357
|
+
], Tabs$1.prototype, "activeid", void 0);
|
|
178
358
|
__decorate([
|
|
179
|
-
|
|
180
|
-
],
|
|
359
|
+
observable
|
|
360
|
+
], Tabs$1.prototype, "tabs", void 0);
|
|
181
361
|
__decorate([
|
|
182
|
-
|
|
183
|
-
],
|
|
362
|
+
observable
|
|
363
|
+
], Tabs$1.prototype, "tabpanels", void 0);
|
|
184
364
|
__decorate([
|
|
185
365
|
attr({ mode: "boolean" })
|
|
186
|
-
],
|
|
366
|
+
], Tabs$1.prototype, "activeindicator", void 0);
|
|
187
367
|
__decorate([
|
|
188
368
|
observable
|
|
189
|
-
],
|
|
190
|
-
|
|
369
|
+
], Tabs$1.prototype, "activeIndicatorRef", void 0);
|
|
370
|
+
__decorate([
|
|
371
|
+
observable
|
|
372
|
+
], Tabs$1.prototype, "showActiveIndicator", void 0);
|
|
373
|
+
applyMixins(Tabs$1, StartEnd);
|
|
191
374
|
|
|
192
|
-
var css_248z = "/**\n * Do not edit directly\n * Generated on
|
|
375
|
+
var css_248z = "/**\n * Do not edit directly\n * Generated on Wed, 15 Feb 2023 11:31:49 GMT\n */\n.base {\n display: grid;\n box-sizing: border-box;\n}\n.base {\n --_connotation-color-primary: var(--vvd-color-canvas-text);\n --_connotation-color-primary-text: var(--vvd-color-canvas);\n --_connotation-color-primary-increment: var(--vvd-color-neutral-800);\n --_connotation-color-faint: var(--vvd-color-neutral-50);\n --_connotation-color-soft: var(--vvd-color-neutral-100);\n}\n.base.orientation-vertical {\n grid-template-columns: auto 1fr;\n grid-template-rows: 1fr;\n}\n.base:not(.orientation-vertical) {\n grid-template-columns: 1fr;\n grid-template-rows: auto 1fr;\n}\n\n.tablist {\n --_tabs-tablist-gutter: 8px;\n --_tabs-active-indicator-stroke-width: 2px;\n position: relative;\n display: grid;\n box-sizing: border-box;\n padding: var(--_tabs-tablist-gutter);\n gap: var(--_tabs-tablist-gutter);\n}\n.base.orientation-vertical .tablist {\n box-shadow: 1px 0 0 0 var(--vvd-color-neutral-300);\n grid-row: 1/2;\n grid-template-columns: auto 1fr;\n grid-template-rows: auto;\n inline-size: 100%;\n place-self: flex-start end;\n}\n.base:not(.orientation-vertical) .tablist {\n align-self: end;\n justify-content: flex-start;\n border-bottom: 1px solid var(--vvd-color-neutral-300);\n grid-auto-flow: column;\n grid-template-columns: auto;\n grid-template-rows: auto auto;\n inline-size: 100%;\n}\n\n.active-indicator {\n background: currentColor;\n margin-inline-start: calc(var(--_tabs-tablist-gutter) * -1);\n}\n.base.orientation-vertical .active-indicator {\n align-self: center;\n block-size: 80%;\n grid-area: 2/1/auto/auto;\n inline-size: var(--_tabs-active-indicator-stroke-width);\n}\n.base:not(.orientation-vertical) .active-indicator {\n position: absolute;\n z-index: 1;\n block-size: var(--_tabs-active-indicator-stroke-width);\n grid-column: 1/auto;\n inline-size: var(--_tabs-active-tab-inline-size);\n inset-block-end: 0;\n inset-inline-start: 0;\n justify-self: center;\n padding-inline: var(--_tabs-tablist-gutter);\n}\n\n.activeIndicatorTransition {\n transition: transform 0.2s ease-out 0s, inline-size 0.2s ease-out 0s;\n}\n\n.base:not(.orientation-vertical) .active-indicator:not(.activeIndicatorTransition) {\n opacity: 0;\n}";
|
|
193
376
|
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
377
|
+
const ACTIVE_TAB_WIDTH = '--_tabs-active-tab-inline-size';
|
|
378
|
+
class Tabs extends Tabs$1 {
|
|
379
|
+
orientationChanged() {
|
|
380
|
+
super.orientationChanged();
|
|
381
|
+
this.patchIndicatorStyleTransition();
|
|
382
|
+
if (!this.activeIndicatorRef) return;
|
|
383
|
+
if (this.orientation === TabsOrientation.vertical) {
|
|
384
|
+
this.activeIndicatorRef.style.removeProperty(ACTIVE_TAB_WIDTH);
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
activeidChanged(oldValue, newValue) {
|
|
388
|
+
super.activeidChanged(oldValue, newValue);
|
|
389
|
+
this.patchIndicatorStyleTransition();
|
|
390
|
+
}
|
|
391
|
+
tabsChanged() {
|
|
392
|
+
super.tabsChanged();
|
|
393
|
+
this.patchIndicatorStyleTransition();
|
|
394
|
+
}
|
|
395
|
+
tabpanelsChanged() {
|
|
396
|
+
super.tabpanelsChanged();
|
|
397
|
+
this.patchIndicatorStyleTransition();
|
|
398
|
+
}
|
|
399
|
+
patchIndicatorStyleTransition() {
|
|
400
|
+
if (!this.activetab || !this.activeIndicatorRef) return;
|
|
401
|
+
if (this.orientation === TabsOrientation.vertical || !this.showActiveIndicator) return;
|
|
402
|
+
const width = this.activetab.getBoundingClientRect().width;
|
|
403
|
+
this.activeIndicatorRef.style.setProperty(ACTIVE_TAB_WIDTH, `${width}px`);
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
__decorate([observable, __metadata("design:type", HTMLElement)], Tabs.prototype, "tablist", void 0);
|
|
198
407
|
|
|
199
408
|
let _ = t => t,
|
|
200
409
|
_t,
|
|
201
410
|
_t2;
|
|
202
411
|
const getClasses = ({
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
placeholder,
|
|
207
|
-
readOnly,
|
|
208
|
-
successText
|
|
209
|
-
}) => classNames('base', ['readonly', readOnly], ['placeholder', Boolean(placeholder)], ['disabled', disabled], ['error connotation-alert', Boolean(errorValidationMessage)], ['has-value', Boolean(value)], ['success connotation-success', !!successText]);
|
|
210
|
-
function renderLabel() {
|
|
412
|
+
orientation
|
|
413
|
+
}) => classNames('base', [`orientation-${orientation}`, Boolean(orientation)]);
|
|
414
|
+
function TabsTemplate() {
|
|
211
415
|
return html(_t || (_t = _`
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
}
|
|
216
|
-
const TextAreaTemplate = context => {
|
|
217
|
-
const focusTemplate = focusTemplateFactory(context);
|
|
218
|
-
return html(_t2 || (_t2 = _`
|
|
219
|
-
<div class="${0}">
|
|
220
|
-
${0}
|
|
221
|
-
<div class="fieldset">
|
|
222
|
-
<textarea class="control"
|
|
223
|
-
?autofocus="${0}"
|
|
224
|
-
placeholder="${0}"
|
|
225
|
-
name="${0}"
|
|
226
|
-
maxlength="${0}"
|
|
227
|
-
rows="${0}"
|
|
228
|
-
cols="${0}"
|
|
229
|
-
wrap="${0}"
|
|
230
|
-
?readonly="${0}"
|
|
231
|
-
?disabled="${0}"
|
|
232
|
-
?required="${0}"
|
|
233
|
-
?spellcheck="${0}"
|
|
234
|
-
:value="${0}"
|
|
235
|
-
aria-atomic="${0}"
|
|
236
|
-
aria-busy="${0}"
|
|
237
|
-
aria-controls="${0}"
|
|
238
|
-
aria-current="${0}"
|
|
239
|
-
aria-describedby="${0}"
|
|
240
|
-
aria-details="${0}"
|
|
241
|
-
aria-disabled="${0}"
|
|
242
|
-
aria-errormessage="${0}"
|
|
243
|
-
aria-flowto="${0}"
|
|
244
|
-
aria-haspopup="${0}"
|
|
245
|
-
aria-hidden="${0}"
|
|
246
|
-
aria-invalid="${0}"
|
|
247
|
-
aria-keyshortcuts="${0}"
|
|
248
|
-
aria-label="${0}"
|
|
249
|
-
aria-labelledby="${0}"
|
|
250
|
-
aria-live="${0}"
|
|
251
|
-
aria-owns="${0}"
|
|
252
|
-
aria-relevant="${0}"
|
|
253
|
-
aria-roledescription="${0}"
|
|
254
|
-
@input="${0}"
|
|
255
|
-
@change="${0}"
|
|
416
|
+
<template role="tablist">
|
|
417
|
+
<div class="${0}">
|
|
418
|
+
<div class="tablist" ${0}>
|
|
419
|
+
<slot name="tab" ${0}></slot>
|
|
256
420
|
${0}
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
return !x.successText && !x.errorValidationMessage && ((_a = x.helperText) === null || _a === void 0 ? void 0 : _a.length);
|
|
268
|
-
}, getFeedbackTemplate('helper', context)), when(x => !x.successText && x.errorValidationMessage, getFeedbackTemplate('error', context)), when(x => x.successText, getFeedbackTemplate('success', context)));
|
|
269
|
-
};
|
|
421
|
+
</div>
|
|
422
|
+
<div class="tabpanel">
|
|
423
|
+
<slot name="tabpanel" ${0}></slot>
|
|
424
|
+
</div>
|
|
425
|
+
</div>
|
|
426
|
+
</template>
|
|
427
|
+
`), getClasses, ref('tablist'), slotted('tabs'), when(x => x.showActiveIndicator, html(_t2 || (_t2 = _`
|
|
428
|
+
<div ${0} class="active-indicator"></div>
|
|
429
|
+
`), ref('activeIndicatorRef'))), slotted('tabpanels'));
|
|
430
|
+
}
|
|
270
431
|
|
|
271
|
-
const
|
|
272
|
-
baseName: '
|
|
273
|
-
template:
|
|
274
|
-
styles: css_248z
|
|
275
|
-
shadowOptions: {
|
|
276
|
-
delegatesFocus: true
|
|
277
|
-
}
|
|
432
|
+
const tabsDefinition = Tabs.compose({
|
|
433
|
+
baseName: 'tabs',
|
|
434
|
+
template: TabsTemplate,
|
|
435
|
+
styles: css_248z
|
|
278
436
|
});
|
|
279
|
-
const
|
|
280
|
-
const
|
|
437
|
+
const tabsRegistries = [tabsDefinition(), ...tabRegistries, ...tabPanelRegistries];
|
|
438
|
+
const registerTabs = registerFactory(tabsRegistries);
|
|
281
439
|
|
|
282
|
-
export {
|
|
440
|
+
export { tabsRegistries as a, registerTabs as r, tabsDefinition as t };
|