@vonage/vivid 4.5.0 → 4.6.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.
- package/custom-elements.json +1091 -187
- package/elevation/index.cjs +1 -1
- package/elevation/index.js +1 -1
- package/index.cjs +62 -56
- package/index.js +20 -19
- package/lib/components.d.ts +1 -0
- package/lib/menu/menu.d.ts +2 -1
- package/lib/number-field/number-field.d.ts +3 -1
- package/lib/searchable-select/definition.d.ts +4 -0
- package/lib/searchable-select/locale.d.ts +6 -0
- package/lib/searchable-select/option-tag.d.ts +14 -0
- package/lib/searchable-select/option-tag.template.d.ts +4 -0
- package/lib/searchable-select/searchable-select.d.ts +29 -0
- package/lib/searchable-select/searchable-select.form-associated.d.ts +10 -0
- package/lib/searchable-select/searchable-select.template.d.ts +4 -0
- package/lib/select/select.d.ts +3 -1
- package/lib/tab/locale.d.ts +3 -0
- package/lib/tab/tab.d.ts +5 -1
- package/lib/tag/definition.d.ts +1 -0
- package/lib/text-field/text-field.d.ts +3 -1
- package/locales/de-DE.cjs +12 -0
- package/locales/de-DE.js +12 -0
- package/locales/en-GB.cjs +12 -0
- package/locales/en-GB.js +12 -0
- package/locales/en-US.cjs +12 -0
- package/locales/en-US.js +12 -0
- package/locales/ja-JP.cjs +12 -0
- package/locales/ja-JP.js +12 -0
- package/locales/zh-CN.cjs +12 -0
- package/locales/zh-CN.js +12 -0
- package/package.json +1 -1
- package/popup/index.cjs +1 -1
- package/popup/index.js +1 -1
- package/searchable-select/index.cjs +5 -0
- package/searchable-select/index.js +3 -0
- package/select/index.cjs +1 -1
- package/select/index.js +1 -1
- package/selectable-box/index.cjs +1 -1
- package/selectable-box/index.js +1 -1
- package/shared/definition11.cjs +1 -1
- package/shared/definition11.js +1 -1
- package/shared/definition14.cjs +1 -1
- package/shared/definition14.js +1 -1
- package/shared/definition16.cjs +1 -1
- package/shared/definition16.js +1 -1
- package/shared/definition18.cjs +2 -2
- package/shared/definition18.js +2 -2
- package/shared/definition19.cjs +2 -2
- package/shared/definition19.js +2 -2
- package/shared/definition20.cjs +14 -34
- package/shared/definition20.js +14 -34
- package/shared/definition21.cjs +1 -1
- package/shared/definition21.js +1 -1
- package/shared/definition26.cjs +1 -1
- package/shared/definition26.js +1 -1
- package/shared/definition29.cjs +4 -0
- package/shared/definition29.js +4 -0
- package/shared/definition30.cjs +2 -1
- package/shared/definition30.js +2 -1
- package/shared/definition35.cjs +12 -7
- package/shared/definition35.js +12 -7
- package/shared/definition36.cjs +50 -207
- package/shared/definition36.js +51 -207
- package/shared/definition4.cjs +1 -1
- package/shared/definition4.js +1 -1
- package/shared/definition42.cjs +1 -1
- package/shared/definition42.js +1 -1
- package/shared/definition43.cjs +993 -645
- package/shared/definition43.js +989 -642
- package/shared/definition44.cjs +723 -112
- package/shared/definition44.js +722 -111
- package/shared/definition45.cjs +121 -80
- package/shared/definition45.js +119 -78
- package/shared/definition46.cjs +81 -614
- package/shared/definition46.js +80 -612
- package/shared/definition47.cjs +608 -114
- package/shared/definition47.js +606 -113
- package/shared/definition48.cjs +116 -134
- package/shared/definition48.js +115 -133
- package/shared/definition49.cjs +149 -19
- package/shared/definition49.js +148 -18
- package/shared/definition5.cjs +1 -1
- package/shared/definition5.js +1 -1
- package/shared/definition50.cjs +21 -82
- package/shared/definition50.js +20 -81
- package/shared/definition51.cjs +77 -539
- package/shared/definition51.js +76 -538
- package/shared/definition52.cjs +568 -28
- package/shared/definition52.js +567 -27
- package/shared/definition53.cjs +28 -123
- package/shared/definition53.js +26 -122
- package/shared/definition54.cjs +115 -295
- package/shared/definition54.js +114 -294
- package/shared/definition55.cjs +251 -311
- package/shared/definition55.js +251 -311
- package/shared/definition56.cjs +299 -780
- package/shared/definition56.js +298 -779
- package/shared/definition57.cjs +800 -102
- package/shared/definition57.js +799 -101
- package/shared/definition58.cjs +92 -63
- package/shared/definition58.js +91 -62
- package/shared/definition59.cjs +117 -75
- package/shared/definition59.js +116 -74
- package/shared/definition60.cjs +70 -285
- package/shared/definition60.js +71 -286
- package/shared/definition61.cjs +274 -66146
- package/shared/definition61.js +273 -66145
- package/shared/definition62.cjs +66160 -27
- package/shared/definition62.js +66158 -25
- package/shared/definition63.cjs +24 -1952
- package/shared/definition63.js +23 -1950
- package/shared/definition64.cjs +1976 -0
- package/shared/definition64.js +1971 -0
- package/shared/listbox-option.cjs +204 -0
- package/shared/listbox-option.js +201 -0
- package/shared/listbox.cjs +3 -3
- package/shared/listbox.js +1 -1
- package/shared/localization/Locale.d.ts +4 -0
- package/shared/presentationDate.cjs +2 -2
- package/shared/presentationDate.js +2 -2
- package/shared/scrollIntoView.cjs +51 -0
- package/shared/scrollIntoView.js +49 -0
- package/shared/slider.template.cjs +1 -1
- package/shared/slider.template.js +1 -1
- package/shared/text-field.cjs +1 -1
- package/shared/text-field.js +1 -1
- package/shared/utils/scrollIntoView.d.ts +1 -0
- package/side-drawer/index.cjs +1 -1
- package/side-drawer/index.js +1 -1
- package/slider/index.cjs +1 -1
- package/slider/index.js +1 -1
- package/split-button/index.cjs +1 -1
- package/split-button/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/styles/tokens/vivid-2-compat.css +1 -1
- package/switch/index.cjs +1 -1
- package/switch/index.js +1 -1
- package/tab/index.cjs +1 -1
- package/tab/index.js +1 -1
- package/tab-panel/index.cjs +1 -1
- package/tab-panel/index.js +1 -1
- package/tabs/index.cjs +1 -1
- package/tabs/index.js +1 -1
- package/tag/index.cjs +1 -1
- package/tag/index.js +1 -1
- package/tag-group/index.cjs +1 -1
- package/tag-group/index.js +1 -1
- package/text-area/index.cjs +1 -1
- package/text-area/index.js +1 -1
- package/text-field/index.cjs +1 -1
- package/text-field/index.js +1 -1
- package/time-picker/index.cjs +1 -1
- package/time-picker/index.js +1 -1
- package/toggletip/index.cjs +1 -1
- package/toggletip/index.js +1 -1
- package/tooltip/index.cjs +1 -1
- package/tooltip/index.js +1 -1
- package/tree-item/index.cjs +1 -1
- package/tree-item/index.js +1 -1
- package/tree-view/index.cjs +1 -1
- package/tree-view/index.js +1 -1
- package/video-player/index.cjs +1 -1
- package/video-player/index.js +1 -1
- package/vivid.api.json +295 -0
- package/api-extractor.json +0 -25
- package/tsdoc-metadata.json +0 -11
package/shared/definition59.js
CHANGED
|
@@ -1,90 +1,132 @@
|
|
|
1
|
-
import { a as attr, h as html, r as registerFactory } from './index.js';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import { a as applyMixins } from './apply-mixins.js';
|
|
6
|
-
import { I as Icon } from './icon.js';
|
|
7
|
-
import { e as elements, s as slotted } from './slotted.js';
|
|
8
|
-
import { c as children } from './children.js';
|
|
9
|
-
import { w as when } from './when.js';
|
|
1
|
+
import { F as FoundationElement, a as attr, h as html, r as registerFactory } from './index.js';
|
|
2
|
+
import { P as Popup, p as popupRegistries } from './definition64.js';
|
|
3
|
+
import { b as anchored, a as anchorSlotTemplateFactory } from './anchored.js';
|
|
4
|
+
import { h as handleEscapeKeyAndStopPropogation } from './index2.js';
|
|
10
5
|
import { c as classNames } from './class-names.js';
|
|
11
|
-
import { r as ref } from './ref.js';
|
|
12
6
|
|
|
13
|
-
const styles = ":host
|
|
7
|
+
const styles = ":host{display:var(--_popup-display, inline)}:host([slotted-anchor]){--_popup-display: contents}.control{pointer-events:none}.tooltip{width:var(--tooltip-inline-size, auto);max-inline-size:var(--tooltip-max-inline-size, 30ch)}.tooltip-text{padding:8px 12px;color:var(--vvd-color-canvas-text);font:var(--vvd-typography-base-bold)}";
|
|
14
8
|
|
|
15
9
|
var __defProp = Object.defineProperty;
|
|
10
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
11
|
+
var __typeError = (msg) => {
|
|
12
|
+
throw TypeError(msg);
|
|
13
|
+
};
|
|
16
14
|
var __decorateClass = (decorators, target, key, kind) => {
|
|
17
|
-
var result = void 0 ;
|
|
15
|
+
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
|
|
18
16
|
for (var i = decorators.length - 1, decorator; i >= 0; i--)
|
|
19
17
|
if (decorator = decorators[i])
|
|
20
|
-
result = (decorator(target, key, result) ) || result;
|
|
21
|
-
if (result) __defProp(target, key, result);
|
|
18
|
+
result = (kind ? decorator(target, key, result) : decorator(result)) || result;
|
|
19
|
+
if (kind && result) __defProp(target, key, result);
|
|
22
20
|
return result;
|
|
23
21
|
};
|
|
24
|
-
|
|
25
|
-
|
|
22
|
+
var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
|
|
23
|
+
var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
|
|
24
|
+
var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
|
25
|
+
var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
|
|
26
|
+
var _Tooltip_instances, setupAnchor_fn, cleanupAnchor_fn, _show, _hide, updateListeners_fn, _closeOnEscape;
|
|
27
|
+
let Tooltip = class extends FoundationElement {
|
|
28
|
+
constructor() {
|
|
29
|
+
super(...arguments);
|
|
30
|
+
__privateAdd(this, _Tooltip_instances);
|
|
31
|
+
this.open = false;
|
|
32
|
+
__privateAdd(this, _show, () => {
|
|
33
|
+
this.open = true;
|
|
34
|
+
});
|
|
35
|
+
__privateAdd(this, _hide, () => {
|
|
36
|
+
this.open = false;
|
|
37
|
+
});
|
|
38
|
+
__privateAdd(this, _closeOnEscape, (e) => {
|
|
39
|
+
if (e.key === "Escape") __privateGet(this, _hide).call(this);
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
connectedCallback() {
|
|
43
|
+
super.connectedCallback();
|
|
44
|
+
__privateMethod(this, _Tooltip_instances, updateListeners_fn).call(this);
|
|
45
|
+
}
|
|
46
|
+
disconnectedCallback() {
|
|
47
|
+
super.disconnectedCallback();
|
|
48
|
+
__privateMethod(this, _Tooltip_instances, updateListeners_fn).call(this);
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* @internal
|
|
52
|
+
*/
|
|
53
|
+
_anchorElChanged(oldValue, newValue) {
|
|
54
|
+
if (oldValue) __privateMethod(this, _Tooltip_instances, cleanupAnchor_fn).call(this, oldValue);
|
|
55
|
+
if (newValue) __privateMethod(this, _Tooltip_instances, setupAnchor_fn).call(this, newValue);
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* @internal
|
|
59
|
+
*/
|
|
60
|
+
openChanged(oldValue) {
|
|
61
|
+
if (oldValue === void 0) return;
|
|
62
|
+
__privateMethod(this, _Tooltip_instances, updateListeners_fn).call(this);
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
_Tooltip_instances = new WeakSet();
|
|
66
|
+
setupAnchor_fn = function(a) {
|
|
67
|
+
a.addEventListener("mouseover", __privateGet(this, _show));
|
|
68
|
+
a.addEventListener("mouseout", __privateGet(this, _hide));
|
|
69
|
+
a.addEventListener("focusin", __privateGet(this, _show));
|
|
70
|
+
a.addEventListener("focusout", __privateGet(this, _hide));
|
|
71
|
+
};
|
|
72
|
+
cleanupAnchor_fn = function(a) {
|
|
73
|
+
a.removeEventListener("mouseover", __privateGet(this, _show));
|
|
74
|
+
a.removeEventListener("mouseout", __privateGet(this, _hide));
|
|
75
|
+
a.removeEventListener("focusin", __privateGet(this, _show));
|
|
76
|
+
a.removeEventListener("focusout", __privateGet(this, _hide));
|
|
77
|
+
};
|
|
78
|
+
_show = new WeakMap();
|
|
79
|
+
_hide = new WeakMap();
|
|
80
|
+
updateListeners_fn = function() {
|
|
81
|
+
document.removeEventListener("keydown", __privateGet(this, _closeOnEscape));
|
|
82
|
+
if (this.open && this.isConnected) {
|
|
83
|
+
document.addEventListener("keydown", __privateGet(this, _closeOnEscape));
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
_closeOnEscape = new WeakMap();
|
|
26
87
|
__decorateClass([
|
|
27
88
|
attr
|
|
28
|
-
],
|
|
29
|
-
|
|
89
|
+
], Tooltip.prototype, "text", 2);
|
|
90
|
+
__decorateClass([
|
|
91
|
+
attr({ mode: "fromView" })
|
|
92
|
+
], Tooltip.prototype, "placement", 2);
|
|
93
|
+
__decorateClass([
|
|
94
|
+
attr({ mode: "boolean" })
|
|
95
|
+
], Tooltip.prototype, "open", 2);
|
|
96
|
+
Tooltip = __decorateClass([
|
|
97
|
+
anchored
|
|
98
|
+
], Tooltip);
|
|
30
99
|
|
|
31
|
-
const getClasses = ({
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
);
|
|
36
|
-
const expandCollapseButton = (context) => {
|
|
37
|
-
const iconTag = context.tagFor(Icon);
|
|
100
|
+
const getClasses = ({ open }) => classNames("control", ["open", Boolean(open)]);
|
|
101
|
+
const TooltipTemplate = (context) => {
|
|
102
|
+
const popupTag = context.tagFor(Popup);
|
|
103
|
+
const anchorSlotTemplate = anchorSlotTemplateFactory();
|
|
38
104
|
return html`
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
@focusin="${(x, c) => x.handleFocus(c.event)}"
|
|
57
|
-
@focusout="${(x, c) => x.handleBlur(c.event)}"
|
|
58
|
-
${children({
|
|
59
|
-
property: "childItems",
|
|
60
|
-
filter: elements(context.tagFor(TreeItem))
|
|
61
|
-
})}
|
|
62
|
-
>
|
|
63
|
-
<div class="${getClasses}">
|
|
64
|
-
${when(
|
|
65
|
-
(x) => x.childItems && x.childItems.length > 0,
|
|
66
|
-
expandCollapseButton(context)
|
|
67
|
-
)}
|
|
68
|
-
${(x) => affixIconTemplate(x.icon, IconWrapper.Slot)}
|
|
69
|
-
${(x) => x.text}
|
|
70
|
-
</div>
|
|
71
|
-
${when(
|
|
72
|
-
(x) => x.childItems && x.childItems.length > 0 && x.expanded,
|
|
73
|
-
html` <div role="group" class="items">
|
|
74
|
-
<slot name="item" ${slotted("items")}></slot>
|
|
75
|
-
</div>`
|
|
76
|
-
)}
|
|
77
|
-
</template>`;
|
|
105
|
+
${anchorSlotTemplate}
|
|
106
|
+
<${popupTag} class="${getClasses}" arrow alternate
|
|
107
|
+
:placement=${(x) => x.placement}
|
|
108
|
+
:anchor="${(x) => x._anchorEl}"
|
|
109
|
+
:open="${(x) => x.open}"
|
|
110
|
+
@keydown="${(x, c) => {
|
|
111
|
+
if (x.open && handleEscapeKeyAndStopPropogation(c.event)) {
|
|
112
|
+
x.open = false;
|
|
113
|
+
}
|
|
114
|
+
}}"
|
|
115
|
+
exportparts="vvd-theme-alternate">
|
|
116
|
+
<div class="tooltip" role="tooltip">
|
|
117
|
+
<header part="vvd-theme-alternate" class="tooltip-header">
|
|
118
|
+
<div class="tooltip-text">${(x) => x.text}</div>
|
|
119
|
+
</header>
|
|
120
|
+
</div>
|
|
121
|
+
</${popupTag}>`;
|
|
78
122
|
};
|
|
79
123
|
|
|
80
|
-
const
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
);
|
|
87
|
-
const treeItemRegistries = [treeItemDefinition(), ...iconRegistries];
|
|
88
|
-
const registerTreeItem = registerFactory(treeItemRegistries);
|
|
124
|
+
const tooltipDefinition = Tooltip.compose({
|
|
125
|
+
baseName: "tooltip",
|
|
126
|
+
template: TooltipTemplate,
|
|
127
|
+
styles
|
|
128
|
+
});
|
|
129
|
+
const tooltipRegistries = [tooltipDefinition(), ...popupRegistries];
|
|
130
|
+
const registerTooltip = registerFactory(tooltipRegistries);
|
|
89
131
|
|
|
90
|
-
export {
|
|
132
|
+
export { tooltipRegistries as a, registerTooltip as r, tooltipDefinition as t };
|
package/shared/definition60.cjs
CHANGED
|
@@ -1,309 +1,94 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
const index = require('./index.cjs');
|
|
4
|
+
const definition = require('./definition27.cjs');
|
|
5
|
+
const affix = require('./affix.cjs');
|
|
4
6
|
const treeItem = require('./tree-item.cjs');
|
|
5
|
-
const
|
|
6
|
-
const
|
|
7
|
-
const ref = require('./ref.cjs');
|
|
7
|
+
const applyMixins = require('./apply-mixins.cjs');
|
|
8
|
+
const icon = require('./icon.cjs');
|
|
8
9
|
const slotted = require('./slotted.cjs');
|
|
10
|
+
const children = require('./children.cjs');
|
|
11
|
+
const when = require('./when.cjs');
|
|
9
12
|
const classNames = require('./class-names.cjs');
|
|
13
|
+
const ref = require('./ref.cjs');
|
|
10
14
|
|
|
11
|
-
|
|
12
|
-
* A Tree view Custom HTML Element.
|
|
13
|
-
* Implements the {@link https://w3c.github.io/aria-practices/#TreeView | ARIA TreeView }.
|
|
14
|
-
*
|
|
15
|
-
* @slot - The default slot for tree items
|
|
16
|
-
*
|
|
17
|
-
* @public
|
|
18
|
-
*/
|
|
19
|
-
let TreeView$1 = class TreeView extends index.FoundationElement {
|
|
20
|
-
constructor() {
|
|
21
|
-
super(...arguments);
|
|
22
|
-
/**
|
|
23
|
-
* The tree item that is designated to be in the tab queue.
|
|
24
|
-
*
|
|
25
|
-
* @internal
|
|
26
|
-
*/
|
|
27
|
-
this.currentFocused = null;
|
|
28
|
-
/**
|
|
29
|
-
* Handle focus events
|
|
30
|
-
*
|
|
31
|
-
* @internal
|
|
32
|
-
*/
|
|
33
|
-
this.handleFocus = (e) => {
|
|
34
|
-
if (this.slottedTreeItems.length < 1) {
|
|
35
|
-
// no child items, nothing to do
|
|
36
|
-
return;
|
|
37
|
-
}
|
|
38
|
-
if (e.target === this) {
|
|
39
|
-
if (this.currentFocused === null) {
|
|
40
|
-
this.currentFocused = this.getValidFocusableItem();
|
|
41
|
-
}
|
|
42
|
-
if (this.currentFocused !== null) {
|
|
43
|
-
treeItem.TreeItem.focusItem(this.currentFocused);
|
|
44
|
-
}
|
|
45
|
-
return;
|
|
46
|
-
}
|
|
47
|
-
if (this.contains(e.target)) {
|
|
48
|
-
this.setAttribute("tabindex", "-1");
|
|
49
|
-
this.currentFocused = e.target;
|
|
50
|
-
}
|
|
51
|
-
};
|
|
52
|
-
/**
|
|
53
|
-
* Handle blur events
|
|
54
|
-
*
|
|
55
|
-
* @internal
|
|
56
|
-
*/
|
|
57
|
-
this.handleBlur = (e) => {
|
|
58
|
-
if (e.target instanceof HTMLElement &&
|
|
59
|
-
(e.relatedTarget === null || !this.contains(e.relatedTarget))) {
|
|
60
|
-
this.setAttribute("tabindex", "0");
|
|
61
|
-
}
|
|
62
|
-
};
|
|
63
|
-
/**
|
|
64
|
-
* KeyDown handler
|
|
65
|
-
*
|
|
66
|
-
* @internal
|
|
67
|
-
*/
|
|
68
|
-
this.handleKeyDown = (e) => {
|
|
69
|
-
if (e.defaultPrevented) {
|
|
70
|
-
return;
|
|
71
|
-
}
|
|
72
|
-
if (this.slottedTreeItems.length < 1) {
|
|
73
|
-
return true;
|
|
74
|
-
}
|
|
75
|
-
const treeItems = this.getVisibleNodes();
|
|
76
|
-
switch (e.key) {
|
|
77
|
-
case keyCodes.keyHome:
|
|
78
|
-
if (treeItems.length) {
|
|
79
|
-
treeItem.TreeItem.focusItem(treeItems[0]);
|
|
80
|
-
}
|
|
81
|
-
return;
|
|
82
|
-
case keyCodes.keyEnd:
|
|
83
|
-
if (treeItems.length) {
|
|
84
|
-
treeItem.TreeItem.focusItem(treeItems[treeItems.length - 1]);
|
|
85
|
-
}
|
|
86
|
-
return;
|
|
87
|
-
case keyCodes.keyArrowLeft:
|
|
88
|
-
if (e.target && this.isFocusableElement(e.target)) {
|
|
89
|
-
const item = e.target;
|
|
90
|
-
if (item instanceof treeItem.TreeItem &&
|
|
91
|
-
item.childItemLength() > 0 &&
|
|
92
|
-
item.expanded) {
|
|
93
|
-
item.expanded = false;
|
|
94
|
-
}
|
|
95
|
-
else if (item instanceof treeItem.TreeItem &&
|
|
96
|
-
item.parentElement instanceof treeItem.TreeItem) {
|
|
97
|
-
treeItem.TreeItem.focusItem(item.parentElement);
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
return false;
|
|
101
|
-
case keyCodes.keyArrowRight:
|
|
102
|
-
if (e.target && this.isFocusableElement(e.target)) {
|
|
103
|
-
const item = e.target;
|
|
104
|
-
if (item instanceof treeItem.TreeItem &&
|
|
105
|
-
item.childItemLength() > 0 &&
|
|
106
|
-
!item.expanded) {
|
|
107
|
-
item.expanded = true;
|
|
108
|
-
}
|
|
109
|
-
else if (item instanceof treeItem.TreeItem && item.childItemLength() > 0) {
|
|
110
|
-
this.focusNextNode(1, e.target);
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
return;
|
|
114
|
-
case keyCodes.keyArrowDown:
|
|
115
|
-
if (e.target && this.isFocusableElement(e.target)) {
|
|
116
|
-
this.focusNextNode(1, e.target);
|
|
117
|
-
}
|
|
118
|
-
return;
|
|
119
|
-
case keyCodes.keyArrowUp:
|
|
120
|
-
if (e.target && this.isFocusableElement(e.target)) {
|
|
121
|
-
this.focusNextNode(-1, e.target);
|
|
122
|
-
}
|
|
123
|
-
return;
|
|
124
|
-
case keyCodes.keyEnter:
|
|
125
|
-
// In single-select trees where selection does not follow focus (see note below),
|
|
126
|
-
// the default action is typically to select the focused node.
|
|
127
|
-
this.handleClick(e);
|
|
128
|
-
return;
|
|
129
|
-
}
|
|
130
|
-
// don't prevent default if we took no action
|
|
131
|
-
return true;
|
|
132
|
-
};
|
|
133
|
-
/**
|
|
134
|
-
* Handles the selected-changed events bubbling up
|
|
135
|
-
* from child tree items
|
|
136
|
-
*
|
|
137
|
-
* @internal
|
|
138
|
-
*/
|
|
139
|
-
this.handleSelectedChange = (e) => {
|
|
140
|
-
if (e.defaultPrevented) {
|
|
141
|
-
return;
|
|
142
|
-
}
|
|
143
|
-
if (!(e.target instanceof Element) || !treeItem.isTreeItemElement(e.target)) {
|
|
144
|
-
return true;
|
|
145
|
-
}
|
|
146
|
-
const item = e.target;
|
|
147
|
-
if (item.selected) {
|
|
148
|
-
if (this.currentSelected && this.currentSelected !== item) {
|
|
149
|
-
this.currentSelected.selected = false;
|
|
150
|
-
}
|
|
151
|
-
// new selected item
|
|
152
|
-
this.currentSelected = item;
|
|
153
|
-
}
|
|
154
|
-
else if (!item.selected && this.currentSelected === item) {
|
|
155
|
-
// selected item deselected
|
|
156
|
-
this.currentSelected = null;
|
|
157
|
-
}
|
|
158
|
-
return;
|
|
159
|
-
};
|
|
160
|
-
/**
|
|
161
|
-
* Updates the tree view when slottedTreeItems changes
|
|
162
|
-
*/
|
|
163
|
-
this.setItems = () => {
|
|
164
|
-
// force single selection
|
|
165
|
-
// defaults to first one found
|
|
166
|
-
const selectedItem = this.treeView.querySelector("[aria-selected='true']");
|
|
167
|
-
this.currentSelected = selectedItem;
|
|
168
|
-
// invalidate the current focused item if it is no longer valid
|
|
169
|
-
if (this.currentFocused === null || !this.contains(this.currentFocused)) {
|
|
170
|
-
this.currentFocused = this.getValidFocusableItem();
|
|
171
|
-
}
|
|
172
|
-
// toggle properties on child elements
|
|
173
|
-
this.nested = this.checkForNestedItems();
|
|
174
|
-
const treeItems = this.getVisibleNodes();
|
|
175
|
-
treeItems.forEach(node => {
|
|
176
|
-
if (treeItem.isTreeItemElement(node)) {
|
|
177
|
-
node.nested = this.nested;
|
|
178
|
-
}
|
|
179
|
-
});
|
|
180
|
-
};
|
|
181
|
-
/**
|
|
182
|
-
* check if the item is focusable
|
|
183
|
-
*/
|
|
184
|
-
this.isFocusableElement = (el) => {
|
|
185
|
-
return treeItem.isTreeItemElement(el);
|
|
186
|
-
};
|
|
187
|
-
this.isSelectedElement = (el) => {
|
|
188
|
-
return el.selected;
|
|
189
|
-
};
|
|
190
|
-
}
|
|
191
|
-
slottedTreeItemsChanged() {
|
|
192
|
-
if (this.$fastController.isConnected) {
|
|
193
|
-
// update for slotted children change
|
|
194
|
-
this.setItems();
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
connectedCallback() {
|
|
198
|
-
super.connectedCallback();
|
|
199
|
-
this.setAttribute("tabindex", "0");
|
|
200
|
-
index.DOM.queueUpdate(() => {
|
|
201
|
-
this.setItems();
|
|
202
|
-
});
|
|
203
|
-
}
|
|
204
|
-
/**
|
|
205
|
-
* Handles click events bubbling up
|
|
206
|
-
*
|
|
207
|
-
* @internal
|
|
208
|
-
*/
|
|
209
|
-
handleClick(e) {
|
|
210
|
-
if (e.defaultPrevented) {
|
|
211
|
-
// handled, do nothing
|
|
212
|
-
return;
|
|
213
|
-
}
|
|
214
|
-
if (!(e.target instanceof Element) || !treeItem.isTreeItemElement(e.target)) {
|
|
215
|
-
// not a tree item, ignore
|
|
216
|
-
return true;
|
|
217
|
-
}
|
|
218
|
-
const item = e.target;
|
|
219
|
-
if (!item.disabled) {
|
|
220
|
-
item.selected = !item.selected;
|
|
221
|
-
}
|
|
222
|
-
return;
|
|
223
|
-
}
|
|
224
|
-
/**
|
|
225
|
-
* Move focus to a tree item based on its offset from the provided item
|
|
226
|
-
*/
|
|
227
|
-
focusNextNode(delta, item) {
|
|
228
|
-
const visibleNodes = this.getVisibleNodes();
|
|
229
|
-
if (!visibleNodes) {
|
|
230
|
-
return;
|
|
231
|
-
}
|
|
232
|
-
const focusItem = visibleNodes[visibleNodes.indexOf(item) + delta];
|
|
233
|
-
if (dom.isHTMLElement(focusItem)) {
|
|
234
|
-
treeItem.TreeItem.focusItem(focusItem);
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
/**
|
|
238
|
-
* checks if there are any nested tree items
|
|
239
|
-
*/
|
|
240
|
-
getValidFocusableItem() {
|
|
241
|
-
const treeItems = this.getVisibleNodes();
|
|
242
|
-
// default to selected element if there is one
|
|
243
|
-
let focusIndex = treeItems.findIndex(this.isSelectedElement);
|
|
244
|
-
if (focusIndex === -1) {
|
|
245
|
-
// otherwise first focusable tree item
|
|
246
|
-
focusIndex = treeItems.findIndex(this.isFocusableElement);
|
|
247
|
-
}
|
|
248
|
-
if (focusIndex !== -1) {
|
|
249
|
-
return treeItems[focusIndex];
|
|
250
|
-
}
|
|
251
|
-
return null;
|
|
252
|
-
}
|
|
253
|
-
/**
|
|
254
|
-
* checks if there are any nested tree items
|
|
255
|
-
*/
|
|
256
|
-
checkForNestedItems() {
|
|
257
|
-
return this.slottedTreeItems.some((node) => {
|
|
258
|
-
return treeItem.isTreeItemElement(node) && node.querySelector("[role='treeitem']");
|
|
259
|
-
});
|
|
260
|
-
}
|
|
261
|
-
getVisibleNodes() {
|
|
262
|
-
return dom.getDisplayedNodes(this, "[role='treeitem']") || [];
|
|
263
|
-
}
|
|
264
|
-
};
|
|
265
|
-
index.__decorate([
|
|
266
|
-
index.attr({ attribute: "render-collapsed-nodes" })
|
|
267
|
-
], TreeView$1.prototype, "renderCollapsedNodes", void 0);
|
|
268
|
-
index.__decorate([
|
|
269
|
-
index.observable
|
|
270
|
-
], TreeView$1.prototype, "currentSelected", void 0);
|
|
271
|
-
index.__decorate([
|
|
272
|
-
index.observable
|
|
273
|
-
], TreeView$1.prototype, "slottedTreeItems", void 0);
|
|
274
|
-
|
|
275
|
-
const styles = ".control{position:relative;display:flex;flex-direction:column;gap:4px}";
|
|
15
|
+
const styles = ":host(:focus-visible){outline:none}:host([disabled]){cursor:not-allowed}.control{--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: transparent;--_appearance-color-outline: transparent}.control:where(.disabled,:disabled){--_appearance-color-text: var(--vvd-color-neutral-300);--_appearance-color-fill: transparent;--_appearance-color-outline: transparent}.control:where(.hover,:hover):where(:not(.disabled,:disabled,.readonly)){--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: var(--_connotation-color-faint);--_appearance-color-outline: transparent}.control:where(.active,:active):where(:not(.disabled,:disabled)){--_appearance-color-text: var(--_connotation-color-firm);--_appearance-color-fill: var(--_connotation-color-soft);--_appearance-color-outline: transparent}.control:where(.selected):where(:not(.disabled,:disabled)){--_appearance-color-text: var(--_connotation-color-primary-text);--_appearance-color-fill: var(--_connotation-color-primary);--_appearance-color-outline: transparent}.control:where(.selected):where(.hover,:hover):where(:not(.disabled,:disabled,.readonly)){--_appearance-color-text: var(--_connotation-color-primary-text);--_appearance-color-fill: var(--_connotation-color-primary-increment);--_appearance-color-outline: transparent}.control{--_connotation-color-primary: var(--vvd-tree-item-accent-primary, var(--vvd-color-canvas-text));--_connotation-color-primary-text: var(--vvd-tree-item-accent-primary-text, var(--vvd-color-canvas));--_connotation-color-primary-increment: var(--vvd-tree-item-accent-primary-increment, var(--vvd-color-neutral-800));--_connotation-color-faint: var(--vvd-tree-item-accent-faint, var(--vvd-color-neutral-50));--_connotation-color-soft: var(--vvd-tree-item-accent-soft, var(--vvd-color-neutral-100));--_connotation-color-firm: var(--vvd-tree-item-accent-firm, var(--vvd-color-canvas-text))}.control{position:relative;display:inline-flex;box-sizing:border-box;align-items:center;border-radius:8px;background-color:var(--_appearance-color-fill);box-shadow:inset 0 0 0 1px var(--_appearance-color-outline);color:var(--_appearance-color-text);font:var(--vvd-typography-base);gap:12px;hyphens:auto;inline-size:100%;min-block-size:calc(1px*(40 + 4*clamp(-1,var(--vvd-size-density, 0),2)));padding-inline:16px;text-decoration:none;vertical-align:middle;word-break:break-word}@supports (user-select: none){.control{user-select:none}}.control:not(.disabled){cursor:pointer}.control.disabled{pointer-events:none}:host(:focus-visible) .control{box-shadow:inset 0 0 0 3px var(--focus-stroke-gap-color, currentColor);outline:2px solid var(--focus-stroke-color, var(--vvd-color-canvas-text));outline-offset:calc(-2px - var(--focus-inset, 0px))}:host(:focus-visible) .control:not(.selected){--focus-stroke-gap-color: transparent}.control .text{font:var(--vvd-typography-base)}.expandCollapseButton{display:flex;align-items:center;border-radius:8px;font-size:20px}.expandCollapseButton .expandCollapseIcon{margin:4px}.expandCollapseButton:hover{background-color:var(--vvd-color-neutral-100)}.selected .expandCollapseButton:hover{background-color:var(--vvd-color-neutral-700)}.items{display:flex;flex-direction:column;gap:4px;margin-block-start:4px;padding-inline-start:48px}slot[name=icon]{font-size:20px;line-height:1}.control:not(.disabled,.selected) slot[name=icon]{color:var(--vvd-color-neutral-600)}";
|
|
276
16
|
|
|
277
|
-
|
|
17
|
+
var __defProp = Object.defineProperty;
|
|
18
|
+
var __decorateClass = (decorators, target, key, kind) => {
|
|
19
|
+
var result = void 0 ;
|
|
20
|
+
for (var i = decorators.length - 1, decorator; i >= 0; i--)
|
|
21
|
+
if (decorator = decorators[i])
|
|
22
|
+
result = (decorator(target, key, result) ) || result;
|
|
23
|
+
if (result) __defProp(target, key, result);
|
|
24
|
+
return result;
|
|
25
|
+
};
|
|
26
|
+
class TreeItem extends treeItem.TreeItem {
|
|
278
27
|
}
|
|
28
|
+
__decorateClass([
|
|
29
|
+
index.attr
|
|
30
|
+
], TreeItem.prototype, "text");
|
|
31
|
+
applyMixins.applyMixins(TreeItem, affix.AffixIcon);
|
|
279
32
|
|
|
280
|
-
const getClasses = (
|
|
281
|
-
|
|
33
|
+
const getClasses = ({ disabled, selected }) => classNames.classNames(
|
|
34
|
+
"control",
|
|
35
|
+
["disabled", disabled],
|
|
36
|
+
["selected", Boolean(selected)]
|
|
37
|
+
);
|
|
38
|
+
const expandCollapseButton = (context) => {
|
|
39
|
+
const iconTag = context.tagFor(icon.Icon);
|
|
40
|
+
return index.html`
|
|
41
|
+
<div aria-hidden="true"
|
|
42
|
+
class="expandCollapseButton"
|
|
43
|
+
@click="${(x, c) => x.handleExpandCollapseButtonClick(c.event)}"
|
|
44
|
+
${ref.ref("expandCollapseButton")}
|
|
45
|
+
>
|
|
46
|
+
<${iconTag} class="expandCollapseIcon" name="${(x) => x.expanded ? "chevron-down-line" : "chevron-right-line"}"></${iconTag}>
|
|
47
|
+
</div>`;
|
|
48
|
+
};
|
|
49
|
+
const TreeItemTemplate = (context) => {
|
|
50
|
+
const affixIconTemplate = affix.affixIconTemplateFactory(context);
|
|
282
51
|
return index.html` <template
|
|
283
|
-
role="
|
|
284
|
-
${
|
|
285
|
-
|
|
52
|
+
role="treeitem"
|
|
53
|
+
slot="${(x) => x.isNestedItem() ? "item" : void 0}"
|
|
54
|
+
tabindex="-1"
|
|
55
|
+
aria-expanded="${(x) => x.childItems && x.childItems.length > 0 ? x.expanded : void 0}"
|
|
56
|
+
aria-selected="${(x) => x.selected}"
|
|
57
|
+
aria-disabled="${(x) => x.disabled}"
|
|
286
58
|
@focusin="${(x, c) => x.handleFocus(c.event)}"
|
|
287
59
|
@focusout="${(x, c) => x.handleBlur(c.event)}"
|
|
288
|
-
|
|
289
|
-
|
|
60
|
+
${children.children({
|
|
61
|
+
property: "childItems",
|
|
62
|
+
filter: slotted.elements(context.tagFor(TreeItem))
|
|
63
|
+
})}
|
|
290
64
|
>
|
|
291
65
|
<div class="${getClasses}">
|
|
292
|
-
|
|
66
|
+
${when.when(
|
|
67
|
+
(x) => x.childItems && x.childItems.length > 0,
|
|
68
|
+
expandCollapseButton(context)
|
|
69
|
+
)}
|
|
70
|
+
${(x) => affixIconTemplate(x.icon, affix.IconWrapper.Slot)}
|
|
71
|
+
${(x) => x.text}
|
|
293
72
|
</div>
|
|
73
|
+
${when.when(
|
|
74
|
+
(x) => x.childItems && x.childItems.length > 0 && x.expanded,
|
|
75
|
+
index.html` <div role="group" class="items">
|
|
76
|
+
<slot name="item" ${slotted.slotted("items")}></slot>
|
|
77
|
+
</div>`
|
|
78
|
+
)}
|
|
294
79
|
</template>`;
|
|
295
80
|
};
|
|
296
81
|
|
|
297
|
-
const
|
|
82
|
+
const treeItemDefinition = TreeItem.compose(
|
|
298
83
|
{
|
|
299
|
-
baseName: "tree-
|
|
300
|
-
template:
|
|
84
|
+
baseName: "tree-item",
|
|
85
|
+
template: TreeItemTemplate,
|
|
301
86
|
styles
|
|
302
87
|
}
|
|
303
88
|
);
|
|
304
|
-
const
|
|
305
|
-
const
|
|
89
|
+
const treeItemRegistries = [treeItemDefinition(), ...definition.iconRegistries];
|
|
90
|
+
const registerTreeItem = index.registerFactory(treeItemRegistries);
|
|
306
91
|
|
|
307
|
-
exports.
|
|
308
|
-
exports.
|
|
309
|
-
exports.
|
|
92
|
+
exports.registerTreeItem = registerTreeItem;
|
|
93
|
+
exports.treeItemDefinition = treeItemDefinition;
|
|
94
|
+
exports.treeItemRegistries = treeItemRegistries;
|