@siemens/element-ng 49.7.0 → 49.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (124) hide show
  1. package/fesm2022/siemens-element-ng-accordion.mjs +1 -1
  2. package/fesm2022/siemens-element-ng-accordion.mjs.map +1 -1
  3. package/fesm2022/siemens-element-ng-action-modal.mjs +8 -8
  4. package/fesm2022/siemens-element-ng-action-modal.mjs.map +1 -1
  5. package/fesm2022/siemens-element-ng-ag-grid.mjs +3 -3
  6. package/fesm2022/siemens-element-ng-ag-grid.mjs.map +1 -1
  7. package/fesm2022/siemens-element-ng-application-header.mjs +4 -4
  8. package/fesm2022/siemens-element-ng-application-header.mjs.map +1 -1
  9. package/fesm2022/siemens-element-ng-avatar.mjs +2 -2
  10. package/fesm2022/siemens-element-ng-avatar.mjs.map +1 -1
  11. package/fesm2022/siemens-element-ng-breadcrumb-router.mjs +6 -2
  12. package/fesm2022/siemens-element-ng-breadcrumb-router.mjs.map +1 -1
  13. package/fesm2022/siemens-element-ng-card.mjs +43 -8
  14. package/fesm2022/siemens-element-ng-card.mjs.map +1 -1
  15. package/fesm2022/siemens-element-ng-chat-messages.mjs +8 -8
  16. package/fesm2022/siemens-element-ng-chat-messages.mjs.map +1 -1
  17. package/fesm2022/siemens-element-ng-circle-status.mjs +2 -2
  18. package/fesm2022/siemens-element-ng-circle-status.mjs.map +1 -1
  19. package/fesm2022/siemens-element-ng-column-selection-dialog.mjs +2 -2
  20. package/fesm2022/siemens-element-ng-column-selection-dialog.mjs.map +1 -1
  21. package/fesm2022/siemens-element-ng-common.mjs +4 -4
  22. package/fesm2022/siemens-element-ng-common.mjs.map +1 -1
  23. package/fesm2022/siemens-element-ng-content-action-bar.mjs +2 -2
  24. package/fesm2022/siemens-element-ng-content-action-bar.mjs.map +1 -1
  25. package/fesm2022/siemens-element-ng-dashboard.mjs +15 -13
  26. package/fesm2022/siemens-element-ng-dashboard.mjs.map +1 -1
  27. package/fesm2022/siemens-element-ng-datatable.mjs +10 -19
  28. package/fesm2022/siemens-element-ng-datatable.mjs.map +1 -1
  29. package/fesm2022/siemens-element-ng-date-range-filter.mjs +1 -1
  30. package/fesm2022/siemens-element-ng-date-range-filter.mjs.map +1 -1
  31. package/fesm2022/siemens-element-ng-datepicker.mjs +51 -41
  32. package/fesm2022/siemens-element-ng-datepicker.mjs.map +1 -1
  33. package/fesm2022/siemens-element-ng-file-uploader.mjs +9 -8
  34. package/fesm2022/siemens-element-ng-file-uploader.mjs.map +1 -1
  35. package/fesm2022/siemens-element-ng-filter-bar.mjs +4 -4
  36. package/fesm2022/siemens-element-ng-filter-bar.mjs.map +1 -1
  37. package/fesm2022/siemens-element-ng-filtered-search.mjs +12 -12
  38. package/fesm2022/siemens-element-ng-filtered-search.mjs.map +1 -1
  39. package/fesm2022/siemens-element-ng-form.mjs +8 -10
  40. package/fesm2022/siemens-element-ng-form.mjs.map +1 -1
  41. package/fesm2022/siemens-element-ng-formly.mjs +1 -1
  42. package/fesm2022/siemens-element-ng-formly.mjs.map +1 -1
  43. package/fesm2022/siemens-element-ng-header-dropdown.mjs +19 -55
  44. package/fesm2022/siemens-element-ng-header-dropdown.mjs.map +1 -1
  45. package/fesm2022/siemens-element-ng-menu.mjs +5 -7
  46. package/fesm2022/siemens-element-ng-menu.mjs.map +1 -1
  47. package/fesm2022/siemens-element-ng-navbar-vertical-next.mjs +94 -61
  48. package/fesm2022/siemens-element-ng-navbar-vertical-next.mjs.map +1 -1
  49. package/fesm2022/siemens-element-ng-navbar-vertical.mjs +25 -29
  50. package/fesm2022/siemens-element-ng-navbar-vertical.mjs.map +1 -1
  51. package/fesm2022/siemens-element-ng-navbar.mjs +4 -4
  52. package/fesm2022/siemens-element-ng-navbar.mjs.map +1 -1
  53. package/fesm2022/siemens-element-ng-notification-item.mjs +2 -2
  54. package/fesm2022/siemens-element-ng-notification-item.mjs.map +1 -1
  55. package/fesm2022/siemens-element-ng-number-input.mjs +2 -2
  56. package/fesm2022/siemens-element-ng-number-input.mjs.map +1 -1
  57. package/fesm2022/siemens-element-ng-password-toggle.mjs +2 -2
  58. package/fesm2022/siemens-element-ng-password-toggle.mjs.map +1 -1
  59. package/fesm2022/siemens-element-ng-photo-upload.mjs +2 -2
  60. package/fesm2022/siemens-element-ng-photo-upload.mjs.map +1 -1
  61. package/fesm2022/siemens-element-ng-pills-input.mjs +4 -4
  62. package/fesm2022/siemens-element-ng-pills-input.mjs.map +1 -1
  63. package/fesm2022/siemens-element-ng-popover.mjs +10 -3
  64. package/fesm2022/siemens-element-ng-popover.mjs.map +1 -1
  65. package/fesm2022/siemens-element-ng-search-bar.mjs +10 -4
  66. package/fesm2022/siemens-element-ng-search-bar.mjs.map +1 -1
  67. package/fesm2022/siemens-element-ng-select.mjs +457 -50
  68. package/fesm2022/siemens-element-ng-select.mjs.map +1 -1
  69. package/fesm2022/siemens-element-ng-side-panel.mjs +2 -2
  70. package/fesm2022/siemens-element-ng-side-panel.mjs.map +1 -1
  71. package/fesm2022/siemens-element-ng-slider.mjs +2 -2
  72. package/fesm2022/siemens-element-ng-slider.mjs.map +1 -1
  73. package/fesm2022/siemens-element-ng-status-bar.mjs +47 -22
  74. package/fesm2022/siemens-element-ng-status-bar.mjs.map +1 -1
  75. package/fesm2022/siemens-element-ng-status-toggle.mjs +2 -2
  76. package/fesm2022/siemens-element-ng-status-toggle.mjs.map +1 -1
  77. package/fesm2022/siemens-element-ng-summary-chip.mjs +2 -2
  78. package/fesm2022/siemens-element-ng-summary-chip.mjs.map +1 -1
  79. package/fesm2022/siemens-element-ng-summary-widget.mjs +2 -2
  80. package/fesm2022/siemens-element-ng-summary-widget.mjs.map +1 -1
  81. package/fesm2022/siemens-element-ng-tabs-legacy.mjs +2 -2
  82. package/fesm2022/siemens-element-ng-tabs-legacy.mjs.map +1 -1
  83. package/fesm2022/siemens-element-ng-tabs.mjs +4 -4
  84. package/fesm2022/siemens-element-ng-tabs.mjs.map +1 -1
  85. package/fesm2022/siemens-element-ng-threshold.mjs +2 -2
  86. package/fesm2022/siemens-element-ng-threshold.mjs.map +1 -1
  87. package/fesm2022/siemens-element-ng-toast-notification.mjs +2 -2
  88. package/fesm2022/siemens-element-ng-toast-notification.mjs.map +1 -1
  89. package/fesm2022/siemens-element-ng-tooltip.mjs +10 -8
  90. package/fesm2022/siemens-element-ng-tooltip.mjs.map +1 -1
  91. package/fesm2022/siemens-element-ng-tour.mjs +2 -2
  92. package/fesm2022/siemens-element-ng-tour.mjs.map +1 -1
  93. package/fesm2022/siemens-element-ng-translate.mjs.map +1 -1
  94. package/fesm2022/siemens-element-ng-tree-view.mjs +52 -30
  95. package/fesm2022/siemens-element-ng-tree-view.mjs.map +1 -1
  96. package/package.json +3 -3
  97. package/schematics/migrations/data/element-migration-data.js +20 -0
  98. package/schematics/migrations/data/index.js +1 -16
  99. package/schematics/migrations/ngx-translate/index.js +1 -137
  100. package/schematics/migrations/ngx-translate/missing-translate-migration.js +141 -0
  101. package/schematics/ng-add/index.js +1 -12
  102. package/schematics/ng-add/ng-add-rule.js +16 -0
  103. package/schematics/ng-update/index.js +1 -17
  104. package/schematics/ng-update/migrate-to-v49.js +21 -0
  105. package/template-i18n.json +3 -1
  106. package/types/siemens-element-ng-breadcrumb-router.d.ts +6 -2
  107. package/types/siemens-element-ng-card.d.ts +26 -1
  108. package/types/siemens-element-ng-common.d.ts +3 -3
  109. package/types/siemens-element-ng-dashboard.d.ts +2 -1
  110. package/types/siemens-element-ng-datatable.d.ts +0 -1
  111. package/types/siemens-element-ng-file-uploader.d.ts +4 -3
  112. package/types/siemens-element-ng-filtered-search.d.ts +1 -1
  113. package/types/siemens-element-ng-form.d.ts +1 -1
  114. package/types/siemens-element-ng-header-dropdown.d.ts +0 -8
  115. package/types/siemens-element-ng-navbar-vertical-next.d.ts +33 -20
  116. package/types/siemens-element-ng-navbar-vertical.d.ts +2 -1
  117. package/types/siemens-element-ng-navbar.d.ts +2 -2
  118. package/types/siemens-element-ng-popover.d.ts +9 -2
  119. package/types/siemens-element-ng-search-bar.d.ts +7 -1
  120. package/types/siemens-element-ng-select.d.ts +241 -2
  121. package/types/siemens-element-ng-status-bar.d.ts +11 -5
  122. package/types/siemens-element-ng-tooltip.d.ts +9 -3
  123. package/types/siemens-element-ng-translate.d.ts +2 -0
  124. package/types/siemens-element-ng-tree-view.d.ts +4 -5
@@ -1,7 +1,8 @@
1
1
  import * as i0 from '@angular/core';
2
- import { input, inject, TemplateRef, Directive, InjectionToken, Injectable, ElementRef, ChangeDetectorRef, signal, computed, viewChild, effect, HostBinding, Component, EventEmitter, ViewContainerRef, IterableDiffers, Injector, booleanAttribute, output, contentChildren, INJECTOR, viewChildren, contentChild, NgModule } from '@angular/core';
2
+ import { input, inject, TemplateRef, Directive, InjectionToken, Injectable, ElementRef, ChangeDetectorRef, DestroyRef, signal, computed, viewChild, effect, HostBinding, Component, EventEmitter, ViewContainerRef, IterableDiffers, Injector, booleanAttribute, output, contentChildren, INJECTOR, viewChildren, contentChild, NgModule } from '@angular/core';
3
3
  import { CdkMenuTrigger, CdkContextMenuTrigger } from '@angular/cdk/menu';
4
4
  import { NgTemplateOutlet } from '@angular/common';
5
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
5
6
  import { correctKeyRTL } from '@siemens/element-ng/common';
6
7
  import { SiIconComponent } from '@siemens/element-ng/icon';
7
8
  import { SiLoadingSpinnerComponent } from '@siemens/element-ng/loading-spinner';
@@ -463,6 +464,7 @@ class SiTreeViewItemComponent {
463
464
  element = inject(ElementRef);
464
465
  siTreeViewService = inject(SiTreeViewService);
465
466
  cdRef = inject(ChangeDetectorRef);
467
+ destroyRef = inject(DestroyRef);
466
468
  treeItemContext = inject(TREE_ITEM_CONTEXT);
467
469
  treeViewComponent = this.treeItemContext.parent;
468
470
  /** @internal */
@@ -480,7 +482,6 @@ class SiTreeViewItemComponent {
480
482
  stickyEndItems = this.treeViewComponent.horizontalScrolling;
481
483
  icons = this.treeViewComponent.computedIcons;
482
484
  savedElement;
483
- subscriptions = [];
484
485
  indentLevel = this.treeItem.level ?? 0;
485
486
  nextSiblingElement;
486
487
  menuTrigger = viewChild(CdkMenuTrigger, ...(ngDevMode ? [{ debugName: "menuTrigger" }] : []));
@@ -509,9 +510,15 @@ class SiTreeViewItemComponent {
509
510
  this.updateContextMenuItem();
510
511
  }
511
512
  ngOnInit() {
512
- this.subscriptions.push(this.scrollIntoView.subscribe(event => this.onScrollIntoViewByConsumer(event)));
513
- this.subscriptions.push(this.childrenLoaded.subscribe(event => this.childrenLoadingDone(event)));
514
- this.subscriptions.push(this.siTreeViewService.triggerMarkForCheck.subscribe(() => this.cdRef.markForCheck()));
513
+ this.scrollIntoView
514
+ .pipe(takeUntilDestroyed(this.destroyRef))
515
+ .subscribe(event => this.onScrollIntoViewByConsumer(event));
516
+ this.childrenLoaded
517
+ .pipe(takeUntilDestroyed(this.destroyRef))
518
+ .subscribe(event => this.childrenLoadingDone(event));
519
+ this.siTreeViewService.triggerMarkForCheck
520
+ .pipe(takeUntilDestroyed(this.destroyRef))
521
+ .subscribe(() => this.cdRef.markForCheck());
515
522
  }
516
523
  ngDoCheck() {
517
524
  if (this.treeItem.parent?.children && this.ariaPosinset) {
@@ -533,11 +540,6 @@ class SiTreeViewItemComponent {
533
540
  }
534
541
  this.nextSiblingElement = this.element.nativeElement?.nextElementSibling;
535
542
  }
536
- ngOnDestroy() {
537
- this.subscriptions
538
- .filter(subscription => !!subscription)
539
- .forEach(subscription => subscription.unsubscribe());
540
- }
541
543
  enableSelection = this.treeViewComponent.enableSelection;
542
544
  enableContextMenuButton = this.treeViewComponent.enableContextMenuButton;
543
545
  enableDataField1 = this.treeViewComponent.enableDataField1;
@@ -832,7 +834,7 @@ class SiTreeViewItemComponent {
832
834
  !this.treeViewComponent.flatTree());
833
835
  }
834
836
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: SiTreeViewItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
835
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.8", type: SiTreeViewItemComponent, isStandalone: true, selector: "si-tree-view-item", host: { attributes: { "role": "treeitem" }, listeners: { "contextmenu": "onContextMenu($event)", "keydown": "onKeydown($event)" }, properties: { "attr.tabindex": "treeItemContext.record.currentIndex === treeViewComponent.activeIndex ? 0 : -1", "class.focus-none": "true", "class.si-tree-ellipsis": "treeViewComponent.horizontalScrolling()", "class.si-tree-view-top-level-item": "!treeViewComponent.compactMode() && (treeViewComponent.flatTree() || (treeItem.level ?? 0) < 1)", "attr.aria-haspopup": "isContextMenuButtonVisible()", "attr.aria-level": "this.ariaLevel", "attr.aria-setsize": "this.ariaSetsize", "attr.aria-posinset": "this.ariaPosinset", "attr.aria-selected": "this.ariaSelected", "attr.aria-checked": "this.ariaChecked", "attr.aria-expanded": "this.ariaExpanded" } }, viewQueries: [{ propertyName: "menuTrigger", first: true, predicate: CdkMenuTrigger, descendants: true, isSignal: true }], ngImport: i0, template: "@if (!isGroupedItem) {\n <div\n #contextMenuTrigger=\"cdkContextMenuTriggerFor\"\n class=\"si-tree-view-li si-tree-view-li-item focus-direct-sub-inside\"\n [class.si-tree-view-item-context-menu-visible]=\"\n !!(contextMenuTrigger.isOpen() || menuTrigger()?.isOpen())\n \"\n [class.si-tree-view-item-active]=\"treeItem.active\"\n [class.si-tree-view-item-selected]=\"enableSelection() && treeItem.selected\"\n [class.si-tree-view-item-not-selectable]=\"!treeItem.selectable\"\n [style.padding-inline-start]=\"biggerPaddingStart\"\n [cdkContextMenuTriggerFor]=\"contextMenu\"\n [cdkContextMenuDisabled]=\"!isContextMenuButtonVisible() || !treeItem.selectable\"\n (cdkContextMenuOpened)=\"onToggleContextMenuOpen()\"\n (cdkContextMenuClosed)=\"onToggleContextMenuClose()\"\n >\n <div class=\"si-tree-view-item\" (mousedown)=\"onMouseDownTreeItem($event)\">\n @if (showFolderStateStart && treeItem.state !== 'leaf') {\n <ng-container\n [ngTemplateOutlet]=\"toggleTemplate\"\n [ngTemplateOutletContext]=\"{\n biggerPaddingStart: '-' + biggerPaddingStart,\n paddingStart: paddingStart,\n toggleIcon: 'si-tree-view-item-dropdown-caret'\n }\"\n />\n }\n <ng-container [ngTemplateOutlet]=\"checkboxOrOption\" />\n\n <div\n class=\"si-tree-view-item-main d-flex flex-grow-1 align-self-stretch grab-area\"\n (click)=\"onItemClicked($event)\"\n >\n @if (showIcon()) {\n <div class=\"si-tree-stretch-center\">\n <si-icon class=\"si-tree-view-item-icon\" [icon]=\"treeItem.icon!\" />\n </div>\n }\n <div\n class=\"si-tree-view-item-object-data d-flex flex-column justify-content-center overflow-hidden\"\n >\n @if (!templates().length) {\n <ng-content select=\":not(si-tree-view-item):not([dragPreview])\"\n ><div class=\"text-truncate\" [class.si-h5]=\"enableSelection() && treeItem.selected\">{{\n treeItem.label | translate\n }}</div></ng-content\n >\n } @else {\n <div>\n <ng-container\n *ngTemplateOutlet=\"\n renderMatchingTemplate(treeItem);\n context: { $implicit: treeItem }\n \"\n />\n </div>\n }\n @if (enableDataField1() && treeItem.dataField1) {\n <p class=\"si-tree-view-item-object-data-field-1 text-truncate\">{{\n treeItem.dataField1 | translate\n }}</p>\n }\n @if (enableDataField2() && treeItem.dataField2) {\n <p class=\"si-tree-view-item-object-data-field-2 text-truncate\">{{\n treeItem.dataField2 | translate\n }}</p>\n }\n </div>\n @if (treeItem.badge) {\n <span class=\"badge flex-shrink-0\" [class]=\"`bg-${treeItem.badgeColor || 'default'}`\">{{\n treeItem.badge\n }}</span>\n }\n </div>\n <div\n class=\"si-tree-view-item-end-icons d-flex ms-2 align-items-center\"\n [class.si-tree-view-item-end-icons-sticky]=\"stickyEndItems()\"\n >\n @if (showStateIndicator() && getStateIndicatorColor()) {\n <div\n class=\"si-tree-view-state-indicator\"\n [style.background-color]=\"getStateIndicatorColor()\"\n [class.si-tree-view-state-indicator-endmost]=\"\n !enableContextMenuButton() && !showFolderStateEnd\n \"\n ></div>\n }\n @if (isContextMenuButtonVisible()) {\n <div class=\"si-tree-stretch-center si-tree-context-menu-btn\">\n <div\n #menuTrigger=\"cdkMenuTriggerFor\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n [cdkMenuTriggerFor]=\"contextMenu\"\n (cdkMenuOpened)=\"onToggleContextMenuOpen()\"\n (cdkMenuClosed)=\"onToggleContextMenuClose()\"\n >\n <i\n aria-hidden=\"true\"\n class=\"si-tree-view-item-icon si-tree-view-menu-btn\"\n [class]=\"icons().itemMenu\"\n ></i>\n </div>\n </div>\n }\n @if (showFolderStateEnd) {\n <ng-container\n [ngTemplateOutlet]=\"treeItem.state === 'leaf' ? spacerTemplate : toggleTemplate\"\n [ngTemplateOutletContext]=\"{\n toggleIcon: 'si-tree-view-item-icon',\n positionEnd: true\n }\"\n />\n }\n </div>\n </div>\n </div>\n} @else {\n <div class=\"si-tree-view-li focus-direct-sub-inside\">\n <div class=\"si-tree-view-item-group\">\n @if (showFolderStateStart) {\n <ng-container\n [ngTemplateOutlet]=\"toggleTemplate\"\n [ngTemplateOutletContext]=\"{\n toggleIcon: 'si-tree-view-item-icon'\n }\"\n />\n }\n <ng-container\n [ngTemplateOutlet]=\"checkboxOrOption\"\n [ngTemplateOutletContext]=\"{ classNames: 'form-check' }\"\n />\n\n <p class=\"mb-0\">{{ treeItem.label | translate }}</p>\n @if (showFolderStateEnd) {\n <ng-container\n [ngTemplateOutlet]=\"toggleTemplate\"\n [ngTemplateOutletContext]=\"{\n toggleIcon: 'si-tree-view-item-icon'\n }\"\n />\n }\n </div>\n </div>\n}\n\n<ng-template #contextMenu>\n <si-menu-factory class=\"me-5\" [items]=\"contextMenuItems()!\" [actionParam]=\"treeItem\" />\n</ng-template>\n\n<ng-template #checkboxOrOption let-classNames=\"classNames\">\n @if (showCheckOrOptionBox) {\n <a class=\"input-box\" tabindex=\"-1\" [class]=\"classNames\">\n <input\n class=\"form-check-input\"\n tabindex=\"-1\"\n [type]=\"getInputType()\"\n [indeterminate]=\"this.treeItem.checked === 'indeterminate' ? true : null\"\n [checked]=\"this.treeItem.checked === 'checked'\"\n [disabled]=\"!treeItem.selectable\"\n [attr.aria-label]=\"treeItem.label | translate\"\n (click)=\"onBoxClicked()\"\n />\n </a>\n }\n</ng-template>\n\n<ng-template\n #toggleTemplate\n let-biggerPaddingStart=\"biggerPaddingStart\"\n let-paddingStart=\"paddingStart\"\n let-toggleIcon=\"toggleIcon\"\n let-positionEnd=\"positionEnd\"\n>\n @let folderStateClass = getItemFolderStateClass();\n <a\n class=\"si-tree-stretch-center si-tree-view-item-toggle\"\n tabindex=\"-1\"\n [class.si-tree-view-item-toggle-end]=\"positionEnd\"\n [class.disabled]=\"!folderStateClass\"\n [style.margin-inline-start]=\"biggerPaddingStart\"\n [style.padding-inline-start]=\"paddingStart\"\n (click)=\"onItemFolderClicked()\"\n >\n @if (isExpanding) {\n <si-loading-spinner />\n } @else {\n <i aria-hidden=\"true\" [class]=\"`${toggleIcon} ${folderStateClass}`\"></i>\n }\n </a>\n</ng-template>\n\n<ng-template #spacerTemplate let-positionEnd=\"positionEnd\">\n <div\n class=\"si-tree-stretch-center si-tree-view-item-toggle\"\n [class.si-tree-view-item-toggle-end]=\"positionEnd\"\n >\n <i aria-hidden=\"true\" class=\"si-tree-view-item-icon si-tree-view-item-icon-spacer\"></i>\n </div>\n</ng-template>\n", styles: [":host{--si-tree-view-background: var(--element-base-1);--si-tree-view-border-color: var(--element-ui-4);--si-tree-view-icon-size: 1.25rem;--si-tree-view-padding-base-horizontal: 8px;--si-tree-view-padding-base-vertical: 8px;--si-tree-view-item-hover-color: var(--element-base-1-hover);--si-tree-view-item-select-color: var(--element-base-1-selected);--si-tree-view-item-line-height: 1.1428571429;--si-tree-view-item-min-height: 40px;--si-tree-view-item-object-data-field-1-color: var(--element-text-secondary)}:host-context(.tree-sm){--si-tree-view-item-min-height: 32px;--si-tree-view-padding-base-vertical: 0px}:host-context(.tree-xs){--si-tree-view-item-min-height: 24px;--si-tree-view-padding-base-vertical: 0px}:host{display:block}:host.cdk-drag-placeholder{block-size:0;margin-inline:8px;margin-block:0!important;opacity:1;min-block-size:0;position:relative;z-index:999}:host.cdk-drag-placeholder:after{position:absolute;inline-size:100%;block-size:2px;content:\"\";background-color:var(--element-focus-default)!important}:host.cdk-drag-placeholder>*{display:none}:host.cdk-drag:not(.cdk-drag-placeholder){transform:none!important}:host.cdk-drop-list-dragging *:hover,:host.cdk-drop-list-dragging .si-tree-view-item-end-icons,:host.cdk-drop-list-dragging .si-tree-view-item-context-menu-visible,:host .cdk-drop-list-dragging *:hover,:host .cdk-drop-list-dragging .si-tree-view-item-end-icons,:host .cdk-drop-list-dragging .si-tree-view-item-context-menu-visible{background-color:transparent!important}:host.cdk-drag-preview .si-tree-view-li.si-tree-view-li-item{padding-inline-start:8px!important;padding-inline-end:12px!important}:host.cdk-drag-preview .si-tree-view-li.si-tree-view-li-item .si-tree-view-item-toggle{padding-inline-start:12px!important}:host.cdk-drag-preview .si-tree-view-li.si-tree-view-li-item .badge{margin-inline-end:0}:host.cdk-drag-preview .si-tree-view-item-end-icons,:host.cdk-drag-preview .si-tree-view-li.si-tree-view-li-item{background-color:var(--element-base-3)!important}.si-tree-view-li.si-tree-view-li-item{position:relative}.si-tree-view-li.si-tree-view-li-item:hover,.si-tree-view-li.si-tree-view-li-item.si-tree-view-item-context-menu-visible,.si-tree-view-li.si-tree-view-li-item:hover .si-tree-view-item-end-icons,.si-tree-view-li.si-tree-view-li-item.si-tree-view-item-context-menu-visible .si-tree-view-item-end-icons{background-color:var(--si-tree-view-item-hover-color)}.si-tree-view-li.si-tree-view-li-item.si-tree-view-item-selected,.si-tree-view-li.si-tree-view-li-item.si-tree-view-item-selected .si-tree-view-item-end-icons{background-color:var(--si-tree-view-item-select-color)}.si-tree-view-li.si-tree-view-li-item.si-tree-view-item-not-selectable:hover,.si-tree-view-li.si-tree-view-li-item.si-tree-view-item-not-selectable .si-tree-view-item-end-icons{background-color:unset}.si-tree-view-li.si-tree-view-li-item.si-tree-view-item-not-selectable .si-tree-view-item:hover{cursor:default;background-color:unset}.si-tree-view-li.si-tree-view-li-item.si-tree-view-item-not-selectable .si-tree-view-item-dropdown-caret{cursor:pointer}.si-tree-view-li.si-tree-view-li-item.si-tree-view-item-not-selectable .si-tree-context-menu-btn>div[role=button]{cursor:pointer}.si-tree-view-li.si-tree-view-li-item.si-tree-view-item-not-selectable .si-tree-view-item-toggle-end{cursor:pointer}.si-tree-view-li.si-tree-view-li-item.si-tree-view-item-not-selectable .si-tree-view-item-toggle-end .si-tree-view-item-icon{color:var(--element-text-primary)}.si-tree-view-li.si-tree-view-li-item .si-tree-view-item-end-icons{background-color:var(--si-tree-view-background)}.si-tree-view-item-group,.si-tree-view-item{display:flex;align-items:center}.si-tree-stretch-center{align-self:stretch;display:flex;align-items:center;justify-content:center;margin:0;text-decoration:none}.si-tree-view-item-toggle.disabled .si-tree-view-item-icon{inline-size:24px}.si-tree-stretch-center+.si-tree-view-item-toggle-end .si-tree-view-item-icon{margin-inline-start:-4px}.si-tree-view-item-icon{padding-inline-end:4px}.si-tree-view-item-icon.si-tree-view-item-icon-spacer{box-sizing:content-box;inline-size:var(--si-tree-view-icon-size)}.si-tree-view-item-object-data,.si-tree-view-item-icon{margin-block:0;margin-inline:calc(var(--si-tree-view-padding-base-horizontal) / 4)}.si-tree-view-item{justify-content:space-between;min-block-size:var(--si-tree-view-item-min-height);padding-inline:var(--si-tree-view-padding-base-horizontal) calc(var(--si-tree-view-padding-base-horizontal) / 4)}.si-tree-view-item:hover{cursor:pointer}:host-context(.si-tree-view-flat) .si-tree-view-item{padding-inline-start:calc(var(--si-tree-view-padding-base-horizontal) / 2)}.si-tree-view-state-indicator{margin-block:0;margin-inline:calc(var(--si-tree-view-padding-base-horizontal) * .75);min-inline-size:6px;block-size:6px;border-radius:50%}.si-tree-view-state-indicator.si-tree-view-state-indicator-endmost{margin-inline-end:calc(var(--si-tree-view-padding-base-horizontal) * 1.75)}.si-tree-view-item-group{padding-block:calc(2 * var(--si-tree-view-padding-base-vertical));padding-inline:calc(var(--si-tree-view-padding-base-horizontal) / 2);cursor:default}.si-tree-view-item-group .si-tree-view-item-dropdown-caret:hover,.si-tree-view-item-group .si-tree-view-item-icon:hover{cursor:pointer}.si-tree-view-item-dropdown-caret,.si-tree-view-item-dropdown-caret:hover,.si-tree-view-item-icon,.si-tree-view-item-icon:hover{color:var(--element-text-primary);text-decoration:none;font-size:var(--si-tree-view-icon-size)}.si-tree-view-item-main{overflow-x:hidden}.si-tree-view-item-main>.badge{margin-block:auto}.si-tree-view-item-object-data>.si-tree-view-item-object-data-field-1{color:var(--si-tree-view-item-object-data-field-1-color)}:host.si-tree-ellipsis .si-tree-view-item-object-data{overflow-x:hidden}.si-tree-view-item-object-data>*{white-space:nowrap;margin-block:0;line-height:var(--si-tree-view-item-line-height)}:host.si-tree-ellipsis .si-tree-view-item-object-data>*{overflow:hidden;text-overflow:ellipsis}.si-tree-view-menu-btn{pointer-events:none}.si-tree-view-item-end-icons{block-size:calc(var(--si-tree-view-item-min-height) - 2 * (var(--element-button-focus-width) + var(--element-button-focus-overlay-width)))}.si-tree-view-item-end-icons.si-tree-view-item-end-icons-sticky{position:sticky;inset-inline-end:0}.input-box{margin-inline:2px 12px}.form-check-input{display:block}si-loading-spinner{--loading-spinner-size: var(--si-tree-view-icon-size)}\n"], dependencies: [{ kind: "directive", type: CdkContextMenuTrigger, selector: "[cdkContextMenuTriggerFor]", inputs: ["cdkContextMenuTriggerFor", "cdkContextMenuPosition", "cdkContextMenuTriggerData", "cdkContextMenuTriggerTransformOriginOn", "cdkContextMenuDisabled"], outputs: ["cdkContextMenuOpened", "cdkContextMenuClosed"], exportAs: ["cdkContextMenuTriggerFor"] }, { kind: "directive", type: CdkMenuTrigger, selector: "[cdkMenuTriggerFor]", inputs: ["cdkMenuTriggerFor", "cdkMenuPosition", "cdkMenuTriggerData", "cdkMenuTriggerTransformOriginOn"], outputs: ["cdkMenuOpened", "cdkMenuClosed"], exportAs: ["cdkMenuTriggerFor"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: SiIconComponent, selector: "si-icon", inputs: ["icon"] }, { kind: "component", type: SiLoadingSpinnerComponent, selector: "si-loading-spinner", inputs: ["isBlockingSpinner", "isSpinnerOverlay", "ariaLabel"] }, { kind: "component", type: SiMenuFactoryComponent, selector: "si-menu-factory", inputs: ["items", "actionParam"] }, { kind: "pipe", type: SiTranslatePipe, name: "translate" }] });
837
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.8", type: SiTreeViewItemComponent, isStandalone: true, selector: "si-tree-view-item", host: { attributes: { "role": "treeitem" }, listeners: { "contextmenu": "onContextMenu($event)", "keydown": "onKeydown($event)" }, properties: { "attr.tabindex": "treeItemContext.record.currentIndex === treeViewComponent.activeIndex ? 0 : -1", "class.focus-none": "true", "class.si-tree-ellipsis": "treeViewComponent.horizontalScrolling()", "class.si-tree-view-top-level-item": "!treeViewComponent.compactMode() && (treeViewComponent.flatTree() || (treeItem.level ?? 0) < 1)", "attr.aria-haspopup": "isContextMenuButtonVisible()", "attr.aria-level": "this.ariaLevel", "attr.aria-setsize": "this.ariaSetsize", "attr.aria-posinset": "this.ariaPosinset", "attr.aria-selected": "this.ariaSelected", "attr.aria-checked": "this.ariaChecked", "attr.aria-expanded": "this.ariaExpanded" } }, viewQueries: [{ propertyName: "menuTrigger", first: true, predicate: CdkMenuTrigger, descendants: true, isSignal: true }], ngImport: i0, template: "@if (!isGroupedItem) {\n <div\n #contextMenuTrigger=\"cdkContextMenuTriggerFor\"\n class=\"si-tree-view-li si-tree-view-li-item focus-direct-sub-inside\"\n [class.si-tree-view-item-context-menu-visible]=\"\n !!(contextMenuTrigger.isOpen() || menuTrigger()?.isOpen())\n \"\n [class.si-tree-view-item-active]=\"treeItem.active\"\n [class.si-tree-view-item-selected]=\"enableSelection() && treeItem.selected\"\n [class.si-tree-view-item-not-selectable]=\"!treeItem.selectable\"\n [style.padding-inline-start]=\"biggerPaddingStart\"\n [cdkContextMenuTriggerFor]=\"contextMenu\"\n [cdkContextMenuDisabled]=\"!isContextMenuButtonVisible() || !treeItem.selectable\"\n (cdkContextMenuOpened)=\"onToggleContextMenuOpen()\"\n (cdkContextMenuClosed)=\"onToggleContextMenuClose()\"\n >\n <div class=\"si-tree-view-item\" (mousedown)=\"onMouseDownTreeItem($event)\">\n @if (showFolderStateStart && treeItem.state !== 'leaf') {\n <ng-container\n [ngTemplateOutlet]=\"toggleTemplate\"\n [ngTemplateOutletContext]=\"{\n biggerPaddingStart: '-' + biggerPaddingStart,\n paddingStart: paddingStart,\n toggleIcon: 'si-tree-view-item-dropdown-caret'\n }\"\n />\n }\n <ng-container [ngTemplateOutlet]=\"checkboxOrOption\" />\n\n <div\n class=\"si-tree-view-item-main d-flex flex-grow-1 align-self-stretch grab-area\"\n (click)=\"onItemClicked($event)\"\n >\n @if (showIcon()) {\n <div class=\"si-tree-stretch-center\">\n <si-icon class=\"si-tree-view-item-icon\" [icon]=\"treeItem.icon!\" />\n </div>\n }\n <div\n class=\"si-tree-view-item-object-data d-flex flex-column justify-content-center overflow-hidden\"\n >\n @if (!templates().length) {\n <ng-content select=\":not(si-tree-view-item):not([dragPreview])\"\n ><div class=\"text-truncate\" [class.si-h5]=\"enableSelection() && treeItem.selected\">{{\n treeItem.label | translate\n }}</div></ng-content\n >\n } @else {\n <div>\n <ng-container\n *ngTemplateOutlet=\"\n renderMatchingTemplate(treeItem);\n context: { $implicit: treeItem }\n \"\n />\n </div>\n }\n @if (enableDataField1() && treeItem.dataField1) {\n <p class=\"si-tree-view-item-object-data-field-1 text-truncate\">{{\n treeItem.dataField1 | translate\n }}</p>\n }\n @if (enableDataField2() && treeItem.dataField2) {\n <p class=\"si-tree-view-item-object-data-field-2 text-truncate\">{{\n treeItem.dataField2 | translate\n }}</p>\n }\n </div>\n @if (treeItem.badge) {\n <span class=\"badge flex-shrink-0\" [class]=\"`bg-${treeItem.badgeColor || 'default'}`\">{{\n treeItem.badge\n }}</span>\n }\n </div>\n <div\n class=\"si-tree-view-item-end-icons d-flex ms-2 align-items-center\"\n [class.si-tree-view-item-end-icons-sticky]=\"stickyEndItems()\"\n >\n @if (showStateIndicator() && getStateIndicatorColor()) {\n <div\n class=\"si-tree-view-state-indicator\"\n [style.background-color]=\"getStateIndicatorColor()\"\n [class.si-tree-view-state-indicator-endmost]=\"\n !enableContextMenuButton() && !showFolderStateEnd\n \"\n ></div>\n }\n @if (isContextMenuButtonVisible()) {\n <div class=\"si-tree-stretch-center si-tree-context-menu-btn\">\n <div\n #menuTrigger=\"cdkMenuTriggerFor\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n [cdkMenuTriggerFor]=\"contextMenu\"\n (cdkMenuOpened)=\"onToggleContextMenuOpen()\"\n (cdkMenuClosed)=\"onToggleContextMenuClose()\"\n >\n <i\n aria-hidden=\"true\"\n class=\"si-tree-view-item-icon si-tree-view-menu-btn\"\n [class]=\"icons().itemMenu\"\n ></i>\n </div>\n </div>\n }\n @if (showFolderStateEnd) {\n <ng-container\n [ngTemplateOutlet]=\"treeItem.state === 'leaf' ? spacerTemplate : toggleTemplate\"\n [ngTemplateOutletContext]=\"{\n toggleIcon: 'si-tree-view-item-icon',\n positionEnd: true\n }\"\n />\n }\n </div>\n </div>\n </div>\n} @else {\n <div class=\"si-tree-view-li focus-direct-sub-inside\">\n <div class=\"si-tree-view-item-group\">\n @if (showFolderStateStart) {\n <ng-container\n [ngTemplateOutlet]=\"toggleTemplate\"\n [ngTemplateOutletContext]=\"{\n toggleIcon: 'si-tree-view-item-icon'\n }\"\n />\n }\n <ng-container\n [ngTemplateOutlet]=\"checkboxOrOption\"\n [ngTemplateOutletContext]=\"{ classNames: 'form-check' }\"\n />\n\n <p class=\"mb-0\">{{ treeItem.label | translate }}</p>\n @if (showFolderStateEnd) {\n <ng-container\n [ngTemplateOutlet]=\"toggleTemplate\"\n [ngTemplateOutletContext]=\"{\n toggleIcon: 'si-tree-view-item-icon'\n }\"\n />\n }\n </div>\n </div>\n}\n\n<ng-template #contextMenu>\n <si-menu-factory class=\"me-5\" [items]=\"contextMenuItems()!\" [actionParam]=\"treeItem\" />\n</ng-template>\n\n<ng-template #checkboxOrOption let-classNames=\"classNames\">\n @if (showCheckOrOptionBox) {\n <a class=\"input-box\" tabindex=\"-1\" [class]=\"classNames\">\n <input\n class=\"form-check-input\"\n tabindex=\"-1\"\n [type]=\"getInputType()\"\n [indeterminate]=\"this.treeItem.checked === 'indeterminate' ? true : null\"\n [checked]=\"this.treeItem.checked === 'checked'\"\n [disabled]=\"!treeItem.selectable\"\n [attr.aria-label]=\"treeItem.label | translate\"\n (click)=\"onBoxClicked()\"\n />\n </a>\n }\n</ng-template>\n\n<ng-template\n #toggleTemplate\n let-biggerPaddingStart=\"biggerPaddingStart\"\n let-paddingStart=\"paddingStart\"\n let-toggleIcon=\"toggleIcon\"\n let-positionEnd=\"positionEnd\"\n>\n @let folderStateClass = getItemFolderStateClass();\n <a\n class=\"si-tree-stretch-center si-tree-view-item-toggle\"\n tabindex=\"-1\"\n [class.si-tree-view-item-toggle-end]=\"positionEnd\"\n [class.disabled]=\"!folderStateClass\"\n [style.margin-inline-start]=\"biggerPaddingStart\"\n [style.padding-inline-start]=\"paddingStart\"\n (click)=\"onItemFolderClicked()\"\n >\n @if (isExpanding) {\n <si-loading-spinner />\n } @else {\n <i aria-hidden=\"true\" [class]=\"`${toggleIcon} ${folderStateClass}`\"></i>\n }\n </a>\n</ng-template>\n\n<ng-template #spacerTemplate let-positionEnd=\"positionEnd\">\n <div\n class=\"si-tree-stretch-center si-tree-view-item-toggle\"\n [class.si-tree-view-item-toggle-end]=\"positionEnd\"\n >\n <i aria-hidden=\"true\" class=\"si-tree-view-item-icon si-tree-view-item-icon-spacer\"></i>\n </div>\n</ng-template>\n", styles: [":host{--si-tree-view-background: var(--element-base-1);--si-tree-view-border-color: var(--element-ui-4);--si-tree-view-icon-size: 1.25rem;--si-tree-view-padding-base-horizontal: 8px;--si-tree-view-padding-base-vertical: 8px;--si-tree-view-item-hover-color: var(--element-base-1-hover);--si-tree-view-item-select-color: var(--element-base-1-selected);--si-tree-view-item-line-height: 1.1428571429;--si-tree-view-item-min-height: 40px;--si-tree-view-item-object-data-field-1-color: var(--element-text-secondary)}:host-context(.tree-sm){--si-tree-view-item-min-height: 32px;--si-tree-view-padding-base-vertical: 0px}:host-context(.tree-xs){--si-tree-view-item-min-height: 24px;--si-tree-view-padding-base-vertical: 0px}:host{display:block}:host.cdk-drag-placeholder{block-size:0;margin-inline:8px;margin-block:0!important;opacity:1;min-block-size:0;position:relative;z-index:999}:host.cdk-drag-placeholder:after{position:absolute;inline-size:100%;block-size:2px;content:\"\";background-color:var(--element-focus-default)!important}:host.cdk-drag-placeholder>*{display:none}:host.cdk-drag:not(.cdk-drag-placeholder){transform:none!important}:host.cdk-drop-list-dragging *:hover,:host.cdk-drop-list-dragging .si-tree-view-item-end-icons,:host.cdk-drop-list-dragging .si-tree-view-item-context-menu-visible,:host .cdk-drop-list-dragging *:hover,:host .cdk-drop-list-dragging .si-tree-view-item-end-icons,:host .cdk-drop-list-dragging .si-tree-view-item-context-menu-visible{background-color:transparent!important}:host.cdk-drag-preview .si-tree-view-li.si-tree-view-li-item{padding-inline-start:8px!important;padding-inline-end:12px!important}:host.cdk-drag-preview .si-tree-view-li.si-tree-view-li-item .si-tree-view-item-toggle{padding-inline-start:12px!important}:host.cdk-drag-preview .si-tree-view-li.si-tree-view-li-item .badge{margin-inline-end:0}:host.cdk-drag-preview .si-tree-view-item-end-icons,:host.cdk-drag-preview .si-tree-view-li.si-tree-view-li-item{background-color:var(--element-base-3)!important}.si-tree-view-li.si-tree-view-li-item{position:relative}.si-tree-view-li.si-tree-view-li-item:hover,.si-tree-view-li.si-tree-view-li-item.si-tree-view-item-context-menu-visible,.si-tree-view-li.si-tree-view-li-item:hover .si-tree-view-item-end-icons,.si-tree-view-li.si-tree-view-li-item.si-tree-view-item-context-menu-visible .si-tree-view-item-end-icons{background-color:var(--si-tree-view-item-hover-color)}.si-tree-view-li.si-tree-view-li-item.si-tree-view-item-selected,.si-tree-view-li.si-tree-view-li-item.si-tree-view-item-selected .si-tree-view-item-end-icons{background-color:var(--si-tree-view-item-select-color)}.si-tree-view-li.si-tree-view-li-item.si-tree-view-item-not-selectable:hover,.si-tree-view-li.si-tree-view-li-item.si-tree-view-item-not-selectable .si-tree-view-item-end-icons{background-color:unset}.si-tree-view-li.si-tree-view-li-item.si-tree-view-item-not-selectable .si-tree-view-item:hover{cursor:default;background-color:unset}.si-tree-view-li.si-tree-view-li-item.si-tree-view-item-not-selectable .si-tree-view-item-dropdown-caret{cursor:pointer}.si-tree-view-li.si-tree-view-li-item.si-tree-view-item-not-selectable .si-tree-context-menu-btn>div[role=button]{cursor:pointer}.si-tree-view-li.si-tree-view-li-item.si-tree-view-item-not-selectable .si-tree-view-item-toggle-end{cursor:pointer}.si-tree-view-li.si-tree-view-li-item.si-tree-view-item-not-selectable .si-tree-view-item-toggle-end .si-tree-view-item-icon{color:var(--element-text-primary)}.si-tree-view-li.si-tree-view-li-item .si-tree-view-item-end-icons{background-color:var(--si-tree-view-background)}.si-tree-view-item-group,.si-tree-view-item{display:flex;align-items:center}.si-tree-stretch-center{align-self:stretch;display:flex;align-items:center;justify-content:center;margin:0;text-decoration:none}.si-tree-view-item-toggle.disabled .si-tree-view-item-icon{inline-size:24px}.si-tree-stretch-center+.si-tree-view-item-toggle-end .si-tree-view-item-icon{margin-inline-start:-4px}.si-tree-view-item-icon{padding-inline-end:4px}.si-tree-view-item-icon.si-tree-view-item-icon-spacer{box-sizing:content-box;inline-size:var(--si-tree-view-icon-size)}.si-tree-view-item-object-data,.si-tree-view-item-icon{margin-block:0;margin-inline:calc(var(--si-tree-view-padding-base-horizontal) / 4)}.si-tree-view-item{justify-content:space-between;min-block-size:var(--si-tree-view-item-min-height);padding-inline:var(--si-tree-view-padding-base-horizontal) calc(var(--si-tree-view-padding-base-horizontal) / 4)}.si-tree-view-item:hover{cursor:pointer}:host-context(.si-tree-view-flat) .si-tree-view-item{padding-inline-start:calc(var(--si-tree-view-padding-base-horizontal) / 2)}.si-tree-view-state-indicator{margin-block:0;margin-inline:calc(var(--si-tree-view-padding-base-horizontal) * .75);min-inline-size:.375rem;block-size:.375rem;border-radius:50%}.si-tree-view-state-indicator.si-tree-view-state-indicator-endmost{margin-inline-end:calc(var(--si-tree-view-padding-base-horizontal) * 1.75)}.si-tree-view-item-group{padding-block:calc(2 * var(--si-tree-view-padding-base-vertical));padding-inline:calc(var(--si-tree-view-padding-base-horizontal) / 2);cursor:default}.si-tree-view-item-group .si-tree-view-item-dropdown-caret:hover,.si-tree-view-item-group .si-tree-view-item-icon:hover{cursor:pointer}.si-tree-view-item-dropdown-caret,.si-tree-view-item-dropdown-caret:hover,.si-tree-view-item-icon,.si-tree-view-item-icon:hover{color:var(--element-text-primary);text-decoration:none;font-size:var(--si-tree-view-icon-size)}.si-tree-view-item-main{overflow-x:hidden}.si-tree-view-item-main>.badge{margin-block:auto}.si-tree-view-item-object-data>.si-tree-view-item-object-data-field-1{color:var(--si-tree-view-item-object-data-field-1-color)}:host.si-tree-ellipsis .si-tree-view-item-object-data{overflow-x:hidden}.si-tree-view-item-object-data>*{white-space:nowrap;margin-block:0;line-height:var(--si-tree-view-item-line-height)}:host.si-tree-ellipsis .si-tree-view-item-object-data>*{overflow:hidden;text-overflow:ellipsis}.si-tree-view-menu-btn{pointer-events:none}.si-tree-view-item-end-icons{block-size:calc(var(--si-tree-view-item-min-height) - 2 * (var(--element-button-focus-width) + var(--element-button-focus-overlay-width)))}.si-tree-view-item-end-icons.si-tree-view-item-end-icons-sticky{position:sticky;inset-inline-end:0}.input-box{margin-inline:2px 12px}.form-check-input{display:block}si-loading-spinner{--loading-spinner-size: var(--si-tree-view-icon-size)}\n"], dependencies: [{ kind: "directive", type: CdkContextMenuTrigger, selector: "[cdkContextMenuTriggerFor]", inputs: ["cdkContextMenuTriggerFor", "cdkContextMenuPosition", "cdkContextMenuTriggerData", "cdkContextMenuTriggerTransformOriginOn", "cdkContextMenuDisabled"], outputs: ["cdkContextMenuOpened", "cdkContextMenuClosed"], exportAs: ["cdkContextMenuTriggerFor"] }, { kind: "directive", type: CdkMenuTrigger, selector: "[cdkMenuTriggerFor]", inputs: ["cdkMenuTriggerFor", "cdkMenuPosition", "cdkMenuTriggerData", "cdkMenuTriggerTransformOriginOn"], outputs: ["cdkMenuOpened", "cdkMenuClosed"], exportAs: ["cdkMenuTriggerFor"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: SiIconComponent, selector: "si-icon", inputs: ["icon"] }, { kind: "component", type: SiLoadingSpinnerComponent, selector: "si-loading-spinner", inputs: ["isBlockingSpinner", "isSpinnerOverlay", "ariaLabel"] }, { kind: "component", type: SiMenuFactoryComponent, selector: "si-menu-factory", inputs: ["items", "actionParam"] }, { kind: "pipe", type: SiTranslatePipe, name: "translate" }] });
836
838
  }
837
839
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: SiTreeViewItemComponent, decorators: [{
838
840
  type: Component,
@@ -853,7 +855,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImpor
853
855
  '[attr.aria-haspopup]': 'isContextMenuButtonVisible()',
854
856
  '(contextmenu)': 'onContextMenu($event)',
855
857
  '(keydown)': 'onKeydown($event)'
856
- }, template: "@if (!isGroupedItem) {\n <div\n #contextMenuTrigger=\"cdkContextMenuTriggerFor\"\n class=\"si-tree-view-li si-tree-view-li-item focus-direct-sub-inside\"\n [class.si-tree-view-item-context-menu-visible]=\"\n !!(contextMenuTrigger.isOpen() || menuTrigger()?.isOpen())\n \"\n [class.si-tree-view-item-active]=\"treeItem.active\"\n [class.si-tree-view-item-selected]=\"enableSelection() && treeItem.selected\"\n [class.si-tree-view-item-not-selectable]=\"!treeItem.selectable\"\n [style.padding-inline-start]=\"biggerPaddingStart\"\n [cdkContextMenuTriggerFor]=\"contextMenu\"\n [cdkContextMenuDisabled]=\"!isContextMenuButtonVisible() || !treeItem.selectable\"\n (cdkContextMenuOpened)=\"onToggleContextMenuOpen()\"\n (cdkContextMenuClosed)=\"onToggleContextMenuClose()\"\n >\n <div class=\"si-tree-view-item\" (mousedown)=\"onMouseDownTreeItem($event)\">\n @if (showFolderStateStart && treeItem.state !== 'leaf') {\n <ng-container\n [ngTemplateOutlet]=\"toggleTemplate\"\n [ngTemplateOutletContext]=\"{\n biggerPaddingStart: '-' + biggerPaddingStart,\n paddingStart: paddingStart,\n toggleIcon: 'si-tree-view-item-dropdown-caret'\n }\"\n />\n }\n <ng-container [ngTemplateOutlet]=\"checkboxOrOption\" />\n\n <div\n class=\"si-tree-view-item-main d-flex flex-grow-1 align-self-stretch grab-area\"\n (click)=\"onItemClicked($event)\"\n >\n @if (showIcon()) {\n <div class=\"si-tree-stretch-center\">\n <si-icon class=\"si-tree-view-item-icon\" [icon]=\"treeItem.icon!\" />\n </div>\n }\n <div\n class=\"si-tree-view-item-object-data d-flex flex-column justify-content-center overflow-hidden\"\n >\n @if (!templates().length) {\n <ng-content select=\":not(si-tree-view-item):not([dragPreview])\"\n ><div class=\"text-truncate\" [class.si-h5]=\"enableSelection() && treeItem.selected\">{{\n treeItem.label | translate\n }}</div></ng-content\n >\n } @else {\n <div>\n <ng-container\n *ngTemplateOutlet=\"\n renderMatchingTemplate(treeItem);\n context: { $implicit: treeItem }\n \"\n />\n </div>\n }\n @if (enableDataField1() && treeItem.dataField1) {\n <p class=\"si-tree-view-item-object-data-field-1 text-truncate\">{{\n treeItem.dataField1 | translate\n }}</p>\n }\n @if (enableDataField2() && treeItem.dataField2) {\n <p class=\"si-tree-view-item-object-data-field-2 text-truncate\">{{\n treeItem.dataField2 | translate\n }}</p>\n }\n </div>\n @if (treeItem.badge) {\n <span class=\"badge flex-shrink-0\" [class]=\"`bg-${treeItem.badgeColor || 'default'}`\">{{\n treeItem.badge\n }}</span>\n }\n </div>\n <div\n class=\"si-tree-view-item-end-icons d-flex ms-2 align-items-center\"\n [class.si-tree-view-item-end-icons-sticky]=\"stickyEndItems()\"\n >\n @if (showStateIndicator() && getStateIndicatorColor()) {\n <div\n class=\"si-tree-view-state-indicator\"\n [style.background-color]=\"getStateIndicatorColor()\"\n [class.si-tree-view-state-indicator-endmost]=\"\n !enableContextMenuButton() && !showFolderStateEnd\n \"\n ></div>\n }\n @if (isContextMenuButtonVisible()) {\n <div class=\"si-tree-stretch-center si-tree-context-menu-btn\">\n <div\n #menuTrigger=\"cdkMenuTriggerFor\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n [cdkMenuTriggerFor]=\"contextMenu\"\n (cdkMenuOpened)=\"onToggleContextMenuOpen()\"\n (cdkMenuClosed)=\"onToggleContextMenuClose()\"\n >\n <i\n aria-hidden=\"true\"\n class=\"si-tree-view-item-icon si-tree-view-menu-btn\"\n [class]=\"icons().itemMenu\"\n ></i>\n </div>\n </div>\n }\n @if (showFolderStateEnd) {\n <ng-container\n [ngTemplateOutlet]=\"treeItem.state === 'leaf' ? spacerTemplate : toggleTemplate\"\n [ngTemplateOutletContext]=\"{\n toggleIcon: 'si-tree-view-item-icon',\n positionEnd: true\n }\"\n />\n }\n </div>\n </div>\n </div>\n} @else {\n <div class=\"si-tree-view-li focus-direct-sub-inside\">\n <div class=\"si-tree-view-item-group\">\n @if (showFolderStateStart) {\n <ng-container\n [ngTemplateOutlet]=\"toggleTemplate\"\n [ngTemplateOutletContext]=\"{\n toggleIcon: 'si-tree-view-item-icon'\n }\"\n />\n }\n <ng-container\n [ngTemplateOutlet]=\"checkboxOrOption\"\n [ngTemplateOutletContext]=\"{ classNames: 'form-check' }\"\n />\n\n <p class=\"mb-0\">{{ treeItem.label | translate }}</p>\n @if (showFolderStateEnd) {\n <ng-container\n [ngTemplateOutlet]=\"toggleTemplate\"\n [ngTemplateOutletContext]=\"{\n toggleIcon: 'si-tree-view-item-icon'\n }\"\n />\n }\n </div>\n </div>\n}\n\n<ng-template #contextMenu>\n <si-menu-factory class=\"me-5\" [items]=\"contextMenuItems()!\" [actionParam]=\"treeItem\" />\n</ng-template>\n\n<ng-template #checkboxOrOption let-classNames=\"classNames\">\n @if (showCheckOrOptionBox) {\n <a class=\"input-box\" tabindex=\"-1\" [class]=\"classNames\">\n <input\n class=\"form-check-input\"\n tabindex=\"-1\"\n [type]=\"getInputType()\"\n [indeterminate]=\"this.treeItem.checked === 'indeterminate' ? true : null\"\n [checked]=\"this.treeItem.checked === 'checked'\"\n [disabled]=\"!treeItem.selectable\"\n [attr.aria-label]=\"treeItem.label | translate\"\n (click)=\"onBoxClicked()\"\n />\n </a>\n }\n</ng-template>\n\n<ng-template\n #toggleTemplate\n let-biggerPaddingStart=\"biggerPaddingStart\"\n let-paddingStart=\"paddingStart\"\n let-toggleIcon=\"toggleIcon\"\n let-positionEnd=\"positionEnd\"\n>\n @let folderStateClass = getItemFolderStateClass();\n <a\n class=\"si-tree-stretch-center si-tree-view-item-toggle\"\n tabindex=\"-1\"\n [class.si-tree-view-item-toggle-end]=\"positionEnd\"\n [class.disabled]=\"!folderStateClass\"\n [style.margin-inline-start]=\"biggerPaddingStart\"\n [style.padding-inline-start]=\"paddingStart\"\n (click)=\"onItemFolderClicked()\"\n >\n @if (isExpanding) {\n <si-loading-spinner />\n } @else {\n <i aria-hidden=\"true\" [class]=\"`${toggleIcon} ${folderStateClass}`\"></i>\n }\n </a>\n</ng-template>\n\n<ng-template #spacerTemplate let-positionEnd=\"positionEnd\">\n <div\n class=\"si-tree-stretch-center si-tree-view-item-toggle\"\n [class.si-tree-view-item-toggle-end]=\"positionEnd\"\n >\n <i aria-hidden=\"true\" class=\"si-tree-view-item-icon si-tree-view-item-icon-spacer\"></i>\n </div>\n</ng-template>\n", styles: [":host{--si-tree-view-background: var(--element-base-1);--si-tree-view-border-color: var(--element-ui-4);--si-tree-view-icon-size: 1.25rem;--si-tree-view-padding-base-horizontal: 8px;--si-tree-view-padding-base-vertical: 8px;--si-tree-view-item-hover-color: var(--element-base-1-hover);--si-tree-view-item-select-color: var(--element-base-1-selected);--si-tree-view-item-line-height: 1.1428571429;--si-tree-view-item-min-height: 40px;--si-tree-view-item-object-data-field-1-color: var(--element-text-secondary)}:host-context(.tree-sm){--si-tree-view-item-min-height: 32px;--si-tree-view-padding-base-vertical: 0px}:host-context(.tree-xs){--si-tree-view-item-min-height: 24px;--si-tree-view-padding-base-vertical: 0px}:host{display:block}:host.cdk-drag-placeholder{block-size:0;margin-inline:8px;margin-block:0!important;opacity:1;min-block-size:0;position:relative;z-index:999}:host.cdk-drag-placeholder:after{position:absolute;inline-size:100%;block-size:2px;content:\"\";background-color:var(--element-focus-default)!important}:host.cdk-drag-placeholder>*{display:none}:host.cdk-drag:not(.cdk-drag-placeholder){transform:none!important}:host.cdk-drop-list-dragging *:hover,:host.cdk-drop-list-dragging .si-tree-view-item-end-icons,:host.cdk-drop-list-dragging .si-tree-view-item-context-menu-visible,:host .cdk-drop-list-dragging *:hover,:host .cdk-drop-list-dragging .si-tree-view-item-end-icons,:host .cdk-drop-list-dragging .si-tree-view-item-context-menu-visible{background-color:transparent!important}:host.cdk-drag-preview .si-tree-view-li.si-tree-view-li-item{padding-inline-start:8px!important;padding-inline-end:12px!important}:host.cdk-drag-preview .si-tree-view-li.si-tree-view-li-item .si-tree-view-item-toggle{padding-inline-start:12px!important}:host.cdk-drag-preview .si-tree-view-li.si-tree-view-li-item .badge{margin-inline-end:0}:host.cdk-drag-preview .si-tree-view-item-end-icons,:host.cdk-drag-preview .si-tree-view-li.si-tree-view-li-item{background-color:var(--element-base-3)!important}.si-tree-view-li.si-tree-view-li-item{position:relative}.si-tree-view-li.si-tree-view-li-item:hover,.si-tree-view-li.si-tree-view-li-item.si-tree-view-item-context-menu-visible,.si-tree-view-li.si-tree-view-li-item:hover .si-tree-view-item-end-icons,.si-tree-view-li.si-tree-view-li-item.si-tree-view-item-context-menu-visible .si-tree-view-item-end-icons{background-color:var(--si-tree-view-item-hover-color)}.si-tree-view-li.si-tree-view-li-item.si-tree-view-item-selected,.si-tree-view-li.si-tree-view-li-item.si-tree-view-item-selected .si-tree-view-item-end-icons{background-color:var(--si-tree-view-item-select-color)}.si-tree-view-li.si-tree-view-li-item.si-tree-view-item-not-selectable:hover,.si-tree-view-li.si-tree-view-li-item.si-tree-view-item-not-selectable .si-tree-view-item-end-icons{background-color:unset}.si-tree-view-li.si-tree-view-li-item.si-tree-view-item-not-selectable .si-tree-view-item:hover{cursor:default;background-color:unset}.si-tree-view-li.si-tree-view-li-item.si-tree-view-item-not-selectable .si-tree-view-item-dropdown-caret{cursor:pointer}.si-tree-view-li.si-tree-view-li-item.si-tree-view-item-not-selectable .si-tree-context-menu-btn>div[role=button]{cursor:pointer}.si-tree-view-li.si-tree-view-li-item.si-tree-view-item-not-selectable .si-tree-view-item-toggle-end{cursor:pointer}.si-tree-view-li.si-tree-view-li-item.si-tree-view-item-not-selectable .si-tree-view-item-toggle-end .si-tree-view-item-icon{color:var(--element-text-primary)}.si-tree-view-li.si-tree-view-li-item .si-tree-view-item-end-icons{background-color:var(--si-tree-view-background)}.si-tree-view-item-group,.si-tree-view-item{display:flex;align-items:center}.si-tree-stretch-center{align-self:stretch;display:flex;align-items:center;justify-content:center;margin:0;text-decoration:none}.si-tree-view-item-toggle.disabled .si-tree-view-item-icon{inline-size:24px}.si-tree-stretch-center+.si-tree-view-item-toggle-end .si-tree-view-item-icon{margin-inline-start:-4px}.si-tree-view-item-icon{padding-inline-end:4px}.si-tree-view-item-icon.si-tree-view-item-icon-spacer{box-sizing:content-box;inline-size:var(--si-tree-view-icon-size)}.si-tree-view-item-object-data,.si-tree-view-item-icon{margin-block:0;margin-inline:calc(var(--si-tree-view-padding-base-horizontal) / 4)}.si-tree-view-item{justify-content:space-between;min-block-size:var(--si-tree-view-item-min-height);padding-inline:var(--si-tree-view-padding-base-horizontal) calc(var(--si-tree-view-padding-base-horizontal) / 4)}.si-tree-view-item:hover{cursor:pointer}:host-context(.si-tree-view-flat) .si-tree-view-item{padding-inline-start:calc(var(--si-tree-view-padding-base-horizontal) / 2)}.si-tree-view-state-indicator{margin-block:0;margin-inline:calc(var(--si-tree-view-padding-base-horizontal) * .75);min-inline-size:6px;block-size:6px;border-radius:50%}.si-tree-view-state-indicator.si-tree-view-state-indicator-endmost{margin-inline-end:calc(var(--si-tree-view-padding-base-horizontal) * 1.75)}.si-tree-view-item-group{padding-block:calc(2 * var(--si-tree-view-padding-base-vertical));padding-inline:calc(var(--si-tree-view-padding-base-horizontal) / 2);cursor:default}.si-tree-view-item-group .si-tree-view-item-dropdown-caret:hover,.si-tree-view-item-group .si-tree-view-item-icon:hover{cursor:pointer}.si-tree-view-item-dropdown-caret,.si-tree-view-item-dropdown-caret:hover,.si-tree-view-item-icon,.si-tree-view-item-icon:hover{color:var(--element-text-primary);text-decoration:none;font-size:var(--si-tree-view-icon-size)}.si-tree-view-item-main{overflow-x:hidden}.si-tree-view-item-main>.badge{margin-block:auto}.si-tree-view-item-object-data>.si-tree-view-item-object-data-field-1{color:var(--si-tree-view-item-object-data-field-1-color)}:host.si-tree-ellipsis .si-tree-view-item-object-data{overflow-x:hidden}.si-tree-view-item-object-data>*{white-space:nowrap;margin-block:0;line-height:var(--si-tree-view-item-line-height)}:host.si-tree-ellipsis .si-tree-view-item-object-data>*{overflow:hidden;text-overflow:ellipsis}.si-tree-view-menu-btn{pointer-events:none}.si-tree-view-item-end-icons{block-size:calc(var(--si-tree-view-item-min-height) - 2 * (var(--element-button-focus-width) + var(--element-button-focus-overlay-width)))}.si-tree-view-item-end-icons.si-tree-view-item-end-icons-sticky{position:sticky;inset-inline-end:0}.input-box{margin-inline:2px 12px}.form-check-input{display:block}si-loading-spinner{--loading-spinner-size: var(--si-tree-view-icon-size)}\n"] }]
858
+ }, template: "@if (!isGroupedItem) {\n <div\n #contextMenuTrigger=\"cdkContextMenuTriggerFor\"\n class=\"si-tree-view-li si-tree-view-li-item focus-direct-sub-inside\"\n [class.si-tree-view-item-context-menu-visible]=\"\n !!(contextMenuTrigger.isOpen() || menuTrigger()?.isOpen())\n \"\n [class.si-tree-view-item-active]=\"treeItem.active\"\n [class.si-tree-view-item-selected]=\"enableSelection() && treeItem.selected\"\n [class.si-tree-view-item-not-selectable]=\"!treeItem.selectable\"\n [style.padding-inline-start]=\"biggerPaddingStart\"\n [cdkContextMenuTriggerFor]=\"contextMenu\"\n [cdkContextMenuDisabled]=\"!isContextMenuButtonVisible() || !treeItem.selectable\"\n (cdkContextMenuOpened)=\"onToggleContextMenuOpen()\"\n (cdkContextMenuClosed)=\"onToggleContextMenuClose()\"\n >\n <div class=\"si-tree-view-item\" (mousedown)=\"onMouseDownTreeItem($event)\">\n @if (showFolderStateStart && treeItem.state !== 'leaf') {\n <ng-container\n [ngTemplateOutlet]=\"toggleTemplate\"\n [ngTemplateOutletContext]=\"{\n biggerPaddingStart: '-' + biggerPaddingStart,\n paddingStart: paddingStart,\n toggleIcon: 'si-tree-view-item-dropdown-caret'\n }\"\n />\n }\n <ng-container [ngTemplateOutlet]=\"checkboxOrOption\" />\n\n <div\n class=\"si-tree-view-item-main d-flex flex-grow-1 align-self-stretch grab-area\"\n (click)=\"onItemClicked($event)\"\n >\n @if (showIcon()) {\n <div class=\"si-tree-stretch-center\">\n <si-icon class=\"si-tree-view-item-icon\" [icon]=\"treeItem.icon!\" />\n </div>\n }\n <div\n class=\"si-tree-view-item-object-data d-flex flex-column justify-content-center overflow-hidden\"\n >\n @if (!templates().length) {\n <ng-content select=\":not(si-tree-view-item):not([dragPreview])\"\n ><div class=\"text-truncate\" [class.si-h5]=\"enableSelection() && treeItem.selected\">{{\n treeItem.label | translate\n }}</div></ng-content\n >\n } @else {\n <div>\n <ng-container\n *ngTemplateOutlet=\"\n renderMatchingTemplate(treeItem);\n context: { $implicit: treeItem }\n \"\n />\n </div>\n }\n @if (enableDataField1() && treeItem.dataField1) {\n <p class=\"si-tree-view-item-object-data-field-1 text-truncate\">{{\n treeItem.dataField1 | translate\n }}</p>\n }\n @if (enableDataField2() && treeItem.dataField2) {\n <p class=\"si-tree-view-item-object-data-field-2 text-truncate\">{{\n treeItem.dataField2 | translate\n }}</p>\n }\n </div>\n @if (treeItem.badge) {\n <span class=\"badge flex-shrink-0\" [class]=\"`bg-${treeItem.badgeColor || 'default'}`\">{{\n treeItem.badge\n }}</span>\n }\n </div>\n <div\n class=\"si-tree-view-item-end-icons d-flex ms-2 align-items-center\"\n [class.si-tree-view-item-end-icons-sticky]=\"stickyEndItems()\"\n >\n @if (showStateIndicator() && getStateIndicatorColor()) {\n <div\n class=\"si-tree-view-state-indicator\"\n [style.background-color]=\"getStateIndicatorColor()\"\n [class.si-tree-view-state-indicator-endmost]=\"\n !enableContextMenuButton() && !showFolderStateEnd\n \"\n ></div>\n }\n @if (isContextMenuButtonVisible()) {\n <div class=\"si-tree-stretch-center si-tree-context-menu-btn\">\n <div\n #menuTrigger=\"cdkMenuTriggerFor\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n [cdkMenuTriggerFor]=\"contextMenu\"\n (cdkMenuOpened)=\"onToggleContextMenuOpen()\"\n (cdkMenuClosed)=\"onToggleContextMenuClose()\"\n >\n <i\n aria-hidden=\"true\"\n class=\"si-tree-view-item-icon si-tree-view-menu-btn\"\n [class]=\"icons().itemMenu\"\n ></i>\n </div>\n </div>\n }\n @if (showFolderStateEnd) {\n <ng-container\n [ngTemplateOutlet]=\"treeItem.state === 'leaf' ? spacerTemplate : toggleTemplate\"\n [ngTemplateOutletContext]=\"{\n toggleIcon: 'si-tree-view-item-icon',\n positionEnd: true\n }\"\n />\n }\n </div>\n </div>\n </div>\n} @else {\n <div class=\"si-tree-view-li focus-direct-sub-inside\">\n <div class=\"si-tree-view-item-group\">\n @if (showFolderStateStart) {\n <ng-container\n [ngTemplateOutlet]=\"toggleTemplate\"\n [ngTemplateOutletContext]=\"{\n toggleIcon: 'si-tree-view-item-icon'\n }\"\n />\n }\n <ng-container\n [ngTemplateOutlet]=\"checkboxOrOption\"\n [ngTemplateOutletContext]=\"{ classNames: 'form-check' }\"\n />\n\n <p class=\"mb-0\">{{ treeItem.label | translate }}</p>\n @if (showFolderStateEnd) {\n <ng-container\n [ngTemplateOutlet]=\"toggleTemplate\"\n [ngTemplateOutletContext]=\"{\n toggleIcon: 'si-tree-view-item-icon'\n }\"\n />\n }\n </div>\n </div>\n}\n\n<ng-template #contextMenu>\n <si-menu-factory class=\"me-5\" [items]=\"contextMenuItems()!\" [actionParam]=\"treeItem\" />\n</ng-template>\n\n<ng-template #checkboxOrOption let-classNames=\"classNames\">\n @if (showCheckOrOptionBox) {\n <a class=\"input-box\" tabindex=\"-1\" [class]=\"classNames\">\n <input\n class=\"form-check-input\"\n tabindex=\"-1\"\n [type]=\"getInputType()\"\n [indeterminate]=\"this.treeItem.checked === 'indeterminate' ? true : null\"\n [checked]=\"this.treeItem.checked === 'checked'\"\n [disabled]=\"!treeItem.selectable\"\n [attr.aria-label]=\"treeItem.label | translate\"\n (click)=\"onBoxClicked()\"\n />\n </a>\n }\n</ng-template>\n\n<ng-template\n #toggleTemplate\n let-biggerPaddingStart=\"biggerPaddingStart\"\n let-paddingStart=\"paddingStart\"\n let-toggleIcon=\"toggleIcon\"\n let-positionEnd=\"positionEnd\"\n>\n @let folderStateClass = getItemFolderStateClass();\n <a\n class=\"si-tree-stretch-center si-tree-view-item-toggle\"\n tabindex=\"-1\"\n [class.si-tree-view-item-toggle-end]=\"positionEnd\"\n [class.disabled]=\"!folderStateClass\"\n [style.margin-inline-start]=\"biggerPaddingStart\"\n [style.padding-inline-start]=\"paddingStart\"\n (click)=\"onItemFolderClicked()\"\n >\n @if (isExpanding) {\n <si-loading-spinner />\n } @else {\n <i aria-hidden=\"true\" [class]=\"`${toggleIcon} ${folderStateClass}`\"></i>\n }\n </a>\n</ng-template>\n\n<ng-template #spacerTemplate let-positionEnd=\"positionEnd\">\n <div\n class=\"si-tree-stretch-center si-tree-view-item-toggle\"\n [class.si-tree-view-item-toggle-end]=\"positionEnd\"\n >\n <i aria-hidden=\"true\" class=\"si-tree-view-item-icon si-tree-view-item-icon-spacer\"></i>\n </div>\n</ng-template>\n", styles: [":host{--si-tree-view-background: var(--element-base-1);--si-tree-view-border-color: var(--element-ui-4);--si-tree-view-icon-size: 1.25rem;--si-tree-view-padding-base-horizontal: 8px;--si-tree-view-padding-base-vertical: 8px;--si-tree-view-item-hover-color: var(--element-base-1-hover);--si-tree-view-item-select-color: var(--element-base-1-selected);--si-tree-view-item-line-height: 1.1428571429;--si-tree-view-item-min-height: 40px;--si-tree-view-item-object-data-field-1-color: var(--element-text-secondary)}:host-context(.tree-sm){--si-tree-view-item-min-height: 32px;--si-tree-view-padding-base-vertical: 0px}:host-context(.tree-xs){--si-tree-view-item-min-height: 24px;--si-tree-view-padding-base-vertical: 0px}:host{display:block}:host.cdk-drag-placeholder{block-size:0;margin-inline:8px;margin-block:0!important;opacity:1;min-block-size:0;position:relative;z-index:999}:host.cdk-drag-placeholder:after{position:absolute;inline-size:100%;block-size:2px;content:\"\";background-color:var(--element-focus-default)!important}:host.cdk-drag-placeholder>*{display:none}:host.cdk-drag:not(.cdk-drag-placeholder){transform:none!important}:host.cdk-drop-list-dragging *:hover,:host.cdk-drop-list-dragging .si-tree-view-item-end-icons,:host.cdk-drop-list-dragging .si-tree-view-item-context-menu-visible,:host .cdk-drop-list-dragging *:hover,:host .cdk-drop-list-dragging .si-tree-view-item-end-icons,:host .cdk-drop-list-dragging .si-tree-view-item-context-menu-visible{background-color:transparent!important}:host.cdk-drag-preview .si-tree-view-li.si-tree-view-li-item{padding-inline-start:8px!important;padding-inline-end:12px!important}:host.cdk-drag-preview .si-tree-view-li.si-tree-view-li-item .si-tree-view-item-toggle{padding-inline-start:12px!important}:host.cdk-drag-preview .si-tree-view-li.si-tree-view-li-item .badge{margin-inline-end:0}:host.cdk-drag-preview .si-tree-view-item-end-icons,:host.cdk-drag-preview .si-tree-view-li.si-tree-view-li-item{background-color:var(--element-base-3)!important}.si-tree-view-li.si-tree-view-li-item{position:relative}.si-tree-view-li.si-tree-view-li-item:hover,.si-tree-view-li.si-tree-view-li-item.si-tree-view-item-context-menu-visible,.si-tree-view-li.si-tree-view-li-item:hover .si-tree-view-item-end-icons,.si-tree-view-li.si-tree-view-li-item.si-tree-view-item-context-menu-visible .si-tree-view-item-end-icons{background-color:var(--si-tree-view-item-hover-color)}.si-tree-view-li.si-tree-view-li-item.si-tree-view-item-selected,.si-tree-view-li.si-tree-view-li-item.si-tree-view-item-selected .si-tree-view-item-end-icons{background-color:var(--si-tree-view-item-select-color)}.si-tree-view-li.si-tree-view-li-item.si-tree-view-item-not-selectable:hover,.si-tree-view-li.si-tree-view-li-item.si-tree-view-item-not-selectable .si-tree-view-item-end-icons{background-color:unset}.si-tree-view-li.si-tree-view-li-item.si-tree-view-item-not-selectable .si-tree-view-item:hover{cursor:default;background-color:unset}.si-tree-view-li.si-tree-view-li-item.si-tree-view-item-not-selectable .si-tree-view-item-dropdown-caret{cursor:pointer}.si-tree-view-li.si-tree-view-li-item.si-tree-view-item-not-selectable .si-tree-context-menu-btn>div[role=button]{cursor:pointer}.si-tree-view-li.si-tree-view-li-item.si-tree-view-item-not-selectable .si-tree-view-item-toggle-end{cursor:pointer}.si-tree-view-li.si-tree-view-li-item.si-tree-view-item-not-selectable .si-tree-view-item-toggle-end .si-tree-view-item-icon{color:var(--element-text-primary)}.si-tree-view-li.si-tree-view-li-item .si-tree-view-item-end-icons{background-color:var(--si-tree-view-background)}.si-tree-view-item-group,.si-tree-view-item{display:flex;align-items:center}.si-tree-stretch-center{align-self:stretch;display:flex;align-items:center;justify-content:center;margin:0;text-decoration:none}.si-tree-view-item-toggle.disabled .si-tree-view-item-icon{inline-size:24px}.si-tree-stretch-center+.si-tree-view-item-toggle-end .si-tree-view-item-icon{margin-inline-start:-4px}.si-tree-view-item-icon{padding-inline-end:4px}.si-tree-view-item-icon.si-tree-view-item-icon-spacer{box-sizing:content-box;inline-size:var(--si-tree-view-icon-size)}.si-tree-view-item-object-data,.si-tree-view-item-icon{margin-block:0;margin-inline:calc(var(--si-tree-view-padding-base-horizontal) / 4)}.si-tree-view-item{justify-content:space-between;min-block-size:var(--si-tree-view-item-min-height);padding-inline:var(--si-tree-view-padding-base-horizontal) calc(var(--si-tree-view-padding-base-horizontal) / 4)}.si-tree-view-item:hover{cursor:pointer}:host-context(.si-tree-view-flat) .si-tree-view-item{padding-inline-start:calc(var(--si-tree-view-padding-base-horizontal) / 2)}.si-tree-view-state-indicator{margin-block:0;margin-inline:calc(var(--si-tree-view-padding-base-horizontal) * .75);min-inline-size:.375rem;block-size:.375rem;border-radius:50%}.si-tree-view-state-indicator.si-tree-view-state-indicator-endmost{margin-inline-end:calc(var(--si-tree-view-padding-base-horizontal) * 1.75)}.si-tree-view-item-group{padding-block:calc(2 * var(--si-tree-view-padding-base-vertical));padding-inline:calc(var(--si-tree-view-padding-base-horizontal) / 2);cursor:default}.si-tree-view-item-group .si-tree-view-item-dropdown-caret:hover,.si-tree-view-item-group .si-tree-view-item-icon:hover{cursor:pointer}.si-tree-view-item-dropdown-caret,.si-tree-view-item-dropdown-caret:hover,.si-tree-view-item-icon,.si-tree-view-item-icon:hover{color:var(--element-text-primary);text-decoration:none;font-size:var(--si-tree-view-icon-size)}.si-tree-view-item-main{overflow-x:hidden}.si-tree-view-item-main>.badge{margin-block:auto}.si-tree-view-item-object-data>.si-tree-view-item-object-data-field-1{color:var(--si-tree-view-item-object-data-field-1-color)}:host.si-tree-ellipsis .si-tree-view-item-object-data{overflow-x:hidden}.si-tree-view-item-object-data>*{white-space:nowrap;margin-block:0;line-height:var(--si-tree-view-item-line-height)}:host.si-tree-ellipsis .si-tree-view-item-object-data>*{overflow:hidden;text-overflow:ellipsis}.si-tree-view-menu-btn{pointer-events:none}.si-tree-view-item-end-icons{block-size:calc(var(--si-tree-view-item-min-height) - 2 * (var(--element-button-focus-width) + var(--element-button-focus-overlay-width)))}.si-tree-view-item-end-icons.si-tree-view-item-end-icons-sticky{position:sticky;inset-inline-end:0}.input-box{margin-inline:2px 12px}.form-check-input{display:block}si-loading-spinner{--loading-spinner-size: var(--si-tree-view-icon-size)}\n"] }]
857
859
  }], ctorParameters: () => [], propDecorators: { menuTrigger: [{ type: i0.ViewChild, args: [i0.forwardRef(() => CdkMenuTrigger), { isSignal: true }] }], ariaLevel: [{
858
860
  type: HostBinding,
859
861
  args: ['attr.aria-level']
@@ -1910,7 +1912,6 @@ class SiTreeViewComponent {
1910
1912
  manuallySelectedTreeItems = false;
1911
1913
  latestFolderChanged;
1912
1914
  breadCrumbTreeItems = [];
1913
- subscriptions = [];
1914
1915
  multiSelectionStart;
1915
1916
  _multiSelectionActive = false;
1916
1917
  domChangeObserver;
@@ -1923,6 +1924,7 @@ class SiTreeViewComponent {
1923
1924
  cdRef = inject(ChangeDetectorRef);
1924
1925
  resizeObserver = inject(ResizeObserverService);
1925
1926
  injector = inject(INJECTOR);
1927
+ destroyRef = inject(DestroyRef);
1926
1928
  /**
1927
1929
  * Create a virtual root node so there is just a single root node. This makes sure the tree
1928
1930
  * can be fully traversed starting from any node. This is needed e.g. for recursively
@@ -2040,32 +2042,52 @@ class SiTreeViewComponent {
2040
2042
  this.scroll$ = defer(() => fromEvent(this.treeViewInnerElement().nativeElement, 'scroll'));
2041
2043
  this.siTreeViewService.scroll$ = this.scroll$;
2042
2044
  if (this.isVirtualized()) {
2043
- this.subscriptions.push(this.scroll$.subscribe(event => this.onScroll(event)));
2044
- }
2045
- this.subscriptions.push(this.siTreeViewService.clickEvent.subscribe(event => this.onItemClicked(event)));
2046
- this.subscriptions.push(this.siTreeViewService.folderClickEvent.subscribe(event => this.onItemFolderClicked(event)));
2047
- this.subscriptions.push(this.siTreeViewService.checkboxClickEvent.subscribe(event => this.onItemCheckboxClicked(event)));
2048
- this.subscriptions.push(this.siTreeViewService.loadChildrenEvent.subscribe(event => this.onLoadChildren(event)));
2049
- this.subscriptions.push(this.siTreeViewService.scrollIntoViewEvent.subscribe(event => this.onScrollIntoView(event)));
2050
- this.subscriptions.push(this.siTreeViewService.focusParentEvent.subscribe(event => {
2045
+ this.scroll$
2046
+ .pipe(takeUntilDestroyed(this.destroyRef))
2047
+ .subscribe(event => this.onScroll(event));
2048
+ }
2049
+ this.siTreeViewService.clickEvent
2050
+ .pipe(takeUntilDestroyed(this.destroyRef))
2051
+ .subscribe(event => this.onItemClicked(event));
2052
+ this.siTreeViewService.folderClickEvent
2053
+ .pipe(takeUntilDestroyed(this.destroyRef))
2054
+ .subscribe(event => this.onItemFolderClicked(event));
2055
+ this.siTreeViewService.checkboxClickEvent
2056
+ .pipe(takeUntilDestroyed(this.destroyRef))
2057
+ .subscribe(event => this.onItemCheckboxClicked(event));
2058
+ this.siTreeViewService.loadChildrenEvent
2059
+ .pipe(takeUntilDestroyed(this.destroyRef))
2060
+ .subscribe(event => this.onLoadChildren(event));
2061
+ this.siTreeViewService.scrollIntoViewEvent
2062
+ .pipe(takeUntilDestroyed(this.destroyRef))
2063
+ .subscribe(event => this.onScrollIntoView(event));
2064
+ this.siTreeViewService.focusParentEvent
2065
+ .pipe(takeUntilDestroyed(this.destroyRef))
2066
+ .subscribe(event => {
2051
2067
  if (!this.flatTree()) {
2052
2068
  this.focusParentItem(event);
2053
2069
  return;
2054
2070
  }
2055
2071
  this.onFlatTreeNavigateUp();
2056
- }));
2057
- this.subscriptions.push(this.siTreeViewService.focusFirstChildEvent.subscribe(event => this.focusFirstChildItem(event)));
2058
- this.subscriptions.push(this.siTreeViewVirtualizationService.itemsVirtualizedChanged.subscribe((event) => {
2072
+ });
2073
+ this.siTreeViewService.focusFirstChildEvent
2074
+ .pipe(takeUntilDestroyed(this.destroyRef))
2075
+ .subscribe(event => this.focusFirstChildItem(event));
2076
+ this.siTreeViewVirtualizationService.itemsVirtualizedChanged
2077
+ .pipe(takeUntilDestroyed(this.destroyRef))
2078
+ .subscribe((event) => {
2059
2079
  this.itemsVirtualizedChanged.emit(event);
2060
2080
  this.evaluateForTreeItemsDiffer.next();
2061
2081
  this.cdRef.markForCheck();
2062
- }));
2082
+ });
2063
2083
  this.initialized = true;
2064
2084
  this.handleTreeMode();
2065
2085
  }
2066
2086
  ngAfterViewInit() {
2067
2087
  this.addClassObserver();
2068
- this.subscriptions.push(this.monitorTreeSizeChanges().subscribe(d => this.updatePageSize(d)));
2088
+ this.monitorTreeSizeChanges()
2089
+ .pipe(takeUntilDestroyed(this.destroyRef))
2090
+ .subscribe(d => this.updatePageSize(d));
2069
2091
  this.keyManager = new FocusKeyManager(this.getChildren(), this.injector)
2070
2092
  .withWrap()
2071
2093
  .withAllowedModifierKeys(['shiftKey'])
@@ -2118,9 +2140,9 @@ class SiTreeViewComponent {
2118
2140
  }
2119
2141
  }
2120
2142
  ngOnDestroy() {
2121
- this.subscriptions
2122
- .filter(subscription => !!subscription)
2123
- .forEach(subscription => subscription.unsubscribe());
2143
+ this.scrollChildIntoView.complete();
2144
+ this.childrenLoaded.complete();
2145
+ this.evaluateForTreeItemsDiffer.complete();
2124
2146
  this.domChangeObserver?.disconnect();
2125
2147
  }
2126
2148
  /**
@@ -2429,7 +2451,7 @@ class SiTreeViewComponent {
2429
2451
  this.siTreeViewService.triggerMarkForCheck.next();
2430
2452
  }
2431
2453
  emitSelectedItems() {
2432
- if (this.enableSelection()) {
2454
+ if (!this.destroyRef.destroyed && this.enableSelection()) {
2433
2455
  if (this.siTreeViewService.groupedList) {
2434
2456
  const filtered = this.selectedTreeItems.filter(item => !this.siTreeViewService.isGroupedItem(item));
2435
2457
  this.treeItemsSelected.emit(filtered);