@genexus/genexus-ide-ui 0.0.108 → 0.0.109
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/ch-dropdown_2.cjs.entry.js +1 -1
- package/dist/cjs/ch-dropdown_2.cjs.entry.js.map +1 -1
- package/dist/cjs/ch-grid_8.cjs.entry.js +339 -321
- package/dist/cjs/ch-grid_8.cjs.entry.js.map +1 -1
- package/dist/cjs/ch-icon_5.cjs.entry.js +3 -1
- package/dist/cjs/ch-icon_5.cjs.entry.js.map +1 -1
- package/dist/cjs/ch-suggest_4.cjs.entry.js +1 -1
- package/dist/cjs/ch-suggest_4.cjs.entry.js.map +1 -1
- package/dist/cjs/ch-tree-view_5.cjs.entry.js +41 -20
- package/dist/cjs/ch-tree-view_5.cjs.entry.js.map +1 -1
- package/dist/cjs/{common-103f62f6.js → common-2e355c7d.js} +31 -1
- package/dist/cjs/common-2e355c7d.js.map +1 -0
- package/dist/cjs/genexus-ide-ui.cjs.js +1 -1
- package/dist/cjs/gx-ide-add-module-servers.cjs.entry.js +98 -0
- package/dist/cjs/gx-ide-add-module-servers.cjs.entry.js.map +1 -0
- package/dist/cjs/{gx-ide-container_2.cjs.entry.js → gx-ide-container_3.cjs.entry.js} +47 -4
- package/dist/cjs/gx-ide-container_3.cjs.entry.js.map +1 -0
- package/dist/cjs/gx-ide-create-kb-from-server.cjs.entry.js +2 -2
- package/dist/cjs/gx-ide-create-kb-from-server.cjs.entry.js.map +1 -1
- package/dist/cjs/gx-ide-edit-module-servers.cjs.entry.js +98 -0
- package/dist/cjs/gx-ide-edit-module-servers.cjs.entry.js.map +1 -0
- package/dist/cjs/gx-ide-empty-state_2.cjs.entry.js.map +1 -1
- package/dist/cjs/gx-ide-import-from-design.cjs.entry.js +1 -1
- package/dist/cjs/gx-ide-manage-module-references.cjs.entry.js +232 -0
- package/dist/cjs/gx-ide-manage-module-references.cjs.entry.js.map +1 -0
- package/dist/cjs/gx-ide-new-environment.cjs.entry.js +1 -1
- package/dist/cjs/gx-ide-new-kb.cjs.entry.js +1 -1
- package/dist/cjs/gx-ide-share-kb.cjs.entry.js +1 -1
- package/dist/cjs/gx-ide-status-buttons.cjs.entry.js +81 -0
- package/dist/cjs/gx-ide-status-buttons.cjs.entry.js.map +1 -0
- package/dist/cjs/gx-ide-ww-images.cjs.entry.js +1 -1
- package/dist/cjs/gxg-buttons-container_2.cjs.entry.js +184 -0
- package/dist/cjs/gxg-buttons-container_2.cjs.entry.js.map +1 -0
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/collection/collection-manifest.json +3 -0
- package/dist/collection/common/common.js +21 -0
- package/dist/collection/common/common.js.map +1 -1
- package/dist/collection/components/_helpers/container/container.css +6 -0
- package/dist/collection/components/_helpers/container/container.js +40 -0
- package/dist/collection/components/_helpers/container/container.js.map +1 -1
- package/dist/collection/components/_helpers/list-selector/list-selector-item/list-selector-item.js +1 -1
- package/dist/collection/components/_helpers/list-selector/list-selector.js +1 -1
- package/dist/collection/components/create-kb-from-server/create-kb-from-server.js +1 -1
- package/dist/collection/components/create-kb-from-server/create-kb-from-server.js.map +1 -1
- package/dist/collection/components/modules/add-module-servers/add-module-servers.css +560 -0
- package/dist/collection/components/modules/add-module-servers/add-module-servers.js +251 -0
- package/dist/collection/components/modules/add-module-servers/add-module-servers.js.map +1 -0
- package/dist/collection/components/modules/add-module-servers/gx-ide-assets/add-module-servers/langs/add-module-servers.lang.en.json +11 -0
- package/dist/collection/components/modules/add-module-servers/gx-ide-assets/add-module-servers/langs/add-module-servers.lang.ja.json +3 -0
- package/dist/collection/components/modules/add-module-servers/gx-ide-assets/add-module-servers/langs/add-module-servers.lang.zh.json +3 -0
- package/dist/collection/components/modules/edit-module-servers/edit-module-servers.css +560 -0
- package/dist/collection/components/modules/edit-module-servers/edit-module-servers.js +251 -0
- package/dist/collection/components/modules/edit-module-servers/edit-module-servers.js.map +1 -0
- package/dist/collection/components/modules/edit-module-servers/gx-ide-assets/edit-module-servers/langs/edit-module-servers.lang.en.json +11 -0
- package/dist/collection/components/modules/edit-module-servers/gx-ide-assets/edit-module-servers/langs/edit-module-servers.lang.ja.json +3 -0
- package/dist/collection/components/modules/edit-module-servers/gx-ide-assets/edit-module-servers/langs/edit-module-servers.lang.zh.json +3 -0
- package/dist/collection/components/modules/manage-module-references/gx-ide-assets/manage-module-references/langs/manage-module-references.lang.en.json +29 -0
- package/dist/collection/components/modules/manage-module-references/gx-ide-assets/manage-module-references/langs/manage-module-references.lang.ja.json +3 -0
- package/dist/collection/components/modules/manage-module-references/gx-ide-assets/manage-module-references/langs/manage-module-references.lang.zh.json +3 -0
- package/dist/collection/components/modules/manage-module-references/manage-module-references.css +723 -0
- package/dist/collection/components/modules/manage-module-references/manage-module-references.js +397 -0
- package/dist/collection/components/modules/manage-module-references/manage-module-references.js.map +1 -0
- package/dist/collection/components/modules/types.js +2 -0
- package/dist/collection/components/modules/types.js.map +1 -0
- package/dist/collection/pages/assets/common.js +7 -0
- package/dist/components/buttons-container.js +8 -3
- package/dist/components/buttons-container.js.map +1 -1
- package/dist/components/card.js.map +1 -1
- package/dist/components/ch-grid-column2.js +4 -1
- package/dist/components/ch-grid-column2.js.map +1 -1
- package/dist/components/ch-grid2.js +342 -322
- package/dist/components/ch-grid2.js.map +1 -1
- package/dist/components/combo-box.js +1 -1
- package/dist/components/common.js +30 -1
- package/dist/components/common.js.map +1 -1
- package/dist/components/container.js +9 -3
- package/dist/components/container.js.map +1 -1
- package/dist/components/dropdown.js +1 -1
- package/dist/components/dropdown.js.map +1 -1
- package/dist/components/form-checkbox.js +1 -1
- package/dist/components/form-radio-group.js +1 -1
- package/dist/components/form-text.js +1 -1
- package/dist/components/form-textarea.js +1 -1
- package/dist/components/form.js +1 -1
- package/dist/components/gx-ide-add-module-servers.d.ts +11 -0
- package/dist/components/gx-ide-add-module-servers.js +186 -0
- package/dist/components/gx-ide-add-module-servers.js.map +1 -0
- package/dist/components/gx-ide-ai-assistant.js +1 -1
- package/dist/components/gx-ide-bpm-app-declaration.js +2 -2
- package/dist/components/gx-ide-create-kb-from-server.js +3 -3
- package/dist/components/gx-ide-create-kb-from-server.js.map +1 -1
- package/dist/components/gx-ide-dashboard-home.js +2 -2
- package/dist/components/gx-ide-data-selector.js +2 -2
- package/dist/components/gx-ide-edit-module-servers.d.ts +11 -0
- package/dist/components/gx-ide-edit-module-servers.js +186 -0
- package/dist/components/gx-ide-edit-module-servers.js.map +1 -0
- package/dist/components/gx-ide-empty-state2.js +2 -2
- package/dist/components/gx-ide-import-from-design.js +2 -2
- package/dist/components/gx-ide-kb-manager-export.js +2 -2
- package/dist/components/gx-ide-kb-manager-import.js +2 -2
- package/dist/components/gx-ide-manage-module-references.d.ts +11 -0
- package/dist/components/gx-ide-manage-module-references.js +432 -0
- package/dist/components/gx-ide-manage-module-references.js.map +1 -0
- package/dist/components/gx-ide-new-environment.js +2 -2
- package/dist/components/gx-ide-new-kb.js +2 -2
- package/dist/components/gx-ide-new-object.js +2 -2
- package/dist/components/gx-ide-object-selector.js +2 -2
- package/dist/components/gx-ide-references.js +2 -2
- package/dist/components/gx-ide-share-kb.js +2 -2
- package/dist/components/gx-ide-start-page.js +2 -2
- package/dist/components/gx-ide-status-buttons2.js +1 -1
- package/dist/components/gx-ide-team-dev-commit.js +2 -2
- package/dist/components/gx-ide-team-dev-select-recent-comment.js +2 -2
- package/dist/components/gx-ide-team-dev-update-partial-selection.js +2 -2
- package/dist/components/gx-ide-team-dev-update-to-revision.js +2 -2
- package/dist/components/gx-ide-team-dev-update.js +2 -2
- package/dist/components/gx-ide-template.js +2 -2
- package/dist/components/gx-ide-title.js +1 -1
- package/dist/components/gx-ide-top-bar.js +1 -1
- package/dist/components/gx-ide-ww-images.js +2 -2
- package/dist/components/gxg-container.js +1 -1
- package/dist/components/gxg-form-checkbox-group2.js +1 -1
- package/dist/components/gxg-menu-slim-list.js +1 -1
- package/dist/components/gxg-title.js +1 -1
- package/dist/components/gxg-top-state-bar2.js +17 -8
- package/dist/components/gxg-top-state-bar2.js.map +1 -1
- package/dist/components/icon2.js +3 -1
- package/dist/components/icon2.js.map +1 -1
- package/dist/components/ide-loader.js +1 -1
- package/dist/components/list-box.js +1 -1
- package/dist/components/list-selector.js +1 -1
- package/dist/components/recent-news.js +2 -2
- package/dist/components/suggest.js +2 -2
- package/dist/components/suggest.js.map +1 -1
- package/dist/components/title-editable.js +1 -1
- package/dist/components/title.js +32 -31
- package/dist/components/title.js.map +1 -1
- package/dist/components/title2.js +31 -32
- package/dist/components/title2.js.map +1 -1
- package/dist/components/tree-view-item.js +8 -2
- package/dist/components/tree-view-item.js.map +1 -1
- package/dist/components/tree-view2.js +32 -15
- package/dist/components/tree-view2.js.map +1 -1
- package/dist/esm/ch-dropdown_2.entry.js +1 -1
- package/dist/esm/ch-dropdown_2.entry.js.map +1 -1
- package/dist/esm/ch-grid_8.entry.js +339 -321
- package/dist/esm/ch-grid_8.entry.js.map +1 -1
- package/dist/esm/ch-icon_5.entry.js +3 -1
- package/dist/esm/ch-icon_5.entry.js.map +1 -1
- package/dist/esm/ch-suggest_4.entry.js +1 -1
- package/dist/esm/ch-suggest_4.entry.js.map +1 -1
- package/dist/esm/ch-tree-view_5.entry.js +41 -20
- package/dist/esm/ch-tree-view_5.entry.js.map +1 -1
- package/dist/esm/{common-f2983db2.js → common-aaad5759.js} +31 -2
- package/dist/esm/common-aaad5759.js.map +1 -0
- package/dist/esm/genexus-ide-ui.js +1 -1
- package/dist/esm/gx-ide-add-module-servers.entry.js +94 -0
- package/dist/esm/gx-ide-add-module-servers.entry.js.map +1 -0
- package/dist/esm/{gx-ide-container_2.entry.js → gx-ide-container_3.entry.js} +47 -5
- package/dist/esm/gx-ide-container_3.entry.js.map +1 -0
- package/dist/esm/gx-ide-create-kb-from-server.entry.js +2 -2
- package/dist/esm/gx-ide-create-kb-from-server.entry.js.map +1 -1
- package/dist/esm/gx-ide-edit-module-servers.entry.js +94 -0
- package/dist/esm/gx-ide-edit-module-servers.entry.js.map +1 -0
- package/dist/esm/gx-ide-empty-state_2.entry.js.map +1 -1
- package/dist/esm/gx-ide-import-from-design.entry.js +1 -1
- package/dist/esm/gx-ide-manage-module-references.entry.js +228 -0
- package/dist/esm/gx-ide-manage-module-references.entry.js.map +1 -0
- package/dist/esm/gx-ide-new-environment.entry.js +1 -1
- package/dist/esm/gx-ide-new-kb.entry.js +1 -1
- package/dist/esm/gx-ide-share-kb.entry.js +1 -1
- package/dist/esm/gx-ide-status-buttons.entry.js +77 -0
- package/dist/esm/gx-ide-status-buttons.entry.js.map +1 -0
- package/dist/esm/gx-ide-ww-images.entry.js +1 -1
- package/dist/esm/gxg-buttons-container_2.entry.js +179 -0
- package/dist/esm/gxg-buttons-container_2.entry.js.map +1 -0
- package/dist/esm/loader.js +1 -1
- package/dist/genexus-ide-ui/genexus-ide-ui.css +5 -3
- package/dist/genexus-ide-ui/genexus-ide-ui.esm.js +1 -1
- package/dist/genexus-ide-ui/genexus-ide-ui.esm.js.map +1 -1
- package/dist/genexus-ide-ui/gx-ide-assets/add-module-servers/langs/add-module-servers.lang.en.json +11 -0
- package/dist/genexus-ide-ui/gx-ide-assets/add-module-servers/langs/add-module-servers.lang.ja.json +3 -0
- package/dist/genexus-ide-ui/gx-ide-assets/add-module-servers/langs/add-module-servers.lang.zh.json +3 -0
- package/dist/genexus-ide-ui/gx-ide-assets/edit-module-servers/langs/edit-module-servers.lang.en.json +11 -0
- package/dist/genexus-ide-ui/gx-ide-assets/edit-module-servers/langs/edit-module-servers.lang.ja.json +3 -0
- package/dist/genexus-ide-ui/gx-ide-assets/edit-module-servers/langs/edit-module-servers.lang.zh.json +3 -0
- package/dist/genexus-ide-ui/gx-ide-assets/manage-module-references/langs/manage-module-references.lang.en.json +29 -0
- package/dist/genexus-ide-ui/gx-ide-assets/manage-module-references/langs/manage-module-references.lang.ja.json +3 -0
- package/dist/genexus-ide-ui/gx-ide-assets/manage-module-references/langs/manage-module-references.lang.zh.json +3 -0
- package/dist/genexus-ide-ui/{p-2c1f414f.entry.js → p-0c0c3f1d.entry.js} +53 -53
- package/dist/genexus-ide-ui/{p-2c1f414f.entry.js.map → p-0c0c3f1d.entry.js.map} +1 -1
- package/dist/genexus-ide-ui/{p-b571e9c0.entry.js → p-0df39b62.entry.js} +5 -2
- package/dist/genexus-ide-ui/{p-b571e9c0.entry.js.map → p-0df39b62.entry.js.map} +1 -1
- package/dist/genexus-ide-ui/{p-419b2877.entry.js → p-1cb2d0df.entry.js} +80 -47
- package/dist/genexus-ide-ui/p-1cb2d0df.entry.js.map +1 -0
- package/dist/genexus-ide-ui/p-350f49ac.js +101 -0
- package/dist/genexus-ide-ui/p-350f49ac.js.map +1 -0
- package/dist/genexus-ide-ui/p-36544e00.entry.js +138 -0
- package/dist/genexus-ide-ui/p-36544e00.entry.js.map +1 -0
- package/dist/genexus-ide-ui/{p-ca7233a5.entry.js → p-39337325.entry.js} +81 -10
- package/dist/genexus-ide-ui/p-39337325.entry.js.map +1 -0
- package/dist/genexus-ide-ui/p-40121554.entry.js.map +1 -1
- package/dist/genexus-ide-ui/p-41ac8e60.entry.js +211 -0
- package/dist/genexus-ide-ui/p-41ac8e60.entry.js.map +1 -0
- package/dist/genexus-ide-ui/{p-001e085a.entry.js → p-51e86542.entry.js} +2 -2
- package/dist/genexus-ide-ui/{p-d14b5546.entry.js → p-6f5b13a7.entry.js} +4 -2
- package/dist/genexus-ide-ui/{p-d14b5546.entry.js.map → p-6f5b13a7.entry.js.map} +1 -1
- package/dist/genexus-ide-ui/{p-94015503.entry.js → p-786e5448.entry.js} +374 -380
- package/dist/genexus-ide-ui/p-786e5448.entry.js.map +1 -0
- package/dist/genexus-ide-ui/p-a46794f4.entry.js +138 -0
- package/dist/genexus-ide-ui/p-a46794f4.entry.js.map +1 -0
- package/dist/genexus-ide-ui/p-adaf7aff.entry.js +365 -0
- package/dist/genexus-ide-ui/p-adaf7aff.entry.js.map +1 -0
- package/dist/genexus-ide-ui/{p-afce38d4.entry.js → p-b2099890.entry.js} +2 -2
- package/dist/genexus-ide-ui/{p-513ec2ad.entry.js → p-b4e526d6.entry.js} +2 -2
- package/dist/genexus-ide-ui/p-b7d0697f.entry.js +138 -0
- package/dist/genexus-ide-ui/p-b7d0697f.entry.js.map +1 -0
- package/dist/genexus-ide-ui/{p-8e8bb528.entry.js → p-c14b6b77.entry.js} +2 -2
- package/dist/genexus-ide-ui/{p-8e8bb528.entry.js.map → p-c14b6b77.entry.js.map} +1 -1
- package/dist/genexus-ide-ui/{p-2c733995.entry.js → p-d5903356.entry.js} +2 -2
- package/dist/genexus-ide-ui/{p-05102700.entry.js → p-df72101e.entry.js} +2 -2
- package/dist/node_modules/@genexus/chameleon-controls-library/dist/collection/components/dropdown/dropdown.css +28 -28
- package/dist/node_modules/@genexus/chameleon-controls-library/dist/collection/components/tree-view/tree-view-item/tree-view-item.css +0 -2
- package/dist/node_modules/@genexus/gemini/dist/collection/components/buttons-container/buttons-container.css +11 -0
- package/dist/node_modules/@genexus/gemini/dist/collection/components/suggest/styles.css +1 -0
- package/dist/node_modules/@genexus/gemini/dist/collection/components/top-state-bar/gxg-top-state-bar.css +32 -41
- package/dist/node_modules/@genexus/gemini/dist/collection/components/tree-view/tree-view.css +37 -54
- package/dist/types/common/common.d.ts +2 -0
- package/dist/types/components/_helpers/container/container.d.ts +8 -0
- package/dist/types/components/modules/add-module-servers/add-module-servers.d.ts +60 -0
- package/dist/types/components/modules/edit-module-servers/edit-module-servers.d.ts +60 -0
- package/dist/types/components/modules/manage-module-references/manage-module-references.d.ts +98 -0
- package/dist/types/components/modules/types.d.ts +40 -0
- package/dist/types/components.d.ts +312 -52
- package/package.json +3 -3
- package/dist/cjs/common-103f62f6.js.map +0 -1
- package/dist/cjs/gx-ide-container_2.cjs.entry.js.map +0 -1
- package/dist/cjs/gx-ide-status-buttons_2.cjs.entry.js +0 -187
- package/dist/cjs/gx-ide-status-buttons_2.cjs.entry.js.map +0 -1
- package/dist/cjs/gxg-buttons-container.cjs.entry.js +0 -65
- package/dist/cjs/gxg-buttons-container.cjs.entry.js.map +0 -1
- package/dist/cjs/gxg-title.cjs.entry.js +0 -47
- package/dist/cjs/gxg-title.cjs.entry.js.map +0 -1
- package/dist/esm/common-f2983db2.js.map +0 -1
- package/dist/esm/gx-ide-container_2.entry.js.map +0 -1
- package/dist/esm/gx-ide-status-buttons_2.entry.js +0 -182
- package/dist/esm/gx-ide-status-buttons_2.entry.js.map +0 -1
- package/dist/esm/gxg-buttons-container.entry.js +0 -61
- package/dist/esm/gxg-buttons-container.entry.js.map +0 -1
- package/dist/esm/gxg-title.entry.js +0 -43
- package/dist/esm/gxg-title.entry.js.map +0 -1
- package/dist/genexus-ide-ui/p-419b2877.entry.js.map +0 -1
- package/dist/genexus-ide-ui/p-67406b36.entry.js +0 -71
- package/dist/genexus-ide-ui/p-67406b36.entry.js.map +0 -1
- package/dist/genexus-ide-ui/p-67ea84e8.js +0 -74
- package/dist/genexus-ide-ui/p-67ea84e8.js.map +0 -1
- package/dist/genexus-ide-ui/p-94015503.entry.js.map +0 -1
- package/dist/genexus-ide-ui/p-ca7233a5.entry.js.map +0 -1
- package/dist/genexus-ide-ui/p-cf5c3c10.entry.js +0 -270
- package/dist/genexus-ide-ui/p-cf5c3c10.entry.js.map +0 -1
- package/dist/genexus-ide-ui/p-d50b5b9a.entry.js +0 -67
- package/dist/genexus-ide-ui/p-d50b5b9a.entry.js.map +0 -1
- /package/dist/genexus-ide-ui/{p-001e085a.entry.js.map → p-51e86542.entry.js.map} +0 -0
- /package/dist/genexus-ide-ui/{p-afce38d4.entry.js.map → p-b2099890.entry.js.map} +0 -0
- /package/dist/genexus-ide-ui/{p-513ec2ad.entry.js.map → p-b4e526d6.entry.js.map} +0 -0
- /package/dist/genexus-ide-ui/{p-2c733995.entry.js.map → p-d5903356.entry.js.map} +0 -0
- /package/dist/genexus-ide-ui/{p-05102700.entry.js.map → p-df72101e.entry.js.map} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["scrollToEdge","event","container","scrollSpeed","scrollThreshold","mousePositionY","clientY","getBoundingClientRect","top","containerHeight","clientHeight","mouseAtTheTop","mouseAtTheBottom","scrollAmount","scrollTop","treeViewCss","TREE_ITEM_TAG_NAME","TREE_DROP_TAG_NAME","TREE_TAG_NAME","CHECKING","INVALID","TEMPORAL_INVALID","VALID","ITEM_SELECTOR","treeItemId","TEXT_FORMAT","ARROW_DOWN_KEY","ARROW_UP_KEY","EDIT_KEY","isTreeDrop","element","tagName","toLowerCase","isTreeItem","isTreeItemOrTreeDrop","elementTagName","getFocusedTreeItem","focusComposedPath","find","canMoveTreeItemFocus","treeItem","editing","getDroppableZoneKey","newContainerId","draggedItems","dropType","JSON","stringify","POSITION_X_DRAG_CUSTOM_VAR","POSITION_Y_DRAG_CUSTOM_VAR","ChTreeView","_a$2","constructor","hostRef","_keyDownEvents","set","this","preventDefault","focusNextItem","mouseEventModifierKey","focusPreviousItem","editable","_draggingSelectedItems","_needForRAF","_lastDragEvent","_openSubTreeTimeout","_validDroppableZoneCache","Map","_dragStartTimestamp","_draggedItems","_currentDraggedItem","_lastOpenSubTreeItem","_dragInfo","_draggedIds","_draggedParentIds","_getDropTypeAndTreeItemTarget","eventTarget","targetIsTreeItem","type","nextElementSibling","previousElementSibling","_cancelSubTreeOpening","treeItemOrTreeDrop","forceClear","__classPrivateFieldGet","clearTimeout","__classPrivateFieldSet","_getTreeViewItemRef","itemId","el","querySelector","_validDroppableZone","treeItemTarget","cacheKey","id","droppableZoneState","get","lazyLoad","downloading","dataTransfer","effectAllowed","dropDisabled","draggingInTree","includes","droppableZoneEnter","emit","newContainer","metadata","_openSubTreeAfterCountdown","currentTarget","leaf","expanded","setTimeout","expandedItemChange","openSubTreeCountdown","_trackItemDrag","draggingInATree","target","closest","stopImmediatePropagation","_updateDropEffect","call","requestAnimationFrame","style","setProperty","clientX","itemTarget","containerTargetTagName","dragEnterInformation","dropEffect","_resetVariables","_checkDragValidityAndUpdateDragInfo","dragInfo","draggedElement","elem","selectedItemsInfo","selectedItemsCallback","isDraggingSelectedItems","has","dataTransferInfo","dragIsEnabledForAllItems","selectedItemKeys","keys","selectedItemValues","values","selectedItemCount","length","every","dragDisabled","map","caption","toString","_getDirectParentsOfDraggableItems","data","dragEvent","setData","_fixScrollPositionOnDrag","draggingSelectedItems","parentTreeItemElem","parentElement","push","forEach","selectedItem","parentId","draggingInTheDocument","multiSelection","undefined","scrollToEdgeOnDrag","waitDropProcessing","onContextMenu","itemContextmenu","itemRef","contextmenuEvent","onKeyDown","keyHandler","key","onDragStart","clear","getData","paredData","parse","Date","getTime","_b","onDragEnd","onDragEnter","stopPropagation","dragState","onDragLeave","onDrop","itemsDropped","dropInTheSameTree","onItemDragStart","document","addEventListener","capture","allItemsCanBeDragged","detail","onItemDragEnd","removeEventListener","onSelectedItemChange","selectedItemInfo","ctrlKeyPressed","selected","delete","selectedItemsChange","scrollIntoVisible","readTask","writeTask","scrollIntoView","updateValidDropZone","requestTimestamp","validDrop","droppableZoneKey","shouldUpdateDragEnterInCurrentContainer","disconnectedCallback","render","h","Host","class","role","part","INITIAL_LEVEL","EVEN_LEVEL","ODD_LEVEL","getTreeItemLevelPart","evenLevel","removeTreeViewItems","items","flattenedTreeModel","flattenedCheckboxTreeModel","selectedItems","atLeastOneElement","atLeastOneCheckbox","atLeastOneSelected","itemUIModel","itemInfo","item","parentArray","parentItem","subItemsId","removeElement","findIndex","resolveNewPromise","value","Promise","resolve","scrollIntoVisibleId","path","visitedNode","visitedNodeUIModel","scrollIntoVisiblePath","async","elementRef","rootNode","lazyLoadTreeItemsCallback","pathHasRepeatedElements","Set","size","indexOfLastItemInPath","lastRenderedItemInPath","indexOfLastRenderItem","thereAreMoreItemsToLazyLoad","canNotLazyLoadRemainingPath","parentUIModel","forceUpdate","nextIndexToLazyLoad","lazy","result","loadLazyContent","treeViewDropCss","ChTreeViewDrop","level","canShowLines","levelPart","treeViewItemCss","DISTANCE_TO_CHECKBOX_CUSTOM_VAR","DIRECT_TREE_ITEM_CHILDREN","FIRST_ENABLED_SUB_ITEM","LAST_SUB_ITEM","DOWNLOADING_CLASS","EDITING_CLASS","NOT_EDITING_CLASS","DRAG_ENTER_CLASS","DENY_DROP_CLASS","EXPANDABLE_ID","ENTER_KEY","ESCAPE_KEY","getCheckboxExportPart","CHECKBOX_EXPORT_PARTS","join","ChTreeViewItem","_a$1","_watcher","_ignoreCheckboxChange","_headerRef","_inputRef","_getDirectTreeItems","Array","from","querySelectorAll","_setResizeObserver","ResizeObserver","distanceToCheckbox","height","observe","_disconnectObserver","disconnect","_checkIfShouldRemoveEditMode","code","commitEdition","_removeEditMode","_removeEditModeOnClick","composedPath","pointerType","shouldFocusHeader","newCaption","trim","modifyCaption","focus","_toggleExpand","selectedItemChange","_getSelectedInfo","_lazyLoadItems","_toggleSelected","_setSelected","_toggleOrSelect","expandOnClick","_handleActionDblClick","_emitOpenReference","_handleActionClick","_handleActionKeyDown","openReference","_handleCheckedChange","checked","indeterminate","checkboxChange","_renderImg","cssClass","src","imageType","alt","loading","_handleDragStart","removeDragImage","itemDragStart","_handleDragEnd","itemDragEnd","checkbox","customRender","disabled","endImgSrc","endImgType","expandableButton","lastItem","showDownloadingSpinner","showLines","startImgSrc","startImgType","toggleCheckboxes","updateChildrenCheckedValue","newValue","treeItems","updateChecked","editingChanged","isEditing","expandedChanged","isExpanded","lastItemChanged","isLastItem","showLinesChanged","newShowLines","updateCheckboxValue","updatedCheck","allItemsHaveTheSameCheckedValue","eventMustBeEmitted","checkboxToggleChange","subItem","setFocus","focusNextSibling","nextSiblingItem","previousSiblingItem","focusLastItem","lastSubItem","newChecked","newIndeterminate","componentWillLoad","componentDidLoad","hasContent","showAllLines","showLastLine","pseudoStartImage","isPseudoElementImg","pseudoEndImage","header","tokenMap","onClick","draggable","ref","accessibleName","exportparts","checkedValue","unCheckedValue","onInput","name","action","onDblClick","onBlur","expandable","itemHasCheckbox","defaultCheckbox","filterWithCase","stringToFilter","filter","matchCase","filterWithString","filterOptions","regularExpression","match","filterDictionary","filterInfo","defaultChecked","list","filterSet","none","unchecked","computeFilter","filterType","hideMatchesAndShowNonMatches","reloadItems","removeItems","beforeProperties","afterProperties","itemToReloadUIModel","noProperties","updateItemsProperties","newItems","oldItemsSet","reloadNewItemsQueue","newItem","newItemOldUIModel","newItemOldInfo","newItemWasLazyLoaded","allSettled","itemToReload","updateItemProperty","properties","newSelectedItems","newCheckboxItems","Object","propertyName","add","treeViewRenderCss","ROOT_ID","DEFAULT_DRAG_DISABLED_VALUE","DEFAULT_DROP_DISABLED_VALUE","DEFAULT_EDITABLE_ITEMS_VALUE","DEFAULT_EXPANDED_VALUE","DEFAULT_INDETERMINATE_VALUE","DEFAULT_LAZY_VALUE","DEFAULT_ORDER_VALUE","DEFAULT_SELECTED_VALUE","treeViewHasFilters","gxDragDisabled","itemModel","treeState","dragEnabled","gxDropDisabled","dropEnabled","isItemDisabled","useGxRender","treeDropId","defaultRenderItem","treeHasFilter","dropBeforeAndAfterEnabled","_c","treeViewItemCssClass","enabled","_d","_e","editableItems","fromGxImageToURL","gxSettings","gxImageConstructor","_f","_g","_h","subModel","index","lastItemId","dropMode","defaultSortItemsCallback","sort","a","b","order","ChTreeViewRender","_a","_flattenedTreeModel","_flattenedCheckboxTreeModel","_selectedItems","_selectedChangeScheduled","_checkedChangeScheduled","_rootNode","_applyFilters","_immediateFilter","_filterTimeout","_filterListAsSet","_treeRef","_getItemsInfo","itemsId","treeViewItemsInfo","_handleDroppableZoneEnter","checkDroppableZoneCallback","dropInformation","promise","then","_handleSelectedItemsChange","itemsToProcess","previousSelectedItems","selectedItemId","itemIsStillSelected","newSelectedItemInfo","newSelectedItem","_updateSelectedItems","_handleExpandedItemChange","_handleItemContextmenu","_handleItemsDropped","newParentId","dropItemsCallback","response","dropItems","acceptDrop","_removeAllSelectedItemsExceptForTheLast","currentSelectedItems","selectedItemsArray","lastItemIndex","_scheduleSelectedItemsChange","_moveItemToNewParent","newParentItem","specificIndex","itemUIModelExtended","oldParentItem","oldIndex","newIndex","insertIntoIndex","_flattenSubModel","model","_sortItems","_flattenItemUIModel","parentModel","_itemHasCheckbox","_treeHasFilters","sortItemsCallback","_flattenModel","treeModel","_scheduleFilterProcessing","_scheduleCheckedItemsChange","_filterSubModel","currentCheckboxItems","aSubItemIsRendered","itemSatisfiesFilter","satisfiesFilter","_updateCheckedItems","allItemsWithCheckbox","checkedItemsChange","immediateFilter","_checkIfThereAreDifferentItemsWithCheckbox","_","_checkIfThereAreDifferentSelectedItems","_updateFilters","itemsWithCheckbox","_validateCheckedAndSelectedItems","processWithDebounce","filterDebounce","filterFunction","currentCheckedItems","_getSelectedItemsCallback","filterList","modifyItemCaptionCallback","renderItem","filterChanged","filterDebounceChanged","filterListChanged","filterOptionsChanged","filterTypeChanged","multiSelectionChanged","newMultiSelection","treeModelChanged","newParentUIModel","actualParent","specificIndexToInsert","getItemsInfo","itemToLazyLoadContent","removeItemsResult","success","hasOnlyTheItemId","parentInfo","toggleItems","treeItemIds","expand","modifiedTreeItems","updateAllItemsProperties","onCheckboxChange","onLoadLazyContent","onModifyCaption","oldCaption","status","onOpenReference","itemOpenReference","componentWillRender","onDroppableZoneEnter","onExpandedItemChange","onItemContextmenu","onItemsDropped","onSelectedItemsChange","resolveImgPath","iconAssetsPath","img","getAssetPath","ChTreeViewRenderWrapper","treeRef"],"sources":["node_modules/@genexus/chameleon-controls-library/dist/collection/common/scroll-to-edge.js","node_modules/@genexus/chameleon-controls-library/dist/collection/components/tree-view/tree-view/tree-view.css?tag=ch-tree-view","node_modules/@genexus/chameleon-controls-library/dist/collection/components/tree-view/tree-view/tree-view.js","node_modules/@genexus/chameleon-controls-library/dist/collection/components/renders/tree-view/utils.js","node_modules/@genexus/chameleon-controls-library/dist/collection/components/tree-view/tree-view-drop/tree-view-drop.css?tag=ch-tree-view-drop&encapsulation=shadow","node_modules/@genexus/chameleon-controls-library/dist/collection/components/tree-view/tree-view-drop/tree-view-drop.js","node_modules/@genexus/chameleon-controls-library/dist/collection/components/tree-view/tree-view-item/tree-view-item.css?tag=ch-tree-view-item&encapsulation=shadow","node_modules/@genexus/chameleon-controls-library/dist/collection/components/tree-view/tree-view-item/tree-view-item.js","node_modules/@genexus/chameleon-controls-library/dist/collection/components/renders/tree-view/helpers.js","node_modules/@genexus/chameleon-controls-library/dist/collection/components/renders/tree-view/reload-items.js","node_modules/@genexus/chameleon-controls-library/dist/collection/components/renders/tree-view/update-item-property.js","node_modules/@genexus/chameleon-controls-library/dist/collection/components/renders/tree-view/tree-view-render.css?tag=ch-tree-view-render","node_modules/@genexus/chameleon-controls-library/dist/collection/components/renders/tree-view/tree-view-render.js","node_modules/@genexus/gemini/dist/collection/components/tree-view/helpers.js","node_modules/@genexus/gemini/dist/collection/components/tree-view/tree-view.css?tag=gxg-tree-view","node_modules/@genexus/gemini/dist/collection/components/tree-view/tree-view.js"],"sourcesContent":["export const scrollToEdge = (event, container, scrollSpeed, scrollThreshold) => {\n const mousePositionY = event.clientY - container.getBoundingClientRect().top;\n const containerHeight = container.clientHeight;\n const mouseAtTheTop = mousePositionY <= scrollThreshold;\n const mouseAtTheBottom = mousePositionY > containerHeight - scrollThreshold;\n if (mouseAtTheTop || mouseAtTheBottom) {\n const scrollAmount = mouseAtTheTop\n ? mousePositionY - scrollThreshold\n : mousePositionY - (containerHeight - scrollThreshold);\n // Adjust container scroll position\n container.scrollTop += scrollAmount / scrollSpeed;\n }\n};\n//# sourceMappingURL=scroll-to-edge.js.map\n","ch-tree-view {\n --ch-tree-view-item__checkbox-size: 0.875em;\n --ch-tree-view-item__expandable-button-size: 0.875em;\n --ch-tree-view-item__image-size: 0.875em;\n --ch-tree-view-item__dashed-line--inset-inline-start: 0px;\n --ch-tree-view-item__dashed-line--inset-inline-end: 4px;\n --ch-tree-view-item-gap: 5px;\n --ch-tree-view-item-custom-padding-inline-start: 0px;\n --ch-tree-tab-size: calc(\n var(--ch-tree-view-item__image-size) +\n var(--ch-tree-view-item__expandable-button-size) +\n (var(--ch-tree-view-item-gap) * 2)\n );\n display: flex;\n position: relative;\n block-size: 100%;\n inline-size: 100%;\n overflow: auto;\n}\nch-tree-view > .ch-tree-view-container {\n position: absolute;\n inset: 0;\n}\nch-tree-view.ch-tree-view-dragging-item ch-tree-view-item {\n pointer-events: var(--ch-tree-view-pointer-events, all);\n}\nch-tree-view.ch-tree-view-dragging-item .ch-tree-view-list-item--deny-drop {\n pointer-events: none;\n}\nch-tree-view.ch-tree-view--dragging-selected-items ch-tree-view-item[selected] {\n --ch-tree-view-pointer-events: none;\n}\nch-tree-view.ch-tree-view-waiting-drop-processing {\n cursor: wait;\n}\nch-tree-view.ch-tree-view-waiting-drop-processing > .ch-tree-view-container {\n pointer-events: none;\n}\n\nch-tree-view-item::part(header),\nch-tree-view-drop {\n --own-offset: 0px;\n --ch-tree-view-item-indentation: calc(\n var(--ch-tree-tab-size) * var(--level) - var(--own-offset) -\n var(--parent-offset, 0px) +\n var(--ch-tree-view-item-custom-padding-inline-start)\n );\n}\n\nch-tree-view-item::part(header expand-button),\nch-tree-view-drop {\n --own-offset: calc(\n var(--ch-tree-view-item__expandable-button-size) +\n var(--ch-tree-view-item-gap)\n );\n}\n\nch-tree-view-item::part(header even-level),\nch-tree-view-drop.gx-even-level {\n --parent-offset: var(--parent-offset-odd);\n}\n\nch-tree-view-item::part(header odd-level),\nch-tree-view-drop.gx-odd-level {\n --parent-offset: var(--parent-offset-even);\n}\n\nch-tree-view-drop {\n margin-inline-start: var(--ch-tree-view-item-indentation);\n}\n\nch-tree-view-item::part(header) {\n padding-inline-start: var(--ch-tree-view-item-indentation);\n}\nch-tree-view-item::part(expandable even-level) {\n --parent-offset-even: calc(\n var(--ch-tree-view-item__expandable-button-size) +\n var(--ch-tree-view-item-gap) + var(--parent-offset-odd, 0px)\n );\n}\nch-tree-view-item::part(expandable odd-level) {\n --parent-offset-odd: calc(\n var(--ch-tree-view-item__expandable-button-size) +\n var(--ch-tree-view-item-gap) + var(--parent-offset-even, 0px)\n );\n}\nch-tree-view-item > ch-tree-view-drop:first-child {\n transform: translateY(0);\n}\nch-tree-view-item > ch-tree-view-drop:first-child::after {\n inset-block-start: 0px;\n}\nch-tree-view-item > ch-tree-view-drop:last-child {\n transform: translateY(calc(var(--ch-tree-view-drop--size) * -1));\n}\nch-tree-view-item > ch-tree-view-drop:last-child::after {\n inset-block-start: calc(var(--ch-tree-view-drop--size) * 0.5);\n}\n\n.ch-tree-view-drag-info {\n --rtl-offset: 16px;\n position: fixed;\n left: 0;\n top: 0;\n transform: translate(calc(var(--ch-tree-view-dragging-item-x) + var(--rtl-offset)), calc(var(--ch-tree-view-dragging-item-y) + 8px));\n pointer-events: none;\n z-index: 1;\n animation: ch-tree-view-drag-info-fade-in 10ms;\n}\n\n@keyframes ch-tree-view-drag-info-fade-in {\n 0%, 100% {\n opacity: 0;\n }\n}\nhtml[dir=rtl] .ch-tree-view-drag-info {\n --rtl-offset: -100%;\n}","import { Host, h, readTask, writeTask } from \"@stencil/core\";\nimport { focusComposedPath, mouseEventModifierKey } from \"../../common/helpers\";\nimport { scrollToEdge } from \"../../../common/scroll-to-edge\";\nconst TREE_ITEM_TAG_NAME = \"ch-tree-view-item\";\nconst TREE_DROP_TAG_NAME = \"ch-tree-view-drop\";\nconst TREE_TAG_NAME = \"ch-tree-view\";\n// Droppable zone states\nconst CHECKING = \"checking\";\nconst INVALID = \"invalid\";\nconst TEMPORAL_INVALID = \"temporal-invalid\";\nconst VALID = \"valid\";\n// Selectors\n// const CHECKED_ITEMS = `${TREE_ITEM_TAG_NAME}[checked]`;\nconst ITEM_SELECTOR = (treeItemId) => `${TREE_ITEM_TAG_NAME}[id=\"${treeItemId}\"]`;\nconst TEXT_FORMAT = \"text/plain\";\nconst ARROW_DOWN_KEY = \"ArrowDown\";\nconst ARROW_UP_KEY = \"ArrowUp\";\nconst EDIT_KEY = \"F2\";\nconst isTreeDrop = (element) => element.tagName.toLowerCase() === TREE_DROP_TAG_NAME;\nconst isTreeItem = (element) => element.tagName.toLowerCase() === TREE_ITEM_TAG_NAME;\nconst isTreeItemOrTreeDrop = (elementTagName) => elementTagName === TREE_ITEM_TAG_NAME ||\n elementTagName === TREE_DROP_TAG_NAME;\nconst getFocusedTreeItem = () => focusComposedPath().find(isTreeItem);\nconst canMoveTreeItemFocus = (treeItem) => treeItem && !treeItem.editing;\nconst getDroppableZoneKey = (newContainerId, draggedItems, dropType) => `\"newContainerId\":\"${newContainerId}\",\"metadata\":\"${JSON.stringify(draggedItems)}\",\"dropType\":\"${dropType}\"`;\nconst POSITION_X_DRAG_CUSTOM_VAR = \"--ch-tree-view-dragging-item-x\";\nconst POSITION_Y_DRAG_CUSTOM_VAR = \"--ch-tree-view-dragging-item-y\";\nexport class ChTreeView {\n constructor() {\n this.draggingInTheDocument = false;\n this.draggingInTree = false;\n this.multiSelection = false;\n this.openSubTreeCountdown = 750;\n this.selectedItemsCallback = undefined;\n this.scrollToEdgeOnDrag = true;\n this.waitDropProcessing = false;\n }\n // @todo TODO: Check if key codes works in Safari\n #keyDownEvents = {\n [ARROW_DOWN_KEY]: event => {\n const treeItem = getFocusedTreeItem();\n if (!canMoveTreeItemFocus(treeItem)) {\n return;\n }\n event.preventDefault();\n treeItem.focusNextItem(mouseEventModifierKey(event));\n },\n [ARROW_UP_KEY]: event => {\n const treeItem = getFocusedTreeItem();\n if (!canMoveTreeItemFocus(treeItem)) {\n return;\n }\n event.preventDefault();\n treeItem.focusPreviousItem(mouseEventModifierKey(event));\n },\n [EDIT_KEY]: event => {\n const treeItem = getFocusedTreeItem();\n if (!treeItem || !treeItem.editable) {\n return;\n }\n event.preventDefault();\n treeItem.editing = true;\n }\n };\n #draggingSelectedItems = false;\n #needForRAF = true; // To prevent redundant RAF (request animation frame) calls\n #lastDragEvent;\n #openSubTreeTimeout;\n /**\n * Cache to avoid duplicate requests when checking the droppable zone in the\n * same drag event.\n */\n // eslint-disable-next-line @stencil-community/own-props-must-be-private\n #validDroppableZoneCache = new Map();\n #dragStartTimestamp; // Useful to avoid race conditions where the server response is slow\n #draggedItems;\n // Refs\n #currentDraggedItem;\n #lastOpenSubTreeItem;\n /**\n * Text displayed when dragging an item.\n */\n // eslint-disable-next-line @stencil-community/own-props-must-be-private\n #dragInfo;\n #draggedIds = [];\n #draggedParentIds = [];\n el;\n /**\n * Fired when an element attempts to enter in a droppable zone where the tree\n * has no information about the validity of the drop.\n */\n droppableZoneEnter;\n /**\n * Fired when an item is expanded or collapsed.\n */\n expandedItemChange;\n /**\n * Fired when an element displays its contextmenu.\n */\n itemContextmenu;\n /**\n * Fired when the dragged items are dropped in another item of the tree.\n */\n itemsDropped;\n /**\n * Fired when the selected items change.\n */\n selectedItemsChange;\n onContextMenu(event) {\n const treeItem = event.target.closest(TREE_ITEM_TAG_NAME);\n if (!treeItem) {\n return;\n }\n event.preventDefault();\n this.itemContextmenu.emit({\n id: treeItem.id,\n itemRef: treeItem,\n metadata: treeItem.metadata,\n contextmenuEvent: event\n });\n }\n // Set edit mode in items\n onKeyDown(event) {\n const keyHandler = this.#keyDownEvents[event.key];\n if (keyHandler) {\n keyHandler(event);\n }\n }\n // We can't use capture, because the dataTransfer info would not be defined\n // Also, we cant use capture and setTimeout with 0 seconds, because the\n // getData method can only be accessed during the dragstart and drop event\n onDragStart(event) {\n // Reset the validity of the droppable zones with each new drag start\n this.#validDroppableZoneCache.clear();\n // If there is no data, the dragstart does not achieve the interface required\n const data = event.dataTransfer.getData(TEXT_FORMAT);\n if (data === \"\") {\n return;\n }\n try {\n // Try to parse the data\n const paredData = JSON.parse(data);\n this.#draggedItems = paredData;\n this.draggingInTheDocument = true;\n this.#dragStartTimestamp = new Date().getTime();\n }\n catch {\n // Empty\n }\n }\n onDragEnd() {\n this.draggingInTheDocument = false;\n }\n onDragEnter(event) {\n this.#cancelSubTreeOpening(null, true);\n event.stopPropagation();\n // The event target can be either a tree item or a tree drop element\n const eventTarget = event.target;\n const containerTargetTagName = eventTarget.tagName.toLowerCase();\n // Check if it is a valid item\n if (!isTreeItemOrTreeDrop(containerTargetTagName)) {\n return;\n }\n const targetIsTreeItem = containerTargetTagName === TREE_ITEM_TAG_NAME;\n const dragEnterInformation = this.#getDropTypeAndTreeItemTarget(eventTarget, targetIsTreeItem);\n const treeItemTarget = dragEnterInformation.treeItem;\n const dropType = dragEnterInformation.dropType;\n this.#lastOpenSubTreeItem = eventTarget;\n // Only the tree view items can open its subtree when hovering\n if (targetIsTreeItem) {\n this.#openSubTreeAfterCountdown(treeItemTarget);\n }\n if (this.#validDroppableZone(event, treeItemTarget, dropType) === VALID) {\n eventTarget.dragState = \"enter\";\n }\n }\n onDragLeave(event) {\n const currentTarget = event.target;\n if (!isTreeItemOrTreeDrop(currentTarget.tagName.toLowerCase())) {\n return;\n }\n currentTarget.dragState = \"none\";\n if (isTreeItem(currentTarget)) {\n this.#cancelSubTreeOpening(currentTarget);\n }\n }\n #getDropTypeAndTreeItemTarget = (eventTarget, targetIsTreeItem) => {\n // Only the tree view items can open its subtree when hovering\n if (targetIsTreeItem) {\n return {\n treeItem: eventTarget,\n dropType: \"above\"\n };\n }\n // The drop is intended to be performed before or after the tree item\n const dropType = eventTarget.type;\n return {\n // Depending on the position of the tree drop, we get the treeItem ref\n treeItem: (dropType === \"before\"\n ? eventTarget.nextElementSibling\n : eventTarget.previousElementSibling),\n dropType: eventTarget.type\n };\n };\n #cancelSubTreeOpening = (treeItemOrTreeDrop, forceClear = false) => {\n if (this.#lastOpenSubTreeItem === treeItemOrTreeDrop || forceClear) {\n clearTimeout(this.#openSubTreeTimeout);\n this.#lastOpenSubTreeItem = null;\n }\n };\n onDrop(event) {\n event.stopPropagation();\n this.#cancelSubTreeOpening(null, true);\n const eventTarget = event.target;\n const containerTargetTagName = eventTarget.tagName.toLowerCase();\n // Check if it is a valid item\n if (!isTreeItemOrTreeDrop(containerTargetTagName)) {\n return;\n }\n // Remove drag enter mode\n eventTarget.dragState = \"none\";\n const targetIsTreeItem = containerTargetTagName === TREE_ITEM_TAG_NAME;\n const dragEnterInformation = this.#getDropTypeAndTreeItemTarget(eventTarget, targetIsTreeItem);\n const treeItemTarget = dragEnterInformation.treeItem;\n const dropType = dragEnterInformation.dropType;\n // The droppable zone must be checked, even if it was marked as not valid\n // @todo Try to drop an item with high delays in droppable zone checking\n if (this.#validDroppableZone(event, treeItemTarget, dropType) !== VALID) {\n return;\n }\n // TODO: Check dataTransfer format before parsing?\n const draggedItems = JSON.parse(event.dataTransfer.getData(TEXT_FORMAT));\n this.itemsDropped.emit({\n newContainer: {\n id: treeItemTarget.id,\n metadata: treeItemTarget.metadata\n },\n draggingSelectedItems: this.#draggingSelectedItems,\n draggedItems: draggedItems,\n dropInTheSameTree: this.draggingInTree,\n dropType: dropType\n });\n }\n onItemDragStart(event) {\n // Avoid bubbling as this event can listened in other components (e.g. ch-flexible-layout)\n event.stopPropagation();\n document.addEventListener(\"dragover\", this.#trackItemDrag, {\n capture: true\n });\n this.#currentDraggedItem = event.target;\n const allItemsCanBeDragged = this.#checkDragValidityAndUpdateDragInfo(event.detail);\n if (!allItemsCanBeDragged) {\n // This effect disables drop interactions in all page elements, so there\n // is no need to capture and prevent the drop event in the window\n event.detail.dragEvent.dataTransfer.effectAllowed = \"none\";\n return;\n }\n this.draggingInTree = true;\n if (this.scrollToEdgeOnDrag) {\n this.#fixScrollPositionOnDrag();\n }\n }\n onItemDragEnd() {\n this.draggingInTree = false;\n document.removeEventListener(\"dragover\", this.#trackItemDrag, {\n capture: true\n });\n // Reset not allowed droppable ids\n this.#resetVariables();\n }\n onSelectedItemChange(event) {\n event.stopPropagation();\n const selectedItemInfo = event.detail;\n const selectedItemsInfo = this.selectedItemsCallback();\n // If the Control key was not pressed or multi selection is disabled,\n // remove all selected items\n if (!selectedItemInfo.ctrlKeyPressed || !this.multiSelection) {\n // Clear selected items\n selectedItemsInfo.clear();\n }\n // If the item is selected, add it to list\n if (selectedItemInfo.selected) {\n selectedItemsInfo.set(selectedItemInfo.id, selectedItemInfo);\n }\n else {\n selectedItemsInfo.delete(selectedItemInfo.id);\n }\n // Sync with UI model\n this.selectedItemsChange.emit(selectedItemsInfo);\n }\n /**\n * Given an item id, it scrolls into the item's view.\n */\n async scrollIntoVisible(treeItemId) {\n readTask(() => {\n const itemRef = this.el.querySelector(ITEM_SELECTOR(treeItemId));\n if (!itemRef) {\n return;\n }\n writeTask(() => {\n itemRef.scrollIntoView();\n });\n });\n }\n /**\n * Update the information about the valid droppable zones.\n * @param requestTimestamp Time where the request to the server was made. Useful to avoid having old information.\n * @param newContainerId ID of the container where the drag is trying to be made.\n * @param draggedItems Information about the dragged items.\n * @param validDrop Current state of the droppable zone.\n */\n async updateValidDropZone(requestTimestamp, newContainerId, draggedItems, dropType, validDrop) {\n if (!this.draggingInTheDocument ||\n requestTimestamp <= this.#dragStartTimestamp) {\n return;\n }\n const droppableZoneKey = getDroppableZoneKey(newContainerId, draggedItems, dropType);\n this.#validDroppableZoneCache.set(droppableZoneKey, validDrop ? VALID : INVALID);\n // Don't show droppable zones if the dragEnter is invalid or the last\n // dragover was not performed in the same node that this method validates\n if (!validDrop || !this.#lastOpenSubTreeItem) {\n return;\n }\n const treeItemId = isTreeDrop(this.#lastOpenSubTreeItem)\n ? this.#lastOpenSubTreeItem.treeItemId\n : this.#lastOpenSubTreeItem.id;\n const shouldUpdateDragEnterInCurrentContainer = treeItemId === newContainerId;\n if (shouldUpdateDragEnterInCurrentContainer) {\n this.#lastOpenSubTreeItem.dragState = \"enter\";\n }\n }\n #getTreeViewItemRef = itemId => this.el.querySelector(ITEM_SELECTOR(itemId));\n #validDroppableZone = (event, treeItemTarget, dropType) => {\n const cacheKey = getDroppableZoneKey(treeItemTarget.id, this.#draggedItems, dropType);\n let droppableZoneState = this.#validDroppableZoneCache.get(cacheKey);\n // Invalidate the cache, because the item is no longer waiting for its\n // content to be downloaded\n if (droppableZoneState === TEMPORAL_INVALID &&\n !treeItemTarget.lazyLoad &&\n !treeItemTarget.downloading) {\n droppableZoneState = null;\n }\n // If there is a cached value, return the cached value\n if (droppableZoneState != null) {\n return droppableZoneState;\n }\n // Do not show drop zones if:\n // - The effect does not allow it.\n // - The drop is disabled in the container target when dragging \"above\".\n // - When dragging in the same tree, don't mark droppable zones if they are\n // the dragged items or their direct parents.\n //\n // There is no need to check the following case, because the tree drop is\n // not even rendered:\n // - When dragging \"before\" and \"after\" an item and the direct parent\n // has drops disabled.\n if (event.dataTransfer.effectAllowed === \"none\" ||\n (dropType === \"above\" && treeItemTarget.dropDisabled) ||\n (this.draggingInTree &&\n (this.#draggedIds.includes(treeItemTarget.id) ||\n this.#draggedParentIds.includes(treeItemTarget.id)))) {\n this.#validDroppableZoneCache.set(cacheKey, INVALID);\n return INVALID;\n }\n // Disable \"above\" drops when items need to lazy load their content first\n if (dropType === \"above\" &&\n (treeItemTarget.lazyLoad || treeItemTarget.downloading)) {\n this.#validDroppableZoneCache.set(cacheKey, TEMPORAL_INVALID);\n return TEMPORAL_INVALID;\n }\n // Otherwise, emit the event to check the droppable zone\n this.#validDroppableZoneCache.set(cacheKey, CHECKING);\n this.droppableZoneEnter.emit({\n newContainer: {\n id: treeItemTarget.id,\n metadata: treeItemTarget.metadata\n },\n draggedItems: this.#draggedItems,\n dropType: dropType\n });\n return CHECKING;\n };\n #openSubTreeAfterCountdown = (currentTarget) => {\n if (currentTarget.leaf || currentTarget.expanded) {\n return;\n }\n this.#openSubTreeTimeout = setTimeout(() => {\n currentTarget.expanded = true;\n this.expandedItemChange.emit({ id: currentTarget.id, expanded: true });\n }, this.openSubTreeCountdown);\n };\n #trackItemDrag = (event) => {\n const draggingInATree = event.target.closest(TREE_TAG_NAME) !== null;\n // The Tree View must be the only element that processes the \"dragover\"\n // event. Any other handler that processes this event can modify the\n // `dropEffect` an thus break the drag and drop implementation\n if (draggingInATree) {\n event.stopImmediatePropagation();\n }\n event.preventDefault();\n this.#lastDragEvent = event;\n this.#updateDropEffect(event);\n if (!this.#needForRAF) {\n return;\n }\n this.#needForRAF = false; // No need to call RAF up until next frame\n requestAnimationFrame(() => {\n this.#needForRAF = true; // RAF now consumes the movement instruction so a new one can come\n this.el.style.setProperty(POSITION_X_DRAG_CUSTOM_VAR, `${this.#lastDragEvent.clientX}px`);\n this.el.style.setProperty(POSITION_Y_DRAG_CUSTOM_VAR, `${this.#lastDragEvent.clientY}px`);\n });\n };\n #updateDropEffect = (event) => {\n const itemTarget = event.target;\n const containerTargetTagName = itemTarget.tagName.toLowerCase();\n // Check if it is a valid item and the drag is performed over the current\n // tree view\n if (!isTreeItemOrTreeDrop(containerTargetTagName) ||\n itemTarget.closest(TREE_TAG_NAME) !== this.el) {\n return;\n }\n const targetIsTreeItem = containerTargetTagName === TREE_ITEM_TAG_NAME;\n const dragEnterInformation = this.#getDropTypeAndTreeItemTarget(itemTarget, targetIsTreeItem);\n const treeItemTarget = dragEnterInformation.treeItem;\n const dropType = dragEnterInformation.dropType;\n const droppableZoneState = this.#validDroppableZone(event, treeItemTarget, dropType);\n if (droppableZoneState === INVALID ||\n droppableZoneState === TEMPORAL_INVALID) {\n event.dataTransfer.dropEffect = \"none\";\n }\n };\n #resetVariables = () => {\n this.#draggedIds = [];\n this.#draggedParentIds = [];\n };\n /**\n * First, it check if all items can be dragged. If so, it updates the\n * dataTransfer in the drag event to store the ids and metadata of the\n * dragged items. Also it updates the visual information of the dragged\n * items.\n * @returns If all selected items can be dragged.\n */\n // eslint-disable-next-line @stencil-community/own-props-must-be-private\n #checkDragValidityAndUpdateDragInfo = (dragInfo) => {\n const draggedElement = dragInfo.elem;\n const selectedItemsInfo = this.selectedItemsCallback();\n const isDraggingSelectedItems = selectedItemsInfo.has(draggedElement.id);\n this.#draggingSelectedItems = isDraggingSelectedItems;\n let dataTransferInfo = [];\n let dragIsEnabledForAllItems;\n if (isDraggingSelectedItems) {\n const selectedItemKeys = [...selectedItemsInfo.keys()];\n const selectedItemValues = [...selectedItemsInfo.values()];\n const selectedItemCount = selectedItemKeys.length;\n dragIsEnabledForAllItems = selectedItemValues.every(el => !this.#getTreeViewItemRef(el.id).dragDisabled);\n this.#draggedIds = selectedItemKeys;\n dataTransferInfo = selectedItemValues.map(el => ({\n id: el.id,\n metadata: el.metadata\n }));\n this.#dragInfo =\n selectedItemCount === 1\n ? draggedElement.caption\n : selectedItemCount.toString();\n }\n else {\n dragIsEnabledForAllItems = !draggedElement.dragDisabled;\n dataTransferInfo = [\n { id: draggedElement.id, metadata: draggedElement.metadata }\n ];\n this.#draggedIds = [draggedElement.id];\n this.#dragInfo = draggedElement.caption;\n }\n this.#getDirectParentsOfDraggableItems(isDraggingSelectedItems);\n // Update drag event info\n const data = JSON.stringify(dataTransferInfo);\n dragInfo.dragEvent.dataTransfer.setData(TEXT_FORMAT, data);\n // We must keep the data binding and processing even if there is an item\n // that can't be dragged, otherwise, other trees or element might behave\n // unexpected when a dragstart event comes\n return dragIsEnabledForAllItems;\n };\n #fixScrollPositionOnDrag = () => {\n if (!this.draggingInTree || !this.#lastDragEvent) {\n return;\n }\n requestAnimationFrame(() => {\n scrollToEdge(this.#lastDragEvent, this.el, 10, 30);\n requestAnimationFrame(this.#fixScrollPositionOnDrag);\n });\n };\n #getDirectParentsOfDraggableItems = (draggingSelectedItems) => {\n if (!draggingSelectedItems) {\n const parentTreeItemElem = this.#currentDraggedItem.parentElement;\n if (parentTreeItemElem.tagName.toLowerCase() === TREE_ITEM_TAG_NAME) {\n this.#draggedParentIds.push(parentTreeItemElem.id);\n }\n return;\n }\n // Dragging selected items\n const selectedItemsInfo = this.selectedItemsCallback();\n selectedItemsInfo.forEach(selectedItem => {\n const parentId = selectedItem.parentId;\n // parentId === \"\" when the item is in the first level of the tree\n if (parentId !== \"\") {\n this.#draggedParentIds.push(parentId);\n }\n });\n };\n disconnectedCallback() {\n this.#resetVariables();\n // Remove dragover body event\n this.onItemDragEnd();\n }\n render() {\n return (h(Host, { class: {\n \"ch-tree-view-dragging-item\": this.draggingInTheDocument,\n \"ch-tree-view-not-dragging-item\": !this.draggingInTheDocument,\n \"ch-tree-view--dragging-selected-items\": this.draggingInTree && this.#draggingSelectedItems,\n \"ch-tree-view-waiting-drop-processing\": this.waitDropProcessing\n } }, h(\"div\", { role: \"tree\", part: \"tree-x-container\", \"aria-multiselectable\": this.multiSelection.toString(), class: \"ch-tree-view-container\" }, h(\"slot\", null)), this.draggingInTree && (h(\"span\", { \"aria-hidden\": \"true\", class: \"ch-tree-view-drag-info\" }, this.#dragInfo))));\n }\n static get is() { return \"ch-tree-view\"; }\n static get originalStyleUrls() {\n return {\n \"$\": [\"tree-view.scss\"]\n };\n }\n static get styleUrls() {\n return {\n \"$\": [\"tree-view.css\"]\n };\n }\n static get properties() {\n return {\n \"multiSelection\": {\n \"type\": \"boolean\",\n \"mutable\": false,\n \"complexType\": {\n \"original\": \"boolean\",\n \"resolved\": \"boolean\",\n \"references\": {}\n },\n \"required\": false,\n \"optional\": false,\n \"docs\": {\n \"tags\": [],\n \"text\": \"Set this attribute if you want to allow multi selection of the items.\"\n },\n \"attribute\": \"multi-selection\",\n \"reflect\": false,\n \"defaultValue\": \"false\"\n },\n \"openSubTreeCountdown\": {\n \"type\": \"number\",\n \"mutable\": false,\n \"complexType\": {\n \"original\": \"number\",\n \"resolved\": \"number\",\n \"references\": {}\n },\n \"required\": false,\n \"optional\": false,\n \"docs\": {\n \"tags\": [],\n \"text\": \"This property lets you specify the time (in ms) that the mouse must be\\nover in a subtree to open it when dragging.\"\n },\n \"attribute\": \"open-sub-tree-countdown\",\n \"reflect\": false,\n \"defaultValue\": \"750\"\n },\n \"selectedItemsCallback\": {\n \"type\": \"unknown\",\n \"mutable\": false,\n \"complexType\": {\n \"original\": \"() => Map<\\n string,\\n TreeViewItemSelectedInfo\\n >\",\n \"resolved\": \"() => Map<string, TreeViewItemSelectedInfo>\",\n \"references\": {\n \"Map\": {\n \"location\": \"global\",\n \"id\": \"global::Map\"\n },\n \"TreeViewItemSelectedInfo\": {\n \"location\": \"import\",\n \"path\": \"./types\",\n \"id\": \"src/components/tree-view/tree-view/types.ts::TreeViewItemSelectedInfo\"\n }\n }\n },\n \"required\": false,\n \"optional\": false,\n \"docs\": {\n \"tags\": [],\n \"text\": \"Callback that is executed to get the current selected items.\"\n }\n },\n \"scrollToEdgeOnDrag\": {\n \"type\": \"boolean\",\n \"mutable\": false,\n \"complexType\": {\n \"original\": \"boolean\",\n \"resolved\": \"boolean\",\n \"references\": {}\n },\n \"required\": false,\n \"optional\": false,\n \"docs\": {\n \"tags\": [],\n \"text\": \"`true` to scroll in the tree when dragging an item near the edges of the\\ntree.\"\n },\n \"attribute\": \"scroll-to-edge-on-drag\",\n \"reflect\": false,\n \"defaultValue\": \"true\"\n },\n \"waitDropProcessing\": {\n \"type\": \"boolean\",\n \"mutable\": false,\n \"complexType\": {\n \"original\": \"boolean\",\n \"resolved\": \"boolean\",\n \"references\": {}\n },\n \"required\": false,\n \"optional\": false,\n \"docs\": {\n \"tags\": [],\n \"text\": \"This property lets you specify if the tree is waiting to process the drop\\nof items.\"\n },\n \"attribute\": \"wait-drop-processing\",\n \"reflect\": false,\n \"defaultValue\": \"false\"\n }\n };\n }\n static get states() {\n return {\n \"draggingInTheDocument\": {},\n \"draggingInTree\": {}\n };\n }\n static get events() {\n return [{\n \"method\": \"droppableZoneEnter\",\n \"name\": \"droppableZoneEnter\",\n \"bubbles\": true,\n \"cancelable\": true,\n \"composed\": true,\n \"docs\": {\n \"tags\": [],\n \"text\": \"Fired when an element attempts to enter in a droppable zone where the tree\\nhas no information about the validity of the drop.\"\n },\n \"complexType\": {\n \"original\": \"TreeViewDropCheckInfo\",\n \"resolved\": \"{ newContainer: GxDataTransferInfo; draggedItems: GxDataTransferInfo[]; dropType: TreeViewDropType; }\",\n \"references\": {\n \"TreeViewDropCheckInfo\": {\n \"location\": \"import\",\n \"path\": \"./types\",\n \"id\": \"src/components/tree-view/tree-view/types.ts::TreeViewDropCheckInfo\"\n }\n }\n }\n }, {\n \"method\": \"expandedItemChange\",\n \"name\": \"expandedItemChange\",\n \"bubbles\": true,\n \"cancelable\": true,\n \"composed\": true,\n \"docs\": {\n \"tags\": [],\n \"text\": \"Fired when an item is expanded or collapsed.\"\n },\n \"complexType\": {\n \"original\": \"TreeViewItemExpandedInfo\",\n \"resolved\": \"{ id: string; expanded: boolean; }\",\n \"references\": {\n \"TreeViewItemExpandedInfo\": {\n \"location\": \"import\",\n \"path\": \"./types\",\n \"id\": \"src/components/tree-view/tree-view/types.ts::TreeViewItemExpandedInfo\"\n }\n }\n }\n }, {\n \"method\": \"itemContextmenu\",\n \"name\": \"itemContextmenu\",\n \"bubbles\": true,\n \"cancelable\": true,\n \"composed\": true,\n \"docs\": {\n \"tags\": [],\n \"text\": \"Fired when an element displays its contextmenu.\"\n },\n \"complexType\": {\n \"original\": \"TreeViewItemContextMenu\",\n \"resolved\": \"{ id: string; itemRef: HTMLChTreeViewItemElement; metadata: string; contextmenuEvent: PointerEvent; }\",\n \"references\": {\n \"TreeViewItemContextMenu\": {\n \"location\": \"import\",\n \"path\": \"./types\",\n \"id\": \"src/components/tree-view/tree-view/types.ts::TreeViewItemContextMenu\"\n }\n }\n }\n }, {\n \"method\": \"itemsDropped\",\n \"name\": \"itemsDropped\",\n \"bubbles\": true,\n \"cancelable\": true,\n \"composed\": true,\n \"docs\": {\n \"tags\": [],\n \"text\": \"Fired when the dragged items are dropped in another item of the tree.\"\n },\n \"complexType\": {\n \"original\": \"TreeViewDataTransferInfo\",\n \"resolved\": \"{ newContainer: GxDataTransferInfo; draggedItems: GxDataTransferInfo[]; draggingSelectedItems: boolean; dropInTheSameTree: boolean; dropType: TreeViewDropType; }\",\n \"references\": {\n \"TreeViewDataTransferInfo\": {\n \"location\": \"import\",\n \"path\": \"./types\",\n \"id\": \"src/components/tree-view/tree-view/types.ts::TreeViewDataTransferInfo\"\n }\n }\n }\n }, {\n \"method\": \"selectedItemsChange\",\n \"name\": \"selectedItemsChange\",\n \"bubbles\": true,\n \"cancelable\": true,\n \"composed\": true,\n \"docs\": {\n \"tags\": [],\n \"text\": \"Fired when the selected items change.\"\n },\n \"complexType\": {\n \"original\": \"Map<string, TreeViewItemSelectedInfo>\",\n \"resolved\": \"Map<string, TreeViewItemSelectedInfo>\",\n \"references\": {\n \"Map\": {\n \"location\": \"global\",\n \"id\": \"global::Map\"\n },\n \"TreeViewItemSelectedInfo\": {\n \"location\": \"import\",\n \"path\": \"./types\",\n \"id\": \"src/components/tree-view/tree-view/types.ts::TreeViewItemSelectedInfo\"\n }\n }\n }\n }];\n }\n static get methods() {\n return {\n \"scrollIntoVisible\": {\n \"complexType\": {\n \"signature\": \"(treeItemId: string) => Promise<void>\",\n \"parameters\": [{\n \"name\": \"treeItemId\",\n \"type\": \"string\",\n \"docs\": \"\"\n }],\n \"references\": {\n \"Promise\": {\n \"location\": \"global\",\n \"id\": \"global::Promise\"\n }\n },\n \"return\": \"Promise<void>\"\n },\n \"docs\": {\n \"text\": \"Given an item id, it scrolls into the item's view.\",\n \"tags\": []\n }\n },\n \"updateValidDropZone\": {\n \"complexType\": {\n \"signature\": \"(requestTimestamp: number, newContainerId: string, draggedItems: GxDataTransferInfo[], dropType: TreeViewDropType, validDrop: boolean) => Promise<void>\",\n \"parameters\": [{\n \"name\": \"requestTimestamp\",\n \"type\": \"number\",\n \"docs\": \"Time where the request to the server was made. Useful to avoid having old information.\"\n }, {\n \"name\": \"newContainerId\",\n \"type\": \"string\",\n \"docs\": \"ID of the container where the drag is trying to be made.\"\n }, {\n \"name\": \"draggedItems\",\n \"type\": \"GxDataTransferInfo[]\",\n \"docs\": \"Information about the dragged items.\"\n }, {\n \"name\": \"dropType\",\n \"type\": \"\\\"after\\\" | \\\"before\\\" | \\\"above\\\"\",\n \"docs\": \"\"\n }, {\n \"name\": \"validDrop\",\n \"type\": \"boolean\",\n \"docs\": \"Current state of the droppable zone.\"\n }],\n \"references\": {\n \"Promise\": {\n \"location\": \"global\",\n \"id\": \"global::Promise\"\n },\n \"GxDataTransferInfo\": {\n \"location\": \"import\",\n \"path\": \"../../../common/types\",\n \"id\": \"src/common/types.ts::GxDataTransferInfo\"\n },\n \"TreeViewDropType\": {\n \"location\": \"import\",\n \"path\": \"./types\",\n \"id\": \"src/components/tree-view/tree-view/types.ts::TreeViewDropType\"\n },\n \"HTMLChTreeViewDropElement\": {\n \"location\": \"global\",\n \"id\": \"global::HTMLChTreeViewDropElement\"\n }\n },\n \"return\": \"Promise<void>\"\n },\n \"docs\": {\n \"text\": \"Update the information about the valid droppable zones.\",\n \"tags\": [{\n \"name\": \"param\",\n \"text\": \"requestTimestamp Time where the request to the server was made. Useful to avoid having old information.\"\n }, {\n \"name\": \"param\",\n \"text\": \"newContainerId ID of the container where the drag is trying to be made.\"\n }, {\n \"name\": \"param\",\n \"text\": \"draggedItems Information about the dragged items.\"\n }, {\n \"name\": \"param\",\n \"text\": \"validDrop Current state of the droppable zone.\"\n }]\n }\n }\n };\n }\n static get elementRef() { return \"el\"; }\n static get listeners() {\n return [{\n \"name\": \"contextmenu\",\n \"method\": \"onContextMenu\",\n \"target\": undefined,\n \"capture\": true,\n \"passive\": false\n }, {\n \"name\": \"keydown\",\n \"method\": \"onKeyDown\",\n \"target\": undefined,\n \"capture\": true,\n \"passive\": false\n }, {\n \"name\": \"dragstart\",\n \"method\": \"onDragStart\",\n \"target\": \"window\",\n \"capture\": false,\n \"passive\": true\n }, {\n \"name\": \"dragend\",\n \"method\": \"onDragEnd\",\n \"target\": \"window\",\n \"capture\": true,\n \"passive\": true\n }, {\n \"name\": \"dragenter\",\n \"method\": \"onDragEnter\",\n \"target\": undefined,\n \"capture\": true,\n \"passive\": true\n }, {\n \"name\": \"dragleave\",\n \"method\": \"onDragLeave\",\n \"target\": undefined,\n \"capture\": true,\n \"passive\": true\n }, {\n \"name\": \"drop\",\n \"method\": \"onDrop\",\n \"target\": undefined,\n \"capture\": false,\n \"passive\": true\n }, {\n \"name\": \"itemDragStart\",\n \"method\": \"onItemDragStart\",\n \"target\": undefined,\n \"capture\": false,\n \"passive\": false\n }, {\n \"name\": \"itemDragEnd\",\n \"method\": \"onItemDragEnd\",\n \"target\": undefined,\n \"capture\": false,\n \"passive\": false\n }, {\n \"name\": \"selectedItemChange\",\n \"method\": \"onSelectedItemChange\",\n \"target\": undefined,\n \"capture\": false,\n \"passive\": false\n }];\n }\n}\n//# sourceMappingURL=tree-view.js.map\n","import { forceUpdate } from \"@stencil/core\";\nimport { removeElement } from \"../../../common/array\";\nexport const INITIAL_LEVEL = 0;\n// Parts\nexport const EVEN_LEVEL = \"even-level\";\nexport const ODD_LEVEL = \"odd-level\";\nexport const getTreeItemLevelPart = (evenLevel) => evenLevel ? EVEN_LEVEL : ODD_LEVEL;\nexport const removeTreeViewItems = (items, flattenedTreeModel, flattenedCheckboxTreeModel, selectedItems) => {\n let atLeastOneElement = false;\n let atLeastOneCheckbox = false;\n let atLeastOneSelected = false;\n items.forEach(itemId => {\n const itemUIModel = flattenedTreeModel.get(itemId);\n if (itemUIModel) {\n const itemInfo = itemUIModel.item;\n const parentArray = itemUIModel.parentItem.items;\n // Remove subitems\n if (itemInfo.leaf !== true && itemInfo.items?.length > 0) {\n const subItemsId = itemInfo.items.map(item => item.id);\n removeTreeViewItems(subItemsId, flattenedTreeModel, flattenedCheckboxTreeModel, selectedItems);\n }\n // Remove item\n atLeastOneElement ||= flattenedTreeModel.delete(itemId);\n atLeastOneCheckbox ||= flattenedCheckboxTreeModel.delete(itemId);\n atLeastOneSelected ||= selectedItems.delete(itemId);\n removeElement(parentArray, parentArray.findIndex(element => element.id === itemId));\n }\n });\n return {\n atLeastOneElement: atLeastOneElement,\n atLeastOneCheckbox: atLeastOneCheckbox,\n atLeastOneSelected: atLeastOneSelected\n };\n};\nconst resolveNewPromise = (value) => new Promise(resolve => resolve(value));\n/**\n * Given an item id, it displays and scrolls into the item view.\n *\n * @returns If the operation was completed successfully.\n */\nexport const scrollIntoVisibleId = (path, flattenedTreeModel) => {\n const itemUIModel = flattenedTreeModel.get(path);\n if (!itemUIModel) {\n return resolveNewPromise(false);\n }\n let visitedNode = itemUIModel.parentItem;\n // While the parent is not the root, update the UI Models\n while (visitedNode && visitedNode.id != null) {\n // Expand the item\n visitedNode.expanded = true;\n const visitedNodeUIModel = flattenedTreeModel.get(visitedNode.id);\n visitedNode = visitedNodeUIModel.parentItem;\n }\n return resolveNewPromise(true);\n};\n/**\n * Given the path of the item (represent by a sorted array containing all ids\n * from the root to the item), it displays and scrolls into the item view.\n *\n * @returns If the operation was completed successfully.\n */\nexport const scrollIntoVisiblePath = async (elementRef, path, flattenedTreeModel, rootNode, lazyLoadTreeItemsCallback) => {\n const pathHasRepeatedElements = new Set(path).size !== path.length;\n if (pathHasRepeatedElements) {\n return false;\n }\n const indexOfLastItemInPath = path.length - 1;\n let lastRenderedItemInPath = indexOfLastItemInPath;\n // Start from the last item in the path\n let itemUIModel = flattenedTreeModel.get(path[lastRenderedItemInPath]);\n // Find the last item that is rendered\n while (itemUIModel === undefined && lastRenderedItemInPath > 0) {\n lastRenderedItemInPath--;\n itemUIModel = flattenedTreeModel.get(path[lastRenderedItemInPath]);\n }\n if (!itemUIModel) {\n return false;\n }\n const indexOfLastRenderItem = lastRenderedItemInPath;\n // At this point, we have the index of the last render item. We must check if\n // the rest of the path up to the root is valid\n while (lastRenderedItemInPath >= 0) {\n if (flattenedTreeModel.get(path[lastRenderedItemInPath]) === undefined) {\n return false;\n }\n lastRenderedItemInPath--;\n }\n // Check if the first item in the path is the root, to completely validate\n // the path\n if (flattenedTreeModel.get(path[0]).parentItem !== rootNode) {\n return false;\n }\n // - - - - - - - - - - - - - - - - - -\n // At this point, we now that the path starts from the root and is valid up to\n // the last rendered item\n // root, node1, node2, ..., indexOfLastRenderItem, unloadedNode1, unloadedNode2, ..., nodeToScrollIntoVisible\n // - - - - - - - - - - - - - - - - - -\n const thereAreMoreItemsToLazyLoad = indexOfLastRenderItem !== indexOfLastItemInPath;\n const canNotLazyLoadRemainingPath = thereAreMoreItemsToLazyLoad && !lazyLoadTreeItemsCallback;\n if (canNotLazyLoadRemainingPath) {\n return false;\n }\n // Expand all parent items\n let parentUIModel = flattenedTreeModel.get(path[indexOfLastRenderItem]).parentItem;\n while (parentUIModel !== rootNode) {\n parentUIModel.expanded = true;\n parentUIModel = flattenedTreeModel.get(parentUIModel.id).parentItem;\n }\n forceUpdate(elementRef);\n // Load the remaining path (unloadedNode1, unloadedNode2, ..., nodeToScrollIntoVisible),\n // checking in each step if the next item to lazy load exists\n let nextIndexToLazyLoad = indexOfLastRenderItem;\n // The reloaded processing will end in the parent of the last item\n while (nextIndexToLazyLoad < indexOfLastItemInPath) {\n const itemId = path[nextIndexToLazyLoad];\n const itemUIModel = flattenedTreeModel.get(itemId);\n // Check if the rest of the path up to the last item is valid, if not,\n // cancel the scrollIntoVisible operation\n if (!itemUIModel) {\n return false;\n }\n const itemInfo = itemUIModel.item;\n // The remaining path is invalid, because there is an item that isn't a folder\n if (itemInfo.leaf === true) {\n return false;\n }\n // Expand the parent and set the downloading state\n itemInfo.downloading = true;\n itemInfo.expanded = true;\n itemInfo.lazy = false;\n forceUpdate(elementRef);\n const result = await lazyLoadTreeItemsCallback(itemId);\n await elementRef.loadLazyContent(itemId, result);\n nextIndexToLazyLoad++;\n }\n return true;\n};\n//# sourceMappingURL=utils.js.map\n",":host {\n --ch-tree-view-drop--size: 8px;\n display: grid;\n position: relative;\n transform: translateY(calc(var(--ch-tree-view-drop--size) * -0.5));\n}\n\n:host::before {\n content: \"\";\n display: flex;\n position: absolute;\n inset-inline: 0;\n block-size: var(--ch-tree-view-drop--size);\n}\n\n:host::after {\n display: flex;\n position: absolute;\n align-self: center;\n inset-block-start: calc(var(--ch-tree-view-drop--size) * 0.25);\n inset-inline: 0;\n block-size: calc(var(--ch-tree-view-drop--size) * 0.5);\n background-color: currentColor;\n opacity: 0;\n}\n\n:host(.ch-tree-view-drop--drag-enter)::after {\n content: \"\";\n opacity: 1;\n}","import { Host, h } from \"@stencil/core\";\nimport { INITIAL_LEVEL, getTreeItemLevelPart } from \"../../renders/tree-view/utils\";\nconst TREE_DROP_TAG_NAME = \"ch-tree-view-drop\";\nexport class ChTreeViewDrop {\n constructor() {\n this.dragState = \"none\";\n this.level = INITIAL_LEVEL;\n this.treeItemId = undefined;\n this.type = \"before\";\n }\n render() {\n const canShowLines = this.level !== INITIAL_LEVEL;\n const levelPart = getTreeItemLevelPart(this.level % 2 === 0);\n return (h(Host, { class: {\n [\"gx-\" + levelPart]: canShowLines,\n [TREE_DROP_TAG_NAME + \"--drag-enter\"]: this.dragState === \"enter\"\n }, style: { \"--level\": `${this.level}` } }));\n }\n static get is() { return \"ch-tree-view-drop\"; }\n static get encapsulation() { return \"shadow\"; }\n static get originalStyleUrls() {\n return {\n \"$\": [\"tree-view-drop.scss\"]\n };\n }\n static get styleUrls() {\n return {\n \"$\": [\"tree-view-drop.css\"]\n };\n }\n static get properties() {\n return {\n \"dragState\": {\n \"type\": \"string\",\n \"mutable\": false,\n \"complexType\": {\n \"original\": \"DragState\",\n \"resolved\": \"\\\"enter\\\" | \\\"none\\\" | \\\"start\\\"\",\n \"references\": {\n \"DragState\": {\n \"location\": \"import\",\n \"path\": \"../tree-view-item/tree-view-item\",\n \"id\": \"src/components/tree-view/tree-view-item/tree-view-item.tsx::DragState\"\n }\n }\n },\n \"required\": false,\n \"optional\": false,\n \"docs\": {\n \"tags\": [],\n \"text\": \"This property lets you define the current state of the item when it's\\nbeing dragged.\"\n },\n \"attribute\": \"drag-state\",\n \"reflect\": false,\n \"defaultValue\": \"\\\"none\\\"\"\n },\n \"level\": {\n \"type\": \"number\",\n \"mutable\": false,\n \"complexType\": {\n \"original\": \"number\",\n \"resolved\": \"number\",\n \"references\": {}\n },\n \"required\": false,\n \"optional\": false,\n \"docs\": {\n \"tags\": [],\n \"text\": \"Level in the tree at which the item is placed.\"\n },\n \"attribute\": \"level\",\n \"reflect\": false,\n \"defaultValue\": \"INITIAL_LEVEL\"\n },\n \"treeItemId\": {\n \"type\": \"string\",\n \"mutable\": false,\n \"complexType\": {\n \"original\": \"string\",\n \"resolved\": \"string\",\n \"references\": {}\n },\n \"required\": false,\n \"optional\": false,\n \"docs\": {\n \"tags\": [],\n \"text\": \"Specifies the id of the tree item that this element controls.\"\n },\n \"attribute\": \"tree-item-id\",\n \"reflect\": false\n },\n \"type\": {\n \"type\": \"string\",\n \"mutable\": false,\n \"complexType\": {\n \"original\": \"Exclude<TreeViewDropType, \\\"above\\\">\",\n \"resolved\": \"\\\"after\\\" | \\\"before\\\"\",\n \"references\": {\n \"Exclude\": {\n \"location\": \"global\",\n \"id\": \"global::Exclude\"\n },\n \"TreeViewDropType\": {\n \"location\": \"import\",\n \"path\": \"../tree-view/types\",\n \"id\": \"src/components/tree-view/tree-view/types.ts::TreeViewDropType\"\n }\n }\n },\n \"required\": false,\n \"optional\": false,\n \"docs\": {\n \"tags\": [],\n \"text\": \"Specifies the type of drop that is performed over the control.\"\n },\n \"attribute\": \"type\",\n \"reflect\": false,\n \"defaultValue\": \"\\\"before\\\"\"\n }\n };\n }\n}\n//# sourceMappingURL=tree-view-drop.js.map\n","*,\n::after,\n::before {\n box-sizing: border-box;\n}\n\n:where(button) {\n all: unset;\n display: flex;\n user-select: none;\n touch-action: manipulation;\n -webkit-user-drag: element;\n}\n\n:host {\n display: grid;\n grid-template-rows: min-content;\n}\n\n.header {\n display: flex;\n gap: var(--ch-tree-view-item-gap);\n align-items: center;\n min-block-size: calc(1em + 6px);\n}\n.header--disabled {\n opacity: 0.5;\n pointer-events: none;\n}\n\n.dashed-line {\n --inset-inline-start: calc(var(--ch-tree-tab-size) * (var(--level) - 1) - var(--parent-offset, 0px) + var(--ch-tree-view-item-custom-padding-inline-start) + var(--ch-tree-view-item__expandable-button-size) * 0.5 + var(--ch-tree-view-item__dashed-line--inset-inline-start));\n position: absolute;\n inset-inline-start: var(--inset-inline-start);\n inline-size: calc(var(--ch-tree-view-item-indentation) - var(--inset-inline-start) - var(--ch-tree-view-item__dashed-line--inset-inline-end));\n block-size: 1px;\n border: 0 dashed color-mix(in srgb, currentColor 65%, transparent);\n border-block-end-width: 1px;\n pointer-events: none;\n content-visibility: hidden;\n z-index: 1;\n}\n\n.last-all-line {\n inset-block-start: 0;\n height: calc(100% - var(--ch-tree-view-item-distance-to-checkbox));\n border-inline-start-width: 1px;\n border-end-start-radius: 2px;\n}\n\n.last-line {\n inset-block-start: 0;\n height: 100%;\n border-inline-start-width: 1px;\n border-style: solid;\n border-block-end: unset;\n}\n\n.expandable-button,\n.expandable-button-decorative::before {\n display: grid;\n place-items: center;\n inline-size: var(--ch-tree-view-item__expandable-button-size);\n block-size: var(--ch-tree-view-item__expandable-button-size);\n z-index: 1;\n cursor: pointer;\n content-visibility: auto;\n contain-intrinsic-size: auto var(--ch-tree-view-item__expandable-button-size);\n}\n\n.expandable-button-decorative::before {\n content: \"\";\n background-color: currentColor;\n -webkit-mask: url('data:image/svg+xml,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 18 18\" fill=\"none\"><path d=\"M16.5 5L8.7 12.7L1 5\" stroke=\"%23000\" stroke-width=\"1.2\" stroke-linecap=\"round\"/></svg>') 50% 50%/calc(100% - 4px) calc(100% - 4px) no-repeat;\n cursor: unset;\n}\n.expandable-button-decorative--collapsed::before {\n transform: rotate(-90deg);\n}\n.expandable-button::before {\n content: \"\";\n inline-size: calc(100% - 4px);\n block-size: calc(100% - 4px);\n background-color: currentColor;\n -webkit-mask-size: calc(var(--ch-tree-view-item__expandable-button-size) - 4px);\n}\n.expandable-button--collapsed::before {\n -webkit-mask-image: url('data:image/svg+xml,<svg viewBox=\"0 0 16 16\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M14.15,8.5H8.54v5.61h-1V8.5H1.93v-1H7.54V1.89h1V7.5h5.61Z\"/></svg>');\n}\n.expandable-button--expanded::before {\n -webkit-mask-image: url('data:image/svg+xml,<svg viewBox=\"0 0 16 16\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M14.15,8.5H1.93v-1H14.15Z\"/></svg>');\n}\n.expandable-button:focus-visible {\n outline: 1px solid currentColor;\n}\n\n.checkbox {\n inline-size: var(--ch-tree-view-item__checkbox-size);\n}\n.checkbox::part(container) {\n inline-size: var(--ch-tree-view-item__checkbox-size);\n block-size: var(--ch-tree-view-item__checkbox-size);\n}\n\n.action {\n display: grid;\n grid-template: \"start-img text\"/max-content 1fr;\n gap: var(--ch-tree-view-item-gap);\n align-items: center;\n block-size: 100%;\n flex: 1;\n cursor: pointer;\n}\n.action--end-img {\n grid-template: \"start-img text end-img\"/max-content 1fr max-content;\n}\n\n.readonly-mode {\n padding-block: 0.75px;\n}\n\n.edit-name {\n grid-area: text;\n inline-size: 100%;\n block-size: 100%;\n padding: 0;\n margin: 0;\n background-color: unset;\n border: unset;\n color: unset;\n font: unset;\n outline: unset;\n}\n\n.pseudo-img--start::before,\n.pseudo-img--end::after,\n.img {\n display: block;\n inline-size: var(--ch-tree-view-item__image-size);\n block-size: var(--ch-tree-view-item__image-size);\n content-visibility: auto;\n contain-intrinsic-size: auto var(--ch-tree-view-item__image-size);\n}\n\n.pseudo-img--start::before,\n.start-img {\n content: \"\";\n grid-area: start-img;\n}\n\n.pseudo-img--end::after,\n.end-img {\n content: \"\";\n grid-area: end-img;\n}\n\n.start-img-type--background::before {\n background: no-repeat center/100% var(--ch-start-img);\n}\n\n.end-img-type--background::after {\n background: no-repeat center/100% var(--ch-end-img);\n}\n\n.start-img-type--mask::before {\n -webkit-mask: var(--ch-start-img) 50% 50%/100% 100% no-repeat;\n background-color: currentColor;\n}\n\n.end-img-type--mask::after {\n -webkit-mask: var(--ch-end-img) 50% 50%/100% 100% no-repeat;\n background-color: currentColor;\n}\n\n.downloading {\n inline-size: 0.75em;\n block-size: 0.75em;\n margin-inline: 8px 2px;\n border: 2px solid currentColor;\n border-inline-start-color: transparent;\n border-radius: 50%;\n opacity: 0.75;\n animation: spin 1s linear infinite, avoid-flickering 75ms;\n}\n\n@keyframes avoid-flickering {\n 0%, 100% {\n display: none;\n }\n}\n@keyframes spin {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n}\n.expandable {\n display: grid;\n grid-auto-rows: min-content;\n position: relative;\n}\n.expandable--lazy-loaded {\n content-visibility: auto;\n contain-intrinsic-size: auto 100px;\n}\n\n.expandable--collapsed {\n display: none;\n overflow: hidden;\n}","import { Host, h, writeTask } from \"@stencil/core\";\nimport { mouseEventModifierKey } from \"../../common/helpers\";\nimport { isPseudoElementImg, removeDragImage, tokenMap } from \"../../../common/utils\";\nimport { INITIAL_LEVEL, getTreeItemLevelPart } from \"../../renders/tree-view/utils\";\nconst DISTANCE_TO_CHECKBOX_CUSTOM_VAR = \"--ch-tree-view-item-distance-to-checkbox\";\n// Selectors\nconst TREE_ITEM_TAG_NAME = \"ch-tree-view-item\";\nconst DIRECT_TREE_ITEM_CHILDREN = `:scope>${TREE_ITEM_TAG_NAME}`;\nconst FIRST_ENABLED_SUB_ITEM = `${TREE_ITEM_TAG_NAME}:not([disabled])`;\nconst LAST_SUB_ITEM = `:scope>${TREE_ITEM_TAG_NAME}:last-child`;\n// Custom classes\nconst DOWNLOADING_CLASS = TREE_ITEM_TAG_NAME + \"--downloading\";\nconst EDITING_CLASS = TREE_ITEM_TAG_NAME + \"--editing\";\nconst NOT_EDITING_CLASS = TREE_ITEM_TAG_NAME + \"--not-editing\";\nconst DRAG_ENTER_CLASS = TREE_ITEM_TAG_NAME + \"--drag-enter\";\nconst DENY_DROP_CLASS = TREE_ITEM_TAG_NAME + \"--deny-drop\";\n// Keys\nconst EXPANDABLE_ID = \"expandable\";\nconst ENTER_KEY = \"Enter\";\nconst ESCAPE_KEY = \"Escape\";\n// Export Parts\nconst getCheckboxExportPart = (part) => `${part}:checkbox__${part}`;\nconst CHECKBOX_EXPORT_PARTS = [\n \"container\",\n \"input\",\n \"option\",\n \"checked\",\n \"indeterminate\"\n]\n .map(getCheckboxExportPart)\n .join(\",\");\nexport class ChTreeViewItem {\n constructor() {\n this.caption = undefined;\n this.checkbox = false;\n this.checked = false;\n this.customRender = false;\n this.disabled = false;\n this.dragDisabled = false;\n this.dropDisabled = false;\n this.dragState = \"none\";\n this.downloading = false;\n this.editable = undefined;\n this.editing = false;\n this.endImgSrc = undefined;\n this.endImgType = \"background\";\n this.expandableButton = \"decorative\";\n this.expandOnClick = true;\n this.expanded = false;\n this.lastItem = false;\n this.lazyLoad = false;\n this.leaf = false;\n this.level = INITIAL_LEVEL;\n this.indeterminate = false;\n this.metadata = undefined;\n this.selected = false;\n this.showDownloadingSpinner = true;\n this.showLines = \"none\";\n this.startImgSrc = undefined;\n this.startImgType = \"background\";\n this.toggleCheckboxes = false;\n }\n #watcher;\n /**\n * Useful to ignore the checkbox change when it was committed from a children.\n */\n // eslint-disable-next-line @stencil-community/own-props-must-be-private\n #ignoreCheckboxChange = false;\n // Refs\n #headerRef;\n #inputRef;\n el;\n updateChildrenCheckedValue(newValue) {\n if (!this.toggleCheckboxes || this.leaf || this.#ignoreCheckboxChange) {\n this.#ignoreCheckboxChange = false;\n return;\n }\n const treeItems = this.#getDirectTreeItems();\n treeItems.forEach(treeItem => {\n if (treeItem.checked !== newValue || treeItem.indeterminate !== false) {\n treeItem.updateChecked(newValue, false);\n }\n });\n }\n editingChanged(isEditing) {\n if (!isEditing) {\n return;\n }\n document.addEventListener(\"click\", this.#removeEditModeOnClick, {\n capture: true\n });\n // Wait until the input is rendered to focus it\n writeTask(() => {\n requestAnimationFrame(() => {\n if (this.#inputRef) {\n this.#inputRef.focus();\n }\n });\n });\n }\n expandedChanged(isExpanded) {\n // Wait until all properties are updated before lazy loading. Otherwise, the\n // lazyLoad property could be updated just after the executing of the function\n setTimeout(() => {\n this.#lazyLoadItems(isExpanded);\n });\n }\n lastItemChanged(isLastItem) {\n if (isLastItem && this.showLines) {\n // Use RAF to set the observer after the render method has completed\n requestAnimationFrame(() => {\n this.#setResizeObserver();\n });\n }\n else {\n this.#disconnectObserver();\n }\n }\n showLinesChanged(newShowLines) {\n if (newShowLines && this.lastItem) {\n this.#setResizeObserver();\n }\n else {\n this.#disconnectObserver();\n }\n }\n /**\n * Fired when the checkbox value of the control is changed.\n */\n checkboxChange;\n /**\n * Fired when the checkbox value of the control is changed. This event only\n * applies when the control has `toggleCheckboxes = true`\n */\n checkboxToggleChange;\n /**\n * Fired when the item is being dragged.\n */\n itemDragStart;\n /**\n * Fired when the item is no longer being dragged.\n */\n itemDragEnd;\n /**\n * Fired when the lazy control is expanded an its content must be loaded.\n */\n loadLazyContent;\n /**\n * Fired when the item is asking to modify its caption.\n */\n modifyCaption;\n /**\n * Fired when the user interacts with the control in a way that its reference\n * must be opened.\n */\n openReference;\n /**\n * Fired when the selected state is updated by user interaction on the\n * control.\n */\n selectedItemChange;\n updateCheckboxValue(event) {\n // No need to update the checkbox value based on the children checkbox\n if (!this.toggleCheckboxes || this.el === event.target) {\n return;\n }\n const updatedCheck = event.detail.checked;\n const treeItems = this.#getDirectTreeItems();\n // Check if all the items have the same value as the updated item\n const allItemsHaveTheSameCheckedValue = treeItems.every(treeItem => treeItem.checked === updatedCheck);\n const eventMustBeEmitted = this.checked !== updatedCheck ||\n this.indeterminate !== !allItemsHaveTheSameCheckedValue;\n this.#ignoreCheckboxChange = this.checked !== updatedCheck;\n this.checked = updatedCheck;\n this.indeterminate = !allItemsHaveTheSameCheckedValue;\n // Sync with the UI Model\n if (eventMustBeEmitted) {\n this.checkboxToggleChange.emit({\n id: this.el.id,\n checked: updatedCheck,\n indeterminate: !allItemsHaveTheSameCheckedValue\n });\n }\n }\n /**\n * Focus the next item in the tree. If the control is expanded, it focuses\n * the first subitem in its tree.\n */\n async focusNextItem(ctrlKeyPressed) {\n // Focus the first subitem if expanded\n if (!this.leaf && this.expanded) {\n const subItem = this.el.querySelector(FIRST_ENABLED_SUB_ITEM);\n // The tree item could be empty or downloading subitem, so it is uncertain\n // if the query won't fail\n if (subItem) {\n subItem.setFocus(ctrlKeyPressed);\n return;\n }\n }\n // Otherwise, focus the next sibling\n this.focusNextSibling(ctrlKeyPressed);\n }\n /**\n * Focus the next sibling item in the tree.\n */\n async focusNextSibling(ctrlKeyPressed) {\n const nextSiblingItem = this.el\n .nextElementSibling;\n // Focus the next sibling, if exists\n if (nextSiblingItem) {\n // If the next sibling is disabled, ask for its next sibling\n if (nextSiblingItem.disabled) {\n nextSiblingItem.focusNextItem(ctrlKeyPressed);\n }\n else {\n nextSiblingItem.setFocus(ctrlKeyPressed);\n }\n return;\n }\n // The item is the last one of the tree at the first level\n if (this.level === INITIAL_LEVEL) {\n return;\n }\n // Otherwise, ask the parent to focus the next sibling\n const parentItem = this.el.parentElement;\n parentItem.focusNextSibling(ctrlKeyPressed);\n }\n /**\n * Focus the previous item in the tree. If the previous item is expanded, it focuses\n * the last subitem in its tree.\n */\n async focusPreviousItem(ctrlKeyPressed) {\n const previousSiblingItem = this.el\n .previousElementSibling;\n // Focus last item of the previous sibling\n if (previousSiblingItem) {\n previousSiblingItem.focusLastItem(ctrlKeyPressed);\n return;\n }\n // The item is the first one of the tree at the first level\n if (this.level === INITIAL_LEVEL) {\n return;\n }\n // Otherwise, set focus in the parent element\n const parentItem = this.el.parentElement;\n // Check if the parent is not disabled\n if (parentItem.disabled) {\n parentItem.focusPreviousItem(ctrlKeyPressed);\n return;\n }\n parentItem.setFocus(ctrlKeyPressed);\n }\n /**\n * Focus the last item in its subtree. If the control is not expanded, it\n * focus the control.\n */\n async focusLastItem(ctrlKeyPressed) {\n // Focus the last subitem if expanded and not lazy loading\n if (!this.leaf && this.expanded) {\n const lastSubItem = this.el.querySelector(LAST_SUB_ITEM);\n // The tree item could be empty or downloading subitem, so it is uncertain\n // if the query won't fail\n if (lastSubItem) {\n lastSubItem.focusLastItem(ctrlKeyPressed);\n return;\n }\n }\n // If the last item is disabled, try to focus the previous sibling\n if (this.disabled) {\n this.focusPreviousItem(ctrlKeyPressed);\n return;\n }\n // Otherwise, it focuses the control\n this.setFocus(ctrlKeyPressed);\n }\n /**\n * Set focus in the control.\n */\n async setFocus(ctrlKeyPressed) {\n this.#headerRef.focus();\n // Normal navigation auto selects the item.\n if (!ctrlKeyPressed) {\n this.#setSelected();\n }\n }\n /**\n * Update `checked` and `indeterminate` properties.\n */\n async updateChecked(newChecked, newIndeterminate) {\n this.checked = newChecked;\n this.indeterminate = newIndeterminate;\n // Emit the event to sync with the UI model, even if the item does not\n // have toggleCheckboxes property\n this.checkboxToggleChange.emit({\n id: this.el.id,\n checked: newChecked,\n indeterminate: newIndeterminate\n });\n }\n #getDirectTreeItems = () => Array.from(this.el.querySelectorAll(DIRECT_TREE_ITEM_CHILDREN));\n #setResizeObserver = () => {\n this.#watcher = new ResizeObserver(() => {\n const distanceToCheckbox = this.el.getBoundingClientRect().height -\n this.#headerRef.getBoundingClientRect().height / 2;\n this.el.style.setProperty(DISTANCE_TO_CHECKBOX_CUSTOM_VAR, distanceToCheckbox + \"px\");\n });\n this.#watcher.observe(this.el);\n this.#watcher.observe(this.#headerRef);\n };\n #disconnectObserver = () => {\n if (!this.#watcher) {\n return;\n }\n this.#watcher.disconnect();\n this.#watcher = null;\n };\n #checkIfShouldRemoveEditMode = (event) => {\n event.stopPropagation();\n if (event.code !== ENTER_KEY && event.code !== ESCAPE_KEY) {\n return;\n }\n event.preventDefault();\n const commitEdition = event.code === ENTER_KEY;\n this.#removeEditMode(true, commitEdition)();\n };\n #removeEditModeOnClick = (event) => {\n // The click is executed outside the input and the pointer type is defined,\n // meaning that the button click was not triggered by the Enter or Space keys\n if (!event.composedPath().includes(this.#inputRef) && event.pointerType) {\n this.#removeEditMode(false)();\n }\n };\n #removeEditMode = (shouldFocusHeader, commitEdition = false) => () => {\n // When pressing the enter key in the input, the removeEditMode event is\n // triggered twice (due to the headerRef.focus() triggering the onBlur\n // event in the input), so we need to check if the edit mode was disabled\n if (!this.editing) {\n return;\n }\n this.editing = false;\n document.removeEventListener(\"click\", this.#removeEditModeOnClick, {\n capture: true\n });\n const newCaption = this.#inputRef.value;\n if (commitEdition && newCaption.trim() !== \"\") {\n this.modifyCaption.emit({\n id: this.el.id,\n caption: newCaption\n });\n }\n if (shouldFocusHeader) {\n this.#headerRef.focus();\n }\n };\n #toggleExpand = (event) => {\n event.stopPropagation();\n if (!this.leaf) {\n this.expanded = !this.expanded;\n }\n this.selected = true;\n this.selectedItemChange.emit(this.#getSelectedInfo(mouseEventModifierKey(event), true));\n };\n #lazyLoadItems = (expanded) => {\n if (!this.lazyLoad || !expanded) {\n return;\n }\n // Load items\n this.lazyLoad = false;\n this.downloading = true;\n this.loadLazyContent.emit(this.el.id);\n };\n #toggleSelected = () => {\n const selected = !this.selected;\n this.selected = selected;\n this.selectedItemChange.emit(this.#getSelectedInfo(true, selected));\n };\n #setSelected = () => {\n this.selected = true;\n this.selectedItemChange.emit(this.#getSelectedInfo(false, true));\n };\n #toggleOrSelect = (event) => {\n // Ctrl key\n if (mouseEventModifierKey(event)) {\n this.#toggleSelected();\n }\n // Expand on click interaction\n else if (this.expandOnClick) {\n this.#toggleExpand(event);\n }\n // Click only selects the item\n else {\n this.#setSelected();\n }\n };\n #getSelectedInfo = (ctrlKeyPressed, selected) => ({\n ctrlKeyPressed: ctrlKeyPressed,\n expanded: this.expanded,\n id: this.el.id,\n metadata: this.metadata,\n parentId: this.el.parentElement?.id,\n selected: selected\n });\n #handleActionDblClick = (event) => {\n event.stopPropagation();\n if (mouseEventModifierKey(event)) {\n this.#toggleSelected();\n return;\n }\n this.#emitOpenReference();\n // The Control key is not pressed, so the control can be expanded if double\n // click expands the item\n if (!this.leaf && !this.expandOnClick) {\n this.#toggleExpand(event);\n }\n };\n /**\n * Event triggered by the following actions on the main button:\n * - Click\n * - Enter keydown\n * - Space keydown and keyup\n */\n // eslint-disable-next-line @stencil-community/own-props-must-be-private\n #handleActionClick = (event) => {\n event.stopPropagation();\n // Don't perform actions when editing\n if (this.editing) {\n return;\n }\n event.preventDefault();\n // Click event\n if (event.pointerType) {\n this.#toggleOrSelect(event);\n return;\n }\n this.#emitOpenReference();\n // Enter or space\n this.#toggleExpand(event);\n };\n /**\n * Event triggered by key events on the main button.\n */\n // eslint-disable-next-line @stencil-community/own-props-must-be-private\n #handleActionKeyDown = (event) => {\n // Only toggle if the Enter key was pressed with the Ctrl key\n if (mouseEventModifierKey(event) && event.code === ENTER_KEY) {\n event.stopPropagation();\n this.#toggleSelected();\n }\n };\n #emitOpenReference = () => {\n this.openReference.emit({\n id: this.el.id,\n leaf: this.leaf,\n metadata: this.metadata\n });\n };\n #handleCheckedChange = (event) => {\n event.stopPropagation();\n const checked = event.target.checked;\n this.checked = checked;\n this.indeterminate = false; // Changing the checked value makes it no longer indeterminate\n this.checkboxChange.emit({\n id: this.el.id,\n checked: this.checked,\n indeterminate: false\n });\n };\n #renderImg = (cssClass, src, imageType) => imageType === \"img\" &&\n src && (h(\"img\", { \"aria-hidden\": \"true\", class: cssClass, part: cssClass, alt: \"\", src: src, loading: \"lazy\" }));\n #handleDragStart = (event) => {\n // Disallow drag when editing the caption\n if (this.editing) {\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n removeDragImage(event);\n event.dataTransfer.effectAllowed = \"move\";\n this.dragState = \"start\";\n this.itemDragStart.emit({\n elem: this.el,\n dragEvent: event\n });\n };\n #handleDragEnd = () => {\n // event.preventDefault();\n // this.el.style.cursor = null;\n this.dragState = \"none\";\n this.itemDragEnd.emit();\n };\n componentWillLoad() {\n // Check if must lazy load\n this.#lazyLoadItems(this.expanded);\n }\n componentDidLoad() {\n if (this.lastItem && this.showLines) {\n this.#setResizeObserver();\n }\n }\n disconnectedCallback() {\n // If it was disconnected on edit mode, remove the body event handler\n if (this.editing) {\n this.#removeEditMode(false);\n }\n this.#disconnectObserver();\n }\n render() {\n const evenLevel = this.level % 2 === 0;\n const hasContent = !this.leaf && !this.lazyLoad;\n const canShowLines = this.level !== INITIAL_LEVEL;\n const showAllLines = this.showLines === \"all\" && canShowLines;\n const showLastLine = this.showLines === \"last\" && canShowLines && this.lastItem;\n const levelPart = getTreeItemLevelPart(evenLevel);\n const pseudoStartImage = isPseudoElementImg(this.startImgSrc, this.startImgType);\n const pseudoEndImage = isPseudoElementImg(this.endImgSrc, this.endImgType);\n return (h(Host, { role: \"treeitem\", \"aria-level\": this.level + 1, \"aria-selected\": this.selected ? \"true\" : null, class: {\n [DOWNLOADING_CLASS]: this.downloading,\n [EDITING_CLASS]: this.editing,\n [NOT_EDITING_CLASS]: !this.editing,\n [DRAG_ENTER_CLASS]: this.dragState === \"enter\",\n [DENY_DROP_CLASS]: this.leaf\n }, style: { \"--level\": `${this.level}` } }, h(\"button\", { \"aria-controls\": hasContent ? EXPANDABLE_ID : null, \"aria-expanded\": hasContent ? this.expanded.toString() : null, class: {\n header: true,\n \"header--selected\": this.selected,\n \"header--disabled\": this.disabled,\n \"expandable-button-decorative\": !this.leaf && this.expandableButton === \"decorative\",\n \"expandable-button-decorative--collapsed\": !this.leaf &&\n this.expandableButton === \"decorative\" &&\n !this.expanded\n }, part: tokenMap({\n header: true,\n disabled: this.disabled,\n selected: this.selected,\n [levelPart]: canShowLines,\n \"expand-button\": canShowLines && !this.leaf && this.expandableButton !== \"no\"\n }), type: \"button\", disabled: this.disabled, onClick: this.#handleActionClick, onKeyDown: !this.editing ? this.#handleActionKeyDown : null,\n // Drag and drop\n draggable: !this.dragDisabled, onDragStart: this.#handleDragStart, onDragEnd: !this.dragDisabled ? this.#handleDragEnd : null, ref: el => (this.#headerRef = el) }, !this.leaf && this.expandableButton === \"action\" && (h(\"button\", { type: \"button\", class: {\n \"expandable-button\": true,\n \"expandable-button--expanded\": this.expanded,\n \"expandable-button--collapsed\": !this.expanded\n }, part: `expandable-button${this.disabled ? \" disabled\" : \"\"}${this.expanded ? \" expanded\" : \" collapsed\"}`, disabled: this.disabled, onClick: this.#toggleExpand })), this.checkbox && (h(\"ch-checkbox\", { accessibleName: this.caption, class: \"checkbox\", exportparts: CHECKBOX_EXPORT_PARTS, part: `checkbox${this.disabled ? \" disabled\" : \"\"}${this.checked ? \" checked\" : \"\"}${this.indeterminate ? \" indeterminate\" : \"\"}`, checkedValue: \"true\", disabled: this.disabled, indeterminate: this.indeterminate, unCheckedValue: \"false\", value: `${this.checked}`, onInput: this.#handleCheckedChange })), this.customRender ? (h(\"slot\", { name: \"custom-content\" })) : ([\n h(\"div\", { class: {\n action: true,\n \"action--end-img\": !!this.endImgSrc,\n [`start-img-type--${this.startImgType} pseudo-img--start`]: pseudoStartImage,\n [`end-img-type--${this.endImgType} pseudo-img--end`]: pseudoEndImage,\n \"readonly-mode\": !this.editing\n }, part: `action${!this.editing ? \" readonly-mode\" : \"\"}${!this.leaf && this.expanded ? \" expanded\" : \"\"}`, style: {\n \"--ch-start-img\": pseudoStartImage\n ? `url(\"${this.startImgSrc}\")`\n : null,\n \"--ch-end-img\": pseudoEndImage\n ? `url(\"${this.endImgSrc}\")`\n : null\n }, onDblClick: !this.editing ? this.#handleActionDblClick : null }, this.#renderImg(\"img start-img\", this.startImgSrc, this.startImgType), this.editable && this.editing ? (h(\"input\", { class: \"edit-name\", part: \"edit-name\", disabled: this.disabled, type: \"text\", value: this.caption, onBlur: this.#removeEditMode(false), onKeyDown: this.#checkIfShouldRemoveEditMode, ref: el => (this.#inputRef = el) })) : (this.caption), this.#renderImg(\"img end-img\", this.endImgSrc, this.endImgType)),\n this.showDownloadingSpinner && !this.leaf && this.downloading && (h(\"div\", { class: \"downloading\", part: \"downloading\" }))\n ]), (showAllLines || showLastLine) && (h(\"div\", { class: {\n \"dashed-line\": true,\n \"last-all-line\": showAllLines && this.lastItem,\n \"last-line\": showLastLine\n }, part: `dashed-line${this.lastItem ? \" last-all-line\" : \"\"}` }))), hasContent && (h(\"div\", { role: \"group\", \"aria-busy\": (!!this.downloading).toString(), \"aria-live\": this.downloading ? \"polite\" : null, id: EXPANDABLE_ID, class: {\n expandable: true,\n \"expandable--collapsed\": !this.expanded,\n \"expandable--lazy-loaded\": !this.downloading,\n \"expandable--even\": canShowLines && evenLevel,\n \"expandable--odd\": canShowLines && !evenLevel\n }, part: tokenMap({\n [EXPANDABLE_ID]: true,\n [this.expanded ? \"expanded\" : \"collapsed\"]: true,\n \"lazy-loaded\": !this.downloading,\n [levelPart]: canShowLines\n }) }, h(\"slot\", null)))));\n }\n static get is() { return \"ch-tree-view-item\"; }\n static get encapsulation() { return \"shadow\"; }\n static get originalStyleUrls() {\n return {\n \"$\": [\"tree-view-item.scss\"]\n };\n }\n static get styleUrls() {\n return {\n \"$\": [\"tree-view-item.css\"]\n };\n }\n static get properties() {\n return {\n \"caption\": {\n \"type\": \"string\",\n \"mutable\": false,\n \"complexType\": {\n \"original\": \"string\",\n \"resolved\": \"string\",\n \"references\": {}\n },\n \"required\": false,\n \"optional\": false,\n \"docs\": {\n \"tags\": [],\n \"text\": \"This attributes specifies the caption of the control\"\n },\n \"attribute\": \"caption\",\n \"reflect\": false\n },\n \"checkbox\": {\n \"type\": \"boolean\",\n \"mutable\": false,\n \"complexType\": {\n \"original\": \"boolean\",\n \"resolved\": \"boolean\",\n \"references\": {}\n },\n \"required\": false,\n \"optional\": false,\n \"docs\": {\n \"tags\": [],\n \"text\": \"Set this attribute if you want display a checkbox in the control.\"\n },\n \"attribute\": \"checkbox\",\n \"reflect\": false,\n \"defaultValue\": \"false\"\n },\n \"checked\": {\n \"type\": \"boolean\",\n \"mutable\": true,\n \"complexType\": {\n \"original\": \"boolean\",\n \"resolved\": \"boolean\",\n \"references\": {}\n },\n \"required\": false,\n \"optional\": false,\n \"docs\": {\n \"tags\": [],\n \"text\": \"Set this attribute if you want the checkbox to be checked by default.\\nOnly works if `checkbox = true`\"\n },\n \"attribute\": \"checked\",\n \"reflect\": true,\n \"defaultValue\": \"false\"\n },\n \"customRender\": {\n \"type\": \"boolean\",\n \"mutable\": false,\n \"complexType\": {\n \"original\": \"boolean\",\n \"resolved\": \"boolean\",\n \"references\": {}\n },\n \"required\": false,\n \"optional\": false,\n \"docs\": {\n \"tags\": [],\n \"text\": \"Set this attribute if you want to set a custom render for the control, by\\npassing a slot.\"\n },\n \"attribute\": \"custom-render\",\n \"reflect\": false,\n \"defaultValue\": \"false\"\n },\n \"disabled\": {\n \"type\": \"boolean\",\n \"mutable\": false,\n \"complexType\": {\n \"original\": \"boolean\",\n \"resolved\": \"boolean\",\n \"references\": {}\n },\n \"required\": false,\n \"optional\": false,\n \"docs\": {\n \"tags\": [],\n \"text\": \"This attribute lets you specify if the element is disabled.\\nIf disabled, it will not fire any user interaction related event\\n(for example, click event).\"\n },\n \"attribute\": \"disabled\",\n \"reflect\": true,\n \"defaultValue\": \"false\"\n },\n \"dragDisabled\": {\n \"type\": \"boolean\",\n \"mutable\": false,\n \"complexType\": {\n \"original\": \"boolean\",\n \"resolved\": \"boolean\",\n \"references\": {}\n },\n \"required\": false,\n \"optional\": false,\n \"docs\": {\n \"tags\": [],\n \"text\": \"This attribute lets you specify if the drag operation is disabled in the\\ncontrol. If `true`, the control can't be dragged.\"\n },\n \"attribute\": \"drag-disabled\",\n \"reflect\": false,\n \"defaultValue\": \"false\"\n },\n \"dropDisabled\": {\n \"type\": \"boolean\",\n \"mutable\": false,\n \"complexType\": {\n \"original\": \"boolean\",\n \"resolved\": \"boolean\",\n \"references\": {}\n },\n \"required\": false,\n \"optional\": false,\n \"docs\": {\n \"tags\": [],\n \"text\": \"This attribute lets you specify if the drop operation is disabled in the\\ncontrol. If `true`, the control won't accept any drops.\"\n },\n \"attribute\": \"drop-disabled\",\n \"reflect\": false,\n \"defaultValue\": \"false\"\n },\n \"dragState\": {\n \"type\": \"string\",\n \"mutable\": true,\n \"complexType\": {\n \"original\": \"DragState\",\n \"resolved\": \"\\\"enter\\\" | \\\"none\\\" | \\\"start\\\"\",\n \"references\": {\n \"DragState\": {\n \"location\": \"local\",\n \"path\": \"/home/runner/work/chameleon-controls-library/chameleon-controls-library/src/components/tree-view/tree-view-item/tree-view-item.tsx\",\n \"id\": \"src/components/tree-view/tree-view-item/tree-view-item.tsx::DragState\"\n }\n }\n },\n \"required\": false,\n \"optional\": false,\n \"docs\": {\n \"tags\": [],\n \"text\": \"This property lets you define the current state of the item when it's\\nbeing dragged.\"\n },\n \"attribute\": \"drag-state\",\n \"reflect\": false,\n \"defaultValue\": \"\\\"none\\\"\"\n },\n \"downloading\": {\n \"type\": \"boolean\",\n \"mutable\": true,\n \"complexType\": {\n \"original\": \"boolean\",\n \"resolved\": \"boolean\",\n \"references\": {}\n },\n \"required\": false,\n \"optional\": false,\n \"docs\": {\n \"tags\": [],\n \"text\": \"This attribute lets you specify when items are being lazy loaded in the\\ncontrol.\"\n },\n \"attribute\": \"downloading\",\n \"reflect\": false,\n \"defaultValue\": \"false\"\n },\n \"editable\": {\n \"type\": \"boolean\",\n \"mutable\": false,\n \"complexType\": {\n \"original\": \"boolean\",\n \"resolved\": \"boolean\",\n \"references\": {}\n },\n \"required\": false,\n \"optional\": false,\n \"docs\": {\n \"tags\": [],\n \"text\": \"This attribute lets you specify if the edit operation is enabled in the\\ncontrol. If `true`, the control can edit its caption in place.\"\n },\n \"attribute\": \"editable\",\n \"reflect\": false\n },\n \"editing\": {\n \"type\": \"boolean\",\n \"mutable\": true,\n \"complexType\": {\n \"original\": \"boolean\",\n \"resolved\": \"boolean\",\n \"references\": {}\n },\n \"required\": false,\n \"optional\": false,\n \"docs\": {\n \"tags\": [],\n \"text\": \"Set this attribute when the item is in edit mode\"\n },\n \"attribute\": \"editing\",\n \"reflect\": false,\n \"defaultValue\": \"false\"\n },\n \"endImgSrc\": {\n \"type\": \"string\",\n \"mutable\": false,\n \"complexType\": {\n \"original\": \"string\",\n \"resolved\": \"string\",\n \"references\": {}\n },\n \"required\": false,\n \"optional\": false,\n \"docs\": {\n \"tags\": [],\n \"text\": \"Specifies the src of the end image.\"\n },\n \"attribute\": \"end-img-src\",\n \"reflect\": false\n },\n \"endImgType\": {\n \"type\": \"string\",\n \"mutable\": false,\n \"complexType\": {\n \"original\": \"ImageRender\",\n \"resolved\": \"\\\"background\\\" | \\\"img\\\" | \\\"mask\\\"\",\n \"references\": {\n \"ImageRender\": {\n \"location\": \"import\",\n \"path\": \"../../../common/types\",\n \"id\": \"src/common/types.ts::ImageRender\"\n }\n }\n },\n \"required\": false,\n \"optional\": false,\n \"docs\": {\n \"tags\": [],\n \"text\": \"Specifies how the end image will be rendered.\"\n },\n \"attribute\": \"end-img-type\",\n \"reflect\": false,\n \"defaultValue\": \"\\\"background\\\"\"\n },\n \"expandableButton\": {\n \"type\": \"string\",\n \"mutable\": false,\n \"complexType\": {\n \"original\": \"\\\"action\\\" | \\\"decorative\\\" | \\\"no\\\"\",\n \"resolved\": \"\\\"action\\\" | \\\"decorative\\\" | \\\"no\\\"\",\n \"references\": {}\n },\n \"required\": false,\n \"optional\": false,\n \"docs\": {\n \"tags\": [],\n \"text\": \"Specifies what kind of expandable button is displayed.\\nOnly works if `leaf === false`.\\n - `\\\"expandableButton\\\"`: Expandable button that allows to expand/collapse\\n the items of the control.\\n - `\\\"decorative\\\"`: Only a decorative icon is rendered to display the state\\n of the item.\"\n },\n \"attribute\": \"expandable-button\",\n \"reflect\": false,\n \"defaultValue\": \"\\\"decorative\\\"\"\n },\n \"expandOnClick\": {\n \"type\": \"boolean\",\n \"mutable\": false,\n \"complexType\": {\n \"original\": \"boolean\",\n \"resolved\": \"boolean\",\n \"references\": {}\n },\n \"required\": false,\n \"optional\": false,\n \"docs\": {\n \"tags\": [],\n \"text\": \"`true` to expand the control on click interaction. If `false`, with mouse\\ninteraction the control will only be expanded on double click.\"\n },\n \"attribute\": \"expand-on-click\",\n \"reflect\": false,\n \"defaultValue\": \"true\"\n },\n \"expanded\": {\n \"type\": \"boolean\",\n \"mutable\": true,\n \"complexType\": {\n \"original\": \"boolean\",\n \"resolved\": \"boolean\",\n \"references\": {}\n },\n \"required\": false,\n \"optional\": false,\n \"docs\": {\n \"tags\": [],\n \"text\": \"If the item has a sub-tree, this attribute determines if the subtree is\\ndisplayed.\"\n },\n \"attribute\": \"expanded\",\n \"reflect\": false,\n \"defaultValue\": \"false\"\n },\n \"lastItem\": {\n \"type\": \"boolean\",\n \"mutable\": false,\n \"complexType\": {\n \"original\": \"boolean\",\n \"resolved\": \"boolean\",\n \"references\": {}\n },\n \"required\": false,\n \"optional\": false,\n \"docs\": {\n \"tags\": [],\n \"text\": \"This attribute specifies if the control is the last items in its subtree\"\n },\n \"attribute\": \"last-item\",\n \"reflect\": false,\n \"defaultValue\": \"false\"\n },\n \"lazyLoad\": {\n \"type\": \"boolean\",\n \"mutable\": true,\n \"complexType\": {\n \"original\": \"boolean\",\n \"resolved\": \"boolean\",\n \"references\": {}\n },\n \"required\": false,\n \"optional\": false,\n \"docs\": {\n \"tags\": [],\n \"text\": \"Determine if the items are lazy loaded when opening the first time the\\ncontrol.\"\n },\n \"attribute\": \"lazy-load\",\n \"reflect\": false,\n \"defaultValue\": \"false\"\n },\n \"leaf\": {\n \"type\": \"boolean\",\n \"mutable\": false,\n \"complexType\": {\n \"original\": \"boolean\",\n \"resolved\": \"boolean\",\n \"references\": {}\n },\n \"required\": false,\n \"optional\": false,\n \"docs\": {\n \"tags\": [],\n \"text\": \"The presence of this attribute determine whether the item contains a\\nsubtree. `true` if the item does not have a subtree.\"\n },\n \"attribute\": \"leaf\",\n \"reflect\": false,\n \"defaultValue\": \"false\"\n },\n \"level\": {\n \"type\": \"number\",\n \"mutable\": false,\n \"complexType\": {\n \"original\": \"number\",\n \"resolved\": \"number\",\n \"references\": {}\n },\n \"required\": false,\n \"optional\": false,\n \"docs\": {\n \"tags\": [],\n \"text\": \"Level in the tree at which the item is placed.\"\n },\n \"attribute\": \"level\",\n \"reflect\": false,\n \"defaultValue\": \"INITIAL_LEVEL\"\n },\n \"indeterminate\": {\n \"type\": \"boolean\",\n \"mutable\": true,\n \"complexType\": {\n \"original\": \"boolean\",\n \"resolved\": \"boolean\",\n \"references\": {}\n },\n \"required\": false,\n \"optional\": false,\n \"docs\": {\n \"tags\": [],\n \"text\": \"`true` if the checkbox's value is indeterminate.\"\n },\n \"attribute\": \"indeterminate\",\n \"reflect\": false,\n \"defaultValue\": \"false\"\n },\n \"metadata\": {\n \"type\": \"string\",\n \"mutable\": false,\n \"complexType\": {\n \"original\": \"string\",\n \"resolved\": \"string\",\n \"references\": {}\n },\n \"required\": false,\n \"optional\": false,\n \"docs\": {\n \"tags\": [],\n \"text\": \"This attribute represents additional info for the control that is included\\nwhen dragging the item.\"\n },\n \"attribute\": \"metadata\",\n \"reflect\": false\n },\n \"selected\": {\n \"type\": \"boolean\",\n \"mutable\": true,\n \"complexType\": {\n \"original\": \"boolean\",\n \"resolved\": \"boolean\",\n \"references\": {}\n },\n \"required\": false,\n \"optional\": false,\n \"docs\": {\n \"tags\": [],\n \"text\": \"This attribute lets you specify if the item is selected\"\n },\n \"attribute\": \"selected\",\n \"reflect\": true,\n \"defaultValue\": \"false\"\n },\n \"showDownloadingSpinner\": {\n \"type\": \"boolean\",\n \"mutable\": false,\n \"complexType\": {\n \"original\": \"boolean\",\n \"resolved\": \"boolean\",\n \"references\": {}\n },\n \"required\": false,\n \"optional\": false,\n \"docs\": {\n \"tags\": [],\n \"text\": \"`true` to show the downloading spinner when lazy loading the sub items of\\nthe control.\"\n },\n \"attribute\": \"show-downloading-spinner\",\n \"reflect\": false,\n \"defaultValue\": \"true\"\n },\n \"showLines\": {\n \"type\": \"string\",\n \"mutable\": false,\n \"complexType\": {\n \"original\": \"TreeViewLines\",\n \"resolved\": \"\\\"all\\\" | \\\"last\\\" | \\\"none\\\"\",\n \"references\": {\n \"TreeViewLines\": {\n \"location\": \"import\",\n \"path\": \"../tree-view/types\",\n \"id\": \"src/components/tree-view/tree-view/types.ts::TreeViewLines\"\n }\n }\n },\n \"required\": false,\n \"optional\": false,\n \"docs\": {\n \"tags\": [],\n \"text\": \"`true` to display the relation between tree items and tree lists using\\nlines.\"\n },\n \"attribute\": \"show-lines\",\n \"reflect\": false,\n \"defaultValue\": \"\\\"none\\\"\"\n },\n \"startImgSrc\": {\n \"type\": \"string\",\n \"mutable\": false,\n \"complexType\": {\n \"original\": \"string\",\n \"resolved\": \"string\",\n \"references\": {}\n },\n \"required\": false,\n \"optional\": false,\n \"docs\": {\n \"tags\": [],\n \"text\": \"Specifies the src of the start image.\"\n },\n \"attribute\": \"start-img-src\",\n \"reflect\": false\n },\n \"startImgType\": {\n \"type\": \"string\",\n \"mutable\": false,\n \"complexType\": {\n \"original\": \"ImageRender\",\n \"resolved\": \"\\\"background\\\" | \\\"img\\\" | \\\"mask\\\"\",\n \"references\": {\n \"ImageRender\": {\n \"location\": \"import\",\n \"path\": \"../../../common/types\",\n \"id\": \"src/common/types.ts::ImageRender\"\n }\n }\n },\n \"required\": false,\n \"optional\": false,\n \"docs\": {\n \"tags\": [],\n \"text\": \"Specifies how the start image will be rendered.\"\n },\n \"attribute\": \"start-img-type\",\n \"reflect\": false,\n \"defaultValue\": \"\\\"background\\\"\"\n },\n \"toggleCheckboxes\": {\n \"type\": \"boolean\",\n \"mutable\": false,\n \"complexType\": {\n \"original\": \"boolean\",\n \"resolved\": \"boolean\",\n \"references\": {}\n },\n \"required\": false,\n \"optional\": false,\n \"docs\": {\n \"tags\": [],\n \"text\": \"Set this attribute if you want all the children item's checkboxes to be\\nchecked when the parent item checkbox is checked, or to be unchecked when\\nthe parent item checkbox is unchecked.\"\n },\n \"attribute\": \"toggle-checkboxes\",\n \"reflect\": false,\n \"defaultValue\": \"false\"\n }\n };\n }\n static get events() {\n return [{\n \"method\": \"checkboxChange\",\n \"name\": \"checkboxChange\",\n \"bubbles\": true,\n \"cancelable\": true,\n \"composed\": true,\n \"docs\": {\n \"tags\": [],\n \"text\": \"Fired when the checkbox value of the control is changed.\"\n },\n \"complexType\": {\n \"original\": \"TreeViewItemCheckedInfo\",\n \"resolved\": \"{ id: string; checked: boolean; indeterminate: boolean; }\",\n \"references\": {\n \"TreeViewItemCheckedInfo\": {\n \"location\": \"import\",\n \"path\": \"../tree-view/types\",\n \"id\": \"src/components/tree-view/tree-view/types.ts::TreeViewItemCheckedInfo\"\n }\n }\n }\n }, {\n \"method\": \"checkboxToggleChange\",\n \"name\": \"checkboxToggleChange\",\n \"bubbles\": true,\n \"cancelable\": true,\n \"composed\": true,\n \"docs\": {\n \"tags\": [],\n \"text\": \"Fired when the checkbox value of the control is changed. This event only\\napplies when the control has `toggleCheckboxes = true`\"\n },\n \"complexType\": {\n \"original\": \"TreeViewItemCheckedInfo\",\n \"resolved\": \"{ id: string; checked: boolean; indeterminate: boolean; }\",\n \"references\": {\n \"TreeViewItemCheckedInfo\": {\n \"location\": \"import\",\n \"path\": \"../tree-view/types\",\n \"id\": \"src/components/tree-view/tree-view/types.ts::TreeViewItemCheckedInfo\"\n }\n }\n }\n }, {\n \"method\": \"itemDragStart\",\n \"name\": \"itemDragStart\",\n \"bubbles\": true,\n \"cancelable\": true,\n \"composed\": true,\n \"docs\": {\n \"tags\": [],\n \"text\": \"Fired when the item is being dragged.\"\n },\n \"complexType\": {\n \"original\": \"TreeViewItemDragStartInfo\",\n \"resolved\": \"{ elem: HTMLChTreeViewItemElement; dragEvent: DragEvent; }\",\n \"references\": {\n \"TreeViewItemDragStartInfo\": {\n \"location\": \"import\",\n \"path\": \"../tree-view/types\",\n \"id\": \"src/components/tree-view/tree-view/types.ts::TreeViewItemDragStartInfo\"\n }\n }\n }\n }, {\n \"method\": \"itemDragEnd\",\n \"name\": \"itemDragEnd\",\n \"bubbles\": true,\n \"cancelable\": true,\n \"composed\": true,\n \"docs\": {\n \"tags\": [],\n \"text\": \"Fired when the item is no longer being dragged.\"\n },\n \"complexType\": {\n \"original\": \"any\",\n \"resolved\": \"any\",\n \"references\": {}\n }\n }, {\n \"method\": \"loadLazyContent\",\n \"name\": \"loadLazyContent\",\n \"bubbles\": true,\n \"cancelable\": true,\n \"composed\": true,\n \"docs\": {\n \"tags\": [],\n \"text\": \"Fired when the lazy control is expanded an its content must be loaded.\"\n },\n \"complexType\": {\n \"original\": \"string\",\n \"resolved\": \"string\",\n \"references\": {}\n }\n }, {\n \"method\": \"modifyCaption\",\n \"name\": \"modifyCaption\",\n \"bubbles\": true,\n \"cancelable\": true,\n \"composed\": true,\n \"docs\": {\n \"tags\": [],\n \"text\": \"Fired when the item is asking to modify its caption.\"\n },\n \"complexType\": {\n \"original\": \"TreeViewItemNewCaption\",\n \"resolved\": \"{ id: string; caption: string; }\",\n \"references\": {\n \"TreeViewItemNewCaption\": {\n \"location\": \"import\",\n \"path\": \"../tree-view/types\",\n \"id\": \"src/components/tree-view/tree-view/types.ts::TreeViewItemNewCaption\"\n }\n }\n }\n }, {\n \"method\": \"openReference\",\n \"name\": \"openReference\",\n \"bubbles\": true,\n \"cancelable\": true,\n \"composed\": true,\n \"docs\": {\n \"tags\": [],\n \"text\": \"Fired when the user interacts with the control in a way that its reference\\nmust be opened.\"\n },\n \"complexType\": {\n \"original\": \"TreeViewItemOpenReferenceInfo\",\n \"resolved\": \"{ id: string; leaf: boolean; metadata: string; }\",\n \"references\": {\n \"TreeViewItemOpenReferenceInfo\": {\n \"location\": \"import\",\n \"path\": \"../tree-view/types\",\n \"id\": \"src/components/tree-view/tree-view/types.ts::TreeViewItemOpenReferenceInfo\"\n }\n }\n }\n }, {\n \"method\": \"selectedItemChange\",\n \"name\": \"selectedItemChange\",\n \"bubbles\": true,\n \"cancelable\": true,\n \"composed\": true,\n \"docs\": {\n \"tags\": [],\n \"text\": \"Fired when the selected state is updated by user interaction on the\\ncontrol.\"\n },\n \"complexType\": {\n \"original\": \"TreeViewItemSelected\",\n \"resolved\": \"{ ctrlKeyPressed: boolean; expanded: boolean; id: string; metadata: string; parentId: string; selected: boolean; }\",\n \"references\": {\n \"TreeViewItemSelected\": {\n \"location\": \"import\",\n \"path\": \"../tree-view/types\",\n \"id\": \"src/components/tree-view/tree-view/types.ts::TreeViewItemSelected\"\n }\n }\n }\n }];\n }\n static get methods() {\n return {\n \"focusNextItem\": {\n \"complexType\": {\n \"signature\": \"(ctrlKeyPressed: boolean) => Promise<void>\",\n \"parameters\": [{\n \"name\": \"ctrlKeyPressed\",\n \"type\": \"boolean\",\n \"docs\": \"\"\n }],\n \"references\": {\n \"Promise\": {\n \"location\": \"global\",\n \"id\": \"global::Promise\"\n },\n \"HTMLChTreeViewItemElement\": {\n \"location\": \"global\",\n \"id\": \"global::HTMLChTreeViewItemElement\"\n }\n },\n \"return\": \"Promise<void>\"\n },\n \"docs\": {\n \"text\": \"Focus the next item in the tree. If the control is expanded, it focuses\\nthe first subitem in its tree.\",\n \"tags\": []\n }\n },\n \"focusNextSibling\": {\n \"complexType\": {\n \"signature\": \"(ctrlKeyPressed: boolean) => Promise<void>\",\n \"parameters\": [{\n \"name\": \"ctrlKeyPressed\",\n \"type\": \"boolean\",\n \"docs\": \"\"\n }],\n \"references\": {\n \"Promise\": {\n \"location\": \"global\",\n \"id\": \"global::Promise\"\n },\n \"HTMLChTreeViewItemElement\": {\n \"location\": \"global\",\n \"id\": \"global::HTMLChTreeViewItemElement\"\n }\n },\n \"return\": \"Promise<void>\"\n },\n \"docs\": {\n \"text\": \"Focus the next sibling item in the tree.\",\n \"tags\": []\n }\n },\n \"focusPreviousItem\": {\n \"complexType\": {\n \"signature\": \"(ctrlKeyPressed: boolean) => Promise<void>\",\n \"parameters\": [{\n \"name\": \"ctrlKeyPressed\",\n \"type\": \"boolean\",\n \"docs\": \"\"\n }],\n \"references\": {\n \"Promise\": {\n \"location\": \"global\",\n \"id\": \"global::Promise\"\n },\n \"HTMLChTreeViewItemElement\": {\n \"location\": \"global\",\n \"id\": \"global::HTMLChTreeViewItemElement\"\n }\n },\n \"return\": \"Promise<void>\"\n },\n \"docs\": {\n \"text\": \"Focus the previous item in the tree. If the previous item is expanded, it focuses\\nthe last subitem in its tree.\",\n \"tags\": []\n }\n },\n \"focusLastItem\": {\n \"complexType\": {\n \"signature\": \"(ctrlKeyPressed: boolean) => Promise<void>\",\n \"parameters\": [{\n \"name\": \"ctrlKeyPressed\",\n \"type\": \"boolean\",\n \"docs\": \"\"\n }],\n \"references\": {\n \"Promise\": {\n \"location\": \"global\",\n \"id\": \"global::Promise\"\n },\n \"HTMLChTreeViewItemElement\": {\n \"location\": \"global\",\n \"id\": \"global::HTMLChTreeViewItemElement\"\n }\n },\n \"return\": \"Promise<void>\"\n },\n \"docs\": {\n \"text\": \"Focus the last item in its subtree. If the control is not expanded, it\\nfocus the control.\",\n \"tags\": []\n }\n },\n \"setFocus\": {\n \"complexType\": {\n \"signature\": \"(ctrlKeyPressed: boolean) => Promise<void>\",\n \"parameters\": [{\n \"name\": \"ctrlKeyPressed\",\n \"type\": \"boolean\",\n \"docs\": \"\"\n }],\n \"references\": {\n \"Promise\": {\n \"location\": \"global\",\n \"id\": \"global::Promise\"\n }\n },\n \"return\": \"Promise<void>\"\n },\n \"docs\": {\n \"text\": \"Set focus in the control.\",\n \"tags\": []\n }\n },\n \"updateChecked\": {\n \"complexType\": {\n \"signature\": \"(newChecked: boolean, newIndeterminate: boolean) => Promise<void>\",\n \"parameters\": [{\n \"name\": \"newChecked\",\n \"type\": \"boolean\",\n \"docs\": \"\"\n }, {\n \"name\": \"newIndeterminate\",\n \"type\": \"boolean\",\n \"docs\": \"\"\n }],\n \"references\": {\n \"Promise\": {\n \"location\": \"global\",\n \"id\": \"global::Promise\"\n }\n },\n \"return\": \"Promise<void>\"\n },\n \"docs\": {\n \"text\": \"Update `checked` and `indeterminate` properties.\",\n \"tags\": []\n }\n }\n };\n }\n static get elementRef() { return \"el\"; }\n static get watchers() {\n return [{\n \"propName\": \"checked\",\n \"methodName\": \"updateChildrenCheckedValue\"\n }, {\n \"propName\": \"editing\",\n \"methodName\": \"editingChanged\"\n }, {\n \"propName\": \"expanded\",\n \"methodName\": \"expandedChanged\"\n }, {\n \"propName\": \"lastItem\",\n \"methodName\": \"lastItemChanged\"\n }, {\n \"propName\": \"showLines\",\n \"methodName\": \"showLinesChanged\"\n }];\n }\n static get listeners() {\n return [{\n \"name\": \"checkboxChange\",\n \"method\": \"updateCheckboxValue\",\n \"target\": undefined,\n \"capture\": false,\n \"passive\": false\n }];\n }\n}\n//# sourceMappingURL=tree-view-item.js.map\n","export const itemHasCheckbox = (item, defaultCheckbox) => item.checkbox ?? defaultCheckbox;\nconst filterWithCase = (stringToFilter, filter, matchCase) => matchCase\n ? stringToFilter.includes(filter)\n : stringToFilter.toLowerCase().includes(filter.toLowerCase());\nconst filterWithString = (stringToFilter, filter, filterOptions) => filterOptions?.regularExpression\n ? stringToFilter.match(filter) !== null\n : filterWithCase(stringToFilter, filter, filterOptions?.matchCase);\nconst filterDictionary = {\n caption: (item, filterInfo) => filterInfo.filter\n ? filterWithString(item.caption ?? \"\", filterInfo.filter, filterInfo.filterOptions)\n : true,\n checked: (item, filterInfo) => itemHasCheckbox(item, filterInfo.defaultCheckbox) &&\n !item.indeterminate &&\n (item.checked ?? filterInfo.defaultChecked),\n list: (item, filterInfo) => filterInfo.filterSet.has(item.id),\n metadata: (item, filterInfo) => filterInfo.filter\n ? filterWithString(item.metadata ?? \"\", filterInfo.filter, filterInfo.filterOptions)\n : true,\n none: () => true,\n unchecked: (item, filterInfo) => itemHasCheckbox(item, filterInfo.defaultCheckbox) &&\n !item.indeterminate &&\n !(item.checked ?? filterInfo.defaultChecked)\n};\nexport const computeFilter = (filterType, item, filterInfo) => filterInfo.filterOptions?.hideMatchesAndShowNonMatches === true\n ? !filterDictionary[filterType](item, filterInfo)\n : filterDictionary[filterType](item, filterInfo);\nexport function simplifyModel(model) {\n const items = model.items;\n if (!items) {\n return [];\n }\n const simplifiedModel = items.map(item => ({\n id: item.id,\n items: simplifyModel(item)\n }));\n return simplifiedModel;\n}\nexport const prettyPrint = (value) => JSON.stringify(value, undefined, 2);\n//# sourceMappingURL=helpers.js.map\n","export const reloadItems = async (elementRef, itemId, flattenedTreeModel, lazyLoadTreeItemsCallback, loadLazyContent, removeItems, beforeProperties, afterProperties) => {\n const itemToReloadUIModel = flattenedTreeModel.get(itemId);\n if (!lazyLoadTreeItemsCallback ||\n !itemToReloadUIModel ||\n itemToReloadUIModel.item.leaf === true) {\n return false;\n }\n const noProperties = !beforeProperties && !afterProperties;\n if (noProperties) {\n beforeProperties = { downloading: true };\n afterProperties = { downloading: false };\n }\n if (beforeProperties) {\n elementRef.updateItemsProperties([itemId], beforeProperties);\n }\n const newItems = await lazyLoadTreeItemsCallback(itemId);\n // Store previous ids in a Set for efficient access\n const oldItemsSet = new Set(itemToReloadUIModel.item.items.map(item => item.id));\n const reloadNewItemsQueue = [];\n // Reconcile the state of old items to new ones\n newItems.forEach(newItem => {\n const newItemOldUIModel = flattenedTreeModel.get(newItem.id);\n // If the item previously existed in the client\n if (newItemOldUIModel && oldItemsSet.has(newItem.id)) {\n const newItemOldInfo = newItemOldUIModel.item;\n // Reconciliate the state\n newItem.checked = newItemOldInfo.checked;\n newItem.expanded = newItemOldInfo.expanded;\n newItem.indeterminate = newItemOldInfo.indeterminate;\n newItem.selected = newItemOldInfo.selected;\n const newItemWasLazyLoaded = newItem.lazy && newItemOldInfo.lazy === false;\n if (newItemWasLazyLoaded) {\n newItem.lazy = false;\n // Don't remove items until the child item is reloaded\n newItem.items = newItemOldInfo.items;\n // Add the item to be reloaded after its parent has finished its reload\n reloadNewItemsQueue.push(newItem.id);\n }\n // Remove the item from the set to properly count items that no longer\n // exist in the node\n oldItemsSet.delete(newItem.id);\n }\n });\n // Remove all the items that no longer exists in the node\n if (oldItemsSet.size > 0) {\n removeItems([...oldItemsSet.keys()]);\n }\n // Update the items of the reloaded node\n await loadLazyContent(itemId, newItems);\n if (afterProperties) {\n elementRef.updateItemsProperties([itemId], afterProperties);\n }\n // Reload child items that were lazy loaded\n await Promise.allSettled(reloadNewItemsQueue.map(itemToReload => reloadItems(elementRef, itemToReload, flattenedTreeModel, lazyLoadTreeItemsCallback, loadLazyContent, removeItems)));\n return true;\n};\n//# sourceMappingURL=reload-items.js.map\n","import { itemHasCheckbox } from \"./helpers\";\nexport const updateItemProperty = (itemId, properties, flattenedTreeModel, newSelectedItems, newCheckboxItems, defaultCheckbox) => {\n const itemUIModel = flattenedTreeModel.get(itemId);\n if (!itemUIModel) {\n return;\n }\n const itemInfo = itemUIModel.item;\n Object.keys(properties).forEach(propertyName => {\n if (properties[propertyName] !== undefined) {\n itemInfo[propertyName] = properties[propertyName];\n }\n });\n // Accumulate selection/deselection\n if (properties.selected) {\n newSelectedItems.add(itemId);\n }\n else if (properties.selected === false) {\n newSelectedItems.delete(itemId);\n }\n // Accumulate/remove items with checkbox\n if (itemHasCheckbox(itemInfo, defaultCheckbox)) {\n newCheckboxItems.set(itemId, itemUIModel);\n }\n else {\n newCheckboxItems.delete(itemId);\n }\n};\n//# sourceMappingURL=update-item-property.js.map\n","ch-tree-view-render {\n display: contents;\n}","import { h, forceUpdate } from \"@stencil/core\";\nimport { computeFilter, itemHasCheckbox } from \"./helpers\";\nimport { fromGxImageToURL } from \"./genexus-implementation\";\nimport { removeTreeViewItems, scrollIntoVisibleId, scrollIntoVisiblePath } from \"./utils\";\nimport { reloadItems } from \"./reload-items\";\nimport { updateItemProperty } from \"./update-item-property\";\nimport { insertIntoIndex, removeElement } from \"../../../common/array\";\nconst ROOT_ID = null;\nconst DEFAULT_DRAG_DISABLED_VALUE = false;\nconst DEFAULT_DROP_DISABLED_VALUE = false;\nconst DEFAULT_EDITABLE_ITEMS_VALUE = true;\nconst DEFAULT_EXPANDED_VALUE = false;\nconst DEFAULT_INDETERMINATE_VALUE = false;\nconst DEFAULT_LAZY_VALUE = false;\nconst DEFAULT_ORDER_VALUE = 0;\nconst DEFAULT_SELECTED_VALUE = false;\n// There are a filter applied and, if the type is \"caption\" or\n// \"metadata\", the filter property must be set\nconst treeViewHasFilters = (filterType, filter) => filterType !== \"none\" &&\n ((filterType !== \"caption\" && filterType !== \"metadata\") ||\n (filter != null && filter.trim() !== \"\"));\nconst gxDragDisabled = (itemModel, treeState) => itemModel.dragEnabled != null\n ? !itemModel.dragEnabled\n : treeState.dragDisabled;\nconst gxDropDisabled = (itemModel, treeState) => itemModel.dropEnabled != null\n ? !itemModel.dropEnabled\n : treeState.dropDisabled;\nconst isItemDisabled = (itemModel, treeState, useGxRender) => useGxRender\n ? gxDropDisabled(itemModel, treeState)\n : itemModel.dropDisabled ?? treeState.dropDisabled;\nconst treeDropId = (treeItemId) => `ch-tree-view-drop__${treeItemId}`;\nconst defaultRenderItem = (itemModel, treeState, treeHasFilter, lastItem, level, dropBeforeAndAfterEnabled, useGxRender = false) => (treeState.filterType === \"none\" || itemModel.render !== false) && [\n dropBeforeAndAfterEnabled && (h(\"ch-tree-view-drop\", { id: treeDropId(itemModel.id), level: level, treeItemId: itemModel.id, type: \"before\" })),\n h(\"ch-tree-view-item\", { key: itemModel.id, id: itemModel.id, caption: itemModel.caption, checkbox: itemModel.checkbox ?? treeState.checkbox, checked: itemModel.checked ?? treeState.checked, class: itemModel.class || treeState.treeViewItemCssClass, disabled: useGxRender\n ? itemModel.enabled === false\n : itemModel.disabled, downloading: itemModel.downloading, dragDisabled: useGxRender\n ? gxDragDisabled(itemModel, treeState)\n : itemModel.dragDisabled ??\n treeState.dragDisabled, dropDisabled: isItemDisabled(itemModel, treeState, useGxRender), editable: itemModel.editable ?? treeState.editableItems, endImgSrc: useGxRender\n ? fromGxImageToURL(itemModel.endImgSrc, treeState.gxSettings, treeState.gxImageConstructor)\n : itemModel.endImgSrc, endImgType: itemModel.endImgType ?? \"background\", expanded: itemModel.expanded, expandableButton: treeState.expandableButton, expandOnClick: treeState.expandOnClick, indeterminate: itemModel.indeterminate, lastItem: lastItem, lazyLoad: itemModel.lazy, leaf: itemModel.leaf, level: level, metadata: itemModel.metadata, selected: itemModel.selected, showLines: treeState.showLines, toggleCheckboxes: itemModel.toggleCheckboxes ?? treeState.toggleCheckboxes, startImgSrc: useGxRender\n ? fromGxImageToURL(itemModel.startImgSrc, treeState.gxSettings, treeState.gxImageConstructor)\n : itemModel.startImgSrc, startImgType: itemModel.startImgType ?? \"background\" }, !itemModel.leaf &&\n itemModel.items != null &&\n itemModel.items.map((subModel, index) => defaultRenderItem(subModel, treeState, treeHasFilter, treeState.showLines !== \"none\" &&\n // If there is a filter applied in the current list, use the\n // lastItemId value to calculate the last item\n (treeHasFilter && itemModel.lastItemId !== undefined\n ? subModel.id === itemModel.lastItemId\n : index === itemModel.items.length - 1), level + 1, \n // When dragging \"before\" and \"after\" an item and the direct parent\n // has drops disabled, don't render the ch-tree-view-drop elements.\n treeState.dropMode !== \"above\" &&\n isItemDisabled(itemModel, treeState, useGxRender) !== true, useGxRender))),\n dropBeforeAndAfterEnabled && lastItem && (h(\"ch-tree-view-drop\", { id: treeDropId(itemModel.id) + \"-after\", level: level, treeItemId: itemModel.id, type: \"after\" }))\n];\nconst defaultSortItemsCallback = (subModel) => {\n subModel.sort((a, b) => {\n if (a.order < b.order) {\n return -1;\n }\n if (a.order > b.order) {\n return 0;\n }\n return a.caption <= b.caption ? -1 : 0;\n });\n};\nexport class ChTreeViewRender {\n constructor() {\n this.waitDropProcessing = false;\n this.checkbox = false;\n this.checked = false;\n this.checkDroppableZoneCallback = undefined;\n this.cssClass = \"tree-view\";\n this.dragDisabled = DEFAULT_DRAG_DISABLED_VALUE;\n this.dropDisabled = DEFAULT_DROP_DISABLED_VALUE;\n this.dropItemsCallback = undefined;\n this.dropMode = \"above\";\n this.editableItems = DEFAULT_EDITABLE_ITEMS_VALUE;\n this.expandableButton = \"decorative\";\n this.expandOnClick = true;\n this.filter = undefined;\n this.filterDebounce = 250;\n this.filterList = [];\n this.filterOptions = {};\n this.filterType = \"none\";\n this.gxImageConstructor = undefined;\n this.gxSettings = undefined;\n this.lazyLoadTreeItemsCallback = undefined;\n this.modifyItemCaptionCallback = undefined;\n this.multiSelection = false;\n this.renderItem = defaultRenderItem;\n this.showLines = \"none\";\n this.sortItemsCallback = defaultSortItemsCallback;\n this.toggleCheckboxes = false;\n this.treeModel = [];\n this.treeViewItemCssClass = \"tree-view-item\";\n this.useGxRender = false;\n }\n // UI Models\n #flattenedTreeModel = new Map();\n #flattenedCheckboxTreeModel = new Map();\n #selectedItems = new Set();\n #selectedChangeScheduled = false;\n #checkedChangeScheduled = false;\n #rootNode;\n // Filters info\n #applyFilters = false;\n #immediateFilter;\n #filterTimeout;\n #filterListAsSet;\n // Refs\n #treeRef;\n el;\n filterChanged() {\n if (this.filterType === \"caption\" || this.filterType === \"metadata\") {\n this.#scheduleFilterProcessing();\n }\n }\n filterDebounceChanged() {\n if (this.filterType === \"caption\" || this.filterType === \"metadata\") {\n this.#scheduleFilterProcessing();\n }\n }\n filterListChanged() {\n // Use a Set to efficiently check for ids\n this.#filterListAsSet = new Set(this.filterList);\n if (this.filterType === \"list\") {\n this.#scheduleFilterProcessing();\n }\n }\n filterOptionsChanged() {\n this.#scheduleFilterProcessing();\n }\n filterTypeChanged() {\n this.#scheduleFilterProcessing();\n }\n multiSelectionChanged(newMultiSelection) {\n // MultiSelection is disabled. We must select the last updated item\n if (!newMultiSelection) {\n this.#removeAllSelectedItemsExceptForTheLast(this.#selectedItems);\n }\n }\n treeModelChanged() {\n this.#flattenModel();\n }\n /**\n * Fired when the checked items change.\n * This event does take into account the currently filtered items.\n */\n checkedItemsChange;\n /**\n * Fired when an element displays its contextmenu.\n */\n itemContextmenu;\n /**\n * Fired when the user interacts with an item in a way that its reference\n * must be opened.\n */\n itemOpenReference;\n /**\n * Fired when the selected items change.\n * This event can be fired by the following conditions:\n * 1. A user changes the selected items interacting with the Tree View.\n *\n * 2. The `multiSelection` value is changed from `true` to `false`.\n *\n * 3. A selected item is no longer rendered because it does not satisfies a\n * filter condition.\n *\n * 4. TODO: The `treeModel` property is updated and contains different selected\n * items. Even if it does not contains different selected items, this\n * event is fired because the selected items can have a different path\n * than before the `treeModel` update.\n *\n * 5. The `updateItemsProperties` method is executed, changing the item\n * selection.\n *\n * 6. A selected item is removed.\n *\n * 7. TODO: A selected item is moved into a new parent with drag and drop.\n * In this case, since the detail of the event contains the information\n * of the parent, this event must be fired to update the information.\n *\n * 8. Executing `scrollIntoVisible` method and updating the selected value\n * of the scrolled item.\n *\n * 9. TODO: An external item is dropped into the Tree View and the item is\n * selected.\n *\n * 10. TODO: Lazy loading content that has selected items?\n *\n * Thing that does not fire this event:\n * - TODO: Renaming a selected item.\n *\n * - TODO: Applying a filter that keeps all selected items rendered.\n */\n selectedItemsChange;\n /**\n * Given the drop accepting, the data transfer info and the external items,\n * it process the drops of the items in the tree.\n */\n async dropItems(acceptDrop, dataTransferInfo, items) {\n if (!acceptDrop) {\n return;\n }\n const newParentId = dataTransferInfo.newContainer.id;\n const newParentUIModel = this.#flattenedTreeModel.get(newParentId);\n const dropType = dataTransferInfo.dropType;\n // When the dropType is \"before\" or \"after\", the target node must be\n // the parent\n const actualParent = dropType === \"above\"\n ? newParentUIModel.item\n : newParentUIModel.parentItem;\n // Only move the items to the new parent, keeping the state\n if (dataTransferInfo.dropInTheSameTree) {\n let specificIndexToInsert = undefined;\n if (dropType !== \"above\") {\n specificIndexToInsert = {\n index: actualParent.items.findIndex(item => item.id === dataTransferInfo.newContainer.id)\n };\n if (dropType === \"after\") {\n specificIndexToInsert.index++;\n }\n }\n // Add the UI models to the new container and remove the UI models from\n // the old containers\n dataTransferInfo.draggedItems.forEach(this.#moveItemToNewParent(actualParent, specificIndexToInsert));\n // When the selected items are moved, the tree must update its internal\n // state to not have undefined references\n if (dataTransferInfo.draggingSelectedItems) {\n this.#scheduleSelectedItemsChange();\n }\n }\n // Add the new items\n else {\n if (items == null) {\n return;\n }\n // Add new items to the parent\n actualParent.items.push(...items);\n // Flatten the new UI models\n items.forEach(this.#flattenItemUIModel(actualParent));\n }\n this.#sortItems(actualParent.items);\n // Open the item to visualize the new subitems\n actualParent.expanded = true;\n // Re-sync checked items\n this.#scheduleCheckedItemsChange();\n // Update filters\n this.#scheduleFilterProcessing();\n // Force re-render\n forceUpdate(this);\n }\n /**\n * Given a list of ids, it returns an array of the items that exists in the\n * given list.\n */\n async getItemsInfo(itemsId) {\n return this.#getItemsInfo(itemsId);\n }\n #getItemsInfo = (itemsId) => {\n const treeViewItemsInfo = [];\n itemsId.forEach(itemId => {\n const itemUIModel = this.#flattenedTreeModel.get(itemId);\n if (itemUIModel) {\n treeViewItemsInfo.push(itemUIModel);\n }\n });\n return treeViewItemsInfo;\n };\n /**\n * Given an item id, an array of items to add, the download status and the\n * lazy state, updates the item's UI Model.\n */\n async loadLazyContent(itemId, items, downloading = false, lazy = false) {\n const itemToLazyLoadContent = this.#flattenedTreeModel.get(itemId).item;\n // Establish that the content was lazy loaded\n itemToLazyLoadContent.downloading = downloading;\n itemToLazyLoadContent.lazy = lazy;\n // Check if there is items to add\n if (items == null) {\n return;\n }\n // @todo What happens in the server when dropping items on a lazy node?\n itemToLazyLoadContent.items = items;\n this.#sortItems(itemToLazyLoadContent.items);\n this.#flattenSubModel(itemToLazyLoadContent);\n // Re-sync checked items\n this.#scheduleCheckedItemsChange();\n // Update filters\n this.#scheduleFilterProcessing();\n // Force re-render\n forceUpdate(this);\n }\n /**\n * Given a list of ids, removes the items and their children in the tree.\n */\n async removeItems(items) {\n const removeItemsResult = removeTreeViewItems(items, this.#flattenedTreeModel, this.#flattenedCheckboxTreeModel, this.#selectedItems);\n if (!this.#treeHasFilters()) {\n // Update selected items\n if (removeItemsResult.atLeastOneSelected) {\n this.#updateSelectedItems();\n }\n // Re-sync checked items\n if (removeItemsResult.atLeastOneCheckbox) {\n this.#scheduleCheckedItemsChange();\n }\n }\n // Force re-render\n if (removeItemsResult.atLeastOneElement) {\n forceUpdate(this);\n // Update filters\n this.#scheduleFilterProcessing(\"immediate\");\n }\n }\n /**\n * Given an item id and the additional properties to update before and after\n * reload, it reloads the items of the `itemId` node by using the\n * `lazyLoadTreeItemsCallback` property.\n */\n async reloadItems(itemId, beforeProperties, afterProperties) {\n const success = await reloadItems(this.el, itemId, this.#flattenedTreeModel, this.lazyLoadTreeItemsCallback, (itemId, items) => this.loadLazyContent(itemId, items), (items) => this.removeItems(items), beforeProperties, afterProperties);\n return success;\n }\n /**\n * Given the path of the item (represent by a sorted array containing all ids\n * from the root to the item) and the additional properties to update after,\n * it displays and scrolls into the item view.\n * The path can also be a string representing the id of the item to scroll\n * into.\n *\n * When using a path, this method will fail if:\n * - The path does not start from the root element.\n * - The path contains a cycle.\n * - The path does not correspond to a valid path on the server:\n * - One of the item of the path, except for the last one, is a leaf.\n * - An item in the path does not exists on the server.\n * - The path has repeated items.\n * - And so on.\n */\n async scrollIntoVisible(path, afterProperties) {\n const hasOnlyTheItemId = typeof path === \"string\";\n const success = await (hasOnlyTheItemId\n ? scrollIntoVisibleId(path, this.#flattenedTreeModel)\n : scrollIntoVisiblePath(this.el, path, this.#flattenedTreeModel, this.#rootNode, this.lazyLoadTreeItemsCallback));\n if (!success) {\n return false;\n }\n const itemId = hasOnlyTheItemId ? path : path[path.length - 1];\n // Expand all parent items\n let parentInfo = this.#flattenedTreeModel.get(itemId).parentItem;\n while (parentInfo !== this.#rootNode) {\n parentInfo.expanded = true;\n parentInfo = this.#flattenedTreeModel.get(parentInfo.id).parentItem;\n }\n if (afterProperties) {\n this.updateItemsProperties([itemId], afterProperties);\n }\n forceUpdate(this);\n // Scroll into the itemId view, after rendering has completed\n requestAnimationFrame(() => {\n this.#treeRef.scrollIntoVisible(itemId);\n });\n return true;\n }\n /**\n * This method is used to toggle a tree item by the tree item id/ids.\n *\n * @param treeItemIds An array id the tree items to be toggled.\n * @param expand A boolean indicating that the tree item should be expanded or collapsed. (optional)\n * @returns The modified items after the method was called.\n */\n async toggleItems(treeItemIds, expand) {\n if (!treeItemIds) {\n return [];\n }\n const modifiedTreeItems = [];\n treeItemIds.forEach(treeItemId => {\n const itemInfo = this.#flattenedTreeModel.get(treeItemId).item;\n if (itemInfo) {\n itemInfo.expanded = expand ?? !itemInfo.expanded;\n modifiedTreeItems.push({\n id: itemInfo.id,\n expanded: itemInfo.expanded\n });\n }\n });\n // Force re-render\n forceUpdate(this);\n return modifiedTreeItems;\n }\n /**\n * Given a subset of item's properties, it updates all item UI models.\n */\n async updateAllItemsProperties(properties) {\n [...this.#flattenedTreeModel.values()].forEach(itemUIModel => {\n if (properties.expanded != null) {\n itemUIModel.item.expanded = properties.expanded;\n }\n if (properties.checked != null) {\n itemUIModel.item.checked = properties.checked;\n itemUIModel.item.indeterminate = false;\n }\n });\n // Update filters\n if (properties.checked != null) {\n this.#scheduleFilterProcessing();\n }\n forceUpdate(this);\n }\n /**\n * Given a item list and the properties to update, it updates the properties\n * of the items in the list.\n */\n async updateItemsProperties(items, properties) {\n // Set to check if there are new selected items\n const newSelectedItems = new Set(this.#selectedItems);\n // Map to check if there are new items with checkbox\n const newCheckboxItems = new Map(this.#flattenedCheckboxTreeModel);\n items.forEach(itemId => {\n updateItemProperty(itemId, properties, this.#flattenedTreeModel, newSelectedItems, newCheckboxItems, this.checkbox);\n });\n // MultiSelection is disabled. We must select the last updated item\n if (!this.multiSelection) {\n this.#removeAllSelectedItemsExceptForTheLast(newSelectedItems);\n }\n // Update filters if necessary\n if (this.#treeHasFilters()) {\n this.#scheduleFilterProcessing();\n }\n else {\n this.#checkIfThereAreDifferentItemsWithCheckbox(newCheckboxItems);\n this.#checkIfThereAreDifferentSelectedItems(newSelectedItems);\n }\n forceUpdate(this);\n }\n /**\n * Update the information about the valid droppable zones.\n * @param requestTimestamp Time where the request to the server was made. Useful to avoid having old information.\n * @param newContainerId ID of the container where the drag is trying to be made.\n * @param draggedItems Information about the dragged items.\n * @param validDrop Current state of the droppable zone.\n * @param dropType Type of drop that wants to be effected\n */\n async updateValidDropZone(requestTimestamp, newContainerId, draggedItems, dropType, validDrop) {\n this.#treeRef.updateValidDropZone(requestTimestamp, newContainerId, draggedItems, dropType, validDrop);\n }\n onCheckboxChange(event) {\n event.stopPropagation();\n const detail = event.detail;\n const treeItemId = detail.id;\n const itemUIModel = this.#flattenedCheckboxTreeModel.get(treeItemId);\n // In some cases, when the `treeModel` and `checked` properties are updated\n // outside of the tree control, some events are fired with undefined references\n if (!itemUIModel) {\n return;\n }\n const itemInfo = itemUIModel.item;\n itemInfo.checked = detail.checked;\n itemInfo.indeterminate = detail.indeterminate;\n this.#scheduleCheckedItemsChange();\n // Update filters\n if (this.filterType === \"checked\" || this.filterType === \"unchecked\") {\n this.#scheduleFilterProcessing();\n }\n // Force re-render\n forceUpdate(this);\n }\n onLoadLazyContent(event) {\n if (!this.lazyLoadTreeItemsCallback) {\n return;\n }\n event.stopPropagation();\n const treeItemId = event.detail;\n const promise = this.lazyLoadTreeItemsCallback(treeItemId);\n event.target.downloading = true;\n promise.then(result => {\n this.loadLazyContent(treeItemId, result);\n });\n }\n onModifyCaption(event) {\n if (!this.modifyItemCaptionCallback) {\n return;\n }\n event.stopPropagation();\n const itemRef = event.target;\n const itemId = event.detail.id;\n const itemUIModel = this.#flattenedTreeModel.get(itemId);\n const itemInfo = itemUIModel.item;\n const newCaption = event.detail.caption;\n const oldCaption = itemInfo.caption;\n // Optimistic UI: Update the caption in the UI Model before the change is\n // completed in the server\n itemInfo.caption = newCaption;\n // Due to performance reasons, we don't make a shallow copy of the\n // treeModel to force a re-render\n itemRef.caption = newCaption;\n const promise = this.modifyItemCaptionCallback(itemId, newCaption);\n promise.then(status => {\n if (status.success) {\n this.#sortItems(itemUIModel.parentItem.items);\n // Update filters\n this.#scheduleFilterProcessing();\n // Force re-render\n forceUpdate(this);\n }\n else {\n itemRef.caption = oldCaption;\n itemInfo.caption = oldCaption;\n // Do something with the error message\n }\n });\n }\n onOpenReference(event) {\n event.stopPropagation();\n this.itemOpenReference.emit(event.detail);\n }\n #handleDroppableZoneEnter = (event) => {\n if (!this.checkDroppableZoneCallback) {\n return;\n }\n event.stopPropagation();\n // Suppose the request is made immediately by executing the callback\n const requestTimestamp = new Date().getTime();\n const dropInformation = event.detail;\n const promise = this.checkDroppableZoneCallback(dropInformation);\n promise.then(validDrop => {\n this.updateValidDropZone(requestTimestamp, dropInformation.newContainer.id, dropInformation.draggedItems, dropInformation.dropType, validDrop);\n });\n };\n #handleSelectedItemsChange = (event) => {\n event.stopPropagation();\n const itemsToProcess = new Map(event.detail);\n const previousSelectedItems = this.#selectedItems;\n // Remove no longer selected items\n previousSelectedItems.forEach(selectedItemId => {\n const itemUIModel = this.#flattenedTreeModel.get(selectedItemId).item;\n const itemIsStillSelected = itemsToProcess.get(selectedItemId);\n // The item does not need to be added. Remove it from the processed list\n if (itemIsStillSelected) {\n itemUIModel.expanded = itemIsStillSelected.expanded; // Update expanded state\n itemsToProcess.delete(selectedItemId);\n }\n // The item must be un-selected in the UI Model\n else {\n itemUIModel.selected = false;\n previousSelectedItems.delete(selectedItemId);\n }\n });\n // Add new selected items\n itemsToProcess.forEach((newSelectedItemInfo, itemId) => {\n const newSelectedItem = this.#flattenedTreeModel.get(itemId).item;\n newSelectedItem.selected = true;\n newSelectedItem.expanded = newSelectedItemInfo.expanded;\n previousSelectedItems.add(itemId);\n });\n // Queue re-render to avoid issues about synchronization the Virtual DOM\n // with the real DOM\n forceUpdate(this);\n this.#updateSelectedItems();\n };\n #handleExpandedItemChange = (event) => {\n const detail = event.detail;\n const itemInfo = this.#flattenedTreeModel.get(detail.id).item;\n itemInfo.expanded = detail.expanded;\n };\n #handleItemContextmenu = (event) => {\n event.stopPropagation();\n this.itemContextmenu.emit(event.detail);\n };\n #handleItemsDropped = (event) => {\n const dataTransferInfo = event.detail;\n const newContainer = dataTransferInfo.newContainer;\n const newParentId = newContainer.id;\n // Check if the parent exists in the UI Model\n if (!this.#flattenedTreeModel.get(newParentId)) {\n return;\n }\n const draggedItems = dataTransferInfo.draggedItems;\n if (draggedItems.length === 0 || !this.dropItemsCallback) {\n return;\n }\n event.stopPropagation();\n const promise = this.dropItemsCallback(dataTransferInfo);\n this.waitDropProcessing = true;\n promise.then(async (response) => {\n this.dropItems(response.acceptDrop, dataTransferInfo, response.items);\n this.waitDropProcessing = false;\n });\n };\n #removeAllSelectedItemsExceptForTheLast = (currentSelectedItems) => {\n if (currentSelectedItems.size > 1) {\n const selectedItemsArray = [...currentSelectedItems.values()];\n const lastItemIndex = currentSelectedItems.size - 1;\n // Deselect all items except the last\n for (let index = 0; index < lastItemIndex; index++) {\n const itemId = selectedItemsArray[index];\n this.#flattenedTreeModel.get(itemId).item.selected = false;\n }\n // Create a new Set with only the last item\n currentSelectedItems.clear();\n currentSelectedItems.add(selectedItemsArray[lastItemIndex]);\n this.#scheduleSelectedItemsChange();\n }\n };\n #moveItemToNewParent = (newParentItem, specificIndex) => (dataTransferInfo, index) => {\n const itemUIModelExtended = this.#flattenedTreeModel.get(dataTransferInfo.id);\n const item = itemUIModelExtended.item;\n const oldParentItem = itemUIModelExtended.parentItem;\n const oldIndex = oldParentItem.items.findIndex(el => el.id === item.id);\n // Remove the UI model from the previous parent. The equality function\n // must be by index, not by object reference\n removeElement(oldParentItem.items, oldIndex);\n // The item must be inserted in a specific position, because the dropMode\n // has \"before\" and \"after\" enabled\n if (specificIndex !== undefined) {\n let newIndex = specificIndex.index + index;\n // The item is moved in the same parent, so no new items are added\n // The specificIndex must be decreased to balance the increment\n if (oldParentItem.id === newParentItem.id && oldIndex < newIndex) {\n newIndex--;\n specificIndex.index--;\n }\n insertIntoIndex(newParentItem.items, item, newIndex);\n }\n // Add the UI Model to the new parent by pushing it at the end\n else {\n newParentItem.items.push(item);\n }\n // Reference the new parent in the item\n itemUIModelExtended.parentItem = newParentItem;\n };\n #flattenSubModel = (model) => {\n const items = model.items;\n if (!items) {\n // Make sure that subtrees don't have an undefined array\n if (model.leaf !== true) {\n model.items = [];\n }\n return;\n }\n this.#sortItems(items);\n items.forEach(this.#flattenItemUIModel(model));\n };\n #flattenItemUIModel = (parentModel) => (item) => {\n this.#flattenedTreeModel.set(item.id, {\n parentItem: parentModel,\n item: item\n });\n // Add the items that have a checkbox in a separate Map\n if (this.#itemHasCheckbox(item)) {\n this.#flattenedCheckboxTreeModel.set(item.id, {\n parentItem: parentModel,\n item: item\n });\n }\n // Make sure the properties are with their default values to avoid issues\n // when reusing DOM nodes\n item.expanded ??= DEFAULT_EXPANDED_VALUE;\n item.indeterminate ??= DEFAULT_INDETERMINATE_VALUE;\n item.lazy ??= DEFAULT_LAZY_VALUE;\n item.order ??= DEFAULT_ORDER_VALUE;\n item.selected ??= DEFAULT_SELECTED_VALUE;\n if (item.selected) {\n this.#selectedItems.add(item.id);\n }\n this.#flattenSubModel(item);\n };\n #itemHasCheckbox = (item) => itemHasCheckbox(item, this.checkbox);\n #treeHasFilters = () => treeViewHasFilters(this.filterType, this.filter);\n #sortItems = (items) => {\n // Ensure that items are sorted if the dropMode enables it\n if (this.dropMode === \"above\" && this.sortItemsCallback) {\n this.sortItemsCallback(items);\n }\n };\n #flattenModel = () => {\n this.#flattenedTreeModel.clear();\n this.#flattenedCheckboxTreeModel.clear();\n this.#selectedItems.clear();\n this.#rootNode = { id: ROOT_ID, caption: ROOT_ID, items: this.treeModel };\n this.#flattenSubModel(this.#rootNode);\n // Re-sync filters\n this.#scheduleFilterProcessing();\n // The model was updated at runtime, so we need to update the references\n // Re-sync selected items\n this.#scheduleSelectedItemsChange();\n // Re-sync checked items\n this.#scheduleCheckedItemsChange();\n };\n #filterSubModel = (item, filterInfo, currentSelectedItems, currentCheckboxItems) => {\n let aSubItemIsRendered = false;\n // Check if a subitem is rendered\n if (item.leaf !== true && item.items != null) {\n let lastItemId = undefined;\n item.items.forEach(subItem => {\n const itemSatisfiesFilter = this.#filterSubModel(subItem, filterInfo, currentSelectedItems, currentCheckboxItems);\n aSubItemIsRendered ||= itemSatisfiesFilter;\n if (itemSatisfiesFilter) {\n lastItemId = subItem.id;\n }\n });\n item.lastItemId = lastItemId;\n }\n // The current item is rendered if it satisfies the filter condition or a\n // subitem exists that needs to be rendered\n const satisfiesFilter = aSubItemIsRendered || computeFilter(this.filterType, item, filterInfo);\n item.render = satisfiesFilter; // Update item render\n // Update selected and checkbox items\n if (satisfiesFilter && item.id !== ROOT_ID) {\n if (item.selected) {\n currentSelectedItems.add(item.id);\n }\n if (this.#itemHasCheckbox(item)) {\n const itemUIModel = this.#flattenedTreeModel.get(item.id);\n currentCheckboxItems.set(item.id, itemUIModel);\n }\n }\n return satisfiesFilter;\n };\n #scheduleCheckedItemsChange = () => {\n this.#checkedChangeScheduled = true;\n };\n #scheduleSelectedItemsChange = () => {\n this.#selectedChangeScheduled = true;\n };\n #updateSelectedItems = () => {\n const selectedItemsInfo = this.#getItemsInfo([\n ...this.#selectedItems.keys()\n ]);\n this.selectedItemsChange.emit(selectedItemsInfo);\n };\n #updateCheckedItems = () => {\n // New copy of the checked items\n const allItemsWithCheckbox = new Map(this.#flattenedCheckboxTreeModel);\n // Update the checked value if not defined\n allItemsWithCheckbox.forEach(itemUIModel => {\n itemUIModel.item.checked ??= this.checked;\n });\n this.checkedItemsChange.emit(allItemsWithCheckbox);\n };\n #scheduleFilterProcessing = (immediateFilter) => {\n this.#applyFilters = true;\n if (immediateFilter !== undefined) {\n this.#immediateFilter ??= immediateFilter;\n }\n };\n #checkIfThereAreDifferentItemsWithCheckbox = (newCheckboxItems) => {\n if (newCheckboxItems.size !== this.#flattenedCheckboxTreeModel.size) {\n this.#checkedChangeScheduled = true;\n }\n // Check if the items in each Map have the same id\n else {\n this.#flattenedCheckboxTreeModel.forEach((_, itemId) => {\n // Found a value that don't belong to the checkboxItems with filters,\n // schedule checkedItemsChange\n if (!newCheckboxItems.has(itemId)) {\n // Schedule checkedItemsChange\n this.#checkedChangeScheduled = true;\n }\n });\n }\n // The previous checkbox items will now be the selected items with filter\n this.#flattenedCheckboxTreeModel = newCheckboxItems;\n };\n #checkIfThereAreDifferentSelectedItems = (newSelectedItems) => {\n if (newSelectedItems.size !== this.#selectedItems.size) {\n this.#selectedChangeScheduled = true;\n }\n // Check if the items in each Set have the same id\n else {\n this.#selectedItems.forEach(itemId => {\n // Found a value that don't belong to the selectedItems with filters,\n // deselect the item\n if (!newSelectedItems.has(itemId)) {\n this.#flattenedTreeModel.get(itemId).item.selected = false;\n // Schedule selectedItemsChange\n this.#selectedChangeScheduled = true;\n }\n });\n }\n // The previous selected items will now be the selected items with filter\n this.#selectedItems = newSelectedItems;\n };\n #updateFilters = () => {\n if (this.filterType === \"none\") {\n // Check if there are more items with checkbox\n const itemsWithCheckbox = new Map();\n this.#flattenedTreeModel.forEach((itemUIModel, itemId) => {\n if (this.#itemHasCheckbox(itemUIModel.item)) {\n itemsWithCheckbox.set(itemId, itemUIModel);\n }\n });\n this.#checkIfThereAreDifferentItemsWithCheckbox(itemsWithCheckbox);\n this.#validateCheckedAndSelectedItems();\n return;\n }\n // Remove queued filter processing\n clearTimeout(this.#filterTimeout);\n const processWithDebounce = this.filterDebounce > 0 &&\n (this.filterType === \"caption\" || this.filterType === \"metadata\");\n const filterFunction = () => {\n const currentSelectedItems = new Set();\n const currentCheckedItems = new Map();\n this.#filterSubModel({\n id: ROOT_ID,\n caption: ROOT_ID,\n items: this.treeModel\n }, {\n defaultCheckbox: this.checkbox,\n defaultChecked: this.checked,\n filter: this.filter,\n filterOptions: this.filterOptions,\n filterSet: this.#filterListAsSet\n }, currentSelectedItems, currentCheckedItems);\n // It validates if there are differences between the items with checkbox\n // and the selected items. If there are, emit the corresponding updates.\n this.#checkIfThereAreDifferentSelectedItems(currentSelectedItems);\n this.#checkIfThereAreDifferentItemsWithCheckbox(currentCheckedItems);\n this.#validateCheckedAndSelectedItems();\n };\n // Check if should filter with debounce\n if (processWithDebounce && this.#immediateFilter !== \"immediate\") {\n this.#filterTimeout = setTimeout(() => {\n this.#immediateFilter = undefined;\n filterFunction();\n forceUpdate(this); // After the filter processing is completed, force a re-render\n }, this.filterDebounce);\n }\n // No debounce\n else {\n this.#immediateFilter = undefined;\n filterFunction();\n }\n };\n #validateCheckedAndSelectedItems = () => {\n if (this.#checkedChangeScheduled) {\n this.#updateCheckedItems();\n this.#checkedChangeScheduled = false;\n }\n if (this.#selectedChangeScheduled) {\n this.#selectedChangeScheduled = false;\n // Update the selected items in the ch-tree-view control\n this.#updateSelectedItems();\n }\n };\n #getSelectedItemsCallback = () => {\n const selectedItemsInfo = new Map();\n this.#selectedItems.forEach(itemId => {\n const itemUIModel = this.#flattenedTreeModel.get(itemId);\n const itemInfo = itemUIModel.item;\n selectedItemsInfo.set(itemId, {\n id: itemInfo.id,\n expanded: itemInfo.expanded,\n metadata: itemInfo.metadata,\n parentId: itemUIModel.parentItem.id\n });\n });\n return selectedItemsInfo;\n };\n componentWillLoad() {\n this.#flattenModel();\n }\n componentWillRender() {\n if (!this.#selectedChangeScheduled &&\n !this.#checkedChangeScheduled &&\n !this.#applyFilters) {\n return;\n }\n // If the filters must be applied, we must let the filters decided which\n // are the selected and checked items\n if (this.#applyFilters) {\n this.#updateFilters();\n this.#applyFilters = false;\n return;\n }\n this.#validateCheckedAndSelectedItems();\n }\n render() {\n return (h(\"ch-tree-view\", { class: this.cssClass || null, multiSelection: this.multiSelection, selectedItemsCallback: this.#getSelectedItemsCallback, waitDropProcessing: this.waitDropProcessing, onDroppableZoneEnter: this.#handleDroppableZoneEnter, onExpandedItemChange: this.#handleExpandedItemChange, onItemContextmenu: this.#handleItemContextmenu, onItemsDropped: this.#handleItemsDropped, onSelectedItemsChange: this.#handleSelectedItemsChange, ref: el => (this.#treeRef = el) }, this.treeModel.map((itemModel, index) => this.renderItem(itemModel, this, this.#treeHasFilters(), this.showLines !== \"none\" && index === this.treeModel.length - 1, 0, this.dropMode !== \"above\" && this.dropDisabled !== true, this.useGxRender))));\n }\n static get is() { return \"ch-tree-view-render\"; }\n static get originalStyleUrls() {\n return {\n \"$\": [\"tree-view-render.scss\"]\n };\n }\n static get styleUrls() {\n return {\n \"$\": [\"tree-view-render.css\"]\n };\n }\n static get properties() {\n return {\n \"checkbox\": {\n \"type\": \"boolean\",\n \"mutable\": false,\n \"complexType\": {\n \"original\": \"boolean\",\n \"resolved\": \"boolean\",\n \"references\": {}\n },\n \"required\": false,\n \"optional\": false,\n \"docs\": {\n \"tags\": [],\n \"text\": \"Set this attribute if you want display a checkbox in all items by default.\"\n },\n \"attribute\": \"checkbox\",\n \"reflect\": false,\n \"defaultValue\": \"false\"\n },\n \"checked\": {\n \"type\": \"boolean\",\n \"mutable\": false,\n \"complexType\": {\n \"original\": \"boolean\",\n \"resolved\": \"boolean\",\n \"references\": {}\n },\n \"required\": false,\n \"optional\": false,\n \"docs\": {\n \"tags\": [],\n \"text\": \"Set this attribute if you want the checkbox to be checked in all items by\\ndefault.\\nOnly works if `checkbox = true`\"\n },\n \"attribute\": \"checked\",\n \"reflect\": false,\n \"defaultValue\": \"false\"\n },\n \"checkDroppableZoneCallback\": {\n \"type\": \"unknown\",\n \"mutable\": false,\n \"complexType\": {\n \"original\": \"(\\n dropInformation: TreeViewDropCheckInfo\\n ) => Promise<boolean>\",\n \"resolved\": \"(dropInformation: TreeViewDropCheckInfo) => Promise<boolean>\",\n \"references\": {\n \"TreeViewDropCheckInfo\": {\n \"location\": \"import\",\n \"path\": \"../../tree-view/tree-view/types\",\n \"id\": \"src/components/tree-view/tree-view/types.ts::TreeViewDropCheckInfo\"\n },\n \"Promise\": {\n \"location\": \"global\",\n \"id\": \"global::Promise\"\n }\n }\n },\n \"required\": false,\n \"optional\": false,\n \"docs\": {\n \"tags\": [],\n \"text\": \"Callback that is executed when an element tries to drop in another item of\\nthe tree. Returns whether the drop is valid.\"\n }\n },\n \"cssClass\": {\n \"type\": \"string\",\n \"mutable\": false,\n \"complexType\": {\n \"original\": \"string\",\n \"resolved\": \"string\",\n \"references\": {}\n },\n \"required\": false,\n \"optional\": false,\n \"docs\": {\n \"tags\": [],\n \"text\": \"A CSS class to set as the `ch-tree-view` element class.\"\n },\n \"attribute\": \"css-class\",\n \"reflect\": false,\n \"defaultValue\": \"\\\"tree-view\\\"\"\n },\n \"dragDisabled\": {\n \"type\": \"boolean\",\n \"mutable\": false,\n \"complexType\": {\n \"original\": \"boolean\",\n \"resolved\": \"boolean\",\n \"references\": {}\n },\n \"required\": false,\n \"optional\": false,\n \"docs\": {\n \"tags\": [],\n \"text\": \"This attribute lets you specify if the drag operation is disabled in all\\nitems by default. If `true`, the items can't be dragged.\"\n },\n \"attribute\": \"drag-disabled\",\n \"reflect\": false,\n \"defaultValue\": \"DEFAULT_DRAG_DISABLED_VALUE\"\n },\n \"dropDisabled\": {\n \"type\": \"boolean\",\n \"mutable\": false,\n \"complexType\": {\n \"original\": \"boolean\",\n \"resolved\": \"boolean\",\n \"references\": {}\n },\n \"required\": false,\n \"optional\": false,\n \"docs\": {\n \"tags\": [],\n \"text\": \"This attribute lets you specify if the drop operation is disabled in all\\nitems by default. If `true`, the items won't accept any drops.\"\n },\n \"attribute\": \"drop-disabled\",\n \"reflect\": false,\n \"defaultValue\": \"DEFAULT_DROP_DISABLED_VALUE\"\n },\n \"dropItemsCallback\": {\n \"type\": \"unknown\",\n \"mutable\": false,\n \"complexType\": {\n \"original\": \"(\\n dataTransferInfo: TreeViewDataTransferInfo\\n ) => Promise<{ acceptDrop: boolean; items?: TreeViewItemModel[] }>\",\n \"resolved\": \"(dataTransferInfo: TreeViewDataTransferInfo) => Promise<{ acceptDrop: boolean; items?: TreeViewItemModel[]; }>\",\n \"references\": {\n \"TreeViewDataTransferInfo\": {\n \"location\": \"import\",\n \"path\": \"../../tree-view/tree-view/types\",\n \"id\": \"src/components/tree-view/tree-view/types.ts::TreeViewDataTransferInfo\"\n },\n \"Promise\": {\n \"location\": \"global\",\n \"id\": \"global::Promise\"\n },\n \"TreeViewItemModel\": {\n \"location\": \"import\",\n \"path\": \"./types\",\n \"id\": \"src/components/renders/tree-view/types.ts::TreeViewItemModel\"\n }\n }\n },\n \"required\": false,\n \"optional\": false,\n \"docs\": {\n \"tags\": [],\n \"text\": \"Callback that is executed when a list of items request to be dropped into\\nanother item.\"\n }\n },\n \"dropMode\": {\n \"type\": \"string\",\n \"mutable\": false,\n \"complexType\": {\n \"original\": \"\\\"above\\\" | \\\"before-and-after\\\" | \\\"all\\\"\",\n \"resolved\": \"\\\"above\\\" | \\\"all\\\" | \\\"before-and-after\\\"\",\n \"references\": {}\n },\n \"required\": false,\n \"optional\": false,\n \"docs\": {\n \"tags\": [],\n \"text\": \"This attribute lets you specify which kind of drop operation can be\\neffected in the items.\"\n },\n \"attribute\": \"drop-mode\",\n \"reflect\": false,\n \"defaultValue\": \"\\\"above\\\"\"\n },\n \"editableItems\": {\n \"type\": \"boolean\",\n \"mutable\": false,\n \"complexType\": {\n \"original\": \"boolean\",\n \"resolved\": \"boolean\",\n \"references\": {}\n },\n \"required\": false,\n \"optional\": false,\n \"docs\": {\n \"tags\": [],\n \"text\": \"This attribute lets you specify if the edit operation is enabled in all\\nitems by default. If `true`, the items can edit its caption in place.\"\n },\n \"attribute\": \"editable-items\",\n \"reflect\": false,\n \"defaultValue\": \"DEFAULT_EDITABLE_ITEMS_VALUE\"\n },\n \"expandableButton\": {\n \"type\": \"string\",\n \"mutable\": false,\n \"complexType\": {\n \"original\": \"\\\"action\\\" | \\\"decorative\\\" | \\\"no\\\"\",\n \"resolved\": \"\\\"action\\\" | \\\"decorative\\\" | \\\"no\\\"\",\n \"references\": {}\n },\n \"required\": false,\n \"optional\": false,\n \"docs\": {\n \"tags\": [],\n \"text\": \"Specifies what kind of expandable button is displayed in the items by\\ndefault.\\n - `\\\"expandableButton\\\"`: Expandable button that allows to expand/collapse\\n the items of the control.\\n - `\\\"decorative\\\"`: Only a decorative icon is rendered to display the state\\n of the item.\"\n },\n \"attribute\": \"expandable-button\",\n \"reflect\": false,\n \"defaultValue\": \"\\\"decorative\\\"\"\n },\n \"expandOnClick\": {\n \"type\": \"boolean\",\n \"mutable\": false,\n \"complexType\": {\n \"original\": \"boolean\",\n \"resolved\": \"boolean\",\n \"references\": {}\n },\n \"required\": false,\n \"optional\": false,\n \"docs\": {\n \"tags\": [],\n \"text\": \"Specifies if a tree-view-item is expanded on click interaction. If `true`\\nthe tree-view-item is expanded on click interaction. If `false`, with\\nmouse interaction the tree-view-item will only be expanded on double click.\"\n },\n \"attribute\": \"expand-on-click\",\n \"reflect\": false,\n \"defaultValue\": \"true\"\n },\n \"filter\": {\n \"type\": \"string\",\n \"mutable\": false,\n \"complexType\": {\n \"original\": \"string\",\n \"resolved\": \"string\",\n \"references\": {}\n },\n \"required\": false,\n \"optional\": false,\n \"docs\": {\n \"tags\": [],\n \"text\": \"This property lets you determine the expression that will be applied to the\\nfilter.\\nOnly works if `filterType = \\\"caption\\\" | \\\"metadata\\\"`.\"\n },\n \"attribute\": \"filter\",\n \"reflect\": false\n },\n \"filterDebounce\": {\n \"type\": \"number\",\n \"mutable\": false,\n \"complexType\": {\n \"original\": \"number\",\n \"resolved\": \"number\",\n \"references\": {}\n },\n \"required\": false,\n \"optional\": false,\n \"docs\": {\n \"tags\": [],\n \"text\": \"This property lets you determine the debounce time (in ms) that the\\ncontrol waits until it processes the changes to the filter property.\\nConsecutive changes to the `filter` property between this range, reset the\\ntimeout to process the filter.\\nOnly works if `filterType = \\\"caption\\\" | \\\"metadata\\\"`.\"\n },\n \"attribute\": \"filter-debounce\",\n \"reflect\": false,\n \"defaultValue\": \"250\"\n },\n \"filterList\": {\n \"type\": \"unknown\",\n \"mutable\": false,\n \"complexType\": {\n \"original\": \"string[]\",\n \"resolved\": \"string[]\",\n \"references\": {}\n },\n \"required\": false,\n \"optional\": false,\n \"docs\": {\n \"tags\": [],\n \"text\": \"This property lets you determine the list of items that will be filtered.\\nOnly works if `filterType = \\\"list\\\"`.\"\n },\n \"defaultValue\": \"[]\"\n },\n \"filterOptions\": {\n \"type\": \"unknown\",\n \"mutable\": false,\n \"complexType\": {\n \"original\": \"TreeViewFilterOptions\",\n \"resolved\": \"{ autoExpand?: boolean; hideMatchesAndShowNonMatches?: boolean; highlightMatchedItems?: boolean; matchCase?: boolean; regularExpression?: boolean; }\",\n \"references\": {\n \"TreeViewFilterOptions\": {\n \"location\": \"import\",\n \"path\": \"./types\",\n \"id\": \"src/components/renders/tree-view/types.ts::TreeViewFilterOptions\"\n }\n }\n },\n \"required\": false,\n \"optional\": false,\n \"docs\": {\n \"tags\": [],\n \"text\": \"This property lets you determine the options that will be applied to the\\nfilter.\"\n },\n \"defaultValue\": \"{}\"\n },\n \"filterType\": {\n \"type\": \"string\",\n \"mutable\": false,\n \"complexType\": {\n \"original\": \"TreeViewFilterType\",\n \"resolved\": \"\\\"caption\\\" | \\\"checked\\\" | \\\"list\\\" | \\\"metadata\\\" | \\\"none\\\" | \\\"unchecked\\\"\",\n \"references\": {\n \"TreeViewFilterType\": {\n \"location\": \"import\",\n \"path\": \"./types\",\n \"id\": \"src/components/renders/tree-view/types.ts::TreeViewFilterType\"\n }\n }\n },\n \"required\": false,\n \"optional\": false,\n \"docs\": {\n \"tags\": [],\n \"text\": \"This attribute lets you define what kind of filter is applied to items.\\nOnly items that satisfy the filter predicate will be displayed.\\n\\n| Value | Details |\\n| ----------- | ---------------------------------------------------------------------------------------------- |\\n| `checked` | Show only the items that have a checkbox and are checked. |\\n| `unchecked` | Show only the items that have a checkbox and are not checked. |\\n| `caption` | Show only the items whose `caption` satisfies the regex determinate by the `filter` property. |\\n| `metadata` | Show only the items whose `metadata` satisfies the regex determinate by the `filter` property. |\\n| `list` | Show only the items that are contained in the array determinate by the `filterList` property. |\\n| `none` | Show all items. |\"\n },\n \"attribute\": \"filter-type\",\n \"reflect\": false,\n \"defaultValue\": \"\\\"none\\\"\"\n },\n \"gxImageConstructor\": {\n \"type\": \"unknown\",\n \"mutable\": false,\n \"complexType\": {\n \"original\": \"(name: string) => any\",\n \"resolved\": \"(name: string) => any\",\n \"references\": {}\n },\n \"required\": false,\n \"optional\": false,\n \"docs\": {\n \"tags\": [],\n \"text\": \"This property is a WA to implement the Tree View as a UC 2.0 in GeneXus.\"\n }\n },\n \"gxSettings\": {\n \"type\": \"any\",\n \"mutable\": false,\n \"complexType\": {\n \"original\": \"any\",\n \"resolved\": \"any\",\n \"references\": {}\n },\n \"required\": false,\n \"optional\": false,\n \"docs\": {\n \"tags\": [],\n \"text\": \"This property is a WA to implement the Tree View as a UC 2.0 in GeneXus.\"\n },\n \"attribute\": \"gx-settings\",\n \"reflect\": false\n },\n \"lazyLoadTreeItemsCallback\": {\n \"type\": \"unknown\",\n \"mutable\": false,\n \"complexType\": {\n \"original\": \"LazyLoadTreeItemsCallback\",\n \"resolved\": \"(treeItemId: string) => Promise<TreeViewItemModel[]>\",\n \"references\": {\n \"LazyLoadTreeItemsCallback\": {\n \"location\": \"import\",\n \"path\": \"./types\",\n \"id\": \"src/components/renders/tree-view/types.ts::LazyLoadTreeItemsCallback\"\n }\n }\n },\n \"required\": false,\n \"optional\": false,\n \"docs\": {\n \"tags\": [],\n \"text\": \"Callback that is executed when a item request to load its subitems.\"\n }\n },\n \"modifyItemCaptionCallback\": {\n \"type\": \"unknown\",\n \"mutable\": false,\n \"complexType\": {\n \"original\": \"(\\n treeItemId: string,\\n newCaption: string\\n ) => Promise<TreeViewOperationStatusModifyCaption>\",\n \"resolved\": \"(treeItemId: string, newCaption: string) => Promise<TreeViewOperationStatusModifyCaption>\",\n \"references\": {\n \"Promise\": {\n \"location\": \"global\",\n \"id\": \"global::Promise\"\n },\n \"TreeViewOperationStatusModifyCaption\": {\n \"location\": \"import\",\n \"path\": \"./types\",\n \"id\": \"src/components/renders/tree-view/types.ts::TreeViewOperationStatusModifyCaption\"\n }\n }\n },\n \"required\": false,\n \"optional\": false,\n \"docs\": {\n \"tags\": [],\n \"text\": \"Callback that is executed when a item request to modify its caption.\"\n }\n },\n \"multiSelection\": {\n \"type\": \"boolean\",\n \"mutable\": false,\n \"complexType\": {\n \"original\": \"boolean\",\n \"resolved\": \"boolean\",\n \"references\": {}\n },\n \"required\": false,\n \"optional\": false,\n \"docs\": {\n \"tags\": [],\n \"text\": \"Set this attribute if you want to allow multi selection of the items.\"\n },\n \"attribute\": \"multi-selection\",\n \"reflect\": false,\n \"defaultValue\": \"false\"\n },\n \"renderItem\": {\n \"type\": \"unknown\",\n \"mutable\": false,\n \"complexType\": {\n \"original\": \"(\\n itemModel: TreeViewItemModel | any,\\n treeState: ChTreeViewRender,\\n treeHasFilter: boolean,\\n lastItem: boolean,\\n level: number,\\n dropBeforeAndAfterEnabled: boolean,\\n useGxRender?: boolean\\n ) => any\",\n \"resolved\": \"(itemModel: any, treeState: ChTreeViewRender, treeHasFilter: boolean, lastItem: boolean, level: number, dropBeforeAndAfterEnabled: boolean, useGxRender?: boolean) => any\",\n \"references\": {\n \"TreeViewItemModel\": {\n \"location\": \"import\",\n \"path\": \"./types\",\n \"id\": \"src/components/renders/tree-view/types.ts::TreeViewItemModel\"\n },\n \"ChTreeViewRender\": {\n \"location\": \"global\",\n \"id\": \"global::ChTreeViewRender\"\n }\n }\n },\n \"required\": false,\n \"optional\": false,\n \"docs\": {\n \"tags\": [],\n \"text\": \"This property allows us to implement custom rendering of tree items.\"\n },\n \"defaultValue\": \"defaultRenderItem\"\n },\n \"showLines\": {\n \"type\": \"string\",\n \"mutable\": false,\n \"complexType\": {\n \"original\": \"TreeViewLines\",\n \"resolved\": \"\\\"all\\\" | \\\"last\\\" | \\\"none\\\"\",\n \"references\": {\n \"TreeViewLines\": {\n \"location\": \"import\",\n \"path\": \"../../tree-view/tree-view/types\",\n \"id\": \"src/components/tree-view/tree-view/types.ts::TreeViewLines\"\n }\n }\n },\n \"required\": false,\n \"optional\": false,\n \"docs\": {\n \"tags\": [],\n \"text\": \"`true` to display the relation between tree items and tree lists using\\nlines.\"\n },\n \"attribute\": \"show-lines\",\n \"reflect\": false,\n \"defaultValue\": \"\\\"none\\\"\"\n },\n \"sortItemsCallback\": {\n \"type\": \"unknown\",\n \"mutable\": false,\n \"complexType\": {\n \"original\": \"(subModel: TreeViewItemModel[]) => void\",\n \"resolved\": \"(subModel: TreeViewItemModel[]) => void\",\n \"references\": {\n \"TreeViewItemModel\": {\n \"location\": \"import\",\n \"path\": \"./types\",\n \"id\": \"src/components/renders/tree-view/types.ts::TreeViewItemModel\"\n }\n }\n },\n \"required\": false,\n \"optional\": false,\n \"docs\": {\n \"tags\": [],\n \"text\": \"Callback that is executed when the treeModel is changed to order its items.\"\n },\n \"defaultValue\": \"defaultSortItemsCallback\"\n },\n \"toggleCheckboxes\": {\n \"type\": \"boolean\",\n \"mutable\": false,\n \"complexType\": {\n \"original\": \"boolean\",\n \"resolved\": \"boolean\",\n \"references\": {}\n },\n \"required\": false,\n \"optional\": false,\n \"docs\": {\n \"tags\": [],\n \"text\": \"Set this attribute if you want all the children item's checkboxes to be\\nchecked when the parent item checkbox is checked, or to be unchecked when\\nthe parent item checkbox is unchecked.\\nThis attribute will be used in all items by default.\"\n },\n \"attribute\": \"toggle-checkboxes\",\n \"reflect\": false,\n \"defaultValue\": \"false\"\n },\n \"treeModel\": {\n \"type\": \"unknown\",\n \"mutable\": false,\n \"complexType\": {\n \"original\": \"TreeViewItemModel[]\",\n \"resolved\": \"TreeViewItemModel[]\",\n \"references\": {\n \"TreeViewItemModel\": {\n \"location\": \"import\",\n \"path\": \"./types\",\n \"id\": \"src/components/renders/tree-view/types.ts::TreeViewItemModel\"\n }\n }\n },\n \"required\": false,\n \"optional\": false,\n \"docs\": {\n \"tags\": [],\n \"text\": \"This property lets you define the model of the ch-tree-view-render control.\"\n },\n \"defaultValue\": \"[]\"\n },\n \"treeViewItemCssClass\": {\n \"type\": \"string\",\n \"mutable\": false,\n \"complexType\": {\n \"original\": \"string\",\n \"resolved\": \"string\",\n \"references\": {}\n },\n \"required\": false,\n \"optional\": false,\n \"docs\": {\n \"tags\": [],\n \"text\": \"A CSS class to set as the `ch-tree-view-item` element default class.\"\n },\n \"attribute\": \"tree-view-item-css-class\",\n \"reflect\": false,\n \"defaultValue\": \"\\\"tree-view-item\\\"\"\n },\n \"useGxRender\": {\n \"type\": \"boolean\",\n \"mutable\": false,\n \"complexType\": {\n \"original\": \"boolean\",\n \"resolved\": \"boolean\",\n \"references\": {}\n },\n \"required\": false,\n \"optional\": false,\n \"docs\": {\n \"tags\": [],\n \"text\": \"This property is a WA to implement the Tree View as a UC 2.0 in GeneXus.\"\n },\n \"attribute\": \"use-gx-render\",\n \"reflect\": false,\n \"defaultValue\": \"false\"\n }\n };\n }\n static get states() {\n return {\n \"waitDropProcessing\": {}\n };\n }\n static get events() {\n return [{\n \"method\": \"checkedItemsChange\",\n \"name\": \"checkedItemsChange\",\n \"bubbles\": true,\n \"cancelable\": true,\n \"composed\": true,\n \"docs\": {\n \"tags\": [],\n \"text\": \"Fired when the checked items change.\\nThis event does take into account the currently filtered items.\"\n },\n \"complexType\": {\n \"original\": \"Map<string, TreeViewItemModelExtended>\",\n \"resolved\": \"Map<string, TreeViewItemModelExtended>\",\n \"references\": {\n \"Map\": {\n \"location\": \"global\",\n \"id\": \"global::Map\"\n },\n \"TreeViewItemModelExtended\": {\n \"location\": \"import\",\n \"path\": \"./types\",\n \"id\": \"src/components/renders/tree-view/types.ts::TreeViewItemModelExtended\"\n }\n }\n }\n }, {\n \"method\": \"itemContextmenu\",\n \"name\": \"itemContextmenu\",\n \"bubbles\": true,\n \"cancelable\": true,\n \"composed\": true,\n \"docs\": {\n \"tags\": [],\n \"text\": \"Fired when an element displays its contextmenu.\"\n },\n \"complexType\": {\n \"original\": \"TreeViewItemContextMenu\",\n \"resolved\": \"{ id: string; itemRef: HTMLChTreeViewItemElement; metadata: string; contextmenuEvent: PointerEvent; }\",\n \"references\": {\n \"TreeViewItemContextMenu\": {\n \"location\": \"import\",\n \"path\": \"../../tree-view/tree-view/types\",\n \"id\": \"src/components/tree-view/tree-view/types.ts::TreeViewItemContextMenu\"\n }\n }\n }\n }, {\n \"method\": \"itemOpenReference\",\n \"name\": \"itemOpenReference\",\n \"bubbles\": true,\n \"cancelable\": true,\n \"composed\": true,\n \"docs\": {\n \"tags\": [],\n \"text\": \"Fired when the user interacts with an item in a way that its reference\\nmust be opened.\"\n },\n \"complexType\": {\n \"original\": \"TreeViewItemOpenReferenceInfo\",\n \"resolved\": \"{ id: string; leaf: boolean; metadata: string; }\",\n \"references\": {\n \"TreeViewItemOpenReferenceInfo\": {\n \"location\": \"import\",\n \"path\": \"../../tree-view/tree-view/types\",\n \"id\": \"src/components/tree-view/tree-view/types.ts::TreeViewItemOpenReferenceInfo\"\n }\n }\n }\n }, {\n \"method\": \"selectedItemsChange\",\n \"name\": \"selectedItemsChange\",\n \"bubbles\": true,\n \"cancelable\": true,\n \"composed\": true,\n \"docs\": {\n \"tags\": [],\n \"text\": \"Fired when the selected items change.\\nThis event can be fired by the following conditions:\\n 1. A user changes the selected items interacting with the Tree View.\\n\\n 2. The `multiSelection` value is changed from `true` to `false`.\\n\\n 3. A selected item is no longer rendered because it does not satisfies a\\n filter condition.\\n\\n 4. TODO: The `treeModel` property is updated and contains different selected\\n items. Even if it does not contains different selected items, this\\n event is fired because the selected items can have a different path\\n than before the `treeModel` update.\\n\\n 5. The `updateItemsProperties` method is executed, changing the item\\n selection.\\n\\n 6. A selected item is removed.\\n\\n 7. TODO: A selected item is moved into a new parent with drag and drop.\\n In this case, since the detail of the event contains the information\\n of the parent, this event must be fired to update the information.\\n\\n 8. Executing `scrollIntoVisible` method and updating the selected value\\n of the scrolled item.\\n\\n 9. TODO: An external item is dropped into the Tree View and the item is\\n selected.\\n\\n 10. TODO: Lazy loading content that has selected items?\\n\\nThing that does not fire this event:\\n - TODO: Renaming a selected item.\\n\\n - TODO: Applying a filter that keeps all selected items rendered.\"\n },\n \"complexType\": {\n \"original\": \"TreeViewItemModelExtended[]\",\n \"resolved\": \"TreeViewItemModelExtended[]\",\n \"references\": {\n \"TreeViewItemModelExtended\": {\n \"location\": \"import\",\n \"path\": \"./types\",\n \"id\": \"src/components/renders/tree-view/types.ts::TreeViewItemModelExtended\"\n }\n }\n }\n }];\n }\n static get methods() {\n return {\n \"dropItems\": {\n \"complexType\": {\n \"signature\": \"(acceptDrop: boolean, dataTransferInfo: TreeViewDataTransferInfo, items?: TreeViewItemModel[]) => Promise<void>\",\n \"parameters\": [{\n \"name\": \"acceptDrop\",\n \"type\": \"boolean\",\n \"docs\": \"\"\n }, {\n \"name\": \"dataTransferInfo\",\n \"type\": \"{ newContainer: GxDataTransferInfo; draggedItems: GxDataTransferInfo[]; draggingSelectedItems: boolean; dropInTheSameTree: boolean; dropType: TreeViewDropType; }\",\n \"docs\": \"\"\n }, {\n \"name\": \"items\",\n \"type\": \"TreeViewItemModel[]\",\n \"docs\": \"\"\n }],\n \"references\": {\n \"Promise\": {\n \"location\": \"global\",\n \"id\": \"global::Promise\"\n },\n \"TreeViewDataTransferInfo\": {\n \"location\": \"import\",\n \"path\": \"../../tree-view/tree-view/types\",\n \"id\": \"src/components/tree-view/tree-view/types.ts::TreeViewDataTransferInfo\"\n },\n \"TreeViewItemModel\": {\n \"location\": \"import\",\n \"path\": \"./types\",\n \"id\": \"src/components/renders/tree-view/types.ts::TreeViewItemModel\"\n }\n },\n \"return\": \"Promise<void>\"\n },\n \"docs\": {\n \"text\": \"Given the drop accepting, the data transfer info and the external items,\\nit process the drops of the items in the tree.\",\n \"tags\": []\n }\n },\n \"getItemsInfo\": {\n \"complexType\": {\n \"signature\": \"(itemsId: string[]) => Promise<TreeViewItemModelExtended[]>\",\n \"parameters\": [{\n \"name\": \"itemsId\",\n \"type\": \"string[]\",\n \"docs\": \"\"\n }],\n \"references\": {\n \"Promise\": {\n \"location\": \"global\",\n \"id\": \"global::Promise\"\n },\n \"TreeViewItemModelExtended\": {\n \"location\": \"import\",\n \"path\": \"./types\",\n \"id\": \"src/components/renders/tree-view/types.ts::TreeViewItemModelExtended\"\n }\n },\n \"return\": \"Promise<TreeViewItemModelExtended[]>\"\n },\n \"docs\": {\n \"text\": \"Given a list of ids, it returns an array of the items that exists in the\\ngiven list.\",\n \"tags\": []\n }\n },\n \"loadLazyContent\": {\n \"complexType\": {\n \"signature\": \"(itemId: string, items?: TreeViewItemModel[], downloading?: boolean, lazy?: boolean) => Promise<void>\",\n \"parameters\": [{\n \"name\": \"itemId\",\n \"type\": \"string\",\n \"docs\": \"\"\n }, {\n \"name\": \"items\",\n \"type\": \"TreeViewItemModel[]\",\n \"docs\": \"\"\n }, {\n \"name\": \"downloading\",\n \"type\": \"boolean\",\n \"docs\": \"\"\n }, {\n \"name\": \"lazy\",\n \"type\": \"boolean\",\n \"docs\": \"\"\n }],\n \"references\": {\n \"Promise\": {\n \"location\": \"global\",\n \"id\": \"global::Promise\"\n },\n \"TreeViewItemModel\": {\n \"location\": \"import\",\n \"path\": \"./types\",\n \"id\": \"src/components/renders/tree-view/types.ts::TreeViewItemModel\"\n }\n },\n \"return\": \"Promise<void>\"\n },\n \"docs\": {\n \"text\": \"Given an item id, an array of items to add, the download status and the\\nlazy state, updates the item's UI Model.\",\n \"tags\": []\n }\n },\n \"removeItems\": {\n \"complexType\": {\n \"signature\": \"(items: string[]) => Promise<void>\",\n \"parameters\": [{\n \"name\": \"items\",\n \"type\": \"string[]\",\n \"docs\": \"\"\n }],\n \"references\": {\n \"Promise\": {\n \"location\": \"global\",\n \"id\": \"global::Promise\"\n },\n \"TreeViewRemoveItemsResult\": {\n \"location\": \"import\",\n \"path\": \"./types\",\n \"id\": \"src/components/renders/tree-view/types.ts::TreeViewRemoveItemsResult\"\n }\n },\n \"return\": \"Promise<void>\"\n },\n \"docs\": {\n \"text\": \"Given a list of ids, removes the items and their children in the tree.\",\n \"tags\": []\n }\n },\n \"reloadItems\": {\n \"complexType\": {\n \"signature\": \"(itemId: string, beforeProperties?: Partial<TreeViewItemModel>, afterProperties?: Partial<TreeViewItemModel>) => Promise<boolean>\",\n \"parameters\": [{\n \"name\": \"itemId\",\n \"type\": \"string\",\n \"docs\": \"\"\n }, {\n \"name\": \"beforeProperties\",\n \"type\": \"{ id?: string; caption?: string; checkbox?: boolean; checked?: boolean; class?: string; disabled?: boolean; downloading?: boolean; dragDisabled?: boolean; dropDisabled?: boolean; editable?: boolean; expanded?: boolean; endImgSrc?: string; endImgType?: ImageRender; lastItemId?: string; lazy?: boolean; leaf?: boolean; indeterminate?: boolean; items?: TreeViewItemModel[]; metadata?: string; order?: number; render?: boolean; selected?: boolean; startImgSrc?: string; startImgType?: ImageRender; toggleCheckboxes?: boolean; }\",\n \"docs\": \"\"\n }, {\n \"name\": \"afterProperties\",\n \"type\": \"{ id?: string; caption?: string; checkbox?: boolean; checked?: boolean; class?: string; disabled?: boolean; downloading?: boolean; dragDisabled?: boolean; dropDisabled?: boolean; editable?: boolean; expanded?: boolean; endImgSrc?: string; endImgType?: ImageRender; lastItemId?: string; lazy?: boolean; leaf?: boolean; indeterminate?: boolean; items?: TreeViewItemModel[]; metadata?: string; order?: number; render?: boolean; selected?: boolean; startImgSrc?: string; startImgType?: ImageRender; toggleCheckboxes?: boolean; }\",\n \"docs\": \"\"\n }],\n \"references\": {\n \"Promise\": {\n \"location\": \"global\",\n \"id\": \"global::Promise\"\n },\n \"Partial\": {\n \"location\": \"global\",\n \"id\": \"global::Partial\"\n },\n \"TreeViewItemModel\": {\n \"location\": \"import\",\n \"path\": \"./types\",\n \"id\": \"src/components/renders/tree-view/types.ts::TreeViewItemModel\"\n }\n },\n \"return\": \"Promise<boolean>\"\n },\n \"docs\": {\n \"text\": \"Given an item id and the additional properties to update before and after\\nreload, it reloads the items of the `itemId` node by using the\\n`lazyLoadTreeItemsCallback` property.\",\n \"tags\": []\n }\n },\n \"scrollIntoVisible\": {\n \"complexType\": {\n \"signature\": \"(path: string | string[], afterProperties?: Partial<TreeViewItemModel>) => Promise<boolean>\",\n \"parameters\": [{\n \"name\": \"path\",\n \"type\": \"string | string[]\",\n \"docs\": \"\"\n }, {\n \"name\": \"afterProperties\",\n \"type\": \"{ id?: string; caption?: string; checkbox?: boolean; checked?: boolean; class?: string; disabled?: boolean; downloading?: boolean; dragDisabled?: boolean; dropDisabled?: boolean; editable?: boolean; expanded?: boolean; endImgSrc?: string; endImgType?: ImageRender; lastItemId?: string; lazy?: boolean; leaf?: boolean; indeterminate?: boolean; items?: TreeViewItemModel[]; metadata?: string; order?: number; render?: boolean; selected?: boolean; startImgSrc?: string; startImgType?: ImageRender; toggleCheckboxes?: boolean; }\",\n \"docs\": \"\"\n }],\n \"references\": {\n \"Promise\": {\n \"location\": \"global\",\n \"id\": \"global::Promise\"\n },\n \"Partial\": {\n \"location\": \"global\",\n \"id\": \"global::Partial\"\n },\n \"TreeViewItemModel\": {\n \"location\": \"import\",\n \"path\": \"./types\",\n \"id\": \"src/components/renders/tree-view/types.ts::TreeViewItemModel\"\n }\n },\n \"return\": \"Promise<boolean>\"\n },\n \"docs\": {\n \"text\": \"Given the path of the item (represent by a sorted array containing all ids\\nfrom the root to the item) and the additional properties to update after,\\nit displays and scrolls into the item view.\\nThe path can also be a string representing the id of the item to scroll\\ninto.\\n\\nWhen using a path, this method will fail if:\\n - The path does not start from the root element.\\n - The path contains a cycle.\\n - The path does not correspond to a valid path on the server:\\n - One of the item of the path, except for the last one, is a leaf.\\n - An item in the path does not exists on the server.\\n - The path has repeated items.\\n - And so on.\",\n \"tags\": []\n }\n },\n \"toggleItems\": {\n \"complexType\": {\n \"signature\": \"(treeItemIds: string[], expand?: boolean) => Promise<TreeViewItemExpandedInfo[]>\",\n \"parameters\": [{\n \"name\": \"treeItemIds\",\n \"type\": \"string[]\",\n \"docs\": \"An array id the tree items to be toggled.\"\n }, {\n \"name\": \"expand\",\n \"type\": \"boolean\",\n \"docs\": \"A boolean indicating that the tree item should be expanded or collapsed. (optional)\"\n }],\n \"references\": {\n \"Promise\": {\n \"location\": \"global\",\n \"id\": \"global::Promise\"\n },\n \"TreeViewItemExpandedInfo\": {\n \"location\": \"import\",\n \"path\": \"../../tree-view/tree-view/types\",\n \"id\": \"src/components/tree-view/tree-view/types.ts::TreeViewItemExpandedInfo\"\n }\n },\n \"return\": \"Promise<TreeViewItemExpandedInfo[]>\"\n },\n \"docs\": {\n \"text\": \"This method is used to toggle a tree item by the tree item id/ids.\",\n \"tags\": [{\n \"name\": \"param\",\n \"text\": \"treeItemIds An array id the tree items to be toggled.\"\n }, {\n \"name\": \"param\",\n \"text\": \"expand A boolean indicating that the tree item should be expanded or collapsed. (optional)\"\n }, {\n \"name\": \"returns\",\n \"text\": \"The modified items after the method was called.\"\n }]\n }\n },\n \"updateAllItemsProperties\": {\n \"complexType\": {\n \"signature\": \"(properties: { expanded?: boolean; checked?: boolean; }) => Promise<void>\",\n \"parameters\": [{\n \"name\": \"properties\",\n \"type\": \"{ expanded?: boolean; checked?: boolean; }\",\n \"docs\": \"\"\n }],\n \"references\": {\n \"Promise\": {\n \"location\": \"global\",\n \"id\": \"global::Promise\"\n }\n },\n \"return\": \"Promise<void>\"\n },\n \"docs\": {\n \"text\": \"Given a subset of item's properties, it updates all item UI models.\",\n \"tags\": []\n }\n },\n \"updateItemsProperties\": {\n \"complexType\": {\n \"signature\": \"(items: string[], properties: Partial<TreeViewItemModel>) => Promise<void>\",\n \"parameters\": [{\n \"name\": \"items\",\n \"type\": \"string[]\",\n \"docs\": \"\"\n }, {\n \"name\": \"properties\",\n \"type\": \"{ id?: string; caption?: string; checkbox?: boolean; checked?: boolean; class?: string; disabled?: boolean; downloading?: boolean; dragDisabled?: boolean; dropDisabled?: boolean; editable?: boolean; expanded?: boolean; endImgSrc?: string; endImgType?: ImageRender; lastItemId?: string; lazy?: boolean; leaf?: boolean; indeterminate?: boolean; items?: TreeViewItemModel[]; metadata?: string; order?: number; render?: boolean; selected?: boolean; startImgSrc?: string; startImgType?: ImageRender; toggleCheckboxes?: boolean; }\",\n \"docs\": \"\"\n }],\n \"references\": {\n \"Promise\": {\n \"location\": \"global\",\n \"id\": \"global::Promise\"\n },\n \"Partial\": {\n \"location\": \"global\",\n \"id\": \"global::Partial\"\n },\n \"TreeViewItemModel\": {\n \"location\": \"import\",\n \"path\": \"./types\",\n \"id\": \"src/components/renders/tree-view/types.ts::TreeViewItemModel\"\n },\n \"Map\": {\n \"location\": \"global\",\n \"id\": \"global::Map\"\n },\n \"TreeViewItemModelExtended\": {\n \"location\": \"import\",\n \"path\": \"./types\",\n \"id\": \"src/components/renders/tree-view/types.ts::TreeViewItemModelExtended\"\n }\n },\n \"return\": \"Promise<void>\"\n },\n \"docs\": {\n \"text\": \"Given a item list and the properties to update, it updates the properties\\nof the items in the list.\",\n \"tags\": []\n }\n },\n \"updateValidDropZone\": {\n \"complexType\": {\n \"signature\": \"(requestTimestamp: number, newContainerId: string, draggedItems: GxDataTransferInfo[], dropType: TreeViewDropType, validDrop: boolean) => Promise<void>\",\n \"parameters\": [{\n \"name\": \"requestTimestamp\",\n \"type\": \"number\",\n \"docs\": \"Time where the request to the server was made. Useful to avoid having old information.\"\n }, {\n \"name\": \"newContainerId\",\n \"type\": \"string\",\n \"docs\": \"ID of the container where the drag is trying to be made.\"\n }, {\n \"name\": \"draggedItems\",\n \"type\": \"GxDataTransferInfo[]\",\n \"docs\": \"Information about the dragged items.\"\n }, {\n \"name\": \"dropType\",\n \"type\": \"\\\"after\\\" | \\\"before\\\" | \\\"above\\\"\",\n \"docs\": \"Type of drop that wants to be effected\"\n }, {\n \"name\": \"validDrop\",\n \"type\": \"boolean\",\n \"docs\": \"Current state of the droppable zone.\"\n }],\n \"references\": {\n \"Promise\": {\n \"location\": \"global\",\n \"id\": \"global::Promise\"\n },\n \"GxDataTransferInfo\": {\n \"location\": \"import\",\n \"path\": \"../../../common/types\",\n \"id\": \"src/common/types.ts::GxDataTransferInfo\"\n },\n \"TreeViewDropType\": {\n \"location\": \"import\",\n \"path\": \"../../tree-view/tree-view/types\",\n \"id\": \"src/components/tree-view/tree-view/types.ts::TreeViewDropType\"\n }\n },\n \"return\": \"Promise<void>\"\n },\n \"docs\": {\n \"text\": \"Update the information about the valid droppable zones.\",\n \"tags\": [{\n \"name\": \"param\",\n \"text\": \"requestTimestamp Time where the request to the server was made. Useful to avoid having old information.\"\n }, {\n \"name\": \"param\",\n \"text\": \"newContainerId ID of the container where the drag is trying to be made.\"\n }, {\n \"name\": \"param\",\n \"text\": \"draggedItems Information about the dragged items.\"\n }, {\n \"name\": \"param\",\n \"text\": \"validDrop Current state of the droppable zone.\"\n }, {\n \"name\": \"param\",\n \"text\": \"dropType Type of drop that wants to be effected\"\n }]\n }\n }\n };\n }\n static get elementRef() { return \"el\"; }\n static get watchers() {\n return [{\n \"propName\": \"filter\",\n \"methodName\": \"filterChanged\"\n }, {\n \"propName\": \"filterDebounce\",\n \"methodName\": \"filterDebounceChanged\"\n }, {\n \"propName\": \"filterList\",\n \"methodName\": \"filterListChanged\"\n }, {\n \"propName\": \"filterOptions\",\n \"methodName\": \"filterOptionsChanged\"\n }, {\n \"propName\": \"filterType\",\n \"methodName\": \"filterTypeChanged\"\n }, {\n \"propName\": \"multiSelection\",\n \"methodName\": \"multiSelectionChanged\"\n }, {\n \"propName\": \"treeModel\",\n \"methodName\": \"treeModelChanged\"\n }];\n }\n static get listeners() {\n return [{\n \"name\": \"checkboxChange\",\n \"method\": \"onCheckboxChange\",\n \"target\": undefined,\n \"capture\": false,\n \"passive\": false\n }, {\n \"name\": \"checkboxToggleChange\",\n \"method\": \"onCheckboxChange\",\n \"target\": undefined,\n \"capture\": false,\n \"passive\": false\n }, {\n \"name\": \"loadLazyContent\",\n \"method\": \"onLoadLazyContent\",\n \"target\": undefined,\n \"capture\": false,\n \"passive\": false\n }, {\n \"name\": \"modifyCaption\",\n \"method\": \"onModifyCaption\",\n \"target\": undefined,\n \"capture\": false,\n \"passive\": false\n }, {\n \"name\": \"openReference\",\n \"method\": \"onOpenReference\",\n \"target\": undefined,\n \"capture\": true,\n \"passive\": false\n }];\n }\n}\n//# sourceMappingURL=tree-view-render.js.map\n","export const resolveImgPath = (iconAssetsPath, img) => `${iconAssetsPath}/${img}.svg`;\n//# sourceMappingURL=helpers.js.map\n",":root {\n --ui-animaton-speed: 0.2s;\n}\n\n/*ALIGNMENT*/\n/*Ellipsis*/\n/*****************************************************\nTYPOGRAPHY\n*****************************************************/\n/*Title 01 (Positive)*/\n.gxg-title-01 {\n font-family: var(--ds-base-font-family-primary);\n font-weight: var(--ds-title-01-font-weight);\n font-size: var(--ds-title-01-font-size);\n letter-spacing: var(--ds-base-font-letter-spacing--comfortable);\n color: var(--ds-base-font-color);\n text-align: start;\n line-height: var(--ds-base-font-line-height--comfortable);\n}\n\n/*Title 01 (Negative)*/\n.gxg-title-01--negative {\n font-family: var(--ds-base-font-family-primary);\n font-weight: var(--ds-title-01-font-weight);\n font-size: var(--ds-title-01-font-size);\n letter-spacing: var(--ds-base-font-letter-spacing--comfortable);\n color: var(--ds-base-font-color);\n text-align: start;\n line-height: var(--ds-base-font-line-height--comfortable);\n color: var(--ds-base-font-color--negative);\n}\n\n/*Title 02 (Positive)*/\n.gxg-title-02 {\n font-family: var(--ds-base-font-family-primary);\n font-weight: var(--ds-title-02-font-weight);\n font-size: var(--ds-title-02-font-size);\n letter-spacing: var(--ds-base-font-letter-spacing--regular);\n color: var(--ds-base-font-color);\n text-align: start;\n text-transform: uppercase;\n line-height: var(--ds-base-font-line-height--comfortable);\n}\n\n.gxg-title-02--negative {\n font-family: var(--ds-base-font-family-primary);\n font-weight: var(--ds-title-02-font-weight);\n font-size: var(--ds-title-02-font-size);\n letter-spacing: var(--ds-base-font-letter-spacing--regular);\n color: var(--ds-base-font-color);\n text-align: start;\n text-transform: uppercase;\n line-height: var(--ds-base-font-line-height--comfortable);\n color: var(--color-on-primary);\n}\n\n/*Title 03*/\n.gxg-title-03 {\n font-family: var(--ds-base-font-family-primary);\n font-weight: var(--ds-title-03-font-weight);\n font-size: var(--ds-title-03-font-size);\n letter-spacing: var(--ds-base-font-letter-spacing--regular);\n color: var(--ds-base-font-color);\n text-align: start;\n text-transform: uppercase;\n line-height: var(--ds-base-font-line-height--comfortable);\n}\n\n.gxg-title-03--negative {\n font-family: var(--ds-base-font-family-primary);\n font-weight: var(--ds-title-03-font-weight);\n font-size: var(--ds-title-03-font-size);\n letter-spacing: var(--ds-base-font-letter-spacing--regular);\n color: var(--ds-base-font-color);\n text-align: start;\n text-transform: uppercase;\n line-height: var(--ds-base-font-line-height--comfortable);\n color: var(--ds-base-font-color--negative);\n}\n\n/*Title 04*/\n.gxg-title-04 {\n font-family: var(--ds-base-font-family-primary);\n font-weight: var(--ds-title-04-font-weight);\n font-size: var(--ds-title-04-font-size);\n letter-spacing: var(--ds-base-font-letter-spacing--comfortable);\n color: var(--ds-base-font-color);\n text-align: start;\n line-height: var(--ds-base-font-line-height--comfortable);\n}\n\n.gxg-title-04--negative {\n font-family: var(--ds-base-font-family-primary);\n font-weight: var(--ds-title-04-font-weight);\n font-size: var(--ds-title-04-font-size);\n letter-spacing: var(--ds-base-font-letter-spacing--comfortable);\n color: var(--ds-base-font-color);\n text-align: start;\n line-height: var(--ds-base-font-line-height--comfortable);\n color: var(--ds-base-font-color--negative);\n}\n\n/*Title 05*/\n.gxg-title-05 {\n font-family: var(--ds-base-font-family-primary);\n font-weight: var(--ds-title-05-font-weight);\n font-size: var(--ds-title-05-font-size);\n letter-spacing: var(--ds-base-font-letter-spacing--regular);\n color: var(--ds-base-font-color);\n text-align: start;\n line-height: var(--ds-base-font-line-height--comfortable);\n}\n\n.gxg-title-05--negative {\n font-family: var(--ds-base-font-family-primary);\n font-weight: var(--ds-title-05-font-weight);\n font-size: var(--ds-title-05-font-size);\n letter-spacing: var(--ds-base-font-letter-spacing--regular);\n color: var(--ds-base-font-color);\n text-align: start;\n line-height: var(--ds-base-font-line-height--comfortable);\n color: var(--ds-base-font-color--negative);\n}\n\n/*Text*/\n.gxg-text {\n font-family: var(--ds-base-font-family-primary);\n font-size: var(--ds-base-font-size);\n color: var(--ds-base-font-size-color);\n font-weight: var(--ds-base-font-size-weight);\n line-height: var(--ds-base-font-line-height--comfortable);\n}\n\n.gxg-text--negative {\n font-family: var(--ds-base-font-family-primary);\n font-size: var(--ds-base-font-size);\n color: var(--ds-base-font-size-color);\n font-weight: var(--ds-base-font-size-weight);\n line-height: var(--ds-base-font-line-height--comfortable);\n color: var(--ds-base-font-color--negative);\n}\n\n.gxg-text--gray {\n font-family: var(--ds-base-font-family-primary);\n font-size: var(--ds-base-font-size);\n color: var(--ds-base-font-size-color);\n font-weight: var(--ds-base-font-size-weight);\n line-height: var(--ds-base-font-line-height--comfortable);\n color: var(--ds-base-font-color--dimmed);\n}\n\n/*Quote*/\n.gxg-quote {\n font-family: var(--ds-base-font-family-primary);\n font-size: var(--ds-base-font-size);\n color: var(--ds-base-font-size-color);\n font-weight: var(--ds-base-font-size-weight);\n line-height: var(--ds-base-font-line-height--comfortable);\n font-style: italic;\n}\n\n.gxg-quote--negative {\n color: var(--ds-base-font-color--negative);\n}\n\n/*Link*/\n.gxg-link {\n line-height: unset;\n font-family: var(--ds-base-font-family-primary);\n font-size: var(--ds-base-font-size);\n color: var(--ds-base-font-size-color);\n font-weight: var(--ds-base-font-size-weight);\n line-height: var(--ds-base-font-line-height--comfortable);\n color: var(--ds-base-font-color--link);\n text-decoration: underline;\n cursor: pointer;\n display: inline-block;\n}\n.gxg-link:hover {\n color: var(--ds-base-font-color--link-hover);\n}\n.gxg-link:active {\n color: var(--ds-base-font-color--link-active);\n}\n\n.gxg-link-gray {\n line-height: unset;\n font-family: var(--ds-base-font-family-primary);\n font-size: var(--ds-base-font-size);\n color: var(--ds-base-font-size-color);\n font-weight: var(--ds-base-font-size-weight);\n line-height: var(--ds-base-font-line-height--comfortable);\n color: var(--ds-base-font-color--link);\n text-decoration: underline;\n cursor: pointer;\n display: inline-block;\n color: var(--ds-base-font-color--dimmed);\n}\n.gxg-link-gray:hover {\n line-height: unset;\n font-family: var(--ds-base-font-family-primary);\n font-size: var(--ds-base-font-size);\n color: var(--ds-base-font-size-color);\n font-weight: var(--ds-base-font-size-weight);\n line-height: var(--ds-base-font-line-height--comfortable);\n color: var(--ds-base-font-color--link);\n text-decoration: underline;\n cursor: pointer;\n display: inline-block;\n color: var(--ds-base-font-color--dimmed);\n filter: brightness(1.4);\n}\n\n/*Alerts*/\n.gxg-alert-error {\n font-family: var(--ds-base-font-family-primary);\n font-size: var(--ds-base-font-size);\n color: var(--ds-base-font-size-color);\n font-weight: var(--ds-base-font-size-weight);\n line-height: var(--ds-base-font-line-height--comfortable);\n color: var(--ds-base-font-color--error);\n display: inline-block;\n}\n\n.gxg-alert-warning {\n font-family: var(--ds-base-font-family-primary);\n font-size: var(--ds-base-font-size);\n color: var(--ds-base-font-size-color);\n font-weight: var(--ds-base-font-size-weight);\n line-height: var(--ds-base-font-line-height--comfortable);\n color: var(--ds-base-font-color--warning);\n display: inline-block;\n}\n\n.gxg-alert-success {\n font-family: var(--ds-base-font-family-primary);\n font-size: var(--ds-base-font-size);\n color: var(--ds-base-font-size-color);\n font-weight: var(--ds-base-font-size-weight);\n line-height: var(--ds-base-font-line-height--comfortable);\n color: var(--ds-base-font-color--success);\n display: inline-block;\n}\n\n/*Tab*/\n.gxg-tab--disabled {\n color: var(--color-primary-disabled);\n pointer-events: none;\n}\n.gxg-tab--disabled[disabled] {\n color: var(--color-primary-disabled);\n pointer-events: none;\n}\n\n/*Label*/\n.gxg-label {\n font-family: var(--ds-base-font-family-primary);\n font-weight: var(--gxg-label-font-weight);\n font-size: var(--gxg-label-font-size);\n color: var(--gxg-label-color);\n text-align: center;\n line-height: 1.455em;\n display: flex;\n align-items: center;\n}\n.gxg-label:hover {\n color: var(--color-primary-hover);\n}\n.gxg-label:focus {\n color: var(--color-primary-active);\n}\n.gxg-label:active {\n color: var(--color-primary-active);\n}\n.gxg-label[disabled] {\n color: var(--color-primary-disabled);\n}\n\n.gxg-label--negative {\n color: var(--color-on-primary);\n}\n.gxg-label--negative[disabled] {\n color: var(--color-on-disabled);\n}\n\n/*****************************************************\nGXG-BUTTON and GXG-BUTTON-GROUP COMMON STYLES\n*****************************************************/\n/*****************************************************\nFORM ELEMENTS\n*****************************************************/\n.gxg-scrollbar {\n /* Track */\n /* Handle */\n /* Handle on hover */\n}\n.gxg-scrollbar::-webkit-scrollbar {\n width: var(--gxg-scrollbar-width);\n height: var(--gxg-scrollbar-width);\n}\n.gxg-scrollbar::-webkit-scrollbar-track {\n background-color: var(--gxg-scrollbar-track-background);\n border-radius: var(--gxg-scrollbar-track-border-radius);\n}\n.gxg-scrollbar::-webkit-scrollbar-thumb {\n background-color: var(--gxg-scrollbar-track-thumb-background);\n border-radius: var(--gxg-scrollbar-track-thumb-radius);\n}\n.gxg-scrollbar::-webkit-scrollbar-thumb:hover {\n background-color: var(--gxg-scrollbar-track-thumb-hover-background);\n}\n.gxg-scrollbar::-webkit-scrollbar-corner {\n background: rgba(0, 0, 0, 0);\n}\n\n/*---------------------------\ngxg-tree-view\n---------------------------*/\ngxg-tree-view {\n display: contents;\n}\n\n/*---------------------------\n.tree-view\n---------------------------*/\n.tree-view {\n /* Track */\n /* Handle */\n /* Handle on hover */\n font-family: var(--ds-base-font-family-primary);\n font-size: var(--gxg-tree-view-item__font-size);\n font-weight: var(--ds-base-font-weight);\n color: var(--ds-base-font-color);\n}\n.tree-view::-webkit-scrollbar {\n width: var(--gxg-scrollbar-width);\n height: var(--gxg-scrollbar-width);\n}\n.tree-view::-webkit-scrollbar-track {\n background-color: var(--gxg-scrollbar-track-background);\n border-radius: var(--gxg-scrollbar-track-border-radius);\n}\n.tree-view::-webkit-scrollbar-thumb {\n background-color: var(--gxg-scrollbar-track-thumb-background);\n border-radius: var(--gxg-scrollbar-track-thumb-radius);\n}\n.tree-view::-webkit-scrollbar-thumb:hover {\n background-color: var(--gxg-scrollbar-track-thumb-hover-background);\n}\n.tree-view::-webkit-scrollbar-corner {\n background: rgba(0, 0, 0, 0);\n}\n.tree-view .ch-tree-view-container {\n min-inline-size: max-content;\n padding: var(--gxg-tree-view-container__padding);\n}\n\n/*---------------------------\n.tree-view-item\n---------------------------*/\n.tree-view-item {\n /*-- Custom vars ---*/\n --ch-tree-view-view__checkbox-size: var(--ds-checkbox-size);\n --ch-tree-view-item-gap: var(--gxg-tree-view-item__gap);\n --ch-tree-view-item-custom-padding-inline-start: var(\n --gxg-tree-view-item__custom-padding-inline-start\n );\n --ch-tree-view-item-custom-padding-inline-end: var(\n --gxg-tree-view-item__custom-padding-inline-end\n );\n /*-- Parts ---*/\n /*-- Parts for checkbox ---*/\n /*checked*/\n /*indeterminate*/\n /*-- Dynamic Icons ---*/\n /*-- Other ---*/\n}\n.tree-view-item::part(dashed-line) {\n border-color: var(--gxg-tree-view-item-dashed-line__border-color);\n}\n.tree-view-item::part(header) {\n border-radius: var(--gxg-tree-view-item-header__border-radius);\n padding-block-start: var(--gxg-tree-view-item-header__padding-top);\n padding-block-end: var(--gxg-tree-view-item-header__padding-bottom);\n padding-inline-end: var(--gxg-tree-view-item-header__padding-inline-end);\n}\n.tree-view-item::part(header):hover {\n color: var(--gxg-tree-view-item__color--hover);\n}\n.tree-view-item::part(header):before {\n content: \"\";\n display: block;\n}\n.tree-view-item::part(header):hover {\n background-color: var(--ds-item-background-color--hover);\n background-color: var(--ds-item-background-color--hover);\n}\n.tree-view-item::part(header):focus {\n outline: var(--ds-focus-border-width) solid var(--ds-border-color-control--focused);\n outline-offset: -1px;\n outline-offset: 0;\n outline-offset: var(--gxg-tree-view-item-header__outline-offset--focus);\n}\n.tree-view-item[selected]::part(header) {\n color: var(--gxg-grid-row-cell__color--selected);\n background-color: var(--ds-item-background-color--selected);\n}\n.tree-view-item[selected]::part(header):hover {\n background-color: var(--ds-item-background-color--selected-hover);\n}\n.tree-view-item::part(expandable-button) {\n background-color: var(--gxg-tree-view-item-expandable-button__background-color);\n}\n.tree-view-item::part(expandable-button)::before {\n background-color: var(--gxg-tree-view-item-expandable-button__background-color--before);\n -webkit-mask-position: center;\n -webkit-mask-repeat: no-repeat;\n}\n.tree-view-item::part(expandable-button):hover {\n background-color: var(--gxg-tree-view-item-expandable-button__background-color--hover);\n}\n.tree-view-item::part(expandable-button):focus {\n outline: var(--ds-focus-border-width) solid var(--ds-border-color-control--focused);\n outline-offset: -1px;\n outline-offset: 0;\n}\n.tree-view-item::part(action)::before, .tree-view-item::part(action)::after {\n inline-size: var(--mer-font__size--sm);\n block-size: var(--mer-font__size--sm);\n}\n.tree-view-item::part(downloading) {\n width: var(--gxg-tree-view-item-downloading__size);\n height: var(--gxg-tree-view-item-downloading__size);\n border: var(--gxg-tree-view-item-downloading__border);\n border-inline-start-color: transparent;\n}\n.tree-view-item::part(checkbox__container) {\n border-color: var(--gxg-checkbox-border-color);\n background-color: var(--gxg-checkbox-background-color);\n /*additional styles*/\n width: var(--gxg-checkbox-size);\n height: var(--gxg-checkbox-size);\n position: relative;\n border-width: var(--gxg-checkbox-border-width);\n border-style: solid;\n border-color: var(--gxg-checkbox-border-color);\n border-radius: var(--gxg-checkbox-border-radius);\n}\n.tree-view-item::part(checkbox__container):after {\n content: \"\";\n position: absolute;\n display: block;\n border: solid;\n border-color: transparent;\n z-index: 0;\n}\n.tree-view-item::part(checkbox__container):focus-within {\n box-shadow: none;\n outline: var(--ds-focus-border-width) solid var(--ds-border-color-control--focused);\n outline-offset: -1px;\n outline-offset: 0;\n}\n.tree-view-item::part(checkbox__option) {\n display: none;\n}\n.tree-view-item::part(checkbox__container checkbox__checked):after {\n left: 5.5px;\n top: 3px;\n width: 4px;\n height: 7px;\n border-width: 0 2px 2px 0;\n -webkit-transform: rotate(45deg);\n -ms-transform: rotate(45deg);\n transform: rotate(45deg);\n border-color: var(--gxg-checkbox-indicator-color);\n}\n.tree-view-item::part(checkbox__container checkbox__indeterminate):after {\n left: 50%;\n top: 50%;\n width: 8px;\n height: 1.5px;\n border: 0;\n background-color: var(--gxg-checkbox-indicator-color);\n -webkit-transform: rotate(0) translateY(-50%) translateX(-50%);\n -ms-transform: rotate(0) translateY(-50%) translateX(-50%);\n transform: rotate(0) translateY(-50%) translateX(-50%);\n}\n.tree-view-item::part(checkbox__input) {\n position: relative;\n z-index: 1;\n display: flex;\n width: 100%;\n height: 100%;\n opacity: 0;\n margin: 0;\n padding: 0;\n cursor: pointer;\n}\n.tree-view-item--folder::part(action)::before, .tree-view-item--module::part(action)::before {\n content: \"\";\n width: var(--gxg-tree-view-icon__size);\n height: var(--gxg-tree-view-icon__size);\n margin-inline-end: var(--ch-tree-view-item-gap);\n background-repeat: no-repeat;\n}\n.tree-view-item--folder::part(action)::before {\n background-image: url(\"/build/icon-assets/objects/folder.svg\");\n}\n.tree-view-item--folder::part(action expanded)::before {\n background-image: url(\"/build/icon-assets/objects/folder-open.svg\");\n}\n.tree-view-item--module::part(action)::before {\n background-image: url(\"/build/icon-assets/objects/module.svg\");\n}\n.tree-view-item--module::part(action expanded)::before {\n background-image: url(\"/build/icon-assets/objects/module-open.svg\");\n}\n.tree-view-item--pending-commit::part(action)::before {\n content: \"\";\n position: relative;\n z-index: 1;\n width: 5px;\n height: 5px;\n align-self: end;\n margin-block-end: 3px;\n margin-inline-start: 1px;\n background-color: var(--color-primary-enabled);\n border-radius: 50%;\n}\n\n/*-- Other Selectors (these depend on the tag class name)---*/\n.tree-view-item--editing::part(header) {\n border: 2px solid transparent;\n}\n/*--- Revisar ---*/\n.tree-view .ch-tree-view-drag-info {\n padding-inline: 6px;\n padding-block: 2px;\n background-color: #cfdee6;\n border: 1px solid #0266a0;\n border-radius: 10px;\n font-size: 8px;\n}","import { h, getAssetPath } from \"@stencil/core\";\nimport { resolveImgPath } from \"./helpers\";\nconst DEFAULT_DRAG_DISABLED_VALUE = false;\nconst DEFAULT_DROP_DISABLED_VALUE = false;\nconst DEFAULT_EDITABLE_ITEMS_VALUE = true;\nconst iconAssetsPath = getAssetPath(`./icon-assets`);\nconst defaultRenderItem = (itemModel, treeState, treeHasFilter, lastItem, level) => (treeState.filterType === \"none\" || itemModel.render !== false) && (h(\"ch-tree-view-item\", { key: itemModel.id, id: itemModel.id, caption: itemModel.caption, checkbox: itemModel.checkbox ?? treeState.checkbox, checked: itemModel.checked ?? treeState.checked, class: `tree-view-item ${itemModel.class}`, disabled: itemModel.disabled, downloading: itemModel.downloading, dragDisabled: itemModel.dragDisabled ?? treeState.dragDisabled, dropDisabled: itemModel.dropDisabled ?? treeState.dropDisabled, editable: itemModel.editable ?? treeState.editableItems, expanded: itemModel.expanded, expandableButton: \"action\", expandOnClick: treeState.expandOnClick, indeterminate: itemModel.indeterminate, lastItem: lastItem, lazyLoad: itemModel.lazy, leaf: itemModel.leaf, startImgSrc: itemModel.startImgSrc\n ? resolveImgPath(iconAssetsPath, itemModel.startImgSrc)\n : null, level: level, metadata: itemModel.metadata, endImgSrc: itemModel.endImgSrc, selected: itemModel.selected, showLines: treeState.showLines, toggleCheckboxes: itemModel.toggleCheckboxes ?? treeState.toggleCheckboxes }, !itemModel.leaf &&\n itemModel.items != null &&\n itemModel.items.map((subModel, index) => defaultRenderItem(subModel, treeState, treeHasFilter, treeState.showLines !== \"none\" &&\n // If there is a filter applied in the current list, use the\n // lastItemId value to calculate the last item\n (treeHasFilter && itemModel.lastItemId !== \"\"\n ? subModel.id === itemModel.lastItemId\n : index === itemModel.items.length - 1), level + 1))));\nexport class ChTreeViewRenderWrapper {\n constructor() {\n this.checkbox = false;\n this.checked = false;\n this.checkDroppableZoneCallback = undefined;\n this.cssClass = \"tree-view\";\n this.dragDisabled = DEFAULT_DRAG_DISABLED_VALUE;\n this.dropDisabled = DEFAULT_DROP_DISABLED_VALUE;\n this.dropItemsCallback = undefined;\n this.editableItems = DEFAULT_EDITABLE_ITEMS_VALUE;\n this.expandableButton = \"decorative\";\n this.expandOnClick = true;\n this.filter = undefined;\n this.filterDebounce = 0;\n this.filterList = [];\n this.filterOptions = {};\n this.filterType = \"none\";\n this.lazyLoadTreeItemsCallback = undefined;\n this.modifyItemCaptionCallback = undefined;\n this.multiSelection = false;\n this.renderItem = defaultRenderItem;\n this.showLines = \"all\";\n this.sortItemsCallback = undefined;\n this.toggleCheckboxes = false;\n this.treeModel = [];\n }\n // Refs\n treeRef;\n /**\n * Fired when the checked items change.\n * This event does take into account the currently filtered items.\n */\n checkedItemsChange;\n /**\n * Fired when an element displays its contextmenu.\n */\n itemContextmenu;\n /**\n * Fired when the user interacts with an item in a way that its reference\n * must be opened.\n */\n itemOpenReference;\n /**\n * Fired when the selected items change.\n * This event can be fired by the following conditions:\n * 1. A user changes the selected items interacting with the Tree View.\n *\n * 2. The `multiSelection` value is changed from `true` to `false`.\n *\n * 3. A selected item is no longer rendered because it does not satisfies a\n * filter condition.\n *\n * 4. TODO: The `treeModel` property is updated and contains different selected\n * items. Even if it does not contains different selected items, this\n * event is fired because the selected items can have a different path\n * than before the `treeModel` update.\n *\n * 5. The `updateItemsProperties` method is executed, changing the item\n * selection.\n *\n * 6. A selected item is removed.\n *\n * 7. TODO: A selected item is moved into a new parent with drag and drop.\n * In this case, since the detail of the event contains the information\n * of the parent, this event must be fired to update the information.\n *\n * 8. Executing `scrollIntoVisible` method and updating the selected value\n * of the scrolled item.\n *\n * 9. TODO: An external item is dropped into the Tree View and the item is\n * selected.\n *\n * 10. TODO: Lazy loading content that has selected items?\n *\n * Thing that does not fire this event:\n * - TODO: Renaming a selected item.\n *\n * - TODO: Applying a filter that keeps all selected items rendered.\n */\n selectedItemsChange;\n /**\n * Given an item id, an array of items to add, the download status and the\n * lazy state, updates the item's UI Model.\n */\n async loadLazyContent(itemId, items, downloading = false, lazy = false) {\n this.treeRef.loadLazyContent(itemId, items, downloading, lazy);\n }\n /**\n * Given a list of ids, removes the items and their children in the tree.\n */\n async removeItems(items) {\n this.treeRef.removeItems(items);\n }\n /**\n * Given an item id and the additional properties to update before and after\n * reload, it reloads the items of the `itemId` node by using the\n * `lazyLoadTreeItemsCallback` property.\n */\n async reloadItems(itemId, beforeProperties, afterProperties) {\n return this.treeRef.reloadItems(itemId, beforeProperties, afterProperties);\n }\n /**\n * Given the path of the item (represent by a sorted array containing all ids\n * from the root to the item) and the additional properties to update after,\n * it displays and scrolls into the item view.\n * The path can also be a string representing the id of the item to scroll\n * into.\n *\n * When using a path, this method will fail if:\n * - The path does not start from the root element.\n * - The path contains a cycle.\n * - The path does not correspond to a valid path on the server:\n * - One of the item of the path, except for the last one, is a leaf.\n * - An item in the path does not exists on the server.\n * - The path has repeated items.\n * - And so on.\n */\n async scrollIntoVisible(path, afterProperties) {\n return this.treeRef.scrollIntoVisible(path, afterProperties);\n }\n /**\n * This method is used to toggle a tree item by the tree item id/ids.\n *\n * @param treeItemIds An array id the tree items to be toggled.\n * @param expand A boolean indicating that the tree item should be expanded or collapsed. (optional)\n * @returns The modified items after the method was called.\n */\n async toggleItems(treeItemIds, expand) {\n return this.treeRef.toggleItems(treeItemIds, expand);\n }\n /**\n * Given a subset of item's properties, it updates all item UI models.\n */\n async updateAllItemsProperties(properties) {\n this.treeRef.updateAllItemsProperties(properties);\n }\n /**\n * Given a item list and the properties to update, it updates the properties\n * of the items in the list.\n */\n async updateItemsProperties(items, properties) {\n this.treeRef.updateItemsProperties(items, properties);\n }\n /**\n * Update the information about the valid droppable zones.\n * @param requestTimestamp Time where the request to the server was made. Useful to avoid having old information.\n * @param newContainerId ID of the container where the drag is trying to be made.\n * @param draggedItems Information about the dragged items.\n * @param validDrop Current state of the droppable zone.\n */\n async updateValidDropZone(requestTimestamp, newContainerId, draggedItems, dropType, validDrop) {\n this.treeRef.updateValidDropZone(requestTimestamp, newContainerId, draggedItems, dropType, validDrop);\n }\n render() {\n return (h(\"ch-tree-view-render\", { checkbox: this.checkbox, checked: this.checked, checkDroppableZoneCallback: this.checkDroppableZoneCallback, cssClass: this.cssClass, dragDisabled: this.dragDisabled, dropDisabled: this.dropDisabled, dropItemsCallback: this.dropItemsCallback, editableItems: this.editableItems, expandOnClick: this.expandOnClick, filter: this.filter, filterList: this.filterList, filterOptions: this.filterOptions, filterDebounce: this.filterDebounce, filterType: this.filterType, lazyLoadTreeItemsCallback: this.lazyLoadTreeItemsCallback, modifyItemCaptionCallback: this.modifyItemCaptionCallback, multiSelection: this.multiSelection, renderItem: this.renderItem, showLines: this.showLines, sortItemsCallback: this.sortItemsCallback, toggleCheckboxes: this.toggleCheckboxes, treeModel: this.treeModel, ref: el => (this.treeRef = el) }));\n }\n static get is() { return \"gxg-tree-view\"; }\n static get originalStyleUrls() {\n return {\n \"$\": [\"tree-view.scss\"]\n };\n }\n static get styleUrls() {\n return {\n \"$\": [\"tree-view.css\"]\n };\n }\n static get properties() {\n return {\n \"checkbox\": {\n \"type\": \"boolean\",\n \"mutable\": false,\n \"complexType\": {\n \"original\": \"boolean\",\n \"resolved\": \"boolean\",\n \"references\": {}\n },\n \"required\": false,\n \"optional\": false,\n \"docs\": {\n \"tags\": [],\n \"text\": \"Set this attribute if you want display a checkbox in all items by default.\"\n },\n \"attribute\": \"checkbox\",\n \"reflect\": false,\n \"defaultValue\": \"false\"\n },\n \"checked\": {\n \"type\": \"boolean\",\n \"mutable\": false,\n \"complexType\": {\n \"original\": \"boolean\",\n \"resolved\": \"boolean\",\n \"references\": {}\n },\n \"required\": false,\n \"optional\": false,\n \"docs\": {\n \"tags\": [],\n \"text\": \"Set this attribute if you want the checkbox to be checked in all items by\\ndefault.\\nOnly works if `checkbox = true`\"\n },\n \"attribute\": \"checked\",\n \"reflect\": false,\n \"defaultValue\": \"false\"\n },\n \"checkDroppableZoneCallback\": {\n \"type\": \"unknown\",\n \"mutable\": false,\n \"complexType\": {\n \"original\": \"(\\n dropInformation: TreeViewDropCheckInfo\\n ) => Promise<boolean>\",\n \"resolved\": \"(dropInformation: TreeViewDropCheckInfo) => Promise<boolean>\",\n \"references\": {\n \"TreeViewDropCheckInfo\": {\n \"location\": \"import\",\n \"path\": \"@genexus/chameleon-controls-library/dist/types/components/tree-view/tree-view/types\",\n \"id\": \"\"\n },\n \"Promise\": {\n \"location\": \"global\",\n \"id\": \"global::Promise\"\n }\n }\n },\n \"required\": false,\n \"optional\": false,\n \"docs\": {\n \"tags\": [],\n \"text\": \"Callback that is executed when an element tries to drop in another item of\\nthe tree. Returns whether the drop is valid.\"\n }\n },\n \"cssClass\": {\n \"type\": \"string\",\n \"mutable\": false,\n \"complexType\": {\n \"original\": \"string\",\n \"resolved\": \"string\",\n \"references\": {}\n },\n \"required\": false,\n \"optional\": false,\n \"docs\": {\n \"tags\": [],\n \"text\": \"A CSS class to set as the `ch-tree-view` element class.\"\n },\n \"attribute\": \"css-class\",\n \"reflect\": false,\n \"defaultValue\": \"\\\"tree-view\\\"\"\n },\n \"dragDisabled\": {\n \"type\": \"boolean\",\n \"mutable\": false,\n \"complexType\": {\n \"original\": \"boolean\",\n \"resolved\": \"boolean\",\n \"references\": {}\n },\n \"required\": false,\n \"optional\": false,\n \"docs\": {\n \"tags\": [],\n \"text\": \"This attribute lets you specify if the drag operation is disabled in all\\nitems by default. If `true`, the items can't be dragged.\"\n },\n \"attribute\": \"drag-disabled\",\n \"reflect\": false,\n \"defaultValue\": \"DEFAULT_DRAG_DISABLED_VALUE\"\n },\n \"dropDisabled\": {\n \"type\": \"boolean\",\n \"mutable\": false,\n \"complexType\": {\n \"original\": \"boolean\",\n \"resolved\": \"boolean\",\n \"references\": {}\n },\n \"required\": false,\n \"optional\": false,\n \"docs\": {\n \"tags\": [],\n \"text\": \"This attribute lets you specify if the drop operation is disabled in all\\nitems by default. If `true`, the items won't accept any drops.\"\n },\n \"attribute\": \"drop-disabled\",\n \"reflect\": false,\n \"defaultValue\": \"DEFAULT_DROP_DISABLED_VALUE\"\n },\n \"dropItemsCallback\": {\n \"type\": \"unknown\",\n \"mutable\": false,\n \"complexType\": {\n \"original\": \"(\\n dataTransferInfo: TreeViewDataTransferInfo\\n ) => Promise<{ acceptDrop: boolean; items?: TreeViewItemModel[] }>\",\n \"resolved\": \"(dataTransferInfo: TreeViewDataTransferInfo) => Promise<{ acceptDrop: boolean; items?: TreeViewItemModel[]; }>\",\n \"references\": {\n \"TreeViewDataTransferInfo\": {\n \"location\": \"import\",\n \"path\": \"@genexus/chameleon-controls-library/dist/types/components/tree-view/tree-view/types\",\n \"id\": \"\"\n },\n \"Promise\": {\n \"location\": \"global\",\n \"id\": \"global::Promise\"\n },\n \"TreeViewItemModel\": {\n \"location\": \"import\",\n \"path\": \"@genexus/chameleon-controls-library/dist/types/components/renders/tree-view/types\",\n \"id\": \"\"\n }\n }\n },\n \"required\": false,\n \"optional\": false,\n \"docs\": {\n \"tags\": [],\n \"text\": \"Callback that is executed when a list of items request to be dropped into\\nanother item.\"\n }\n },\n \"editableItems\": {\n \"type\": \"boolean\",\n \"mutable\": false,\n \"complexType\": {\n \"original\": \"boolean\",\n \"resolved\": \"boolean\",\n \"references\": {}\n },\n \"required\": false,\n \"optional\": false,\n \"docs\": {\n \"tags\": [],\n \"text\": \"This attribute lets you specify if the edit operation is enabled in all\\nitems by default. If `true`, the items can edit its caption in place.\"\n },\n \"attribute\": \"editable-items\",\n \"reflect\": false,\n \"defaultValue\": \"DEFAULT_EDITABLE_ITEMS_VALUE\"\n },\n \"expandableButton\": {\n \"type\": \"string\",\n \"mutable\": false,\n \"complexType\": {\n \"original\": \"\\\"action\\\" | \\\"decorative\\\" | \\\"no\\\"\",\n \"resolved\": \"\\\"action\\\" | \\\"decorative\\\" | \\\"no\\\"\",\n \"references\": {}\n },\n \"required\": false,\n \"optional\": false,\n \"docs\": {\n \"tags\": [],\n \"text\": \"Specifies what kind of expandable button is displayed in the items by\\ndefault.\\n - `\\\"expandableButton\\\"`: Expandable button that allows to expand/collapse\\n the items of the control.\\n - `\\\"decorative\\\"`: Only a decorative icon is rendered to display the state\\n of the item.\"\n },\n \"attribute\": \"expandable-button\",\n \"reflect\": false,\n \"defaultValue\": \"\\\"decorative\\\"\"\n },\n \"expandOnClick\": {\n \"type\": \"boolean\",\n \"mutable\": false,\n \"complexType\": {\n \"original\": \"boolean\",\n \"resolved\": \"boolean\",\n \"references\": {}\n },\n \"required\": false,\n \"optional\": false,\n \"docs\": {\n \"tags\": [],\n \"text\": \"Specifies if a tree-view-item is expanded on click interaction. If `true`\\nthe tree-view-item is expanded on click interaction. If `false`, with\\nmouse interaction the tree-view-item will only be expanded on double click.\"\n },\n \"attribute\": \"expand-on-click\",\n \"reflect\": false,\n \"defaultValue\": \"true\"\n },\n \"filter\": {\n \"type\": \"string\",\n \"mutable\": false,\n \"complexType\": {\n \"original\": \"string\",\n \"resolved\": \"string\",\n \"references\": {}\n },\n \"required\": false,\n \"optional\": false,\n \"docs\": {\n \"tags\": [],\n \"text\": \"This property lets you determine the expression that will be applied to the\\nfilter.\\nOnly works if `filterType = \\\"caption\\\" | \\\"metadata\\\"`.\"\n },\n \"attribute\": \"filter\",\n \"reflect\": false\n },\n \"filterDebounce\": {\n \"type\": \"number\",\n \"mutable\": false,\n \"complexType\": {\n \"original\": \"number\",\n \"resolved\": \"number\",\n \"references\": {}\n },\n \"required\": false,\n \"optional\": false,\n \"docs\": {\n \"tags\": [],\n \"text\": \"This property lets you determine the debounce time (in ms) that the\\ncontrol waits until it processes the changes to the filter property.\\nConsecutive changes to the `filter` property between this range, reset the\\ntimeout to process the filter.\\nOnly works if `filterType = \\\"caption\\\" | \\\"metadata\\\"`.\"\n },\n \"attribute\": \"filter-debounce\",\n \"reflect\": false,\n \"defaultValue\": \"0\"\n },\n \"filterList\": {\n \"type\": \"unknown\",\n \"mutable\": false,\n \"complexType\": {\n \"original\": \"string[]\",\n \"resolved\": \"string[]\",\n \"references\": {}\n },\n \"required\": false,\n \"optional\": false,\n \"docs\": {\n \"tags\": [],\n \"text\": \"This property lets you determine the list of items that will be filtered.\\nOnly works if `filterType = \\\"id-list\\\"`.\"\n },\n \"defaultValue\": \"[]\"\n },\n \"filterOptions\": {\n \"type\": \"unknown\",\n \"mutable\": false,\n \"complexType\": {\n \"original\": \"TreeViewFilterOptions\",\n \"resolved\": \"{ autoExpand?: boolean; hideMatchesAndShowNonMatches?: boolean; highlightMatchedItems?: boolean; matchCase?: boolean; regularExpression?: boolean; }\",\n \"references\": {\n \"TreeViewFilterOptions\": {\n \"location\": \"import\",\n \"path\": \"@genexus/chameleon-controls-library/dist/types/components/renders/tree-view/types\",\n \"id\": \"\"\n }\n }\n },\n \"required\": false,\n \"optional\": false,\n \"docs\": {\n \"tags\": [],\n \"text\": \"This property lets you determine the options that will be applied to the\\nfilter.\\nOnly works if `filterType = \\\"caption\\\" | \\\"metadata\\\"`.\"\n },\n \"defaultValue\": \"{}\"\n },\n \"filterType\": {\n \"type\": \"string\",\n \"mutable\": false,\n \"complexType\": {\n \"original\": \"TreeViewFilterType\",\n \"resolved\": \"\\\"caption\\\" | \\\"checked\\\" | \\\"list\\\" | \\\"metadata\\\" | \\\"none\\\" | \\\"unchecked\\\"\",\n \"references\": {\n \"TreeViewFilterType\": {\n \"location\": \"import\",\n \"path\": \"@genexus/chameleon-controls-library/dist/types/components/renders/tree-view/types\",\n \"id\": \"\"\n }\n }\n },\n \"required\": false,\n \"optional\": false,\n \"docs\": {\n \"tags\": [],\n \"text\": \"This attribute lets you define what kind of filter is applied to items.\\nOnly items that satisfy the filter predicate will be displayed.\\n\\n| Value | Details |\\n| ----------- | ---------------------------------------------------------------------------------------------- |\\n| `checked` | Show only the items that have a checkbox and are checked. |\\n| `unchecked` | Show only the items that have a checkbox and are not checked. |\\n| `caption` | Show only the items whose `caption` satisfies the regex determinate by the `filter` property. |\\n| `metadata` | Show only the items whose `metadata` satisfies the regex determinate by the `filter` property. |\\n| `id-list` | Show only the items that are contained in the array determinate by the `filterList` property. |\\n| `none` | Show all items. |\"\n },\n \"attribute\": \"filter-type\",\n \"reflect\": false,\n \"defaultValue\": \"\\\"none\\\"\"\n },\n \"lazyLoadTreeItemsCallback\": {\n \"type\": \"unknown\",\n \"mutable\": false,\n \"complexType\": {\n \"original\": \"(\\n treeItemId: string\\n ) => Promise<TreeViewItemModel[]>\",\n \"resolved\": \"(treeItemId: string) => Promise<TreeViewItemModel[]>\",\n \"references\": {\n \"Promise\": {\n \"location\": \"global\",\n \"id\": \"global::Promise\"\n },\n \"TreeViewItemModel\": {\n \"location\": \"import\",\n \"path\": \"@genexus/chameleon-controls-library/dist/types/components/renders/tree-view/types\",\n \"id\": \"\"\n }\n }\n },\n \"required\": false,\n \"optional\": false,\n \"docs\": {\n \"tags\": [],\n \"text\": \"Callback that is executed when a item request to load its subitems.\"\n }\n },\n \"modifyItemCaptionCallback\": {\n \"type\": \"unknown\",\n \"mutable\": false,\n \"complexType\": {\n \"original\": \"(\\n treeItemId: string,\\n newCaption: string\\n ) => Promise<TreeViewOperationStatusModifyCaption>\",\n \"resolved\": \"(treeItemId: string, newCaption: string) => Promise<TreeViewOperationStatusModifyCaption>\",\n \"references\": {\n \"Promise\": {\n \"location\": \"global\",\n \"id\": \"global::Promise\"\n },\n \"TreeViewOperationStatusModifyCaption\": {\n \"location\": \"import\",\n \"path\": \"@genexus/chameleon-controls-library/dist/types/components/renders/tree-view/types\",\n \"id\": \"\"\n }\n }\n },\n \"required\": false,\n \"optional\": false,\n \"docs\": {\n \"tags\": [],\n \"text\": \"Callback that is executed when a item request to modify its caption.\"\n }\n },\n \"multiSelection\": {\n \"type\": \"boolean\",\n \"mutable\": false,\n \"complexType\": {\n \"original\": \"boolean\",\n \"resolved\": \"boolean\",\n \"references\": {}\n },\n \"required\": false,\n \"optional\": false,\n \"docs\": {\n \"tags\": [],\n \"text\": \"Set this attribute if you want to allow multi selection of the items.\"\n },\n \"attribute\": \"multi-selection\",\n \"reflect\": false,\n \"defaultValue\": \"false\"\n },\n \"renderItem\": {\n \"type\": \"unknown\",\n \"mutable\": false,\n \"complexType\": {\n \"original\": \"(\\n itemModel: TreeViewItemModel,\\n treeState: ChTreeViewRender,\\n treeHasFilter: boolean,\\n lastItem: boolean,\\n level: number\\n ) => any\",\n \"resolved\": \"(itemModel: TreeViewItemModel, treeState: ChTreeViewRender, treeHasFilter: boolean, lastItem: boolean, level: number) => any\",\n \"references\": {\n \"TreeViewItemModel\": {\n \"location\": \"import\",\n \"path\": \"@genexus/chameleon-controls-library/dist/types/components/renders/tree-view/types\",\n \"id\": \"\"\n },\n \"ChTreeViewRender\": {\n \"location\": \"import\",\n \"path\": \"@genexus/chameleon-controls-library/dist/types/components/renders/tree-view/tree-view-render\",\n \"id\": \"\"\n }\n }\n },\n \"required\": false,\n \"optional\": false,\n \"docs\": {\n \"tags\": [],\n \"text\": \"This property allows us to implement custom rendering of tree items.\"\n },\n \"defaultValue\": \"defaultRenderItem\"\n },\n \"showLines\": {\n \"type\": \"string\",\n \"mutable\": false,\n \"complexType\": {\n \"original\": \"TreeViewLines\",\n \"resolved\": \"\\\"all\\\" | \\\"last\\\" | \\\"none\\\"\",\n \"references\": {\n \"TreeViewLines\": {\n \"location\": \"import\",\n \"path\": \"@genexus/chameleon-controls-library/dist/types/components/tree-view/tree-view/types\",\n \"id\": \"\"\n }\n }\n },\n \"required\": false,\n \"optional\": false,\n \"docs\": {\n \"tags\": [],\n \"text\": \"`true` to display the relation between tree items and tree lists using\\nlines.\"\n },\n \"attribute\": \"show-lines\",\n \"reflect\": false,\n \"defaultValue\": \"\\\"all\\\"\"\n },\n \"sortItemsCallback\": {\n \"type\": \"unknown\",\n \"mutable\": false,\n \"complexType\": {\n \"original\": \"(subModel: TreeViewItemModel[]) => void\",\n \"resolved\": \"(subModel: TreeViewItemModel[]) => void\",\n \"references\": {\n \"TreeViewItemModel\": {\n \"location\": \"import\",\n \"path\": \"@genexus/chameleon-controls-library/dist/types/components/renders/tree-view/types\",\n \"id\": \"\"\n }\n }\n },\n \"required\": false,\n \"optional\": false,\n \"docs\": {\n \"tags\": [],\n \"text\": \"Callback that is executed when the treeModel is changed to order its items.\"\n }\n },\n \"toggleCheckboxes\": {\n \"type\": \"boolean\",\n \"mutable\": false,\n \"complexType\": {\n \"original\": \"boolean\",\n \"resolved\": \"boolean\",\n \"references\": {}\n },\n \"required\": false,\n \"optional\": false,\n \"docs\": {\n \"tags\": [],\n \"text\": \"Set this attribute if you want all the children item's checkboxes to be\\nchecked when the parent item checkbox is checked, or to be unchecked when\\nthe parent item checkbox is unchecked.\\nThis attribute will be used in all items by default.\"\n },\n \"attribute\": \"toggle-checkboxes\",\n \"reflect\": false,\n \"defaultValue\": \"false\"\n },\n \"treeModel\": {\n \"type\": \"unknown\",\n \"mutable\": false,\n \"complexType\": {\n \"original\": \"TreeViewItemModel[]\",\n \"resolved\": \"TreeViewItemModel[]\",\n \"references\": {\n \"TreeViewItemModel\": {\n \"location\": \"import\",\n \"path\": \"@genexus/chameleon-controls-library/dist/types/components/renders/tree-view/types\",\n \"id\": \"\"\n }\n }\n },\n \"required\": false,\n \"optional\": false,\n \"docs\": {\n \"tags\": [],\n \"text\": \"This property lets you define the model of the ch-tree-x control.\"\n },\n \"defaultValue\": \"[]\"\n }\n };\n }\n static get events() {\n return [{\n \"method\": \"checkedItemsChange\",\n \"name\": \"checkedItemsChange\",\n \"bubbles\": true,\n \"cancelable\": true,\n \"composed\": true,\n \"docs\": {\n \"tags\": [],\n \"text\": \"Fired when the checked items change.\\nThis event does take into account the currently filtered items.\"\n },\n \"complexType\": {\n \"original\": \"Map<string, TreeViewItemModelExtended>\",\n \"resolved\": \"Map<string, TreeViewItemModelExtended>\",\n \"references\": {\n \"Map\": {\n \"location\": \"global\",\n \"id\": \"global::Map\"\n },\n \"TreeViewItemModelExtended\": {\n \"location\": \"import\",\n \"path\": \"@genexus/chameleon-controls-library/dist/types/components/renders/tree-view/types\",\n \"id\": \"\"\n }\n }\n }\n }, {\n \"method\": \"itemContextmenu\",\n \"name\": \"itemContextmenu\",\n \"bubbles\": true,\n \"cancelable\": true,\n \"composed\": true,\n \"docs\": {\n \"tags\": [],\n \"text\": \"Fired when an element displays its contextmenu.\"\n },\n \"complexType\": {\n \"original\": \"TreeViewItemContextMenu\",\n \"resolved\": \"{ id: string; itemRef: HTMLChTreeViewItemElement; metadata: string; contextmenuEvent: PointerEvent; }\",\n \"references\": {\n \"TreeViewItemContextMenu\": {\n \"location\": \"import\",\n \"path\": \"@genexus/chameleon-controls-library/dist/types/components/tree-view/tree-view/types\",\n \"id\": \"\"\n }\n }\n }\n }, {\n \"method\": \"itemOpenReference\",\n \"name\": \"itemOpenReference\",\n \"bubbles\": true,\n \"cancelable\": true,\n \"composed\": true,\n \"docs\": {\n \"tags\": [],\n \"text\": \"Fired when the user interacts with an item in a way that its reference\\nmust be opened.\"\n },\n \"complexType\": {\n \"original\": \"TreeViewItemOpenReferenceInfo\",\n \"resolved\": \"{ id: string; leaf: boolean; metadata: string; }\",\n \"references\": {\n \"TreeViewItemOpenReferenceInfo\": {\n \"location\": \"import\",\n \"path\": \"@genexus/chameleon-controls-library/dist/types/components/tree-view/tree-view/types\",\n \"id\": \"\"\n }\n }\n }\n }, {\n \"method\": \"selectedItemsChange\",\n \"name\": \"selectedItemsChange\",\n \"bubbles\": true,\n \"cancelable\": true,\n \"composed\": true,\n \"docs\": {\n \"tags\": [],\n \"text\": \"Fired when the selected items change.\\nThis event can be fired by the following conditions:\\n 1. A user changes the selected items interacting with the Tree View.\\n\\n 2. The `multiSelection` value is changed from `true` to `false`.\\n\\n 3. A selected item is no longer rendered because it does not satisfies a\\n filter condition.\\n\\n 4. TODO: The `treeModel` property is updated and contains different selected\\n items. Even if it does not contains different selected items, this\\n event is fired because the selected items can have a different path\\n than before the `treeModel` update.\\n\\n 5. The `updateItemsProperties` method is executed, changing the item\\n selection.\\n\\n 6. A selected item is removed.\\n\\n 7. TODO: A selected item is moved into a new parent with drag and drop.\\n In this case, since the detail of the event contains the information\\n of the parent, this event must be fired to update the information.\\n\\n 8. Executing `scrollIntoVisible` method and updating the selected value\\n of the scrolled item.\\n\\n 9. TODO: An external item is dropped into the Tree View and the item is\\n selected.\\n\\n 10. TODO: Lazy loading content that has selected items?\\n\\nThing that does not fire this event:\\n - TODO: Renaming a selected item.\\n\\n - TODO: Applying a filter that keeps all selected items rendered.\"\n },\n \"complexType\": {\n \"original\": \"TreeViewItemModelExtended[]\",\n \"resolved\": \"TreeViewItemModelExtended[]\",\n \"references\": {\n \"TreeViewItemModelExtended\": {\n \"location\": \"import\",\n \"path\": \"@genexus/chameleon-controls-library/dist/types/components/renders/tree-view/types\",\n \"id\": \"\"\n }\n }\n }\n }];\n }\n static get methods() {\n return {\n \"loadLazyContent\": {\n \"complexType\": {\n \"signature\": \"(itemId: string, items?: TreeViewItemModel[], downloading?: boolean, lazy?: boolean) => Promise<void>\",\n \"parameters\": [{\n \"name\": \"itemId\",\n \"type\": \"string\",\n \"docs\": \"\"\n }, {\n \"name\": \"items\",\n \"type\": \"TreeViewItemModel[]\",\n \"docs\": \"\"\n }, {\n \"name\": \"downloading\",\n \"type\": \"boolean\",\n \"docs\": \"\"\n }, {\n \"name\": \"lazy\",\n \"type\": \"boolean\",\n \"docs\": \"\"\n }],\n \"references\": {\n \"Promise\": {\n \"location\": \"global\",\n \"id\": \"global::Promise\"\n },\n \"TreeViewItemModel\": {\n \"location\": \"import\",\n \"path\": \"@genexus/chameleon-controls-library/dist/types/components/renders/tree-view/types\",\n \"id\": \"\"\n }\n },\n \"return\": \"Promise<void>\"\n },\n \"docs\": {\n \"text\": \"Given an item id, an array of items to add, the download status and the\\nlazy state, updates the item's UI Model.\",\n \"tags\": []\n }\n },\n \"removeItems\": {\n \"complexType\": {\n \"signature\": \"(items: string[]) => Promise<void>\",\n \"parameters\": [{\n \"name\": \"items\",\n \"type\": \"string[]\",\n \"docs\": \"\"\n }],\n \"references\": {\n \"Promise\": {\n \"location\": \"global\",\n \"id\": \"global::Promise\"\n }\n },\n \"return\": \"Promise<void>\"\n },\n \"docs\": {\n \"text\": \"Given a list of ids, removes the items and their children in the tree.\",\n \"tags\": []\n }\n },\n \"reloadItems\": {\n \"complexType\": {\n \"signature\": \"(itemId: string, beforeProperties?: Partial<TreeViewItemModel>, afterProperties?: Partial<TreeViewItemModel>) => Promise<boolean>\",\n \"parameters\": [{\n \"name\": \"itemId\",\n \"type\": \"string\",\n \"docs\": \"\"\n }, {\n \"name\": \"beforeProperties\",\n \"type\": \"{ id?: string; caption?: string; checkbox?: boolean; checked?: boolean; class?: string; disabled?: boolean; downloading?: boolean; dragDisabled?: boolean; dropDisabled?: boolean; editable?: boolean; expanded?: boolean; endImgSrc?: string; endImgType?: ImageRender; lastItemId?: string; lazy?: boolean; leaf?: boolean; indeterminate?: boolean; items?: TreeViewItemModel[]; metadata?: string; order?: number; render?: boolean; selected?: boolean; startImgSrc?: string; startImgType?: ImageRender; toggleCheckboxes?: boolean; }\",\n \"docs\": \"\"\n }, {\n \"name\": \"afterProperties\",\n \"type\": \"{ id?: string; caption?: string; checkbox?: boolean; checked?: boolean; class?: string; disabled?: boolean; downloading?: boolean; dragDisabled?: boolean; dropDisabled?: boolean; editable?: boolean; expanded?: boolean; endImgSrc?: string; endImgType?: ImageRender; lastItemId?: string; lazy?: boolean; leaf?: boolean; indeterminate?: boolean; items?: TreeViewItemModel[]; metadata?: string; order?: number; render?: boolean; selected?: boolean; startImgSrc?: string; startImgType?: ImageRender; toggleCheckboxes?: boolean; }\",\n \"docs\": \"\"\n }],\n \"references\": {\n \"Promise\": {\n \"location\": \"global\",\n \"id\": \"global::Promise\"\n },\n \"Partial\": {\n \"location\": \"global\",\n \"id\": \"global::Partial\"\n },\n \"TreeViewItemModel\": {\n \"location\": \"import\",\n \"path\": \"@genexus/chameleon-controls-library/dist/types/components/renders/tree-view/types\",\n \"id\": \"\"\n }\n },\n \"return\": \"Promise<boolean>\"\n },\n \"docs\": {\n \"text\": \"Given an item id and the additional properties to update before and after\\nreload, it reloads the items of the `itemId` node by using the\\n`lazyLoadTreeItemsCallback` property.\",\n \"tags\": []\n }\n },\n \"scrollIntoVisible\": {\n \"complexType\": {\n \"signature\": \"(path: string | string[], afterProperties?: Partial<TreeViewItemModel>) => Promise<boolean>\",\n \"parameters\": [{\n \"name\": \"path\",\n \"type\": \"string | string[]\",\n \"docs\": \"\"\n }, {\n \"name\": \"afterProperties\",\n \"type\": \"{ id?: string; caption?: string; checkbox?: boolean; checked?: boolean; class?: string; disabled?: boolean; downloading?: boolean; dragDisabled?: boolean; dropDisabled?: boolean; editable?: boolean; expanded?: boolean; endImgSrc?: string; endImgType?: ImageRender; lastItemId?: string; lazy?: boolean; leaf?: boolean; indeterminate?: boolean; items?: TreeViewItemModel[]; metadata?: string; order?: number; render?: boolean; selected?: boolean; startImgSrc?: string; startImgType?: ImageRender; toggleCheckboxes?: boolean; }\",\n \"docs\": \"\"\n }],\n \"references\": {\n \"Promise\": {\n \"location\": \"global\",\n \"id\": \"global::Promise\"\n },\n \"Partial\": {\n \"location\": \"global\",\n \"id\": \"global::Partial\"\n },\n \"TreeViewItemModel\": {\n \"location\": \"import\",\n \"path\": \"@genexus/chameleon-controls-library/dist/types/components/renders/tree-view/types\",\n \"id\": \"\"\n }\n },\n \"return\": \"Promise<boolean>\"\n },\n \"docs\": {\n \"text\": \"Given the path of the item (represent by a sorted array containing all ids\\nfrom the root to the item) and the additional properties to update after,\\nit displays and scrolls into the item view.\\nThe path can also be a string representing the id of the item to scroll\\ninto.\\n\\nWhen using a path, this method will fail if:\\n - The path does not start from the root element.\\n - The path contains a cycle.\\n - The path does not correspond to a valid path on the server:\\n - One of the item of the path, except for the last one, is a leaf.\\n - An item in the path does not exists on the server.\\n - The path has repeated items.\\n - And so on.\",\n \"tags\": []\n }\n },\n \"toggleItems\": {\n \"complexType\": {\n \"signature\": \"(treeItemIds: string[], expand?: boolean) => Promise<TreeViewItemExpandedInfo[]>\",\n \"parameters\": [{\n \"name\": \"treeItemIds\",\n \"type\": \"string[]\",\n \"docs\": \"An array id the tree items to be toggled.\"\n }, {\n \"name\": \"expand\",\n \"type\": \"boolean\",\n \"docs\": \"A boolean indicating that the tree item should be expanded or collapsed. (optional)\"\n }],\n \"references\": {\n \"Promise\": {\n \"location\": \"global\",\n \"id\": \"global::Promise\"\n },\n \"TreeViewItemExpandedInfo\": {\n \"location\": \"import\",\n \"path\": \"@genexus/chameleon-controls-library/dist/types/components/tree-view/tree-view/types\",\n \"id\": \"\"\n }\n },\n \"return\": \"Promise<TreeViewItemExpandedInfo[]>\"\n },\n \"docs\": {\n \"text\": \"This method is used to toggle a tree item by the tree item id/ids.\",\n \"tags\": [{\n \"name\": \"param\",\n \"text\": \"treeItemIds An array id the tree items to be toggled.\"\n }, {\n \"name\": \"param\",\n \"text\": \"expand A boolean indicating that the tree item should be expanded or collapsed. (optional)\"\n }, {\n \"name\": \"returns\",\n \"text\": \"The modified items after the method was called.\"\n }]\n }\n },\n \"updateAllItemsProperties\": {\n \"complexType\": {\n \"signature\": \"(properties: { expanded?: boolean; checked?: boolean; }) => Promise<void>\",\n \"parameters\": [{\n \"name\": \"properties\",\n \"type\": \"{ expanded?: boolean; checked?: boolean; }\",\n \"docs\": \"\"\n }],\n \"references\": {\n \"Promise\": {\n \"location\": \"global\",\n \"id\": \"global::Promise\"\n }\n },\n \"return\": \"Promise<void>\"\n },\n \"docs\": {\n \"text\": \"Given a subset of item's properties, it updates all item UI models.\",\n \"tags\": []\n }\n },\n \"updateItemsProperties\": {\n \"complexType\": {\n \"signature\": \"(items: string[], properties: TreeViewItemModel) => Promise<void>\",\n \"parameters\": [{\n \"name\": \"items\",\n \"type\": \"string[]\",\n \"docs\": \"\"\n }, {\n \"name\": \"properties\",\n \"type\": \"{ id: string; caption: string; checkbox?: boolean; checked?: boolean; class?: string; disabled?: boolean; downloading?: boolean; dragDisabled?: boolean; dropDisabled?: boolean; editable?: boolean; expanded?: boolean; endImgSrc?: string; endImgType?: ImageRender; lastItemId?: string; lazy?: boolean; leaf?: boolean; indeterminate?: boolean; items?: TreeViewItemModel[]; metadata?: string; order?: number; render?: boolean; selected?: boolean; startImgSrc?: string; startImgType?: ImageRender; toggleCheckboxes?: boolean; }\",\n \"docs\": \"\"\n }],\n \"references\": {\n \"Promise\": {\n \"location\": \"global\",\n \"id\": \"global::Promise\"\n },\n \"TreeViewItemModel\": {\n \"location\": \"import\",\n \"path\": \"@genexus/chameleon-controls-library/dist/types/components/renders/tree-view/types\",\n \"id\": \"\"\n }\n },\n \"return\": \"Promise<void>\"\n },\n \"docs\": {\n \"text\": \"Given a item list and the properties to update, it updates the properties\\nof the items in the list.\",\n \"tags\": []\n }\n },\n \"updateValidDropZone\": {\n \"complexType\": {\n \"signature\": \"(requestTimestamp: number, newContainerId: string, draggedItems: GxDataTransferInfo[], dropType: TreeViewDropType, validDrop: boolean) => Promise<void>\",\n \"parameters\": [{\n \"name\": \"requestTimestamp\",\n \"type\": \"number\",\n \"docs\": \"Time where the request to the server was made. Useful to avoid having old information.\"\n }, {\n \"name\": \"newContainerId\",\n \"type\": \"string\",\n \"docs\": \"ID of the container where the drag is trying to be made.\"\n }, {\n \"name\": \"draggedItems\",\n \"type\": \"GxDataTransferInfo[]\",\n \"docs\": \"Information about the dragged items.\"\n }, {\n \"name\": \"dropType\",\n \"type\": \"\\\"after\\\" | \\\"before\\\" | \\\"above\\\"\",\n \"docs\": \"\"\n }, {\n \"name\": \"validDrop\",\n \"type\": \"boolean\",\n \"docs\": \"Current state of the droppable zone.\"\n }],\n \"references\": {\n \"Promise\": {\n \"location\": \"global\",\n \"id\": \"global::Promise\"\n },\n \"GxDataTransferInfo\": {\n \"location\": \"import\",\n \"path\": \"@genexus/chameleon-controls-library/dist/types/common/types\",\n \"id\": \"\"\n },\n \"TreeViewDropType\": {\n \"location\": \"import\",\n \"path\": \"@genexus/chameleon-controls-library/dist/types/components/tree-view/tree-view/types\",\n \"id\": \"\"\n }\n },\n \"return\": \"Promise<void>\"\n },\n \"docs\": {\n \"text\": \"Update the information about the valid droppable zones.\",\n \"tags\": [{\n \"name\": \"param\",\n \"text\": \"requestTimestamp Time where the request to the server was made. Useful to avoid having old information.\"\n }, {\n \"name\": \"param\",\n \"text\": \"newContainerId ID of the container where the drag is trying to be made.\"\n }, {\n \"name\": \"param\",\n \"text\": \"draggedItems Information about the dragged items.\"\n }, {\n \"name\": \"param\",\n \"text\": \"validDrop Current state of the droppable zone.\"\n }]\n }\n }\n };\n }\n}\n//# sourceMappingURL=tree-view.js.map\n"],"mappings":"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"}
|