@infineon/infineon-design-system-stencil 33.6.0--canary.1869.b1674220449fed92bf0dee5aead2bd511f2c78f1.0 → 33.6.0--canary.1869.7438a96be80961b83f2346f57d219844afbd5c18.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/dist/cjs/ifx-tree-view-item.cjs.entry.js +67 -11
- package/dist/cjs/ifx-tree-view-item.cjs.entry.js.map +1 -1
- package/dist/collection/components/tree-view/tree-view-item.js +76 -14
- package/dist/collection/components/tree-view/tree-view-item.js.map +1 -1
- package/dist/collection/components/tree-view/tree-view.stories.js +26 -5
- package/dist/collection/components/tree-view/tree-view.stories.js.map +1 -1
- package/dist/components/ifx-tree-view-item.js +67 -11
- package/dist/components/ifx-tree-view-item.js.map +1 -1
- package/dist/esm/ifx-tree-view-item.entry.js +67 -11
- package/dist/esm/ifx-tree-view-item.entry.js.map +1 -1
- package/dist/infineon-design-system-stencil/infineon-design-system-stencil.esm.js +1 -1
- package/dist/infineon-design-system-stencil/p-09b12ecd.entry.js +2 -0
- package/dist/infineon-design-system-stencil/p-09b12ecd.entry.js.map +1 -0
- package/dist/types/components/tree-view/tree-view-item.d.ts +12 -4
- package/dist/types/components.d.ts +4 -2
- package/package.json +1 -1
- package/dist/infineon-design-system-stencil/p-d5c7d113.entry.js +0 -2
- package/dist/infineon-design-system-stencil/p-d5c7d113.entry.js.map +0 -1
@@ -155,6 +155,7 @@ const TreeViewItem = class {
|
|
155
155
|
if (this.shouldExpandFromParent()) {
|
156
156
|
this.expandAllDescendants();
|
157
157
|
}
|
158
|
+
this.host['__stencil_instance'] = this;
|
158
159
|
}
|
159
160
|
shouldExpandFromParent() {
|
160
161
|
let parent = this.host.parentElement;
|
@@ -228,12 +229,38 @@ const TreeViewItem = class {
|
|
228
229
|
setupEventListeners() {
|
229
230
|
this.host.addEventListener('internal-check-state-change', this.handleStateChange);
|
230
231
|
}
|
231
|
-
async updateCheckState(checked) {
|
232
|
+
async updateCheckState(checked, fromParent = false) {
|
232
233
|
if (this.disabled)
|
233
234
|
return;
|
234
|
-
|
235
|
-
|
236
|
-
|
235
|
+
if (!fromParent && this.hasChildren) {
|
236
|
+
const affected = this.collectDescendantStates(checked);
|
237
|
+
this.setNodeState({ isChecked: checked, partialChecked: false }, false);
|
238
|
+
await this.updateChildrenSilently(checked);
|
239
|
+
this.ifxTreeViewItemCheckChange.emit({
|
240
|
+
checked,
|
241
|
+
indeterminate: false,
|
242
|
+
affectedChildItems: affected,
|
243
|
+
});
|
244
|
+
this.updateParentState();
|
245
|
+
}
|
246
|
+
else if (fromParent) {
|
247
|
+
this.setNodeState({ isChecked: checked, partialChecked: false }, false);
|
248
|
+
}
|
249
|
+
else {
|
250
|
+
this.setNodeState({ isChecked: checked, partialChecked: false });
|
251
|
+
await this.updateChildrenState(checked);
|
252
|
+
this.updateParentState();
|
253
|
+
}
|
254
|
+
}
|
255
|
+
async updateChildrenSilently(checked) {
|
256
|
+
const children = this.findChildren();
|
257
|
+
for (const child of children) {
|
258
|
+
const childInstance = child['__stencil_instance'];
|
259
|
+
if (childInstance) {
|
260
|
+
childInstance.setNodeState({ isChecked: checked, partialChecked: false }, false);
|
261
|
+
await childInstance.updateChildrenSilently(checked);
|
262
|
+
}
|
263
|
+
}
|
237
264
|
}
|
238
265
|
handleExpandedChange(newValue) {
|
239
266
|
this.ifxTreeViewItemExpandChange.emit(newValue);
|
@@ -241,13 +268,42 @@ const TreeViewItem = class {
|
|
241
268
|
handleDisableItemChange(newValue) {
|
242
269
|
this.ifxTreeViewItemDisableChange.emit(newValue);
|
243
270
|
}
|
244
|
-
setNodeState(state) {
|
271
|
+
setNodeState(state, emitEvent = true) {
|
245
272
|
this.isChecked = state.isChecked;
|
246
273
|
this.partialChecked = state.partialChecked;
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
274
|
+
if (emitEvent) {
|
275
|
+
this.ifxTreeViewItemCheckChange.emit({
|
276
|
+
checked: this.isChecked,
|
277
|
+
indeterminate: this.partialChecked,
|
278
|
+
});
|
279
|
+
}
|
280
|
+
}
|
281
|
+
collectDescendantStates(checked) {
|
282
|
+
const descendants = [];
|
283
|
+
const collect = (el) => {
|
284
|
+
var _a, _b;
|
285
|
+
let instance = null;
|
286
|
+
if (el === this.host) {
|
287
|
+
instance = this;
|
288
|
+
}
|
289
|
+
else if (el['__stencil_instance']) {
|
290
|
+
instance = el['__stencil_instance'];
|
291
|
+
}
|
292
|
+
const label = (_b = (_a = instance === null || instance === void 0 ? void 0 : instance.label) !== null && _a !== void 0 ? _a : el.label) !== null && _b !== void 0 ? _b : '';
|
293
|
+
descendants.push({
|
294
|
+
label,
|
295
|
+
checked,
|
296
|
+
indeterminate: false,
|
297
|
+
});
|
298
|
+
Array.from(el.children)
|
299
|
+
.forEach(child => {
|
300
|
+
if (child.tagName === 'IFX-TREE-VIEW-ITEM') {
|
301
|
+
collect(child);
|
302
|
+
}
|
303
|
+
});
|
304
|
+
};
|
305
|
+
collect(this.host);
|
306
|
+
return descendants;
|
251
307
|
}
|
252
308
|
async updateChildrenState(checked) {
|
253
309
|
const children = this.findChildren();
|
@@ -294,12 +350,12 @@ const TreeViewItem = class {
|
|
294
350
|
};
|
295
351
|
}
|
296
352
|
render() {
|
297
|
-
return (index.h("div", { key: '
|
353
|
+
return (index.h("div", { key: 'a626535eaa7807016da9b015daecc1c4ecba4283', class: {
|
298
354
|
'tree-item': true,
|
299
355
|
'tree-item--expanded': this.isExpanded,
|
300
356
|
'tree-item--has-children': this.hasChildren,
|
301
357
|
'tree-item--disabled': this.disabled,
|
302
|
-
}, role: "treeitem", "aria-expanded": this.isExpanded ? 'true' : 'false', "data-level": this.level, "aria-disabled": this.disabled ? 'true' : undefined, "aria-label": this.ariaLabel }, index.h("div", { key: '
|
358
|
+
}, role: "treeitem", "aria-expanded": this.isExpanded ? 'true' : 'false', "data-level": this.level, "aria-disabled": this.disabled ? 'true' : undefined, "aria-label": this.ariaLabel }, index.h("div", { key: 'e6e9bf260e0c1f5584826189ae44de0abbeed4e0', class: "tree-item__content" }, this.renderCheckbox(), this.renderHeader()), this.isExpanded && index.h("div", { key: 'e24cad37fc29633023d9e2b7216c2281056fc76e', class: "tree-item__children" }, index.h("slot", { key: '65d7afa55a28667bed348cafd784636256cd23d5' }))));
|
303
359
|
}
|
304
360
|
renderHeader() {
|
305
361
|
return (index.h("div", { class: "tree-item__header", style: { paddingLeft: `${this.level * 24 + 10}px` }, onClick: this.handleHeaderClick, tabIndex: -1, "aria-disabled": this.disabled ? 'true' : undefined }, this.renderControls()));
|
@@ -1 +1 @@
|
|
1
|
-
{"file":"ifx-tree-view-item.entry.cjs.js","mappings":"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","names":["h","Fragment"],"sources":["src/components/tree-view/tree-view-item.scss?tag=ifx-tree-view-item&encapsulation=shadow","src/components/tree-view/tree-view-item.tsx"],"sourcesContent":["@use \"~@infineon/design-system-tokens/dist/tokens\";\n\n.tree-item {\n position: relative;\n cursor: pointer;\n list-style: none;\n\n &.tree-item--expanded {\n position: relative;\n }\n\n &.tree-item--has-children {\n position: relative;\n\n .tree-item__header > .tree-item__chevron-container {\n display: flex;\n }\n\n &.tree-item--expanded {\n .tree-item__header > .tree-item__chevron-container::after {\n display: block;\n }\n }\n }\n\n &--disabled {\n cursor: not-allowed;\n pointer-events: none;\n color: tokens.$ifxColorEngineering300;\n }\n\n &__content {\n display: flex;\n flex-direction: row;\n\n &:hover {\n .tree-item__checkbox-container,\n .tree-item__header {\n background-color: tokens.$ifxColorEngineering100;\n }\n }\n }\n\n &__checkbox-container {\n position: sticky;\n left: 0;\n z-index: 10;\n padding: tokens.$ifxSpace50;\n background-color: tokens.$ifxColorBaseWhite;\n }\n\n &__header {\n flex-grow: 1;\n display: flex;\n align-items: center;\n white-space: nowrap;\n height: tokens.$ifxSize250;\n padding-top: tokens.$ifxSpace50;\n padding-right: tokens.$ifxSpace200;\n padding-bottom: tokens.$ifxSpace50;\n padding-left: tokens.$ifxSpace100;\n }\n\n &__chevron-container {\n display: none;\n align-items: center;\n margin-right: tokens.$ifxSpace100;\n height: tokens.$ifxSize250;\n\n &::after {\n --height-line-start: 28px;\n\n display: none;\n content: '';\n position: absolute;\n z-index: 1;\n top: var(--height-line-start);\n left: auto;\n margin-left: tokens.$ifxSpace100;\n width: tokens.$ifxSize12;\n height: calc(100% - var(--height-line-start));\n background-color: tokens.$ifxColorEngineering200;\n\n .tree-item--disabled & {\n color: tokens.$ifxColorEngineering200;\n }\n }\n }\n\n &__chevron {\n &.chevron-down {\n transform: rotate(90deg);\n }\n\n &.chevron-right {\n transform: rotate(0);\n }\n }\n\n &__label-icon-container {\n display: flex;\n align-items: center;\n\n &:focus {\n outline: none;\n }\n\n &:focus-visible {\n outline: 2px solid tokens.$ifxColorOcean500;\n outline-offset: 2px;\n border-radius: tokens.$ifxBorderRadius12;\n }\n }\n\n &__icon-container {\n position: relative;\n width: tokens.$ifxSize200;\n height: tokens.$ifxSize200;\n\n ifx-icon {\n position: absolute;\n left: 0;\n top: 0;\n opacity: 1;\n transition: opacity 0.2s ease-in-out;\n\n &.icon--hidden {\n opacity: 0;\n }\n }\n }\n\n &__label {\n padding-left: tokens.$ifxSpace100;\n }\n\n &__children {\n display: none;\n\n .tree-item[aria-expanded=\"true\"] > & {\n display: block;\n }\n }\n}\n\n","import { Component, h, Prop, State, Element, Fragment, Event, EventEmitter, Watch } from '@stencil/core';\n\ninterface TreeState {\n isChecked: boolean;\n partialChecked: boolean;\n}\n\ntype HTMLIfxTreeViewItemElement = HTMLElement & { componentOnReady: () => Promise<unknown> };\n\n@Component({\n tag: 'ifx-tree-view-item',\n styleUrl: 'tree-view-item.scss',\n shadow: true,\n})\nexport class TreeViewItem {\n @Element() host: HTMLElement;\n @Prop() label: string;\n @Prop({ reflect: true, mutable: true }) expanded: boolean = false;\n @Prop() initiallyExpanded: boolean = false;\n @Prop() disableItem: boolean = false;\n @Prop() ariaLabel: string | null;\n\n @Event() ifxTreeViewItemExpandChange: EventEmitter<boolean>;\n @Event() ifxTreeViewItemCheckChange: EventEmitter<{ checked: boolean; indeterminate: boolean }>;\n @Event() ifxTreeViewItemDisableChange: EventEmitter<boolean>;\n\n @State() private hasChildren: boolean = false;\n @State() private isChecked: boolean = false;\n @State() private partialChecked: boolean = false;\n @State() private level: number = 0;\n @State() private disableAllItems: boolean = false;\n @State() private expandAllItems: boolean = false;\n\n private get disabled() {\n return this.disableAllItems || this.disableItem;\n }\n\n private get isExpanded() {\n return this.expandAllItems || this.expanded;\n }\n\n private findChildren = () => Array.from(this.host.children)\n .filter((child): child is HTMLElement =>\n child instanceof HTMLElement && child.tagName === 'IFX-TREE-VIEW-ITEM'\n );\n\n private calculateNodeLevel = (): number => {\n let level = 0, parent = this.host.parentElement;\n while (parent) {\n if (parent.tagName === 'IFX-TREE-VIEW-ITEM') level++;\n parent = parent.parentElement;\n }\n return level;\n };\n\n componentWillLoad() {\n this.initializeNode();\n this.setupEventListeners();\n }\n\n componentDidLoad() {\n this.observeDisableAllItems();\n this.observeExpandAllItems();\n if (this.shouldExpandFromParent()) {\n this.expandAllDescendants();\n }\n }\n\n private shouldExpandFromParent(): boolean {\n let parent = this.host.parentElement;\n while (parent) {\n if (\n parent.tagName === 'IFX-TREE-VIEW' &&\n (parent.hasAttribute('expand-all-items') || parent.hasAttribute('data-expand-all-items'))\n ) {\n return true;\n }\n parent = parent.parentElement;\n }\n return false;\n }\n\n private expandAllDescendants() {\n this.expanded = true;\n const children = this.findChildren();\n for (const child of children) {\n if (typeof (child as any).expanded !== 'undefined') {\n (child as any).expanded = true;\n }\n if (typeof (child as any).expandAllDescendants === 'function') {\n (child as any).expandAllDescendants();\n }\n }\n }\n\n private observeDisableAllItems() {\n let parent = this.host.parentElement;\n while (parent) {\n if (parent.tagName === 'IFX-TREE-VIEW') {\n const observer = new MutationObserver(mutations => {\n for (const mutation of mutations) {\n if (\n mutation.type === 'attributes' &&\n mutation.attributeName === 'disable-all-items'\n ) {\n const disableAll = (parent as any).disableAllItems;\n this.disableAllItems = !!disableAll || parent.hasAttribute('disable-all-items');\n }\n }\n });\n observer.observe(parent, { attributes: true });\n const disableAll = (parent as any).disableAllItems;\n this.disableAllItems = !!disableAll || parent.hasAttribute('disable-all-items');\n break;\n }\n parent = parent.parentElement;\n }\n }\n\n private observeExpandAllItems() {\n let parent = this.host.parentElement;\n while (parent) {\n if (parent.tagName === 'IFX-TREE-VIEW' || parent.hasAttribute('data-expand-all-items')) {\n const observer = new MutationObserver(mutations => {\n for (const mutation of mutations) {\n if (\n mutation.type === 'attributes' &&\n mutation.attributeName === 'data-expand-all-items'\n ) {\n this.expandAllItems = parent.hasAttribute('data-expand-all-items');\n }\n }\n });\n observer.observe(parent, { attributes: true });\n this.expandAllItems = parent.hasAttribute('data-expand-all-items');\n break;\n }\n parent = parent.parentElement;\n }\n }\n\n private initializeNode() {\n this.expanded = this.initiallyExpanded;\n this.hasChildren = this.findChildren().length > 0;\n this.level = this.calculateNodeLevel();\n this.host.setAttribute('data-level', this.level.toString());\n }\n\n private setupEventListeners() {\n this.host.addEventListener('internal-check-state-change', this.handleStateChange);\n }\n\n private handleStateChange = (event: CustomEvent) => {\n if (this.disabled) return;\n event.stopPropagation();\n this.updateCheckState(event.detail.checked);\n };\n\n private handleCheckboxChange = (event: CustomEvent) => {\n if (this.disabled) return;\n this.updateCheckState(event.detail?.checked ?? !this.isChecked);\n };\n\n private handleHeaderClick = ({ target }: MouseEvent) => {\n if (this.disabled) return;\n if (!(target as HTMLElement).closest('.tree-item__checkbox-container, .tree-item__chevron-container')) {\n this.updateCheckState(!this.isChecked);\n }\n };\n\n private async updateCheckState(checked: boolean) {\n if (this.disabled) return;\n this.setNodeState({ isChecked: checked, partialChecked: false });\n await this.updateChildrenState(checked);\n this.updateParentState();\n }\n\n @Watch('expanded')\n handleExpandedChange(newValue: boolean) {\n this.ifxTreeViewItemExpandChange.emit(newValue);\n }\n\n @Watch('disableItem')\n handleDisableItemChange(newValue: boolean) {\n this.ifxTreeViewItemDisableChange.emit(newValue);\n }\n\n private setNodeState(state: TreeState) {\n this.isChecked = state.isChecked;\n this.partialChecked = state.partialChecked;\n this.ifxTreeViewItemCheckChange.emit({\n checked: this.isChecked,\n indeterminate: this.partialChecked,\n });\n }\n\n private async updateChildrenState(checked: boolean) {\n const children = this.findChildren();\n for (const child of children) {\n await (child as HTMLIfxTreeViewItemElement).componentOnReady();\n child.dispatchEvent(new CustomEvent('internal-check-state-change', {\n detail: { checked },\n bubbles: false,\n composed: true\n }));\n }\n }\n\n private findSiblingNodes(parent: HTMLElement): HTMLIfxTreeViewItemElement[] {\n const parentEl = parent.parentElement;\n if (!parentEl) return [];\n return Array.from(\n parentEl.querySelectorAll('ifx-tree-view-item')\n ).map(el => el as HTMLIfxTreeViewItemElement);\n }\n\n private updateParentState() {\n const parent = this.host.parentElement?.closest('ifx-tree-view-item') as HTMLIfxTreeViewItemElement;\n if (!parent) return;\n parent.componentOnReady().then(resolved => {\n const parentNode = resolved as unknown as TreeViewItem;\n if (!parentNode?.updateParentState) return;\n const siblings = this.findSiblingNodes(parent);\n const states = this.calculateSiblingStates(siblings);\n parentNode.setNodeState({\n isChecked: states.allChecked,\n partialChecked: !states.allChecked && states.someChecked\n });\n parentNode.updateParentState();\n });\n }\n\n private calculateSiblingStates(siblings: HTMLIfxTreeViewItemElement[]) {\n return {\n allChecked: siblings.every(sib => (sib as unknown as TreeViewItem).isChecked),\n someChecked: siblings.some(sib => {\n const node = sib as unknown as TreeViewItem;\n return node.isChecked || node.partialChecked;\n })\n };\n }\n\n private toggleExpand = () => {\n if (this.disabled) return;\n this.hasChildren && (this.expanded = !this.expanded);\n };\n\n private handleKeyDown = (event: KeyboardEvent) => {\n\n const allItems = Array.from(\n this.host\n .closest('ifx-tree-view')\n ?.querySelectorAll('ifx-tree-view-item') || []\n );\n\n const visibleItems = allItems.filter(item => {\n let parent = item.parentElement?.closest('ifx-tree-view-item');\n while (parent) {\n const parentCmp = parent as any;\n if (!(parentCmp.expandAllItems || parentCmp.expanded)) {\n return false;\n }\n parent = parent.parentElement?.closest('ifx-tree-view-item');\n }\n return true;\n });\n\n const currentIndex = visibleItems.findIndex(el => el === this.host);\n\n function focusLabelIcon(el: Element | null) {\n (el as HTMLElement | null)?.focus();\n }\n\n switch (event.key) {\n case 'ArrowDown': {\n event.preventDefault();\n let nextIndex = currentIndex + 1;\n while (nextIndex < visibleItems.length) {\n const next = visibleItems[nextIndex] as any;\n if (!next.disabled) {\n focusLabelIcon(next.shadowRoot?.querySelector('.tree-item__label-icon-container'));\n break;\n }\n nextIndex++;\n }\n break;\n }\n case 'ArrowUp': {\n event.preventDefault();\n let prevIndex = currentIndex - 1;\n while (prevIndex >= 0) {\n const prev = visibleItems[prevIndex] as any;\n if (!prev.disabled) {\n focusLabelIcon(prev.shadowRoot?.querySelector('.tree-item__label-icon-container'));\n break;\n }\n prevIndex--;\n }\n break;\n }\n case 'ArrowRight': {\n event.preventDefault();\n if (!this.isExpanded && this.hasChildren) {\n this.expanded = true;\n } else if (this.isExpanded && this.hasChildren) {\n const firstChild = this.host.querySelector('ifx-tree-view-item');\n if (firstChild && !(firstChild as any).disabled) {\n focusLabelIcon((firstChild as HTMLElement).shadowRoot?.querySelector('.tree-item__label-icon-container'));\n }\n }\n break;\n }\n case 'ArrowLeft': {\n event.preventDefault();\n if (this.isExpanded && this.hasChildren) {\n this.expanded = false;\n } else {\n const parent = this.host.parentElement?.closest('ifx-tree-view-item');\n if (parent && !(parent as any).disabled) {\n focusLabelIcon((parent as HTMLElement).shadowRoot?.querySelector('.tree-item__label-icon-container'));\n }\n }\n break;\n }\n case ' ':\n case 'Enter': {\n event.preventDefault();\n this.updateCheckState(!this.isChecked);\n break;\n }\n }\n };\n\n render() {\n return (\n <div\n class={{\n 'tree-item': true,\n 'tree-item--expanded': this.isExpanded,\n 'tree-item--has-children': this.hasChildren,\n 'tree-item--disabled': this.disabled,\n }}\n role=\"treeitem\"\n aria-expanded={this.isExpanded ? 'true' : 'false'}\n data-level={this.level}\n aria-disabled={this.disabled ? 'true' : undefined}\n aria-label={this.ariaLabel}\n >\n <div class=\"tree-item__content\">\n {this.renderCheckbox()}\n {this.renderHeader()}\n </div>\n {this.isExpanded && <div class=\"tree-item__children\"><slot/></div>}\n </div>\n );\n }\n\n private renderHeader() {\n return (\n <div\n class=\"tree-item__header\"\n style={{ paddingLeft: `${this.level * 24 + 10}px` }}\n onClick={this.handleHeaderClick}\n tabIndex={-1}\n aria-disabled={this.disabled ? 'true' : undefined}\n >\n {this.renderControls()}\n </div>\n );\n }\n\n private renderCheckbox() {\n return (\n <div class=\"tree-item__checkbox-container\" onClick={e => e.stopPropagation()}>\n <ifx-checkbox\n size='s'\n checked={this.isChecked}\n indeterminate={this.partialChecked}\n onIfxChange={this.handleCheckboxChange}\n disabled={this.disabled}\n />\n </div>\n );\n }\n\n private renderControls() {\n return [\n this.hasChildren && (\n <div class=\"tree-item__chevron-container\" onClick={this.toggleExpand}>\n <ifx-icon class={`tree-item__chevron ${this.isExpanded ? 'chevron-down' : 'chevron-right'}`}\n icon=\"chevron-right-16\"/>\n <div class=\"tree-item__line\"/>\n </div>\n ),\n <div\n class=\"tree-item__label-icon-container\"\n tabIndex={this.disabled ? -1 : 0}\n onKeyDown={this.handleKeyDown}\n >\n <div class=\"tree-item__icon-container\">\n {\n this.hasChildren ? (\n <Fragment>\n <ifx-icon class={{'icon--hidden': this.isExpanded}} icon=\"folder-16\"/>\n <ifx-icon class={{'icon--hidden': !this.isExpanded}} icon=\"folder-open-16\"/>\n </Fragment>\n ) : (\n <ifx-icon icon=\"file-16\"/>\n )\n }\n </div>\n <span class=\"tree-item__label\">{this.label}</span>\n </div>\n ];\n }\n}\n"],"version":3}
|
1
|
+
{"file":"ifx-tree-view-item.entry.cjs.js","mappings":";;;;;;AAAA,MAAM,eAAe,GAAG,i/DAAi/D,CAAC;AAC1gE,8BAAe,eAAe;;MCmBjB,YAAY;IALzB;;;;;QAQ0C,aAAQ,GAAY,KAAK,CAAC;QAC1D,sBAAiB,GAAY,KAAK,CAAC;QACnC,gBAAW,GAAY,KAAK,CAAC;QAOpB,gBAAW,GAAY,KAAK,CAAC;QAC7B,cAAS,GAAY,KAAK,CAAC;QAC3B,mBAAc,GAAY,KAAK,CAAC;QAChC,UAAK,GAAW,CAAC,CAAC;QAClB,oBAAe,GAAY,KAAK,CAAC;QACjC,mBAAc,GAAY,KAAK,CAAC;QAUzC,iBAAY,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;aACxD,MAAM,CAAC,CAAC,KAAK,KACZ,KAAK,YAAY,WAAW,IAAI,KAAK,CAAC,OAAO,KAAK,oBAAoB,CACvE,CAAC;QAEI,uBAAkB,GAAG;YAC3B,IAAI,KAAK,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC;YAChD,OAAO,MAAM,EAAE;gBACb,IAAI,MAAM,CAAC,OAAO,KAAK,oBAAoB;oBAAE,KAAK,EAAE,CAAC;gBACrD,MAAM,GAAG,MAAM,CAAC,aAAa,CAAC;aAC/B;YACD,OAAO,KAAK,CAAC;SACd,CAAC;QAoGM,sBAAiB,GAAG,CAAC,KAAkB;YAC7C,IAAI,IAAI,CAAC,QAAQ;gBAAE,OAAO;YAC1B,KAAK,CAAC,eAAe,EAAE,CAAC;YACxB,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;SAC7C,CAAC;QAEM,yBAAoB,GAAG,CAAC,KAAkB;;YAChD,IAAI,IAAI,CAAC,QAAQ;gBAAE,OAAO;YAC1B,IAAI,CAAC,gBAAgB,CAAC,MAAA,MAAA,KAAK,CAAC,MAAM,0CAAE,OAAO,mCAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;SACjE,CAAC;QAEM,sBAAiB,GAAG,CAAC,EAAE,MAAM,EAAc;YACjD,IAAI,IAAI,CAAC,QAAQ;gBAAE,OAAO;YAC1B,IAAI,CAAE,MAAsB,CAAC,OAAO,CAAC,+DAA+D,CAAC,EAAE;gBACrG,IAAI,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;aACxC;SACF,CAAC;QAgIM,iBAAY,GAAG;YACrB,IAAI,IAAI,CAAC,QAAQ;gBAAE,OAAO;YAC1B,IAAI,CAAC,WAAW,KAAK,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;SACtD,CAAC;QAEM,kBAAa,GAAG,CAAC,KAAoB;;YAE3C,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CACzB,CAAA,MAAA,IAAI,CAAC,IAAI;iBACN,OAAO,CAAC,eAAe,CAAC,0CACvB,gBAAgB,CAAC,oBAAoB,CAAC,KAAI,EAAE,CACjD,CAAC;YAEF,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI;;gBACvC,IAAI,MAAM,GAAG,MAAA,IAAI,CAAC,aAAa,0CAAE,OAAO,CAAC,oBAAoB,CAAC,CAAC;gBAC/D,OAAO,MAAM,EAAE;oBACb,MAAM,SAAS,GAAG,MAAa,CAAC;oBAChC,IAAI,EAAE,SAAS,CAAC,cAAc,IAAI,SAAS,CAAC,QAAQ,CAAC,EAAE;wBACrD,OAAO,KAAK,CAAC;qBACd;oBACD,MAAM,GAAG,MAAA,MAAM,CAAC,aAAa,0CAAE,OAAO,CAAC,oBAAoB,CAAC,CAAC;iBAC9D;gBACD,OAAO,IAAI,CAAC;aACb,CAAC,CAAC;YAEH,MAAM,YAAY,GAAG,YAAY,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC;YAEpE,SAAS,cAAc,CAAC,EAAkB;gBACvC,EAAyB,aAAzB,EAAE,uBAAF,EAAE,CAAyB,KAAK,EAAE,CAAC;aACrC;YAED,QAAQ,KAAK,CAAC,GAAG;gBACf,KAAK,WAAW,EAAE;oBAChB,KAAK,CAAC,cAAc,EAAE,CAAC;oBACvB,IAAI,SAAS,GAAG,YAAY,GAAG,CAAC,CAAC;oBACjC,OAAO,SAAS,GAAG,YAAY,CAAC,MAAM,EAAE;wBACtC,MAAM,IAAI,GAAG,YAAY,CAAC,SAAS,CAAQ,CAAC;wBAC5C,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;4BAClB,cAAc,CAAC,MAAA,IAAI,CAAC,UAAU,0CAAE,aAAa,CAAC,kCAAkC,CAAC,CAAC,CAAC;4BACnF,MAAM;yBACP;wBACD,SAAS,EAAE,CAAC;qBACb;oBACD,MAAM;iBACP;gBACD,KAAK,SAAS,EAAE;oBACd,KAAK,CAAC,cAAc,EAAE,CAAC;oBACvB,IAAI,SAAS,GAAG,YAAY,GAAG,CAAC,CAAC;oBACjC,OAAO,SAAS,IAAI,CAAC,EAAE;wBACrB,MAAM,IAAI,GAAG,YAAY,CAAC,SAAS,CAAQ,CAAC;wBAC5C,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;4BAClB,cAAc,CAAC,MAAA,IAAI,CAAC,UAAU,0CAAE,aAAa,CAAC,kCAAkC,CAAC,CAAC,CAAC;4BACnF,MAAM;yBACP;wBACD,SAAS,EAAE,CAAC;qBACb;oBACD,MAAM;iBACP;gBACD,KAAK,YAAY,EAAE;oBACjB,KAAK,CAAC,cAAc,EAAE,CAAC;oBACvB,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,WAAW,EAAE;wBACxC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;qBACtB;yBAAM,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,WAAW,EAAE;wBAC9C,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,oBAAoB,CAAC,CAAC;wBACjE,IAAI,UAAU,IAAI,CAAE,UAAkB,CAAC,QAAQ,EAAE;4BAC/C,cAAc,CAAC,MAAC,UAA0B,CAAC,UAAU,0CAAE,aAAa,CAAC,kCAAkC,CAAC,CAAC,CAAC;yBAC3G;qBACF;oBACD,MAAM;iBACP;gBACD,KAAK,WAAW,EAAE;oBAChB,KAAK,CAAC,cAAc,EAAE,CAAC;oBACvB,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,WAAW,EAAE;wBACvC,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;qBACvB;yBAAM;wBACL,MAAM,MAAM,GAAG,MAAA,IAAI,CAAC,IAAI,CAAC,aAAa,0CAAE,OAAO,CAAC,oBAAoB,CAAC,CAAC;wBACtE,IAAI,MAAM,IAAI,CAAE,MAAc,CAAC,QAAQ,EAAE;4BACvC,cAAc,CAAC,MAAC,MAAsB,CAAC,UAAU,0CAAE,aAAa,CAAC,kCAAkC,CAAC,CAAC,CAAC;yBACvG;qBACF;oBACD,MAAM;iBACP;gBACD,KAAK,GAAG,CAAC;gBACT,KAAK,OAAO,EAAE;oBACZ,KAAK,CAAC,cAAc,EAAE,CAAC;oBACvB,IAAI,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;oBACvC,MAAM;iBACP;aACF;SACF,CAAC;KAoFH;IArbC,IAAY,QAAQ;QAClB,OAAO,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,WAAW,CAAC;KACjD;IAED,IAAY,UAAU;QACpB,OAAO,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,QAAQ,CAAC;KAC7C;IAgBD,iBAAiB;QACf,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,IAAI,CAAC,mBAAmB,EAAE,CAAC;KAC5B;IAED,gBAAgB;QACd,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAC9B,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC7B,IAAI,IAAI,CAAC,sBAAsB,EAAE,EAAE;YACjC,IAAI,CAAC,oBAAoB,EAAE,CAAC;SAC7B;QACA,IAAI,CAAC,IAAY,CAAC,oBAAoB,CAAC,GAAG,IAAI,CAAC;KACjD;IAEO,sBAAsB;QAC5B,IAAI,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC;QACrC,OAAO,MAAM,EAAE;YACb,IACE,MAAM,CAAC,OAAO,KAAK,eAAe;iBACjC,MAAM,CAAC,YAAY,CAAC,kBAAkB,CAAC,IAAI,MAAM,CAAC,YAAY,CAAC,uBAAuB,CAAC,CAAC,EACzF;gBACA,OAAO,IAAI,CAAC;aACb;YACD,MAAM,GAAG,MAAM,CAAC,aAAa,CAAC;SAC/B;QACD,OAAO,KAAK,CAAC;KACd;IAEO,oBAAoB;QAC1B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QACrC,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE;YAC5B,IAAI,OAAQ,KAAa,CAAC,QAAQ,KAAK,WAAW,EAAE;gBACjD,KAAa,CAAC,QAAQ,GAAG,IAAI,CAAC;aAChC;YACD,IAAI,OAAQ,KAAa,CAAC,oBAAoB,KAAK,UAAU,EAAE;gBAC5D,KAAa,CAAC,oBAAoB,EAAE,CAAC;aACvC;SACF;KACF;IAEO,sBAAsB;QAC5B,IAAI,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC;QACrC,OAAO,MAAM,EAAE;YACb,IAAI,MAAM,CAAC,OAAO,KAAK,eAAe,EAAE;gBACtC,MAAM,QAAQ,GAAG,IAAI,gBAAgB,CAAC,SAAS;oBAC7C,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE;wBAChC,IACE,QAAQ,CAAC,IAAI,KAAK,YAAY;4BAC9B,QAAQ,CAAC,aAAa,KAAK,mBAAmB,EAC9C;4BACA,MAAM,UAAU,GAAI,MAAc,CAAC,eAAe,CAAC;4BACnD,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC,UAAU,IAAI,MAAM,CAAC,YAAY,CAAC,mBAAmB,CAAC,CAAC;yBACjF;qBACF;iBACF,CAAC,CAAC;gBACH,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC/C,MAAM,UAAU,GAAI,MAAc,CAAC,eAAe,CAAC;gBACnD,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC,UAAU,IAAI,MAAM,CAAC,YAAY,CAAC,mBAAmB,CAAC,CAAC;gBAChF,MAAM;aACP;YACD,MAAM,GAAG,MAAM,CAAC,aAAa,CAAC;SAC/B;KACF;IAEO,qBAAqB;QAC3B,IAAI,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC;QACrC,OAAO,MAAM,EAAE;YACb,IAAI,MAAM,CAAC,OAAO,KAAK,eAAe,IAAI,MAAM,CAAC,YAAY,CAAC,uBAAuB,CAAC,EAAE;gBACtF,MAAM,QAAQ,GAAG,IAAI,gBAAgB,CAAC,SAAS;oBAC7C,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE;wBAChC,IACE,QAAQ,CAAC,IAAI,KAAK,YAAY;4BAC9B,QAAQ,CAAC,aAAa,KAAK,uBAAuB,EAClD;4BACA,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,YAAY,CAAC,uBAAuB,CAAC,CAAC;yBACpE;qBACF;iBACF,CAAC,CAAC;gBACH,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC/C,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,YAAY,CAAC,uBAAuB,CAAC,CAAC;gBACnE,MAAM;aACP;YACD,MAAM,GAAG,MAAM,CAAC,aAAa,CAAC;SAC/B;KACF;IAEO,cAAc;QACpB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC;QACvC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;QAClD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACvC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;KAC7D;IAEO,mBAAmB;QACzB,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,6BAA6B,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;KACnF;IAoBO,MAAM,gBAAgB,CAAC,OAAgB,EAAE,UAAU,GAAG,KAAK;QACjE,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO;QAE1B,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,WAAW,EAAE;YACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC;YACvD,IAAI,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,EAAE,KAAK,CAAC,CAAC;YACxE,MAAM,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC;YAC3C,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC;gBACnC,OAAO;gBACP,aAAa,EAAE,KAAK;gBACpB,kBAAkB,EAAE,QAAQ;aAC7B,CAAC,CAAC;YACH,IAAI,CAAC,iBAAiB,EAAE,CAAC;SAC1B;aAAM,IAAI,UAAU,EAAE;YACrB,IAAI,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,EAAE,KAAK,CAAC,CAAC;SACzE;aAAM;YACL,IAAI,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC,CAAC;YACjE,MAAM,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;YACxC,IAAI,CAAC,iBAAiB,EAAE,CAAC;SAC1B;KACF;IAEO,MAAM,sBAAsB,CAAC,OAAgB;QACnD,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QACrC,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE;YAC5B,MAAM,aAAa,GAAI,KAAa,CAAC,oBAAoB,CAAC,CAAC;YAC3D,IAAI,aAAa,EAAE;gBACjB,aAAa,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,EAAE,KAAK,CAAC,CAAC;gBACjF,MAAM,aAAa,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC;aACrD;SACF;KACF;IAGD,oBAAoB,CAAC,QAAiB;QACpC,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;KACjD;IAGD,uBAAuB,CAAC,QAAiB;QACvC,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;KAClD;IAEO,YAAY,CAAC,KAAgB,EAAE,SAAS,GAAG,IAAI;QACrD,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;QACjC,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,cAAc,CAAC;QAC3C,IAAI,SAAS,EAAE;YACb,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC;gBACnC,OAAO,EAAE,IAAI,CAAC,SAAS;gBACvB,aAAa,EAAE,IAAI,CAAC,cAAc;aACnC,CAAC,CAAC;SACJ;KACF;IAEO,uBAAuB,CAAC,OAAgB;QAC9C,MAAM,WAAW,GAAuE,EAAE,CAAC;QAC3F,MAAM,OAAO,GAAG,CAAC,EAAW;;YAC1B,IAAI,QAAQ,GAAQ,IAAI,CAAC;YACzB,IAAI,EAAE,KAAK,IAAI,CAAC,IAAI,EAAE;gBACpB,QAAQ,GAAG,IAAI,CAAC;aACjB;iBAAM,IAAK,EAAU,CAAC,oBAAoB,CAAC,EAAE;gBAC5C,QAAQ,GAAI,EAAU,CAAC,oBAAoB,CAAC,CAAC;aAC9C;YACD,MAAM,KAAK,GAAG,MAAA,MAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,KAAK,mCAAK,EAAU,CAAC,KAAK,mCAAI,EAAE,CAAC;YACzD,WAAW,CAAC,IAAI,CAAC;gBACf,KAAK;gBACL,OAAO;gBACP,aAAa,EAAE,KAAK;aACrB,CAAC,CAAC;YACH,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC;iBACpB,OAAO,CAAC,KAAK;gBACZ,IAAI,KAAK,CAAC,OAAO,KAAK,oBAAoB,EAAE;oBAC1C,OAAO,CAAC,KAAK,CAAC,CAAC;iBAChB;aACF,CAAC,CAAC;SACN,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnB,OAAO,WAAW,CAAC;KACpB;IAEO,MAAM,mBAAmB,CAAC,OAAgB;QAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QACrC,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE;YAC5B,MAAO,KAAoC,CAAC,gBAAgB,EAAE,CAAC;YAC/D,KAAK,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,6BAA6B,EAAE;gBACjE,MAAM,EAAE,EAAE,OAAO,EAAE;gBACnB,OAAO,EAAE,KAAK;gBACd,QAAQ,EAAE,IAAI;aACf,CAAC,CAAC,CAAC;SACL;KACF;IAEO,gBAAgB,CAAC,MAAmB;QAC1C,MAAM,QAAQ,GAAG,MAAM,CAAC,aAAa,CAAC;QACtC,IAAI,CAAC,QAAQ;YAAE,OAAO,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,IAAI,CACf,QAAQ,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,CAChD,CAAC,GAAG,CAAC,EAAE,IAAI,EAAgC,CAAC,CAAC;KAC/C;IAEO,iBAAiB;;QACvB,MAAM,MAAM,GAAG,MAAA,IAAI,CAAC,IAAI,CAAC,aAAa,0CAAE,OAAO,CAAC,oBAAoB,CAA+B,CAAC;QACpG,IAAI,CAAC,MAAM;YAAE,OAAO;QACpB,MAAM,CAAC,gBAAgB,EAAE,CAAC,IAAI,CAAC,QAAQ;YACrC,MAAM,UAAU,GAAG,QAAmC,CAAC;YACvD,IAAI,EAAC,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,iBAAiB,CAAA;gBAAE,OAAO;YAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;YAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAC;YACrD,UAAU,CAAC,YAAY,CAAC;gBACtB,SAAS,EAAE,MAAM,CAAC,UAAU;gBAC5B,cAAc,EAAE,CAAC,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,WAAW;aACzD,CAAC,CAAC;YACH,UAAU,CAAC,iBAAiB,EAAE,CAAC;SAChC,CAAC,CAAC;KACJ;IAEO,sBAAsB,CAAC,QAAsC;QACnE,OAAO;YACL,UAAU,EAAE,QAAQ,CAAC,KAAK,CAAC,GAAG,IAAK,GAA+B,CAAC,SAAS,CAAC;YAC7E,WAAW,EAAE,QAAQ,CAAC,IAAI,CAAC,GAAG;gBAC5B,MAAM,IAAI,GAAG,GAA8B,CAAC;gBAC5C,OAAO,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,cAAc,CAAC;aAC9C,CAAC;SACH,CAAC;KACH;IA6FD,MAAM;QACJ,QACEA,kEACE,KAAK,EAAE;gBACL,WAAW,EAAE,IAAI;gBACjB,qBAAqB,EAAE,IAAI,CAAC,UAAU;gBACtC,yBAAyB,EAAE,IAAI,CAAC,WAAW;gBAC3C,qBAAqB,EAAE,IAAI,CAAC,QAAQ;aACrC,EACD,IAAI,EAAC,UAAU,mBACA,IAAI,CAAC,UAAU,GAAG,MAAM,GAAG,OAAO,gBACrC,IAAI,CAAC,KAAK,mBACP,IAAI,CAAC,QAAQ,GAAG,MAAM,GAAG,SAAS,gBACrC,IAAI,CAAC,SAAS,IAE1BA,kEAAK,KAAK,EAAC,oBAAoB,IAC5B,IAAI,CAAC,cAAc,EAAE,EACrB,IAAI,CAAC,YAAY,EAAE,CAChB,EACL,IAAI,CAAC,UAAU,IAAIA,kEAAK,KAAK,EAAC,qBAAqB,IAACA,oEAAO,CAAM,CAC9D,EACN;KACH;IAEO,YAAY;QAClB,QACEA,iBACE,KAAK,EAAC,mBAAmB,EACzB,KAAK,EAAE,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EACnD,OAAO,EAAE,IAAI,CAAC,iBAAiB,EAC/B,QAAQ,EAAE,CAAC,CAAC,mBACG,IAAI,CAAC,QAAQ,GAAG,MAAM,GAAG,SAAS,IAEhD,IAAI,CAAC,cAAc,EAAE,CAClB,EACN;KACH;IAEO,cAAc;QACpB,QACEA,iBAAK,KAAK,EAAC,+BAA+B,EAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,eAAe,EAAE,IAC1EA,0BACE,IAAI,EAAC,GAAG,EACR,OAAO,EAAE,IAAI,CAAC,SAAS,EACvB,aAAa,EAAE,IAAI,CAAC,cAAc,EAClC,WAAW,EAAE,IAAI,CAAC,oBAAoB,EACtC,QAAQ,EAAE,IAAI,CAAC,QAAQ,GACvB,CACE,EACN;KACH;IAEO,cAAc;QACpB,OAAO;YACL,IAAI,CAAC,WAAW,KACdA,iBAAK,KAAK,EAAC,8BAA8B,EAAC,OAAO,EAAE,IAAI,CAAC,YAAY,IAClEA,sBAAU,KAAK,EAAE,sBAAsB,IAAI,CAAC,UAAU,GAAG,cAAc,GAAG,eAAe,EAAE,EACjF,IAAI,EAAC,kBAAkB,GAAE,EACnCA,iBAAK,KAAK,EAAC,iBAAiB,GAAE,CAC1B,CACP;YACDA,iBACE,KAAK,EAAC,iCAAiC,EACvC,QAAQ,EAAE,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,EAChC,SAAS,EAAE,IAAI,CAAC,aAAa,IAE7BA,iBAAK,KAAK,EAAC,2BAA2B,IAElC,IAAI,CAAC,WAAW,IACdA,QAACC,cAAQ,QACPD,sBAAU,KAAK,EAAE,EAAC,cAAc,EAAE,IAAI,CAAC,UAAU,EAAC,EAAE,IAAI,EAAC,WAAW,GAAE,EACtEA,sBAAU,KAAK,EAAE,EAAC,cAAc,EAAE,CAAC,IAAI,CAAC,UAAU,EAAC,EAAE,IAAI,EAAC,gBAAgB,GAAE,CACnE,KAEXA,sBAAU,IAAI,EAAC,SAAS,GAAE,CAC3B,CAEC,EACNA,kBAAM,KAAK,EAAC,kBAAkB,IAAE,IAAI,CAAC,KAAK,CAAQ,CAC9C;SACP,CAAC;KACH;;;;;;;;;;;","names":["h","Fragment"],"sources":["src/components/tree-view/tree-view-item.scss?tag=ifx-tree-view-item&encapsulation=shadow","src/components/tree-view/tree-view-item.tsx"],"sourcesContent":["@use \"~@infineon/design-system-tokens/dist/tokens\";\n\n.tree-item {\n position: relative;\n cursor: pointer;\n list-style: none;\n\n &.tree-item--expanded {\n position: relative;\n }\n\n &.tree-item--has-children {\n position: relative;\n\n .tree-item__header > .tree-item__chevron-container {\n display: flex;\n }\n\n &.tree-item--expanded {\n .tree-item__header > .tree-item__chevron-container::after {\n display: block;\n }\n }\n }\n\n &--disabled {\n cursor: not-allowed;\n pointer-events: none;\n color: tokens.$ifxColorEngineering300;\n }\n\n &__content {\n display: flex;\n flex-direction: row;\n\n &:hover {\n .tree-item__checkbox-container,\n .tree-item__header {\n background-color: tokens.$ifxColorEngineering100;\n }\n }\n }\n\n &__checkbox-container {\n position: sticky;\n left: 0;\n z-index: 10;\n padding: tokens.$ifxSpace50;\n background-color: tokens.$ifxColorBaseWhite;\n }\n\n &__header {\n flex-grow: 1;\n display: flex;\n align-items: center;\n white-space: nowrap;\n height: tokens.$ifxSize250;\n padding-top: tokens.$ifxSpace50;\n padding-right: tokens.$ifxSpace200;\n padding-bottom: tokens.$ifxSpace50;\n padding-left: tokens.$ifxSpace100;\n }\n\n &__chevron-container {\n display: none;\n align-items: center;\n margin-right: tokens.$ifxSpace100;\n height: tokens.$ifxSize250;\n\n &::after {\n --height-line-start: 28px;\n\n display: none;\n content: '';\n position: absolute;\n z-index: 1;\n top: var(--height-line-start);\n left: auto;\n margin-left: tokens.$ifxSpace100;\n width: tokens.$ifxSize12;\n height: calc(100% - var(--height-line-start));\n background-color: tokens.$ifxColorEngineering200;\n\n .tree-item--disabled & {\n color: tokens.$ifxColorEngineering200;\n }\n }\n }\n\n &__chevron {\n &.chevron-down {\n transform: rotate(90deg);\n }\n\n &.chevron-right {\n transform: rotate(0);\n }\n }\n\n &__label-icon-container {\n display: flex;\n align-items: center;\n\n &:focus {\n outline: none;\n }\n\n &:focus-visible {\n outline: 2px solid tokens.$ifxColorOcean500;\n outline-offset: 2px;\n border-radius: tokens.$ifxBorderRadius12;\n }\n }\n\n &__icon-container {\n position: relative;\n width: tokens.$ifxSize200;\n height: tokens.$ifxSize200;\n\n ifx-icon {\n position: absolute;\n left: 0;\n top: 0;\n opacity: 1;\n transition: opacity 0.2s ease-in-out;\n\n &.icon--hidden {\n opacity: 0;\n }\n }\n }\n\n &__label {\n padding-left: tokens.$ifxSpace100;\n }\n\n &__children {\n display: none;\n\n .tree-item[aria-expanded=\"true\"] > & {\n display: block;\n }\n }\n}\n\n","import { Component, h, Prop, State, Element, Fragment, Event, EventEmitter, Watch } from '@stencil/core';\n\nexport interface TreeViewCheckChangeEvent {\n checked: boolean;\n indeterminate: boolean;\n affectedChildItems?: Array<{ label: string; checked: boolean; indeterminate: boolean }>;\n}\n\ninterface TreeState {\n isChecked: boolean;\n partialChecked: boolean;\n}\n\ntype HTMLIfxTreeViewItemElement = HTMLElement & { componentOnReady: () => Promise<unknown> };\n\n@Component({\n tag: 'ifx-tree-view-item',\n styleUrl: 'tree-view-item.scss',\n shadow: true,\n})\nexport class TreeViewItem {\n @Element() host: HTMLElement;\n @Prop() label: string;\n @Prop({ reflect: true, mutable: true }) expanded: boolean = false;\n @Prop() initiallyExpanded: boolean = false;\n @Prop() disableItem: boolean = false;\n @Prop() ariaLabel: string | null;\n\n @Event() ifxTreeViewItemExpandChange: EventEmitter<boolean>;\n @Event() ifxTreeViewItemCheckChange: EventEmitter<TreeViewCheckChangeEvent>;\n @Event() ifxTreeViewItemDisableChange: EventEmitter<boolean>;\n\n @State() private hasChildren: boolean = false;\n @State() private isChecked: boolean = false;\n @State() private partialChecked: boolean = false;\n @State() private level: number = 0;\n @State() private disableAllItems: boolean = false;\n @State() private expandAllItems: boolean = false;\n\n private get disabled() {\n return this.disableAllItems || this.disableItem;\n }\n\n private get isExpanded() {\n return this.expandAllItems || this.expanded;\n }\n\n private findChildren = () => Array.from(this.host.children)\n .filter((child): child is HTMLElement =>\n child instanceof HTMLElement && child.tagName === 'IFX-TREE-VIEW-ITEM'\n );\n\n private calculateNodeLevel = (): number => {\n let level = 0, parent = this.host.parentElement;\n while (parent) {\n if (parent.tagName === 'IFX-TREE-VIEW-ITEM') level++;\n parent = parent.parentElement;\n }\n return level;\n };\n\n componentWillLoad() {\n this.initializeNode();\n this.setupEventListeners();\n }\n\n componentDidLoad() {\n this.observeDisableAllItems();\n this.observeExpandAllItems();\n if (this.shouldExpandFromParent()) {\n this.expandAllDescendants();\n }\n (this.host as any)['__stencil_instance'] = this;\n }\n\n private shouldExpandFromParent(): boolean {\n let parent = this.host.parentElement;\n while (parent) {\n if (\n parent.tagName === 'IFX-TREE-VIEW' &&\n (parent.hasAttribute('expand-all-items') || parent.hasAttribute('data-expand-all-items'))\n ) {\n return true;\n }\n parent = parent.parentElement;\n }\n return false;\n }\n\n private expandAllDescendants() {\n this.expanded = true;\n const children = this.findChildren();\n for (const child of children) {\n if (typeof (child as any).expanded !== 'undefined') {\n (child as any).expanded = true;\n }\n if (typeof (child as any).expandAllDescendants === 'function') {\n (child as any).expandAllDescendants();\n }\n }\n }\n\n private observeDisableAllItems() {\n let parent = this.host.parentElement;\n while (parent) {\n if (parent.tagName === 'IFX-TREE-VIEW') {\n const observer = new MutationObserver(mutations => {\n for (const mutation of mutations) {\n if (\n mutation.type === 'attributes' &&\n mutation.attributeName === 'disable-all-items'\n ) {\n const disableAll = (parent as any).disableAllItems;\n this.disableAllItems = !!disableAll || parent.hasAttribute('disable-all-items');\n }\n }\n });\n observer.observe(parent, { attributes: true });\n const disableAll = (parent as any).disableAllItems;\n this.disableAllItems = !!disableAll || parent.hasAttribute('disable-all-items');\n break;\n }\n parent = parent.parentElement;\n }\n }\n\n private observeExpandAllItems() {\n let parent = this.host.parentElement;\n while (parent) {\n if (parent.tagName === 'IFX-TREE-VIEW' || parent.hasAttribute('data-expand-all-items')) {\n const observer = new MutationObserver(mutations => {\n for (const mutation of mutations) {\n if (\n mutation.type === 'attributes' &&\n mutation.attributeName === 'data-expand-all-items'\n ) {\n this.expandAllItems = parent.hasAttribute('data-expand-all-items');\n }\n }\n });\n observer.observe(parent, { attributes: true });\n this.expandAllItems = parent.hasAttribute('data-expand-all-items');\n break;\n }\n parent = parent.parentElement;\n }\n }\n\n private initializeNode() {\n this.expanded = this.initiallyExpanded;\n this.hasChildren = this.findChildren().length > 0;\n this.level = this.calculateNodeLevel();\n this.host.setAttribute('data-level', this.level.toString());\n }\n\n private setupEventListeners() {\n this.host.addEventListener('internal-check-state-change', this.handleStateChange);\n }\n\n private handleStateChange = (event: CustomEvent) => {\n if (this.disabled) return;\n event.stopPropagation();\n this.updateCheckState(event.detail.checked);\n };\n\n private handleCheckboxChange = (event: CustomEvent) => {\n if (this.disabled) return;\n this.updateCheckState(event.detail?.checked ?? !this.isChecked);\n };\n\n private handleHeaderClick = ({ target }: MouseEvent) => {\n if (this.disabled) return;\n if (!(target as HTMLElement).closest('.tree-item__checkbox-container, .tree-item__chevron-container')) {\n this.updateCheckState(!this.isChecked);\n }\n };\n\n private async updateCheckState(checked: boolean, fromParent = false) {\n if (this.disabled) return;\n\n if (!fromParent && this.hasChildren) {\n const affected = this.collectDescendantStates(checked);\n this.setNodeState({ isChecked: checked, partialChecked: false }, false);\n await this.updateChildrenSilently(checked);\n this.ifxTreeViewItemCheckChange.emit({\n checked,\n indeterminate: false,\n affectedChildItems: affected,\n });\n this.updateParentState();\n } else if (fromParent) {\n this.setNodeState({ isChecked: checked, partialChecked: false }, false);\n } else {\n this.setNodeState({ isChecked: checked, partialChecked: false });\n await this.updateChildrenState(checked);\n this.updateParentState();\n }\n }\n\n private async updateChildrenSilently(checked: boolean) {\n const children = this.findChildren();\n for (const child of children) {\n const childInstance = (child as any)['__stencil_instance'];\n if (childInstance) {\n childInstance.setNodeState({ isChecked: checked, partialChecked: false }, false);\n await childInstance.updateChildrenSilently(checked);\n }\n }\n }\n\n @Watch('expanded')\n handleExpandedChange(newValue: boolean) {\n this.ifxTreeViewItemExpandChange.emit(newValue);\n }\n\n @Watch('disableItem')\n handleDisableItemChange(newValue: boolean) {\n this.ifxTreeViewItemDisableChange.emit(newValue);\n }\n\n private setNodeState(state: TreeState, emitEvent = true) {\n this.isChecked = state.isChecked;\n this.partialChecked = state.partialChecked;\n if (emitEvent) {\n this.ifxTreeViewItemCheckChange.emit({\n checked: this.isChecked,\n indeterminate: this.partialChecked,\n });\n }\n }\n\n private collectDescendantStates(checked: boolean) {\n const descendants: Array<{ label: string; checked: boolean; indeterminate: boolean }> = [];\n const collect = (el: Element) => {\n let instance: any = null;\n if (el === this.host) {\n instance = this;\n } else if ((el as any)['__stencil_instance']) {\n instance = (el as any)['__stencil_instance'];\n }\n const label = instance?.label ?? (el as any).label ?? '';\n descendants.push({\n label,\n checked,\n indeterminate: false,\n });\n Array.from(el.children)\n .forEach(child => {\n if (child.tagName === 'IFX-TREE-VIEW-ITEM') {\n collect(child);\n }\n });\n };\n collect(this.host);\n return descendants;\n }\n\n private async updateChildrenState(checked: boolean) {\n const children = this.findChildren();\n for (const child of children) {\n await (child as HTMLIfxTreeViewItemElement).componentOnReady();\n child.dispatchEvent(new CustomEvent('internal-check-state-change', {\n detail: { checked },\n bubbles: false,\n composed: true\n }));\n }\n }\n\n private findSiblingNodes(parent: HTMLElement): HTMLIfxTreeViewItemElement[] {\n const parentEl = parent.parentElement;\n if (!parentEl) return [];\n return Array.from(\n parentEl.querySelectorAll('ifx-tree-view-item')\n ).map(el => el as HTMLIfxTreeViewItemElement);\n }\n\n private updateParentState() {\n const parent = this.host.parentElement?.closest('ifx-tree-view-item') as HTMLIfxTreeViewItemElement;\n if (!parent) return;\n parent.componentOnReady().then(resolved => {\n const parentNode = resolved as unknown as TreeViewItem;\n if (!parentNode?.updateParentState) return;\n const siblings = this.findSiblingNodes(parent);\n const states = this.calculateSiblingStates(siblings);\n parentNode.setNodeState({\n isChecked: states.allChecked,\n partialChecked: !states.allChecked && states.someChecked\n });\n parentNode.updateParentState();\n });\n }\n\n private calculateSiblingStates(siblings: HTMLIfxTreeViewItemElement[]) {\n return {\n allChecked: siblings.every(sib => (sib as unknown as TreeViewItem).isChecked),\n someChecked: siblings.some(sib => {\n const node = sib as unknown as TreeViewItem;\n return node.isChecked || node.partialChecked;\n })\n };\n }\n\n private toggleExpand = () => {\n if (this.disabled) return;\n this.hasChildren && (this.expanded = !this.expanded);\n };\n\n private handleKeyDown = (event: KeyboardEvent) => {\n\n const allItems = Array.from(\n this.host\n .closest('ifx-tree-view')\n ?.querySelectorAll('ifx-tree-view-item') || []\n );\n\n const visibleItems = allItems.filter(item => {\n let parent = item.parentElement?.closest('ifx-tree-view-item');\n while (parent) {\n const parentCmp = parent as any;\n if (!(parentCmp.expandAllItems || parentCmp.expanded)) {\n return false;\n }\n parent = parent.parentElement?.closest('ifx-tree-view-item');\n }\n return true;\n });\n\n const currentIndex = visibleItems.findIndex(el => el === this.host);\n\n function focusLabelIcon(el: Element | null) {\n (el as HTMLElement | null)?.focus();\n }\n\n switch (event.key) {\n case 'ArrowDown': {\n event.preventDefault();\n let nextIndex = currentIndex + 1;\n while (nextIndex < visibleItems.length) {\n const next = visibleItems[nextIndex] as any;\n if (!next.disabled) {\n focusLabelIcon(next.shadowRoot?.querySelector('.tree-item__label-icon-container'));\n break;\n }\n nextIndex++;\n }\n break;\n }\n case 'ArrowUp': {\n event.preventDefault();\n let prevIndex = currentIndex - 1;\n while (prevIndex >= 0) {\n const prev = visibleItems[prevIndex] as any;\n if (!prev.disabled) {\n focusLabelIcon(prev.shadowRoot?.querySelector('.tree-item__label-icon-container'));\n break;\n }\n prevIndex--;\n }\n break;\n }\n case 'ArrowRight': {\n event.preventDefault();\n if (!this.isExpanded && this.hasChildren) {\n this.expanded = true;\n } else if (this.isExpanded && this.hasChildren) {\n const firstChild = this.host.querySelector('ifx-tree-view-item');\n if (firstChild && !(firstChild as any).disabled) {\n focusLabelIcon((firstChild as HTMLElement).shadowRoot?.querySelector('.tree-item__label-icon-container'));\n }\n }\n break;\n }\n case 'ArrowLeft': {\n event.preventDefault();\n if (this.isExpanded && this.hasChildren) {\n this.expanded = false;\n } else {\n const parent = this.host.parentElement?.closest('ifx-tree-view-item');\n if (parent && !(parent as any).disabled) {\n focusLabelIcon((parent as HTMLElement).shadowRoot?.querySelector('.tree-item__label-icon-container'));\n }\n }\n break;\n }\n case ' ':\n case 'Enter': {\n event.preventDefault();\n this.updateCheckState(!this.isChecked);\n break;\n }\n }\n };\n\n render() {\n return (\n <div\n class={{\n 'tree-item': true,\n 'tree-item--expanded': this.isExpanded,\n 'tree-item--has-children': this.hasChildren,\n 'tree-item--disabled': this.disabled,\n }}\n role=\"treeitem\"\n aria-expanded={this.isExpanded ? 'true' : 'false'}\n data-level={this.level}\n aria-disabled={this.disabled ? 'true' : undefined}\n aria-label={this.ariaLabel}\n >\n <div class=\"tree-item__content\">\n {this.renderCheckbox()}\n {this.renderHeader()}\n </div>\n {this.isExpanded && <div class=\"tree-item__children\"><slot/></div>}\n </div>\n );\n }\n\n private renderHeader() {\n return (\n <div\n class=\"tree-item__header\"\n style={{ paddingLeft: `${this.level * 24 + 10}px` }}\n onClick={this.handleHeaderClick}\n tabIndex={-1}\n aria-disabled={this.disabled ? 'true' : undefined}\n >\n {this.renderControls()}\n </div>\n );\n }\n\n private renderCheckbox() {\n return (\n <div class=\"tree-item__checkbox-container\" onClick={e => e.stopPropagation()}>\n <ifx-checkbox\n size='s'\n checked={this.isChecked}\n indeterminate={this.partialChecked}\n onIfxChange={this.handleCheckboxChange}\n disabled={this.disabled}\n />\n </div>\n );\n }\n\n private renderControls() {\n return [\n this.hasChildren && (\n <div class=\"tree-item__chevron-container\" onClick={this.toggleExpand}>\n <ifx-icon class={`tree-item__chevron ${this.isExpanded ? 'chevron-down' : 'chevron-right'}`}\n icon=\"chevron-right-16\"/>\n <div class=\"tree-item__line\"/>\n </div>\n ),\n <div\n class=\"tree-item__label-icon-container\"\n tabIndex={this.disabled ? -1 : 0}\n onKeyDown={this.handleKeyDown}\n >\n <div class=\"tree-item__icon-container\">\n {\n this.hasChildren ? (\n <Fragment>\n <ifx-icon class={{'icon--hidden': this.isExpanded}} icon=\"folder-16\"/>\n <ifx-icon class={{'icon--hidden': !this.isExpanded}} icon=\"folder-open-16\"/>\n </Fragment>\n ) : (\n <ifx-icon icon=\"file-16\"/>\n )\n }\n </div>\n <span class=\"tree-item__label\">{this.label}</span>\n </div>\n ];\n }\n}\n"],"version":3}
|
@@ -143,6 +143,7 @@ export class TreeViewItem {
|
|
143
143
|
if (this.shouldExpandFromParent()) {
|
144
144
|
this.expandAllDescendants();
|
145
145
|
}
|
146
|
+
this.host['__stencil_instance'] = this;
|
146
147
|
}
|
147
148
|
shouldExpandFromParent() {
|
148
149
|
let parent = this.host.parentElement;
|
@@ -216,12 +217,38 @@ export class TreeViewItem {
|
|
216
217
|
setupEventListeners() {
|
217
218
|
this.host.addEventListener('internal-check-state-change', this.handleStateChange);
|
218
219
|
}
|
219
|
-
async updateCheckState(checked) {
|
220
|
+
async updateCheckState(checked, fromParent = false) {
|
220
221
|
if (this.disabled)
|
221
222
|
return;
|
222
|
-
|
223
|
-
|
224
|
-
|
223
|
+
if (!fromParent && this.hasChildren) {
|
224
|
+
const affected = this.collectDescendantStates(checked);
|
225
|
+
this.setNodeState({ isChecked: checked, partialChecked: false }, false);
|
226
|
+
await this.updateChildrenSilently(checked);
|
227
|
+
this.ifxTreeViewItemCheckChange.emit({
|
228
|
+
checked,
|
229
|
+
indeterminate: false,
|
230
|
+
affectedChildItems: affected,
|
231
|
+
});
|
232
|
+
this.updateParentState();
|
233
|
+
}
|
234
|
+
else if (fromParent) {
|
235
|
+
this.setNodeState({ isChecked: checked, partialChecked: false }, false);
|
236
|
+
}
|
237
|
+
else {
|
238
|
+
this.setNodeState({ isChecked: checked, partialChecked: false });
|
239
|
+
await this.updateChildrenState(checked);
|
240
|
+
this.updateParentState();
|
241
|
+
}
|
242
|
+
}
|
243
|
+
async updateChildrenSilently(checked) {
|
244
|
+
const children = this.findChildren();
|
245
|
+
for (const child of children) {
|
246
|
+
const childInstance = child['__stencil_instance'];
|
247
|
+
if (childInstance) {
|
248
|
+
childInstance.setNodeState({ isChecked: checked, partialChecked: false }, false);
|
249
|
+
await childInstance.updateChildrenSilently(checked);
|
250
|
+
}
|
251
|
+
}
|
225
252
|
}
|
226
253
|
handleExpandedChange(newValue) {
|
227
254
|
this.ifxTreeViewItemExpandChange.emit(newValue);
|
@@ -229,13 +256,42 @@ export class TreeViewItem {
|
|
229
256
|
handleDisableItemChange(newValue) {
|
230
257
|
this.ifxTreeViewItemDisableChange.emit(newValue);
|
231
258
|
}
|
232
|
-
setNodeState(state) {
|
259
|
+
setNodeState(state, emitEvent = true) {
|
233
260
|
this.isChecked = state.isChecked;
|
234
261
|
this.partialChecked = state.partialChecked;
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
262
|
+
if (emitEvent) {
|
263
|
+
this.ifxTreeViewItemCheckChange.emit({
|
264
|
+
checked: this.isChecked,
|
265
|
+
indeterminate: this.partialChecked,
|
266
|
+
});
|
267
|
+
}
|
268
|
+
}
|
269
|
+
collectDescendantStates(checked) {
|
270
|
+
const descendants = [];
|
271
|
+
const collect = (el) => {
|
272
|
+
var _a, _b;
|
273
|
+
let instance = null;
|
274
|
+
if (el === this.host) {
|
275
|
+
instance = this;
|
276
|
+
}
|
277
|
+
else if (el['__stencil_instance']) {
|
278
|
+
instance = el['__stencil_instance'];
|
279
|
+
}
|
280
|
+
const label = (_b = (_a = instance === null || instance === void 0 ? void 0 : instance.label) !== null && _a !== void 0 ? _a : el.label) !== null && _b !== void 0 ? _b : '';
|
281
|
+
descendants.push({
|
282
|
+
label,
|
283
|
+
checked,
|
284
|
+
indeterminate: false,
|
285
|
+
});
|
286
|
+
Array.from(el.children)
|
287
|
+
.forEach(child => {
|
288
|
+
if (child.tagName === 'IFX-TREE-VIEW-ITEM') {
|
289
|
+
collect(child);
|
290
|
+
}
|
291
|
+
});
|
292
|
+
};
|
293
|
+
collect(this.host);
|
294
|
+
return descendants;
|
239
295
|
}
|
240
296
|
async updateChildrenState(checked) {
|
241
297
|
const children = this.findChildren();
|
@@ -282,12 +338,12 @@ export class TreeViewItem {
|
|
282
338
|
};
|
283
339
|
}
|
284
340
|
render() {
|
285
|
-
return (h("div", { key: '
|
341
|
+
return (h("div", { key: 'a626535eaa7807016da9b015daecc1c4ecba4283', class: {
|
286
342
|
'tree-item': true,
|
287
343
|
'tree-item--expanded': this.isExpanded,
|
288
344
|
'tree-item--has-children': this.hasChildren,
|
289
345
|
'tree-item--disabled': this.disabled,
|
290
|
-
}, role: "treeitem", "aria-expanded": this.isExpanded ? 'true' : 'false', "data-level": this.level, "aria-disabled": this.disabled ? 'true' : undefined, "aria-label": this.ariaLabel }, h("div", { key: '
|
346
|
+
}, role: "treeitem", "aria-expanded": this.isExpanded ? 'true' : 'false', "data-level": this.level, "aria-disabled": this.disabled ? 'true' : undefined, "aria-label": this.ariaLabel }, h("div", { key: 'e6e9bf260e0c1f5584826189ae44de0abbeed4e0', class: "tree-item__content" }, this.renderCheckbox(), this.renderHeader()), this.isExpanded && h("div", { key: 'e24cad37fc29633023d9e2b7216c2281056fc76e', class: "tree-item__children" }, h("slot", { key: '65d7afa55a28667bed348cafd784636256cd23d5' }))));
|
291
347
|
}
|
292
348
|
renderHeader() {
|
293
349
|
return (h("div", { class: "tree-item__header", style: { paddingLeft: `${this.level * 24 + 10}px` }, onClick: this.handleHeaderClick, tabIndex: -1, "aria-disabled": this.disabled ? 'true' : undefined }, this.renderControls()));
|
@@ -452,9 +508,15 @@ export class TreeViewItem {
|
|
452
508
|
"text": ""
|
453
509
|
},
|
454
510
|
"complexType": {
|
455
|
-
"original": "
|
456
|
-
"resolved": "
|
457
|
-
"references": {
|
511
|
+
"original": "TreeViewCheckChangeEvent",
|
512
|
+
"resolved": "TreeViewCheckChangeEvent",
|
513
|
+
"references": {
|
514
|
+
"TreeViewCheckChangeEvent": {
|
515
|
+
"location": "local",
|
516
|
+
"path": "/home/runner/work/infineon-design-system-stencil/infineon-design-system-stencil/packages/components/src/components/tree-view/tree-view-item.tsx",
|
517
|
+
"id": "src/components/tree-view/tree-view-item.tsx::TreeViewCheckChangeEvent"
|
518
|
+
}
|
519
|
+
}
|
458
520
|
}
|
459
521
|
}, {
|
460
522
|
"method": "ifxTreeViewItemDisableChange",
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"tree-view-item.js","sourceRoot":"","sources":["../../../src/components/tree-view/tree-view-item.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, h, Prop, State, Element, Fragment, Event, EventEmitter, Watch } from '@stencil/core';\n\ninterface TreeState {\n isChecked: boolean;\n partialChecked: boolean;\n}\n\ntype HTMLIfxTreeViewItemElement = HTMLElement & { componentOnReady: () => Promise<unknown> };\n\n@Component({\n tag: 'ifx-tree-view-item',\n styleUrl: 'tree-view-item.scss',\n shadow: true,\n})\nexport class TreeViewItem {\n @Element() host: HTMLElement;\n @Prop() label: string;\n @Prop({ reflect: true, mutable: true }) expanded: boolean = false;\n @Prop() initiallyExpanded: boolean = false;\n @Prop() disableItem: boolean = false;\n @Prop() ariaLabel: string | null;\n\n @Event() ifxTreeViewItemExpandChange: EventEmitter<boolean>;\n @Event() ifxTreeViewItemCheckChange: EventEmitter<{ checked: boolean; indeterminate: boolean }>;\n @Event() ifxTreeViewItemDisableChange: EventEmitter<boolean>;\n\n @State() private hasChildren: boolean = false;\n @State() private isChecked: boolean = false;\n @State() private partialChecked: boolean = false;\n @State() private level: number = 0;\n @State() private disableAllItems: boolean = false;\n @State() private expandAllItems: boolean = false;\n\n private get disabled() {\n return this.disableAllItems || this.disableItem;\n }\n\n private get isExpanded() {\n return this.expandAllItems || this.expanded;\n }\n\n private findChildren = () => Array.from(this.host.children)\n .filter((child): child is HTMLElement =>\n child instanceof HTMLElement && child.tagName === 'IFX-TREE-VIEW-ITEM'\n );\n\n private calculateNodeLevel = (): number => {\n let level = 0, parent = this.host.parentElement;\n while (parent) {\n if (parent.tagName === 'IFX-TREE-VIEW-ITEM') level++;\n parent = parent.parentElement;\n }\n return level;\n };\n\n componentWillLoad() {\n this.initializeNode();\n this.setupEventListeners();\n }\n\n componentDidLoad() {\n this.observeDisableAllItems();\n this.observeExpandAllItems();\n if (this.shouldExpandFromParent()) {\n this.expandAllDescendants();\n }\n }\n\n private shouldExpandFromParent(): boolean {\n let parent = this.host.parentElement;\n while (parent) {\n if (\n parent.tagName === 'IFX-TREE-VIEW' &&\n (parent.hasAttribute('expand-all-items') || parent.hasAttribute('data-expand-all-items'))\n ) {\n return true;\n }\n parent = parent.parentElement;\n }\n return false;\n }\n\n private expandAllDescendants() {\n this.expanded = true;\n const children = this.findChildren();\n for (const child of children) {\n if (typeof (child as any).expanded !== 'undefined') {\n (child as any).expanded = true;\n }\n if (typeof (child as any).expandAllDescendants === 'function') {\n (child as any).expandAllDescendants();\n }\n }\n }\n\n private observeDisableAllItems() {\n let parent = this.host.parentElement;\n while (parent) {\n if (parent.tagName === 'IFX-TREE-VIEW') {\n const observer = new MutationObserver(mutations => {\n for (const mutation of mutations) {\n if (\n mutation.type === 'attributes' &&\n mutation.attributeName === 'disable-all-items'\n ) {\n const disableAll = (parent as any).disableAllItems;\n this.disableAllItems = !!disableAll || parent.hasAttribute('disable-all-items');\n }\n }\n });\n observer.observe(parent, { attributes: true });\n const disableAll = (parent as any).disableAllItems;\n this.disableAllItems = !!disableAll || parent.hasAttribute('disable-all-items');\n break;\n }\n parent = parent.parentElement;\n }\n }\n\n private observeExpandAllItems() {\n let parent = this.host.parentElement;\n while (parent) {\n if (parent.tagName === 'IFX-TREE-VIEW' || parent.hasAttribute('data-expand-all-items')) {\n const observer = new MutationObserver(mutations => {\n for (const mutation of mutations) {\n if (\n mutation.type === 'attributes' &&\n mutation.attributeName === 'data-expand-all-items'\n ) {\n this.expandAllItems = parent.hasAttribute('data-expand-all-items');\n }\n }\n });\n observer.observe(parent, { attributes: true });\n this.expandAllItems = parent.hasAttribute('data-expand-all-items');\n break;\n }\n parent = parent.parentElement;\n }\n }\n\n private initializeNode() {\n this.expanded = this.initiallyExpanded;\n this.hasChildren = this.findChildren().length > 0;\n this.level = this.calculateNodeLevel();\n this.host.setAttribute('data-level', this.level.toString());\n }\n\n private setupEventListeners() {\n this.host.addEventListener('internal-check-state-change', this.handleStateChange);\n }\n\n private handleStateChange = (event: CustomEvent) => {\n if (this.disabled) return;\n event.stopPropagation();\n this.updateCheckState(event.detail.checked);\n };\n\n private handleCheckboxChange = (event: CustomEvent) => {\n if (this.disabled) return;\n this.updateCheckState(event.detail?.checked ?? !this.isChecked);\n };\n\n private handleHeaderClick = ({ target }: MouseEvent) => {\n if (this.disabled) return;\n if (!(target as HTMLElement).closest('.tree-item__checkbox-container, .tree-item__chevron-container')) {\n this.updateCheckState(!this.isChecked);\n }\n };\n\n private async updateCheckState(checked: boolean) {\n if (this.disabled) return;\n this.setNodeState({ isChecked: checked, partialChecked: false });\n await this.updateChildrenState(checked);\n this.updateParentState();\n }\n\n @Watch('expanded')\n handleExpandedChange(newValue: boolean) {\n this.ifxTreeViewItemExpandChange.emit(newValue);\n }\n\n @Watch('disableItem')\n handleDisableItemChange(newValue: boolean) {\n this.ifxTreeViewItemDisableChange.emit(newValue);\n }\n\n private setNodeState(state: TreeState) {\n this.isChecked = state.isChecked;\n this.partialChecked = state.partialChecked;\n this.ifxTreeViewItemCheckChange.emit({\n checked: this.isChecked,\n indeterminate: this.partialChecked,\n });\n }\n\n private async updateChildrenState(checked: boolean) {\n const children = this.findChildren();\n for (const child of children) {\n await (child as HTMLIfxTreeViewItemElement).componentOnReady();\n child.dispatchEvent(new CustomEvent('internal-check-state-change', {\n detail: { checked },\n bubbles: false,\n composed: true\n }));\n }\n }\n\n private findSiblingNodes(parent: HTMLElement): HTMLIfxTreeViewItemElement[] {\n const parentEl = parent.parentElement;\n if (!parentEl) return [];\n return Array.from(\n parentEl.querySelectorAll('ifx-tree-view-item')\n ).map(el => el as HTMLIfxTreeViewItemElement);\n }\n\n private updateParentState() {\n const parent = this.host.parentElement?.closest('ifx-tree-view-item') as HTMLIfxTreeViewItemElement;\n if (!parent) return;\n parent.componentOnReady().then(resolved => {\n const parentNode = resolved as unknown as TreeViewItem;\n if (!parentNode?.updateParentState) return;\n const siblings = this.findSiblingNodes(parent);\n const states = this.calculateSiblingStates(siblings);\n parentNode.setNodeState({\n isChecked: states.allChecked,\n partialChecked: !states.allChecked && states.someChecked\n });\n parentNode.updateParentState();\n });\n }\n\n private calculateSiblingStates(siblings: HTMLIfxTreeViewItemElement[]) {\n return {\n allChecked: siblings.every(sib => (sib as unknown as TreeViewItem).isChecked),\n someChecked: siblings.some(sib => {\n const node = sib as unknown as TreeViewItem;\n return node.isChecked || node.partialChecked;\n })\n };\n }\n\n private toggleExpand = () => {\n if (this.disabled) return;\n this.hasChildren && (this.expanded = !this.expanded);\n };\n\n private handleKeyDown = (event: KeyboardEvent) => {\n\n const allItems = Array.from(\n this.host\n .closest('ifx-tree-view')\n ?.querySelectorAll('ifx-tree-view-item') || []\n );\n\n const visibleItems = allItems.filter(item => {\n let parent = item.parentElement?.closest('ifx-tree-view-item');\n while (parent) {\n const parentCmp = parent as any;\n if (!(parentCmp.expandAllItems || parentCmp.expanded)) {\n return false;\n }\n parent = parent.parentElement?.closest('ifx-tree-view-item');\n }\n return true;\n });\n\n const currentIndex = visibleItems.findIndex(el => el === this.host);\n\n function focusLabelIcon(el: Element | null) {\n (el as HTMLElement | null)?.focus();\n }\n\n switch (event.key) {\n case 'ArrowDown': {\n event.preventDefault();\n let nextIndex = currentIndex + 1;\n while (nextIndex < visibleItems.length) {\n const next = visibleItems[nextIndex] as any;\n if (!next.disabled) {\n focusLabelIcon(next.shadowRoot?.querySelector('.tree-item__label-icon-container'));\n break;\n }\n nextIndex++;\n }\n break;\n }\n case 'ArrowUp': {\n event.preventDefault();\n let prevIndex = currentIndex - 1;\n while (prevIndex >= 0) {\n const prev = visibleItems[prevIndex] as any;\n if (!prev.disabled) {\n focusLabelIcon(prev.shadowRoot?.querySelector('.tree-item__label-icon-container'));\n break;\n }\n prevIndex--;\n }\n break;\n }\n case 'ArrowRight': {\n event.preventDefault();\n if (!this.isExpanded && this.hasChildren) {\n this.expanded = true;\n } else if (this.isExpanded && this.hasChildren) {\n const firstChild = this.host.querySelector('ifx-tree-view-item');\n if (firstChild && !(firstChild as any).disabled) {\n focusLabelIcon((firstChild as HTMLElement).shadowRoot?.querySelector('.tree-item__label-icon-container'));\n }\n }\n break;\n }\n case 'ArrowLeft': {\n event.preventDefault();\n if (this.isExpanded && this.hasChildren) {\n this.expanded = false;\n } else {\n const parent = this.host.parentElement?.closest('ifx-tree-view-item');\n if (parent && !(parent as any).disabled) {\n focusLabelIcon((parent as HTMLElement).shadowRoot?.querySelector('.tree-item__label-icon-container'));\n }\n }\n break;\n }\n case ' ':\n case 'Enter': {\n event.preventDefault();\n this.updateCheckState(!this.isChecked);\n break;\n }\n }\n };\n\n render() {\n return (\n <div\n class={{\n 'tree-item': true,\n 'tree-item--expanded': this.isExpanded,\n 'tree-item--has-children': this.hasChildren,\n 'tree-item--disabled': this.disabled,\n }}\n role=\"treeitem\"\n aria-expanded={this.isExpanded ? 'true' : 'false'}\n data-level={this.level}\n aria-disabled={this.disabled ? 'true' : undefined}\n aria-label={this.ariaLabel}\n >\n <div class=\"tree-item__content\">\n {this.renderCheckbox()}\n {this.renderHeader()}\n </div>\n {this.isExpanded && <div class=\"tree-item__children\"><slot/></div>}\n </div>\n );\n }\n\n private renderHeader() {\n return (\n <div\n class=\"tree-item__header\"\n style={{ paddingLeft: `${this.level * 24 + 10}px` }}\n onClick={this.handleHeaderClick}\n tabIndex={-1}\n aria-disabled={this.disabled ? 'true' : undefined}\n >\n {this.renderControls()}\n </div>\n );\n }\n\n private renderCheckbox() {\n return (\n <div class=\"tree-item__checkbox-container\" onClick={e => e.stopPropagation()}>\n <ifx-checkbox\n size='s'\n checked={this.isChecked}\n indeterminate={this.partialChecked}\n onIfxChange={this.handleCheckboxChange}\n disabled={this.disabled}\n />\n </div>\n );\n }\n\n private renderControls() {\n return [\n this.hasChildren && (\n <div class=\"tree-item__chevron-container\" onClick={this.toggleExpand}>\n <ifx-icon class={`tree-item__chevron ${this.isExpanded ? 'chevron-down' : 'chevron-right'}`}\n icon=\"chevron-right-16\"/>\n <div class=\"tree-item__line\"/>\n </div>\n ),\n <div\n class=\"tree-item__label-icon-container\"\n tabIndex={this.disabled ? -1 : 0}\n onKeyDown={this.handleKeyDown}\n >\n <div class=\"tree-item__icon-container\">\n {\n this.hasChildren ? (\n <Fragment>\n <ifx-icon class={{'icon--hidden': this.isExpanded}} icon=\"folder-16\"/>\n <ifx-icon class={{'icon--hidden': !this.isExpanded}} icon=\"folder-open-16\"/>\n </Fragment>\n ) : (\n <ifx-icon icon=\"file-16\"/>\n )\n }\n </div>\n <span class=\"tree-item__label\">{this.label}</span>\n </div>\n ];\n }\n}\n"]}
|
1
|
+
{"version":3,"file":"tree-view-item.js","sourceRoot":"","sources":["../../../src/components/tree-view/tree-view-item.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, h, Prop, State, Element, Fragment, Event, EventEmitter, Watch } from '@stencil/core';\n\nexport interface TreeViewCheckChangeEvent {\n checked: boolean;\n indeterminate: boolean;\n affectedChildItems?: Array<{ label: string; checked: boolean; indeterminate: boolean }>;\n}\n\ninterface TreeState {\n isChecked: boolean;\n partialChecked: boolean;\n}\n\ntype HTMLIfxTreeViewItemElement = HTMLElement & { componentOnReady: () => Promise<unknown> };\n\n@Component({\n tag: 'ifx-tree-view-item',\n styleUrl: 'tree-view-item.scss',\n shadow: true,\n})\nexport class TreeViewItem {\n @Element() host: HTMLElement;\n @Prop() label: string;\n @Prop({ reflect: true, mutable: true }) expanded: boolean = false;\n @Prop() initiallyExpanded: boolean = false;\n @Prop() disableItem: boolean = false;\n @Prop() ariaLabel: string | null;\n\n @Event() ifxTreeViewItemExpandChange: EventEmitter<boolean>;\n @Event() ifxTreeViewItemCheckChange: EventEmitter<TreeViewCheckChangeEvent>;\n @Event() ifxTreeViewItemDisableChange: EventEmitter<boolean>;\n\n @State() private hasChildren: boolean = false;\n @State() private isChecked: boolean = false;\n @State() private partialChecked: boolean = false;\n @State() private level: number = 0;\n @State() private disableAllItems: boolean = false;\n @State() private expandAllItems: boolean = false;\n\n private get disabled() {\n return this.disableAllItems || this.disableItem;\n }\n\n private get isExpanded() {\n return this.expandAllItems || this.expanded;\n }\n\n private findChildren = () => Array.from(this.host.children)\n .filter((child): child is HTMLElement =>\n child instanceof HTMLElement && child.tagName === 'IFX-TREE-VIEW-ITEM'\n );\n\n private calculateNodeLevel = (): number => {\n let level = 0, parent = this.host.parentElement;\n while (parent) {\n if (parent.tagName === 'IFX-TREE-VIEW-ITEM') level++;\n parent = parent.parentElement;\n }\n return level;\n };\n\n componentWillLoad() {\n this.initializeNode();\n this.setupEventListeners();\n }\n\n componentDidLoad() {\n this.observeDisableAllItems();\n this.observeExpandAllItems();\n if (this.shouldExpandFromParent()) {\n this.expandAllDescendants();\n }\n (this.host as any)['__stencil_instance'] = this;\n }\n\n private shouldExpandFromParent(): boolean {\n let parent = this.host.parentElement;\n while (parent) {\n if (\n parent.tagName === 'IFX-TREE-VIEW' &&\n (parent.hasAttribute('expand-all-items') || parent.hasAttribute('data-expand-all-items'))\n ) {\n return true;\n }\n parent = parent.parentElement;\n }\n return false;\n }\n\n private expandAllDescendants() {\n this.expanded = true;\n const children = this.findChildren();\n for (const child of children) {\n if (typeof (child as any).expanded !== 'undefined') {\n (child as any).expanded = true;\n }\n if (typeof (child as any).expandAllDescendants === 'function') {\n (child as any).expandAllDescendants();\n }\n }\n }\n\n private observeDisableAllItems() {\n let parent = this.host.parentElement;\n while (parent) {\n if (parent.tagName === 'IFX-TREE-VIEW') {\n const observer = new MutationObserver(mutations => {\n for (const mutation of mutations) {\n if (\n mutation.type === 'attributes' &&\n mutation.attributeName === 'disable-all-items'\n ) {\n const disableAll = (parent as any).disableAllItems;\n this.disableAllItems = !!disableAll || parent.hasAttribute('disable-all-items');\n }\n }\n });\n observer.observe(parent, { attributes: true });\n const disableAll = (parent as any).disableAllItems;\n this.disableAllItems = !!disableAll || parent.hasAttribute('disable-all-items');\n break;\n }\n parent = parent.parentElement;\n }\n }\n\n private observeExpandAllItems() {\n let parent = this.host.parentElement;\n while (parent) {\n if (parent.tagName === 'IFX-TREE-VIEW' || parent.hasAttribute('data-expand-all-items')) {\n const observer = new MutationObserver(mutations => {\n for (const mutation of mutations) {\n if (\n mutation.type === 'attributes' &&\n mutation.attributeName === 'data-expand-all-items'\n ) {\n this.expandAllItems = parent.hasAttribute('data-expand-all-items');\n }\n }\n });\n observer.observe(parent, { attributes: true });\n this.expandAllItems = parent.hasAttribute('data-expand-all-items');\n break;\n }\n parent = parent.parentElement;\n }\n }\n\n private initializeNode() {\n this.expanded = this.initiallyExpanded;\n this.hasChildren = this.findChildren().length > 0;\n this.level = this.calculateNodeLevel();\n this.host.setAttribute('data-level', this.level.toString());\n }\n\n private setupEventListeners() {\n this.host.addEventListener('internal-check-state-change', this.handleStateChange);\n }\n\n private handleStateChange = (event: CustomEvent) => {\n if (this.disabled) return;\n event.stopPropagation();\n this.updateCheckState(event.detail.checked);\n };\n\n private handleCheckboxChange = (event: CustomEvent) => {\n if (this.disabled) return;\n this.updateCheckState(event.detail?.checked ?? !this.isChecked);\n };\n\n private handleHeaderClick = ({ target }: MouseEvent) => {\n if (this.disabled) return;\n if (!(target as HTMLElement).closest('.tree-item__checkbox-container, .tree-item__chevron-container')) {\n this.updateCheckState(!this.isChecked);\n }\n };\n\n private async updateCheckState(checked: boolean, fromParent = false) {\n if (this.disabled) return;\n\n if (!fromParent && this.hasChildren) {\n const affected = this.collectDescendantStates(checked);\n this.setNodeState({ isChecked: checked, partialChecked: false }, false);\n await this.updateChildrenSilently(checked);\n this.ifxTreeViewItemCheckChange.emit({\n checked,\n indeterminate: false,\n affectedChildItems: affected,\n });\n this.updateParentState();\n } else if (fromParent) {\n this.setNodeState({ isChecked: checked, partialChecked: false }, false);\n } else {\n this.setNodeState({ isChecked: checked, partialChecked: false });\n await this.updateChildrenState(checked);\n this.updateParentState();\n }\n }\n\n private async updateChildrenSilently(checked: boolean) {\n const children = this.findChildren();\n for (const child of children) {\n const childInstance = (child as any)['__stencil_instance'];\n if (childInstance) {\n childInstance.setNodeState({ isChecked: checked, partialChecked: false }, false);\n await childInstance.updateChildrenSilently(checked);\n }\n }\n }\n\n @Watch('expanded')\n handleExpandedChange(newValue: boolean) {\n this.ifxTreeViewItemExpandChange.emit(newValue);\n }\n\n @Watch('disableItem')\n handleDisableItemChange(newValue: boolean) {\n this.ifxTreeViewItemDisableChange.emit(newValue);\n }\n\n private setNodeState(state: TreeState, emitEvent = true) {\n this.isChecked = state.isChecked;\n this.partialChecked = state.partialChecked;\n if (emitEvent) {\n this.ifxTreeViewItemCheckChange.emit({\n checked: this.isChecked,\n indeterminate: this.partialChecked,\n });\n }\n }\n\n private collectDescendantStates(checked: boolean) {\n const descendants: Array<{ label: string; checked: boolean; indeterminate: boolean }> = [];\n const collect = (el: Element) => {\n let instance: any = null;\n if (el === this.host) {\n instance = this;\n } else if ((el as any)['__stencil_instance']) {\n instance = (el as any)['__stencil_instance'];\n }\n const label = instance?.label ?? (el as any).label ?? '';\n descendants.push({\n label,\n checked,\n indeterminate: false,\n });\n Array.from(el.children)\n .forEach(child => {\n if (child.tagName === 'IFX-TREE-VIEW-ITEM') {\n collect(child);\n }\n });\n };\n collect(this.host);\n return descendants;\n }\n\n private async updateChildrenState(checked: boolean) {\n const children = this.findChildren();\n for (const child of children) {\n await (child as HTMLIfxTreeViewItemElement).componentOnReady();\n child.dispatchEvent(new CustomEvent('internal-check-state-change', {\n detail: { checked },\n bubbles: false,\n composed: true\n }));\n }\n }\n\n private findSiblingNodes(parent: HTMLElement): HTMLIfxTreeViewItemElement[] {\n const parentEl = parent.parentElement;\n if (!parentEl) return [];\n return Array.from(\n parentEl.querySelectorAll('ifx-tree-view-item')\n ).map(el => el as HTMLIfxTreeViewItemElement);\n }\n\n private updateParentState() {\n const parent = this.host.parentElement?.closest('ifx-tree-view-item') as HTMLIfxTreeViewItemElement;\n if (!parent) return;\n parent.componentOnReady().then(resolved => {\n const parentNode = resolved as unknown as TreeViewItem;\n if (!parentNode?.updateParentState) return;\n const siblings = this.findSiblingNodes(parent);\n const states = this.calculateSiblingStates(siblings);\n parentNode.setNodeState({\n isChecked: states.allChecked,\n partialChecked: !states.allChecked && states.someChecked\n });\n parentNode.updateParentState();\n });\n }\n\n private calculateSiblingStates(siblings: HTMLIfxTreeViewItemElement[]) {\n return {\n allChecked: siblings.every(sib => (sib as unknown as TreeViewItem).isChecked),\n someChecked: siblings.some(sib => {\n const node = sib as unknown as TreeViewItem;\n return node.isChecked || node.partialChecked;\n })\n };\n }\n\n private toggleExpand = () => {\n if (this.disabled) return;\n this.hasChildren && (this.expanded = !this.expanded);\n };\n\n private handleKeyDown = (event: KeyboardEvent) => {\n\n const allItems = Array.from(\n this.host\n .closest('ifx-tree-view')\n ?.querySelectorAll('ifx-tree-view-item') || []\n );\n\n const visibleItems = allItems.filter(item => {\n let parent = item.parentElement?.closest('ifx-tree-view-item');\n while (parent) {\n const parentCmp = parent as any;\n if (!(parentCmp.expandAllItems || parentCmp.expanded)) {\n return false;\n }\n parent = parent.parentElement?.closest('ifx-tree-view-item');\n }\n return true;\n });\n\n const currentIndex = visibleItems.findIndex(el => el === this.host);\n\n function focusLabelIcon(el: Element | null) {\n (el as HTMLElement | null)?.focus();\n }\n\n switch (event.key) {\n case 'ArrowDown': {\n event.preventDefault();\n let nextIndex = currentIndex + 1;\n while (nextIndex < visibleItems.length) {\n const next = visibleItems[nextIndex] as any;\n if (!next.disabled) {\n focusLabelIcon(next.shadowRoot?.querySelector('.tree-item__label-icon-container'));\n break;\n }\n nextIndex++;\n }\n break;\n }\n case 'ArrowUp': {\n event.preventDefault();\n let prevIndex = currentIndex - 1;\n while (prevIndex >= 0) {\n const prev = visibleItems[prevIndex] as any;\n if (!prev.disabled) {\n focusLabelIcon(prev.shadowRoot?.querySelector('.tree-item__label-icon-container'));\n break;\n }\n prevIndex--;\n }\n break;\n }\n case 'ArrowRight': {\n event.preventDefault();\n if (!this.isExpanded && this.hasChildren) {\n this.expanded = true;\n } else if (this.isExpanded && this.hasChildren) {\n const firstChild = this.host.querySelector('ifx-tree-view-item');\n if (firstChild && !(firstChild as any).disabled) {\n focusLabelIcon((firstChild as HTMLElement).shadowRoot?.querySelector('.tree-item__label-icon-container'));\n }\n }\n break;\n }\n case 'ArrowLeft': {\n event.preventDefault();\n if (this.isExpanded && this.hasChildren) {\n this.expanded = false;\n } else {\n const parent = this.host.parentElement?.closest('ifx-tree-view-item');\n if (parent && !(parent as any).disabled) {\n focusLabelIcon((parent as HTMLElement).shadowRoot?.querySelector('.tree-item__label-icon-container'));\n }\n }\n break;\n }\n case ' ':\n case 'Enter': {\n event.preventDefault();\n this.updateCheckState(!this.isChecked);\n break;\n }\n }\n };\n\n render() {\n return (\n <div\n class={{\n 'tree-item': true,\n 'tree-item--expanded': this.isExpanded,\n 'tree-item--has-children': this.hasChildren,\n 'tree-item--disabled': this.disabled,\n }}\n role=\"treeitem\"\n aria-expanded={this.isExpanded ? 'true' : 'false'}\n data-level={this.level}\n aria-disabled={this.disabled ? 'true' : undefined}\n aria-label={this.ariaLabel}\n >\n <div class=\"tree-item__content\">\n {this.renderCheckbox()}\n {this.renderHeader()}\n </div>\n {this.isExpanded && <div class=\"tree-item__children\"><slot/></div>}\n </div>\n );\n }\n\n private renderHeader() {\n return (\n <div\n class=\"tree-item__header\"\n style={{ paddingLeft: `${this.level * 24 + 10}px` }}\n onClick={this.handleHeaderClick}\n tabIndex={-1}\n aria-disabled={this.disabled ? 'true' : undefined}\n >\n {this.renderControls()}\n </div>\n );\n }\n\n private renderCheckbox() {\n return (\n <div class=\"tree-item__checkbox-container\" onClick={e => e.stopPropagation()}>\n <ifx-checkbox\n size='s'\n checked={this.isChecked}\n indeterminate={this.partialChecked}\n onIfxChange={this.handleCheckboxChange}\n disabled={this.disabled}\n />\n </div>\n );\n }\n\n private renderControls() {\n return [\n this.hasChildren && (\n <div class=\"tree-item__chevron-container\" onClick={this.toggleExpand}>\n <ifx-icon class={`tree-item__chevron ${this.isExpanded ? 'chevron-down' : 'chevron-right'}`}\n icon=\"chevron-right-16\"/>\n <div class=\"tree-item__line\"/>\n </div>\n ),\n <div\n class=\"tree-item__label-icon-container\"\n tabIndex={this.disabled ? -1 : 0}\n onKeyDown={this.handleKeyDown}\n >\n <div class=\"tree-item__icon-container\">\n {\n this.hasChildren ? (\n <Fragment>\n <ifx-icon class={{'icon--hidden': this.isExpanded}} icon=\"folder-16\"/>\n <ifx-icon class={{'icon--hidden': !this.isExpanded}} icon=\"folder-open-16\"/>\n </Fragment>\n ) : (\n <ifx-icon icon=\"file-16\"/>\n )\n }\n </div>\n <span class=\"tree-item__label\">{this.label}</span>\n </div>\n ];\n }\n}\n"]}
|
@@ -87,7 +87,7 @@ const meta = {
|
|
87
87
|
ifxTreeViewItemCheckChange: {
|
88
88
|
action: 'ifxTreeViewItemCheckChange',
|
89
89
|
table: { category: 'Custom Events' },
|
90
|
-
description: 'Fired when a tree item is checked/unchecked.',
|
90
|
+
description: 'Fired when a tree item is checked/unchecked. For parent items, includes affectedChildItems array with all affected descendants.',
|
91
91
|
},
|
92
92
|
ifxTreeViewItemDisableChange: {
|
93
93
|
action: 'ifxTreeViewItemDisableChange',
|
@@ -143,7 +143,14 @@ const BaseTemplate = (args) => {
|
|
143
143
|
el.addEventListener('ifxTreeViewExpandAllChange', action('ifxTreeViewExpandAllChange'));
|
144
144
|
el.addEventListener('ifxTreeViewDisableAllChange', action('ifxTreeViewDisableAllChange'));
|
145
145
|
el.addEventListener('ifxTreeViewItemExpandChange', action('ifxTreeViewItemExpandChange'));
|
146
|
-
el.addEventListener('ifxTreeViewItemCheckChange',
|
146
|
+
el.addEventListener('ifxTreeViewItemCheckChange', (event) => {
|
147
|
+
const customEvent = event;
|
148
|
+
action('ifxTreeViewItemCheckChange')({
|
149
|
+
checked: customEvent.detail.checked,
|
150
|
+
indeterminate: customEvent.detail.indeterminate,
|
151
|
+
affectedChildItems: customEvent.detail.affectedChildItems || []
|
152
|
+
});
|
153
|
+
});
|
147
154
|
el.addEventListener('ifxTreeViewItemDisableChange', action('ifxTreeViewItemDisableChange'));
|
148
155
|
return el;
|
149
156
|
};
|
@@ -170,7 +177,7 @@ Default.argTypes = Object.assign(Object.assign(Object.assign({}, hideAllControls
|
|
170
177
|
}, ifxTreeViewItemCheckChange: {
|
171
178
|
action: 'ifxTreeViewItemCheckChange',
|
172
179
|
table: { category: 'Custom Events' },
|
173
|
-
description: 'Fired when a tree item is checked/unchecked.',
|
180
|
+
description: 'Fired when a tree item is checked/unchecked. For parent items, includes affectedChildItems array with all affected descendants.',
|
174
181
|
}, ifxTreeViewItemDisableChange: {
|
175
182
|
action: 'ifxTreeViewItemDisableChange',
|
176
183
|
table: { category: 'Custom Events' },
|
@@ -222,7 +229,14 @@ export const ContainerDemo = (args) => {
|
|
222
229
|
el.addEventListener('ifxTreeViewExpandAllChange', action('ifxTreeViewExpandAllChange'));
|
223
230
|
el.addEventListener('ifxTreeViewDisableAllChange', action('ifxTreeViewDisableAllChange'));
|
224
231
|
el.addEventListener('ifxTreeViewItemExpandChange', action('ifxTreeViewItemExpandChange'));
|
225
|
-
el.addEventListener('ifxTreeViewItemCheckChange',
|
232
|
+
el.addEventListener('ifxTreeViewItemCheckChange', (event) => {
|
233
|
+
const customEvent = event;
|
234
|
+
action('ifxTreeViewItemCheckChange')({
|
235
|
+
checked: customEvent.detail.checked,
|
236
|
+
indeterminate: customEvent.detail.indeterminate,
|
237
|
+
affectedChildItems: customEvent.detail.affectedChildItems || []
|
238
|
+
});
|
239
|
+
});
|
226
240
|
el.addEventListener('ifxTreeViewItemDisableChange', action('ifxTreeViewItemDisableChange'));
|
227
241
|
wrapper.appendChild(el);
|
228
242
|
return wrapper;
|
@@ -257,7 +271,14 @@ export const SingleItemStates = (args) => {
|
|
257
271
|
el.addEventListener('ifxTreeViewExpandAllChange', action('ifxTreeViewExpandAllChange'));
|
258
272
|
el.addEventListener('ifxTreeViewDisableAllChange', action('ifxTreeViewDisableAllChange'));
|
259
273
|
el.addEventListener('ifxTreeViewItemExpandChange', action('ifxTreeViewItemExpandChange'));
|
260
|
-
el.addEventListener('ifxTreeViewItemCheckChange',
|
274
|
+
el.addEventListener('ifxTreeViewItemCheckChange', (event) => {
|
275
|
+
const customEvent = event;
|
276
|
+
action('ifxTreeViewItemCheckChange')({
|
277
|
+
checked: customEvent.detail.checked,
|
278
|
+
indeterminate: customEvent.detail.indeterminate,
|
279
|
+
affectedChildItems: customEvent.detail.affectedChildItems || []
|
280
|
+
});
|
281
|
+
});
|
261
282
|
el.addEventListener('ifxTreeViewItemDisableChange', action('ifxTreeViewItemDisableChange'));
|
262
283
|
return el;
|
263
284
|
};
|