@clr/angular 18.2.2 → 18.4.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 (112) hide show
  1. package/fesm2022/clr-angular-accordion.mjs +28 -28
  2. package/fesm2022/clr-angular-accordion.mjs.map +1 -1
  3. package/fesm2022/clr-angular-button.mjs +27 -27
  4. package/fesm2022/clr-angular-button.mjs.map +1 -1
  5. package/fesm2022/clr-angular-card.mjs +417 -0
  6. package/fesm2022/clr-angular-card.mjs.map +1 -0
  7. package/fesm2022/clr-angular-collapsible-panel.mjs +6 -6
  8. package/fesm2022/clr-angular-collapsible-panel.mjs.map +1 -1
  9. package/fesm2022/clr-angular-data-datagrid.mjs +1578 -415
  10. package/fesm2022/clr-angular-data-datagrid.mjs.map +1 -1
  11. package/fesm2022/clr-angular-data-stack-view.mjs +23 -23
  12. package/fesm2022/clr-angular-data-stack-view.mjs.map +1 -1
  13. package/fesm2022/clr-angular-data-tree-view.mjs +283 -48
  14. package/fesm2022/clr-angular-data-tree-view.mjs.map +1 -1
  15. package/fesm2022/clr-angular-data.mjs +4 -4
  16. package/fesm2022/clr-angular-data.mjs.map +1 -1
  17. package/fesm2022/clr-angular-emphasis-alert.mjs +26 -26
  18. package/fesm2022/clr-angular-emphasis-alert.mjs.map +1 -1
  19. package/fesm2022/clr-angular-emphasis-badge.mjs +3 -3
  20. package/fesm2022/clr-angular-emphasis-badge.mjs.map +1 -1
  21. package/fesm2022/clr-angular-emphasis-label.mjs +3 -3
  22. package/fesm2022/clr-angular-emphasis-label.mjs.map +1 -1
  23. package/fesm2022/clr-angular-emphasis.mjs +4 -4
  24. package/fesm2022/clr-angular-emphasis.mjs.map +1 -1
  25. package/fesm2022/clr-angular-forms-checkbox.mjs +23 -14
  26. package/fesm2022/clr-angular-forms-checkbox.mjs.map +1 -1
  27. package/fesm2022/clr-angular-forms-combobox.mjs +35 -35
  28. package/fesm2022/clr-angular-forms-combobox.mjs.map +1 -1
  29. package/fesm2022/clr-angular-forms-common.mjs +69 -69
  30. package/fesm2022/clr-angular-forms-common.mjs.map +1 -1
  31. package/fesm2022/clr-angular-forms-datalist.mjs +17 -17
  32. package/fesm2022/clr-angular-forms-datalist.mjs.map +1 -1
  33. package/fesm2022/clr-angular-forms-datepicker.mjs +73 -73
  34. package/fesm2022/clr-angular-forms-datepicker.mjs.map +1 -1
  35. package/fesm2022/clr-angular-forms-file-input.mjs +36 -36
  36. package/fesm2022/clr-angular-forms-file-input.mjs.map +1 -1
  37. package/fesm2022/clr-angular-forms-input.mjs +10 -10
  38. package/fesm2022/clr-angular-forms-input.mjs.map +1 -1
  39. package/fesm2022/clr-angular-forms-number-input.mjs +12 -12
  40. package/fesm2022/clr-angular-forms-number-input.mjs.map +1 -1
  41. package/fesm2022/clr-angular-forms-password.mjs +11 -11
  42. package/fesm2022/clr-angular-forms-password.mjs.map +1 -1
  43. package/fesm2022/clr-angular-forms-radio.mjs +17 -24
  44. package/fesm2022/clr-angular-forms-radio.mjs.map +1 -1
  45. package/fesm2022/clr-angular-forms-range.mjs +10 -10
  46. package/fesm2022/clr-angular-forms-range.mjs.map +1 -1
  47. package/fesm2022/clr-angular-forms-select.mjs +10 -10
  48. package/fesm2022/clr-angular-forms-select.mjs.map +1 -1
  49. package/fesm2022/clr-angular-forms-textarea.mjs +10 -10
  50. package/fesm2022/clr-angular-forms-textarea.mjs.map +1 -1
  51. package/fesm2022/clr-angular-forms.mjs +4 -4
  52. package/fesm2022/clr-angular-forms.mjs.map +1 -1
  53. package/fesm2022/clr-angular-icon.mjs +101 -47
  54. package/fesm2022/clr-angular-icon.mjs.map +1 -1
  55. package/fesm2022/clr-angular-layout-breadcrumbs.mjs +10 -10
  56. package/fesm2022/clr-angular-layout-breadcrumbs.mjs.map +1 -1
  57. package/fesm2022/clr-angular-layout-main-container.mjs +7 -7
  58. package/fesm2022/clr-angular-layout-main-container.mjs.map +1 -1
  59. package/fesm2022/clr-angular-layout-nav.mjs +22 -22
  60. package/fesm2022/clr-angular-layout-nav.mjs.map +1 -1
  61. package/fesm2022/clr-angular-layout-tabs.mjs +35 -35
  62. package/fesm2022/clr-angular-layout-tabs.mjs.map +1 -1
  63. package/fesm2022/clr-angular-layout-vertical-nav.mjs +31 -31
  64. package/fesm2022/clr-angular-layout-vertical-nav.mjs.map +1 -1
  65. package/fesm2022/clr-angular-layout.mjs +4 -4
  66. package/fesm2022/clr-angular-layout.mjs.map +1 -1
  67. package/fesm2022/clr-angular-modal.mjs +29 -27
  68. package/fesm2022/clr-angular-modal.mjs.map +1 -1
  69. package/fesm2022/clr-angular-popover-common.mjs +70 -35
  70. package/fesm2022/clr-angular-popover-common.mjs.map +1 -1
  71. package/fesm2022/clr-angular-popover-dropdown.mjs +63 -26
  72. package/fesm2022/clr-angular-popover-dropdown.mjs.map +1 -1
  73. package/fesm2022/clr-angular-popover-signpost.mjs +27 -25
  74. package/fesm2022/clr-angular-popover-signpost.mjs.map +1 -1
  75. package/fesm2022/clr-angular-popover-tooltip.mjs +19 -19
  76. package/fesm2022/clr-angular-popover-tooltip.mjs.map +1 -1
  77. package/fesm2022/clr-angular-popover.mjs +4 -4
  78. package/fesm2022/clr-angular-popover.mjs.map +1 -1
  79. package/fesm2022/clr-angular-progress-progress-bars.mjs +7 -7
  80. package/fesm2022/clr-angular-progress-progress-bars.mjs.map +1 -1
  81. package/fesm2022/clr-angular-progress-spinner.mjs +7 -7
  82. package/fesm2022/clr-angular-progress-spinner.mjs.map +1 -1
  83. package/fesm2022/clr-angular-stepper.mjs +31 -31
  84. package/fesm2022/clr-angular-stepper.mjs.map +1 -1
  85. package/fesm2022/clr-angular-timeline.mjs +24 -24
  86. package/fesm2022/clr-angular-timeline.mjs.map +1 -1
  87. package/fesm2022/clr-angular-utils-conditional.mjs +16 -16
  88. package/fesm2022/clr-angular-utils-conditional.mjs.map +1 -1
  89. package/fesm2022/clr-angular-utils-loading.mjs +7 -7
  90. package/fesm2022/clr-angular-utils-loading.mjs.map +1 -1
  91. package/fesm2022/clr-angular-utils.mjs +149 -150
  92. package/fesm2022/clr-angular-utils.mjs.map +1 -1
  93. package/fesm2022/clr-angular-wizard.mjs +51 -51
  94. package/fesm2022/clr-angular-wizard.mjs.map +1 -1
  95. package/fesm2022/clr-angular.mjs +9 -4
  96. package/fesm2022/clr-angular.mjs.map +1 -1
  97. package/package.json +9 -5
  98. package/types/clr-angular-card.d.ts +110 -0
  99. package/types/clr-angular-data-datagrid.d.ts +427 -57
  100. package/types/clr-angular-data-tree-view.d.ts +126 -88
  101. package/types/clr-angular-forms-checkbox.d.ts +3 -0
  102. package/types/clr-angular-forms-datepicker.d.ts +1 -1
  103. package/types/clr-angular-forms-file-input.d.ts +1 -1
  104. package/types/clr-angular-forms-radio.d.ts +1 -2
  105. package/types/clr-angular-icon.d.ts +22 -2
  106. package/types/clr-angular-popover-common.d.ts +6 -0
  107. package/types/clr-angular-popover-dropdown.d.ts +33 -4
  108. package/types/clr-angular-utils.d.ts +61 -20
  109. package/types/clr-angular.d.ts +8 -6
  110. package/schematics/vitest.config.d.ts +0 -2
  111. package/schematics/vitest.config.js +0 -17
  112. package/schematics/vitest.config.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"clr-angular-data-tree-view.mjs","sources":["../../../projects/angular/data/tree-view/models/selected-state.enum.ts","../../../projects/angular/data/tree-view/tree-features.service.ts","../../../projects/angular/data/tree-view/tree-focus-manager.service.ts","../../../projects/angular/data/tree-view/models/tree-node.model.ts","../../../projects/angular/data/tree-view/models/declarative-tree-node.model.ts","../../../projects/angular/data/tree-view/tree-node-link.ts","../../../projects/angular/data/tree-view/recursive-children.ts","../../../projects/angular/data/tree-view/tree-node.ts","../../../projects/angular/data/tree-view/tree-node.html","../../../projects/angular/data/tree-view/tree.ts","../../../projects/angular/data/tree-view/models/async-array.ts","../../../projects/angular/data/tree-view/models/recursive-tree-node.model.ts","../../../projects/angular/data/tree-view/recursive-for-of.ts","../../../projects/angular/data/tree-view/tree-view.module.ts","../../../projects/angular/data/tree-view/index.ts","../../../projects/angular/data/tree-view/clr-angular-data-tree-view.ts"],"sourcesContent":["/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\n// TODO: I'd like this to be a CheckedState enum for the checkboxes in the future.\nexport enum ClrSelectedState {\n // WARNING! Unselected has the value 0,\n // so it's actually the only one that will evaluate to false if cast to a boolean.\n // Don't mess with the order!\n UNSELECTED = 0,\n SELECTED,\n INDETERMINATE,\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Injectable, Optional, SkipSelf, TemplateRef } from '@angular/core';\nimport { Subject } from 'rxjs';\n\nimport { RecursiveTreeNodeModel } from './models/recursive-tree-node.model';\nimport { ClrRecursiveForOfContext } from './recursive-for-of';\n\n@Injectable()\nexport class TreeFeaturesService<T> {\n selectable = false;\n eager = true;\n recursion: {\n template: TemplateRef<ClrRecursiveForOfContext<T>>;\n root: RecursiveTreeNodeModel<T>[];\n };\n childrenFetched = new Subject<void>();\n}\n\nexport function treeFeaturesFactory<T>(existing: TreeFeaturesService<T>) {\n return existing || new TreeFeaturesService();\n}\n\nexport const TREE_FEATURES_PROVIDER = {\n provide: TreeFeaturesService,\n useFactory: treeFeaturesFactory,\n /*\n * The Optional + SkipSelf pattern ensures that in case of nested components, only the root one will\n * instantiate a new service and all its children will reuse the root's instance.\n * If there are several roots (in this case, several independent trees on a page), each root will instantiate\n * its own service so they won't interfere with one another.\n *\n * TL;DR - Optional + SkipSelf = 1 instance of TreeFeaturesService per tree.\n */\n deps: [[new Optional(), new SkipSelf(), TreeFeaturesService]],\n};\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Injectable } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\n\nimport { TreeNodeModel } from './models/tree-node.model';\n\n@Injectable()\nexport class TreeFocusManagerService<T> {\n rootNodeModels: TreeNodeModel<T>[];\n\n private focusedNodeId: string;\n private _focusRequest = new Subject<string>();\n private _focusChange = new Subject<string>();\n\n get focusRequest(): Observable<string> {\n return this._focusRequest.asObservable();\n }\n\n get focusChange(): Observable<string> {\n return this._focusChange.asObservable();\n }\n\n focusNode(model: TreeNodeModel<T>): void {\n if (model) {\n this._focusRequest.next(model.nodeId);\n }\n }\n\n broadcastFocusedNode(nodeId: string): void {\n if (this.focusedNodeId !== nodeId) {\n this.focusedNodeId = nodeId;\n this._focusChange.next(nodeId);\n }\n }\n\n focusParent(model: TreeNodeModel<T>): void {\n if (model) {\n this.focusNode(model.parent);\n }\n }\n\n focusFirstVisibleNode(): void {\n const focusModel = this.rootNodeModels && this.rootNodeModels[0];\n this.focusNode(focusModel);\n }\n\n focusLastVisibleNode(): void {\n this.focusNode(this.findLastVisibleInTree());\n }\n\n focusNodeAbove(model: TreeNodeModel<T>): void {\n this.focusNode(this.findNodeAbove(model));\n }\n\n focusNodeBelow(model: TreeNodeModel<T>): void {\n this.focusNode(this.findNodeBelow(model));\n }\n\n focusNodeStartsWith(searchString: string, model: TreeNodeModel<T>): void {\n this.focusNode(this.findClosestNodeStartsWith(searchString, model));\n }\n\n private findSiblings(model: TreeNodeModel<T>): TreeNodeModel<T>[] {\n // the method will return not only sibling models but also itself among them\n if (model.parent) {\n return model.parent.children;\n } else {\n return this.rootNodeModels;\n }\n }\n\n private findLastVisibleInNode(model: TreeNodeModel<T>): TreeNodeModel<T> {\n // the method will traverse through until it finds the last visible node from the given node\n if (!model) {\n return null;\n }\n if (model.expanded && model.children.length > 0) {\n const children = model.children;\n const lastChild = children[children.length - 1];\n return this.findLastVisibleInNode(lastChild);\n } else {\n return model;\n }\n }\n\n private findNextFocusable(model: TreeNodeModel<T>): TreeNodeModel<T> {\n if (!model) {\n return null;\n }\n\n const siblings = this.findSiblings(model);\n const selfIndex = siblings.indexOf(model);\n\n if (selfIndex < siblings.length - 1) {\n return siblings[selfIndex + 1];\n } else if (selfIndex === siblings.length - 1) {\n return this.findNextFocusable(model.parent);\n }\n return null;\n }\n\n private findLastVisibleInTree(): TreeNodeModel<T> {\n const lastRootNode =\n this.rootNodeModels && this.rootNodeModels.length && this.rootNodeModels[this.rootNodeModels.length - 1];\n return this.findLastVisibleInNode(lastRootNode);\n }\n\n private findNodeAbove(model: TreeNodeModel<T>): TreeNodeModel<T> {\n if (!model) {\n return null;\n }\n\n const siblings = this.findSiblings(model);\n const selfIndex = siblings.indexOf(model);\n\n if (selfIndex === 0) {\n return model.parent;\n } else if (selfIndex > 0) {\n return this.findLastVisibleInNode(siblings[selfIndex - 1]);\n }\n return null;\n }\n\n private findNodeBelow(model: TreeNodeModel<T>): TreeNodeModel<T> {\n if (!model) {\n return null;\n }\n\n if (model.expanded && model.children.length > 0) {\n return model.children[0];\n } else {\n return this.findNextFocusable(model);\n }\n }\n\n private findDescendentNodeStartsWith(searchString: string, model: TreeNodeModel<T>): TreeNodeModel<T> {\n if (model.expanded && model.children.length > 0) {\n for (const childModel of model.children) {\n const found = this.findNodeStartsWith(searchString, childModel);\n if (found) {\n return found;\n }\n }\n }\n return null;\n }\n\n private findSiblingNodeStartsWith(searchString: string, model: TreeNodeModel<T>): TreeNodeModel<T> {\n const siblings = this.findSiblings(model);\n const selfIndex = siblings.indexOf(model);\n\n // Look from sibling nodes\n for (let i = selfIndex + 1; i < siblings.length; i++) {\n const siblingModel = siblings[i];\n const found = this.findNodeStartsWith(searchString, siblingModel);\n if (found) {\n return found;\n }\n }\n return null;\n }\n\n private findRootNodeStartsWith(searchString: string, model: TreeNodeModel<T>): TreeNodeModel<T> {\n for (const rootModel of this.rootNodeModels) {\n // Don't look from a parent yet\n if (model.parent && model.parent === rootModel) {\n continue;\n }\n\n const found = this.findNodeStartsWith(searchString, rootModel);\n if (found) {\n return found;\n }\n }\n return null;\n }\n\n private findNodeStartsWith(searchString: string, model: TreeNodeModel<T>): TreeNodeModel<T> {\n if (!model) {\n return null;\n }\n\n if (model.textContent.startsWith(searchString)) {\n return model;\n }\n\n return this.findDescendentNodeStartsWith(searchString, model);\n }\n\n private findClosestNodeStartsWith(searchString: string, model: TreeNodeModel<T>): TreeNodeModel<T> {\n if (!model) {\n return null;\n }\n\n const foundFromDescendents = this.findDescendentNodeStartsWith(searchString, model);\n\n if (foundFromDescendents) {\n return foundFromDescendents;\n }\n\n const foundFromSiblings = this.findSiblingNodeStartsWith(searchString, model);\n\n if (foundFromSiblings) {\n return foundFromSiblings;\n }\n\n const foundFromRootNodes = this.findRootNodeStartsWith(searchString, model);\n\n if (foundFromRootNodes) {\n return foundFromRootNodes;\n }\n // Now look from its own direct parent\n return this.findNodeStartsWith(searchString, model.parent);\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { BehaviorSubject } from 'rxjs';\n\nimport { ClrSelectedState } from './selected-state.enum';\n\nexport abstract class TreeNodeModel<T> {\n nodeId: string;\n expanded: boolean;\n model: T | null;\n textContent: string;\n loading$ = new BehaviorSubject(false);\n selected = new BehaviorSubject(ClrSelectedState.UNSELECTED);\n\n /*\n * Being able to push this down to the RecursiveTreeNodeModel would require too much work on the angular components\n * right now for them to know which kind of model they are using. So I'm lifting the public properties to this\n * abstract parent class for now and we can revisit it later, when we're not facing such a close deadline.\n */\n private _loading = false;\n private _disabled: boolean;\n\n /*\n * Ideally, I would like to use a polymorphic this type here to ensure homogeneity of the tree, something like:\n * abstract parent: this<T> | null;\n * abstract children: this<T>[];\n * But I'm hitting limitations on typescript not allowing that type in constructors or static methods.\n * So I'm resorting to forcing override with more precise types by marking these abstract.\n */\n abstract parent: TreeNodeModel<T> | null;\n abstract children: TreeNodeModel<T>[];\n\n get loading() {\n return this._loading;\n }\n set loading(isLoading: boolean) {\n this._loading = isLoading;\n this.loading$.next(isLoading);\n }\n\n get disabled() {\n // when both parameters are undefined, double negative is needed to cast to false, otherwise will return undefined.\n return !!(this._disabled || this.parent?.disabled);\n }\n set disabled(value: boolean) {\n this._disabled = value;\n }\n\n destroy() {\n // Just to be safe\n this.selected.complete();\n }\n\n // Propagate by default when eager, don't propagate in the lazy-loaded tree.\n setSelected(state: ClrSelectedState, propagateUp: boolean, propagateDown: boolean) {\n if (state === this.selected.value) {\n return;\n }\n this.selected.next(state);\n if (propagateDown && state !== ClrSelectedState.INDETERMINATE && this.children) {\n this.children.forEach(child => {\n if (!child.disabled) {\n child.setSelected(state, false, true);\n }\n });\n }\n if (propagateUp && this.parent) {\n this.parent._updateSelectionFromChildren();\n }\n }\n\n toggleSelection(propagate: boolean) {\n if (this.disabled) {\n return;\n }\n\n // Both unselected and indeterminate toggle to selected\n const newState =\n this.selected.value === ClrSelectedState.SELECTED ? ClrSelectedState.UNSELECTED : ClrSelectedState.SELECTED;\n // NOTE: we always propagate selection up in this method because it is only called when the user takes an action.\n // It should never be called from lifecycle hooks or app-provided inputs.\n this.setSelected(newState, true, propagate);\n }\n\n /*\n * Internal, but needs to be called by other nodes\n */\n _updateSelectionFromChildren() {\n const newState = this.computeSelectionStateFromChildren();\n if (newState === this.selected.value) {\n return;\n }\n this.selected.next(newState);\n if (this.parent) {\n this.parent._updateSelectionFromChildren();\n }\n }\n\n private computeSelectionStateFromChildren() {\n let oneSelected = false;\n let oneUnselected = false;\n // Using a good old for loop to exit as soon as we can tell, for better performance on large trees.\n for (const child of this.children) {\n switch (child.selected.value) {\n case ClrSelectedState.INDETERMINATE:\n if (child.disabled) {\n continue;\n }\n return ClrSelectedState.INDETERMINATE;\n case ClrSelectedState.SELECTED:\n oneSelected = true;\n if (oneUnselected) {\n return ClrSelectedState.INDETERMINATE;\n }\n break;\n case ClrSelectedState.UNSELECTED:\n default:\n // Default is the same as unselected, in case an undefined somehow made it all the way here.\n oneUnselected = true;\n if (oneSelected) {\n return ClrSelectedState.INDETERMINATE;\n }\n break;\n }\n }\n if (!oneSelected) {\n return ClrSelectedState.UNSELECTED;\n } else if (!oneUnselected) {\n return ClrSelectedState.SELECTED;\n } else {\n return ClrSelectedState.UNSELECTED;\n }\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { TreeNodeModel } from './tree-node.model';\n\n/*\n * A declarative model is built by traversing the Angular component tree.\n * Declarative = Tree node components dictate the model\n */\nexport class DeclarativeTreeNodeModel<T> extends TreeNodeModel<T> {\n // Override for a more precise type\n parent: DeclarativeTreeNodeModel<T> | null;\n children: DeclarativeTreeNodeModel<T>[];\n\n constructor(parent: DeclarativeTreeNodeModel<T> | null) {\n super();\n this.parent = parent;\n if (parent) {\n parent._addChild(this);\n }\n this.children = [];\n }\n\n override destroy() {\n if (this.parent) {\n this.parent._removeChild(this);\n }\n super.destroy();\n }\n\n _addChild(child: DeclarativeTreeNodeModel<T>) {\n this.children.push(child);\n }\n\n _removeChild(child: DeclarativeTreeNodeModel<T>) {\n const index = this.children.indexOf(child);\n if (index > -1) {\n this.children.splice(index, 1);\n }\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Directive, ElementRef } from '@angular/core';\n\n@Directive({\n selector: '.clr-treenode-link',\n standalone: false,\n})\nexport class ClrTreeNodeLink {\n constructor(private el: ElementRef<HTMLElement>) {}\n\n get active() {\n return this.el.nativeElement.classList.contains('active');\n }\n\n activate() {\n if (this.el.nativeElement && this.el.nativeElement.click) {\n this.el.nativeElement.click();\n }\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Component, Input, Optional } from '@angular/core';\nimport { IfExpandService } from '@clr/angular/utils';\nimport { Subscription } from 'rxjs';\n\nimport { RecursiveTreeNodeModel } from './models/recursive-tree-node.model';\nimport { TreeNodeModel } from './models/tree-node.model';\nimport { ClrRecursiveForOfContext } from './recursive-for-of';\nimport { TreeFeaturesService } from './tree-features.service';\n\n@Component({\n selector: 'clr-recursive-children',\n template: `\n @if (shouldRender()) {\n @for (child of parent?.children || children; track child) {\n <ng-container *ngTemplateOutlet=\"featuresService.recursion.template; context: getContext(child)\"></ng-container>\n }\n }\n `,\n host: {\n '[attr.role]': 'role', // Safari + VO needs direct relationship between treeitem and group; no element should exist between them\n },\n standalone: false,\n})\n/**\n * Internal component, do not export!\n * This is part of the hack to get around https://github.com/angular/angular/issues/15998\n */\nexport class RecursiveChildren<T> {\n // Offering the option to either give the parent node to recurse potentially lazily,\n // or directly the list of children to display.\n @Input('parent') parent: TreeNodeModel<T>;\n @Input('children') children: TreeNodeModel<T>[];\n\n subscription: Subscription;\n role: string;\n\n constructor(\n public featuresService: TreeFeaturesService<T>,\n @Optional() private expandService: IfExpandService\n ) {\n if (expandService) {\n this.subscription = expandService.expandChange.subscribe(value => {\n if (!value && this.parent && !featuresService.eager && featuresService.recursion) {\n // In the case of lazy-loading recursive trees, we clear the children on collapse.\n // This is better in case they change between two user interaction, and that way\n // the app itself can decide whether to cache them or not.\n (this.parent as RecursiveTreeNodeModel<T>).clearChildren();\n }\n });\n }\n }\n\n ngAfterContentInit() {\n this.setAriaRoles();\n }\n\n shouldRender() {\n return (\n this.featuresService.recursion &&\n // In the smart case, we eagerly render all the recursive children\n // to make sure two-way bindings for selection are available.\n // They will be hidden with CSS by the parent.\n (this.featuresService.eager || !this.expandService || this.expandService.expanded)\n );\n }\n\n getContext(node: TreeNodeModel<T>): ClrRecursiveForOfContext<T> {\n return {\n $implicit: node.model,\n clrModel: node,\n };\n }\n\n ngOnDestroy() {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n\n private setAriaRoles() {\n this.role = this.parent ? 'group' : null;\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { animate, state, style, transition, trigger } from '@angular/animations';\nimport { isPlatformBrowser } from '@angular/common';\nimport {\n AfterContentInit,\n AfterViewInit,\n Component,\n ContentChildren,\n ElementRef,\n EventEmitter,\n Inject,\n Injector,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n PLATFORM_ID,\n QueryList,\n SkipSelf,\n ViewChild,\n} from '@angular/core';\nimport {\n ClrCommonStringsService,\n IfExpandService,\n isKeyEitherLetterOrNumber,\n Keys,\n LoadingListener,\n preventArrowKeyScroll,\n uniqueIdFactory,\n} from '@clr/angular/utils';\nimport { Subject, Subscription } from 'rxjs';\nimport { debounceTime, filter } from 'rxjs/operators';\n\nimport { DeclarativeTreeNodeModel } from './models/declarative-tree-node.model';\nimport { ClrSelectedState } from './models/selected-state.enum';\nimport { TreeNodeModel } from './models/tree-node.model';\nimport { TREE_FEATURES_PROVIDER, TreeFeaturesService } from './tree-features.service';\nimport { TreeFocusManagerService } from './tree-focus-manager.service';\nimport { ClrTreeNodeLink } from './tree-node-link';\n\nconst LVIEW_CONTEXT_INDEX = 8;\n\n// If the user types multiple keys without allowing 200ms to pass between them,\n// then those keys are sent together in one request.\nconst TREE_TYPE_AHEAD_TIMEOUT = 200;\n\n@Component({\n selector: 'clr-tree-node',\n templateUrl: './tree-node.html',\n providers: [TREE_FEATURES_PROVIDER, IfExpandService, { provide: LoadingListener, useExisting: IfExpandService }],\n animations: [\n trigger('toggleChildrenAnim', [\n transition('collapsed => expanded', [style({ height: 0 }), animate(200, style({ height: '*' }))]),\n transition('expanded => collapsed', [style({ height: '*' }), animate(200, style({ height: 0 }))]),\n state('expanded', style({ height: '*', 'overflow-y': 'visible' })),\n state('collapsed', style({ height: 0 })),\n ]),\n ],\n host: {\n '[class.clr-tree-node]': 'true',\n '[class.disabled]': 'this._model.disabled',\n },\n standalone: false,\n})\nexport class ClrTreeNode<T> implements OnInit, AfterContentInit, AfterViewInit, OnDestroy {\n // Allows the consumer to override our logic deciding if a node is expandable.\n // Useful for recursive trees that don't want to pre-load one level ahead just to know which nodes are expandable.\n @Input('clrExpandable') expandable: boolean | undefined;\n\n @Output('clrSelectedChange') selectedChange = new EventEmitter<ClrSelectedState>(false);\n @Output('clrExpandedChange') expandedChange = new EventEmitter<boolean>();\n\n STATES = ClrSelectedState;\n isModelLoading = false;\n nodeId = uniqueIdFactory();\n contentContainerTabindex = -1;\n _model: TreeNodeModel<T>;\n\n private skipEmitChange = false;\n private typeAheadKeyBuffer = '';\n private typeAheadKeyEvent = new Subject<string>();\n private subscriptions: Subscription[] = [];\n\n @ViewChild('contentContainer', { read: ElementRef, static: true }) private contentContainer: ElementRef<HTMLElement>;\n\n // @ContentChild would have been more succinct\n // but it doesn't offer a way to query only an immediate child\n @ContentChildren(ClrTreeNodeLink, { descendants: false }) private treeNodeLinkList: QueryList<ClrTreeNodeLink>;\n\n constructor(\n @Inject(PLATFORM_ID) private platformId: any,\n @Optional()\n @SkipSelf()\n parent: ClrTreeNode<T>,\n public featuresService: TreeFeaturesService<T>,\n public expandService: IfExpandService,\n public commonStrings: ClrCommonStringsService,\n private focusManager: TreeFocusManagerService<T>,\n private elementRef: ElementRef<HTMLElement>,\n injector: Injector\n ) {\n if (featuresService.recursion) {\n // I'm completely stuck, we have to hack into private properties until either\n // https://github.com/angular/angular/issues/14935 or https://github.com/angular/angular/issues/15998\n // are fixed\n // This is for non-ivy implementations\n if ((injector as any).view) {\n this._model = (injector as any).view.context.clrModel;\n } else {\n // Ivy puts this on a specific index of a _lView property\n this._model = (injector as any)._lView[LVIEW_CONTEXT_INDEX].clrModel;\n }\n } else {\n // Force cast for now, not sure how to tie the correct type here to featuresService.recursion\n this._model = new DeclarativeTreeNodeModel(parent ? (parent._model as DeclarativeTreeNodeModel<T>) : null);\n }\n this._model.nodeId = this.nodeId;\n }\n\n @Input('clrDisabled')\n get disabled(): boolean {\n return this._model.disabled;\n }\n set disabled(value: boolean) {\n this._model.disabled = value;\n }\n\n @Input('clrSelected')\n get selected(): ClrSelectedState | boolean {\n return this._model.selected.value;\n }\n set selected(value: ClrSelectedState | boolean) {\n this.featuresService.selectable = true;\n // Gracefully handle falsy states like null or undefined because it's just easier than answering questions.\n // This shouldn't happen with strict typing on the app's side, but it's not up to us.\n if (value === null || typeof value === 'undefined') {\n value = ClrSelectedState.UNSELECTED;\n }\n // We match booleans to the corresponding ClrSelectedState\n if (typeof value === 'boolean') {\n value = value ? ClrSelectedState.SELECTED : ClrSelectedState.UNSELECTED;\n }\n // We propagate only if the tree is in smart mode, and skip emitting the output when we set the input\n // See https://github.com/vmware/clarity/issues/3073\n this.skipEmitChange = true;\n this._model.setSelected(value, this.featuresService.eager, this.featuresService.eager);\n this.skipEmitChange = false;\n }\n\n // I'm caving on this, for tree nodes I think we can tolerate having a two-way binding on the component\n // rather than enforce the clrIfExpanded structural directive for dynamic cases. Mostly because for the smart\n // case, you can't use a structural directive, it would need to go on an ng-container.\n @Input('clrExpanded')\n get expanded(): boolean {\n return this.expandService.expanded;\n }\n set expanded(value: boolean) {\n this.expandService.expanded = value;\n }\n\n @Input('clrForTypeAhead')\n set clrForTypeAhead(value: string) {\n this._model.textContent = trimAndLowerCase(value || this.elementRef.nativeElement.textContent);\n }\n\n get ariaSelected(): boolean {\n if (this.isSelectable()) {\n return this._model.selected.value === ClrSelectedState.SELECTED;\n } else if (this.treeNodeLink?.active) {\n return true;\n } else {\n return null;\n }\n }\n\n get treeNodeLink() {\n return this.treeNodeLinkList && this.treeNodeLinkList.first;\n }\n\n private get isParent() {\n return this._model.children && this._model.children.length > 0;\n }\n\n ngOnInit() {\n this._model.expanded = this.expanded;\n this._model.disabled = this.disabled;\n this.subscriptions.push(\n this._model.selected.pipe(filter(() => !this.skipEmitChange)).subscribe(value => {\n this.selectedChange.emit(value);\n })\n );\n this.subscriptions.push(\n this.expandService.expandChange.subscribe(value => {\n this.expandedChange.emit(value);\n this._model.expanded = value;\n })\n );\n this.subscriptions.push(\n this.focusManager.focusRequest.subscribe(nodeId => {\n if (this.nodeId === nodeId) {\n this.focusTreeNode();\n }\n }),\n this.focusManager.focusChange.subscribe(nodeId => {\n this.checkTabIndex(nodeId);\n })\n );\n\n this.subscriptions.push(\n this._model.loading$.pipe(debounceTime(0)).subscribe(isLoading => (this.isModelLoading = isLoading))\n );\n }\n\n ngAfterContentInit() {\n this.subscriptions.push(\n this.typeAheadKeyEvent.pipe(debounceTime(TREE_TYPE_AHEAD_TIMEOUT)).subscribe((bufferedKeys: string) => {\n this.focusManager.focusNodeStartsWith(bufferedKeys, this._model);\n // reset once bufferedKeys are used\n this.typeAheadKeyBuffer = '';\n })\n );\n }\n\n ngAfterViewInit() {\n if (!this._model.textContent) {\n this._model.textContent = trimAndLowerCase(this.elementRef.nativeElement.textContent);\n }\n }\n\n ngOnDestroy() {\n this._model.destroy();\n this.subscriptions.forEach(sub => sub.unsubscribe());\n }\n\n isExpandable() {\n if (typeof this.expandable !== 'undefined') {\n return this.expandable;\n }\n return !!this.expandService.expandable || this.isParent;\n }\n\n isSelectable() {\n return this.featuresService.selectable;\n }\n\n focusTreeNode(): void {\n const containerEl = this.contentContainer.nativeElement;\n if (isPlatformBrowser(this.platformId) && document.activeElement !== containerEl) {\n this.setTabIndex(0);\n containerEl.focus();\n containerEl.scrollIntoView({ block: 'nearest', inline: 'nearest' });\n }\n }\n\n broadcastFocusOnContainer() {\n this.focusManager.broadcastFocusedNode(this.nodeId);\n }\n\n onKeyDown(event: KeyboardEvent) {\n // Two reasons to prevent default behavior:\n // 1. to prevent scrolling on arrow keys\n // 2. Assistive Technology focus differs from Keyboard focus behavior.\n // By default, pressing arrow key makes AT focus go into the nested content of the item.\n preventArrowKeyScroll(event);\n\n // https://www.w3.org/TR/wai-aria-practices-1.1/#keyboard-interaction-22\n switch (event.key) {\n case Keys.ArrowUp:\n this.focusManager.focusNodeAbove(this._model);\n break;\n case Keys.ArrowDown:\n this.focusManager.focusNodeBelow(this._model);\n break;\n case Keys.ArrowRight:\n this.expandOrFocusFirstChild();\n break;\n case Keys.ArrowLeft:\n this.collapseOrFocusParent();\n break;\n case Keys.Home:\n event.preventDefault();\n this.focusManager.focusFirstVisibleNode();\n break;\n case Keys.End:\n event.preventDefault();\n this.focusManager.focusLastVisibleNode();\n break;\n case Keys.Enter:\n this.toggleExpandOrTriggerDefault();\n break;\n case Keys.Space:\n case Keys.Spacebar:\n // to prevent scrolling on space key in this specific case\n event.preventDefault();\n this.toggleExpandOrTriggerDefault();\n break;\n default:\n if (this._model.textContent && isKeyEitherLetterOrNumber(event)) {\n this.typeAheadKeyBuffer += event.key;\n this.typeAheadKeyEvent.next(this.typeAheadKeyBuffer);\n return;\n }\n break;\n }\n\n // if non-letter keys are pressed, do reset.\n this.typeAheadKeyBuffer = '';\n }\n\n private setTabIndex(value: number) {\n this.contentContainerTabindex = value;\n this.contentContainer.nativeElement.setAttribute('tabindex', value.toString());\n }\n\n private checkTabIndex(nodeId: string): void {\n if (isPlatformBrowser(this.platformId) && this.nodeId !== nodeId && this.contentContainerTabindex !== -1) {\n this.setTabIndex(-1);\n }\n }\n\n private toggleExpandOrTriggerDefault() {\n if (this.disabled) {\n return;\n }\n\n if (this.isExpandable() && !this.isSelectable()) {\n this.expandService.expanded = !this.expanded;\n } else {\n this.triggerDefaultAction();\n }\n }\n\n private expandOrFocusFirstChild() {\n if (this.disabled) {\n return;\n }\n\n if (this.expanded) {\n // if the node is already expanded and has children, focus its very first child\n if (this.isParent) {\n this.focusManager.focusNodeBelow(this._model);\n }\n } else {\n // we must check if the node is expandable, in order to set .expanded to true from false\n // because we shouldn't set .expanded to true if it's not expandable node\n if (this.isExpandable()) {\n this.expandService.expanded = true;\n }\n }\n }\n\n private collapseOrFocusParent() {\n if (this.disabled) {\n return;\n }\n\n if (this.expanded) {\n this.expandService.expanded = false;\n } else {\n this.focusManager.focusParent(this._model);\n }\n }\n\n private triggerDefaultAction() {\n if (this.treeNodeLink) {\n this.treeNodeLink.activate();\n } else {\n if (this.isSelectable()) {\n this._model.toggleSelection(this.featuresService.eager);\n }\n }\n }\n}\n\nfunction trimAndLowerCase(value: string) {\n return value.toLocaleLowerCase().trim();\n}\n","<!--\n ~ Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n ~ This software is released under MIT license.\n ~ The full license information can be found in LICENSE in the root directory of this project.\n -->\n\n<div\n #contentContainer\n role=\"treeitem\"\n class=\"clr-tree-node-content-container\"\n tabindex=\"-1\"\n [class.clr-form-control-disabled]=\"disabled\"\n [attr.aria-disabled]=\"disabled\"\n [attr.aria-expanded]=\"isExpandable() ? expanded : null\"\n [attr.aria-selected]=\"ariaSelected\"\n (keydown)=\"onKeyDown($event)\"\n (focus)=\"broadcastFocusOnContainer()\"\n>\n @if (isExpandable() && !isModelLoading && !expandService.loading) {\n <button\n aria-hidden=\"true\"\n type=\"button\"\n tabindex=\"-1\"\n class=\"clr-treenode-caret\"\n (click)=\"expandService.toggle();\"\n (focus)=\"focusTreeNode()\"\n [disabled]=\"disabled\"\n >\n <cds-icon\n class=\"clr-treenode-caret-icon\"\n shape=\"angle\"\n [direction]=\"expandService.expanded ? 'down' : 'right'\"\n ></cds-icon>\n </button>\n } @if (expandService.loading || isModelLoading) {\n <div class=\"clr-treenode-spinner-container\">\n <span class=\"clr-treenode-spinner spinner\"></span>\n </div>\n } @if (featuresService.selectable) {\n <div class=\"clr-checkbox-wrapper clr-treenode-checkbox\">\n <input\n aria-hidden=\"true\"\n type=\"checkbox\"\n [id]=\"nodeId + '-check'\"\n class=\"clr-checkbox\"\n [disabled]=\"disabled\"\n [checked]=\"_model.selected.value === STATES.SELECTED\"\n [indeterminate]=\"_model.selected.value === STATES.INDETERMINATE\"\n (change)=\"_model.toggleSelection(featuresService.eager)\"\n (focus)=\"focusTreeNode()\"\n tabindex=\"-1\"\n />\n <label [for]=\"nodeId + '-check'\" class=\"clr-control-label\">\n <ng-container [ngTemplateOutlet]=\"treenodeContent\"></ng-container>\n </label>\n </div>\n } @if (!featuresService.selectable) {\n <div class=\"clr-treenode-content\" (mouseup)=\"focusTreeNode()\">\n <ng-container [ngTemplateOutlet]=\"treenodeContent\"></ng-container>\n </div>\n }\n\n <ng-template #treenodeContent>\n <ng-content></ng-content>\n @if (featuresService.selectable || ariaSelected) {\n <div class=\"clr-sr-only\">\n <span> {{ariaSelected ? commonStrings.keys.selectedTreeNode : commonStrings.keys.unselectedTreeNode}}</span>\n </div>\n }\n </ng-template>\n</div>\n<div\n class=\"clr-treenode-children\"\n [@toggleChildrenAnim]=\"expandService.expanded ? 'expanded' : 'collapsed'\"\n [attr.role]=\"isExpandable() && !featuresService.recursion ? 'group' : null\"\n>\n <ng-content select=\"clr-tree-node\"></ng-content>\n <ng-content select=\"[clrIfExpanded]\"></ng-content>\n <clr-recursive-children [parent]=\"_model\"></clr-recursive-children>\n</div>\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport {\n AfterContentInit,\n Component,\n ContentChildren,\n ElementRef,\n Input,\n NgZone,\n OnDestroy,\n QueryList,\n Renderer2,\n} from '@angular/core';\nimport { fromEvent, Subscription } from 'rxjs';\n\nimport { TREE_FEATURES_PROVIDER, TreeFeaturesService } from './tree-features.service';\nimport { TreeFocusManagerService } from './tree-focus-manager.service';\nimport { ClrTreeNode } from './tree-node';\n\n@Component({\n selector: 'clr-tree',\n template: `\n <ng-content></ng-content>\n @if (featuresService.recursion) {\n <clr-recursive-children [children]=\"featuresService.recursion.root\"></clr-recursive-children>\n }\n `,\n providers: [TREE_FEATURES_PROVIDER, TreeFocusManagerService],\n host: {\n tabindex: '0',\n '[attr.role]': '\"tree\"',\n },\n standalone: false,\n})\nexport class ClrTree<T> implements AfterContentInit, OnDestroy {\n @ContentChildren(ClrTreeNode) private rootNodes: QueryList<ClrTreeNode<T>>;\n\n private subscriptions: Subscription[] = [];\n private _isMultiSelectable = false;\n\n constructor(\n public featuresService: TreeFeaturesService<T>,\n private focusManagerService: TreeFocusManagerService<T>,\n private renderer: Renderer2,\n private el: ElementRef<HTMLElement>,\n ngZone: NgZone\n ) {\n const subscription = ngZone.runOutsideAngular(() =>\n fromEvent(el.nativeElement, 'focusin').subscribe((event: FocusEvent) => {\n if (event.target === el.nativeElement) {\n // After discussing with the team, I've made it so that when the tree receives focus, the first visible node will be focused.\n // This will prevent from the page scrolling abruptly to the first selected node if it exist in a deeply nested tree.\n focusManagerService.focusFirstVisibleNode();\n // when the first child gets focus,\n // tree should no longer have tabindex of 0.\n renderer.removeAttribute(el.nativeElement, 'tabindex');\n }\n })\n );\n\n this.subscriptions.push(subscription);\n }\n\n @Input('clrLazy')\n set lazy(value: boolean) {\n this.featuresService.eager = !value;\n }\n\n get isMultiSelectable() {\n return this._isMultiSelectable;\n }\n\n ngAfterContentInit() {\n this.setRootNodes();\n this.subscriptions.push(\n this.rootNodes.changes.subscribe(() => {\n this.setMultiSelectable();\n\n this.setRootNodes();\n })\n );\n }\n\n ngOnDestroy() {\n this.subscriptions.forEach(sub => sub.unsubscribe());\n }\n\n private setMultiSelectable() {\n if (this.featuresService.selectable && this.rootNodes.length > 0) {\n this._isMultiSelectable = true;\n this.renderer.setAttribute(this.el.nativeElement, 'aria-multiselectable', 'true');\n } else {\n this._isMultiSelectable = false;\n this.renderer.removeAttribute(this.el.nativeElement, 'aria-multiselectable');\n }\n }\n\n private setRootNodes(): void {\n // if node has no parent, it's a root node\n // for recursive tree, this.rootNodes registers also nested children\n // so we have to use filter to extract the ones that are truly root nodes\n this.focusManagerService.rootNodeModels = this.rootNodes.map(node => node._model).filter(node => !node.parent);\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\n// We need to make sure people can give us null or undefined children even if they run strict type checking.\nimport { Observable } from 'rxjs';\n\nexport type AsyncArray<T> =\n | T[]\n | null\n | undefined\n | Promise<T[] | null | undefined>\n | Observable<T[] | null | undefined>;\n\nexport function isPromise<T>(o: AsyncArray<T>): o is Promise<T[]> {\n // Shamelessly copied from every open-source project out there.\n return o && typeof (o as any).then === 'function';\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { isObservable, Subscription } from 'rxjs';\n\nimport { TreeFeaturesService } from '../tree-features.service';\nimport { AsyncArray, isPromise } from './async-array';\nimport { TreeNodeModel } from './tree-node.model';\n\n/*\n * A recursive model is built received from the app and traversed to create the corresponding components.\n * Recursive = Model dictates the tree node components\n */\nexport class RecursiveTreeNodeModel<T> extends TreeNodeModel<T> {\n parent: RecursiveTreeNodeModel<T> | null;\n\n private subscription: Subscription;\n private childrenFetched = false;\n private _children: RecursiveTreeNodeModel<T>[] = [];\n\n constructor(\n model: T,\n parent: RecursiveTreeNodeModel<T> | null,\n private getChildren: (node: T) => AsyncArray<T> | undefined,\n private featuresService: TreeFeaturesService<T> | undefined\n ) {\n super();\n this.model = model;\n this.parent = parent;\n }\n\n get children(): RecursiveTreeNodeModel<T>[] {\n this.fetchChildren();\n return this._children;\n }\n set children(value: RecursiveTreeNodeModel<T>[]) {\n this._children = value;\n }\n\n override destroy() {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n super.destroy();\n }\n\n clearChildren() {\n this._children.forEach(child => child.destroy());\n delete this._children;\n this.childrenFetched = false;\n }\n\n fetchChildren() {\n if (this.childrenFetched) {\n return;\n }\n\n const asyncChildren = this.getChildren(this.model);\n if (isPromise(asyncChildren)) {\n this.loading = true;\n asyncChildren.then(raw => {\n this._children = this.wrapChildren(raw);\n this.loading = false;\n });\n } else if (isObservable(asyncChildren)) {\n this.loading = true;\n this.subscription = asyncChildren.subscribe(raw => {\n this._children = this.wrapChildren(raw);\n this.loading = false;\n });\n } else if (asyncChildren) {\n // Synchronous case\n this._children = this.wrapChildren(asyncChildren);\n } else {\n this._children = [];\n }\n this.childrenFetched = true;\n if (this.featuresService) {\n this.featuresService.childrenFetched.next();\n }\n }\n\n private wrapChildren(rawModels: T[]) {\n return rawModels.map(m => new RecursiveTreeNodeModel(m, this, this.getChildren, this.featuresService));\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { ChangeDetectorRef, Directive, Input, OnChanges, OnDestroy, TemplateRef } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\n\nimport { AsyncArray } from './models/async-array';\nimport { RecursiveTreeNodeModel } from './models/recursive-tree-node.model';\nimport { TreeNodeModel } from './models/tree-node.model';\nimport { TreeFeaturesService } from './tree-features.service';\n\nexport interface ClrRecursiveForOfContext<T> {\n $implicit: T;\n clrModel: TreeNodeModel<T>;\n}\n\n@Directive({\n selector: '[clrRecursiveFor][clrRecursiveForOf]',\n standalone: false,\n})\nexport class ClrRecursiveForOf<T> implements OnChanges, OnDestroy {\n // TODO: accept NgIterable<T>\n @Input('clrRecursiveForOf') nodes: T | T[];\n\n // TODO: accept NgIterable<T> return type\n @Input('clrRecursiveForGetChildren') getChildren: (node: T) => AsyncArray<T>;\n\n private childrenFetchSubscription: Subscription;\n\n constructor(\n private template: TemplateRef<ClrRecursiveForOfContext<T>>,\n private featuresService: TreeFeaturesService<T>,\n private cdr: ChangeDetectorRef\n ) {}\n\n // I'm using OnChanges instead of OnInit to easily keep up to date with dynamic trees. Maybe optimizable later.\n ngOnChanges() {\n let wrapped: RecursiveTreeNodeModel<T>[];\n if (Array.isArray(this.nodes)) {\n wrapped = this.nodes.map(node => new RecursiveTreeNodeModel(node, null, this.getChildren, this.featuresService));\n } else {\n wrapped = [new RecursiveTreeNodeModel(this.nodes, null, this.getChildren, this.featuresService)];\n }\n if (!this.childrenFetchSubscription) {\n this.childrenFetchSubscription = this.featuresService.childrenFetched.pipe(debounceTime(0)).subscribe(() => {\n this.cdr.detectChanges();\n });\n }\n\n this.featuresService.recursion = {\n template: this.template,\n root: wrapped,\n };\n }\n\n ngOnDestroy() {\n if (this.childrenFetchSubscription) {\n this.childrenFetchSubscription.unsubscribe();\n }\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { CommonModule } from '@angular/common';\nimport { NgModule, Type } from '@angular/core';\nimport { angleIcon, ClarityIcons, ClrIcon } from '@clr/angular/icon';\nimport { ClrLoadingModule } from '@clr/angular/utils';\n\nimport { RecursiveChildren } from './recursive-children';\nimport { ClrRecursiveForOf } from './recursive-for-of';\nimport { ClrTree } from './tree';\nimport { ClrTreeNode } from './tree-node';\nimport { ClrTreeNodeLink } from './tree-node-link';\n\nexport const CLR_TREE_VIEW_DIRECTIVES: Type<any>[] = [ClrTree, ClrTreeNode, ClrRecursiveForOf, ClrTreeNodeLink];\n\n@NgModule({\n imports: [CommonModule, ClrIcon, ClrLoadingModule],\n declarations: [CLR_TREE_VIEW_DIRECTIVES, RecursiveChildren],\n exports: [CLR_TREE_VIEW_DIRECTIVES],\n})\nexport class ClrTreeViewModule {\n constructor() {\n ClarityIcons.addIcons(angleIcon);\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nexport * from './models/selected-state.enum';\nexport * from './tree';\nexport * from './tree-node';\nexport * from './recursive-for-of';\nexport * from './tree-view.module';\nexport * from './tree-node-link';\nexport * from './models/tree-node.model';\nexport * from './models/declarative-tree-node.model';\nexport * from './models/recursive-tree-node.model';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.TreeFeaturesService","i3.TreeFocusManagerService","i4","i6.RecursiveChildren","i2.TreeFocusManagerService","i3.RecursiveChildren"],"mappings":"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"}
1
+ {"version":3,"file":"clr-angular-data-tree-view.mjs","sources":["../../../projects/angular/data/tree-view/models/selected-state.enum.ts","../../../projects/angular/data/tree-view/tree-features.service.ts","../../../projects/angular/data/tree-view/tree-focus-manager.service.ts","../../../projects/angular/data/tree-view/models/tree-node.model.ts","../../../projects/angular/data/tree-view/models/declarative-tree-node.model.ts","../../../projects/angular/data/tree-view/tree-node-link.ts","../../../projects/angular/data/tree-view/recursive-children.ts","../../../projects/angular/data/tree-view/tree-node.ts","../../../projects/angular/data/tree-view/tree-node.html","../../../projects/angular/data/tree-view/tree.ts","../../../projects/angular/data/tree-view/models/async-array.ts","../../../projects/angular/data/tree-view/models/recursive-tree-node.model.ts","../../../projects/angular/data/tree-view/recursive-for-of.ts","../../../projects/angular/data/tree-view/tree-view.module.ts","../../../projects/angular/data/tree-view/index.ts","../../../projects/angular/data/tree-view/clr-angular-data-tree-view.ts"],"sourcesContent":["/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\n// TODO: I'd like this to be a CheckedState enum for the checkboxes in the future.\nexport enum ClrSelectedState {\n // WARNING! Unselected has the value 0,\n // so it's actually the only one that will evaluate to false if cast to a boolean.\n // Don't mess with the order!\n UNSELECTED = 0,\n SELECTED,\n INDETERMINATE,\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Injectable, Optional, SkipSelf, TemplateRef } from '@angular/core';\nimport { Subject } from 'rxjs';\n\nimport { RecursiveTreeNodeModel } from './models/recursive-tree-node.model';\nimport { ClrRecursiveForOfContext } from './recursive-for-of';\n\n@Injectable()\nexport class TreeFeaturesService<T> {\n selectable = false;\n eager = true;\n recursion: {\n template: TemplateRef<ClrRecursiveForOfContext<T>>;\n root: RecursiveTreeNodeModel<T>[];\n };\n childrenFetched = new Subject<void>();\n\n /*\n * Internal. Whether a bulk expansion is currently in effect for the whole tree, so that nodes created\n * afterwards (lazy-loaded children, dynamic nodes) come in expanded. See `ClrTree.expandAll()`.\n * Cleared as soon as any node of the tree is collapsed on its own.\n */\n _allExpanded = false;\n}\n\nexport function treeFeaturesFactory<T>(existing: TreeFeaturesService<T>) {\n return existing || new TreeFeaturesService();\n}\n\nexport const TREE_FEATURES_PROVIDER = {\n provide: TreeFeaturesService,\n useFactory: treeFeaturesFactory,\n /*\n * The Optional + SkipSelf pattern ensures that in case of nested components, only the root one will\n * instantiate a new service and all its children will reuse the root's instance.\n * If there are several roots (in this case, several independent trees on a page), each root will instantiate\n * its own service so they won't interfere with one another.\n *\n * TL;DR - Optional + SkipSelf = 1 instance of TreeFeaturesService per tree.\n */\n deps: [[new Optional(), new SkipSelf(), TreeFeaturesService]],\n};\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Injectable } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\n\nimport { TreeNodeModel } from './models/tree-node.model';\n\n@Injectable()\nexport class TreeFocusManagerService<T> {\n rootNodeModels: TreeNodeModel<T>[];\n\n private focusedNodeId: string;\n private _focusRequest = new Subject<string>();\n private _focusChange = new Subject<string>();\n\n get focusRequest(): Observable<string> {\n return this._focusRequest.asObservable();\n }\n\n get focusChange(): Observable<string> {\n return this._focusChange.asObservable();\n }\n\n focusNode(model: TreeNodeModel<T>): void {\n if (model) {\n this._focusRequest.next(model.nodeId);\n }\n }\n\n broadcastFocusedNode(nodeId: string): void {\n if (this.focusedNodeId !== nodeId) {\n this.focusedNodeId = nodeId;\n this._focusChange.next(nodeId);\n }\n }\n\n focusParent(model: TreeNodeModel<T>): void {\n if (model) {\n this.focusNode(model.parent);\n }\n }\n\n focusFirstVisibleNode(): void {\n const focusModel = this.rootNodeModels && this.rootNodeModels[0];\n this.focusNode(focusModel);\n }\n\n focusLastVisibleNode(): void {\n this.focusNode(this.findLastVisibleInTree());\n }\n\n focusNodeAbove(model: TreeNodeModel<T>): void {\n this.focusNode(this.findNodeAbove(model));\n }\n\n focusNodeBelow(model: TreeNodeModel<T>): void {\n this.focusNode(this.findNodeBelow(model));\n }\n\n focusNodeStartsWith(searchString: string, model: TreeNodeModel<T>): void {\n this.focusNode(this.findClosestNodeStartsWith(searchString, model));\n }\n\n private findSiblings(model: TreeNodeModel<T>): TreeNodeModel<T>[] {\n // the method will return not only sibling models but also itself among them\n if (model.parent) {\n return model.parent.children;\n } else {\n return this.rootNodeModels;\n }\n }\n\n private findLastVisibleInNode(model: TreeNodeModel<T>): TreeNodeModel<T> {\n // the method will traverse through until it finds the last visible node from the given node\n if (!model) {\n return null;\n }\n if (model.expanded && model.children.length > 0) {\n const children = model.children;\n const lastChild = children[children.length - 1];\n return this.findLastVisibleInNode(lastChild);\n } else {\n return model;\n }\n }\n\n private findNextFocusable(model: TreeNodeModel<T>): TreeNodeModel<T> {\n if (!model) {\n return null;\n }\n\n const siblings = this.findSiblings(model);\n const selfIndex = siblings.indexOf(model);\n\n if (selfIndex < siblings.length - 1) {\n return siblings[selfIndex + 1];\n } else if (selfIndex === siblings.length - 1) {\n return this.findNextFocusable(model.parent);\n }\n return null;\n }\n\n private findLastVisibleInTree(): TreeNodeModel<T> {\n const lastRootNode =\n this.rootNodeModels && this.rootNodeModels.length && this.rootNodeModels[this.rootNodeModels.length - 1];\n return this.findLastVisibleInNode(lastRootNode);\n }\n\n private findNodeAbove(model: TreeNodeModel<T>): TreeNodeModel<T> {\n if (!model) {\n return null;\n }\n\n const siblings = this.findSiblings(model);\n const selfIndex = siblings.indexOf(model);\n\n if (selfIndex === 0) {\n return model.parent;\n } else if (selfIndex > 0) {\n return this.findLastVisibleInNode(siblings[selfIndex - 1]);\n }\n return null;\n }\n\n private findNodeBelow(model: TreeNodeModel<T>): TreeNodeModel<T> {\n if (!model) {\n return null;\n }\n\n if (model.expanded && model.children.length > 0) {\n return model.children[0];\n } else {\n return this.findNextFocusable(model);\n }\n }\n\n private findDescendentNodeStartsWith(searchString: string, model: TreeNodeModel<T>): TreeNodeModel<T> {\n if (model.expanded && model.children.length > 0) {\n for (const childModel of model.children) {\n const found = this.findNodeStartsWith(searchString, childModel);\n if (found) {\n return found;\n }\n }\n }\n return null;\n }\n\n private findSiblingNodeStartsWith(searchString: string, model: TreeNodeModel<T>): TreeNodeModel<T> {\n const siblings = this.findSiblings(model);\n const selfIndex = siblings.indexOf(model);\n\n // Look from sibling nodes\n for (let i = selfIndex + 1; i < siblings.length; i++) {\n const siblingModel = siblings[i];\n const found = this.findNodeStartsWith(searchString, siblingModel);\n if (found) {\n return found;\n }\n }\n return null;\n }\n\n private findRootNodeStartsWith(searchString: string, model: TreeNodeModel<T>): TreeNodeModel<T> {\n for (const rootModel of this.rootNodeModels) {\n // Don't look from a parent yet\n if (model.parent && model.parent === rootModel) {\n continue;\n }\n\n const found = this.findNodeStartsWith(searchString, rootModel);\n if (found) {\n return found;\n }\n }\n return null;\n }\n\n private findNodeStartsWith(searchString: string, model: TreeNodeModel<T>): TreeNodeModel<T> {\n if (!model) {\n return null;\n }\n\n if (model.textContent.startsWith(searchString)) {\n return model;\n }\n\n return this.findDescendentNodeStartsWith(searchString, model);\n }\n\n private findClosestNodeStartsWith(searchString: string, model: TreeNodeModel<T>): TreeNodeModel<T> {\n if (!model) {\n return null;\n }\n\n const foundFromDescendents = this.findDescendentNodeStartsWith(searchString, model);\n\n if (foundFromDescendents) {\n return foundFromDescendents;\n }\n\n const foundFromSiblings = this.findSiblingNodeStartsWith(searchString, model);\n\n if (foundFromSiblings) {\n return foundFromSiblings;\n }\n\n const foundFromRootNodes = this.findRootNodeStartsWith(searchString, model);\n\n if (foundFromRootNodes) {\n return foundFromRootNodes;\n }\n // Now look from its own direct parent\n return this.findNodeStartsWith(searchString, model.parent);\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { BehaviorSubject } from 'rxjs';\n\nimport type { ClrTreeNode } from '../tree-node';\nimport { ClrSelectedState } from './selected-state.enum';\n\nexport abstract class TreeNodeModel<T> {\n nodeId: string;\n expanded: boolean;\n /*\n * Internal. Whether a bulk expansion is currently in effect for this node's subtree, so that descendants\n * created afterwards (lazy-loaded children, dynamic nodes) come in expanded.\n * Cleared as soon as any node of the subtree is collapsed on its own.\n */\n _descendantsExpanded = false;\n /*\n * Internal, the node rendering this model. Bulk operations walk the model tree and need the node itself,\n * for its expandable state and its animation.\n * Imported as a type only, so the models pull in nothing from the components at runtime.\n */\n _node: ClrTreeNode<T> | null = null;\n model: T | null;\n textContent: string;\n loading$ = new BehaviorSubject(false);\n selected = new BehaviorSubject(ClrSelectedState.UNSELECTED);\n\n /*\n * Being able to push this down to the RecursiveTreeNodeModel would require too much work on the angular components\n * right now for them to know which kind of model they are using. So I'm lifting the public properties to this\n * abstract parent class for now and we can revisit it later, when we're not facing such a close deadline.\n */\n private _loading = false;\n private _disabled: boolean;\n\n /*\n * Ideally, I would like to use a polymorphic this type here to ensure homogeneity of the tree, something like:\n * abstract parent: this<T> | null;\n * abstract children: this<T>[];\n * But I'm hitting limitations on typescript not allowing that type in constructors or static methods.\n * So I'm resorting to forcing override with more precise types by marking these abstract.\n */\n abstract parent: TreeNodeModel<T> | null;\n abstract children: TreeNodeModel<T>[];\n\n get loading() {\n return this._loading;\n }\n set loading(isLoading: boolean) {\n this._loading = isLoading;\n this.loading$.next(isLoading);\n }\n\n /*\n * Internal. The children that are already known, without triggering a lazy fetch.\n */\n get _loadedChildren(): TreeNodeModel<T>[] {\n return this.children;\n }\n\n get disabled() {\n // when both parameters are undefined, double negative is needed to cast to false, otherwise will return undefined.\n return !!(this._disabled || this.parent?.disabled);\n }\n set disabled(value: boolean) {\n this._disabled = value;\n }\n\n destroy() {\n this._node = null;\n // Just to be safe\n this.selected.complete();\n }\n\n /*\n * Internal. Expands or collapses this node and every descendant that is already known.\n * Disabled branches are left untouched and excluded, the same way selection excludes them.\n */\n _setExpandedRecursive(expanded: boolean) {\n if (this.disabled) {\n return;\n }\n if (this._node) {\n this._node._setExpandedInBulk(expanded);\n }\n for (const child of this._loadedChildren) {\n child._setExpandedRecursive(expanded);\n }\n this._descendantsExpanded = expanded;\n }\n\n /*\n * Internal. Whether this node, or one of its ancestors, expects all of its descendants to be expanded.\n */\n _isInExpandedSubtree(): boolean {\n for (let current: TreeNodeModel<T> = this; current; current = current.parent) {\n if (current._descendantsExpanded) {\n return true;\n }\n }\n return false;\n }\n\n // Propagate by default when eager, don't propagate in the lazy-loaded tree.\n setSelected(state: ClrSelectedState, propagateUp: boolean, propagateDown: boolean) {\n if (state === this.selected.value) {\n return;\n }\n this.selected.next(state);\n if (propagateDown && state !== ClrSelectedState.INDETERMINATE && this.children) {\n this.children.forEach(child => {\n if (!child.disabled) {\n child.setSelected(state, false, true);\n }\n });\n }\n if (propagateUp && this.parent) {\n this.parent._updateSelectionFromChildren();\n }\n }\n\n toggleSelection(propagate: boolean) {\n if (this.disabled) {\n return;\n }\n\n // Both unselected and indeterminate toggle to selected\n const newState =\n this.selected.value === ClrSelectedState.SELECTED ? ClrSelectedState.UNSELECTED : ClrSelectedState.SELECTED;\n // NOTE: we always propagate selection up in this method because it is only called when the user takes an action.\n // It should never be called from lifecycle hooks or app-provided inputs.\n this.setSelected(newState, true, propagate);\n }\n\n /*\n * Internal, called when this node is collapsed on its own. No ancestor can still expect its whole subtree\n * to be expanded, so nodes created afterwards must not keep cascading open.\n */\n _clearExpandedSubtree() {\n for (let current: TreeNodeModel<T> = this; current; current = current.parent) {\n current._descendantsExpanded = false;\n }\n }\n\n /*\n * Internal, but needs to be called by other nodes\n */\n _updateSelectionFromChildren() {\n const newState = this.computeSelectionStateFromChildren();\n if (newState === this.selected.value) {\n return;\n }\n this.selected.next(newState);\n if (this.parent) {\n this.parent._updateSelectionFromChildren();\n }\n }\n\n private computeSelectionStateFromChildren() {\n let oneSelected = false;\n let oneUnselected = false;\n // Using a good old for loop to exit as soon as we can tell, for better performance on large trees.\n for (const child of this.children) {\n switch (child.selected.value) {\n case ClrSelectedState.INDETERMINATE:\n if (child.disabled) {\n continue;\n }\n return ClrSelectedState.INDETERMINATE;\n case ClrSelectedState.SELECTED:\n oneSelected = true;\n if (oneUnselected) {\n return ClrSelectedState.INDETERMINATE;\n }\n break;\n case ClrSelectedState.UNSELECTED:\n default:\n // Default is the same as unselected, in case an undefined somehow made it all the way here.\n oneUnselected = true;\n if (oneSelected) {\n return ClrSelectedState.INDETERMINATE;\n }\n break;\n }\n }\n if (!oneSelected) {\n return ClrSelectedState.UNSELECTED;\n } else if (!oneUnselected) {\n return ClrSelectedState.SELECTED;\n } else {\n return ClrSelectedState.UNSELECTED;\n }\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { TreeNodeModel } from './tree-node.model';\n\n/*\n * A declarative model is built by traversing the Angular component tree.\n * Declarative = Tree node components dictate the model\n */\nexport class DeclarativeTreeNodeModel<T> extends TreeNodeModel<T> {\n // Override for a more precise type\n parent: DeclarativeTreeNodeModel<T> | null;\n children: DeclarativeTreeNodeModel<T>[];\n\n constructor(parent: DeclarativeTreeNodeModel<T> | null) {\n super();\n this.parent = parent;\n if (parent) {\n parent._addChild(this);\n }\n this.children = [];\n }\n\n override destroy() {\n if (this.parent) {\n this.parent._removeChild(this);\n }\n super.destroy();\n }\n\n _addChild(child: DeclarativeTreeNodeModel<T>) {\n this.children.push(child);\n }\n\n _removeChild(child: DeclarativeTreeNodeModel<T>) {\n const index = this.children.indexOf(child);\n if (index > -1) {\n this.children.splice(index, 1);\n }\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Directive, ElementRef, HostBinding } from '@angular/core';\n\n@Directive({\n selector: '.clr-treenode-link',\n standalone: false,\n})\nexport class ClrTreeNodeLink {\n // The tree node's content container owns the roving tabindex for the whole treeitem, so\n // the link itself must be removed from the natural tab sequence to avoid a double Tab stop.\n // It remains mouse-clickable and can still be activated programmatically via .click().\n @HostBinding('attr.tabindex') tabindex = -1;\n\n constructor(private el: ElementRef<HTMLElement>) {}\n\n get active() {\n return this.el.nativeElement.classList.contains('active');\n }\n\n activate() {\n if (this.el.nativeElement && this.el.nativeElement.click) {\n this.el.nativeElement.click();\n }\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { Component, Input, Optional } from '@angular/core';\nimport { IfExpandService } from '@clr/angular/utils';\nimport { Subscription } from 'rxjs';\n\nimport { RecursiveTreeNodeModel } from './models/recursive-tree-node.model';\nimport { TreeNodeModel } from './models/tree-node.model';\nimport { ClrRecursiveForOfContext } from './recursive-for-of';\nimport { TreeFeaturesService } from './tree-features.service';\n\n@Component({\n selector: 'clr-recursive-children',\n template: `\n @if (shouldRender()) {\n @for (child of parent?.children || children; track child) {\n <ng-container *ngTemplateOutlet=\"featuresService.recursion.template; context: getContext(child)\"></ng-container>\n }\n }\n `,\n host: {\n '[attr.role]': 'role', // Safari + VO needs direct relationship between treeitem and group; no element should exist between them\n },\n standalone: false,\n})\n/**\n * Internal component, do not export!\n * This is part of the hack to get around https://github.com/angular/angular/issues/15998\n */\nexport class RecursiveChildren<T> {\n // Offering the option to either give the parent node to recurse potentially lazily,\n // or directly the list of children to display.\n @Input('parent') parent: TreeNodeModel<T>;\n @Input('children') children: TreeNodeModel<T>[];\n\n subscription: Subscription;\n role: string;\n\n // One context object per node: a new object on every change detection pass would make ngTemplateOutlet\n // run ngOnChanges and rewrite the context of every node on every pass.\n private contexts = new WeakMap<TreeNodeModel<T>, ClrRecursiveForOfContext<T>>();\n\n constructor(\n public featuresService: TreeFeaturesService<T>,\n @Optional() private expandService: IfExpandService\n ) {\n if (expandService) {\n this.subscription = expandService.expandChange.subscribe(value => {\n if (!value && this.parent && !featuresService.eager && featuresService.recursion) {\n // In the case of lazy-loading recursive trees, we clear the children on collapse.\n // This is better in case they change between two user interaction, and that way\n // the app itself can decide whether to cache them or not.\n (this.parent as RecursiveTreeNodeModel<T>).clearChildren();\n }\n });\n }\n }\n\n ngAfterContentInit() {\n this.setAriaRoles();\n }\n\n shouldRender() {\n return (\n this.featuresService.recursion &&\n // In the smart case, we eagerly render all the recursive children\n // to make sure two-way bindings for selection are available.\n // They will be hidden with CSS by the parent.\n (this.featuresService.eager || !this.expandService || this.expandService.expanded)\n );\n }\n\n getContext(node: TreeNodeModel<T>): ClrRecursiveForOfContext<T> {\n let context = this.contexts.get(node);\n if (!context) {\n context = {\n // Read through, so the context keeps following the node if its model gets reassigned.\n get $implicit() {\n return node.model;\n },\n clrModel: node,\n };\n this.contexts.set(node, context);\n }\n return context;\n }\n\n ngOnDestroy() {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n\n private setAriaRoles() {\n this.role = this.parent ? 'group' : null;\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { animate, state, style, transition, trigger } from '@angular/animations';\nimport { isPlatformBrowser } from '@angular/common';\nimport {\n AfterContentInit,\n AfterViewInit,\n Component,\n ContentChildren,\n ElementRef,\n EventEmitter,\n Inject,\n Injector,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n PLATFORM_ID,\n QueryList,\n SkipSelf,\n ViewChild,\n} from '@angular/core';\nimport {\n ClrCommonStringsService,\n IfExpandService,\n isKeyEitherLetterOrNumber,\n Keys,\n LoadingListener,\n preventArrowKeyScroll,\n uniqueIdFactory,\n} from '@clr/angular/utils';\nimport { asapScheduler, Subject, Subscription } from 'rxjs';\nimport { debounceTime, filter, skip } from 'rxjs/operators';\n\nimport { DeclarativeTreeNodeModel } from './models/declarative-tree-node.model';\nimport { ClrSelectedState } from './models/selected-state.enum';\nimport { TreeNodeModel } from './models/tree-node.model';\nimport { TREE_FEATURES_PROVIDER, TreeFeaturesService } from './tree-features.service';\nimport { TreeFocusManagerService } from './tree-focus-manager.service';\nimport { ClrTreeNodeLink } from './tree-node-link';\n\nconst LVIEW_CONTEXT_INDEX = 8;\n\n// If the user types multiple keys without allowing 200ms to pass between them,\n// then those keys are sent together in one request.\nconst TREE_TYPE_AHEAD_TIMEOUT = 200;\n\n@Component({\n selector: 'clr-tree-node',\n templateUrl: './tree-node.html',\n providers: [TREE_FEATURES_PROVIDER, IfExpandService, { provide: LoadingListener, useExisting: IfExpandService }],\n animations: [\n trigger('toggleChildrenAnim', [\n // The \"instant\" states are used by bulk operations (expand all, expand descendants): they have the same\n // styles but no transition leads to them, so hundreds of nested containers don't animate at once.\n transition('collapsed => expanded, collapsedInstant => expanded', [\n // The animation starts from the collapsed state's styles, so the children must be made visible explicitly.\n style({ height: 0, 'content-visibility': 'visible' }),\n animate(200, style({ height: '*', 'content-visibility': 'visible' })),\n ]),\n transition('expanded => collapsed, expandedInstant => collapsed', [\n style({ height: '*' }),\n animate(200, style({ height: 0 })),\n ]),\n state('expanded, expandedInstant', style({ height: '*', 'overflow-y': 'visible' })),\n // Once collapsed, the browser skips the style, layout and paint of the whole subtree. The state style only\n // applies when the collapse animation is over, so the children stay painted while they slide out; they are\n // inert from the start (see the template), so they cannot be reached in the meantime.\n state('collapsed, collapsedInstant', style({ height: 0, 'content-visibility': 'hidden' })),\n ]),\n ],\n host: {\n '[class.clr-tree-node]': 'true',\n '[class.disabled]': 'this._model.disabled',\n },\n standalone: false,\n})\nexport class ClrTreeNode<T> implements OnInit, AfterContentInit, AfterViewInit, OnDestroy {\n // Allows the consumer to override our logic deciding if a node is expandable.\n // Useful for recursive trees that don't want to pre-load one level ahead just to know which nodes are expandable.\n @Input('clrExpandable') expandable: boolean | undefined;\n\n @Output('clrSelectedChange') selectedChange = new EventEmitter<ClrSelectedState>(false);\n @Output('clrExpandedChange') expandedChange = new EventEmitter<boolean>();\n\n STATES = ClrSelectedState;\n isModelLoading = false;\n nodeId = uniqueIdFactory();\n contentContainerTabindex = -1;\n _model: TreeNodeModel<T>;\n\n private bulkChange = false;\n private skipAnimation = false;\n private skipEmitChange = false;\n private typeAheadKeyBuffer = '';\n private typeAheadKeyEvent = new Subject<string>();\n private subscriptions: Subscription[] = [];\n\n @ViewChild('contentContainer', { read: ElementRef, static: true }) private contentContainer: ElementRef<HTMLElement>;\n\n // @ContentChild would have been more succinct\n // but it doesn't offer a way to query only an immediate child\n @ContentChildren(ClrTreeNodeLink, { descendants: false }) private treeNodeLinkList: QueryList<ClrTreeNodeLink>;\n\n constructor(\n @Inject(PLATFORM_ID) private platformId: any,\n @Optional()\n @SkipSelf()\n parent: ClrTreeNode<T>,\n public featuresService: TreeFeaturesService<T>,\n public expandService: IfExpandService,\n public commonStrings: ClrCommonStringsService,\n private focusManager: TreeFocusManagerService<T>,\n private elementRef: ElementRef<HTMLElement>,\n injector: Injector\n ) {\n if (featuresService.recursion) {\n // I'm completely stuck, we have to hack into private properties until either\n // https://github.com/angular/angular/issues/14935 or https://github.com/angular/angular/issues/15998\n // are fixed\n // This is for non-ivy implementations\n if ((injector as any).view) {\n this._model = (injector as any).view.context.clrModel;\n } else {\n // Ivy puts this on a specific index of a _lView property\n this._model = (injector as any)._lView[LVIEW_CONTEXT_INDEX].clrModel;\n }\n } else {\n // Force cast for now, not sure how to tie the correct type here to featuresService.recursion\n this._model = new DeclarativeTreeNodeModel(parent ? (parent._model as DeclarativeTreeNodeModel<T>) : null);\n }\n this._model.nodeId = this.nodeId;\n this._model._node = this;\n }\n\n @Input('clrDisabled')\n get disabled(): boolean {\n return this._model.disabled;\n }\n set disabled(value: boolean) {\n this._model.disabled = value;\n }\n\n @Input('clrSelected')\n get selected(): ClrSelectedState | boolean {\n return this._model.selected.value;\n }\n set selected(value: ClrSelectedState | boolean) {\n this.featuresService.selectable = true;\n // Gracefully handle falsy states like null or undefined because it's just easier than answering questions.\n // This shouldn't happen with strict typing on the app's side, but it's not up to us.\n if (value === null || typeof value === 'undefined') {\n value = ClrSelectedState.UNSELECTED;\n }\n // We match booleans to the corresponding ClrSelectedState\n if (typeof value === 'boolean') {\n value = value ? ClrSelectedState.SELECTED : ClrSelectedState.UNSELECTED;\n }\n // We propagate only if the tree is in smart mode, and skip emitting the output when we set the input\n // See https://github.com/vmware/clarity/issues/3073\n this.skipEmitChange = true;\n this._model.setSelected(value, this.featuresService.eager, this.featuresService.eager);\n this.skipEmitChange = false;\n }\n\n // I'm caving on this, for tree nodes I think we can tolerate having a two-way binding on the component\n // rather than enforce the clrIfExpanded structural directive for dynamic cases. Mostly because for the smart\n // case, you can't use a structural directive, it would need to go on an ng-container.\n @Input('clrExpanded')\n get expanded(): boolean {\n return this.expandService.expanded;\n }\n set expanded(value: boolean) {\n this.expandService.expanded = value;\n }\n\n @Input('clrForTypeAhead')\n set clrForTypeAhead(value: string) {\n this._model.textContent = trimAndLowerCase(value || this.elementRef.nativeElement.textContent);\n }\n\n get ariaSelected(): boolean {\n if (this.isSelectable()) {\n return this._model.selected.value === ClrSelectedState.SELECTED;\n } else if (this.treeNodeLink?.active) {\n return true;\n } else {\n return null;\n }\n }\n\n get treeNodeLink() {\n return this.treeNodeLinkList && this.treeNodeLinkList.first;\n }\n\n get childrenAnimationState(): string {\n if (this.expandService.expanded) {\n return this.skipAnimation ? 'expandedInstant' : 'expanded';\n }\n return this.skipAnimation ? 'collapsedInstant' : 'collapsed';\n }\n\n private get isParent() {\n return this._model.children && this._model.children.length > 0;\n }\n\n ngOnInit() {\n this._model.expanded = this.expanded;\n this._model.disabled = this.disabled;\n this.subscriptions.push(\n this._model.selected.pipe(filter(() => !this.skipEmitChange)).subscribe(value => {\n this.selectedChange.emit(value);\n })\n );\n this.subscriptions.push(\n this.expandService.expandChange.subscribe(value => {\n this.skipAnimation = this.bulkChange;\n this.expandedChange.emit(value);\n this._model.expanded = value;\n if (!this.bulkChange && !value) {\n // Collapsed on its own, so nothing above can still expect its whole subtree to be expanded and\n // nodes created afterwards must not keep cascading open.\n this._model._clearExpandedSubtree();\n this.featuresService._allExpanded = false;\n }\n })\n );\n this.subscriptions.push(\n this.focusManager.focusRequest.subscribe(nodeId => {\n if (this.nodeId === nodeId) {\n this.focusTreeNode();\n }\n }),\n this.focusManager.focusChange.subscribe(nodeId => {\n this.checkTabIndex(nodeId);\n })\n );\n\n // The loading state can flip in the middle of a change detection pass (a lazy fetch starts when the template\n // reads the children), so it is applied in a microtask rather than synchronously. Using a macrotask timer here\n // would schedule one timer per node when a large tree gets created, and one extra change detection pass per\n // fetched node in lazy trees. The current value is read directly instead of debouncing the replayed initial one.\n this.isModelLoading = this._model.loading;\n this.subscriptions.push(\n this._model.loading$\n .pipe(skip(1), debounceTime(0, asapScheduler))\n .subscribe(isLoading => (this.isModelLoading = isLoading))\n );\n }\n\n ngAfterContentInit() {\n // Nodes created while everything above them is expected to be expanded (lazy-loaded children, dynamic\n // nodes) come in expanded. Children are only known at this point, not in ngOnInit, which is why the check\n // happens here. This is a continuation of the bulk operation, not a toggle of its own, so it goes through\n // the same path: no animation, and the cascade keeps going for this node's own descendants.\n if (\n !this.expanded &&\n (this.featuresService._allExpanded || this._model._isInExpandedSubtree()) &&\n !this.disabled &&\n this.isExpandable()\n ) {\n this._setExpandedInBulk(true);\n this._model._descendantsExpanded = true;\n }\n this.subscriptions.push(\n this.typeAheadKeyEvent.pipe(debounceTime(TREE_TYPE_AHEAD_TIMEOUT)).subscribe((bufferedKeys: string) => {\n this.focusManager.focusNodeStartsWith(bufferedKeys, this._model);\n // reset once bufferedKeys are used\n this.typeAheadKeyBuffer = '';\n })\n );\n }\n\n ngAfterViewInit() {\n if (!this._model.textContent) {\n this._model.textContent = trimAndLowerCase(this.elementRef.nativeElement.textContent);\n }\n }\n\n ngOnDestroy() {\n this._model.destroy();\n this.subscriptions.forEach(sub => sub.unsubscribe());\n }\n\n isExpandable() {\n if (typeof this.expandable !== 'undefined') {\n return this.expandable;\n }\n return !!this.expandService.expandable || this.isParent;\n }\n\n isSelectable() {\n return this.featuresService.selectable;\n }\n\n /**\n * Expands this node and every expandable node below it, without animation. Disabled nodes are left untouched.\n * Descendants added afterwards, including lazy-loaded children, come in expanded until any node of the subtree\n * gets collapsed.\n */\n expandDescendants() {\n this._model._setExpandedRecursive(true);\n }\n\n /**\n * Collapses this node and every node below it, without animation. Disabled nodes are left untouched.\n */\n collapseDescendants() {\n this._model._setExpandedRecursive(false);\n this.reclaimTabStop();\n }\n\n /*\n * Internal, called while the model tree is walked during a bulk operation.\n */\n _setExpandedInBulk(expanded: boolean) {\n // Leaves are left alone when expanding, so that they don't emit a meaningless clrExpandedChange.\n if (expanded && !this.isExpandable()) {\n return;\n }\n this.bulkChange = true;\n try {\n // Consumers run synchronously on clrExpandedChange from here, so the flag is restored even if they throw.\n this.expandService.expanded = expanded;\n } finally {\n this.bulkChange = false;\n }\n }\n\n /*\n * Internal. Takes over the tree's single tab stop without moving focus, so that a collapse cannot leave it\n * on a node that is now hidden.\n */\n _takeTabStop() {\n this.setTabIndex(0);\n this.focusManager.broadcastFocusedNode(this.nodeId);\n }\n\n focusTreeNode(): void {\n if (!isPlatformBrowser(this.platformId)) {\n return;\n }\n const containerEl = this.contentContainer.nativeElement;\n this.setTabIndex(0);\n if (document.activeElement !== containerEl) {\n this.focusManager.broadcastFocusedNode(this.nodeId);\n containerEl.focus();\n containerEl.scrollIntoView({ block: 'nearest', inline: 'nearest' });\n }\n }\n\n broadcastFocusOnContainer() {\n this.focusManager.broadcastFocusedNode(this.nodeId);\n }\n\n onKeyDown(event: KeyboardEvent) {\n // Two reasons to prevent default behavior:\n // 1. to prevent scrolling on arrow keys\n // 2. Assistive Technology focus differs from Keyboard focus behavior.\n // By default, pressing arrow key makes AT focus go into the nested content of the item.\n preventArrowKeyScroll(event);\n\n // https://www.w3.org/TR/wai-aria-practices-1.1/#keyboard-interaction-22\n switch (event.key) {\n case Keys.ArrowUp:\n this.focusManager.focusNodeAbove(this._model);\n break;\n case Keys.ArrowDown:\n this.focusManager.focusNodeBelow(this._model);\n break;\n case Keys.ArrowRight:\n this.expandOrFocusFirstChild();\n break;\n case Keys.ArrowLeft:\n this.collapseOrFocusParent();\n break;\n case Keys.Home:\n event.preventDefault();\n this.focusManager.focusFirstVisibleNode();\n break;\n case Keys.End:\n event.preventDefault();\n this.focusManager.focusLastVisibleNode();\n break;\n case Keys.Enter:\n this.toggleExpandOrTriggerDefault();\n break;\n case Keys.Space:\n case Keys.Spacebar:\n // to prevent scrolling on space key in this specific case\n event.preventDefault();\n this.toggleExpandOrTriggerDefault();\n break;\n default:\n if (this._model.textContent && isKeyEitherLetterOrNumber(event)) {\n this.typeAheadKeyBuffer += event.key;\n this.typeAheadKeyEvent.next(this.typeAheadKeyBuffer);\n return;\n }\n break;\n }\n\n // if non-letter keys are pressed, do reset.\n this.typeAheadKeyBuffer = '';\n }\n\n /*\n * A collapsed subtree is made inert, so the tree's single tab stop must not be left inside the one that was\n * just collapsed: the tree host gives up its own tabindex the first time it is focused, which would leave the\n * whole tree unreachable by keyboard. This node is still visible, so it takes the tab stop over.\n */\n private reclaimTabStop() {\n const stranded = this.elementRef.nativeElement.querySelector(\n '.clr-treenode-children .clr-tree-node-content-container[tabindex=\"0\"]'\n );\n if (stranded) {\n this._takeTabStop();\n }\n }\n\n private setTabIndex(value: number) {\n this.contentContainerTabindex = value;\n this.contentContainer.nativeElement.setAttribute('tabindex', value.toString());\n }\n\n private checkTabIndex(nodeId: string): void {\n if (isPlatformBrowser(this.platformId) && this.nodeId !== nodeId && this.contentContainerTabindex !== -1) {\n this.setTabIndex(-1);\n }\n }\n\n private toggleExpandOrTriggerDefault() {\n if (this.disabled) {\n return;\n }\n\n if (this.isExpandable() && !this.isSelectable()) {\n this.expandService.expanded = !this.expanded;\n } else {\n this.triggerDefaultAction();\n }\n }\n\n private expandOrFocusFirstChild() {\n if (this.disabled) {\n return;\n }\n\n if (this.expanded) {\n // if the node is already expanded and has children, focus its very first child\n if (this.isParent) {\n this.focusManager.focusNodeBelow(this._model);\n }\n } else {\n // we must check if the node is expandable, in order to set .expanded to true from false\n // because we shouldn't set .expanded to true if it's not expandable node\n if (this.isExpandable()) {\n this.expandService.expanded = true;\n }\n }\n }\n\n private collapseOrFocusParent() {\n if (this.disabled) {\n return;\n }\n\n if (this.expanded) {\n this.expandService.expanded = false;\n } else {\n this.focusManager.focusParent(this._model);\n }\n }\n\n private triggerDefaultAction() {\n if (this.treeNodeLink) {\n this.treeNodeLink.activate();\n } else {\n if (this.isSelectable()) {\n this._model.toggleSelection(this.featuresService.eager);\n }\n }\n }\n}\n\nfunction trimAndLowerCase(value: string) {\n return value.toLocaleLowerCase().trim();\n}\n","<!--\n ~ Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n ~ This software is released under MIT license.\n ~ The full license information can be found in LICENSE in the root directory of this project.\n -->\n\n<div\n #contentContainer\n role=\"treeitem\"\n class=\"clr-tree-node-content-container\"\n tabindex=\"-1\"\n [class.clr-form-control-disabled]=\"disabled\"\n [attr.aria-disabled]=\"disabled\"\n [attr.aria-expanded]=\"isExpandable() ? expanded : null\"\n [attr.aria-selected]=\"ariaSelected\"\n (keydown)=\"onKeyDown($event)\"\n (focus)=\"broadcastFocusOnContainer()\"\n>\n @if (isExpandable() && !isModelLoading && !expandService.loading) {\n <button\n aria-hidden=\"true\"\n type=\"button\"\n tabindex=\"-1\"\n class=\"clr-treenode-caret\"\n (click)=\"expandService.toggle();\"\n (focus)=\"focusTreeNode()\"\n [disabled]=\"disabled\"\n >\n <cds-icon\n class=\"clr-treenode-caret-icon\"\n shape=\"angle\"\n [direction]=\"expandService.expanded ? 'down' : 'right'\"\n ></cds-icon>\n </button>\n } @if (expandService.loading || isModelLoading) {\n <div class=\"clr-treenode-spinner-container\">\n <span class=\"clr-treenode-spinner spinner\"></span>\n </div>\n } @if (featuresService.selectable) {\n <div class=\"clr-checkbox-wrapper clr-treenode-checkbox\">\n <input\n aria-hidden=\"true\"\n type=\"checkbox\"\n [id]=\"nodeId + '-check'\"\n class=\"clr-checkbox\"\n [disabled]=\"disabled\"\n [checked]=\"_model.selected.value === STATES.SELECTED\"\n [indeterminate]=\"_model.selected.value === STATES.INDETERMINATE\"\n (change)=\"_model.toggleSelection(featuresService.eager)\"\n (focus)=\"focusTreeNode()\"\n tabindex=\"-1\"\n />\n <label [for]=\"nodeId + '-check'\" class=\"clr-control-label\">\n <ng-container [ngTemplateOutlet]=\"treenodeContent\"></ng-container>\n </label>\n </div>\n } @if (!featuresService.selectable) {\n <div class=\"clr-treenode-content\" (mouseup)=\"focusTreeNode()\">\n <ng-container [ngTemplateOutlet]=\"treenodeContent\"></ng-container>\n </div>\n }\n\n <ng-template #treenodeContent>\n <ng-content></ng-content>\n @if (featuresService.selectable || ariaSelected) {\n <div class=\"clr-sr-only\">\n <span> {{ariaSelected ? commonStrings.keys.selectedTreeNode : commonStrings.keys.unselectedTreeNode}}</span>\n </div>\n }\n </ng-template>\n</div>\n<div\n class=\"clr-treenode-children\"\n [@toggleChildrenAnim]=\"childrenAnimationState\"\n [attr.role]=\"isExpandable() && !featuresService.recursion ? 'group' : null\"\n [attr.inert]=\"expandService.expanded ? null : ''\"\n>\n <ng-content select=\"clr-tree-node\"></ng-content>\n <ng-content select=\"[clrIfExpanded]\"></ng-content>\n <clr-recursive-children [parent]=\"_model\"></clr-recursive-children>\n</div>\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport {\n AfterContentInit,\n Component,\n ContentChildren,\n ElementRef,\n Input,\n NgZone,\n OnDestroy,\n QueryList,\n Renderer2,\n} from '@angular/core';\nimport { fromEvent, Subscription } from 'rxjs';\n\nimport { TreeNodeModel } from './models/tree-node.model';\nimport { TREE_FEATURES_PROVIDER, TreeFeaturesService } from './tree-features.service';\nimport { TreeFocusManagerService } from './tree-focus-manager.service';\nimport { ClrTreeNode } from './tree-node';\n\n@Component({\n selector: 'clr-tree',\n template: `\n <ng-content></ng-content>\n @if (featuresService.recursion) {\n <clr-recursive-children [children]=\"featuresService.recursion.root\"></clr-recursive-children>\n }\n `,\n providers: [TREE_FEATURES_PROVIDER, TreeFocusManagerService],\n host: {\n tabindex: '0',\n '[attr.role]': '\"tree\"',\n },\n standalone: false,\n})\nexport class ClrTree<T> implements AfterContentInit, OnDestroy {\n @ContentChildren(ClrTreeNode) private rootNodes: QueryList<ClrTreeNode<T>>;\n\n private rootModels: TreeNodeModel<T>[] = [];\n private subscriptions: Subscription[] = [];\n private _isMultiSelectable = false;\n\n constructor(\n public featuresService: TreeFeaturesService<T>,\n private focusManagerService: TreeFocusManagerService<T>,\n private renderer: Renderer2,\n private el: ElementRef<HTMLElement>,\n ngZone: NgZone\n ) {\n const subscription = ngZone.runOutsideAngular(() =>\n fromEvent(el.nativeElement, 'focusin').subscribe((event: FocusEvent) => {\n if (event.target === el.nativeElement) {\n // After discussing with the team, I've made it so that when the tree receives focus, the first visible node will be focused.\n // This will prevent from the page scrolling abruptly to the first selected node if it exist in a deeply nested tree.\n focusManagerService.focusFirstVisibleNode();\n // when the first child gets focus,\n // tree should no longer have tabindex of 0.\n renderer.removeAttribute(el.nativeElement, 'tabindex');\n }\n })\n );\n\n this.subscriptions.push(subscription);\n }\n\n @Input('clrLazy')\n set lazy(value: boolean) {\n this.featuresService.eager = !value;\n }\n\n get isMultiSelectable() {\n return this._isMultiSelectable;\n }\n\n ngAfterContentInit() {\n this.setRootNodes();\n this.subscriptions.push(\n this.rootNodes.changes.subscribe(() => {\n this.setMultiSelectable();\n\n this.setRootNodes();\n })\n );\n }\n\n ngOnDestroy() {\n this.subscriptions.forEach(sub => sub.unsubscribe());\n }\n\n /**\n * Expands every expandable node of the tree, without animation. Disabled nodes are left untouched.\n * Nodes added to the tree afterwards, including lazy-loaded children, come in expanded until any node gets collapsed.\n */\n expandAll() {\n this.setAllExpanded(true);\n }\n\n /**\n * Collapses every node of the tree, without animation. Disabled nodes are left untouched.\n */\n collapseAll() {\n this.setAllExpanded(false);\n }\n\n private setAllExpanded(expanded: boolean) {\n this.featuresService._allExpanded = expanded;\n this.rootModels.forEach(model => model._setExpandedRecursive(expanded));\n if (!expanded) {\n this.reclaimTabStop();\n }\n }\n\n /*\n * A collapsed subtree is made inert, so the tree's single tab stop must not be left inside one: the host\n * gives up its own tabindex the first time it is focused, which would leave the whole tree unreachable by\n * keyboard. Only the roots stay visible after a collapse, so the first one takes the tab stop over.\n */\n private reclaimTabStop() {\n const stranded = this.el.nativeElement.querySelector(\n '.clr-treenode-children .clr-tree-node-content-container[tabindex=\"0\"]'\n );\n if (stranded) {\n const firstRoot = this.rootNodes.find(node => !node._model.parent);\n if (firstRoot) {\n firstRoot._takeTabStop();\n }\n }\n }\n\n private setMultiSelectable() {\n if (this.featuresService.selectable && this.rootNodes.length > 0) {\n this._isMultiSelectable = true;\n this.renderer.setAttribute(this.el.nativeElement, 'aria-multiselectable', 'true');\n } else {\n this._isMultiSelectable = false;\n this.renderer.removeAttribute(this.el.nativeElement, 'aria-multiselectable');\n }\n }\n\n private setRootNodes(): void {\n // if node has no parent, it's a root node\n // for recursive tree, this.rootNodes registers also nested children\n // so we have to use filter to extract the ones that are truly root nodes\n this.rootModels = this.rootNodes.map(node => node._model).filter(node => !node.parent);\n this.focusManagerService.rootNodeModels = this.rootModels;\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\n// We need to make sure people can give us null or undefined children even if they run strict type checking.\nimport { Observable } from 'rxjs';\n\nexport type AsyncArray<T> =\n T[] | null | undefined | Promise<T[] | null | undefined> | Observable<T[] | null | undefined>;\n\nexport function isPromise<T>(o: AsyncArray<T>): o is Promise<T[]> {\n // Shamelessly copied from every open-source project out there.\n return o && typeof (o as any).then === 'function';\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { isObservable, Subscription } from 'rxjs';\n\nimport { TreeFeaturesService } from '../tree-features.service';\nimport { AsyncArray, isPromise } from './async-array';\nimport { TreeNodeModel } from './tree-node.model';\n\n/*\n * A recursive model is built received from the app and traversed to create the corresponding components.\n * Recursive = Model dictates the tree node components\n */\nexport class RecursiveTreeNodeModel<T> extends TreeNodeModel<T> {\n parent: RecursiveTreeNodeModel<T> | null;\n\n private subscription: Subscription;\n private childrenFetched = false;\n private _children: RecursiveTreeNodeModel<T>[] = [];\n\n constructor(\n model: T,\n parent: RecursiveTreeNodeModel<T> | null,\n private getChildren: (node: T) => AsyncArray<T> | undefined,\n private featuresService: TreeFeaturesService<T> | undefined\n ) {\n super();\n this.model = model;\n this.parent = parent;\n }\n\n get children(): RecursiveTreeNodeModel<T>[] {\n this.fetchChildren();\n return this._children;\n }\n set children(value: RecursiveTreeNodeModel<T>[]) {\n this._children = value;\n }\n\n override get _loadedChildren(): RecursiveTreeNodeModel<T>[] {\n return this._children || [];\n }\n\n override destroy() {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n super.destroy();\n }\n\n clearChildren() {\n this._children.forEach(child => child.destroy());\n delete this._children;\n this.childrenFetched = false;\n }\n\n fetchChildren() {\n if (this.childrenFetched) {\n return;\n }\n\n const asyncChildren = this.getChildren(this.model);\n if (isPromise(asyncChildren)) {\n this.loading = true;\n asyncChildren.then(raw => {\n this._children = this.wrapChildren(raw);\n this.loading = false;\n });\n } else if (isObservable(asyncChildren)) {\n this.loading = true;\n this.subscription = asyncChildren.subscribe(raw => {\n this._children = this.wrapChildren(raw);\n this.loading = false;\n });\n } else if (asyncChildren) {\n // Synchronous case\n this._children = this.wrapChildren(asyncChildren);\n } else {\n this._children = [];\n }\n this.childrenFetched = true;\n if (this.featuresService) {\n this.featuresService.childrenFetched.next();\n }\n }\n\n private wrapChildren(rawModels: T[] | null | undefined) {\n return (rawModels || []).map(m => new RecursiveTreeNodeModel(m, this, this.getChildren, this.featuresService));\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { ChangeDetectorRef, Directive, Input, OnChanges, OnDestroy, TemplateRef } from '@angular/core';\nimport { asapScheduler, Subscription } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\n\nimport { AsyncArray } from './models/async-array';\nimport { RecursiveTreeNodeModel } from './models/recursive-tree-node.model';\nimport { TreeNodeModel } from './models/tree-node.model';\nimport { TreeFeaturesService } from './tree-features.service';\n\nexport interface ClrRecursiveForOfContext<T> {\n $implicit: T;\n clrModel: TreeNodeModel<T>;\n}\n\n@Directive({\n selector: '[clrRecursiveFor][clrRecursiveForOf]',\n standalone: false,\n})\nexport class ClrRecursiveForOf<T> implements OnChanges, OnDestroy {\n // TODO: accept NgIterable<T>\n @Input('clrRecursiveForOf') nodes: T | T[];\n\n // TODO: accept NgIterable<T> return type\n @Input('clrRecursiveForGetChildren') getChildren: (node: T) => AsyncArray<T>;\n\n private childrenFetchSubscription: Subscription;\n\n constructor(\n private template: TemplateRef<ClrRecursiveForOfContext<T>>,\n private featuresService: TreeFeaturesService<T>,\n private cdr: ChangeDetectorRef\n ) {}\n\n // I'm using OnChanges instead of OnInit to easily keep up to date with dynamic trees. Maybe optimizable later.\n ngOnChanges() {\n let wrapped: RecursiveTreeNodeModel<T>[];\n if (Array.isArray(this.nodes)) {\n wrapped = this.nodes.map(node => new RecursiveTreeNodeModel(node, null, this.getChildren, this.featuresService));\n } else {\n wrapped = [new RecursiveTreeNodeModel(this.nodes, null, this.getChildren, this.featuresService)];\n }\n if (!this.childrenFetchSubscription) {\n // Children fetched synchronously while the tree renders are picked up once, in a microtask,\n // instead of one macrotask timer (and its own change detection pass) per node.\n this.childrenFetchSubscription = this.featuresService.childrenFetched\n .pipe(debounceTime(0, asapScheduler))\n .subscribe(() => {\n this.cdr.detectChanges();\n });\n }\n\n this.featuresService.recursion = {\n template: this.template,\n root: wrapped,\n };\n }\n\n ngOnDestroy() {\n if (this.childrenFetchSubscription) {\n this.childrenFetchSubscription.unsubscribe();\n }\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { CommonModule } from '@angular/common';\nimport { NgModule, Type } from '@angular/core';\nimport { angleIcon, ClarityIcons, ClrIcon } from '@clr/angular/icon';\nimport { ClrLoadingModule } from '@clr/angular/utils';\n\nimport { RecursiveChildren } from './recursive-children';\nimport { ClrRecursiveForOf } from './recursive-for-of';\nimport { ClrTree } from './tree';\nimport { ClrTreeNode } from './tree-node';\nimport { ClrTreeNodeLink } from './tree-node-link';\n\nexport const CLR_TREE_VIEW_DIRECTIVES: Type<any>[] = [ClrTree, ClrTreeNode, ClrRecursiveForOf, ClrTreeNodeLink];\n\n@NgModule({\n imports: [CommonModule, ClrIcon, ClrLoadingModule],\n declarations: [CLR_TREE_VIEW_DIRECTIVES, RecursiveChildren],\n exports: [CLR_TREE_VIEW_DIRECTIVES],\n})\nexport class ClrTreeViewModule {\n constructor() {\n ClarityIcons.addIcons(angleIcon);\n }\n}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nexport * from './models/selected-state.enum';\nexport * from './tree';\nexport * from './tree-node';\nexport * from './recursive-for-of';\nexport * from './tree-view.module';\nexport * from './tree-node-link';\nexport * from './models/tree-node.model';\nexport * from './models/declarative-tree-node.model';\nexport * from './models/recursive-tree-node.model';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.TreeFeaturesService","i3.TreeFocusManagerService","i4","i6.RecursiveChildren","i2.TreeFocusManagerService","i3.RecursiveChildren"],"mappings":"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"}
@@ -14,11 +14,11 @@ export * from '@clr/angular/data/tree-view';
14
14
  * The full license information can be found in LICENSE in the root directory of this project.
15
15
  */
16
16
  class ClrDataModule {
17
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: ClrDataModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
18
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.1.3", ngImport: i0, type: ClrDataModule, exports: [ClrDatagridModule, ClrStackViewModule, ClrTreeViewModule] }); }
19
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: ClrDataModule, imports: [ClrDatagridModule, ClrStackViewModule, ClrTreeViewModule] }); }
17
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: ClrDataModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
18
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.2.25", ngImport: i0, type: ClrDataModule, exports: [ClrDatagridModule, ClrStackViewModule, ClrTreeViewModule] }); }
19
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: ClrDataModule, imports: [ClrDatagridModule, ClrStackViewModule, ClrTreeViewModule] }); }
20
20
  }
21
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: ClrDataModule, decorators: [{
21
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: ClrDataModule, decorators: [{
22
22
  type: NgModule,
23
23
  args: [{
24
24
  exports: [ClrDatagridModule, ClrStackViewModule, ClrTreeViewModule],
@@ -1 +1 @@
1
- {"version":3,"file":"clr-angular-data.mjs","sources":["../../../projects/angular/data/data.module.ts","../../../projects/angular/data/index.ts","../../../projects/angular/data/clr-angular-data.ts"],"sourcesContent":["/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { NgModule } from '@angular/core';\nimport { ClrDatagridModule } from '@clr/angular/data/datagrid';\nimport { ClrStackViewModule } from '@clr/angular/data/stack-view';\nimport { ClrTreeViewModule } from '@clr/angular/data/tree-view';\n\n@NgModule({\n exports: [ClrDatagridModule, ClrStackViewModule, ClrTreeViewModule],\n})\nexport class ClrDataModule {}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nexport * from './data.module';\nexport * from '@clr/angular/data/datagrid';\nexport * from '@clr/angular/data/tree-view';\nexport * from '@clr/angular/data/stack-view';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;AAAA;;;;;AAKG;MAUU,aAAa,CAAA;8GAAb,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAb,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,EAAA,OAAA,EAAA,CAFd,iBAAiB,EAAE,kBAAkB,EAAE,iBAAiB,CAAA,EAAA,CAAA,CAAA;AAEvD,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,EAAA,OAAA,EAAA,CAFd,iBAAiB,EAAE,kBAAkB,EAAE,iBAAiB,CAAA,EAAA,CAAA,CAAA;;2FAEvD,aAAa,EAAA,UAAA,EAAA,CAAA;kBAHzB,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE,CAAC,iBAAiB,EAAE,kBAAkB,EAAE,iBAAiB,CAAC;AACpE,iBAAA;;;ACdD;;;;;AAKG;;ACLH;;AAEG;;;;"}
1
+ {"version":3,"file":"clr-angular-data.mjs","sources":["../../../projects/angular/data/data.module.ts","../../../projects/angular/data/index.ts","../../../projects/angular/data/clr-angular-data.ts"],"sourcesContent":["/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport { NgModule } from '@angular/core';\nimport { ClrDatagridModule } from '@clr/angular/data/datagrid';\nimport { ClrStackViewModule } from '@clr/angular/data/stack-view';\nimport { ClrTreeViewModule } from '@clr/angular/data/tree-view';\n\n@NgModule({\n exports: [ClrDatagridModule, ClrStackViewModule, ClrTreeViewModule],\n})\nexport class ClrDataModule {}\n","/*\n * Copyright (c) 2016-2026 Broadcom. All Rights Reserved.\n * The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nexport * from './data.module';\nexport * from '@clr/angular/data/datagrid';\nexport * from '@clr/angular/data/tree-view';\nexport * from '@clr/angular/data/stack-view';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;AAAA;;;;;AAKG;MAUU,aAAa,CAAA;+GAAb,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAb,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,EAAA,OAAA,EAAA,CAFd,iBAAiB,EAAE,kBAAkB,EAAE,iBAAiB,CAAA,EAAA,CAAA,CAAA;AAEvD,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,EAAA,OAAA,EAAA,CAFd,iBAAiB,EAAE,kBAAkB,EAAE,iBAAiB,CAAA,EAAA,CAAA,CAAA;;4FAEvD,aAAa,EAAA,UAAA,EAAA,CAAA;kBAHzB,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE,CAAC,iBAAiB,EAAE,kBAAkB,EAAE,iBAAiB,CAAC;AACpE,iBAAA;;;ACdD;;;;;AAKG;;ACLH;;AAEG;;;;"}