@limble/limble-tree 2.0.0 → 3.0.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 (85) hide show
  1. package/README.md +1 -0
  2. package/esm2022/lib/components/branch/branch.component.mjs +79 -0
  3. package/{esm2020 → esm2022}/lib/components/dragover-no-change-detect.mjs +4 -4
  4. package/{esm2020 → esm2022}/lib/components/dropzone/dropzone.component.mjs +4 -4
  5. package/{esm2020 → esm2022}/lib/components/root/root.component.mjs +5 -5
  6. package/esm2022/lib/core/tree-branch/tree-branch.mjs +429 -0
  7. package/esm2022/lib/core/tree-node-base.mjs +77 -0
  8. package/esm2022/lib/core/tree-root/tree-root.mjs +193 -0
  9. package/{esm2020 → esm2022}/lib/core/tree-service/tree.service.mjs +4 -4
  10. package/{esm2020 → esm2022}/lib/extras/collapse/collapse.module.mjs +5 -5
  11. package/{esm2020 → esm2022}/lib/extras/collapse/collapse.service.mjs +4 -4
  12. package/esm2022/lib/extras/drag-and-drop/drag-and-drop.mjs +83 -0
  13. package/{esm2020 → esm2022}/lib/extras/drag-and-drop/drag-and-drop.module.mjs +5 -5
  14. package/{esm2020 → esm2022}/lib/extras/drag-and-drop/drag-and-drop.service.mjs +4 -4
  15. package/{esm2020 → esm2022}/lib/extras/drag-and-drop/draggable.directive.mjs +4 -4
  16. package/esm2022/lib/legacy/limble-tree-legacy.module.mjs +20 -0
  17. package/{esm2020 → esm2022}/lib/legacy/limble-tree-root/limble-tree-root.component.mjs +4 -4
  18. package/{esm2020 → esm2022}/lib/limble-tree.module.mjs +5 -5
  19. package/{fesm2020 → fesm2022}/limble-limble-tree.mjs +59 -62
  20. package/fesm2022/limble-limble-tree.mjs.map +1 -0
  21. package/lib/components/branch/branch.component.d.ts +1 -1
  22. package/lib/components/dropzone/dropzone.component.d.ts +1 -1
  23. package/lib/extras/drag-and-drop/draggable.directive.d.ts +1 -1
  24. package/lib/legacy/limble-tree-root/limble-tree-root.component.d.ts +1 -1
  25. package/package.json +7 -13
  26. package/esm2020/lib/components/branch/branch.component.mjs +0 -79
  27. package/esm2020/lib/core/tree-branch/tree-branch.mjs +0 -429
  28. package/esm2020/lib/core/tree-node-base.mjs +0 -80
  29. package/esm2020/lib/core/tree-root/tree-root.mjs +0 -193
  30. package/esm2020/lib/extras/drag-and-drop/drag-and-drop.mjs +0 -83
  31. package/esm2020/lib/legacy/limble-tree-legacy.module.mjs +0 -20
  32. package/fesm2015/limble-limble-tree.mjs +0 -1812
  33. package/fesm2015/limble-limble-tree.mjs.map +0 -1
  34. package/fesm2020/limble-limble-tree.mjs.map +0 -1
  35. /package/{esm2020 → esm2022}/lib/components/branch/index.mjs +0 -0
  36. /package/{esm2020 → esm2022}/lib/components/dropzone/index.mjs +0 -0
  37. /package/{esm2020 → esm2022}/lib/components/host-component.interface.mjs +0 -0
  38. /package/{esm2020 → esm2022}/lib/components/index.mjs +0 -0
  39. /package/{esm2020 → esm2022}/lib/components/node-component.interface.mjs +0 -0
  40. /package/{esm2020 → esm2022}/lib/components/root/index.mjs +0 -0
  41. /package/{esm2020 → esm2022}/lib/core/branch-options.interface.mjs +0 -0
  42. /package/{esm2020 → esm2022}/lib/core/branchable.interface.mjs +0 -0
  43. /package/{esm2020 → esm2022}/lib/core/component-container.interface.mjs +0 -0
  44. /package/{esm2020 → esm2022}/lib/core/configuration/configuration.mjs +0 -0
  45. /package/{esm2020 → esm2022}/lib/core/configuration/index.mjs +0 -0
  46. /package/{esm2020 → esm2022}/lib/core/configuration/tree-options.interface.mjs +0 -0
  47. /package/{esm2020 → esm2022}/lib/core/index.mjs +0 -0
  48. /package/{esm2020 → esm2022}/lib/core/tree-branch/branch-controller.mjs +0 -0
  49. /package/{esm2020 → esm2022}/lib/core/tree-branch/graftable.interface.mjs +0 -0
  50. /package/{esm2020 → esm2022}/lib/core/tree-branch/index.mjs +0 -0
  51. /package/{esm2020 → esm2022}/lib/core/tree-node.interface.mjs +0 -0
  52. /package/{esm2020 → esm2022}/lib/core/tree-plot.interface.mjs +0 -0
  53. /package/{esm2020 → esm2022}/lib/core/tree-root/index.mjs +0 -0
  54. /package/{esm2020 → esm2022}/lib/core/tree-root/root-controller.mjs +0 -0
  55. /package/{esm2020 → esm2022}/lib/core/tree-service/index.mjs +0 -0
  56. /package/{esm2020 → esm2022}/lib/errors/index.mjs +0 -0
  57. /package/{esm2020 → esm2022}/lib/errors/tree-error.mjs +0 -0
  58. /package/{esm2020 → esm2022}/lib/events/drag/drag-end-event.mjs +0 -0
  59. /package/{esm2020 → esm2022}/lib/events/drag/drag-start-event.mjs +0 -0
  60. /package/{esm2020 → esm2022}/lib/events/drag/drop-event.mjs +0 -0
  61. /package/{esm2020 → esm2022}/lib/events/drag/index.mjs +0 -0
  62. /package/{esm2020 → esm2022}/lib/events/general/destruction-event.mjs +0 -0
  63. /package/{esm2020 → esm2022}/lib/events/general/index.mjs +0 -0
  64. /package/{esm2020 → esm2022}/lib/events/index.mjs +0 -0
  65. /package/{esm2020 → esm2022}/lib/events/relational/graft-event.mjs +0 -0
  66. /package/{esm2020 → esm2022}/lib/events/relational/index.mjs +0 -0
  67. /package/{esm2020 → esm2022}/lib/events/relational/prune-event.mjs +0 -0
  68. /package/{esm2020 → esm2022}/lib/events/relational/relational-tree-event.interface.mjs +0 -0
  69. /package/{esm2020 → esm2022}/lib/events/relational/tree-relationship.interface.mjs +0 -0
  70. /package/{esm2020 → esm2022}/lib/events/tree-event.interface.mjs +0 -0
  71. /package/{esm2020 → esm2022}/lib/extras/collapse/collapse.mjs +0 -0
  72. /package/{esm2020 → esm2022}/lib/extras/collapse/index.mjs +0 -0
  73. /package/{esm2020 → esm2022}/lib/extras/drag-and-drop/drag-state.mjs +0 -0
  74. /package/{esm2020 → esm2022}/lib/extras/drag-and-drop/dropzone-renderer.mjs +0 -0
  75. /package/{esm2020 → esm2022}/lib/extras/drag-and-drop/index.mjs +0 -0
  76. /package/{esm2020 → esm2022}/lib/legacy/index.mjs +0 -0
  77. /package/{esm2020 → esm2022}/lib/legacy/legacy-component-obj.interface.mjs +0 -0
  78. /package/{esm2020 → esm2022}/lib/legacy/legacy-tree-data.interface.mjs +0 -0
  79. /package/{esm2020 → esm2022}/lib/legacy/legacy-tree-options.interface.mjs +0 -0
  80. /package/{esm2020 → esm2022}/lib/legacy/legacy-tree.mjs +0 -0
  81. /package/{esm2020 → esm2022}/limble-limble-tree.mjs +0 -0
  82. /package/{esm2020 → esm2022}/public-api.mjs +0 -0
  83. /package/{esm2020 → esm2022}/shared/assert.mjs +0 -0
  84. /package/{esm2020 → esm2022}/shared/has-property.mjs +0 -0
  85. /package/{esm2020 → esm2022}/shared/index.mjs +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"limble-limble-tree.mjs","sources":["../../../projects/limble-tree/src/lib/extras/collapse/collapse.ts","../../../projects/limble-tree/src/lib/extras/collapse/collapse.service.ts","../../../projects/limble-tree/src/lib/extras/collapse/collapse.module.ts","../../../projects/limble-tree/src/shared/assert.ts","../../../projects/limble-tree/src/shared/has-property.ts","../../../projects/limble-tree/src/lib/extras/drag-and-drop/drag-state.ts","../../../projects/limble-tree/src/lib/components/dragover-no-change-detect.ts","../../../projects/limble-tree/src/lib/components/dropzone/dropzone.component.ts","../../../projects/limble-tree/src/lib/components/dropzone/dropzone.component.html","../../../projects/limble-tree/src/lib/components/branch/branch.component.ts","../../../projects/limble-tree/src/lib/components/branch/branch.component.html","../../../projects/limble-tree/src/lib/components/root/root.component.ts","../../../projects/limble-tree/src/lib/components/root/root.component.html","../../../projects/limble-tree/src/lib/core/configuration/configuration.ts","../../../projects/limble-tree/src/lib/core/tree-branch/branch-controller.ts","../../../projects/limble-tree/src/lib/errors/tree-error.ts","../../../projects/limble-tree/src/lib/events/drag/drag-end-event.ts","../../../projects/limble-tree/src/lib/events/drag/drag-start-event.ts","../../../projects/limble-tree/src/lib/events/drag/drop-event.ts","../../../projects/limble-tree/src/lib/events/general/destruction-event.ts","../../../projects/limble-tree/src/lib/events/relational/graft-event.ts","../../../projects/limble-tree/src/lib/events/relational/prune-event.ts","../../../projects/limble-tree/src/lib/core/tree-node-base.ts","../../../projects/limble-tree/src/lib/core/tree-root/root-controller.ts","../../../projects/limble-tree/src/lib/core/tree-root/tree-root.ts","../../../projects/limble-tree/src/lib/core/tree-branch/tree-branch.ts","../../../projects/limble-tree/src/lib/core/tree-service/tree.service.ts","../../../projects/limble-tree/src/lib/extras/drag-and-drop/drag-and-drop.ts","../../../projects/limble-tree/src/lib/extras/drag-and-drop/dropzone-renderer.ts","../../../projects/limble-tree/src/lib/extras/drag-and-drop/drag-and-drop.service.ts","../../../projects/limble-tree/src/lib/extras/drag-and-drop/draggable.directive.ts","../../../projects/limble-tree/src/lib/extras/drag-and-drop/drag-and-drop.module.ts","../../../projects/limble-tree/src/lib/legacy/legacy-tree.ts","../../../projects/limble-tree/src/lib/legacy/limble-tree-root/limble-tree-root.component.ts","../../../projects/limble-tree/src/lib/legacy/limble-tree-root/limble-tree-root.component.html","../../../projects/limble-tree/src/lib/legacy/limble-tree-legacy.module.ts","../../../projects/limble-tree/src/lib/limble-tree.module.ts","../../../projects/limble-tree/src/public-api.ts","../../../projects/limble-tree/src/limble-limble-tree.ts"],"sourcesContent":["import type { TreeBranch } from \"../../core\";\n\nclass TreeCollapser {\n private readonly tempStorage: Map<TreeBranch<any>, Array<TreeBranch<any>>>;\n\n public constructor() {\n this.tempStorage = new Map();\n }\n\n public collapse<T>(treeBranch: TreeBranch<T>): void {\n if (treeBranch.branches().length === 0) return;\n const branches: Array<TreeBranch<T>> = [];\n this.tempStorage.set(treeBranch, branches);\n treeBranch.branches().forEach((branch) => {\n branch.prune();\n branches.push(branch);\n });\n }\n\n public expand<T>(treeBranch: TreeBranch<T>): void {\n const branches = this.tempStorage.get(treeBranch);\n if (branches === undefined) return;\n branches.forEach((branch) => {\n branch.graftTo(treeBranch);\n });\n this.tempStorage.delete(treeBranch);\n treeBranch.detectChanges();\n }\n\n public isCollapsed<T>(treeBranch: TreeBranch<T>): boolean {\n return this.tempStorage.has(treeBranch);\n }\n\n public storePrecollapsedNode<T>(\n parent: TreeBranch<T>,\n branch: TreeBranch<T>\n ): void {\n this.tempStorage.set(\n parent,\n (this.tempStorage.get(parent) ?? []).concat(branch)\n );\n }\n}\n\nexport const treeCollapser = new TreeCollapser();\n","import { Injectable } from \"@angular/core\";\nimport { TreeBranch } from \"../../core\";\nimport { treeCollapser } from \"./collapse\";\n\n/** A service that collapses and expands tree branches */\n@Injectable()\nexport class TreeCollapseService {\n /**\n * Causes a TreeBranch to collapse, temporarily pruning all of its children\n * from the tree.\n *\n * @param treeBranch - The branch to collapse.\n */\n public collapse<T>(treeBranch: TreeBranch<T>): void {\n treeCollapser.collapse(treeBranch);\n }\n\n /**\n * Causes a TreeBranch to expand, restoring all of its children which were\n * previously pruned by a call to `collapse()`.\n *\n * @param treeBranch - The branch to expand.\n */\n public expand<T>(treeBranch: TreeBranch<T>): void {\n treeCollapser.expand(treeBranch);\n }\n\n /**\n * Determines whether a TreeBranch currently has any children which are\n * pruned from the tree due to a call to the `collapse()` method.\n *\n * @remarks\n * Child branches which are pruned manually from the tree, rather than\n * through the `collapse()` method, will not be considered.\n *\n * @param treeBranch - The branch to check.\n *\n * @returns `true` if the branch is currently collapsed; `false` if it is not.\n */\n public isCollapsed<T>(treeBranch: TreeBranch<T>): boolean {\n return treeCollapser.isCollapsed(treeBranch);\n }\n}\n","import { NgModule } from \"@angular/core\";\nimport { TreeCollapseService } from \"./collapse.service\";\n\n/** A module containing the entities which provide collapse functionality */\n@NgModule({\n providers: [TreeCollapseService]\n})\nexport class TreeCollapseModule {}\n","export function assert(condition: unknown): asserts condition {\n if (condition) {\n return;\n }\n throw new Error(\"Assertion Failed!\");\n}\n","export function hasProperty<T extends string>(\n input: unknown,\n prop: T\n): input is { [Key in T]: unknown } {\n return typeof input === \"object\" && input !== null && prop in input;\n}\n","import { assert } from \"../../../shared\";\nimport { BehaviorSubject, type Observable } from \"rxjs\";\nimport { TreeBranch } from \"../../core\";\n\nexport enum DragStates {\n Idle = 0,\n Starting = 1,\n Dragging = 2,\n Dropped = 3\n}\n\nclass DragState {\n private dragData: TreeBranch<any> | undefined;\n private _state: DragStates = DragStates.Idle;\n private readonly state$: BehaviorSubject<DragStates>;\n\n public constructor() {\n this.state$ = new BehaviorSubject<DragStates>(DragStates.Idle);\n this.state$.subscribe((state) => {\n this._state = state;\n });\n this.dragData = undefined;\n }\n\n public getDragData<T>(): TreeBranch<T> | undefined {\n return this.dragData;\n }\n\n public starting<T>(treeBranch: TreeBranch<T>): void {\n assert(this._state === DragStates.Idle);\n this.dragData = treeBranch;\n this.state$.next(DragStates.Starting);\n }\n\n public dragging(): void {\n assert(this._state === DragStates.Starting);\n this.state$.next(DragStates.Dragging);\n }\n\n public dropped(): void {\n assert(this._state === DragStates.Dragging);\n this.state$.next(DragStates.Dropped);\n }\n\n public restart(): void {\n this.dragData = undefined;\n this.state$.next(DragStates.Idle);\n }\n\n public events(): Observable<DragStates> {\n return this.state$;\n }\n\n public state(): DragStates {\n return this._state;\n }\n}\n\nexport const dragState = new DragState();\n","import {\n Directive,\n ElementRef,\n EventEmitter,\n NgZone,\n type OnDestroy,\n type OnInit,\n Output\n} from \"@angular/core\";\nimport { fromEvent, type Subscription } from \"rxjs\";\n\n/**\n * Works just like Angular's built-in `(dragover)` event binding, but is much\n * more performant. It throttles the event to a configurable rate (default once\n * every 25ms) and runs outside of Angular's change detection.\n */\n@Directive({\n standalone: true,\n selector: \"[dragoverNoChangeDetect]\"\n})\nexport class DragoverNoChangeDetectDirective implements OnInit, OnDestroy {\n @Output() readonly dragoverNoChangeDetect: EventEmitter<DragEvent>;\n private eventSubscription: Subscription | undefined;\n\n public constructor(\n private readonly ngZone: NgZone,\n private readonly el: ElementRef<Element>\n ) {\n this.dragoverNoChangeDetect = new EventEmitter<DragEvent>();\n }\n\n public ngOnInit(): void {\n this.ngZone.runOutsideAngular(() => {\n this.eventSubscription = fromEvent<DragEvent>(\n this.el.nativeElement,\n \"dragover\"\n ).subscribe(($event) => {\n this.dragoverNoChangeDetect.emit($event);\n });\n });\n }\n\n public ngOnDestroy(): void {\n if (this.eventSubscription !== undefined) {\n this.eventSubscription.unsubscribe();\n }\n }\n}\n","import { CommonModule } from \"@angular/common\";\nimport { Component, EventEmitter, Input, Output } from \"@angular/core\";\nimport { DragoverNoChangeDetectDirective } from \"../dragover-no-change-detect\";\n\n@Component({\n standalone: true,\n selector: \"dropzone\",\n templateUrl: \"./dropzone.component.html\",\n styleUrls: [\"./dropzone.component.scss\"],\n imports: [CommonModule, DragoverNoChangeDetectDirective]\n})\nexport class DropzoneComponent {\n @Input() placement?: \"inner\" | \"lateral\";\n @Output() readonly dropped = new EventEmitter<DragEvent>();\n\n protected active: boolean = false;\n\n public dragenterHandler(): void {\n this.active = true;\n }\n\n public dragleaveHandler(): void {\n this.active = false;\n }\n\n public dragoverHandler(event: DragEvent): void {\n event.preventDefault();\n (event.dataTransfer as DataTransfer).dropEffect = \"move\";\n }\n\n public dropHandler(event: DragEvent): void {\n this.dropped.emit(event);\n }\n}\n","<div\n class=\"dropzone\"\n [ngClass]=\"{ active: active }\"\n (dragenter)=\"dragenterHandler()\"\n (dragleave)=\"dragleaveHandler()\"\n (dragoverNoChangeDetect)=\"dragoverHandler($event)\"\n (drop)=\"dropHandler($event)\"\n></div>\n","import { CommonModule } from \"@angular/common\";\nimport {\n type AfterViewInit,\n ApplicationRef,\n Component,\n type ComponentRef,\n EventEmitter,\n Input,\n NgZone,\n type OnDestroy,\n Output,\n type QueryList,\n type Type,\n ViewChild,\n ViewChildren,\n ViewContainerRef\n} from \"@angular/core\";\nimport { map, merge } from \"rxjs\";\nimport type { HostComponent } from \"../host-component.interface\";\nimport type { NodeComponent } from \"../node-component.interface\";\nimport { DropzoneComponent } from \"../dropzone\";\nimport { DragoverNoChangeDetectDirective } from \"../dragover-no-change-detect\";\nimport { assert } from \"../../../shared\";\n\n@Component({\n standalone: true,\n selector: \"branch\",\n templateUrl: \"./branch.component.html\",\n styleUrls: [\"./branch.component.scss\"],\n imports: [CommonModule, DropzoneComponent, DragoverNoChangeDetectDirective]\n})\nexport class BranchComponent<T>\n implements NodeComponent, HostComponent<T>, AfterViewInit, OnDestroy\n{\n @ViewChild(\"branchesContainer\", { read: ViewContainerRef })\n branchesContainer: ViewContainerRef | undefined = undefined;\n @ViewChild(\"contentContainer\", { read: ViewContainerRef })\n contentContainer: ViewContainerRef | undefined = undefined;\n @ViewChildren(DropzoneComponent) dropzones:\n | QueryList<DropzoneComponent>\n | undefined = undefined;\n\n @Input() contentToHost?: Type<T>;\n\n @Output() readonly contentCreated = new EventEmitter<T>();\n @Output() readonly showDropzones = new EventEmitter<\"upper\" | \"lower\">();\n @Output() readonly dropped = new EventEmitter<\"inner\" | \"lateral\">();\n\n public showInnerDropzone: boolean = false;\n public showLateralDropzone: boolean = false;\n\n private hostedContent?: ComponentRef<T>;\n\n public constructor(private readonly appRef: ApplicationRef) {}\n\n public ngAfterViewInit(): void {\n assert(this.contentContainer !== undefined);\n assert(this.contentToHost !== undefined);\n this.hostedContent = this.contentContainer.createComponent(\n this.contentToHost\n );\n this.contentCreated.emit(this.hostedContent.instance);\n assert(this.dropzones !== undefined);\n const inner = this.dropzones.get(0);\n const lateral = this.dropzones.get(1);\n assert(inner !== undefined && lateral !== undefined);\n merge(\n inner.dropped.pipe(map(() => \"inner\" as const)),\n lateral.dropped.pipe(map(() => \"lateral\" as const))\n ).subscribe(this.dropped);\n this.hostedContent.changeDetectorRef.detectChanges();\n }\n\n public getHostedContent(): ComponentRef<T> | undefined {\n return this.hostedContent;\n }\n\n public triggerChangeDetection(): void {\n if (!NgZone.isInAngularZone()) {\n this.appRef.tick();\n }\n }\n\n protected dragoverHandler(event: DragEvent): void {\n const elementHeight = (\n event.currentTarget as HTMLElement\n ).getBoundingClientRect().height;\n if (event.offsetY < elementHeight / 2) {\n this.showDropzones.emit(\"upper\");\n } else {\n this.showDropzones.emit(\"lower\");\n }\n }\n\n public ngOnDestroy(): void {\n //I'm not 100% sure why, but we have to remove any reference to the\n //componentRef otherwise Angular will never release it for garbage\n //collection.\n this.hostedContent = undefined;\n }\n}\n","<div class=\"content\" (dragoverNoChangeDetect)=\"dragoverHandler($event)\">\n <div #contentContainer></div>\n</div>\n<div class=\"branches-container\">\n <dropzone placement=\"inner\" [hidden]=\"!showInnerDropzone\"></dropzone>\n <div #branchesContainer></div>\n</div>\n<dropzone placement=\"lateral\" [hidden]=\"!showLateralDropzone\"></dropzone>\n","import { CommonModule } from \"@angular/common\";\nimport {\n type AfterViewInit,\n Component,\n EventEmitter,\n Output,\n ViewChild,\n ViewContainerRef\n} from \"@angular/core\";\nimport { assert } from \"../../../shared\";\nimport { DropzoneComponent } from \"../dropzone\";\nimport type { NodeComponent } from \"../node-component.interface\";\n\n@Component({\n standalone: true,\n selector: \"root\",\n templateUrl: \"./root.component.html\",\n styleUrls: [\"./root.component.scss\"],\n imports: [CommonModule, DropzoneComponent]\n})\nexport class RootComponent implements NodeComponent, AfterViewInit {\n @ViewChild(\"branchesContainer\", { read: ViewContainerRef })\n branchesContainer: ViewContainerRef | undefined = undefined;\n @ViewChild(DropzoneComponent) dropzone: DropzoneComponent | undefined =\n undefined;\n\n @Output() readonly afterViewInit = new EventEmitter<void>();\n @Output() readonly dropped = new EventEmitter<void>();\n\n public showInnerDropzone: boolean = false;\n\n public ngAfterViewInit(): void {\n this.afterViewInit.emit();\n assert(this.dropzone !== undefined);\n this.dropzone.dropped.subscribe(this.dropped);\n }\n}\n","<div class=\"branches-container\">\n <dropzone placement=\"inner\" [hidden]=\"!showInnerDropzone\"></dropzone>\n <div #branchesContainer></div>\n</div>\n","import type { TreeRoot } from \"../tree-root\";\nimport type { TreeOptions } from \"./tree-options.interface\";\n\nclass Configuration {\n private readonly configStorage = new Map<TreeRoot<any>, TreeOptions>();\n\n public constructor() {\n this.configStorage = new Map();\n }\n\n public setConfig<T>(root: TreeRoot<T>, options: TreeOptions): void {\n this.configStorage.set(root, options);\n }\n\n public getConfig(root: any): TreeOptions | undefined {\n return this.configStorage.get(root);\n }\n\n public delete(root: any): void {\n this.configStorage.delete(root);\n }\n}\n\nexport const config = new Configuration();\n","import {\n type ComponentRef,\n createComponent,\n EnvironmentInjector,\n type ViewContainerRef,\n type ViewRef\n} from \"@angular/core\";\nimport { assert } from \"../../../shared\";\nimport { filter, type Subscription } from \"rxjs\";\nimport { BranchComponent } from \"../../components\";\nimport { dropzoneRenderer } from \"../../extras/drag-and-drop\";\nimport type { ComponentContainer } from \"../component-container.interface\";\nimport type { TreeBranch } from \"./tree-branch\";\n\n/**\n * A wrapper around the BranchComponent that helps instantiate it and handles its events.\n */\nexport class BranchController<UserlandComponent>\n implements ComponentContainer<BranchComponent<UserlandComponent>>\n{\n private readonly branchComponentRef: ComponentRef<\n BranchComponent<UserlandComponent>\n >;\n private readonly instanceSubscriptions: Array<Subscription>;\n private readonly outputBindingSubscriptions: Array<Subscription>;\n\n public constructor(\n private readonly treeBranch: TreeBranch<UserlandComponent>,\n parentBranchesContainer: ViewContainerRef\n ) {\n this.outputBindingSubscriptions = [];\n this.branchComponentRef = createComponent<\n BranchComponent<UserlandComponent>\n >(BranchComponent, {\n environmentInjector:\n parentBranchesContainer.injector.get(EnvironmentInjector)\n });\n this.branchComponentRef.instance.contentToHost =\n this.treeBranch.branchOptions.component;\n this.instanceSubscriptions = this.getInstanceSubscriptions(\n this.branchComponentRef.instance\n );\n }\n\n public destroy(): void {\n this.instanceSubscriptions.forEach((sub) => {\n sub.unsubscribe();\n });\n this.outputBindingSubscriptions.forEach((sub) => {\n sub.unsubscribe();\n });\n }\n\n public detectChanges(): void {\n this.branchComponentRef.changeDetectorRef.detectChanges();\n }\n\n public getBranchesContainer(): ViewContainerRef | undefined {\n return this.branchComponentRef.instance.branchesContainer;\n }\n\n public getComponentInstance(): BranchComponent<UserlandComponent> {\n return this.branchComponentRef.instance;\n }\n\n public getHostView(): ViewRef {\n return this.branchComponentRef.hostView;\n }\n\n public getNativeElement(): HTMLElement {\n return this.branchComponentRef.location.nativeElement;\n }\n\n public getUserlandComponentRef():\n | ComponentRef<UserlandComponent>\n | undefined {\n return this.branchComponentRef.instance.getHostedContent();\n }\n\n private getContentCreatedSub(\n instance: BranchComponent<UserlandComponent>\n ): Subscription {\n return instance.contentCreated.subscribe((userlandComponentInstance) => {\n const component = userlandComponentInstance as any;\n Object.entries(\n this.treeBranch.branchOptions.inputBindings ?? {}\n ).forEach(([key, value]) => {\n component[key] = value;\n });\n Object.entries(\n this.treeBranch.branchOptions.outputBindings ?? {}\n ).forEach(([key, value]) => {\n this.outputBindingSubscriptions.push(\n component[key].subscribe(value)\n );\n });\n component.treeBranch = this.treeBranch;\n const dropzones = instance.dropzones;\n assert(dropzones !== undefined);\n dropzoneRenderer.registerDropzones(dropzones, this.treeBranch);\n });\n }\n\n private getInstanceSubscriptions(\n instance: BranchComponent<UserlandComponent>\n ): Array<Subscription> {\n const droppedSub = instance.dropped.subscribe((placement) => {\n dropzoneRenderer.handleDrop(this.treeBranch, placement);\n });\n return [\n this.getContentCreatedSub(instance),\n this.getShowLowerZonesSub(instance),\n this.getShowUpperZonesSub(instance),\n droppedSub\n ];\n }\n\n private getShowLowerZonesSub(\n instance: BranchComponent<UserlandComponent>\n ): Subscription {\n return instance.showDropzones\n .pipe(filter((direction) => direction === \"lower\"))\n .subscribe(() => {\n const currentDropzoneDisplayed =\n dropzoneRenderer.getCurrentDisplay();\n if (\n currentDropzoneDisplayed?.treeBranch === this.treeBranch &&\n currentDropzoneDisplayed.direction === \"lower\"\n ) {\n return;\n }\n dropzoneRenderer.showLowerZones(this.treeBranch);\n instance.triggerChangeDetection();\n });\n }\n\n private getShowUpperZonesSub(\n instance: BranchComponent<UserlandComponent>\n ): Subscription {\n return instance.showDropzones\n .pipe(filter((direction) => direction === \"upper\"))\n .subscribe(() => {\n const currentDropzoneDisplayed =\n dropzoneRenderer.getCurrentDisplay();\n if (\n currentDropzoneDisplayed?.treeBranch === this.treeBranch &&\n currentDropzoneDisplayed.direction === \"upper\"\n ) {\n return;\n }\n dropzoneRenderer.showUpperZones(this.treeBranch);\n instance.triggerChangeDetection();\n });\n }\n}\n","export class TreeError extends Error {}\n","import type { TreeNode } from \"../../core\";\nimport type { TreeEvent } from \"../../events\";\n\n/** Emitted when a drag-and-drop operation has completed */\nexport class DragEndEvent<T> implements TreeEvent<T> {\n private readonly _source: TreeNode<T>;\n private readonly _newParent: TreeNode<T>;\n private readonly _newIndex: number;\n private readonly _oldParent: TreeNode<T>;\n private readonly _oldIndex: number;\n\n public constructor(\n source: TreeNode<T>,\n endpoints: {\n oldParent: TreeNode<T>;\n oldIndex: number;\n newParent: TreeNode<T>;\n newIndex: number;\n }\n ) {\n this._source = source;\n this._oldParent = endpoints.oldParent;\n this._oldIndex = endpoints.oldIndex;\n this._newParent = endpoints.newParent;\n this._newIndex = endpoints.newIndex;\n }\n\n /** @returns The new index of the dropped branch */\n public newIndex(): number {\n return this._newIndex;\n }\n\n /** @returns The new parent of the dropped branch */\n public newParent(): TreeNode<T> {\n return this._newParent;\n }\n\n /** @returns The index of the dropped branch before it was dragged */\n public oldIndex(): number {\n return this._oldIndex;\n }\n\n /** @returns The parent of the dropped branch before it was dragged */\n public oldParent(): TreeNode<T> {\n return this._oldParent;\n }\n\n public source(): TreeNode<T> {\n return this._source;\n }\n}\n","import type { TreeNode } from \"../../core\";\nimport type { TreeEvent } from \"../../events\";\n\n/** Emitted when a TreeBranch begins being dragged */\nexport class DragStartEvent<T> implements TreeEvent<T> {\n private readonly _source: TreeNode<T>;\n\n public constructor(source: TreeNode<T>) {\n this._source = source;\n }\n\n public source(): TreeNode<T> {\n return this._source;\n }\n}\n","import type { TreeNode } from \"../../core\";\nimport type { TreeEvent } from \"../../events\";\n\n/** Emitted when a TreeBranch is dropped into a valid Dropzone */\nexport class DropEvent<T> implements TreeEvent<T> {\n private readonly _source: TreeNode<T>;\n private readonly _parent: TreeNode<T>;\n private readonly _index: number;\n\n public constructor(source: TreeNode<T>, parent: TreeNode<T>, index: number) {\n this._source = source;\n this._parent = parent;\n this._index = index;\n }\n\n public source(): TreeNode<T> {\n return this._source;\n }\n\n public index(): number {\n return this._index;\n }\n\n public parent(): TreeNode<T> {\n return this._parent;\n }\n}\n","import type { TreeNode } from \"../../core\";\nimport type { TreeEvent } from \"../../events\";\n\n/** Emitted when a node is destroyed */\nexport class DestructionEvent<T> implements TreeEvent<T> {\n private readonly _source: TreeNode<T>;\n\n public constructor(source: TreeNode<T>) {\n this._source = source;\n }\n\n public source(): TreeNode<T> {\n return this._source;\n }\n}\n","import type { RelationalTreeEvent } from \"./relational-tree-event.interface\";\nimport type { TreeRelationship } from \"./tree-relationship.interface\";\nimport type { TreeBranch, TreeNode } from \"../../core\";\n\n/** Emits when a branch is grafted to another tree node */\nexport class GraftEvent<UserlandComponent>\n implements RelationalTreeEvent<UserlandComponent>\n{\n private readonly _source: TreeBranch<UserlandComponent>;\n private readonly _parent: TreeNode<UserlandComponent>;\n private readonly _child: TreeBranch<UserlandComponent>;\n private readonly _index: number;\n\n public constructor(\n source: TreeBranch<UserlandComponent>,\n relationship: TreeRelationship<UserlandComponent>\n ) {\n this._source = source;\n this._child = relationship.child;\n this._parent = relationship.parent;\n this._index = relationship.index;\n }\n\n public child(): TreeBranch<UserlandComponent> {\n return this._child;\n }\n\n public index(): number {\n return this._index;\n }\n\n public parent(): TreeNode<UserlandComponent> {\n return this._parent;\n }\n\n public source(): TreeBranch<UserlandComponent> {\n return this._source;\n }\n}\n","import type { RelationalTreeEvent } from \"./relational-tree-event.interface\";\nimport type { TreeRelationship } from \"./tree-relationship.interface\";\nimport type { TreeNode, TreeBranch } from \"../../core\";\n\n/** Emitted when a branch is pruned from its parent branch */\nexport class PruneEvent<UserlandComponent>\n implements RelationalTreeEvent<UserlandComponent>\n{\n private readonly _source: TreeBranch<UserlandComponent>;\n private readonly _parent: TreeNode<UserlandComponent>;\n private readonly _child: TreeBranch<UserlandComponent>;\n private readonly _index: number;\n\n public constructor(\n source: TreeBranch<UserlandComponent>,\n relationship: TreeRelationship<UserlandComponent>\n ) {\n this._source = source;\n this._child = relationship.child;\n this._parent = relationship.parent;\n this._index = relationship.index;\n }\n\n public child(): TreeBranch<UserlandComponent> {\n return this._child;\n }\n\n public index(): number {\n return this._index;\n }\n\n public parent(): TreeNode<UserlandComponent> {\n return this._parent;\n }\n\n public source(): TreeBranch<UserlandComponent> {\n return this._source;\n }\n}\n","import { filter, type Observable, Subject, type Subscription } from \"rxjs\";\nimport { hasProperty } from \"../../shared\";\nimport { TreeError } from \"../errors\";\nimport { GraftEvent, PruneEvent, type TreeEvent } from \"../events\";\nimport { TreeBranch } from \"./tree-branch\";\nimport type { TreePlot } from \"./tree-plot.interface\";\nimport type { TreeNode } from \"./tree-node.interface\";\n\nexport class TreeNodeBase<UserlandComponent>\n implements Partial<TreeNode<UserlandComponent>>\n{\n private readonly _branches: Array<TreeBranch<UserlandComponent>>;\n private readonly events$: Subject<TreeEvent<UserlandComponent>>;\n private destroyed: boolean = false;\n private readonly subscriptions: Array<Subscription>;\n\n public constructor() {\n this._branches = [];\n this.events$ = new Subject();\n this.subscriptions = [\n this.graftsToSelf().subscribe((event) => {\n this.registerChildRelationship(event.child(), event.index());\n }),\n this.prunesToSelf().subscribe((event) => {\n this.deregisterChildRelationship(event.child());\n })\n ];\n }\n\n public branches(): Array<TreeBranch<UserlandComponent>> {\n return [...this._branches];\n }\n\n public destroy(): void {\n this.branches().forEach((branch) => {\n branch.destroy();\n });\n this.subscriptions.forEach((sub) => {\n sub.unsubscribe();\n });\n this.destroyed = true;\n }\n\n public dispatch(event: TreeEvent<UserlandComponent>): void {\n this.events$.next(event);\n }\n\n public events(): Observable<TreeEvent<UserlandComponent>> {\n return this.events$;\n }\n\n public getBranch(index: number): TreeBranch<UserlandComponent> | undefined {\n return this._branches[index];\n }\n\n public handleUserlandError(error: unknown): never {\n const message = hasProperty(error, \"message\")\n ? error.message\n : \"Unknown error\";\n throw new TreeError(`Failed to grow branch: ${message}`, {\n // This cast to `any` is due to an issue in typescript that has been\n // resolved at least by version 4.9.5. When we upgrade our typescript\n // version we can remove the cast.\n cause: error as any\n });\n }\n\n public isDestroyed(): boolean {\n return this.destroyed;\n }\n\n public plot(): TreePlot {\n return new Map(\n this.branches().map((branch, index) => [index, branch.plot()])\n );\n }\n\n public traverse(\n callback: (node: TreeBranch<UserlandComponent>) => void\n ): void {\n this.branches().forEach((branch) => {\n branch.traverse(callback);\n });\n }\n\n private deregisterChildRelationship(\n child: TreeBranch<UserlandComponent>\n ): void {\n const index = this.branches().findIndex((branch) => branch === child);\n this._branches.splice(index, 1);\n }\n\n private graftsToSelf(): Observable<GraftEvent<UserlandComponent>> {\n return this.events().pipe(\n filter(\n (event): event is GraftEvent<UserlandComponent> =>\n event instanceof GraftEvent\n ),\n filter((event) => event.parent().events() === this.events$)\n );\n }\n\n private prunesToSelf(): Observable<PruneEvent<UserlandComponent>> {\n return this.events().pipe(\n filter(\n (event): event is PruneEvent<UserlandComponent> =>\n event instanceof PruneEvent\n ),\n filter((event) => event.parent().events() === this.events$)\n );\n }\n\n private registerChildRelationship(\n child: TreeBranch<UserlandComponent>,\n index: number\n ): void {\n const branches = this.branches();\n if (index < 0 || index > branches.length) {\n throw new TreeError(\n `Can't register child at index ${index}. Out of range.`\n );\n }\n this._branches.splice(index, 0, child);\n }\n}\n","import type { ComponentRef, ViewContainerRef, ViewRef } from \"@angular/core\";\nimport { assert } from \"../../../shared\";\nimport type { Subscription } from \"rxjs\";\nimport { RootComponent } from \"../../components\";\nimport { dropzoneRenderer } from \"../../extras/drag-and-drop\";\nimport type { TreeRoot } from \"./tree-root\";\nimport type { ComponentContainer } from \"../component-container.interface\";\n\n/**\n * A wrapper around the BranchComponent that helps instantiate it and handles its events.\n */\nexport class RootController<T> implements ComponentContainer<RootComponent> {\n private readonly rootComponentRef: ComponentRef<RootComponent>;\n private readonly instanceSubscriptions: Array<Subscription>;\n\n public constructor(\n private readonly treeRoot: TreeRoot<T>,\n viewContainerRef: ViewContainerRef\n ) {\n this.rootComponentRef = viewContainerRef.createComponent(RootComponent);\n const viewInitSub =\n this.rootComponentRef.instance.afterViewInit.subscribe(() => {\n const dropzone = this.rootComponentRef.instance.dropzone;\n assert(dropzone !== undefined);\n dropzoneRenderer.registerDropzone(dropzone, this.treeRoot);\n });\n const droppedSub = this.rootComponentRef.instance.dropped.subscribe(\n () => {\n dropzoneRenderer.handleDrop(this.treeRoot, \"inner\");\n }\n );\n this.instanceSubscriptions = [viewInitSub, droppedSub];\n }\n\n public destroy(): void {\n this.instanceSubscriptions.forEach((sub) => {\n sub.unsubscribe();\n });\n }\n\n public detectChanges(): void {\n this.rootComponentRef.changeDetectorRef.detectChanges();\n }\n\n public getBranchesContainer(): ViewContainerRef | undefined {\n return this.rootComponentRef.instance.branchesContainer;\n }\n\n public getComponentInstance(): RootComponent {\n return this.rootComponentRef.instance;\n }\n\n public getHostView(): ViewRef {\n return this.rootComponentRef.hostView;\n }\n\n public getNativeElement(): HTMLElement {\n return this.rootComponentRef.location.nativeElement;\n }\n}\n","import type { Observable } from \"rxjs\";\nimport { TreeBranch } from \"../tree-branch\";\nimport type { TreePlot } from \"../tree-plot.interface\";\nimport type { TreeNode } from \"../tree-node.interface\";\nimport { TreeNodeBase } from \"../tree-node-base\";\nimport type { BranchOptions } from \"../branch-options.interface\";\nimport { config } from \"../configuration\";\nimport { RootController } from \"../tree-root/root-controller\";\nimport type { Type, ViewContainerRef, ViewRef } from \"@angular/core\";\nimport { RootComponent } from \"../../components\";\nimport { dropzoneRenderer } from \"../../extras/drag-and-drop\";\nimport { TreeError } from \"../../errors\";\nimport { DestructionEvent, TreeEvent } from \"../../events\";\n\n/**\n * Represents the base of the tree. It renders a very simple container for child\n * branches. It has methods for creating and accessing those branches. It emits\n * events when things happen in the tree.\n */\nexport class TreeRoot<UserlandComponent>\n implements TreeNode<UserlandComponent>\n{\n private readonly rootController: RootController<UserlandComponent>;\n private readonly treeNodeBase: TreeNodeBase<UserlandComponent>;\n\n public constructor(private readonly viewContainerRef: ViewContainerRef) {\n this.treeNodeBase = new TreeNodeBase();\n this.rootController = new RootController(this, viewContainerRef);\n this.detectChanges();\n }\n\n /** @returns All child branches as an array of TreeBranch instances */\n public branches(): Array<TreeBranch<UserlandComponent>> {\n return this.treeNodeBase.branches();\n }\n\n /**\n * Recursively destroys all branches of the tree, as well as itself.\n *\n * @remarks\n * This releases all resources held or consumed by the tree.\n *\n * It is important to call this method when a tree is discarded, otherwise\n * the tree will remain in memory and continue to consume resources.\n */\n public destroy(): void {\n if (this.isDestroyed()) {\n throw new TreeError(\"Cannot destroy a destroyed tree root\");\n }\n dropzoneRenderer.clearTreeFromRegistry(this);\n this.treeNodeBase.destroy();\n this.rootController.destroy();\n this.viewContainerRef.clear();\n config.delete(this);\n this.dispatch(new DestructionEvent(this));\n }\n\n /** Run Angular change detection on the root of the tree */\n public detectChanges(): void {\n this.rootController.detectChanges();\n }\n\n /**\n * Emits the specified TreeEvent.\n *\n * @remarks\n * Caution: It is not recommended to manually emit TreeEvents that are already\n * provided by the library. For example, it is not recommended to emit a\n * `GraftEvent`, `DestructionEvent`, etc. These events may be used by the tree,\n * and emitting them manually may cause unexpected behavior. Instead, we\n * recommend implementing the TreeEvent interface with your own custom events\n * and dispatching those.\n *\n * @param event - The TreeEvent that will be emitted.\n */\n public dispatch(event: TreeEvent<UserlandComponent>): void {\n this.treeNodeBase.dispatch(event);\n }\n\n /**\n * @returns\n * An observable that emits TreeEvents whenever an event is dispatched\n * in the root or any of its descendant branches.\n */\n public events(): Observable<TreeEvent<UserlandComponent>> {\n return this.treeNodeBase.events();\n }\n\n /**\n * @returns\n * The child branch at the specified index, or undefined if there is\n * no child branch at the specified index.\n */\n public getBranch(index: number): TreeBranch<UserlandComponent> | undefined {\n return this.treeNodeBase.getBranch(index);\n }\n\n /** @returns The ViewContainerRef in which child branches are rendered */\n public getBranchesContainer(): ViewContainerRef | undefined {\n if (this.isDestroyed()) {\n throw new TreeError(\n \"Cannot get branches container from a destroyed tree root\"\n );\n }\n return this.rootController.getBranchesContainer();\n }\n\n /**\n * Retrieves the RootComponent.\n *\n * @remarks\n * The RootComponent holds the BranchesContainer, as well as a single Dropzone\n * for drag-and-drop operations.\n *\n * @returns The instance of RootComponent that is rendered by this class.\n */\n public getComponentInstance(): RootComponent {\n if (this.isDestroyed()) {\n throw new TreeError(\n \"Cannot get component instance from a destroyed tree root\"\n );\n }\n return this.rootController.getComponentInstance();\n }\n\n /** @returns The Host View in which the RootComponent is rendered */\n public getHostView(): ViewRef {\n if (this.isDestroyed()) {\n throw new TreeError(\n \"Cannot get component host view from a destroyed tree root\"\n );\n }\n return this.rootController.getHostView();\n }\n\n /** @returns The RootComponent as a native HTML Element */\n public getNativeElement(): HTMLElement {\n if (this.isDestroyed()) {\n throw new TreeError(\n \"Cannot get native element from a destroyed tree root\"\n );\n }\n return this.rootController.getNativeElement();\n }\n\n /**\n * Appends a new child branch to this branch. The child branch will render\n * the specified component according to the (optional) configuration parameter.\n *\n * @param component - The component to render in the new child branch.\n * @param options - Configuration options for the new child branch.\n *\n * @returns\n * The newly-created child branch.\n */\n public grow(\n component: Type<UserlandComponent>,\n options?: BranchOptions<UserlandComponent>\n ): TreeBranch<UserlandComponent> {\n if (this.isDestroyed()) {\n throw new TreeError(\"Cannot grow a branch on a destroyed tree root\");\n }\n try {\n return new TreeBranch(this, { component, ...options });\n } catch (error) {\n this.handleUserlandError(error);\n }\n }\n\n /** @returns `true` if the tree is destroyed, `false` otherwise */\n public isDestroyed(): boolean {\n return this.treeNodeBase.isDestroyed();\n }\n\n /**\n * Provides a model describing the shape of the tree.\n *\n * @returns A multi-dimensional Map which describes the shape of the tree.\n *\n * @example\n * For example, an empty tree will return an empty Map. A tree with a single\n * branch will return a Map with a single entry, where the key is the index\n * of the branch (zero) and the value is an empty Map. A Tree like this:\n *\n * ```\n * ---Branch-------Branch\n * /\n * Root-------Branch\n * \\\n * ---Branch\n * ```\n * Will return a Map of matching shape:\n * ```\n * Map {\n * 0: Map { 0: Map {}},\n * 1: Map {},\n * 2: Map {}\n * }\n * ```\n */\n public plot(): TreePlot {\n return this.treeNodeBase.plot();\n }\n\n /** @returns Itself */\n public root(): this {\n return this;\n }\n\n /**\n * Traverses the tree in depth-first pre-order, executing the provided\n * callback function on each node. Traversal includes the Root.\n *\n * @param callback - A function to execute on each node.\n */\n public traverse(\n callback: (node: TreeNode<UserlandComponent>) => void\n ): void {\n callback(this);\n this.treeNodeBase.traverse(callback);\n }\n\n private handleUserlandError(error: unknown): never {\n // When an error occurs in a userland component during a tree operation,\n // it can cause undefined, bizarre behavior in the tree. To prevent this,\n // we destroy the tree and throw an error instead. This helps protect\n // the end-user's data from corruption.\n this.destroy();\n this.treeNodeBase.handleUserlandError(error);\n }\n}\n","import { assert } from \"../../../shared\";\nimport type { Observable } from \"rxjs\";\nimport type {\n ComponentRef,\n Type,\n ViewContainerRef,\n ViewRef\n} from \"@angular/core\";\nimport { BranchComponent } from \"../../components\";\nimport { TreeError } from \"../../errors\";\nimport { dropzoneRenderer } from \"../../extras/drag-and-drop\";\nimport { TreeRoot } from \"../tree-root\";\nimport type { TreeNode } from \"../tree-node.interface\";\nimport type { TreePlot } from \"../tree-plot.interface\";\nimport { TreeNodeBase } from \"../tree-node-base\";\nimport { config } from \"../configuration\";\nimport type {\n BranchOptions,\n FullBranchOptions\n} from \"../branch-options.interface\";\nimport { BranchController } from \"./branch-controller\";\nimport type { Graftable } from \"./graftable.interface\";\nimport { treeCollapser } from \"../../extras/collapse\";\nimport {\n DestructionEvent,\n GraftEvent,\n PruneEvent,\n type TreeEvent\n} from \"../../events\";\n\n/** Represents a standard node in a tree. Renders a BranchComponent.\n *\n * @remarks\n * This class renders a branch component, which does the following:\n * 1. Renders a component provided by the user\n * 2. Provides a container in which child branches may be rendered\n * 3. Contains two Dropzones: one for dropping branches below this branch (as a\n * sibling), and one for dropping branches as a first child of this branch.\n */\nexport class TreeBranch<UserlandComponent>\n implements TreeNode<UserlandComponent>, Graftable<UserlandComponent>\n{\n private readonly branchController: BranchController<UserlandComponent>;\n private detachedView: ViewRef | null = null;\n private _parent: TreeNode<UserlandComponent> | undefined;\n private readonly treeNodeBase: TreeNodeBase<UserlandComponent>;\n\n public constructor(\n parent: TreeNode<UserlandComponent>,\n public readonly branchOptions: FullBranchOptions<UserlandComponent>\n ) {\n this.treeNodeBase = new TreeNodeBase();\n const parentBranchesContainer = parent.getBranchesContainer();\n assert(parentBranchesContainer !== undefined);\n this.branchController = new BranchController(\n this,\n parentBranchesContainer\n );\n const hostView = this.branchController.getHostView();\n if (\n parent instanceof TreeBranch &&\n parent.branchOptions.defaultCollapsed === true\n ) {\n treeCollapser.storePrecollapsedNode(parent, this);\n this.detachedView = hostView;\n } else {\n parentBranchesContainer.insert(hostView);\n this._parent = parent;\n this.dispatch(\n new GraftEvent(this, {\n parent: this._parent,\n child: this,\n index: this._parent.branches().length\n })\n );\n this.setIndentation();\n }\n this.detectChanges();\n }\n\n /** @returns All child branches as an array of TreeBranch instances, in order. */\n public branches(): Array<TreeBranch<UserlandComponent>> {\n return this.treeNodeBase.branches();\n }\n\n /**\n * Recursively destroys all descendant branches, as well as itself. This\n * releases all resources held or consumed by this branch and its descendants.\n *\n * @remarks\n * It is important to call this method when a branch is discarded, otherwise\n * the branch will remain in memory and continue to consume resources.\n */\n public destroy(): void {\n if (this.isDestroyed()) {\n throw new TreeError(\"Cannot destroy a destroyed tree branch\");\n }\n this.prune();\n treeCollapser.expand(this);\n dropzoneRenderer.clearTreeFromRegistry(this);\n this.branchController.getHostView().destroy();\n this.treeNodeBase.destroy();\n this.branchController.destroy();\n this.dispatch(new DestructionEvent(this));\n }\n\n /** Run Angular change detection on this branch */\n public detectChanges(): void {\n this.branchController.detectChanges();\n }\n\n /**\n * Emits the specified TreeEvent.\n *\n * @remarks\n * Caution: It is not recommended to manually emit TreeEvents that are already\n * provided by the library. For example, it is not recommended to emit a\n * `GraftEvent`, `DestructionEvent`, etc. These events may be used by the tree,\n * and emitting them manually may cause unexpected behavior. Instead, we\n * recommend implementing the TreeEvent interface with your own custom events\n * and dispatching those.\n *\n * @param event - The TreeEvent that will be emitted.\n */\n public dispatch(event: TreeEvent<UserlandComponent>): void {\n this.treeNodeBase.dispatch(event);\n this._parent?.dispatch(event);\n }\n\n /**\n * @returns\n * An observable that emits TreeEvents whenever an event is dispatched\n * in this branch or any of its descendant branches.\n */\n public events(): Observable<TreeEvent<UserlandComponent>> {\n return this.treeNodeBase.events();\n }\n\n /**\n * @param index - The index of the child branch to retrieve.\n *\n * @returns\n * The child branch at the specified index, or undefined if there is\n * no child branch at the specified index.\n */\n public getBranch(index: number): TreeBranch<UserlandComponent> | undefined {\n return this.treeNodeBase.getBranch(index);\n }\n\n /** @returns The ViewContainerRef in which child branches are rendered */\n public getBranchesContainer(): ViewContainerRef | undefined {\n if (this.isDestroyed()) {\n throw new TreeError(\n \"Cannot get branches container from a destroyed tree branch\"\n );\n }\n return this.branchController.getBranchesContainer();\n }\n\n /** @returns The instance of BranchComponent that is rendered by this class. */\n public getComponentInstance(): BranchComponent<UserlandComponent> {\n if (this.isDestroyed()) {\n throw new TreeError(\n \"Cannot get component instance from a destroyed tree branch\"\n );\n }\n return this.branchController.getComponentInstance();\n }\n\n /** @returns The Host View in which the BranchComponent is rendered */\n public getHostView(): ViewRef {\n if (this.isDestroyed()) {\n throw new TreeError(\n \"Cannot get component host view from a destroyed tree branch\"\n );\n }\n return this.branchController.getHostView();\n }\n\n /** @returns The BranchComponent as a native HTML Element */\n public getNativeElement(): HTMLElement {\n if (this.isDestroyed()) {\n throw new TreeError(\n \"Cannot get native element from a destroyed tree branch\"\n );\n }\n return this.branchController.getNativeElement();\n }\n\n /**\n * @returns\n * A ComponentRef containing the instance of the user-provided\n * component which is rendered by this branch.\n */\n public getUserlandComponentRef():\n | ComponentRef<UserlandComponent>\n | undefined {\n if (this.isDestroyed()) {\n throw new TreeError(\n \"Cannot get userland component from a destroyed tree branch\"\n );\n }\n return this.branchController.getUserlandComponentRef();\n }\n\n /**\n * Attaches a branch to a new parent node.\n *\n * @remarks\n * If not already pruned, this method prunes (removes) this branch from its\n * current position in the tree; then grafts (reattaches) it as a child of the\n * specified parent branch at the specified index. If no index is specified,\n * the branch is appended as the last child of the parent. This causes this\n * branch's associated BranchComponent to be re-rendered in the DOM at the\n * new location.\n *\n * @param newParent - The new parent branch unto which this branch will be grafted.\n * @param index - The index at which this branch will be grafted. If not specified,\n * this branch will be appended as the last child of the new parent.\n *\n * @returns The index at which this branch was grafted.\n */\n public graftTo(\n newParent: TreeNode<UserlandComponent>,\n index?: number\n ): number {\n this.checkGraftLocationValidity(newParent, index);\n const ownIndex = this.index();\n if (ownIndex !== undefined) {\n this.prune();\n }\n this._parent = newParent;\n const newIndex = index ?? newParent.branches().length;\n this.reattachView(newIndex);\n this.dispatch(\n new GraftEvent(this, {\n parent: newParent,\n child: this,\n index: newIndex\n })\n );\n return newIndex;\n }\n\n /**\n * Appends a new child branch to this branch. The child branch will render\n * the specified component according to the (optional) configuration parameter.\n *\n * @param component - The component to render in the new child branch.\n * @param options - Configuration options for the new child branch.\n *\n * @returns\n * The newly-created child branch.\n */\n public grow(\n component: Type<UserlandComponent>,\n options?: BranchOptions<UserlandComponent>\n ): TreeBranch<UserlandComponent> {\n if (this.isDestroyed()) {\n throw new TreeError(\"Cannot grow a branch on a destroyed tree branch\");\n }\n try {\n return new TreeBranch(this, { component, ...options });\n } catch (error: unknown) {\n this.handleUserlandError(error);\n }\n }\n\n /**\n * Determines this branch's index in relation to its sibling branches.\n *\n * @remarks\n * For example, if it is the first child of its parent, this method will return\n * 0. If it is the second child of its parent, this method will return 1.\n *\n * If this branch has no parent, (eg, if this branch has been pruned) this\n * method will return undefined.\n *\n * @returns\n * The index of this branch in relation to its sibling branches, or undefined.\n */\n public index(): number | undefined {\n if (!this._parent) {\n return undefined;\n }\n const index = this._parent\n .branches()\n .findIndex((branch) => branch === this);\n assert(index >= 0);\n return index;\n }\n\n /** @returns `true` if the branch is destroyed, `false` otherwise */\n public isDestroyed(): boolean {\n return this.treeNodeBase.isDestroyed();\n }\n\n /**\n * @returns\n * The data that was passed into the `branchOptions`' `meta` property\n * at construction.\n */\n public meta(): Record<string, any> {\n return this.branchOptions.meta ?? {};\n }\n\n /**\n * @returns\n * This branch's parent node (which may be a TreeBranch or TreeRoot).\n * If this branch has no parent, (eg, if this branch has been pruned) this\n * method will return undefined.\n */\n public parent(): TreeNode<UserlandComponent> | undefined {\n return this._parent;\n }\n\n /**\n * Provides a model describing this branch's descendants.\n *\n * @returns\n * A multi-dimensional Map which describes the shape of this branch's\n * descendants.\n *\n * @example\n * A branch with no children will return an empty Map. A branch with\n * a single child will return a Map with a single entry, where the key is the index\n * of the branch (zero) and the value is an empty Map. A Tree like this:\n *\n * ```\n * ---Branch-------Branch\n * /\n * Branch-------Branch\n * \\\n * ---Branch\n * ```\n * Will return a Map of matching shape:\n * ```\n * Map {\n * 0: Map { 0: Map {}},\n * 1: Map {},\n * 2: Map {}\n * }\n * ```\n */\n public plot(): TreePlot {\n return this.treeNodeBase.plot();\n }\n\n /**\n * Calculates the branch's position in the tree relative to the Root.\n *\n * @remarks\n * The position is described as an array of numbers, where each number\n * represents the index of the branch at that level of the tree.\n *\n * For example, if this branch is the first child of the Root, this method\n * will return [0]. If this branch is the second child of the first child\n * of the Root, this method will return [0, 1].\n *\n * If the branch is not related to a TreeRoot, (such as when it has been\n * pruned,) this method will throw an error.\n *\n * @returns\n * An array of numbers which describe the branch's position in the tree\n * relative to the Root.\n */\n public position(): Array<number> {\n const index = this.index();\n if (index === undefined) {\n throw new TreeError(\n \"branch has no parent. Position cannot be determined.\"\n );\n }\n if (this._parent instanceof TreeBranch) {\n const parentPosition = this._parent.position();\n return [...parentPosition, index];\n }\n return [index];\n }\n\n /**\n * Removes a branch from its tree without destroying it.\n *\n * @remarks\n * Removes this branch from its parent and detaches its associated\n * BranchComponent from the DOM. This puts the branch in a \"pruned\" state,\n * which may affect the behavior of other methods.\n *\n * A pruned branch can be reattached to any other node using the `graftTo` method.\n *\n * @returns\n * Itself, or undefined if it is already in a pruned state.\n */\n public prune(): this | undefined {\n if (this.isDestroyed()) {\n throw new TreeError(\"Cannot prune a destroyed tree branch\");\n }\n const parent = this._parent;\n const index = this.index();\n if (index === undefined || parent === undefined) return;\n const container = parent.getBranchesContainer();\n assert(container !== undefined);\n this.detachedView = container.detach(index);\n assert(this.detachedView !== null);\n this.detachedView.detach();\n this.dispatch(\n new PruneEvent(this, {\n parent: parent,\n child: this,\n index: index\n })\n );\n this._parent = undefined;\n return this;\n }\n\n /**\n * Get the root of the tree to which this Branch is attached.\n *\n * @returns\n * The TreeRoot of the tree this branch is in. If this branch is\n * does not have a root (such as when it has been pruned) this method will\n * return undefined.\n */\n public root(): TreeRoot<UserlandComponent> | undefined {\n const parent = this.parent();\n if (parent instanceof TreeBranch) {\n return parent.root();\n }\n assert(parent instanceof TreeRoot || parent === undefined);\n return parent;\n }\n\n /**\n * Traverses this branch's descendants in depth-first pre-order, executing\n * the provided callback function on each node. Traversal includes this branch.\n *\n * @param callback - A function to execute on each node.\n */\n public traverse(\n callback: (node: TreeBranch<UserlandComponent>) => void\n ): void {\n callback(this);\n this.treeNodeBase.traverse(callback);\n }\n\n private checkGraftLocationValidity(\n newParent: TreeNode<UserlandComponent>,\n index?: number\n ): void {\n if (this.isDestroyed()) {\n throw new TreeError(\"Cannot graft a destroyed tree branch\");\n }\n if (newParent.isDestroyed()) {\n throw new TreeError(\"Cannot graft to a destroyed tree branch\");\n }\n if (\n typeof index === \"number\" &&\n this.indexIsOutOfRange(newParent, index)\n ) {\n throw new TreeError(\n `Cannot graft branch at index ${index} of the parent. Out of range.`\n );\n }\n this.traverse((node) => {\n if (node === newParent) {\n throw new TreeError(\n \"Cannot graft a branch to itself or any of its own descendants\"\n );\n }\n });\n }\n\n private handleUserlandError(error: unknown): never {\n // When an error occurs in a userland component during a tree operation,\n // it can cause undefined, bizarre behavior in the tree. To prevent this,\n // we destroy the tree and throw an error instead. This helps protect\n // the end-user's data from corruption.\n this.furthestAncestor().destroy();\n this.treeNodeBase.handleUserlandError(error);\n }\n\n private indexIsOutOfRange(\n parent: TreeNode<UserlandComponent>,\n index: number\n ): boolean {\n return index < 0 || index > parent.branches().length;\n }\n\n private furthestAncestor(): TreeNode<UserlandComponent> {\n // eslint-disable-next-line typescript/no-this-alias -- This code is for an iteration, not to make `this` available in other scopes (which is what the rule is intended to protect against).\n let node: TreeNode<UserlandComponent> = this;\n while (node instanceof TreeBranch) {\n const parent = node.parent();\n if (parent === undefined) break;\n node = parent;\n }\n return node;\n }\n\n private reattachView(index?: number): void {\n assert(this._parent !== undefined);\n assert(this.detachedView !== null);\n const container = this._parent.getBranchesContainer();\n assert(container !== undefined);\n this.detachedView.reattach();\n container.insert(this.detachedView, index);\n this.detachedView = null;\n this.setIndentation();\n }\n\n private setIndentation(): void {\n assert(this._parent !== undefined);\n const root = this._parent.root();\n if (root === undefined) {\n return;\n }\n const options = config.getConfig(root);\n const branchesContainerEl = this.branchController\n .getNativeElement()\n .getElementsByClassName(\"branches-container\")\n .item(0);\n assert(branchesContainerEl instanceof HTMLElement);\n branchesContainerEl.style.marginLeft = `${options?.indentation ?? 16}px`;\n }\n}\n","import { Injectable, type ViewContainerRef } from \"@angular/core\";\nimport { config, type TreeOptions } from \"../configuration\";\nimport { TreeRoot } from \"../tree-root\";\n\n/** Responsible for the creation of new trees. */\n@Injectable({ providedIn: \"root\" })\nexport class TreeService {\n /**\n * Creates a new, empty tree structure inside the provided container.\n *\n * @returns A `TreeRoot` representing the base of the new tree.\n */\n public createEmptyTree<Component>(\n container: ViewContainerRef,\n options: TreeOptions = {}\n ): TreeRoot<Component> {\n container.clear();\n const root = new TreeRoot<Component>(container);\n config.setConfig(root, options);\n return root;\n }\n}\n","import { Subject } from \"rxjs\";\nimport { type TreeBranch, type TreeNode, config } from \"../../core\";\nimport { TreeError } from \"../../errors\";\nimport { DragEndEvent, DragStartEvent, DropEvent } from \"../../events\";\nimport { dragState, DragStates } from \"./drag-state\";\nimport { assert } from \"../../../shared\";\n\nclass DragAndDrop {\n public readonly dragAborted$ = new Subject<DragEvent>();\n\n public dragStart<T>(treeBranch: TreeBranch<T>, event: DragEvent): void {\n if (!this.draggingAllowed(treeBranch)) {\n event.preventDefault();\n return;\n }\n treeBranch.dispatch(new DragStartEvent(treeBranch));\n this.setDragEffects(treeBranch, event);\n this.watchForDragend(treeBranch, event);\n // We have to do a setTimeout because DOM changes are not allowed during a\n // dragstart event.\n setTimeout(() => {\n dragState.starting(treeBranch);\n treeBranch.prune();\n dragState.dragging();\n });\n }\n\n public drop<T>(parent: TreeNode<T>, index: number): void {\n const treeBranch = dragState.getDragData<T>();\n if (treeBranch === undefined) {\n throw new TreeError(\"Cannot get dragged branch\");\n }\n this.graftDraggedBranch(treeBranch, parent, index);\n treeBranch.dispatch(new DropEvent(treeBranch, parent, index));\n }\n\n private getDragImageOffsets(\n event: DragEvent,\n element: Element\n ): [number, number] {\n const bounds = element.getBoundingClientRect();\n const xOffset = event.clientX - bounds.left;\n const yOffset = event.clientY - bounds.top;\n return [xOffset, yOffset];\n }\n\n private setDragEffects<T>(\n treeBranch: TreeBranch<T>,\n event: DragEvent\n ): void {\n const dataTransfer = event.dataTransfer;\n assert(dataTransfer instanceof DataTransfer);\n const nativeElement = treeBranch.getNativeElement();\n const [xOffset, yOffset] = this.getDragImageOffsets(event, nativeElement);\n dataTransfer.setDragImage(nativeElement, xOffset, yOffset);\n }\n\n private watchForDragend<T>(\n treeBranch: TreeBranch<T>,\n event: DragEvent\n ): void {\n const oldParent = treeBranch.parent();\n const oldIndex = treeBranch.index();\n assert(oldParent !== undefined && oldIndex !== undefined);\n event.target?.addEventListener(\n \"dragend\",\n (dragend) => {\n if (dragState.state() !== DragStates.Dropped) {\n //The drag ended but a drop never occurred, so put the dragged branch back where it started.\n this.dragAborted$.next(dragend as DragEvent);\n this.graftDraggedBranch(treeBranch, oldParent, oldIndex);\n }\n dragState.restart();\n const newParent = treeBranch.parent();\n assert(newParent !== undefined);\n const newIndex = treeBranch.index();\n assert(newIndex !== undefined);\n treeBranch.dispatch(\n new DragEndEvent(treeBranch, {\n oldParent,\n oldIndex,\n newParent,\n newIndex\n })\n );\n },\n { once: true }\n );\n }\n\n private draggingAllowed<T>(treeBranch: TreeBranch<T>): boolean {\n const allowDragging =\n config.getConfig(treeBranch.root())?.dragAndDrop?.allowDragging ??\n ((): true => true);\n return allowDragging(treeBranch);\n }\n\n private graftDraggedBranch<T>(\n treeBranch: TreeBranch<T>,\n parent: TreeNode<T>,\n index: number\n ): void {\n treeBranch.graftTo(parent, index);\n treeBranch.getNativeElement().style.display = \"block\";\n dragState.dropped();\n }\n}\n\nexport const dragAndDrop = new DragAndDrop();\n","import { assert } from \"../../../shared\";\nimport { BranchComponent, type DropzoneComponent } from \"../../components\";\nimport { dragState, DragStates } from \"./drag-state\";\nimport { dragAndDrop } from \"./drag-and-drop\";\nimport { TreeBranch, type TreeNode, TreeRoot, config } from \"../../core\";\nimport { filter, first } from \"rxjs\";\nimport { PruneEvent } from \"../../events\";\n\nclass DropzoneRenderer {\n private currentDisplay: {\n treeBranch: TreeNode<any>;\n direction: \"upper\" | \"lower\";\n } | null;\n private readonly registry: Map<DropzoneComponent, TreeNode<any>>;\n\n public constructor() {\n this.registry = new Map();\n this.currentDisplay = null;\n dragAndDrop.dragAborted$.subscribe(() => {\n this.clearCurrentDisplay();\n });\n dragState\n .events()\n .pipe(filter((event) => event === DragStates.Starting))\n .subscribe(() => {\n const branch = dragState.getDragData();\n assert(branch !== undefined);\n let cursor = branch.parent()?.getBranch((branch.index() ?? 0) - 1);\n let final = branch.parent();\n while (cursor !== undefined) {\n final = cursor;\n cursor = cursor.branches().at(-1);\n }\n branch\n .events()\n .pipe(\n filter((event) => event instanceof PruneEvent),\n first()\n )\n .subscribe(() => {\n assert(final !== undefined);\n this.showLowerZones(final);\n });\n });\n }\n\n public clearCurrentDisplay(): void {\n if (this.currentDisplay === null) return;\n for (const branch of this.registry.values()) {\n const instance = branch.getComponentInstance();\n instance.showInnerDropzone = false;\n if (instance instanceof BranchComponent) {\n instance.showLateralDropzone = false;\n }\n }\n this.currentDisplay = null;\n }\n\n public clearTreeFromRegistry(tree: TreeNode<any>): void {\n const nodes: Array<TreeNode<any>> = [];\n tree.traverse((node) => nodes.push(node));\n for (const [dropzoneComponent, treeNode] of this.registry) {\n if (nodes.includes(treeNode)) {\n this.registry.delete(dropzoneComponent);\n }\n }\n }\n\n public getCurrentDisplay(): {\n treeBranch: TreeNode<any>;\n direction: \"upper\" | \"lower\";\n } | null {\n if (this.currentDisplay === null) return null;\n return { ...this.currentDisplay };\n }\n\n public getDropzoneLocation<T>(\n dropzone: DropzoneComponent\n ): [TreeNode<T>, \"inner\" | \"lateral\"] {\n const branch = this.registry.get(dropzone);\n const placement = dropzone.placement;\n if (branch === undefined) {\n throw new Error(\"dropzone not found in registry\");\n }\n if (placement === undefined) {\n throw new Error(\"dropzone has an undefined placement\");\n }\n return [branch, placement];\n }\n\n public handleDrop<T>(\n treeNode: TreeNode<T>,\n placement: \"inner\" | \"lateral\"\n ): void {\n if (placement === \"inner\") {\n dragAndDrop.drop(treeNode, 0);\n } else if (treeNode instanceof TreeBranch && placement === \"lateral\") {\n const currentParent = treeNode.parent();\n const index = treeNode.index();\n if (currentParent === undefined || index === undefined) {\n throw new Error(\"branch must have a parent\");\n }\n dragAndDrop.drop(currentParent, index + 1);\n }\n this.clearCurrentDisplay();\n }\n\n public registerDropzone<T>(\n dropzone: DropzoneComponent,\n treeNode: TreeNode<T>\n ): void {\n this.registry.set(dropzone, treeNode);\n }\n\n public registerDropzones<T>(\n dropzones: Iterable<DropzoneComponent>,\n treeBranch: TreeBranch<T>\n ): void {\n for (const dropzone of dropzones) {\n this.registry.set(dropzone, treeBranch);\n }\n }\n\n public showLowerZones<T>(treeNode: TreeNode<T>): void {\n this.clearCurrentDisplay();\n this.showInnerZone(treeNode);\n if (treeNode.branches().length === 0) {\n this.loopThroughLowerZones(treeNode);\n }\n this.currentDisplay = { treeBranch: treeNode, direction: \"lower\" };\n }\n\n public showUpperZones<T>(treeBranch: TreeBranch<T>): void {\n this.clearCurrentDisplay();\n this.loopThroughUpperZones(treeBranch);\n this.currentDisplay = { treeBranch, direction: \"upper\" };\n }\n\n private loopThroughLowerZones<T>(treeNode: TreeNode<T>): void {\n let cursor: TreeNode<T> | undefined = treeNode;\n while (cursor instanceof TreeBranch) {\n this.showLateralZone(cursor);\n const parent = cursor.parent();\n const index = cursor.index();\n assert(parent !== undefined && index !== undefined);\n if (parent.branches().length > index + 1) {\n return;\n }\n cursor = cursor.parent();\n }\n }\n\n private loopThroughUpperZones<T>(treeBranch: TreeBranch<T>): void {\n let cursor = treeBranch\n .parent()\n ?.getBranch((treeBranch.index() ?? 0) - 1);\n let final = treeBranch.parent();\n while (cursor !== undefined) {\n this.showLateralZone(cursor);\n final = cursor;\n cursor = cursor.branches().at(-1);\n }\n if (\n final !== undefined &&\n (final instanceof TreeRoot || final instanceof TreeBranch)\n ) {\n this.showInnerZone(final);\n }\n }\n\n private nestingAllowed<T>(treeNode: TreeNode<T>): boolean {\n if (treeNode instanceof TreeRoot) {\n return true;\n }\n if (treeNode instanceof TreeBranch) {\n const allowNesting =\n config.getConfig(treeNode.root())?.dragAndDrop?.allowNesting ??\n ((): true => true);\n return allowNesting(treeNode);\n }\n throw new Error(\"unsupported treeNode type\");\n }\n\n private dropAllowed(parent: unknown, index: number): boolean {\n const sourceNode = dragState.getDragData();\n assert(sourceNode instanceof TreeBranch);\n if (parent instanceof TreeRoot) {\n const allowDrop =\n config.getConfig(parent)?.dragAndDrop?.allowDrop ??\n ((): true => true);\n return allowDrop(sourceNode, parent, index);\n }\n if (parent instanceof TreeBranch) {\n const allowDrop =\n config.getConfig(parent.root())?.dragAndDrop?.allowDrop ??\n ((): true => true);\n return allowDrop(sourceNode, parent, index);\n }\n throw new Error(\"unsupported treeNode type\");\n }\n\n private showInnerZone<T>(treeNode: TreeNode<T>): void {\n if (!this.nestingAllowed(treeNode) || !this.dropAllowed(treeNode, 0))\n return;\n treeNode.getComponentInstance().showInnerDropzone = true;\n }\n\n private showLateralZone<T>(treeBranch: TreeBranch<T>): void {\n const index = treeBranch.index();\n assert(index !== undefined);\n if (!this.dropAllowed(treeBranch.parent(), index + 1)) return;\n treeBranch.getComponentInstance().showLateralDropzone = true;\n }\n}\n\nexport const dropzoneRenderer = new DropzoneRenderer();\n","import { Injectable } from \"@angular/core\";\nimport type { Observable } from \"rxjs\";\nimport type { TreeNode, TreeRoot } from \"../../core\";\nimport { dragState, type DragStates } from \"./drag-state\";\nimport { dropzoneRenderer } from \"./dropzone-renderer\";\n\n@Injectable()\nexport class TreeDragAndDropService {\n /** Hides all Dropzones */\n public clearDropzones(): void {\n dropzoneRenderer.clearCurrentDisplay();\n }\n\n /**\n * @returns An object that indicates which dropzones are currently being displayed.\n * If no dropzones are being displayed, then null is returned.\n */\n public getCurrentlyDisplayedDropzoneFamily(): {\n treeBranch: TreeNode<any>;\n direction: \"upper\" | \"lower\";\n } | null {\n return dropzoneRenderer.getCurrentDisplay();\n }\n\n /**\n * Causes the dropzone of the TreeRoot to be displayed.\n *\n * @remarks\n * This is a useful function when you want to show the dropzone of a TreeRoot\n * that has no child branches.\n *\n * @param root - The TreeRoot whose dropzone you want to show.\n */\n public showRootDropzone<T>(root: TreeRoot<T>): void {\n dropzoneRenderer.showLowerZones(root);\n }\n\n /**\n * @returns An observable that emits a number whenever the drag state changes.\n *\n * @remarks\n * See the `DragStates` enum for a list of possible states.\n */\n public state(): Observable<DragStates> {\n return dragState.events();\n }\n}\n","import {\n Directive,\n ElementRef,\n HostListener,\n Input,\n Renderer2\n} from \"@angular/core\";\nimport type { TreeBranch } from \"../../core\";\nimport { dragAndDrop } from \"./drag-and-drop\";\n\n/** Makes an TreeBranch draggable when the host element is dragged */\n@Directive({\n selector: \"[limbleTreeDraggable]\",\n standalone: true\n})\nexport class DraggableDirective {\n @Input() limbleTreeDraggable?: TreeBranch<any> | undefined;\n\n public constructor(\n renderer: Renderer2,\n hostElement: ElementRef<HTMLElement>\n ) {\n renderer.setAttribute(hostElement.nativeElement, \"draggable\", \"true\");\n renderer.setStyle(hostElement.nativeElement, \"cursor\", \"grab\");\n }\n\n @HostListener(\"dragstart\", [\"$event\"]) public onDragstart(\n event: DragEvent\n ): void {\n if (this.limbleTreeDraggable === undefined) return;\n dragAndDrop.dragStart(this.limbleTreeDraggable, event);\n }\n}\n","import { NgModule } from \"@angular/core\";\nimport { TreeDragAndDropService } from \"./drag-and-drop.service\";\nimport { DraggableDirective } from \"./draggable.directive\";\n\n/**\n * An Angular module containing all of the entities which provide Drag-And-Drop\n * functionality.\n */\n@NgModule({\n imports: [DraggableDirective],\n providers: [TreeDragAndDropService],\n exports: [DraggableDirective]\n})\nexport class TreeDragAndDropModule {}\n","import type { Type, ViewContainerRef } from \"@angular/core\";\nimport { TreeRoot, type TreeBranch, type TreeOptions, config } from \"../core\";\nimport type { LimbleTreeOptions as LegacyLimbleTreeOptions } from \"./legacy-tree-options.interface\";\nimport type {\n LimbleTreeData,\n LimbleTreeNode\n} from \"./legacy-tree-data.interface\";\nimport { TreeError } from \"../errors\";\nimport { treeCollapser } from \"../extras/collapse\";\n\n/**\n * A shim to help with the transition from v0 to v1.\n * @deprecated\n */\nexport class LegacyTree {\n /** Creates a v1 tree structure from a v0 data array and v0 tree options. */\n public createTreeFromLegacyArray<Component>(\n container: ViewContainerRef,\n data: LimbleTreeData,\n treeOptions: LegacyLimbleTreeOptions = {}\n ): TreeRoot<Component> {\n const root = new TreeRoot<Component>(container);\n config.setConfig(root, this.upgradeOptions(treeOptions));\n for (const node of data) {\n this.renderTreeNode(root, node, treeOptions);\n }\n return root;\n }\n\n public upgradeOptions(legacyOptions: LegacyLimbleTreeOptions): TreeOptions {\n return {\n indentation: legacyOptions.indent,\n dragAndDrop: {\n allowNesting: (branch): boolean => {\n if (legacyOptions.listMode === true) {\n return false;\n }\n if (legacyOptions.allowNesting === undefined) {\n return true;\n }\n if (typeof legacyOptions.allowNesting === \"boolean\") {\n return legacyOptions.allowNesting;\n }\n return legacyOptions.allowNesting(branch as any);\n },\n allowDragging: (branch): boolean => {\n if (legacyOptions.allowDragging === undefined) {\n return true;\n }\n if (typeof legacyOptions.allowDragging === \"boolean\") {\n return legacyOptions.allowDragging;\n }\n return legacyOptions.allowDragging(branch as any);\n },\n allowDrop: (source, parent, index): boolean => {\n if (legacyOptions.allowDrop === undefined) {\n return true;\n }\n return legacyOptions.allowDrop(\n source as any,\n parent as any,\n index\n );\n }\n }\n };\n }\n\n private renderTreeNode<T>(\n parent: TreeRoot<T> | TreeBranch<T>,\n node: LimbleTreeNode,\n options: LegacyLimbleTreeOptions\n ): void {\n const component =\n node.component?.class ?? options.defaultComponent?.class;\n if (component === undefined) {\n throw new TreeError(\"A component must be provided\");\n }\n const bindings = (node.component?.bindings ??\n options.defaultComponent?.bindings ??\n {}) as { [K in keyof T]?: T[K] | undefined };\n const nodeData = node;\n const branch = parent.grow(component as Type<T>, {\n inputBindings: bindings,\n meta: { nodeData }\n });\n for (const childNode of node.nodes ?? []) {\n this.renderTreeNode(branch, childNode, options);\n }\n if (node.collapsed === true) {\n treeCollapser.collapse(branch);\n }\n }\n}\n","import {\n type AfterViewInit,\n Component,\n EventEmitter,\n Input,\n type OnChanges,\n type OnDestroy,\n Output,\n ViewChild,\n ViewContainerRef\n} from \"@angular/core\";\nimport { LegacyTree } from \"../legacy-tree\";\nimport { TreeError } from \"../../errors\";\nimport type { LimbleTreeData } from \"../legacy-tree-data.interface\";\nimport type { LimbleTreeOptions } from \"../legacy-tree-options.interface\";\nimport type { TreeRoot } from \"../../core\";\nimport { filter, type Subscription } from \"rxjs\";\nimport { DragEndEvent } from \"../../events\";\nimport { assert } from \"../../../shared\";\n\n/** @deprecated */\n@Component({\n selector: \"limble-tree-root\",\n templateUrl: \"./limble-tree-root.component.html\",\n standalone: true\n})\nexport class LimbleTreeRootComponent\n implements AfterViewInit, OnChanges, OnDestroy\n{\n @Input() data?: LimbleTreeData;\n @Input() options?: LimbleTreeOptions | undefined;\n @Input() itemsPerPage: number = Infinity;\n @Input() page: number = 1;\n\n @ViewChild(\"host\", { read: ViewContainerRef }) host?: ViewContainerRef;\n\n @Output() readonly treeChange = new EventEmitter<TreeRoot<any>>();\n @Output() readonly treeDrop = new EventEmitter<DragEndEvent<any>>();\n\n private dropSubscription?: Subscription;\n private readonly legacyTree: LegacyTree;\n private root?: TreeRoot<any>;\n\n public constructor() {\n this.legacyTree = new LegacyTree();\n }\n\n public ngAfterViewInit(): void {\n this.update();\n }\n\n public ngOnChanges(): void {\n if (this.host !== undefined && this.data !== undefined) {\n this.update();\n }\n }\n\n public ngOnDestroy(): void {\n this.dropSubscription?.unsubscribe();\n this.root?.destroy();\n }\n\n public getRoot(): TreeRoot<any> | undefined {\n return this.root;\n }\n\n public update(): void {\n if (this.data === undefined) {\n throw new TreeError(\n \"LimbleTreeRootComponent's `data` input is required\"\n );\n }\n if (this.host === undefined) {\n throw new TreeError(\n \"LimbleTreeRootComponent's `host` property is not defined\"\n );\n }\n this.root?.destroy();\n this.dropSubscription?.unsubscribe();\n const dataSlice = this.paginatedData();\n this.root = this.legacyTree.createTreeFromLegacyArray(\n this.host,\n dataSlice,\n this.options\n );\n this.dropSubscription = this.root\n .events()\n .pipe(\n filter(\n (event): event is DragEndEvent<any> =>\n event instanceof DragEndEvent\n )\n )\n .subscribe(this.treeDrop);\n this.treeChange.emit(this.root);\n }\n\n private paginatedData(): LimbleTreeData {\n assert(this.data !== undefined);\n if (this.options?.listMode !== true) {\n return this.data;\n }\n return this.data.slice(\n (this.page - 1) * this.itemsPerPage,\n this.page * this.itemsPerPage\n );\n }\n}\n","<div #host></div>\n","import { NgModule } from \"@angular/core\";\nimport { LimbleTreeRootComponent } from \"./limble-tree-root/limble-tree-root.component\";\nimport { LegacyTree } from \"./legacy-tree\";\n\n/** @deprecated */\n@NgModule({\n declarations: [],\n imports: [LimbleTreeRootComponent],\n providers: [LegacyTree],\n exports: [LimbleTreeRootComponent]\n})\nexport class LimbleTreeLegacyModule {}\n","import { NgModule } from \"@angular/core\";\nimport { TreeCollapseModule } from \"./extras/collapse\";\nimport { TreeDragAndDropModule } from \"./extras/drag-and-drop\";\nimport { TreeService } from \"./core\";\nimport { LimbleTreeLegacyModule } from \"./legacy\";\n\n/**\n * Import this Angular module into your application to gain access to the\n * components, directives, and services provided by Limble Tree.\n */\n@NgModule({\n declarations: [],\n imports: [LimbleTreeLegacyModule, TreeCollapseModule, TreeDragAndDropModule],\n providers: [TreeService],\n exports: [LimbleTreeLegacyModule, TreeCollapseModule, TreeDragAndDropModule]\n})\nexport class LimbleTreeModule {}\n","/*\n * Public API Surface of limble-tree\n */\n\nexport { LimbleTreeModule } from \"./lib/limble-tree.module\";\nexport {\n TreeService,\n TreeRoot,\n TreeBranch,\n type TreeOptions,\n type TreeNode,\n type TreePlot\n} from \"./lib/core\";\nexport { TreeError } from \"./lib/errors\";\nexport {\n type TreeEvent,\n GraftEvent,\n PruneEvent,\n DragStartEvent,\n DragEndEvent,\n DropEvent,\n DestructionEvent\n} from \"./lib/events\";\nexport { TreeCollapseModule, TreeCollapseService } from \"./lib/extras/collapse\";\nexport {\n TreeDragAndDropModule,\n TreeDragAndDropService,\n DraggableDirective\n} from \"./lib/extras/drag-and-drop\";\nexport {\n type ComponentObj,\n type LimbleTreeNode,\n type LimbleTreeData,\n type LimbleTreeOptions,\n LimbleTreeRootComponent,\n LimbleTreeLegacyModule\n} from \"./lib/legacy\";\nexport {\n DragoverNoChangeDetectDirective,\n BranchComponent,\n RootComponent,\n type HostComponent,\n type NodeComponent\n} from \"./lib/components\";\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes