@ukic/canary-web-components 3.0.0-canary.13 → 3.0.0-canary.14
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/dist/cjs/core.cjs.js +1 -1
- package/dist/cjs/{helpers-0e4c4fdd.js → helpers-32016c21.js} +21 -3
- package/dist/cjs/helpers-32016c21.js.map +1 -0
- package/dist/cjs/ic-button_3.cjs.entry.js +59 -1
- package/dist/cjs/ic-button_3.cjs.entry.js.map +1 -1
- package/dist/cjs/ic-card-horizontal.cjs.entry.js +1 -1
- package/dist/cjs/ic-data-table-title-bar.cjs.entry.js +1 -1
- package/dist/cjs/ic-data-table.cjs.entry.js +2 -2
- package/dist/cjs/ic-data-table.cjs.entry.js.map +1 -1
- package/dist/cjs/ic-date-input.cjs.entry.js +52 -19
- package/dist/cjs/ic-date-input.cjs.entry.js.map +1 -1
- package/dist/cjs/ic-date-picker.cjs.entry.js +15 -10
- package/dist/cjs/ic-date-picker.cjs.entry.js.map +1 -1
- package/dist/cjs/ic-empty-state_2.cjs.entry.js +1 -1
- package/dist/cjs/ic-menu-item.cjs.entry.js +1 -1
- package/dist/cjs/ic-menu-item.cjs.entry.js.map +1 -1
- package/dist/cjs/ic-navigation-group.cjs.entry.js +6 -3
- package/dist/cjs/ic-navigation-group.cjs.entry.js.map +1 -1
- package/dist/cjs/ic-navigation-menu.cjs.entry.js +36 -22
- package/dist/cjs/ic-navigation-menu.cjs.entry.js.map +1 -1
- package/dist/cjs/ic-pagination_4.cjs.entry.js +13 -10
- package/dist/cjs/ic-pagination_4.cjs.entry.js.map +1 -1
- package/dist/cjs/ic-popover-menu.cjs.entry.js +5 -4
- package/dist/cjs/ic-popover-menu.cjs.entry.js.map +1 -1
- package/dist/cjs/ic-side-navigation.cjs.entry.js +7 -4
- package/dist/cjs/ic-side-navigation.cjs.entry.js.map +1 -1
- package/dist/cjs/ic-skip-link.cjs.entry.js +10 -9
- package/dist/cjs/ic-skip-link.cjs.entry.js.map +1 -1
- package/dist/cjs/ic-status-tag.cjs.entry.js +1 -1
- package/dist/cjs/ic-status-tag.cjs.entry.js.map +1 -1
- package/dist/cjs/ic-step.cjs.entry.js +13 -12
- package/dist/cjs/ic-step.cjs.entry.js.map +1 -1
- package/dist/cjs/ic-toast.cjs.entry.js +3 -3
- package/dist/cjs/ic-toast.cjs.entry.js.map +1 -1
- package/dist/cjs/ic-tree-item.cjs.entry.js +29 -8
- package/dist/cjs/ic-tree-item.cjs.entry.js.map +1 -1
- package/dist/cjs/ic-tree-view.cjs.entry.js +113 -12
- package/dist/cjs/ic-tree-view.cjs.entry.js.map +1 -1
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/collection/components/ic-data-table/ic-data-table.css +3 -2
- package/dist/collection/components/ic-date-input/ic-date-input.js +83 -24
- package/dist/collection/components/ic-date-input/ic-date-input.js.map +1 -1
- package/dist/collection/components/ic-date-input/ic-date-input.stories.js +18 -0
- package/dist/collection/components/ic-date-input/ic-date-input.stories.js.map +1 -1
- package/dist/collection/components/ic-date-picker/ic-date-picker.js +34 -9
- package/dist/collection/components/ic-date-picker/ic-date-picker.js.map +1 -1
- package/dist/collection/components/ic-date-picker/ic-date-picker.stories.js +9 -1
- package/dist/collection/components/ic-date-picker/ic-date-picker.stories.js.map +1 -1
- package/dist/collection/components/ic-date-picker/story-data.js +16 -1
- package/dist/collection/components/ic-date-picker/story-data.js.map +1 -1
- package/dist/collection/components/ic-tree-item/ic-tree-item.js +50 -7
- package/dist/collection/components/ic-tree-item/ic-tree-item.js.map +1 -1
- package/dist/collection/components/ic-tree-view/ic-tree-view.js +146 -16
- package/dist/collection/components/ic-tree-view/ic-tree-view.js.map +1 -1
- package/dist/collection/components/ic-tree-view/ic-tree-view.stories.js +384 -12
- package/dist/collection/components/ic-tree-view/ic-tree-view.stories.js.map +1 -1
- package/dist/collection/components/ic-tree-view/ic-tree-view.types.js +2 -0
- package/dist/collection/components/ic-tree-view/ic-tree-view.types.js.map +1 -0
- package/dist/collection/utils/helpers.js.map +1 -1
- package/dist/components/helpers.js +1 -1
- package/dist/components/helpers2.js +19 -3
- package/dist/components/helpers2.js.map +1 -1
- package/dist/components/ic-button2.js +59 -1
- package/dist/components/ic-button2.js.map +1 -1
- package/dist/components/ic-data-table.js +1 -1
- package/dist/components/ic-data-table.js.map +1 -1
- package/dist/components/ic-date-input2.js +58 -21
- package/dist/components/ic-date-input2.js.map +1 -1
- package/dist/components/ic-date-picker.js +15 -9
- package/dist/components/ic-date-picker.js.map +1 -1
- package/dist/components/ic-menu-item2.js +1 -1
- package/dist/components/ic-menu-item2.js.map +1 -1
- package/dist/components/ic-navigation-group.js +6 -3
- package/dist/components/ic-navigation-group.js.map +1 -1
- package/dist/components/ic-navigation-menu2.js +37 -23
- package/dist/components/ic-navigation-menu2.js.map +1 -1
- package/dist/components/ic-popover-menu.js +5 -4
- package/dist/components/ic-popover-menu.js.map +1 -1
- package/dist/components/ic-select2.js +13 -10
- package/dist/components/ic-select2.js.map +1 -1
- package/dist/components/ic-side-navigation.js +7 -4
- package/dist/components/ic-side-navigation.js.map +1 -1
- package/dist/components/ic-skip-link.js +10 -9
- package/dist/components/ic-skip-link.js.map +1 -1
- package/dist/components/ic-status-tag.js +1 -1
- package/dist/components/ic-status-tag.js.map +1 -1
- package/dist/components/ic-step.js +13 -12
- package/dist/components/ic-step.js.map +1 -1
- package/dist/components/ic-toast.js +4 -4
- package/dist/components/ic-toast.js.map +1 -1
- package/dist/components/ic-top-navigation.js +1 -1
- package/dist/components/ic-tree-item.js +29 -7
- package/dist/components/ic-tree-item.js.map +1 -1
- package/dist/components/ic-tree-view.js +119 -14
- package/dist/components/ic-tree-view.js.map +1 -1
- package/dist/core/core.css +35 -29
- package/dist/core/core.esm.js +1 -1
- package/dist/core/core.esm.js.map +1 -1
- package/dist/core/p-0ad472d0.entry.js +2 -0
- package/dist/core/p-0ad472d0.entry.js.map +1 -0
- package/dist/core/{p-fde3bbb2.entry.js → p-0c97a53d.entry.js} +2 -2
- package/dist/core/p-250bf568.entry.js +2 -0
- package/dist/core/p-250bf568.entry.js.map +1 -0
- package/dist/core/{p-c6f1e205.entry.js → p-48163a2a.entry.js} +2 -2
- package/dist/core/p-48163a2a.entry.js.map +1 -0
- package/dist/core/{p-95f2c59a.entry.js → p-4f00aa91.entry.js} +2 -2
- package/dist/core/{p-95f2c59a.entry.js.map → p-4f00aa91.entry.js.map} +1 -1
- package/dist/core/p-54e01fad.entry.js +2 -0
- package/dist/core/p-54e01fad.entry.js.map +1 -0
- package/dist/core/p-5d85bd73.entry.js +2 -0
- package/dist/core/p-5d85bd73.entry.js.map +1 -0
- package/dist/core/p-6040a025.entry.js +2 -0
- package/dist/core/p-6040a025.entry.js.map +1 -0
- package/dist/core/p-62f7f2bd.entry.js +2 -0
- package/dist/core/p-62f7f2bd.entry.js.map +1 -0
- package/dist/core/p-72310da8.js +2 -0
- package/dist/core/p-72310da8.js.map +1 -0
- package/dist/core/p-762a4d7c.entry.js +2 -0
- package/dist/core/p-762a4d7c.entry.js.map +1 -0
- package/dist/core/p-836d302a.entry.js +2 -0
- package/dist/core/p-836d302a.entry.js.map +1 -0
- package/dist/core/p-881bb783.entry.js +2 -0
- package/dist/core/p-881bb783.entry.js.map +1 -0
- package/dist/core/{p-3dc4e128.entry.js → p-895a3eb1.entry.js} +2 -2
- package/dist/core/p-9a46b1e5.entry.js +2 -0
- package/dist/core/p-9a46b1e5.entry.js.map +1 -0
- package/dist/core/{p-67f3bf1a.entry.js → p-a13dc5ba.entry.js} +2 -2
- package/dist/core/{p-e86c1c95.entry.js → p-c0687222.entry.js} +2 -2
- package/dist/core/p-c0687222.entry.js.map +1 -0
- package/dist/core/p-c4f7e479.entry.js +2 -0
- package/dist/core/p-c4f7e479.entry.js.map +1 -0
- package/dist/core/{p-f6013934.entry.js → p-ef25bb6d.entry.js} +2 -2
- package/dist/core/p-ef25bb6d.entry.js.map +1 -0
- package/dist/core/p-fb11ce9b.entry.js +2 -0
- package/dist/core/p-fb11ce9b.entry.js.map +1 -0
- package/dist/esm/core.js +1 -1
- package/dist/esm/{helpers-4e38ba2b.js → helpers-5479985d.js} +20 -4
- package/dist/esm/helpers-5479985d.js.map +1 -0
- package/dist/esm/ic-button_3.entry.js +59 -1
- package/dist/esm/ic-button_3.entry.js.map +1 -1
- package/dist/esm/ic-card-horizontal.entry.js +1 -1
- package/dist/esm/ic-data-table-title-bar.entry.js +1 -1
- package/dist/esm/ic-data-table.entry.js +2 -2
- package/dist/esm/ic-data-table.entry.js.map +1 -1
- package/dist/esm/ic-date-input.entry.js +52 -19
- package/dist/esm/ic-date-input.entry.js.map +1 -1
- package/dist/esm/ic-date-picker.entry.js +15 -10
- package/dist/esm/ic-date-picker.entry.js.map +1 -1
- package/dist/esm/ic-empty-state_2.entry.js +1 -1
- package/dist/esm/ic-menu-item.entry.js +1 -1
- package/dist/esm/ic-menu-item.entry.js.map +1 -1
- package/dist/esm/ic-navigation-group.entry.js +6 -3
- package/dist/esm/ic-navigation-group.entry.js.map +1 -1
- package/dist/esm/ic-navigation-menu.entry.js +37 -23
- package/dist/esm/ic-navigation-menu.entry.js.map +1 -1
- package/dist/esm/ic-pagination_4.entry.js +13 -10
- package/dist/esm/ic-pagination_4.entry.js.map +1 -1
- package/dist/esm/ic-popover-menu.entry.js +5 -4
- package/dist/esm/ic-popover-menu.entry.js.map +1 -1
- package/dist/esm/ic-side-navigation.entry.js +7 -4
- package/dist/esm/ic-side-navigation.entry.js.map +1 -1
- package/dist/esm/ic-skip-link.entry.js +10 -9
- package/dist/esm/ic-skip-link.entry.js.map +1 -1
- package/dist/esm/ic-status-tag.entry.js +1 -1
- package/dist/esm/ic-status-tag.entry.js.map +1 -1
- package/dist/esm/ic-step.entry.js +13 -12
- package/dist/esm/ic-step.entry.js.map +1 -1
- package/dist/esm/ic-toast.entry.js +3 -3
- package/dist/esm/ic-toast.entry.js.map +1 -1
- package/dist/esm/ic-tree-item.entry.js +29 -8
- package/dist/esm/ic-tree-item.entry.js.map +1 -1
- package/dist/esm/ic-tree-view.entry.js +113 -12
- package/dist/esm/ic-tree-view.entry.js.map +1 -1
- package/dist/esm/loader.js +1 -1
- package/dist/types/components/ic-date-input/ic-date-input.d.ts +15 -4
- package/dist/types/components/ic-date-input/ic-date-input.stories.d.ts +6 -0
- package/dist/types/components/ic-date-picker/ic-date-picker.d.ts +4 -0
- package/dist/types/components/ic-date-picker/ic-date-picker.stories.d.ts +8 -0
- package/dist/types/components/ic-date-picker/story-data.d.ts +1 -0
- package/dist/types/components/ic-tree-item/ic-tree-item.d.ts +6 -0
- package/dist/types/components/ic-tree-view/ic-tree-view.d.ts +17 -0
- package/dist/types/components/ic-tree-view/ic-tree-view.stories.d.ts +91 -13
- package/dist/types/components/ic-tree-view/ic-tree-view.types.d.ts +12 -0
- package/dist/types/components.d.ts +39 -6
- package/dist/types/utils/helpers.d.ts +2 -2
- package/hydrate/index.js +449 -184
- package/hydrate/index.mjs +449 -184
- package/package.json +3 -3
- package/dist/cjs/helpers-0e4c4fdd.js.map +0 -1
- package/dist/core/p-44ffa951.entry.js +0 -2
- package/dist/core/p-44ffa951.entry.js.map +0 -1
- package/dist/core/p-47962514.entry.js +0 -2
- package/dist/core/p-47962514.entry.js.map +0 -1
- package/dist/core/p-5329e478.entry.js +0 -2
- package/dist/core/p-5329e478.entry.js.map +0 -1
- package/dist/core/p-5b2a7c1a.entry.js +0 -2
- package/dist/core/p-5b2a7c1a.entry.js.map +0 -1
- package/dist/core/p-8c4f212a.entry.js +0 -2
- package/dist/core/p-8c4f212a.entry.js.map +0 -1
- package/dist/core/p-9265efef.entry.js +0 -2
- package/dist/core/p-9265efef.entry.js.map +0 -1
- package/dist/core/p-a35cdfc3.entry.js +0 -2
- package/dist/core/p-a35cdfc3.entry.js.map +0 -1
- package/dist/core/p-ac74cdac.entry.js +0 -2
- package/dist/core/p-ac74cdac.entry.js.map +0 -1
- package/dist/core/p-ad3e543e.entry.js +0 -2
- package/dist/core/p-ad3e543e.entry.js.map +0 -1
- package/dist/core/p-ae2bae87.entry.js +0 -2
- package/dist/core/p-ae2bae87.entry.js.map +0 -1
- package/dist/core/p-afde50b8.js +0 -2
- package/dist/core/p-afde50b8.js.map +0 -1
- package/dist/core/p-b84213d1.entry.js +0 -2
- package/dist/core/p-b84213d1.entry.js.map +0 -1
- package/dist/core/p-c6f1e205.entry.js.map +0 -1
- package/dist/core/p-cd59dc16.entry.js +0 -2
- package/dist/core/p-cd59dc16.entry.js.map +0 -1
- package/dist/core/p-e86c1c95.entry.js.map +0 -1
- package/dist/core/p-f6013934.entry.js.map +0 -1
- package/dist/esm/helpers-4e38ba2b.js.map +0 -1
- /package/dist/core/{p-fde3bbb2.entry.js.map → p-0c97a53d.entry.js.map} +0 -0
- /package/dist/core/{p-3dc4e128.entry.js.map → p-895a3eb1.entry.js.map} +0 -0
- /package/dist/core/{p-67f3bf1a.entry.js.map → p-a13dc5ba.entry.js.map} +0 -0
@@ -1,11 +1,23 @@
|
|
1
1
|
import { proxyCustomElement, HTMLElement, h, Host } from '@stencil/core/internal/client';
|
2
|
-
import { z as isPropDefined, i as isSlotUsed, a as renderDynamicChildSlots } from './helpers2.js';
|
2
|
+
import { z as getCurrentDeviceSize, D as DEVICE_SIZES, A as isPropDefined, i as isSlotUsed, h as checkResizeObserver, a as renderDynamicChildSlots } from './helpers2.js';
|
3
3
|
import { d as defineCustomElement$3 } from './ic-tooltip2.js';
|
4
4
|
import { d as defineCustomElement$2 } from './ic-typography2.js';
|
5
5
|
|
6
6
|
const icTreeViewCss = ":host{display:block;width:var(--tree-view-width, 100%);background-color:var(--ic-tree-view-background)}:host .heading-area-container{border-bottom:var(--ic-space-1px) solid var(--ic-tree-view-divider);display:flex;align-items:center;min-height:calc(\n var(--ic-space-xl) + var(--ic-space-xs) - var(--ic-space-1px)\n );padding:0 var(--ic-space-xs);--ic-typography-color:var(--ic-tree-view-text)}:host(.ic-tree-view-small) .heading-area-container{min-height:calc(var(--ic-space-xl) - var(--ic-space-1px))}:host(.ic-tree-view-large) .heading-area-container{min-height:calc(var(--ic-space-xxl) - var(--ic-space-1px))}:host(.ic-tree-view-truncate) .heading-area-container{height:calc(var(--ic-space-xl) + var(--ic-space-xs) - var(--ic-space-1px))}:host(.ic-tree-view-truncate.ic-tree-view-small) .heading-area-container{height:calc(var(--ic-space-xl) - var(--ic-space-1px))}:host(.ic-tree-view-truncate.ic-tree-view-large) .heading-area-container{height:calc(var(--ic-space-xxl) - var(--ic-space-1px))}.icon-container{width:var(--ic-space-lg);min-width:var(--ic-space-lg);height:var(--ic-space-lg);margin:0 var(--ic-space-xs) 0 0}:host(.ic-tree-view-small) .icon-container{margin:0 var(--ic-space-xxs) 0 0}.ic-text-overflow{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.ic-tooltip-overflow{overflow:hidden}.tree-view-header.with-padding{padding-right:var(--ic-space-xs)}.tree-items-container-hidden{visibility:hidden}::slotted([slot=\"icon\"]){fill:var(--ic-tree-view-icon)}@media (forced-colors: active){::slotted([slot=\"icon\"]){fill:currentcolor}}";
|
7
7
|
const IcTreeViewStyle0 = icTreeViewCss;
|
8
8
|
|
9
|
+
var __rest = (undefined && undefined.__rest) || function (s, e) {
|
10
|
+
var t = {};
|
11
|
+
for (var p in s)
|
12
|
+
if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
13
|
+
t[p] = s[p];
|
14
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
15
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
16
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
17
|
+
t[p[i]] = s[p[i]];
|
18
|
+
}
|
19
|
+
return t;
|
20
|
+
};
|
9
21
|
let treeViewIds = 0;
|
10
22
|
const TreeView = /*@__PURE__*/ proxyCustomElement(class TreeView extends HTMLElement {
|
11
23
|
constructor() {
|
@@ -16,6 +28,9 @@ const TreeView = /*@__PURE__*/ proxyCustomElement(class TreeView extends HTMLEle
|
|
16
28
|
this.treeItemTag = "IC-TREE-ITEM";
|
17
29
|
this.hostMutationObserver = null;
|
18
30
|
this.isLoaded = false;
|
31
|
+
this.resizeObserver = null;
|
32
|
+
this.TOOLTIP = "ic-tooltip";
|
33
|
+
this.smallDevice = false;
|
19
34
|
/**
|
20
35
|
* If `true`, tree items will have inset focus.
|
21
36
|
*/
|
@@ -32,14 +47,32 @@ const TreeView = /*@__PURE__*/ proxyCustomElement(class TreeView extends HTMLEle
|
|
32
47
|
* Sets the theme color to the dark or light theme color. "inherit" will set the color based on the system settings or ic-theme component.
|
33
48
|
*/
|
34
49
|
this.theme = "inherit";
|
50
|
+
/**
|
51
|
+
* The content within the tree view tree items. This will take precedence over slotted content.
|
52
|
+
* */
|
53
|
+
this.treeItemData = [];
|
35
54
|
/**
|
36
55
|
* If `true`, the tree view heading will be truncated instead of text wrapping.
|
56
|
+
* When used on small devices, this prop will be overridden and headings will be set to text-wrap.
|
37
57
|
*/
|
38
58
|
this.truncateHeading = false;
|
39
59
|
/**
|
40
60
|
* If `true`, tree items will be truncated, unless they are individually overridden.
|
61
|
+
* When used on small devices, this prop will be overridden and tree-items will be set to text-wrap.
|
41
62
|
*/
|
42
63
|
this.truncateTreeItems = false;
|
64
|
+
this.runResizeObserver = () => {
|
65
|
+
this.resizeObserver = new ResizeObserver(() => {
|
66
|
+
const isSmallDevice = getCurrentDeviceSize() <= DEVICE_SIZES.S;
|
67
|
+
if (this.smallDevice !== isSmallDevice)
|
68
|
+
this.smallDevice = isSmallDevice;
|
69
|
+
});
|
70
|
+
this.resizeObserver.observe(document.body);
|
71
|
+
};
|
72
|
+
this.removeTruncation = () => {
|
73
|
+
this.truncateHeading = undefined;
|
74
|
+
this.truncateTreeItems = undefined;
|
75
|
+
};
|
43
76
|
this.handleKeyDown = (event) => {
|
44
77
|
var _a;
|
45
78
|
const focussedChild = this.treeItems.indexOf(this.treeItems.filter((el) => el === document.activeElement)[0]);
|
@@ -128,7 +161,7 @@ const TreeView = /*@__PURE__*/ proxyCustomElement(class TreeView extends HTMLEle
|
|
128
161
|
};
|
129
162
|
this.truncateTreeViewHeading = () => {
|
130
163
|
const typographyEl = this.el.shadowRoot.querySelector(".tree-view-header");
|
131
|
-
const tooltip = typographyEl === null || typographyEl === void 0 ? void 0 : typographyEl.closest(
|
164
|
+
const tooltip = typographyEl === null || typographyEl === void 0 ? void 0 : typographyEl.closest(this.TOOLTIP);
|
132
165
|
const headingContainer = this.el.shadowRoot.querySelector(".heading-area-container");
|
133
166
|
if ((typographyEl === null || typographyEl === void 0 ? void 0 : typographyEl.scrollHeight) > (headingContainer === null || headingContainer === void 0 ? void 0 : headingContainer.clientHeight)) {
|
134
167
|
typographyEl.classList.add("ic-text-overflow");
|
@@ -143,6 +176,16 @@ const TreeView = /*@__PURE__*/ proxyCustomElement(class TreeView extends HTMLEle
|
|
143
176
|
}
|
144
177
|
}
|
145
178
|
};
|
179
|
+
this.removeHeadingTruncation = () => {
|
180
|
+
const typographyEl = this.el.shadowRoot.querySelector(".tree-view-header");
|
181
|
+
const tooltipEl = typographyEl === null || typographyEl === void 0 ? void 0 : typographyEl.closest(this.TOOLTIP);
|
182
|
+
if (tooltipEl) {
|
183
|
+
typographyEl.classList.remove("ic-text-overflow");
|
184
|
+
this.el.shadowRoot
|
185
|
+
.querySelector(".heading-area-container")
|
186
|
+
.replaceChild(typographyEl, tooltipEl);
|
187
|
+
}
|
188
|
+
};
|
146
189
|
this.isHeadingDefined = () => isPropDefined(this.heading) && this.heading !== null;
|
147
190
|
this.hasHeadingAreaContent = () => {
|
148
191
|
return (isSlotUsed(this.el, "heading") ||
|
@@ -150,6 +193,17 @@ const TreeView = /*@__PURE__*/ proxyCustomElement(class TreeView extends HTMLEle
|
|
150
193
|
isSlotUsed(this.el, "icon"));
|
151
194
|
};
|
152
195
|
}
|
196
|
+
watchSmallDeviceHandler() {
|
197
|
+
if (this.smallDevice) {
|
198
|
+
this.previousTruncateHeading = this.truncateHeading;
|
199
|
+
this.previousTruncateTreeItems = this.truncateTreeItems;
|
200
|
+
this.removeTruncation();
|
201
|
+
}
|
202
|
+
else {
|
203
|
+
this.truncateHeading = this.previousTruncateHeading;
|
204
|
+
this.truncateTreeItems = this.previousTruncateTreeItems;
|
205
|
+
}
|
206
|
+
}
|
153
207
|
watchFocusInsetHandler() {
|
154
208
|
this.treeItems.forEach((treeItem) => {
|
155
209
|
treeItem.focusInset = this.focusInset;
|
@@ -165,27 +219,44 @@ const TreeView = /*@__PURE__*/ proxyCustomElement(class TreeView extends HTMLEle
|
|
165
219
|
treeItem.theme = this.theme;
|
166
220
|
});
|
167
221
|
}
|
222
|
+
watchTreeItemOptionsHandler() {
|
223
|
+
this.setTreeItems();
|
224
|
+
}
|
168
225
|
watchTruncateTreeItemsHandler() {
|
169
226
|
this.treeItems.forEach((treeItem) => {
|
170
|
-
if (
|
227
|
+
if (this.smallDevice) {
|
228
|
+
treeItem.previousTruncateTreeItem = treeItem.truncateTreeItem;
|
171
229
|
treeItem.truncateTreeItem = this.truncateTreeItems;
|
172
230
|
}
|
231
|
+
else {
|
232
|
+
treeItem.truncateTreeItem = treeItem.previousTruncateTreeItem;
|
233
|
+
}
|
173
234
|
});
|
174
235
|
}
|
175
236
|
disconnectedCallback() {
|
176
|
-
var _a, _b;
|
237
|
+
var _a, _b, _c;
|
177
238
|
(_a = this.el) === null || _a === void 0 ? void 0 : _a.removeEventListener("slotchange", this.setTreeItems);
|
178
239
|
(_b = this.hostMutationObserver) === null || _b === void 0 ? void 0 : _b.disconnect();
|
240
|
+
(_c = this.resizeObserver) === null || _c === void 0 ? void 0 : _c.disconnect();
|
179
241
|
}
|
180
242
|
componentWillLoad() {
|
181
243
|
this.setTreeItems();
|
244
|
+
this.previousTruncateHeading = this.truncateHeading;
|
245
|
+
this.previousTruncateTreeItems = this.truncateTreeItems;
|
246
|
+
checkResizeObserver(this.runResizeObserver);
|
182
247
|
this.watchSizeHandler();
|
183
248
|
this.watchFocusInsetHandler();
|
184
249
|
this.watchThemeHandler();
|
185
|
-
this.
|
250
|
+
this.treeItems.forEach((treeItem) => {
|
251
|
+
if (treeItem.truncateTreeItem === undefined) {
|
252
|
+
treeItem.truncateTreeItem = this.truncateTreeItems;
|
253
|
+
}
|
254
|
+
});
|
186
255
|
}
|
187
256
|
componentDidRender() {
|
188
|
-
this.truncateHeading
|
257
|
+
this.truncateHeading
|
258
|
+
? this.truncateTreeViewHeading()
|
259
|
+
: this.removeHeadingTruncation();
|
189
260
|
}
|
190
261
|
componentDidLoad() {
|
191
262
|
this.addSlotChangeListener();
|
@@ -204,33 +275,63 @@ const TreeView = /*@__PURE__*/ proxyCustomElement(class TreeView extends HTMLEle
|
|
204
275
|
}
|
205
276
|
getAllTreeItems(element) {
|
206
277
|
const treeItems = [];
|
207
|
-
const
|
278
|
+
const collectTreeItemsFromSlottedContent = (el) => {
|
208
279
|
Array.from(el.children).forEach((child) => {
|
209
280
|
if (child.tagName === this.treeItemTag) {
|
210
281
|
treeItems.push(child);
|
211
282
|
}
|
212
|
-
|
283
|
+
collectTreeItemsFromSlottedContent(child);
|
284
|
+
});
|
285
|
+
};
|
286
|
+
const collectTreeItemsFromData = (items, parentElement) => {
|
287
|
+
Array.from(parentElement.children).forEach((child) => {
|
288
|
+
if (child.tagName === this.treeItemTag) {
|
289
|
+
parentElement.removeChild(child);
|
290
|
+
}
|
291
|
+
});
|
292
|
+
items.forEach((item) => {
|
293
|
+
const treeItem = document.createElement(this.treeItemTag);
|
294
|
+
const { children, icon } = item, props = __rest(item, ["children", "icon"]);
|
295
|
+
Object.assign(treeItem, props);
|
296
|
+
if (icon) {
|
297
|
+
const iconSlot = document.createElement("div");
|
298
|
+
iconSlot.setAttribute("slot", "icon");
|
299
|
+
iconSlot.innerHTML = icon;
|
300
|
+
treeItem.appendChild(iconSlot);
|
301
|
+
}
|
302
|
+
parentElement.appendChild(treeItem);
|
303
|
+
treeItems.push(treeItem);
|
304
|
+
if (children && children.length > 0) {
|
305
|
+
collectTreeItemsFromData(children, treeItem);
|
306
|
+
}
|
213
307
|
});
|
214
308
|
};
|
215
|
-
|
309
|
+
if (this.treeItemData.length > 0) {
|
310
|
+
collectTreeItemsFromData(this.treeItemData, element);
|
311
|
+
}
|
312
|
+
else {
|
313
|
+
collectTreeItemsFromSlottedContent(element);
|
314
|
+
}
|
216
315
|
return treeItems;
|
217
316
|
}
|
218
317
|
render() {
|
219
318
|
const { heading, isLoaded, size, theme, truncateHeading } = this;
|
220
|
-
return (h(Host, { key: '
|
319
|
+
return (h(Host, { key: '43c3dd9cb9f888c4033088087fdce4829559f03f', "context-id": this.treeViewId, class: {
|
221
320
|
[`ic-tree-view-${size}`]: size !== "medium",
|
222
321
|
[`ic-theme-${theme}`]: theme !== "inherit",
|
223
322
|
"ic-tree-view-truncate": truncateHeading,
|
224
|
-
}, onKeyDown: this.handleKeyDown, "aria-label": this.isHeadingDefined() ? heading : null }, this.hasHeadingAreaContent() && (h("div", { key: '
|
323
|
+
}, onKeyDown: this.handleKeyDown, "aria-label": this.isHeadingDefined() ? heading : null }, this.hasHeadingAreaContent() && (h("div", { key: '759c1432800d9dd26b1d9ce720c9626e41408f2f', class: "heading-area-container" }, isSlotUsed(this.el, "icon") && (h("div", { key: '3c239ffde40795dcf3f47b12c5649906a6198970', class: "icon-container" }, h("slot", { key: 'e86df51c31b2b0deea7c484bceacec0f593db42c', name: "icon" }))), h("ic-typography", { key: 'a54ae6d1eb99029f5dda14f0118519aed971b6d1', variant: "subtitle-large", class: {
|
225
324
|
"tree-view-header": true,
|
226
325
|
"with-padding": this.truncateHeading && !isLoaded,
|
227
|
-
} }, isSlotUsed(this.el, "heading") ? (h("slot", { name: "heading" })) : (heading)))), h("slot", { key: '
|
326
|
+
} }, isSlotUsed(this.el, "heading") ? (h("slot", { name: "heading" })) : (heading)))), h("slot", { key: '154c96cfb4a0c93da02b53308fe6b8871ec4144b' })));
|
228
327
|
}
|
229
328
|
get el() { return this; }
|
230
329
|
static get watchers() { return {
|
330
|
+
"smallDevice": ["watchSmallDeviceHandler"],
|
231
331
|
"focusInset": ["watchFocusInsetHandler"],
|
232
332
|
"size": ["watchSizeHandler"],
|
233
333
|
"theme": ["watchThemeHandler"],
|
334
|
+
"treeItemData": ["watchTreeItemOptionsHandler"],
|
234
335
|
"truncateTreeItems": ["watchTruncateTreeItemsHandler"]
|
235
336
|
}; }
|
236
337
|
static get style() { return IcTreeViewStyle0; }
|
@@ -239,13 +340,17 @@ const TreeView = /*@__PURE__*/ proxyCustomElement(class TreeView extends HTMLEle
|
|
239
340
|
"heading": [1],
|
240
341
|
"size": [1],
|
241
342
|
"theme": [1],
|
242
|
-
"
|
243
|
-
"
|
343
|
+
"treeItemData": [16],
|
344
|
+
"truncateHeading": [1028, "truncate-heading"],
|
345
|
+
"truncateTreeItems": [1028, "truncate-tree-items"],
|
346
|
+
"smallDevice": [32],
|
244
347
|
"treeItems": [32]
|
245
348
|
}, [[0, "icTreeItemSelected", "handleTreeItemSelected"]], {
|
349
|
+
"smallDevice": ["watchSmallDeviceHandler"],
|
246
350
|
"focusInset": ["watchFocusInsetHandler"],
|
247
351
|
"size": ["watchSizeHandler"],
|
248
352
|
"theme": ["watchThemeHandler"],
|
353
|
+
"treeItemData": ["watchTreeItemOptionsHandler"],
|
249
354
|
"truncateTreeItems": ["watchTruncateTreeItemsHandler"]
|
250
355
|
}]);
|
251
356
|
function defineCustomElement$1() {
|
@@ -1 +1 @@
|
|
1
|
-
{"file":"ic-tree-view.js","mappings":";;;;;AAAA,MAAM,aAAa,GAAG,6hDAA6hD,CAAC;AACpjD,yBAAe,aAAa;;ACgB5B,IAAI,WAAW,GAAG,CAAC,CAAC;MAYP,QAAQ;IALrB;;;;QAMU,eAAU,GAAG,gBAAgB,WAAW,EAAE,EAAE,CAAC;QAC7C,gBAAW,GAAG,cAAc,CAAC;QAC7B,yBAAoB,GAAqB,IAAI,CAAC;QAC9C,aAAQ,GAAG,KAAK,CAAC;;;;QASjB,eAAU,GAAa,KAAK,CAAC;;;;QAW7B,YAAO,GAAY,EAAE,CAAC;;;;QAKtB,SAAI,GAAa,QAAQ,CAAC;;;;QAW1B,UAAK,GAAiB,SAAS,CAAC;;;;QAWhC,oBAAe,GAAa,KAAK,CAAC;;;;QAKlC,sBAAiB,GAAa,KAAK,CAAC;QAkDpC,kBAAa,GAAG,CAAC,KAAoB;;YAC3C,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAC1C,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAChE,CAAC;YACF,MAAM,QAAQ,GAAG,MAAA,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,0CAAE,QAAQ,CAAC;YACzD,QAAQ,KAAK,CAAC,GAAG;gBACf,KAAK,WAAW;oBACd,IAAI,CAAC,SAAS,CACZ,IAAI,CAAC,mBAAmB,CAAC,aAAa,EAAE,IAAI,CAAC,CAC9C,CAAC,QAAQ,EAAE,CAAC;oBACb,IAAI,aAAa,KAAK,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;wBAC/C,KAAK,CAAC,cAAc,EAAE,CAAC;qBACxB;oBACD,MAAM;gBACR,KAAK,SAAS;oBACZ,IAAI,CAAC,SAAS,CACZ,IAAI,CAAC,mBAAmB,CAAC,aAAa,EAAE,KAAK,CAAC,CAC/C,CAAC,QAAQ,EAAE,CAAC;oBACb,IAAI,aAAa,KAAK,CAAC,EAAE;wBACvB,KAAK,CAAC,cAAc,EAAE,CAAC;qBACxB;oBACD,MAAM;gBACR,KAAK,YAAY;oBACf,IAAI,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,QAAQ,IAAI,CAAC,QAAQ,EAAE;wBACvD,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,QAAQ,GAAG,IAAI,CAAC;wBAC9C,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,iBAAiB,GAAG,IAAI,CAAC;wBACvD,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,eAAe,EAAE,CAAC;qBACjD;yBAAM,IAAI,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,QAAQ,IAAI,QAAQ,EAAE;wBAE3D,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,CAAC,CACzC,CAAC,QAAQ,EAAE,CAAC;qBACd;oBACD,KAAK,CAAC,cAAc,EAAE,CAAC;oBACvB,MAAM;gBACR,KAAK,WAAW;oBACd,IAAI,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,QAAQ,IAAI,QAAQ,EAAE;wBACtD,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,QAAQ,GAAG,KAAK,CAAC;wBAC/C,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,iBAAiB,GAAG,KAAK,CAAC;wBACxD,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,eAAe,EAAE,CAAC;qBACjD;yBAAM,IACL,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,aAAa,CAAC,OAAO;wBACnD,IAAI,CAAC,WAAW,EAChB;wBAEE,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,aAC/B,CAAC,QAAQ,EAAE,CAAC;qBACd;oBACD,KAAK,CAAC,cAAc,EAAE,CAAC;oBACvB,MAAM;aACT;SACF,CAAC;QAEM,wBAAmB,GAAG,CAC5B,WAAmB,EACnB,UAAmB;YAEnB,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;YAE3C,IAAI,WAAW,GAAG,CAAC,EAAE;gBACnB,WAAW,GAAG,CAAC,CAAC;aACjB;YAED,IAAI,QAAQ,GAAG,UAAU,GAAG,WAAW,GAAG,CAAC,GAAG,WAAW,GAAG,CAAC,CAAC;YAC9D,IAAI,QAAQ,GAAG,CAAC,EAAE;gBAChB,QAAQ,GAAG,CAAC,CAAC;aACd;iBAAM,IAAI,QAAQ,GAAG,QAAQ,EAAE;gBAC9B,QAAQ,GAAG,QAAQ,CAAC;aACrB;YAED,MAAM,WAAW,GAAG,QAAQ,GAAG,CAAC,CAAC;YACjC,IAAI,QAAQ,GAAG,CAAC,CAAC;YAEjB,OAAO,QAAQ,GAAG,WAAW,EAAE;gBAC7B,IAAI,QAAQ,GAAG,CAAC,IAAI,QAAQ,GAAG,QAAQ,EAAE;oBACvC,OAAO,WAAW,CAAC;iBACpB;gBAED,IACE,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,QAAQ;qBACjC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,aAAa,CAAC,OAAO,KAAK,IAAI,CAAC,WAAW;wBACjE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,aAAuC;6BAC9D,QAAQ,CAAC,EACd;oBACA,OAAO,QAAQ,CAAC;iBACjB;gBAED,IAAI,QAAQ,KAAK,QAAQ,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE;oBAC9D,OAAO,WAAW,CAAC;iBACpB;gBAED,QAAQ,GAAG,UAAU,GAAG,QAAQ,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,CAAC;gBACpD,QAAQ,EAAE,CAAC;aACZ;YAED,OAAO,WAAW,CAAC;SACpB,CAAC;QAEM,kBAAa,GAAG;YACtB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ;gBAC9B,QAAQ,CAAC,YAAY,CAAC,YAAY,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;aACtD,CAAC,CAAC;SACJ,CAAC;QAEM,iBAAY,GAAG;YACrB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAiB,CAAC,CAAC;YAE9D,IAAI,CAAC,aAAa,EAAE,CAAC;SACtB,CAAC;QAmBM,0BAAqB,GAAG;YAC9B,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;SAC3D,CAAC;QAEM,4BAAuB,GAAG;YAChC,MAAM,YAAY,GAChB,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,mBAAmB,CAAC,CAAC;YACxD,MAAM,OAAO,GAAG,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,OAAO,CAAC,YAAY,CAAC,CAAC;YACpD,MAAM,gBAAgB,GAAgB,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,aAAa,CACpE,yBAAyB,CAC1B,CAAC;YAEF,IAAI,CAAA,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,YAAY,KAAG,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,YAAY,CAAA,EAAE;gBAC/D,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;gBAE/C,IAAI,CAAC,OAAO,EAAE;oBACZ,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;oBACvD,SAAS,CAAC,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;oBAC7C,SAAS,CAAC,YAAY,CAAC,OAAO,EAAE,YAAY,CAAC,WAAW,CAAC,CAAC;oBAC1D,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;oBAC/C,SAAS,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;oBAC7C,gBAAgB,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;oBACxC,SAAS,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;iBACrC;aACF;SACF,CAAC;QAEM,qBAAgB,GAAG,MACzB,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC;QAE/C,0BAAqB,GAAG;YAC9B,QACE,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,CAAC;gBAC9B,IAAI,CAAC,gBAAgB,EAAE;gBACvB,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,EAC3B;SACH,CAAC;KA2CH;IAxSC,sBAAsB;QACpB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ;YAC9B,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;SACvC,CAAC,CAAC;KACJ;IAYD,gBAAgB;QACd,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ;YAC9B,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;SAC3B,CAAC,CAAC;KACJ;IAOD,iBAAiB;QACf,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ;YAC9B,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;SAC7B,CAAC,CAAC;KACJ;IAYD,6BAA6B;QAC3B,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ;YAC9B,IAAI,QAAQ,CAAC,gBAAgB,KAAK,SAAS,EAAE;gBAC3C,QAAQ,CAAC,gBAAgB,GAAG,IAAI,CAAC,iBAAiB,CAAC;aACpD;SACF,CAAC,CAAC;KACJ;IAED,oBAAoB;;QAClB,MAAA,IAAI,CAAC,EAAE,0CAAE,mBAAmB,CAAC,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QAE9D,MAAA,IAAI,CAAC,oBAAoB,0CAAE,UAAU,EAAE,CAAC;KACzC;IACD,iBAAiB;QACf,IAAI,CAAC,YAAY,EAAE,CAAC;QAEpB,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAC9B,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,IAAI,CAAC,6BAA6B,EAAE,CAAC;KACtC;IAED,kBAAkB;QAChB,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,uBAAuB,EAAE,CAAC;KACxD;IAED,gBAAgB;QACd,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAE7B,IAAI,CAAC,oBAAoB,GAAG,IAAI,gBAAgB,CAAC,CAAC,YAAY,KAC5D,uBAAuB,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,CAAC,CACpD,CAAC;QACF,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE;YACzC,SAAS,EAAE,IAAI;SAChB,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;KACtB;IAGD,sBAAsB,CAAC,KAAkB;QACvC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ;YAC9B,IAAI,QAAQ,CAAC,QAAQ,IAAI,QAAQ,CAAC,EAAE,KAAK,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE;gBACxD,QAAQ,CAAC,QAAQ,GAAG,KAAK,CAAC;aAC3B;SACF,CAAC,CAAC;KACJ;IA+GO,eAAe,CAAC,OAAoB;QAC1C,MAAM,SAAS,GAA4B,EAAE,CAAC;QAE9C,MAAM,gBAAgB,GAAG,CAAC,EAAe;YACvC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK;gBACpC,IAAI,KAAK,CAAC,OAAO,KAAK,IAAI,CAAC,WAAW,EAAE;oBACtC,SAAS,CAAC,IAAI,CAAC,KAA8B,CAAC,CAAC;iBAChD;gBAED,gBAAgB,CAAC,KAAoB,CAAC,CAAC;aACxC,CAAC,CAAC;SACJ,CAAC;QAEF,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAC1B,OAAO,SAAS,CAAC;KAClB;IAwCD,MAAM;QACJ,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC;QAEjE,QACE,EAAC,IAAI,mEACS,IAAI,CAAC,UAAU,EAC3B,KAAK,EAAE;gBACL,CAAC,gBAAgB,IAAI,EAAE,GAAG,IAAI,KAAK,QAAQ;gBAC3C,CAAC,YAAY,KAAK,EAAE,GAAG,KAAK,KAAK,SAAS;gBAC1C,uBAAuB,EAAE,eAAe;aACzC,EACD,SAAS,EAAE,IAAI,CAAC,aAAa,gBACjB,IAAI,CAAC,gBAAgB,EAAE,GAAG,OAAO,GAAG,IAAI,IAEnD,IAAI,CAAC,qBAAqB,EAAE,KAC3B,4DAAK,KAAK,EAAC,wBAAwB,IAChC,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,KAC1B,4DAAK,KAAK,EAAC,gBAAgB,IACzB,6DAAM,IAAI,EAAC,MAAM,GAAG,CAChB,CACP,EACD,sEACE,OAAO,EAAC,gBAAgB,EACxB,KAAK,EAAE;gBACL,kBAAkB,EAAE,IAAI;gBACxB,cAAc,EAAE,IAAI,CAAC,eAAe,IAAI,CAAC,QAAQ;aAClD,IAEA,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,CAAC,IAC7B,YAAM,IAAI,EAAC,SAAS,GAAG,KAEvB,OAAO,CACR,CACa,CACZ,CACP,EAED,8DAAa,CACR,EACP;KACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","names":[],"sources":["src/components/ic-tree-view/ic-tree-view.css?tag=ic-tree-view&encapsulation=shadow","src/components/ic-tree-view/ic-tree-view.tsx"],"sourcesContent":["/**\n* @prop --tree-view-width: Width of the tree view\n*/\n\n:host {\n display: block;\n width: var(--tree-view-width, 100%);\n background-color: var(--ic-tree-view-background);\n}\n\n:host .heading-area-container {\n border-bottom: var(--ic-space-1px) solid var(--ic-tree-view-divider);\n display: flex;\n align-items: center;\n min-height: calc(\n var(--ic-space-xl) + var(--ic-space-xs) - var(--ic-space-1px)\n );\n padding: 0 var(--ic-space-xs);\n\n --ic-typography-color: var(--ic-tree-view-text);\n}\n\n:host(.ic-tree-view-small) .heading-area-container {\n min-height: calc(var(--ic-space-xl) - var(--ic-space-1px));\n}\n\n:host(.ic-tree-view-large) .heading-area-container {\n min-height: calc(var(--ic-space-xxl) - var(--ic-space-1px));\n}\n\n:host(.ic-tree-view-truncate) .heading-area-container {\n height: calc(var(--ic-space-xl) + var(--ic-space-xs) - var(--ic-space-1px));\n}\n\n:host(.ic-tree-view-truncate.ic-tree-view-small) .heading-area-container {\n height: calc(var(--ic-space-xl) - var(--ic-space-1px));\n}\n\n:host(.ic-tree-view-truncate.ic-tree-view-large) .heading-area-container {\n height: calc(var(--ic-space-xxl) - var(--ic-space-1px));\n}\n\n.icon-container {\n width: var(--ic-space-lg);\n min-width: var(--ic-space-lg);\n height: var(--ic-space-lg);\n margin: 0 var(--ic-space-xs) 0 0;\n}\n\n:host(.ic-tree-view-small) .icon-container {\n margin: 0 var(--ic-space-xxs) 0 0;\n}\n\n.ic-text-overflow {\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n}\n\n.ic-tooltip-overflow {\n overflow: hidden;\n}\n\n/* Ensures truncation works - accounts for text width increase as component hydrates */\n.tree-view-header.with-padding {\n padding-right: var(--ic-space-xs);\n}\n\n.tree-items-container-hidden {\n visibility: hidden;\n}\n\n::slotted([slot=\"icon\"]) {\n fill: var(--ic-tree-view-icon);\n}\n\n/** High Contrast **/\n@media (forced-colors: active) {\n ::slotted([slot=\"icon\"]) {\n fill: currentcolor;\n }\n}\n","import {\n Component,\n h,\n Prop,\n Element,\n Host,\n Watch,\n State,\n Listen,\n} from \"@stencil/core\";\nimport { IcSizes, IcThemeMode } from \"../../utils/types\";\nimport {\n isPropDefined,\n isSlotUsed,\n renderDynamicChildSlots,\n} from \"../../utils/helpers\";\n\nlet treeViewIds = 0;\n\n/**\n * @slot heading - Content is set as the tree view heading.\n * @slot icon - Content is placed to the left of the heading.\n */\n\n@Component({\n tag: \"ic-tree-view\",\n styleUrl: \"ic-tree-view.css\",\n shadow: true,\n})\nexport class TreeView {\n private treeViewId = `ic-tree-view-${treeViewIds++}`;\n private treeItemTag = \"IC-TREE-ITEM\";\n private hostMutationObserver: MutationObserver = null;\n private isLoaded = false;\n\n @Element() el: HTMLIcTreeViewElement;\n\n @State() treeItems: HTMLIcTreeItemElement[];\n\n /**\n * If `true`, tree items will have inset focus.\n */\n @Prop() focusInset?: boolean = false;\n @Watch(\"focusInset\")\n watchFocusInsetHandler(): void {\n this.treeItems.forEach((treeItem) => {\n treeItem.focusInset = this.focusInset;\n });\n }\n\n /**\n * The heading of the tree view.\n */\n @Prop() heading?: string = \"\";\n\n /**\n * The size of the tree view.\n */\n @Prop() size?: IcSizes = \"medium\";\n @Watch(\"size\")\n watchSizeHandler(): void {\n this.treeItems.forEach((treeItem) => {\n treeItem.size = this.size;\n });\n }\n\n /**\n * Sets the theme color to the dark or light theme color. \"inherit\" will set the color based on the system settings or ic-theme component.\n */\n @Prop() theme?: IcThemeMode = \"inherit\";\n @Watch(\"theme\")\n watchThemeHandler(): void {\n this.treeItems.forEach((treeItem) => {\n treeItem.theme = this.theme;\n });\n }\n\n /**\n * If `true`, the tree view heading will be truncated instead of text wrapping.\n */\n @Prop() truncateHeading?: boolean = false;\n\n /**\n * If `true`, tree items will be truncated, unless they are individually overridden.\n */\n @Prop() truncateTreeItems?: boolean = false;\n @Watch(\"truncateTreeItems\")\n watchTruncateTreeItemsHandler(): void {\n this.treeItems.forEach((treeItem) => {\n if (treeItem.truncateTreeItem === undefined) {\n treeItem.truncateTreeItem = this.truncateTreeItems;\n }\n });\n }\n\n disconnectedCallback(): void {\n this.el?.removeEventListener(\"slotchange\", this.setTreeItems);\n\n this.hostMutationObserver?.disconnect();\n }\n componentWillLoad(): void {\n this.setTreeItems();\n\n this.watchSizeHandler();\n this.watchFocusInsetHandler();\n this.watchThemeHandler();\n this.watchTruncateTreeItemsHandler();\n }\n\n componentDidRender(): void {\n this.truncateHeading && this.truncateTreeViewHeading();\n }\n\n componentDidLoad(): void {\n this.addSlotChangeListener();\n\n this.hostMutationObserver = new MutationObserver((mutationList) =>\n renderDynamicChildSlots(mutationList, \"icon\", this)\n );\n this.hostMutationObserver.observe(this.el, {\n childList: true,\n });\n\n this.isLoaded = true;\n }\n\n @Listen(\"icTreeItemSelected\")\n handleTreeItemSelected(event: CustomEvent): void {\n this.treeItems.forEach((treeItem) => {\n if (treeItem.selected && treeItem.id !== event.detail.id) {\n treeItem.selected = false;\n }\n });\n }\n\n private handleKeyDown = (event: KeyboardEvent): void => {\n const focussedChild = this.treeItems.indexOf(\n this.treeItems.filter((el) => el === document.activeElement)[0]\n );\n const expanded = this.treeItems[focussedChild]?.expanded;\n switch (event.key) {\n case \"ArrowDown\":\n this.treeItems[\n this.getNextItemToSelect(focussedChild, true)\n ].setFocus();\n if (focussedChild !== this.treeItems.length - 1) {\n event.preventDefault();\n }\n break;\n case \"ArrowUp\":\n this.treeItems[\n this.getNextItemToSelect(focussedChild, false)\n ].setFocus();\n if (focussedChild !== 0) {\n event.preventDefault();\n }\n break;\n case \"ArrowRight\":\n if (this.treeItems[focussedChild].isParent && !expanded) {\n this.treeItems[focussedChild].expanded = true;\n this.treeItems[focussedChild].hasParentExpanded = true;\n this.treeItems[focussedChild].updateAriaLabel();\n } else if (this.treeItems[focussedChild].isParent && expanded) {\n (\n this.treeItems[focussedChild].children[0] as HTMLIcTreeItemElement\n ).setFocus();\n }\n event.preventDefault();\n break;\n case \"ArrowLeft\":\n if (this.treeItems[focussedChild].isParent && expanded) {\n this.treeItems[focussedChild].expanded = false;\n this.treeItems[focussedChild].hasParentExpanded = false;\n this.treeItems[focussedChild].updateAriaLabel();\n } else if (\n this.treeItems[focussedChild].parentElement.tagName ===\n this.treeItemTag\n ) {\n (\n this.treeItems[focussedChild].parentElement as HTMLIcTreeItemElement\n ).setFocus();\n }\n event.preventDefault();\n break;\n }\n };\n\n private getNextItemToSelect = (\n currentItem: number,\n movingDown: boolean\n ): number => {\n const numItems = this.treeItems.length - 1;\n\n if (currentItem < 1) {\n currentItem = 0;\n }\n\n let nextItem = movingDown ? currentItem + 1 : currentItem - 1;\n if (nextItem < 0) {\n nextItem = 0;\n } else if (nextItem > numItems) {\n nextItem = numItems;\n }\n\n const maxAttempts = numItems + 1;\n let attempts = 0;\n\n while (attempts < maxAttempts) {\n if (nextItem < 0 || nextItem > numItems) {\n return currentItem;\n }\n\n if (\n !this.treeItems[nextItem].disabled &&\n (this.treeItems[nextItem].parentElement.tagName !== this.treeItemTag ||\n (this.treeItems[nextItem].parentElement as HTMLIcTreeItemElement)\n .expanded)\n ) {\n return nextItem;\n }\n\n if (nextItem === numItems && this.treeItems[nextItem].disabled) {\n return currentItem;\n }\n\n nextItem = movingDown ? nextItem + 1 : nextItem - 1;\n attempts++;\n }\n\n return currentItem;\n };\n\n private linkTreeItems = () => {\n this.treeItems.forEach((treeItem) => {\n treeItem.setAttribute(\"context-id\", this.treeViewId);\n });\n };\n\n private setTreeItems = () => {\n this.treeItems = this.getAllTreeItems(this.el as HTMLElement);\n\n this.linkTreeItems();\n };\n\n private getAllTreeItems(element: HTMLElement): HTMLIcTreeItemElement[] {\n const treeItems: HTMLIcTreeItemElement[] = [];\n\n const collectTreeItems = (el: HTMLElement) => {\n Array.from(el.children).forEach((child) => {\n if (child.tagName === this.treeItemTag) {\n treeItems.push(child as HTMLIcTreeItemElement);\n }\n\n collectTreeItems(child as HTMLElement);\n });\n };\n\n collectTreeItems(element);\n return treeItems;\n }\n\n private addSlotChangeListener = () => {\n this.el.addEventListener(\"slotchange\", this.setTreeItems);\n };\n\n private truncateTreeViewHeading = () => {\n const typographyEl: HTMLIcTypographyElement =\n this.el.shadowRoot.querySelector(\".tree-view-header\");\n const tooltip = typographyEl?.closest(\"ic-tooltip\");\n const headingContainer: HTMLElement = this.el.shadowRoot.querySelector(\n \".heading-area-container\"\n );\n\n if (typographyEl?.scrollHeight > headingContainer?.clientHeight) {\n typographyEl.classList.add(\"ic-text-overflow\");\n\n if (!tooltip) {\n const tooltipEl = document.createElement(\"ic-tooltip\");\n tooltipEl.setAttribute(\"target\", this.el.id);\n tooltipEl.setAttribute(\"label\", typographyEl.textContent);\n tooltipEl.classList.add(\"ic-tooltip-overflow\");\n tooltipEl.setAttribute(\"placement\", \"right\");\n headingContainer.appendChild(tooltipEl);\n tooltipEl.appendChild(typographyEl);\n }\n }\n };\n\n private isHeadingDefined = () =>\n isPropDefined(this.heading) && this.heading !== null;\n\n private hasHeadingAreaContent = (): boolean => {\n return (\n isSlotUsed(this.el, \"heading\") ||\n this.isHeadingDefined() ||\n isSlotUsed(this.el, \"icon\")\n );\n };\n\n render() {\n const { heading, isLoaded, size, theme, truncateHeading } = this;\n\n return (\n <Host\n context-id={this.treeViewId}\n class={{\n [`ic-tree-view-${size}`]: size !== \"medium\",\n [`ic-theme-${theme}`]: theme !== \"inherit\",\n \"ic-tree-view-truncate\": truncateHeading,\n }}\n onKeyDown={this.handleKeyDown}\n aria-label={this.isHeadingDefined() ? heading : null}\n >\n {this.hasHeadingAreaContent() && (\n <div class=\"heading-area-container\">\n {isSlotUsed(this.el, \"icon\") && (\n <div class=\"icon-container\">\n <slot name=\"icon\" />\n </div>\n )}\n <ic-typography\n variant=\"subtitle-large\"\n class={{\n \"tree-view-header\": true,\n \"with-padding\": this.truncateHeading && !isLoaded,\n }}\n >\n {isSlotUsed(this.el, \"heading\") ? (\n <slot name=\"heading\" />\n ) : (\n heading\n )}\n </ic-typography>\n </div>\n )}\n\n <slot></slot>\n </Host>\n );\n }\n}\n"],"version":3}
|
1
|
+
{"file":"ic-tree-view.js","mappings":"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","names":[],"sources":["src/components/ic-tree-view/ic-tree-view.css?tag=ic-tree-view&encapsulation=shadow","src/components/ic-tree-view/ic-tree-view.tsx"],"sourcesContent":["/**\n* @prop --tree-view-width: Width of the tree view\n*/\n\n:host {\n display: block;\n width: var(--tree-view-width, 100%);\n background-color: var(--ic-tree-view-background);\n}\n\n:host .heading-area-container {\n border-bottom: var(--ic-space-1px) solid var(--ic-tree-view-divider);\n display: flex;\n align-items: center;\n min-height: calc(\n var(--ic-space-xl) + var(--ic-space-xs) - var(--ic-space-1px)\n );\n padding: 0 var(--ic-space-xs);\n\n --ic-typography-color: var(--ic-tree-view-text);\n}\n\n:host(.ic-tree-view-small) .heading-area-container {\n min-height: calc(var(--ic-space-xl) - var(--ic-space-1px));\n}\n\n:host(.ic-tree-view-large) .heading-area-container {\n min-height: calc(var(--ic-space-xxl) - var(--ic-space-1px));\n}\n\n:host(.ic-tree-view-truncate) .heading-area-container {\n height: calc(var(--ic-space-xl) + var(--ic-space-xs) - var(--ic-space-1px));\n}\n\n:host(.ic-tree-view-truncate.ic-tree-view-small) .heading-area-container {\n height: calc(var(--ic-space-xl) - var(--ic-space-1px));\n}\n\n:host(.ic-tree-view-truncate.ic-tree-view-large) .heading-area-container {\n height: calc(var(--ic-space-xxl) - var(--ic-space-1px));\n}\n\n.icon-container {\n width: var(--ic-space-lg);\n min-width: var(--ic-space-lg);\n height: var(--ic-space-lg);\n margin: 0 var(--ic-space-xs) 0 0;\n}\n\n:host(.ic-tree-view-small) .icon-container {\n margin: 0 var(--ic-space-xxs) 0 0;\n}\n\n.ic-text-overflow {\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n}\n\n.ic-tooltip-overflow {\n overflow: hidden;\n}\n\n/* Ensures truncation works - accounts for text width increase as component hydrates */\n.tree-view-header.with-padding {\n padding-right: var(--ic-space-xs);\n}\n\n.tree-items-container-hidden {\n visibility: hidden;\n}\n\n::slotted([slot=\"icon\"]) {\n fill: var(--ic-tree-view-icon);\n}\n\n/** High Contrast **/\n@media (forced-colors: active) {\n ::slotted([slot=\"icon\"]) {\n fill: currentcolor;\n }\n}\n","import {\n Component,\n h,\n Prop,\n Element,\n Host,\n Watch,\n State,\n Listen,\n} from \"@stencil/core\";\nimport { IcSizes, IcThemeMode } from \"../../utils/types\";\nimport {\n checkResizeObserver,\n DEVICE_SIZES,\n getCurrentDeviceSize,\n isPropDefined,\n isSlotUsed,\n renderDynamicChildSlots,\n} from \"../../utils/helpers\";\nimport { IcTreeItemOptions } from \"./ic-tree-view.types\";\n\nlet treeViewIds = 0;\n\n/**\n * @slot heading - Content is set as the tree view heading.\n * @slot icon - Content is placed to the left of the heading.\n */\n\n@Component({\n tag: \"ic-tree-view\",\n styleUrl: \"ic-tree-view.css\",\n shadow: true,\n})\nexport class TreeView {\n private treeViewId = `ic-tree-view-${treeViewIds++}`;\n private treeItemTag = \"IC-TREE-ITEM\";\n private hostMutationObserver: MutationObserver = null;\n private isLoaded = false;\n private resizeObserver: ResizeObserver | null = null;\n private TOOLTIP = \"ic-tooltip\";\n\n private previousTruncateHeading: boolean;\n private previousTruncateTreeItems: boolean;\n\n @Element() el: HTMLIcTreeViewElement;\n\n @State() smallDevice: boolean = false;\n @Watch(\"smallDevice\")\n watchSmallDeviceHandler(): void {\n if (this.smallDevice) {\n this.previousTruncateHeading = this.truncateHeading;\n this.previousTruncateTreeItems = this.truncateTreeItems;\n this.removeTruncation();\n } else {\n this.truncateHeading = this.previousTruncateHeading;\n this.truncateTreeItems = this.previousTruncateTreeItems;\n }\n }\n\n @State() treeItems: HTMLIcTreeItemElement[];\n\n /**\n * If `true`, tree items will have inset focus.\n */\n @Prop() focusInset?: boolean = false;\n @Watch(\"focusInset\")\n watchFocusInsetHandler(): void {\n this.treeItems.forEach((treeItem) => {\n treeItem.focusInset = this.focusInset;\n });\n }\n\n /**\n * The heading of the tree view.\n */\n @Prop() heading?: string = \"\";\n\n /**\n * The size of the tree view.\n */\n @Prop() size?: IcSizes = \"medium\";\n @Watch(\"size\")\n watchSizeHandler(): void {\n this.treeItems.forEach((treeItem) => {\n treeItem.size = this.size;\n });\n }\n\n /**\n * Sets the theme color to the dark or light theme color. \"inherit\" will set the color based on the system settings or ic-theme component.\n */\n @Prop() theme?: IcThemeMode = \"inherit\";\n @Watch(\"theme\")\n watchThemeHandler(): void {\n this.treeItems.forEach((treeItem) => {\n treeItem.theme = this.theme;\n });\n }\n\n /**\n * The content within the tree view tree items. This will take precedence over slotted content.\n * */\n @Prop() treeItemData: IcTreeItemOptions[] = [];\n @Watch(\"treeItemData\")\n watchTreeItemOptionsHandler(): void {\n this.setTreeItems();\n }\n\n /**\n * If `true`, the tree view heading will be truncated instead of text wrapping.\n * When used on small devices, this prop will be overridden and headings will be set to text-wrap.\n */\n @Prop({ mutable: true }) truncateHeading?: boolean = false;\n\n /**\n * If `true`, tree items will be truncated, unless they are individually overridden.\n * When used on small devices, this prop will be overridden and tree-items will be set to text-wrap.\n */\n @Prop({ mutable: true }) truncateTreeItems?: boolean = false;\n @Watch(\"truncateTreeItems\")\n watchTruncateTreeItemsHandler(): void {\n this.treeItems.forEach((treeItem) => {\n if (this.smallDevice) {\n treeItem.previousTruncateTreeItem = treeItem.truncateTreeItem;\n treeItem.truncateTreeItem = this.truncateTreeItems;\n } else {\n treeItem.truncateTreeItem = treeItem.previousTruncateTreeItem;\n }\n });\n }\n\n disconnectedCallback(): void {\n this.el?.removeEventListener(\"slotchange\", this.setTreeItems);\n\n this.hostMutationObserver?.disconnect();\n this.resizeObserver?.disconnect();\n }\n componentWillLoad(): void {\n this.setTreeItems();\n\n this.previousTruncateHeading = this.truncateHeading;\n this.previousTruncateTreeItems = this.truncateTreeItems;\n\n checkResizeObserver(this.runResizeObserver);\n\n this.watchSizeHandler();\n this.watchFocusInsetHandler();\n this.watchThemeHandler();\n this.treeItems.forEach((treeItem) => {\n if (treeItem.truncateTreeItem === undefined) {\n treeItem.truncateTreeItem = this.truncateTreeItems;\n }\n });\n }\n\n componentDidRender(): void {\n this.truncateHeading\n ? this.truncateTreeViewHeading()\n : this.removeHeadingTruncation();\n }\n\n componentDidLoad(): void {\n this.addSlotChangeListener();\n\n this.hostMutationObserver = new MutationObserver((mutationList) =>\n renderDynamicChildSlots(mutationList, \"icon\", this)\n );\n this.hostMutationObserver.observe(this.el, {\n childList: true,\n });\n\n this.isLoaded = true;\n }\n\n @Listen(\"icTreeItemSelected\")\n handleTreeItemSelected(event: CustomEvent): void {\n this.treeItems.forEach((treeItem) => {\n if (treeItem.selected && treeItem.id !== event.detail.id) {\n treeItem.selected = false;\n }\n });\n }\n\n private runResizeObserver = () => {\n this.resizeObserver = new ResizeObserver(() => {\n const isSmallDevice = getCurrentDeviceSize() <= DEVICE_SIZES.S;\n if (this.smallDevice !== isSmallDevice) this.smallDevice = isSmallDevice;\n });\n\n this.resizeObserver.observe(document.body);\n };\n\n private removeTruncation = (): void => {\n this.truncateHeading = undefined;\n this.truncateTreeItems = undefined;\n };\n\n private handleKeyDown = (event: KeyboardEvent): void => {\n const focussedChild = this.treeItems.indexOf(\n this.treeItems.filter((el) => el === document.activeElement)[0]\n );\n const expanded = this.treeItems[focussedChild]?.expanded;\n switch (event.key) {\n case \"ArrowDown\":\n this.treeItems[\n this.getNextItemToSelect(focussedChild, true)\n ].setFocus();\n if (focussedChild !== this.treeItems.length - 1) {\n event.preventDefault();\n }\n break;\n case \"ArrowUp\":\n this.treeItems[\n this.getNextItemToSelect(focussedChild, false)\n ].setFocus();\n if (focussedChild !== 0) {\n event.preventDefault();\n }\n break;\n case \"ArrowRight\":\n if (this.treeItems[focussedChild].isParent && !expanded) {\n this.treeItems[focussedChild].expanded = true;\n this.treeItems[focussedChild].hasParentExpanded = true;\n this.treeItems[focussedChild].updateAriaLabel();\n } else if (this.treeItems[focussedChild].isParent && expanded) {\n (\n this.treeItems[focussedChild].children[0] as HTMLIcTreeItemElement\n ).setFocus();\n }\n event.preventDefault();\n break;\n case \"ArrowLeft\":\n if (this.treeItems[focussedChild].isParent && expanded) {\n this.treeItems[focussedChild].expanded = false;\n this.treeItems[focussedChild].hasParentExpanded = false;\n this.treeItems[focussedChild].updateAriaLabel();\n } else if (\n this.treeItems[focussedChild].parentElement.tagName ===\n this.treeItemTag\n ) {\n (\n this.treeItems[focussedChild].parentElement as HTMLIcTreeItemElement\n ).setFocus();\n }\n event.preventDefault();\n break;\n }\n };\n\n private getNextItemToSelect = (\n currentItem: number,\n movingDown: boolean\n ): number => {\n const numItems = this.treeItems.length - 1;\n\n if (currentItem < 1) {\n currentItem = 0;\n }\n\n let nextItem = movingDown ? currentItem + 1 : currentItem - 1;\n if (nextItem < 0) {\n nextItem = 0;\n } else if (nextItem > numItems) {\n nextItem = numItems;\n }\n\n const maxAttempts = numItems + 1;\n let attempts = 0;\n\n while (attempts < maxAttempts) {\n if (nextItem < 0 || nextItem > numItems) {\n return currentItem;\n }\n\n if (\n !this.treeItems[nextItem].disabled &&\n (this.treeItems[nextItem].parentElement.tagName !== this.treeItemTag ||\n (this.treeItems[nextItem].parentElement as HTMLIcTreeItemElement)\n .expanded)\n ) {\n return nextItem;\n }\n\n if (nextItem === numItems && this.treeItems[nextItem].disabled) {\n return currentItem;\n }\n\n nextItem = movingDown ? nextItem + 1 : nextItem - 1;\n attempts++;\n }\n\n return currentItem;\n };\n\n private linkTreeItems = () => {\n this.treeItems.forEach((treeItem) => {\n treeItem.setAttribute(\"context-id\", this.treeViewId);\n });\n };\n\n private setTreeItems = () => {\n this.treeItems = this.getAllTreeItems(this.el as HTMLElement);\n\n this.linkTreeItems();\n };\n\n private getAllTreeItems(element: HTMLElement): HTMLIcTreeItemElement[] {\n const treeItems: HTMLIcTreeItemElement[] = [];\n\n const collectTreeItemsFromSlottedContent = (el: HTMLElement) => {\n Array.from(el.children).forEach((child) => {\n if (child.tagName === this.treeItemTag) {\n treeItems.push(child as HTMLIcTreeItemElement);\n }\n\n collectTreeItemsFromSlottedContent(child as HTMLElement);\n });\n };\n\n const collectTreeItemsFromData = (\n items: IcTreeItemOptions[],\n parentElement: HTMLElement\n ) => {\n Array.from(parentElement.children).forEach((child) => {\n if (child.tagName === this.treeItemTag) {\n parentElement.removeChild(child);\n }\n });\n\n items.forEach((item) => {\n const treeItem = document.createElement(\n this.treeItemTag\n ) as HTMLIcTreeItemElement;\n const { children, icon, ...props } = item;\n Object.assign(treeItem, props);\n\n if (icon) {\n const iconSlot = document.createElement(\"div\");\n iconSlot.setAttribute(\"slot\", \"icon\");\n iconSlot.innerHTML = icon;\n treeItem.appendChild(iconSlot);\n }\n\n parentElement.appendChild(treeItem);\n treeItems.push(treeItem);\n\n if (children && children.length > 0) {\n collectTreeItemsFromData(children, treeItem);\n }\n });\n };\n\n if (this.treeItemData.length > 0) {\n collectTreeItemsFromData(this.treeItemData, element);\n } else {\n collectTreeItemsFromSlottedContent(element);\n }\n\n return treeItems;\n }\n\n private addSlotChangeListener = () => {\n this.el.addEventListener(\"slotchange\", this.setTreeItems);\n };\n\n private truncateTreeViewHeading = () => {\n const typographyEl: HTMLIcTypographyElement =\n this.el.shadowRoot.querySelector(\".tree-view-header\");\n const tooltip = typographyEl?.closest(this.TOOLTIP);\n const headingContainer: HTMLElement = this.el.shadowRoot.querySelector(\n \".heading-area-container\"\n );\n\n if (typographyEl?.scrollHeight > headingContainer?.clientHeight) {\n typographyEl.classList.add(\"ic-text-overflow\");\n\n if (!tooltip) {\n const tooltipEl = document.createElement(\"ic-tooltip\");\n tooltipEl.setAttribute(\"target\", this.el.id);\n tooltipEl.setAttribute(\"label\", typographyEl.textContent);\n tooltipEl.classList.add(\"ic-tooltip-overflow\");\n tooltipEl.setAttribute(\"placement\", \"right\");\n headingContainer.appendChild(tooltipEl);\n tooltipEl.appendChild(typographyEl);\n }\n }\n };\n\n private removeHeadingTruncation = () => {\n const typographyEl: HTMLIcTypographyElement =\n this.el.shadowRoot.querySelector(\".tree-view-header\");\n const tooltipEl: HTMLIcTooltipElement = typographyEl?.closest(this.TOOLTIP);\n\n if (tooltipEl) {\n typographyEl.classList.remove(\"ic-text-overflow\");\n this.el.shadowRoot\n .querySelector(\".heading-area-container\")\n .replaceChild(typographyEl, tooltipEl);\n }\n };\n\n private isHeadingDefined = () =>\n isPropDefined(this.heading) && this.heading !== null;\n\n private hasHeadingAreaContent = (): boolean => {\n return (\n isSlotUsed(this.el, \"heading\") ||\n this.isHeadingDefined() ||\n isSlotUsed(this.el, \"icon\")\n );\n };\n\n render() {\n const { heading, isLoaded, size, theme, truncateHeading } = this;\n\n return (\n <Host\n context-id={this.treeViewId}\n class={{\n [`ic-tree-view-${size}`]: size !== \"medium\",\n [`ic-theme-${theme}`]: theme !== \"inherit\",\n \"ic-tree-view-truncate\": truncateHeading,\n }}\n onKeyDown={this.handleKeyDown}\n aria-label={this.isHeadingDefined() ? heading : null}\n >\n {this.hasHeadingAreaContent() && (\n <div class=\"heading-area-container\">\n {isSlotUsed(this.el, \"icon\") && (\n <div class=\"icon-container\">\n <slot name=\"icon\" />\n </div>\n )}\n <ic-typography\n variant=\"subtitle-large\"\n class={{\n \"tree-view-header\": true,\n \"with-padding\": this.truncateHeading && !isLoaded,\n }}\n >\n {isSlotUsed(this.el, \"heading\") ? (\n <slot name=\"heading\" />\n ) : (\n heading\n )}\n </ic-typography>\n </div>\n )}\n\n <slot></slot>\n </Host>\n );\n }\n}\n"],"version":3}
|