@limble/limble-tree 1.0.0-alpha.1 → 1.0.0-alpha.2

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 (57) hide show
  1. package/README.md +446 -17
  2. package/esm2020/lib/components/branch/branch.component.mjs +6 -14
  3. package/esm2020/lib/components/root/root.component.mjs +3 -4
  4. package/esm2020/lib/core/branch-options.interface.mjs +1 -1
  5. package/esm2020/lib/core/configuration/tree-options.interface.mjs +1 -1
  6. package/esm2020/lib/core/relationship.interface.mjs +1 -1
  7. package/esm2020/lib/core/tree-branch/branch-controller.mjs +99 -0
  8. package/esm2020/lib/core/tree-branch/tree-branch.mjs +81 -103
  9. package/esm2020/lib/core/tree-node-base.mjs +10 -9
  10. package/esm2020/lib/core/tree-root/root-controller.mjs +42 -0
  11. package/esm2020/lib/core/tree-root/tree-root.mjs +43 -27
  12. package/esm2020/lib/events/drag/drag-end-event.mjs +1 -1
  13. package/esm2020/lib/events/drag/drop-event.mjs +1 -1
  14. package/esm2020/lib/events/general/destruction-event.mjs +12 -0
  15. package/esm2020/lib/events/general/index.mjs +2 -0
  16. package/esm2020/lib/events/index.mjs +2 -1
  17. package/esm2020/lib/extras/collapse/collapse.mjs +2 -2
  18. package/esm2020/lib/extras/drag-and-drop/drag-and-drop.mjs +6 -10
  19. package/esm2020/lib/extras/drag-and-drop/draggable.directive.mjs +1 -1
  20. package/esm2020/lib/extras/drag-and-drop/dropzone-renderer.mjs +9 -7
  21. package/esm2020/lib/legacy/legacy-tree.mjs +28 -29
  22. package/esm2020/lib/structure/branchable.interface.mjs +1 -1
  23. package/esm2020/lib/structure/component-container.interface.mjs +2 -0
  24. package/esm2020/lib/structure/index.mjs +2 -4
  25. package/esm2020/lib/structure/tree-branch-node.interface.mjs +1 -1
  26. package/esm2020/lib/structure/tree-node.interface.mjs +1 -1
  27. package/fesm2015/limble-limble-tree.mjs +317 -193
  28. package/fesm2015/limble-limble-tree.mjs.map +1 -1
  29. package/fesm2020/limble-limble-tree.mjs +315 -189
  30. package/fesm2020/limble-limble-tree.mjs.map +1 -1
  31. package/lib/core/branch-options.interface.d.ts +1 -1
  32. package/lib/core/configuration/tree-options.interface.d.ts +23 -26
  33. package/lib/core/relationship.interface.d.ts +2 -3
  34. package/lib/core/tree-branch/branch-controller.d.ts +25 -0
  35. package/lib/core/tree-branch/tree-branch.d.ts +18 -18
  36. package/lib/core/tree-node-base.d.ts +4 -5
  37. package/lib/core/tree-root/root-controller.d.ts +19 -0
  38. package/lib/core/tree-root/tree-root.d.ts +11 -9
  39. package/lib/events/drag/drag-end-event.d.ts +5 -6
  40. package/lib/events/drag/drop-event.d.ts +3 -6
  41. package/lib/events/general/destruction-event.d.ts +8 -0
  42. package/lib/events/general/index.d.ts +1 -0
  43. package/lib/events/index.d.ts +1 -0
  44. package/lib/extras/drag-and-drop/drag-and-drop.d.ts +2 -3
  45. package/lib/extras/drag-and-drop/draggable.directive.d.ts +1 -1
  46. package/lib/structure/branchable.interface.d.ts +0 -1
  47. package/lib/structure/component-container.interface.d.ts +8 -0
  48. package/lib/structure/index.d.ts +1 -3
  49. package/lib/structure/tree-branch-node.interface.d.ts +2 -2
  50. package/lib/structure/tree-node.interface.d.ts +3 -1
  51. package/package.json +1 -1
  52. package/esm2020/lib/structure/container-tree-node.interface.mjs +0 -2
  53. package/esm2020/lib/structure/content-container.interface.mjs +0 -2
  54. package/esm2020/lib/structure/tree-root.node.interface.mjs +0 -2
  55. package/lib/structure/container-tree-node.interface.d.ts +0 -3
  56. package/lib/structure/content-container.interface.d.ts +0 -3
  57. package/lib/structure/tree-root.node.interface.d.ts +0 -2
@@ -1 +1 @@
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/lib/core/configuration/configuration.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/shared/assert.ts","../../../projects/limble-tree/src/lib/extras/drag-and-drop/drag-state.ts","../../../projects/limble-tree/src/lib/events/drag/drop-event.ts","../../../projects/limble-tree/src/lib/extras/drag-and-drop/drag-and-drop.ts","../../../projects/limble-tree/src/lib/extras/drag-and-drop/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/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/components/root/root.component.ts","../../../projects/limble-tree/src/lib/components/root/root.component.html","../../../projects/limble-tree/src/lib/core/tree-root/tree-root.ts","../../../projects/limble-tree/src/lib/core/tree-service/tree.service.ts","../../../projects/limble-tree/src/lib/core/tree-branch/tree-branch.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 { 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.getContents().changeDetectorRef.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@Injectable()\nexport class TreeCollapseService {\n public collapse<T>(treeBranch: TreeBranch<T>): void {\n treeCollapser.collapse(treeBranch);\n }\n\n public expand<T>(treeBranch: TreeBranch<T>): void {\n treeCollapser.expand(treeBranch);\n }\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@NgModule({\n providers: [TreeCollapseService]\n})\nexport class TreeCollapseModule {}\n","import { TreeRoot } from \"../tree-root/tree-root\";\nimport { 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","export class TreeError extends Error {}\n","import { ComponentRef } from \"@angular/core\";\nimport { NodeComponent } from \"../../components/node-component.interface\";\nimport { TreeBranch } from \"../../core\";\nimport { ContainerTreeNode } from \"../../structure\";\nimport { EventConduit } from \"../../structure/event-conduit.interface\";\nimport { TreeEvent } from \"../../structure/tree-event.interface\";\n\nexport class DragEndEvent<T> implements TreeEvent {\n private readonly _source: EventConduit;\n private readonly _newParent: ContainerTreeNode<\n ComponentRef<NodeComponent>,\n TreeBranch<T>\n >;\n private readonly _newIndex: number;\n private readonly _oldParent: ContainerTreeNode<\n ComponentRef<NodeComponent>,\n TreeBranch<T>\n >;\n private readonly _oldIndex: number;\n\n public constructor(\n source: EventConduit,\n endpoints: {\n oldParent: ContainerTreeNode<\n ComponentRef<NodeComponent>,\n TreeBranch<T>\n >;\n oldIndex: number;\n newParent: ContainerTreeNode<\n ComponentRef<NodeComponent>,\n TreeBranch<T>\n >;\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 public type(): \"drag end\" {\n return \"drag end\";\n }\n\n public source(): EventConduit {\n return this._source;\n }\n\n public newIndex(): number {\n return this._newIndex;\n }\n\n public newParent(): ContainerTreeNode<\n ComponentRef<NodeComponent>,\n TreeBranch<T>\n > {\n return this._newParent;\n }\n\n public oldIndex(): number {\n return this._oldIndex;\n }\n\n public oldParent(): ContainerTreeNode<\n ComponentRef<NodeComponent>,\n TreeBranch<T>\n > {\n return this._oldParent;\n }\n}\n","import { EventConduit } from \"../../structure/event-conduit.interface\";\nimport { TreeEvent } from \"../../structure/tree-event.interface\";\n\nexport class DragStartEvent implements TreeEvent {\n private readonly _source: EventConduit;\n\n public constructor(source: EventConduit) {\n this._source = source;\n }\n\n public type(): \"drag start\" {\n return \"drag start\";\n }\n\n public source(): EventConduit {\n return this._source;\n }\n}\n","export function assert(condition: unknown): asserts condition {\n if (condition) {\n return;\n }\n throw new Error(\"Assertion Failed!\");\n}\n","import { assert } from \"../../../shared/assert\";\nimport { BehaviorSubject, 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 { ComponentRef } from \"@angular/core\";\nimport { NodeComponent } from \"../../components/node-component.interface\";\nimport { TreeBranch } from \"../../core\";\nimport { ContainerTreeNode } from \"../../structure/container-tree-node.interface\";\nimport { EventConduit } from \"../../structure/event-conduit.interface\";\nimport { TreeEvent } from \"../../structure/tree-event.interface\";\n\nexport class DropEvent<T> implements TreeEvent {\n private readonly _source: EventConduit;\n private readonly _parent: ContainerTreeNode<\n ComponentRef<NodeComponent>,\n TreeBranch<T>\n >;\n private readonly _index: number;\n\n public constructor(\n source: EventConduit,\n parent: ContainerTreeNode<ComponentRef<NodeComponent>, TreeBranch<T>>,\n index: number\n ) {\n this._source = source;\n this._parent = parent;\n this._index = index;\n }\n\n public type(): \"drag end\" {\n return \"drag end\";\n }\n\n public source(): EventConduit {\n return this._source;\n }\n\n public index(): number {\n return this._index;\n }\n\n public parent(): ContainerTreeNode<\n ComponentRef<NodeComponent>,\n TreeBranch<T>\n > {\n return this._parent;\n }\n}\n","import { ComponentRef } from \"@angular/core\";\nimport { Subject } from \"rxjs\";\nimport { NodeComponent } from \"../../components/node-component.interface\";\nimport { TreeBranch } from \"../../core\";\nimport { config } from \"../../core/configuration/configuration\";\nimport { TreeError } from \"../../errors\";\nimport { DragEndEvent } from \"../../events/drag/drag-end-event\";\nimport { DragStartEvent } from \"../../events/drag/drag-start-event\";\nimport { ContainerTreeNode } from \"../../structure/container-tree-node.interface\";\nimport { dragState, DragStates } from \"./drag-state\";\nimport { DropEvent } from \"../../events/drag/drop-event\";\nimport { assert } from \"../../../shared/assert\";\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>(\n parent: ContainerTreeNode<ComponentRef<NodeComponent>, TreeBranch<T>>,\n index: number\n ): 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 if (!(dataTransfer instanceof DataTransfer)) {\n throw new Error(\"bad drag event\");\n }\n const nativeElement = treeBranch.getContents().location.nativeElement;\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 if (oldParent === undefined || oldIndex === undefined) {\n throw new Error(\"branch must have a parent\");\n }\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())?.allowDragging ??\n ((): true => true);\n return allowDragging(treeBranch);\n }\n\n private graftDraggedBranch<T>(\n treeBranch: TreeBranch<T>,\n parent: ContainerTreeNode<ComponentRef<NodeComponent>, TreeBranch<T>>,\n index: number\n ): void {\n treeBranch.graftTo(parent, index);\n (\n treeBranch.getContents().location.nativeElement as HTMLElement\n ).style.display = \"block\";\n dragState.dropped();\n }\n}\n\nexport const dragAndDrop = new DragAndDrop();\n","import {\n Directive,\n ElementRef,\n EventEmitter,\n Input,\n NgZone,\n OnDestroy,\n OnInit,\n Output\n} from \"@angular/core\";\nimport { fromEvent, Subscription } from \"rxjs\";\nimport { throttleTime } from \"rxjs/operators\";\n\n@Directive({\n standalone: true,\n selector: \"[dragoverNoChangeDetect]\"\n})\nexport class DragoverNoChangeDetectDirective implements OnInit, OnDestroy {\n @Input() dragoverEventThrottle: number;\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 this.dragoverEventThrottle = 25;\n }\n\n public ngOnInit(): void {\n this.ngZone.runOutsideAngular(() => {\n this.eventSubscription = fromEvent<DragEvent>(\n this.el.nativeElement,\n \"dragover\"\n )\n .pipe(throttleTime(this.dragoverEventThrottle))\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 \"../../extras/drag-and-drop/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 AfterViewInit,\n ApplicationRef,\n Component,\n ComponentRef,\n EventEmitter,\n Input,\n NgZone,\n OnDestroy,\n Output,\n QueryList,\n Type,\n ViewChild,\n ViewChildren,\n ViewContainerRef\n} from \"@angular/core\";\nimport { map, merge } from \"rxjs\";\nimport { TreeError } from \"../../errors\";\nimport { DropzoneComponent } from \"../dropzone/dropzone.component\";\nimport { HostComponent } from \"../host-component.interface\";\nimport { NodeComponent } from \"../node-component.interface\";\nimport { DragoverNoChangeDetectDirective } from \"../../extras/drag-and-drop/dragover-no-change-detect\";\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 if (this.contentContainer === undefined) {\n throw new TreeError(\"Cannot get contentContainer\");\n }\n if (this.contentToHost === undefined) {\n throw new TreeError(\"'content' is a required input\");\n }\n this.hostedContent = this.contentContainer.createComponent(\n this.contentToHost\n );\n this.contentCreated.emit(this.hostedContent.instance);\n if (this.dropzones === undefined) {\n throw new Error(\"querylist not defined\");\n }\n const inner = this.dropzones.get(0);\n const lateral = this.dropzones.get(1);\n if (inner === undefined || lateral == undefined) {\n throw new Error(\"dropzones not defined\");\n }\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 { EventConduit } from \"../../structure/event-conduit.interface\";\nimport { RelationalTreeEvent } from \"./relational-tree-event.interface\";\nimport { TreeRelationship } from \"../../structure/tree-relationship.interface\";\n\nexport class GraftEvent<T extends TreeRelationship<any, any>>\n implements RelationalTreeEvent<T[\"parent\"], T[\"child\"]>\n{\n private readonly _source: EventConduit;\n private readonly _parent: T[\"parent\"];\n private readonly _child: T[\"child\"];\n private readonly _index: number;\n\n public constructor(source: EventConduit, relationship: T) {\n this._source = source;\n this._child = relationship.child;\n this._parent = relationship.parent;\n this._index = relationship.index;\n }\n\n public child(): T[\"child\"] {\n return this._child;\n }\n\n public type(): \"graft\" {\n return \"graft\";\n }\n\n public index(): number {\n return this._index;\n }\n\n public parent(): T[\"parent\"] {\n return this._parent;\n }\n\n public source(): EventConduit {\n return this._source;\n }\n}\n","import { EventConduit } from \"../../structure/event-conduit.interface\";\nimport { RelationalTreeEvent } from \"./relational-tree-event.interface\";\nimport { TreeRelationship } from \"../../structure/tree-relationship.interface\";\n\nexport class PruneEvent<T extends TreeRelationship<any, any>>\n implements RelationalTreeEvent<T[\"parent\"], T[\"child\"]>\n{\n private readonly _source: EventConduit;\n private readonly _parent: T[\"parent\"];\n private readonly _child: T[\"child\"];\n private readonly _index: number;\n\n public constructor(source: EventConduit, relationship: T) {\n this._source = source;\n this._child = relationship.child;\n this._parent = relationship.parent;\n this._index = relationship.index;\n }\n\n public child(): T[\"child\"] {\n return this._child;\n }\n\n public type(): \"prune\" {\n return \"prune\";\n }\n\n public index(): number {\n return this._index;\n }\n\n public parent(): T[\"parent\"] {\n return this._parent;\n }\n\n public source(): EventConduit {\n return this._source;\n }\n}\n","import { ComponentRef } from \"@angular/core\";\nimport { filter, Observable, Subject, Subscription } from \"rxjs\";\nimport { NodeComponent } from \"../components/node-component.interface\";\nimport { TreeError } from \"../errors\";\nimport { GraftEvent } from \"../events/relational/graft-event\";\nimport { PruneEvent } from \"../events/relational/prune-event\";\nimport { TreeEvent } from \"../structure/tree-event.interface\";\nimport { ContainerTreeNode } from \"../structure/container-tree-node.interface\";\nimport { TreeNode } from \"../structure/tree-node.interface\";\nimport { TreePlot } from \"../structure/tree-plot\";\nimport { Relationship } from \"./relationship.interface\";\nimport { TreeBranch } from \"./tree-branch/tree-branch\";\n\nexport class TreeNodeBase<UserlandComponent>\n implements Partial<TreeNode<TreeBranch<UserlandComponent>>>\n{\n private readonly _branches: Array<TreeBranch<UserlandComponent>>;\n private readonly events$: Subject<TreeEvent>;\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 deleteBranch(index?: number): void {\n if (index === undefined) {\n this._branches.pop();\n return;\n }\n this._branches.splice(index, 1);\n }\n\n public destroy(): void {\n this.subscriptions.forEach((sub) => {\n sub.unsubscribe();\n });\n }\n\n public dispatch(event: TreeEvent): void {\n this.events$.next(event);\n }\n\n public events(): Observable<TreeEvent> {\n return this.events$;\n }\n\n public getBranch(index: number): TreeBranch<UserlandComponent> | undefined {\n return this._branches[index];\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: (\n node: ContainerTreeNode<\n ComponentRef<NodeComponent>,\n TreeBranch<UserlandComponent>\n >\n ) => 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.deleteBranch(index);\n }\n\n private graftsToSelf(): Observable<\n GraftEvent<Relationship<UserlandComponent>>\n > {\n return this.events().pipe(\n filter(\n (event): event is GraftEvent<Relationship<UserlandComponent>> =>\n event instanceof GraftEvent\n ),\n filter((event) => event.parent().events() === this.events$)\n );\n }\n\n private prunesToSelf(): Observable<\n PruneEvent<Relationship<UserlandComponent>>\n > {\n return this.events().pipe(\n filter(\n (event): event is PruneEvent<Relationship<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 { CommonModule } from \"@angular/common\";\nimport {\n AfterViewInit,\n Component,\n EventEmitter,\n Output,\n ViewChild,\n ViewContainerRef\n} from \"@angular/core\";\nimport { DropzoneComponent } from \"../dropzone/dropzone.component\";\nimport { 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 if (this.dropzone === undefined) {\n throw new Error(\"dropzone is not defined\");\n }\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 { TreePlot } from \"../../structure/tree-plot\";\nimport { Observable, Subscription } from \"rxjs\";\nimport { TreeEvent } from \"../../structure/tree-event.interface\";\nimport { TreeBranch } from \"../tree-branch/tree-branch\";\nimport { ComponentRef, Type, ViewContainerRef } from \"@angular/core\";\nimport { RootComponent } from \"../../components/root/root.component\";\nimport { TreeNodeBase } from \"../tree-node-base\";\nimport { TreeRootNode } from \"../../structure/tree-root.node.interface\";\nimport { ContainerTreeNode } from \"../../structure/container-tree-node.interface\";\nimport { NodeComponent } from \"../../components/node-component.interface\";\nimport { BranchOptions } from \"../branch-options.interface\";\nimport { dropzoneRenderer } from \"../../extras/drag-and-drop/dropzone-renderer\";\nimport { config } from \"../configuration/configuration\";\n\nexport class TreeRoot<UserlandComponent>\n implements\n TreeRootNode<ComponentRef<RootComponent>, TreeBranch<UserlandComponent>>\n{\n private readonly instanceSubscriptions: Array<Subscription>;\n private readonly rootComponentRef: ComponentRef<RootComponent>;\n private readonly treeNodeBase: TreeNodeBase<UserlandComponent>;\n\n public constructor(private readonly viewContainerRef: ViewContainerRef) {\n this.treeNodeBase = new TreeNodeBase();\n this.rootComponentRef =\n this.viewContainerRef.createComponent(RootComponent);\n const viewInitSub =\n this.rootComponentRef.instance.afterViewInit.subscribe(() => {\n const dropzone = this.rootComponentRef.instance.dropzone;\n if (!dropzone) {\n throw new Error(\"dropzone not defined\");\n }\n dropzoneRenderer.registerDropzone(dropzone, this);\n });\n const droppedSub = this.rootComponentRef.instance.dropped.subscribe(\n () => {\n dropzoneRenderer.handleDrop(this, \"inner\");\n }\n );\n this.instanceSubscriptions = [viewInitSub, droppedSub];\n this.rootComponentRef.changeDetectorRef.detectChanges();\n }\n\n public branches(): Array<TreeBranch<UserlandComponent>> {\n return this.treeNodeBase.branches();\n }\n\n public deleteBranch(index?: number): void {\n this.treeNodeBase.deleteBranch(index);\n }\n\n public destroy(): void {\n dropzoneRenderer.clearTreeFromRegistry(this);\n this.branches().forEach((branch) => {\n branch.destroy();\n });\n this.treeNodeBase.destroy();\n this.instanceSubscriptions.forEach((sub) => {\n sub.unsubscribe();\n });\n this.viewContainerRef.clear();\n config.delete(this);\n }\n\n public dispatch(event: TreeEvent): void {\n this.treeNodeBase.dispatch(event);\n }\n\n public events(): Observable<TreeEvent> {\n return this.treeNodeBase.events();\n }\n\n public getBranch(index: number): TreeBranch<UserlandComponent> | undefined {\n return this.treeNodeBase.getBranch(index);\n }\n\n public getContents(): ComponentRef<RootComponent> {\n return this.rootComponentRef;\n }\n\n public grow(\n component: Type<UserlandComponent>,\n options?: BranchOptions<UserlandComponent>\n ): TreeBranch<UserlandComponent> {\n return new TreeBranch(this, { component, ...options });\n }\n\n public plot(): TreePlot {\n return this.treeNodeBase.plot();\n }\n\n public root(): this {\n return this;\n }\n\n public traverse(\n callback: (\n node: ContainerTreeNode<\n ComponentRef<NodeComponent>,\n TreeBranch<UserlandComponent>\n >\n ) => void\n ): void {\n callback(this);\n this.treeNodeBase.traverse(callback);\n }\n}\n","import { Injectable, ViewContainerRef } from \"@angular/core\";\nimport { config } from \"../configuration/configuration\";\nimport { TreeOptions } from \"../configuration/tree-options.interface\";\nimport { TreeRoot } from \"../tree-root/tree-root\";\n\n@Injectable({ providedIn: \"root\" })\nexport class TreeService {\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 { assert } from \"../../../shared/assert\";\nimport { TreePlot } from \"../../structure/tree-plot\";\nimport { filter, Observable, Subscription } from \"rxjs\";\nimport { GraftEvent } from \"../../events/relational/graft-event\";\nimport { PruneEvent } from \"../../events/relational/prune-event\";\nimport { TreeEvent } from \"../../structure/tree-event.interface\";\nimport { TreeBranchNode } from \"../../structure/tree-branch-node.interface\";\nimport {\n ComponentRef,\n createComponent,\n EnvironmentInjector,\n Type,\n ViewRef\n} from \"@angular/core\";\nimport { BranchComponent } from \"../../components/branch/branch.component\";\nimport { ContainerTreeNode } from \"../../structure/container-tree-node.interface\";\nimport { NodeComponent } from \"../../components/node-component.interface\";\nimport { TreeNodeBase } from \"../tree-node-base\";\nimport { TreeError } from \"../../errors/tree-error\";\nimport { BranchOptions, FullBranchOptions } from \"../branch-options.interface\";\nimport { dropzoneRenderer } from \"../../extras/drag-and-drop/dropzone-renderer\";\nimport { config } from \"../configuration/configuration\";\nimport { TreeRoot } from \"..\";\nimport { treeCollapser } from \"../../extras/collapse/collapse\";\n\nexport class TreeBranch<UserlandComponent>\n implements\n TreeBranchNode<\n ComponentRef<BranchComponent<UserlandComponent>>,\n TreeBranch<UserlandComponent>,\n ComponentRef<NodeComponent>\n >\n{\n private readonly contents: ComponentRef<BranchComponent<UserlandComponent>>;\n private readonly instanceSubscriptions: Array<Subscription>;\n private readonly outputBindingSubscriptions: Array<Subscription>;\n private _parent:\n | ContainerTreeNode<\n ComponentRef<NodeComponent>,\n TreeBranch<UserlandComponent>\n >\n | undefined;\n private readonly treeNodeBase: TreeNodeBase<UserlandComponent>;\n private readonly userlandComponent: Type<UserlandComponent>;\n private detachedView: ViewRef | null = null;\n\n public constructor(\n parent: ContainerTreeNode<\n ComponentRef<NodeComponent>,\n TreeBranch<UserlandComponent>\n >,\n public readonly branchOptions: FullBranchOptions<UserlandComponent>\n ) {\n this.treeNodeBase = new TreeNodeBase();\n this.userlandComponent = this.branchOptions.component;\n const parentBranchesContainer =\n parent.getContents().instance.branchesContainer;\n assert(parentBranchesContainer !== undefined);\n this.contents = createComponent<BranchComponent<UserlandComponent>>(\n BranchComponent,\n {\n environmentInjector:\n parentBranchesContainer.injector.get(EnvironmentInjector)\n }\n );\n this.contents.instance.contentToHost = this.userlandComponent;\n this.setIndentation(parent);\n this.outputBindingSubscriptions = [];\n this.instanceSubscriptions = this.getInstanceSubscriptions();\n if (\n parent instanceof TreeBranch &&\n parent.branchOptions.startCollapsed === true\n ) {\n treeCollapser.storePrecollapsedNode(parent, this);\n this.detachedView = this.contents.hostView;\n } else {\n parentBranchesContainer.insert(this.contents.hostView);\n this.contents.changeDetectorRef.detectChanges();\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 }\n }\n\n public branches(): Array<TreeBranch<UserlandComponent>> {\n return this.treeNodeBase.branches();\n }\n\n public deleteBranch(index?: number): void {\n this.treeNodeBase.deleteBranch(index);\n }\n\n public destroy(): void {\n if (treeCollapser.isCollapsed(this)) {\n treeCollapser.expand(this);\n dropzoneRenderer.clearTreeFromRegistry(this);\n }\n this.branches().forEach((branch) => {\n branch.destroy();\n });\n const parent = this._parent;\n const index = this.index();\n if (index !== undefined && parent !== undefined) {\n const container = parent.getContents().instance.branchesContainer;\n assert(container !== undefined);\n container.remove(index);\n parent.deleteBranch(index);\n }\n this.treeNodeBase.destroy();\n this.instanceSubscriptions.forEach((sub) => {\n sub.unsubscribe();\n });\n this.outputBindingSubscriptions.forEach((sub) => {\n sub.unsubscribe();\n });\n }\n\n public dispatch(event: TreeEvent): void {\n this.treeNodeBase.dispatch(event);\n this._parent?.dispatch(event);\n }\n\n public events(): Observable<TreeEvent> {\n return this.treeNodeBase.events();\n }\n\n public getBranch(index: number): TreeBranch<UserlandComponent> | undefined {\n return this.treeNodeBase.getBranch(index);\n }\n\n public getContents(): ComponentRef<BranchComponent<UserlandComponent>> {\n return this.contents;\n }\n\n public graftTo(\n newParent: ContainerTreeNode<\n ComponentRef<NodeComponent>,\n TreeBranch<UserlandComponent>\n >,\n index?: number\n ): number {\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 public grow(\n component: Type<UserlandComponent>,\n options?: BranchOptions<UserlandComponent>\n ): TreeBranch<UserlandComponent> {\n return new TreeBranch(this, { component, ...options });\n }\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 public meta(): Record<string, any> {\n return this.branchOptions.meta ?? {};\n }\n\n public parent():\n | ContainerTreeNode<\n ComponentRef<NodeComponent>,\n TreeBranch<UserlandComponent>\n >\n | undefined {\n return this._parent;\n }\n\n public plot(): TreePlot {\n return this.treeNodeBase.plot();\n }\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 public prune(): this | undefined {\n const parent = this._parent;\n const index = this.index();\n if (index === undefined || parent === undefined) return;\n const container = parent.getContents().instance.branchesContainer;\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 public root(): TreeRoot<UserlandComponent> | undefined {\n const parent = this.parent();\n if (parent === undefined) {\n return undefined;\n }\n if (parent instanceof TreeBranch) {\n return parent.root();\n }\n if (parent instanceof TreeRoot) {\n return parent;\n }\n throw new Error(\"unexpected parent type\");\n }\n\n public traverse(\n callback: (\n node: ContainerTreeNode<\n ComponentRef<NodeComponent>,\n TreeBranch<UserlandComponent>\n >\n ) => void\n ): void {\n callback(this);\n this.treeNodeBase.traverse(callback);\n }\n\n private getContentCreatedSub(): Subscription {\n const instance = this.contents.instance;\n return instance.contentCreated.subscribe((userlandComponentInstance) => {\n for (const [key, value] of Object.entries(\n this.branchOptions.inputBindings ?? {}\n )) {\n (userlandComponentInstance as any)[key] = value;\n }\n for (const [key, value] of Object.entries(\n this.branchOptions.outputBindings ?? {}\n )) {\n this.outputBindingSubscriptions.push(\n (userlandComponentInstance as any)[key].subscribe(value)\n );\n }\n (userlandComponentInstance as any).treeBranch = this;\n const dropzones = instance.dropzones;\n if (!dropzones) {\n throw new Error(\"dropzones not defined\");\n }\n dropzoneRenderer.registerDropzones(dropzones, this);\n });\n }\n\n private getInstanceSubscriptions(): Array<Subscription> {\n const droppedSub = this.contents.instance.dropped.subscribe(\n (placement) => {\n dropzoneRenderer.handleDrop(this, placement);\n }\n );\n return [\n this.getContentCreatedSub(),\n this.getShowLowerZonesSub(),\n this.getShowUpperZonesSub(),\n droppedSub\n ];\n }\n\n private getShowLowerZonesSub(): Subscription {\n const instance = this.contents.instance;\n return instance.showDropzones\n .pipe(filter((direction) => direction === \"lower\"))\n .subscribe(() => {\n const currentDropzoneDisplayed =\n dropzoneRenderer.getCurrentDisplay();\n if (\n currentDropzoneDisplayed?.treeBranch === this &&\n currentDropzoneDisplayed.direction === \"lower\"\n ) {\n return;\n }\n dropzoneRenderer.showLowerZones(this);\n instance.triggerChangeDetection();\n });\n }\n\n private getShowUpperZonesSub(): Subscription {\n const instance = this.contents.instance;\n return instance.showDropzones\n .pipe(filter((direction) => direction === \"upper\"))\n .subscribe(() => {\n const currentDropzoneDisplayed =\n dropzoneRenderer.getCurrentDisplay();\n if (\n currentDropzoneDisplayed?.treeBranch === this &&\n currentDropzoneDisplayed.direction === \"upper\"\n ) {\n return;\n }\n dropzoneRenderer.showUpperZones(this);\n instance.triggerChangeDetection();\n });\n }\n\n private reattachView(index?: number): void {\n assert(this._parent !== undefined);\n assert(this.detachedView !== null);\n const container = this._parent.getContents().instance.branchesContainer;\n assert(container !== undefined);\n this.detachedView.reattach();\n container.insert(this.detachedView, index);\n this.detachedView = null;\n }\n\n private setIndentation(\n parent: ContainerTreeNode<\n ComponentRef<NodeComponent>,\n TreeBranch<UserlandComponent>\n >\n ): void {\n const root = parent.root();\n assert(root !== undefined);\n const options = config.getConfig(root);\n const branchesContainerEl = this.contents.location.nativeElement\n .getElementsByClassName(\"branches-container\")\n .item(0);\n assert(branchesContainerEl instanceof HTMLElement);\n branchesContainerEl.style.marginLeft = `${options?.indentation ?? 16}px`;\n }\n}\n","import { ComponentRef } from \"@angular/core\";\nimport { assert } from \"../../../shared/assert\";\nimport { BranchComponent } from \"../../components/branch/branch.component\";\nimport { DropzoneComponent } from \"../../components/dropzone/dropzone.component\";\nimport { NodeComponent } from \"../../components/node-component.interface\";\nimport { dragAndDrop } from \"./drag-and-drop\";\nimport { ContainerTreeNode } from \"../../structure/container-tree-node.interface\";\nimport { TreeBranch } from \"../../core/tree-branch/tree-branch\";\nimport { TreeRoot } from \"../../core/tree-root/tree-root\";\nimport { dragState, DragStates } from \"./drag-state\";\nimport { filter, first } from \"rxjs\";\nimport { config } from \"../../core/configuration/configuration\";\nimport { PruneEvent } from \"../../events\";\n\nclass DropzoneRenderer {\n private currentDisplay: {\n treeBranch: TreeBranch<any> | TreeRoot<any>;\n direction: \"upper\" | \"lower\";\n } | null;\n private readonly registry: Map<\n DropzoneComponent,\n TreeBranch<any> | TreeRoot<any>\n >;\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(\n final instanceof TreeBranch || final instanceof TreeRoot\n );\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.getContents().instance;\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: TreeRoot<any> | TreeBranch<any>): void {\n const nodes: Array<\n ContainerTreeNode<ComponentRef<NodeComponent>, TreeBranch<any>>\n > = [];\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: TreeBranch<any> | TreeRoot<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 ): [TreeBranch<T> | TreeRoot<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: TreeBranch<T> | TreeRoot<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: TreeBranch<T> | TreeRoot<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: TreeBranch<T> | TreeRoot<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>(\n treeNode: TreeBranch<T> | TreeRoot<T>\n ): void {\n let cursor:\n | ContainerTreeNode<ComponentRef<NodeComponent>, TreeBranch<T>>\n | 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(treeNode: unknown): boolean {\n if (treeNode instanceof TreeRoot) {\n return true;\n }\n if (treeNode instanceof TreeBranch) {\n const allowNesting =\n config.getConfig(treeNode.root())?.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)?.allowDrop ?? ((): true => true);\n return allowDrop(sourceNode, parent, index);\n }\n if (parent instanceof TreeBranch) {\n const allowDrop =\n config.getConfig(parent.root())?.allowDrop ?? ((): true => true);\n return allowDrop(sourceNode, parent, index);\n }\n throw new Error(\"unsupported treeNode type\");\n }\n\n private showInnerZone<T>(treeNode: TreeBranch<T> | TreeRoot<T>): void {\n if (!this.nestingAllowed(treeNode) || !this.dropAllowed(treeNode, 0))\n return;\n treeNode.getContents().instance.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.getContents().instance.showLateralDropzone = true;\n }\n}\n\nexport const dropzoneRenderer = new DropzoneRenderer();\n","import { Injectable } from \"@angular/core\";\nimport { Observable } from \"rxjs\";\nimport { TreeBranch, TreeRoot } from \"../../core\";\nimport { dragAndDrop } from \"./drag-and-drop\";\nimport { dragState, DragStates } from \"./drag-state\";\nimport { dropzoneRenderer } from \"./dropzone-renderer\";\n\n@Injectable()\nexport class TreeDragAndDropService {\n public clearDropzones(): void {\n dropzoneRenderer.clearCurrentDisplay();\n }\n\n public dragStart<T>(treeBranch: TreeBranch<T>, event: DragEvent): void {\n dragAndDrop.dragStart(treeBranch, event);\n }\n\n public getCurrentlyDisplayedDropzoneFamily(): {\n treeBranch: TreeRoot<any> | TreeBranch<any>;\n direction: \"upper\" | \"lower\";\n } | null {\n return dropzoneRenderer.getCurrentDisplay();\n }\n\n public showRootDropzone<T>(root: TreeRoot<T>): void {\n dropzoneRenderer.showLowerZones(root);\n }\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 { TreeBranch } from \"../../core\";\nimport { TreeDragAndDropService } from \"./drag-and-drop.service\";\n\n@Directive({\n selector: \"[limbleTreeDraggable]\",\n standalone: true\n})\nexport class DraggableDirective {\n @Input() limbleTreeDraggable?: TreeBranch<any>;\n\n public constructor(\n private readonly dragAndDropService: TreeDragAndDropService,\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 this.dragAndDropService.dragStart(this.limbleTreeDraggable, event);\n }\n}\n","import { NgModule } from \"@angular/core\";\nimport { TreeDragAndDropService } from \"./drag-and-drop.service\";\nimport { DraggableDirective } from \"./draggable.directive\";\nimport { DragoverNoChangeDetectDirective } from \"./dragover-no-change-detect\";\n\n@NgModule({\n imports: [DraggableDirective, DragoverNoChangeDetectDirective],\n providers: [TreeDragAndDropService],\n exports: [DraggableDirective, DragoverNoChangeDetectDirective]\n})\nexport class TreeDragAndDropModule {}\n","import { Type, ViewContainerRef } from \"@angular/core\";\nimport { TreeRoot, TreeBranch, TreeOptions, config } from \"../core\";\nimport { LimbleTreeOptions as LegacyLimbleTreeOptions } from \"./legacy-tree-options.interface\";\nimport { LimbleTreeData, LimbleTreeNode } from \"./legacy-tree-data.interface\";\nimport { TreeError } from \"../errors\";\nimport { treeCollapser } from \"../extras/collapse/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 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(source as any, parent as any, index);\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 delete nodeData.nodes;\n delete nodeData.collapsed;\n delete nodeData.component;\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 AfterViewInit,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n ViewChild,\n ViewContainerRef\n} from \"@angular/core\";\nimport { LegacyTree } from \"../legacy-tree\";\nimport { TreeError } from \"../../errors\";\nimport { LimbleTreeData } from \"../legacy-tree-data.interface\";\nimport { LimbleTreeOptions } from \"../legacy-tree-options.interface\";\nimport { TreeRoot } from \"../../core\";\nimport { filter, Subscription } from \"rxjs\";\nimport { DragEndEvent } from \"../../events\";\nimport { assert } from \"../../../shared/assert\";\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 { LegacyTree } from \"./legacy-tree\";\nimport { LimbleTreeRootComponent } from \"./limble-tree-root/limble-tree-root.component\";\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/tree-service/tree.service\";\nimport { LimbleTreeLegacyModule } from \"./legacy\";\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 * from \"./lib/limble-tree.module\";\nexport * from \"./lib/core\";\nexport * from \"./lib/errors\";\nexport * from \"./lib/events\";\nexport * from \"./lib/structure\";\nexport * from \"./lib/extras/collapse\";\nexport * from \"./lib/extras/drag-and-drop\";\nexport * from \"./lib/legacy\";\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.TreeDragAndDropService"],"mappings":"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"}
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/lib/core/configuration/configuration.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/shared/assert.ts","../../../projects/limble-tree/src/lib/extras/drag-and-drop/drag-state.ts","../../../projects/limble-tree/src/lib/events/drag/drop-event.ts","../../../projects/limble-tree/src/lib/extras/drag-and-drop/drag-and-drop.ts","../../../projects/limble-tree/src/lib/extras/drag-and-drop/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/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/events/general/destruction-event.ts","../../../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/tree-root/root-controller.ts","../../../projects/limble-tree/src/lib/core/tree-root/tree-root.ts","../../../projects/limble-tree/src/lib/core/tree-service/tree.service.ts","../../../projects/limble-tree/src/lib/core/tree-branch/branch-controller.ts","../../../projects/limble-tree/src/lib/core/tree-branch/tree-branch.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 { 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@Injectable()\nexport class TreeCollapseService {\n public collapse<T>(treeBranch: TreeBranch<T>): void {\n treeCollapser.collapse(treeBranch);\n }\n\n public expand<T>(treeBranch: TreeBranch<T>): void {\n treeCollapser.expand(treeBranch);\n }\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@NgModule({\n providers: [TreeCollapseService]\n})\nexport class TreeCollapseModule {}\n","import { TreeRoot } from \"../tree-root/tree-root\";\nimport { 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","export class TreeError extends Error {}\n","import { NodeComponent } from \"../../components/node-component.interface\";\nimport { TreeBranch } from \"../../core\";\nimport { TreeNode } from \"../../structure\";\nimport { EventConduit } from \"../../structure/event-conduit.interface\";\nimport { TreeEvent } from \"../../structure/tree-event.interface\";\n\nexport class DragEndEvent<T> implements TreeEvent {\n private readonly _source: EventConduit;\n private readonly _newParent: TreeNode<TreeBranch<T>, NodeComponent>;\n private readonly _newIndex: number;\n private readonly _oldParent: TreeNode<TreeBranch<T>, NodeComponent>;\n private readonly _oldIndex: number;\n\n public constructor(\n source: EventConduit,\n endpoints: {\n oldParent: TreeNode<TreeBranch<T>, NodeComponent>;\n oldIndex: number;\n newParent: TreeNode<TreeBranch<T>, NodeComponent>;\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 public type(): \"drag end\" {\n return \"drag end\";\n }\n\n public source(): EventConduit {\n return this._source;\n }\n\n public newIndex(): number {\n return this._newIndex;\n }\n\n public newParent(): TreeNode<TreeBranch<T>, NodeComponent> {\n return this._newParent;\n }\n\n public oldIndex(): number {\n return this._oldIndex;\n }\n\n public oldParent(): TreeNode<TreeBranch<T>, NodeComponent> {\n return this._oldParent;\n }\n}\n","import { EventConduit } from \"../../structure/event-conduit.interface\";\nimport { TreeEvent } from \"../../structure/tree-event.interface\";\n\nexport class DragStartEvent implements TreeEvent {\n private readonly _source: EventConduit;\n\n public constructor(source: EventConduit) {\n this._source = source;\n }\n\n public type(): \"drag start\" {\n return \"drag start\";\n }\n\n public source(): EventConduit {\n return this._source;\n }\n}\n","export function assert(condition: unknown): asserts condition {\n if (condition) {\n return;\n }\n throw new Error(\"Assertion Failed!\");\n}\n","import { assert } from \"../../../shared/assert\";\nimport { BehaviorSubject, 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 { NodeComponent } from \"../../components/node-component.interface\";\nimport { TreeBranch } from \"../../core\";\nimport { TreeNode, EventConduit, TreeEvent } from \"../../structure\";\n\nexport class DropEvent<T> implements TreeEvent {\n private readonly _source: EventConduit;\n private readonly _parent: TreeNode<TreeBranch<T>, NodeComponent>;\n private readonly _index: number;\n\n public constructor(\n source: EventConduit,\n parent: TreeNode<TreeBranch<T>, NodeComponent>,\n index: number\n ) {\n this._source = source;\n this._parent = parent;\n this._index = index;\n }\n\n public type(): \"drag end\" {\n return \"drag end\";\n }\n\n public source(): EventConduit {\n return this._source;\n }\n\n public index(): number {\n return this._index;\n }\n\n public parent(): TreeNode<TreeBranch<T>, NodeComponent> {\n return this._parent;\n }\n}\n","import { Subject } from \"rxjs\";\nimport { NodeComponent } from \"../../components/node-component.interface\";\nimport { TreeBranch } from \"../../core\";\nimport { config } from \"../../core/configuration/configuration\";\nimport { TreeError } from \"../../errors\";\nimport { DragEndEvent } from \"../../events/drag/drag-end-event\";\nimport { DragStartEvent } from \"../../events/drag/drag-start-event\";\nimport { dragState, DragStates } from \"./drag-state\";\nimport { DropEvent } from \"../../events/drag/drop-event\";\nimport { assert } from \"../../../shared/assert\";\nimport { TreeNode } from \"../../structure\";\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>(\n parent: TreeNode<TreeBranch<T>, NodeComponent>,\n index: number\n ): 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<TreeBranch<T>, NodeComponent>,\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 {\n Directive,\n ElementRef,\n EventEmitter,\n Input,\n NgZone,\n OnDestroy,\n OnInit,\n Output\n} from \"@angular/core\";\nimport { fromEvent, Subscription } from \"rxjs\";\nimport { throttleTime } from \"rxjs/operators\";\n\n@Directive({\n standalone: true,\n selector: \"[dragoverNoChangeDetect]\"\n})\nexport class DragoverNoChangeDetectDirective implements OnInit, OnDestroy {\n @Input() dragoverEventThrottle: number;\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 this.dragoverEventThrottle = 25;\n }\n\n public ngOnInit(): void {\n this.ngZone.runOutsideAngular(() => {\n this.eventSubscription = fromEvent<DragEvent>(\n this.el.nativeElement,\n \"dragover\"\n )\n .pipe(throttleTime(this.dragoverEventThrottle))\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 \"../../extras/drag-and-drop/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 AfterViewInit,\n ApplicationRef,\n Component,\n ComponentRef,\n EventEmitter,\n Input,\n NgZone,\n OnDestroy,\n Output,\n QueryList,\n Type,\n ViewChild,\n ViewChildren,\n ViewContainerRef\n} from \"@angular/core\";\nimport { map, merge } from \"rxjs\";\nimport { DropzoneComponent } from \"../dropzone/dropzone.component\";\nimport { HostComponent } from \"../host-component.interface\";\nimport { NodeComponent } from \"../node-component.interface\";\nimport { DragoverNoChangeDetectDirective } from \"../../extras/drag-and-drop/dragover-no-change-detect\";\nimport { assert } from \"../../../shared/assert\";\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 { EventConduit } from \"../../structure/event-conduit.interface\";\nimport { RelationalTreeEvent } from \"./relational-tree-event.interface\";\nimport { TreeRelationship } from \"../../structure/tree-relationship.interface\";\n\nexport class GraftEvent<T extends TreeRelationship<any, any>>\n implements RelationalTreeEvent<T[\"parent\"], T[\"child\"]>\n{\n private readonly _source: EventConduit;\n private readonly _parent: T[\"parent\"];\n private readonly _child: T[\"child\"];\n private readonly _index: number;\n\n public constructor(source: EventConduit, relationship: T) {\n this._source = source;\n this._child = relationship.child;\n this._parent = relationship.parent;\n this._index = relationship.index;\n }\n\n public child(): T[\"child\"] {\n return this._child;\n }\n\n public type(): \"graft\" {\n return \"graft\";\n }\n\n public index(): number {\n return this._index;\n }\n\n public parent(): T[\"parent\"] {\n return this._parent;\n }\n\n public source(): EventConduit {\n return this._source;\n }\n}\n","import { EventConduit } from \"../../structure/event-conduit.interface\";\nimport { RelationalTreeEvent } from \"./relational-tree-event.interface\";\nimport { TreeRelationship } from \"../../structure/tree-relationship.interface\";\n\nexport class PruneEvent<T extends TreeRelationship<any, any>>\n implements RelationalTreeEvent<T[\"parent\"], T[\"child\"]>\n{\n private readonly _source: EventConduit;\n private readonly _parent: T[\"parent\"];\n private readonly _child: T[\"child\"];\n private readonly _index: number;\n\n public constructor(source: EventConduit, relationship: T) {\n this._source = source;\n this._child = relationship.child;\n this._parent = relationship.parent;\n this._index = relationship.index;\n }\n\n public child(): T[\"child\"] {\n return this._child;\n }\n\n public type(): \"prune\" {\n return \"prune\";\n }\n\n public index(): number {\n return this._index;\n }\n\n public parent(): T[\"parent\"] {\n return this._parent;\n }\n\n public source(): EventConduit {\n return this._source;\n }\n}\n","import { filter, Observable, Subject, Subscription } from \"rxjs\";\nimport { NodeComponent } from \"../components/node-component.interface\";\nimport { TreeError } from \"../errors\";\nimport { GraftEvent } from \"../events/relational/graft-event\";\nimport { PruneEvent } from \"../events/relational/prune-event\";\nimport { TreeEvent } from \"../structure/tree-event.interface\";\nimport { TreeNode } from \"../structure/tree-node.interface\";\nimport { TreePlot } from \"../structure/tree-plot\";\nimport { Relationship } from \"./relationship.interface\";\nimport { TreeBranch } from \"./tree-branch/tree-branch\";\n\nexport class TreeNodeBase<UserlandComponent>\n implements Partial<TreeNode<TreeBranch<UserlandComponent>, NodeComponent>>\n{\n private readonly _branches: Array<TreeBranch<UserlandComponent>>;\n private readonly events$: Subject<TreeEvent>;\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): void {\n this.events$.next(event);\n }\n\n public events(): Observable<TreeEvent> {\n return this.events$;\n }\n\n public getBranch(index: number): TreeBranch<UserlandComponent> | undefined {\n return this._branches[index];\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: (\n node: TreeNode<TreeBranch<UserlandComponent>, NodeComponent>\n ) => 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<\n GraftEvent<Relationship<UserlandComponent>>\n > {\n return this.events().pipe(\n filter(\n (event): event is GraftEvent<Relationship<UserlandComponent>> =>\n event instanceof GraftEvent\n ),\n filter((event) => event.parent().events() === this.events$)\n );\n }\n\n private prunesToSelf(): Observable<\n PruneEvent<Relationship<UserlandComponent>>\n > {\n return this.events().pipe(\n filter(\n (event): event is PruneEvent<Relationship<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 { EventConduit } from \"../../structure/event-conduit.interface\";\nimport { TreeEvent } from \"../../structure/tree-event.interface\";\n\nexport class DestructionEvent implements TreeEvent {\n private readonly _source: EventConduit;\n\n public constructor(source: EventConduit) {\n this._source = source;\n }\n\n public type(): \"destruction\" {\n return \"destruction\";\n }\n\n public source(): EventConduit {\n return this._source;\n }\n}\n","import { CommonModule } from \"@angular/common\";\nimport {\n AfterViewInit,\n Component,\n EventEmitter,\n Output,\n ViewChild,\n ViewContainerRef\n} from \"@angular/core\";\nimport { assert } from \"../../../shared/assert\";\nimport { DropzoneComponent } from \"../dropzone/dropzone.component\";\nimport { 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 { ComponentRef, ViewContainerRef, ViewRef } from \"@angular/core\";\nimport { assert } from \"../../../shared/assert\";\nimport { Subscription } from \"rxjs\";\nimport { RootComponent } from \"../../components/root/root.component\";\nimport { dropzoneRenderer } from \"../../extras/drag-and-drop/dropzone-renderer\";\nimport { ComponentContainer } from \"../../structure\";\nimport { TreeRoot } from \"./tree-root\";\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 { TreePlot } from \"../../structure/tree-plot\";\nimport { Observable } from \"rxjs\";\nimport { TreeEvent } from \"../../structure/tree-event.interface\";\nimport { TreeBranch } from \"../tree-branch/tree-branch\";\nimport { Type, ViewContainerRef, ViewRef } from \"@angular/core\";\nimport { RootComponent } from \"../../components/root/root.component\";\nimport { TreeNodeBase } from \"../tree-node-base\";\nimport { NodeComponent } from \"../../components/node-component.interface\";\nimport { BranchOptions } from \"../branch-options.interface\";\nimport { dropzoneRenderer } from \"../../extras/drag-and-drop/dropzone-renderer\";\nimport { config } from \"../configuration/configuration\";\nimport { TreeError } from \"../../errors\";\nimport { DestructionEvent } from \"../../events/general\";\nimport { TreeNode } from \"../../structure\";\nimport { RootController } from \"./root-controller\";\n\nexport class TreeRoot<UserlandComponent>\n implements TreeNode<TreeBranch<UserlandComponent>, RootComponent>\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 public branches(): Array<TreeBranch<UserlandComponent>> {\n return this.treeNodeBase.branches();\n }\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 public detectChanges(): void {\n this.rootController.detectChanges();\n }\n\n public dispatch(event: TreeEvent): void {\n this.treeNodeBase.dispatch(event);\n }\n\n public events(): Observable<TreeEvent> {\n return this.treeNodeBase.events();\n }\n\n public getBranch(index: number): TreeBranch<UserlandComponent> | undefined {\n return this.treeNodeBase.getBranch(index);\n }\n\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 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 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 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 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 return new TreeBranch(this, { component, ...options });\n }\n\n public isDestroyed(): boolean {\n return this.treeNodeBase.isDestroyed();\n }\n\n public plot(): TreePlot {\n return this.treeNodeBase.plot();\n }\n\n public root(): this {\n return this;\n }\n\n public traverse(\n callback: (\n node: TreeNode<TreeBranch<UserlandComponent>, NodeComponent>\n ) => void\n ): void {\n callback(this);\n this.treeNodeBase.traverse(callback);\n }\n}\n","import { Injectable, ViewContainerRef } from \"@angular/core\";\nimport { config } from \"../configuration/configuration\";\nimport { TreeOptions } from \"../configuration/tree-options.interface\";\nimport { TreeRoot } from \"../tree-root/tree-root\";\n\n@Injectable({ providedIn: \"root\" })\nexport class TreeService {\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 {\n ComponentRef,\n createComponent,\n EnvironmentInjector,\n ViewContainerRef,\n ViewRef\n} from \"@angular/core\";\nimport { assert } from \"../../../shared/assert\";\nimport { filter, Subscription } from \"rxjs\";\nimport { BranchComponent } from \"../../components/branch/branch.component\";\nimport { dropzoneRenderer } from \"../../extras/drag-and-drop/dropzone-renderer\";\nimport { ComponentContainer } from \"../../structure\";\nimport { 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","import { assert } from \"../../../shared/assert\";\nimport { TreePlot } from \"../../structure/tree-plot\";\nimport { Observable } from \"rxjs\";\nimport { GraftEvent } from \"../../events/relational/graft-event\";\nimport { PruneEvent } from \"../../events/relational/prune-event\";\nimport { TreeEvent } from \"../../structure/tree-event.interface\";\nimport { TreeBranchNode } from \"../../structure/tree-branch-node.interface\";\nimport { ComponentRef, Type, ViewContainerRef, ViewRef } from \"@angular/core\";\nimport { BranchComponent } from \"../../components/branch/branch.component\";\nimport { NodeComponent } from \"../../components/node-component.interface\";\nimport { TreeNodeBase } from \"../tree-node-base\";\nimport { TreeError } from \"../../errors/tree-error\";\nimport { BranchOptions, FullBranchOptions } from \"../branch-options.interface\";\nimport { dropzoneRenderer } from \"../../extras/drag-and-drop/dropzone-renderer\";\nimport { config } from \"../configuration/configuration\";\nimport { TreeRoot } from \"..\";\nimport { treeCollapser } from \"../../extras/collapse/collapse\";\nimport { DestructionEvent } from \"../../events/general\";\nimport { TreeNode } from \"../../structure\";\nimport { BranchController } from \"./branch-controller\";\n\nexport class TreeBranch<UserlandComponent>\n implements\n TreeBranchNode<\n BranchComponent<UserlandComponent>,\n TreeBranch<UserlandComponent>,\n NodeComponent\n >\n{\n private readonly branchController: BranchController<UserlandComponent>;\n private detachedView: ViewRef | null = null;\n private _parent:\n | TreeNode<TreeBranch<UserlandComponent>, NodeComponent>\n | undefined;\n private readonly treeNodeBase: TreeNodeBase<UserlandComponent>;\n\n public constructor(\n parent: TreeNode<TreeBranch<UserlandComponent>, NodeComponent>,\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 this.setIndentation(parent);\n if (\n parent instanceof TreeBranch &&\n parent.branchOptions.defaultCollapsed === true\n ) {\n treeCollapser.storePrecollapsedNode(parent, this);\n this.detachedView = this.branchController.getHostView();\n } else {\n parentBranchesContainer.insert(this.branchController.getHostView());\n this.detectChanges();\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 }\n }\n\n public branches(): Array<TreeBranch<UserlandComponent>> {\n return this.treeNodeBase.branches();\n }\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 public detectChanges(): void {\n this.branchController.detectChanges();\n }\n\n public dispatch(event: TreeEvent): void {\n this.treeNodeBase.dispatch(event);\n this._parent?.dispatch(event);\n }\n\n public events(): Observable<TreeEvent> {\n return this.treeNodeBase.events();\n }\n\n public getBranch(index: number): TreeBranch<UserlandComponent> | undefined {\n return this.treeNodeBase.getBranch(index);\n }\n\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 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 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 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 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 public graftTo(\n newParent: TreeNode<TreeBranch<UserlandComponent>, NodeComponent>,\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 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 return new TreeBranch(this, { component, ...options });\n }\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 public isDestroyed(): boolean {\n return this.treeNodeBase.isDestroyed();\n }\n\n public meta(): Record<string, any> {\n return this.branchOptions.meta ?? {};\n }\n\n public parent():\n | TreeNode<TreeBranch<UserlandComponent>, NodeComponent>\n | undefined {\n return this._parent;\n }\n\n public plot(): TreePlot {\n return this.treeNodeBase.plot();\n }\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 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 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 public traverse(\n callback: (\n node: TreeNode<TreeBranch<UserlandComponent>, NodeComponent>\n ) => void\n ): void {\n callback(this);\n this.treeNodeBase.traverse(callback);\n }\n\n private checkGraftLocationValidity(\n newParent: TreeNode<TreeBranch<UserlandComponent>, NodeComponent>,\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 indexIsOutOfRange(\n parent: TreeNode<TreeBranch<UserlandComponent>, NodeComponent>,\n index: number\n ): boolean {\n return index < 0 || index > parent.branches().length;\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 }\n\n private setIndentation(\n parent: TreeNode<TreeBranch<UserlandComponent>, NodeComponent>\n ): void {\n const root = parent.root();\n assert(root !== undefined);\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 { assert } from \"../../../shared/assert\";\nimport { BranchComponent } from \"../../components/branch/branch.component\";\nimport { DropzoneComponent } from \"../../components/dropzone/dropzone.component\";\nimport { NodeComponent } from \"../../components/node-component.interface\";\nimport { dragAndDrop } from \"./drag-and-drop\";\nimport { TreeBranch } from \"../../core/tree-branch/tree-branch\";\nimport { TreeRoot } from \"../../core/tree-root/tree-root\";\nimport { dragState, DragStates } from \"./drag-state\";\nimport { filter, first } from \"rxjs\";\nimport { config } from \"../../core/configuration/configuration\";\nimport { PruneEvent } from \"../../events\";\nimport { TreeNode } from \"../../structure\";\n\nclass DropzoneRenderer {\n private currentDisplay: {\n treeBranch: TreeBranch<any> | TreeRoot<any>;\n direction: \"upper\" | \"lower\";\n } | null;\n private readonly registry: Map<\n DropzoneComponent,\n TreeBranch<any> | TreeRoot<any>\n >;\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(\n final instanceof TreeBranch || final instanceof TreeRoot\n );\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: TreeRoot<any> | TreeBranch<any>): void {\n const nodes: Array<TreeNode<TreeBranch<any>, NodeComponent>> = [];\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: TreeBranch<any> | TreeRoot<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 ): [TreeBranch<T> | TreeRoot<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: TreeBranch<T> | TreeRoot<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: TreeBranch<T> | TreeRoot<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: TreeBranch<T> | TreeRoot<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>(\n treeNode: TreeBranch<T> | TreeRoot<T>\n ): void {\n let cursor: TreeNode<TreeBranch<T>, NodeComponent> | 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(treeNode: unknown): 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: TreeBranch<T> | TreeRoot<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 { Observable } from \"rxjs\";\nimport { TreeBranch, TreeRoot } from \"../../core\";\nimport { dragAndDrop } from \"./drag-and-drop\";\nimport { dragState, DragStates } from \"./drag-state\";\nimport { dropzoneRenderer } from \"./dropzone-renderer\";\n\n@Injectable()\nexport class TreeDragAndDropService {\n public clearDropzones(): void {\n dropzoneRenderer.clearCurrentDisplay();\n }\n\n public dragStart<T>(treeBranch: TreeBranch<T>, event: DragEvent): void {\n dragAndDrop.dragStart(treeBranch, event);\n }\n\n public getCurrentlyDisplayedDropzoneFamily(): {\n treeBranch: TreeRoot<any> | TreeBranch<any>;\n direction: \"upper\" | \"lower\";\n } | null {\n return dropzoneRenderer.getCurrentDisplay();\n }\n\n public showRootDropzone<T>(root: TreeRoot<T>): void {\n dropzoneRenderer.showLowerZones(root);\n }\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 { TreeBranch } from \"../../core\";\nimport { TreeDragAndDropService } from \"./drag-and-drop.service\";\n\n@Directive({\n selector: \"[limbleTreeDraggable]\",\n standalone: true\n})\nexport class DraggableDirective {\n @Input() limbleTreeDraggable?: TreeBranch<any> | undefined;\n\n public constructor(\n private readonly dragAndDropService: TreeDragAndDropService,\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 this.dragAndDropService.dragStart(this.limbleTreeDraggable, event);\n }\n}\n","import { NgModule } from \"@angular/core\";\nimport { TreeDragAndDropService } from \"./drag-and-drop.service\";\nimport { DraggableDirective } from \"./draggable.directive\";\nimport { DragoverNoChangeDetectDirective } from \"./dragover-no-change-detect\";\n\n@NgModule({\n imports: [DraggableDirective, DragoverNoChangeDetectDirective],\n providers: [TreeDragAndDropService],\n exports: [DraggableDirective, DragoverNoChangeDetectDirective]\n})\nexport class TreeDragAndDropModule {}\n","import { Type, ViewContainerRef } from \"@angular/core\";\nimport { TreeRoot, TreeBranch, TreeOptions, config } from \"../core\";\nimport { LimbleTreeOptions as LegacyLimbleTreeOptions } from \"./legacy-tree-options.interface\";\nimport { LimbleTreeData, LimbleTreeNode } from \"./legacy-tree-data.interface\";\nimport { TreeError } from \"../errors\";\nimport { treeCollapser } from \"../extras/collapse/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 AfterViewInit,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n ViewChild,\n ViewContainerRef\n} from \"@angular/core\";\nimport { LegacyTree } from \"../legacy-tree\";\nimport { TreeError } from \"../../errors\";\nimport { LimbleTreeData } from \"../legacy-tree-data.interface\";\nimport { LimbleTreeOptions } from \"../legacy-tree-options.interface\";\nimport { TreeRoot } from \"../../core\";\nimport { filter, Subscription } from \"rxjs\";\nimport { DragEndEvent } from \"../../events\";\nimport { assert } from \"../../../shared/assert\";\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 { LegacyTree } from \"./legacy-tree\";\nimport { LimbleTreeRootComponent } from \"./limble-tree-root/limble-tree-root.component\";\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/tree-service/tree.service\";\nimport { LimbleTreeLegacyModule } from \"./legacy\";\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 * from \"./lib/limble-tree.module\";\nexport * from \"./lib/core\";\nexport * from \"./lib/errors\";\nexport * from \"./lib/events\";\nexport * from \"./lib/structure\";\nexport * from \"./lib/extras/collapse\";\nexport * from \"./lib/extras/drag-and-drop\";\nexport * from \"./lib/legacy\";\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.TreeDragAndDropService"],"mappings":";;;;;;;AAEA,MAAM,aAAa,CAAA;AAGhB,IAAA,WAAA,GAAA;AACG,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,GAAG,EAAE,CAAC;KAC/B;AAEM,IAAA,QAAQ,CAAI,UAAyB,EAAA;AACzC,QAAA,IAAI,UAAU,CAAC,QAAQ,EAAE,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAC/C,MAAM,QAAQ,GAAyB,EAAE,CAAC;QAC1C,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAC3C,UAAU,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC,MAAM,KAAI;YACtC,MAAM,CAAC,KAAK,EAAE,CAAC;AACf,YAAA,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACzB,SAAC,CAAC,CAAC;KACL;AAEM,IAAA,MAAM,CAAI,UAAyB,EAAA;QACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAClD,IAAI,QAAQ,KAAK,SAAS;YAAE,OAAO;AACnC,QAAA,QAAQ,CAAC,OAAO,CAAC,CAAC,MAAM,KAAI;AACzB,YAAA,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AAC9B,SAAC,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACpC,UAAU,CAAC,aAAa,EAAE,CAAC;KAC7B;AAEM,IAAA,WAAW,CAAI,UAAyB,EAAA;QAC5C,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;KAC1C;IAEM,qBAAqB,CACzB,MAAqB,EACrB,MAAqB,EAAA;;QAErB,IAAI,CAAC,WAAW,CAAC,GAAG,CACjB,MAAM,EACN,CAAC,CAAA,EAAA,GAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,CACrD,CAAC;KACJ;AACH,CAAA;AAEM,MAAM,aAAa,GAAG,IAAI,aAAa,EAAE;;MCvCnC,mBAAmB,CAAA;AACtB,IAAA,QAAQ,CAAI,UAAyB,EAAA;AACzC,QAAA,aAAa,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;KACrC;AAEM,IAAA,MAAM,CAAI,UAAyB,EAAA;AACvC,QAAA,aAAa,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;KACnC;AAEM,IAAA,WAAW,CAAI,UAAyB,EAAA;AAC5C,QAAA,OAAO,aAAa,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;KAC/C;;iHAXS,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;qHAAnB,mBAAmB,EAAA,CAAA,CAAA;4FAAnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAD/B,UAAU;;;MCEE,kBAAkB,CAAA;;gHAAlB,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;iHAAlB,kBAAkB,EAAA,CAAA,CAAA;iHAAlB,kBAAkB,EAAA,SAAA,EAFjB,CAAC,mBAAmB,CAAC,EAAA,CAAA,CAAA;4FAEtB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAH9B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACP,SAAS,EAAE,CAAC,mBAAmB,CAAC;iBAClC,CAAA;;;ACFD,MAAM,aAAa,CAAA;AAGhB,IAAA,WAAA,GAAA;AAFiB,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,GAAG,EAA8B,CAAC;AAGpE,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,GAAG,EAAE,CAAC;KACjC;IAEM,SAAS,CAAI,IAAiB,EAAE,OAAoB,EAAA;QACxD,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;KACxC;AAEM,IAAA,SAAS,CAAC,IAAS,EAAA;QACvB,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;KACtC;AAEM,IAAA,MAAM,CAAC,IAAS,EAAA;AACpB,QAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;KAClC;AACH,CAAA;AAEY,MAAA,MAAM,GAAG,IAAI,aAAa;;ACvBjC,MAAO,SAAU,SAAQ,KAAK,CAAA;AAAG;;MCM1B,YAAY,CAAA;IAOtB,WACG,CAAA,MAAoB,EACpB,SAKC,EAAA;AAED,QAAA,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;AACtB,QAAA,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC,SAAS,CAAC;AACtC,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC,QAAQ,CAAC;AACpC,QAAA,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC,SAAS,CAAC;AACtC,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC,QAAQ,CAAC;KACtC;IAEM,IAAI,GAAA;AACR,QAAA,OAAO,UAAU,CAAC;KACpB;IAEM,MAAM,GAAA;QACV,OAAO,IAAI,CAAC,OAAO,CAAC;KACtB;IAEM,QAAQ,GAAA;QACZ,OAAO,IAAI,CAAC,SAAS,CAAC;KACxB;IAEM,SAAS,GAAA;QACb,OAAO,IAAI,CAAC,UAAU,CAAC;KACzB;IAEM,QAAQ,GAAA;QACZ,OAAO,IAAI,CAAC,SAAS,CAAC;KACxB;IAEM,SAAS,GAAA;QACb,OAAO,IAAI,CAAC,UAAU,CAAC;KACzB;AACH;;MCjDY,cAAc,CAAA;AAGxB,IAAA,WAAA,CAAmB,MAAoB,EAAA;AACpC,QAAA,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;KACxB;IAEM,IAAI,GAAA;AACR,QAAA,OAAO,YAAY,CAAC;KACtB;IAEM,MAAM,GAAA;QACV,OAAO,IAAI,CAAC,OAAO,CAAC;KACtB;AACH;;ACjBK,SAAU,MAAM,CAAC,SAAkB,EAAA;AACtC,IAAA,IAAI,SAAS,EAAE;QACZ,OAAO;AACT,KAAA;AACD,IAAA,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;AACxC;;ACDA,IAAY,UAKX,CAAA;AALD,CAAA,UAAY,UAAU,EAAA;IACnB,UAAA,CAAA,UAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAQ,CAAA;IACR,UAAA,CAAA,UAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,GAAA,UAAY,CAAA;IACZ,UAAA,CAAA,UAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,GAAA,UAAY,CAAA;IACZ,UAAA,CAAA,UAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAW,CAAA;AACd,CAAC,EALW,UAAU,KAAV,UAAU,GAKrB,EAAA,CAAA,CAAA,CAAA;AAED,MAAM,SAAS,CAAA;AAKZ,IAAA,WAAA,GAAA;AAHQ,QAAA,IAAA,CAAA,MAAM,GAAe,UAAU,CAAC,IAAI,CAAC;QAI1C,IAAI,CAAC,MAAM,GAAG,IAAI,eAAe,CAAa,UAAU,CAAC,IAAI,CAAC,CAAC;QAC/D,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK,KAAI;AAC7B,YAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;AACvB,SAAC,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;KAC5B;IAEM,WAAW,GAAA;QACf,OAAO,IAAI,CAAC,QAAQ,CAAC;KACvB;AAEM,IAAA,QAAQ,CAAI,UAAyB,EAAA;QACzC,MAAM,CAAC,IAAI,CAAC,MAAM,KAAK,UAAU,CAAC,IAAI,CAAC,CAAC;AACxC,QAAA,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC;QAC3B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;KACxC;IAEM,QAAQ,GAAA;QACZ,MAAM,CAAC,IAAI,CAAC,MAAM,KAAK,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC5C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;KACxC;IAEM,OAAO,GAAA;QACX,MAAM,CAAC,IAAI,CAAC,MAAM,KAAK,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC5C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;KACvC;IAEM,OAAO,GAAA;AACX,QAAA,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;QAC1B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;KACpC;IAEM,MAAM,GAAA;QACV,OAAO,IAAI,CAAC,MAAM,CAAC;KACrB;IAEM,KAAK,GAAA;QACT,OAAO,IAAI,CAAC,MAAM,CAAC;KACrB;AACH,CAAA;AAEM,MAAM,SAAS,GAAG,IAAI,SAAS,EAAE;;MCtD3B,SAAS,CAAA;AAKnB,IAAA,WAAA,CACG,MAAoB,EACpB,MAA8C,EAC9C,KAAa,EAAA;AAEb,QAAA,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;AACtB,QAAA,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;AACtB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;KACtB;IAEM,IAAI,GAAA;AACR,QAAA,OAAO,UAAU,CAAC;KACpB;IAEM,MAAM,GAAA;QACV,OAAO,IAAI,CAAC,OAAO,CAAC;KACtB;IAEM,KAAK,GAAA;QACT,OAAO,IAAI,CAAC,MAAM,CAAC;KACrB;IAEM,MAAM,GAAA;QACV,OAAO,IAAI,CAAC,OAAO,CAAC;KACtB;AACH;;ACtBD,MAAM,WAAW,CAAA;AAAjB,IAAA,WAAA,GAAA;AACmB,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,OAAO,EAAa,CAAC;KAqG1D;IAnGS,SAAS,CAAI,UAAyB,EAAE,KAAgB,EAAA;AAC5D,QAAA,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,EAAE;YACpC,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,OAAO;AACT,SAAA;QACD,UAAU,CAAC,QAAQ,CAAC,IAAI,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC;AACpD,QAAA,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;AACvC,QAAA,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;;;QAGxC,UAAU,CAAC,MAAK;AACb,YAAA,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;YAC/B,UAAU,CAAC,KAAK,EAAE,CAAC;YACnB,SAAS,CAAC,QAAQ,EAAE,CAAC;AACxB,SAAC,CAAC,CAAC;KACL;IAEM,IAAI,CACR,MAA8C,EAC9C,KAAa,EAAA;AAEb,QAAA,MAAM,UAAU,GAAG,SAAS,CAAC,WAAW,EAAK,CAAC;QAC9C,IAAI,UAAU,KAAK,SAAS,EAAE;AAC3B,YAAA,MAAM,IAAI,SAAS,CAAC,2BAA2B,CAAC,CAAC;AACnD,SAAA;QACD,IAAI,CAAC,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;AACnD,QAAA,UAAU,CAAC,QAAQ,CAAC,IAAI,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;KAChE;IAEO,mBAAmB,CACxB,KAAgB,EAChB,OAAgB,EAAA;AAEhB,QAAA,MAAM,MAAM,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC;QAC/C,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC;QAC5C,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC;AAC3C,QAAA,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;KAC5B;IAEO,cAAc,CACnB,UAAyB,EACzB,KAAgB,EAAA;AAEhB,QAAA,MAAM,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC;AACxC,QAAA,MAAM,CAAC,YAAY,YAAY,YAAY,CAAC,CAAC;AAC7C,QAAA,MAAM,aAAa,GAAG,UAAU,CAAC,gBAAgB,EAAE,CAAC;AACpD,QAAA,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;QAC1E,YAAY,CAAC,YAAY,CAAC,aAAa,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;KAC7D;IAEO,eAAe,CACpB,UAAyB,EACzB,KAAgB,EAAA;;AAEhB,QAAA,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC;AACtC,QAAA,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,EAAE,CAAC;QACpC,MAAM,CAAC,SAAS,KAAK,SAAS,IAAI,QAAQ,KAAK,SAAS,CAAC,CAAC;QAC1D,CAAA,EAAA,GAAA,KAAK,CAAC,MAAM,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,gBAAgB,CAC3B,SAAS,EACT,CAAC,OAAO,KAAI;YACT,IAAI,SAAS,CAAC,KAAK,EAAE,KAAK,UAAU,CAAC,OAAO,EAAE;;AAE3C,gBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAoB,CAAC,CAAC;gBAC7C,IAAI,CAAC,kBAAkB,CAAC,UAAU,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;AAC3D,aAAA;YACD,SAAS,CAAC,OAAO,EAAE,CAAC;AACpB,YAAA,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC;AACtC,YAAA,MAAM,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC;AAChC,YAAA,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,EAAE,CAAC;AACpC,YAAA,MAAM,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC;AAC/B,YAAA,UAAU,CAAC,QAAQ,CAChB,IAAI,YAAY,CAAC,UAAU,EAAE;gBAC1B,SAAS;gBACT,QAAQ;gBACR,SAAS;gBACT,QAAQ;AACV,aAAA,CAAC,CACJ,CAAC;AACL,SAAC,EACD,EAAE,IAAI,EAAE,IAAI,EAAE,CAChB,CAAC;KACJ;AAEO,IAAA,eAAe,CAAI,UAAyB,EAAA;;QACjD,MAAM,aAAa,GAChB,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,WAAW,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,aAAa,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,IAC9D,MAAY,IAAI,CAAC,CAAC;AACtB,QAAA,OAAO,aAAa,CAAC,UAAU,CAAC,CAAC;KACnC;AAEO,IAAA,kBAAkB,CACvB,UAAyB,EACzB,MAA8C,EAC9C,KAAa,EAAA;AAEb,QAAA,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAClC,UAAU,CAAC,gBAAgB,EAAE,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;QACtD,SAAS,CAAC,OAAO,EAAE,CAAC;KACtB;AACH,CAAA;AAEM,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE;;MCnG/B,+BAA+B,CAAA;IAKzC,WACoB,CAAA,MAAc,EACd,EAAuB,EAAA;AADvB,QAAA,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;AACd,QAAA,IAAE,CAAA,EAAA,GAAF,EAAE,CAAqB;AAExC,QAAA,IAAI,CAAC,sBAAsB,GAAG,IAAI,YAAY,EAAa,CAAC;AAC5D,QAAA,IAAI,CAAC,qBAAqB,GAAG,EAAE,CAAC;KAClC;IAEM,QAAQ,GAAA;AACZ,QAAA,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,MAAK;AAChC,YAAA,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAC/B,IAAI,CAAC,EAAE,CAAC,aAAa,EACrB,UAAU,CACZ;AACG,iBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;AAC9C,iBAAA,SAAS,CAAC,CAAC,MAAM,KAAI;AACnB,gBAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC5C,aAAC,CAAC,CAAC;AACT,SAAC,CAAC,CAAC;KACL;IAEM,WAAW,GAAA;AACf,QAAA,IAAI,IAAI,CAAC,iBAAiB,KAAK,SAAS,EAAE;AACvC,YAAA,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE,CAAC;AACvC,SAAA;KACH;;6HA9BS,+BAA+B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;iHAA/B,+BAA+B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,EAAA,OAAA,EAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;4FAA/B,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAJ3C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE,0BAA0B;iBACtC,CAAA;sHAEW,qBAAqB,EAAA,CAAA;sBAA7B,KAAK;gBACa,sBAAsB,EAAA,CAAA;sBAAxC,MAAM;;;MCRG,iBAAiB,CAAA;AAP9B,IAAA,WAAA,GAAA;AASsB,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,YAAY,EAAa,CAAC;AAEjD,QAAA,IAAM,CAAA,MAAA,GAAY,KAAK,CAAC;KAkBpC;IAhBS,gBAAgB,GAAA;AACpB,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;KACrB;IAEM,gBAAgB,GAAA;AACpB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;KACtB;AAEM,IAAA,eAAe,CAAC,KAAgB,EAAA;QACpC,KAAK,CAAC,cAAc,EAAE,CAAC;AACtB,QAAA,KAAK,CAAC,YAA6B,CAAC,UAAU,GAAG,MAAM,CAAC;KAC3D;AAEM,IAAA,WAAW,CAAC,KAAgB,EAAA;AAChC,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC3B;;+GArBS,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,iBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,iBAAiB,ECX9B,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,uPAQA,EDCa,MAAA,EAAA,CAAA,+UAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,6HAAE,+BAA+B,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,uBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,wBAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;4FAE7C,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAP7B,SAAS;AACK,YAAA,IAAA,EAAA,CAAA,EAAA,UAAA,EAAA,IAAI,YACN,UAAU,EAAA,OAAA,EAGX,CAAC,YAAY,EAAE,+BAA+B,CAAC,EAAA,QAAA,EAAA,uPAAA,EAAA,MAAA,EAAA,CAAA,+UAAA,CAAA,EAAA,CAAA;8BAG/C,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBACa,OAAO,EAAA,CAAA;sBAAzB,MAAM;;;MEkBG,eAAe,CAAA;AAsBzB,IAAA,WAAA,CAAoC,MAAsB,EAAA;AAAtB,QAAA,IAAM,CAAA,MAAA,GAAN,MAAM,CAAgB;AAlB1D,QAAA,IAAiB,CAAA,iBAAA,GAAiC,SAAS,CAAC;AAE5D,QAAA,IAAgB,CAAA,gBAAA,GAAiC,SAAS,CAAC;AAC1B,QAAA,IAAS,CAAA,SAAA,GAEzB,SAAS,CAAC;AAIR,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAAK,CAAC;AACvC,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAqB,CAAC;AACtD,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,YAAY,EAAuB,CAAC;AAE9D,QAAA,IAAiB,CAAA,iBAAA,GAAY,KAAK,CAAC;AACnC,QAAA,IAAmB,CAAA,mBAAA,GAAY,KAAK,CAAC;KAIkB;IAEvD,eAAe,GAAA;AACnB,QAAA,MAAM,CAAC,IAAI,CAAC,gBAAgB,KAAK,SAAS,CAAC,CAAC;AAC5C,QAAA,MAAM,CAAC,IAAI,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC;AACzC,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,eAAe,CACvD,IAAI,CAAC,aAAa,CACpB,CAAC;QACF,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;AACtD,QAAA,MAAM,CAAC,IAAI,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC;QACrC,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACpC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACtC,MAAM,CAAC,KAAK,KAAK,SAAS,IAAI,OAAO,KAAK,SAAS,CAAC,CAAC;AACrD,QAAA,KAAK,CACF,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,OAAgB,CAAC,CAAC,EAC/C,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,SAAkB,CAAC,CAAC,CACrD,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC1B,QAAA,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,aAAa,EAAE,CAAC;KACvD;IAEM,gBAAgB,GAAA;QACpB,OAAO,IAAI,CAAC,aAAa,CAAC;KAC5B;IAEM,sBAAsB,GAAA;AAC1B,QAAA,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,EAAE;AAC5B,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;AACrB,SAAA;KACH;AAES,IAAA,eAAe,CAAC,KAAgB,EAAA;QACvC,MAAM,aAAa,GAChB,KAAK,CAAC,aACR,CAAC,qBAAqB,EAAE,CAAC,MAAM,CAAC;AACjC,QAAA,IAAI,KAAK,CAAC,OAAO,GAAG,aAAa,GAAG,CAAC,EAAE;AACpC,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACnC,SAAA;AAAM,aAAA;AACJ,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACnC,SAAA;KACH;IAEM,WAAW,GAAA;;;;AAIf,QAAA,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;KACjC;;6GApES,eAAe,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAf,eAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,eAAe,EAGe,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,OAAA,EAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAAA,gBAAgB,EAEjB,EAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAAA,gBAAgB,EAEzC,EAAA,EAAA,YAAA,EAAA,WAAA,EAAA,SAAA,EAAA,iBAAiB,ECtClC,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,sWAQA,EDqBa,MAAA,EAAA,CAAA,yCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,iBAAiB,kGAAE,+BAA+B,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,uBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,wBAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;4FAEhE,eAAe,EAAA,UAAA,EAAA,CAAA;kBAP3B,SAAS;iCACK,IAAI,EAAA,QAAA,EACN,QAAQ,EAGT,OAAA,EAAA,CAAC,YAAY,EAAE,iBAAiB,EAAE,+BAA+B,CAAC,EAAA,QAAA,EAAA,sWAAA,EAAA,MAAA,EAAA,CAAA,yCAAA,CAAA,EAAA,CAAA;qGAM3E,iBAAiB,EAAA,CAAA;sBADhB,SAAS;gBAAC,IAAA,EAAA,CAAA,mBAAmB,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAA;gBAG1D,gBAAgB,EAAA,CAAA;sBADf,SAAS;gBAAC,IAAA,EAAA,CAAA,kBAAkB,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAA;gBAExB,SAAS,EAAA,CAAA;sBAAzC,YAAY;uBAAC,iBAAiB,CAAA;gBAItB,aAAa,EAAA,CAAA;sBAArB,KAAK;gBAEa,cAAc,EAAA,CAAA;sBAAhC,MAAM;gBACY,aAAa,EAAA,CAAA;sBAA/B,MAAM;gBACY,OAAO,EAAA,CAAA;sBAAzB,MAAM;;;ME1CG,UAAU,CAAA;IAQpB,WAAmB,CAAA,MAAoB,EAAE,YAAe,EAAA;AACrD,QAAA,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;AACtB,QAAA,IAAI,CAAC,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC;AACjC,QAAA,IAAI,CAAC,OAAO,GAAG,YAAY,CAAC,MAAM,CAAC;AACnC,QAAA,IAAI,CAAC,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC;KACnC;IAEM,KAAK,GAAA;QACT,OAAO,IAAI,CAAC,MAAM,CAAC;KACrB;IAEM,IAAI,GAAA;AACR,QAAA,OAAO,OAAO,CAAC;KACjB;IAEM,KAAK,GAAA;QACT,OAAO,IAAI,CAAC,MAAM,CAAC;KACrB;IAEM,MAAM,GAAA;QACV,OAAO,IAAI,CAAC,OAAO,CAAC;KACtB;IAEM,MAAM,GAAA;QACV,OAAO,IAAI,CAAC,OAAO,CAAC;KACtB;AACH;;MClCY,UAAU,CAAA;IAQpB,WAAmB,CAAA,MAAoB,EAAE,YAAe,EAAA;AACrD,QAAA,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;AACtB,QAAA,IAAI,CAAC,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC;AACjC,QAAA,IAAI,CAAC,OAAO,GAAG,YAAY,CAAC,MAAM,CAAC;AACnC,QAAA,IAAI,CAAC,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC;KACnC;IAEM,KAAK,GAAA;QACT,OAAO,IAAI,CAAC,MAAM,CAAC;KACrB;IAEM,IAAI,GAAA;AACR,QAAA,OAAO,OAAO,CAAC;KACjB;IAEM,KAAK,GAAA;QACT,OAAO,IAAI,CAAC,MAAM,CAAC;KACrB;IAEM,MAAM,GAAA;QACV,OAAO,IAAI,CAAC,OAAO,CAAC;KACtB;IAEM,MAAM,GAAA;QACV,OAAO,IAAI,CAAC,OAAO,CAAC;KACtB;AACH;;MC3BY,YAAY,CAAA;AAQtB,IAAA,WAAA,GAAA;AAHQ,QAAA,IAAS,CAAA,SAAA,GAAY,KAAK,CAAC;AAIhC,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;AACpB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,CAAC,aAAa,GAAG;YAClB,IAAI,CAAC,YAAY,EAAE,CAAC,SAAS,CAAC,CAAC,KAAK,KAAI;AACrC,gBAAA,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;AAChE,aAAC,CAAC;YACF,IAAI,CAAC,YAAY,EAAE,CAAC,SAAS,CAAC,CAAC,KAAK,KAAI;gBACrC,IAAI,CAAC,2BAA2B,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;AACnD,aAAC,CAAC;SACJ,CAAC;KACJ;IAEM,QAAQ,GAAA;AACZ,QAAA,OAAO,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;KAC7B;IAEM,OAAO,GAAA;QACX,IAAI,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC,MAAM,KAAI;YAChC,MAAM,CAAC,OAAO,EAAE,CAAC;AACpB,SAAC,CAAC,CAAC;QACH,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;YAChC,GAAG,CAAC,WAAW,EAAE,CAAC;AACrB,SAAC,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;KACxB;AAEM,IAAA,QAAQ,CAAC,KAAgB,EAAA;AAC7B,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC3B;IAEM,MAAM,GAAA;QACV,OAAO,IAAI,CAAC,OAAO,CAAC;KACtB;AAEM,IAAA,SAAS,CAAC,KAAa,EAAA;AAC3B,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;KAC/B;IAEM,WAAW,GAAA;QACf,OAAO,IAAI,CAAC,SAAS,CAAC;KACxB;IAEM,IAAI,GAAA;QACR,OAAO,IAAI,GAAG,CACX,IAAI,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAChE,CAAC;KACJ;AAEM,IAAA,QAAQ,CACZ,QAES,EAAA;QAET,IAAI,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC,MAAM,KAAI;AAChC,YAAA,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAC7B,SAAC,CAAC,CAAC;KACL;AAEO,IAAA,2BAA2B,CAChC,KAAoC,EAAA;AAEpC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC,CAAC,MAAM,KAAK,MAAM,KAAK,KAAK,CAAC,CAAC;QACtE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;KAClC;IAEO,YAAY,GAAA;AAGjB,QAAA,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CACtB,MAAM,CACH,CAAC,KAAK,KACH,KAAK,YAAY,UAAU,CAChC,EACD,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,OAAO,CAAC,CAC7D,CAAC;KACJ;IAEO,YAAY,GAAA;AAGjB,QAAA,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CACtB,MAAM,CACH,CAAC,KAAK,KACH,KAAK,YAAY,UAAU,CAChC,EACD,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,OAAO,CAAC,CAC7D,CAAC;KACJ;IAEO,yBAAyB,CAC9B,KAAoC,EACpC,KAAa,EAAA;AAEb,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QACjC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,QAAQ,CAAC,MAAM,EAAE;AACvC,YAAA,MAAM,IAAI,SAAS,CAChB,iCAAiC,KAAK,CAAA,eAAA,CAAiB,CACzD,CAAC;AACJ,SAAA;QACD,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;KACzC;AACH;;MCtHY,gBAAgB,CAAA;AAG1B,IAAA,WAAA,CAAmB,MAAoB,EAAA;AACpC,QAAA,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;KACxB;IAEM,IAAI,GAAA;AACR,QAAA,OAAO,aAAa,CAAC;KACvB;IAEM,MAAM,GAAA;QACV,OAAO,IAAI,CAAC,OAAO,CAAC;KACtB;AACH;;MCGY,aAAa,CAAA;AAP1B,IAAA,WAAA,GAAA;AASG,QAAA,IAAiB,CAAA,iBAAA,GAAiC,SAAS,CAAC;AAC9B,QAAA,IAAQ,CAAA,QAAA,GACnC,SAAS,CAAC;AAEM,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAQ,CAAC;AACzC,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,YAAY,EAAQ,CAAC;AAE/C,QAAA,IAAiB,CAAA,iBAAA,GAAY,KAAK,CAAC;KAO5C;IALS,eAAe,GAAA;AACnB,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;AAC1B,QAAA,MAAM,CAAC,IAAI,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC;QACpC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;KAChD;;2GAfS,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;+FAAb,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,MAAA,EAAA,OAAA,EAAA,EAAA,aAAA,EAAA,eAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EACiB,gBAAgB,EAE7C,EAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,iBAAiB,gDCvB/B,+JAIA,EAAA,MAAA,EAAA,CAAA,uCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDca,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,iBAAiB,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;4FAE/B,aAAa,EAAA,UAAA,EAAA,CAAA;kBAPzB,SAAS;AACK,YAAA,IAAA,EAAA,CAAA,EAAA,UAAA,EAAA,IAAI,YACN,MAAM,EAAA,OAAA,EAGP,CAAC,YAAY,EAAE,iBAAiB,CAAC,EAAA,QAAA,EAAA,+JAAA,EAAA,MAAA,EAAA,CAAA,uCAAA,CAAA,EAAA,CAAA;8BAI1C,iBAAiB,EAAA,CAAA;sBADhB,SAAS;gBAAC,IAAA,EAAA,CAAA,mBAAmB,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAA;gBAE5B,QAAQ,EAAA,CAAA;sBAArC,SAAS;uBAAC,iBAAiB,CAAA;gBAGT,aAAa,EAAA,CAAA;sBAA/B,MAAM;gBACY,OAAO,EAAA,CAAA;sBAAzB,MAAM;;;AEnBV;;AAEG;MACU,cAAc,CAAA;IAIxB,WACoB,CAAA,QAAqB,EACtC,gBAAkC,EAAA;AADjB,QAAA,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAa;QAGtC,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;AACxE,QAAA,MAAM,WAAW,GACd,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC,MAAK;YACzD,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,CAAC;AACzD,YAAA,MAAM,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC;YAC/B,gBAAgB,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC9D,SAAC,CAAC,CAAC;AACN,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAChE,MAAK;YACF,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AACvD,SAAC,CACH,CAAC;QACF,IAAI,CAAC,qBAAqB,GAAG,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;KACzD;IAEM,OAAO,GAAA;QACX,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;YACxC,GAAG,CAAC,WAAW,EAAE,CAAC;AACrB,SAAC,CAAC,CAAC;KACL;IAEM,aAAa,GAAA;AACjB,QAAA,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,aAAa,EAAE,CAAC;KAC1D;IAEM,oBAAoB,GAAA;AACxB,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,iBAAiB,CAAC;KAC1D;IAEM,oBAAoB,GAAA;AACxB,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC;KACxC;IAEM,WAAW,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC;KACxC;IAEM,gBAAgB,GAAA;AACpB,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,aAAa,CAAC;KACtD;AACH;;MC3CY,QAAQ,CAAA;AAMlB,IAAA,WAAA,CAAoC,gBAAkC,EAAA;AAAlC,QAAA,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAkB;AACnE,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,EAAE,CAAC;QACvC,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;QACjE,IAAI,CAAC,aAAa,EAAE,CAAC;KACvB;IAEM,QAAQ,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC;KACtC;IAEM,OAAO,GAAA;AACX,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE;AACrB,YAAA,MAAM,IAAI,SAAS,CAAC,sCAAsC,CAAC,CAAC;AAC9D,SAAA;AACD,QAAA,gBAAgB,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;AAC7C,QAAA,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;AAC5B,QAAA,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;AAC9B,QAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;AAC9B,QAAA,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACpB,IAAI,CAAC,QAAQ,CAAC,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC;KAC5C;IAEM,aAAa,GAAA;AACjB,QAAA,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,CAAC;KACtC;AAEM,IAAA,QAAQ,CAAC,KAAgB,EAAA;AAC7B,QAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;KACpC;IAEM,MAAM,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;KACpC;AAEM,IAAA,SAAS,CAAC,KAAa,EAAA;QAC3B,OAAO,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;KAC5C;IAEM,oBAAoB,GAAA;AACxB,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE;AACrB,YAAA,MAAM,IAAI,SAAS,CAChB,0DAA0D,CAC5D,CAAC;AACJ,SAAA;AACD,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,oBAAoB,EAAE,CAAC;KACpD;IAEM,oBAAoB,GAAA;AACxB,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE;AACrB,YAAA,MAAM,IAAI,SAAS,CAChB,0DAA0D,CAC5D,CAAC;AACJ,SAAA;AACD,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,oBAAoB,EAAE,CAAC;KACpD;IAEM,WAAW,GAAA;AACf,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE;AACrB,YAAA,MAAM,IAAI,SAAS,CAChB,2DAA2D,CAC7D,CAAC;AACJ,SAAA;AACD,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC;KAC3C;IAEM,gBAAgB,GAAA;AACpB,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE;AACrB,YAAA,MAAM,IAAI,SAAS,CAChB,sDAAsD,CACxD,CAAC;AACJ,SAAA;AACD,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,gBAAgB,EAAE,CAAC;KAChD;IAEM,IAAI,CACR,SAAkC,EAClC,OAA0C,EAAA;AAE1C,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE;AACrB,YAAA,MAAM,IAAI,SAAS,CAAC,+CAA+C,CAAC,CAAC;AACvE,SAAA;QACD,OAAO,IAAI,UAAU,CAAC,IAAI,kBAAI,SAAS,EAAA,EAAK,OAAO,CAAA,CAAG,CAAC;KACzD;IAEM,WAAW,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC;KACzC;IAEM,IAAI,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;KAClC;IAEM,IAAI,GAAA;AACR,QAAA,OAAO,IAAI,CAAC;KACd;AAEM,IAAA,QAAQ,CACZ,QAES,EAAA;QAET,QAAQ,CAAC,IAAI,CAAC,CAAC;AACf,QAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;KACvC;AACH;;MCxHY,WAAW,CAAA;AACd,IAAA,eAAe,CACnB,SAA2B,EAC3B,OAAA,GAAuB,EAAE,EAAA;QAEzB,SAAS,CAAC,KAAK,EAAE,CAAC;AAClB,QAAA,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAY,SAAS,CAAC,CAAC;AAChD,QAAA,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAChC,QAAA,OAAO,IAAI,CAAC;KACd;;yGATS,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAX,WAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAW,cADE,MAAM,EAAA,CAAA,CAAA;4FACnB,WAAW,EAAA,UAAA,EAAA,CAAA;kBADvB,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE,CAAA;;;ACSlC;;AAEG;MACU,gBAAgB,CAAA;IAS1B,WACoB,CAAA,UAAyC,EAC1D,uBAAyC,EAAA;AADxB,QAAA,IAAU,CAAA,UAAA,GAAV,UAAU,CAA+B;AAG1D,QAAA,IAAI,CAAC,0BAA0B,GAAG,EAAE,CAAC;AACrC,QAAA,IAAI,CAAC,kBAAkB,GAAG,eAAe,CAEvC,eAAe,EAAE;YAChB,mBAAmB,EAChB,uBAAuB,CAAC,QAAQ,CAAC,GAAG,CAAC,mBAAmB,CAAC;AAC9D,SAAA,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,aAAa;AAC3C,YAAA,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,SAAS,CAAC;AAC3C,QAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,wBAAwB,CACvD,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAClC,CAAC;KACJ;IAEM,OAAO,GAAA;QACX,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;YACxC,GAAG,CAAC,WAAW,EAAE,CAAC;AACrB,SAAC,CAAC,CAAC;QACH,IAAI,CAAC,0BAA0B,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;YAC7C,GAAG,CAAC,WAAW,EAAE,CAAC;AACrB,SAAC,CAAC,CAAC;KACL;IAEM,aAAa,GAAA;AACjB,QAAA,IAAI,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,aAAa,EAAE,CAAC;KAC5D;IAEM,oBAAoB,GAAA;AACxB,QAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,iBAAiB,CAAC;KAC5D;IAEM,oBAAoB,GAAA;AACxB,QAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC;KAC1C;IAEM,WAAW,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC;KAC1C;IAEM,gBAAgB,GAAA;AACpB,QAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,aAAa,CAAC;KACxD;IAEM,uBAAuB,GAAA;QAG3B,OAAO,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,gBAAgB,EAAE,CAAC;KAC7D;AAEO,IAAA,oBAAoB,CACzB,QAA4C,EAAA;QAE5C,OAAO,QAAQ,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,yBAAyB,KAAI;;YACpE,MAAM,SAAS,GAAG,yBAAgC,CAAC;YACnD,MAAM,CAAC,OAAO,CACX,CAAA,EAAA,GAAA,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,aAAa,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,EAAE,CACnD,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KAAI;AACxB,gBAAA,SAAS,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AAC1B,aAAC,CAAC,CAAC;YACH,MAAM,CAAC,OAAO,CACX,CAAA,EAAA,GAAA,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,cAAc,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,EAAE,CACpD,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KAAI;AACxB,gBAAA,IAAI,CAAC,0BAA0B,CAAC,IAAI,CACjC,SAAS,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CACjC,CAAC;AACL,aAAC,CAAC,CAAC;AACH,YAAA,SAAS,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;AACvC,YAAA,MAAM,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC;AACrC,YAAA,MAAM,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC;YAChC,gBAAgB,CAAC,iBAAiB,CAAC,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;AAClE,SAAC,CAAC,CAAC;KACL;AAEO,IAAA,wBAAwB,CAC7B,QAA4C,EAAA;QAE5C,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,SAAS,KAAI;YACzD,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;AAC3D,SAAC,CAAC,CAAC;QACH,OAAO;AACJ,YAAA,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC;AACnC,YAAA,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC;AACnC,YAAA,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC;YACnC,UAAU;SACZ,CAAC;KACJ;AAEO,IAAA,oBAAoB,CACzB,QAA4C,EAAA;QAE5C,OAAO,QAAQ,CAAC,aAAa;AACzB,aAAA,IAAI,CAAC,MAAM,CAAC,CAAC,SAAS,KAAK,SAAS,KAAK,OAAO,CAAC,CAAC;aAClD,SAAS,CAAC,MAAK;AACb,YAAA,MAAM,wBAAwB,GAC3B,gBAAgB,CAAC,iBAAiB,EAAE,CAAC;YACxC,IACG,CAAA,wBAAwB,KAAA,IAAA,IAAxB,wBAAwB,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAxB,wBAAwB,CAAE,UAAU,MAAK,IAAI,CAAC,UAAU;AACxD,gBAAA,wBAAwB,CAAC,SAAS,KAAK,OAAO,EAC/C;gBACC,OAAO;AACT,aAAA;AACD,YAAA,gBAAgB,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACjD,QAAQ,CAAC,sBAAsB,EAAE,CAAC;AACrC,SAAC,CAAC,CAAC;KACR;AAEO,IAAA,oBAAoB,CACzB,QAA4C,EAAA;QAE5C,OAAO,QAAQ,CAAC,aAAa;AACzB,aAAA,IAAI,CAAC,MAAM,CAAC,CAAC,SAAS,KAAK,SAAS,KAAK,OAAO,CAAC,CAAC;aAClD,SAAS,CAAC,MAAK;AACb,YAAA,MAAM,wBAAwB,GAC3B,gBAAgB,CAAC,iBAAiB,EAAE,CAAC;YACxC,IACG,CAAA,wBAAwB,KAAA,IAAA,IAAxB,wBAAwB,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAxB,wBAAwB,CAAE,UAAU,MAAK,IAAI,CAAC,UAAU;AACxD,gBAAA,wBAAwB,CAAC,SAAS,KAAK,OAAO,EAC/C;gBACC,OAAO;AACT,aAAA;AACD,YAAA,gBAAgB,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACjD,QAAQ,CAAC,sBAAsB,EAAE,CAAC;AACrC,SAAC,CAAC,CAAC;KACR;AACH;;MCrIY,UAAU,CAAA;IAepB,WACG,CAAA,MAA8D,EAC9C,aAAmD,EAAA;AAAnD,QAAA,IAAa,CAAA,aAAA,GAAb,aAAa,CAAsC;AAR9D,QAAA,IAAY,CAAA,YAAA,GAAmB,IAAI,CAAC;AAUzC,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,EAAE,CAAC;AACvC,QAAA,MAAM,uBAAuB,GAAG,MAAM,CAAC,oBAAoB,EAAE,CAAC;AAC9D,QAAA,MAAM,CAAC,uBAAuB,KAAK,SAAS,CAAC,CAAC;QAC9C,IAAI,CAAC,gBAAgB,GAAG,IAAI,gBAAgB,CACzC,IAAI,EACJ,uBAAuB,CACzB,CAAC;AACF,QAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QAC5B,IACG,MAAM,YAAY,UAAU;AAC5B,YAAA,MAAM,CAAC,aAAa,CAAC,gBAAgB,KAAK,IAAI,EAC/C;AACC,YAAA,aAAa,CAAC,qBAAqB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YAClD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,CAAC;AAC1D,SAAA;AAAM,aAAA;YACJ,uBAAuB,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,CAAC,CAAC;YACpE,IAAI,CAAC,aAAa,EAAE,CAAC;AACrB,YAAA,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;AACtB,YAAA,IAAI,CAAC,QAAQ,CACV,IAAI,UAAU,CAAC,IAAI,EAAE;gBAClB,MAAM,EAAE,IAAI,CAAC,OAAO;AACpB,gBAAA,KAAK,EAAE,IAAI;gBACX,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,MAAM;AACvC,aAAA,CAAC,CACJ,CAAC;AACJ,SAAA;KACH;IAEM,QAAQ,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC;KACtC;IAEM,OAAO,GAAA;AACX,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE;AACrB,YAAA,MAAM,IAAI,SAAS,CAAC,wCAAwC,CAAC,CAAC;AAChE,SAAA;QACD,IAAI,CAAC,KAAK,EAAE,CAAC;AACb,QAAA,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAC3B,QAAA,gBAAgB,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;QAC7C,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,CAAC,OAAO,EAAE,CAAC;AAC9C,QAAA,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;AAC5B,QAAA,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC;QAChC,IAAI,CAAC,QAAQ,CAAC,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC;KAC5C;IAEM,aAAa,GAAA;AACjB,QAAA,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE,CAAC;KACxC;AAEM,IAAA,QAAQ,CAAC,KAAgB,EAAA;;AAC7B,QAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAClC,CAAA,EAAA,GAAA,IAAI,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;KAChC;IAEM,MAAM,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;KACpC;AAEM,IAAA,SAAS,CAAC,KAAa,EAAA;QAC3B,OAAO,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;KAC5C;IAEM,oBAAoB,GAAA;AACxB,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE;AACrB,YAAA,MAAM,IAAI,SAAS,CAChB,4DAA4D,CAC9D,CAAC;AACJ,SAAA;AACD,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,EAAE,CAAC;KACtD;IAEM,oBAAoB,GAAA;AACxB,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE;AACrB,YAAA,MAAM,IAAI,SAAS,CAChB,4DAA4D,CAC9D,CAAC;AACJ,SAAA;AACD,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,EAAE,CAAC;KACtD;IAEM,WAAW,GAAA;AACf,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE;AACrB,YAAA,MAAM,IAAI,SAAS,CAChB,6DAA6D,CAC/D,CAAC;AACJ,SAAA;AACD,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,CAAC;KAC7C;IAEM,gBAAgB,GAAA;AACpB,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE;AACrB,YAAA,MAAM,IAAI,SAAS,CAChB,wDAAwD,CAC1D,CAAC;AACJ,SAAA;AACD,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,CAAC;KAClD;IAEM,uBAAuB,GAAA;AAG3B,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE;AACrB,YAAA,MAAM,IAAI,SAAS,CAChB,4DAA4D,CAC9D,CAAC;AACJ,SAAA;AACD,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,uBAAuB,EAAE,CAAC;KACzD;IAEM,OAAO,CACX,SAAiE,EACjE,KAAc,EAAA;AAEd,QAAA,IAAI,CAAC,0BAA0B,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;AAClD,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;QAC9B,IAAI,QAAQ,KAAK,SAAS,EAAE;YACzB,IAAI,CAAC,KAAK,EAAE,CAAC;AACf,SAAA;AACD,QAAA,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;AACzB,QAAA,MAAM,QAAQ,GAAG,KAAK,KAAA,IAAA,IAAL,KAAK,KAAL,KAAA,CAAA,GAAA,KAAK,GAAI,SAAS,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC;AACtD,QAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;AAC5B,QAAA,IAAI,CAAC,QAAQ,CACV,IAAI,UAAU,CAAC,IAAI,EAAE;AAClB,YAAA,MAAM,EAAE,SAAS;AACjB,YAAA,KAAK,EAAE,IAAI;AACX,YAAA,KAAK,EAAE,QAAQ;AACjB,SAAA,CAAC,CACJ,CAAC;AACF,QAAA,OAAO,QAAQ,CAAC;KAClB;IAEM,IAAI,CACR,SAAkC,EAClC,OAA0C,EAAA;AAE1C,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE;AACrB,YAAA,MAAM,IAAI,SAAS,CAAC,iDAAiD,CAAC,CAAC;AACzE,SAAA;QACD,OAAO,IAAI,UAAU,CAAC,IAAI,kBAAI,SAAS,EAAA,EAAK,OAAO,CAAA,CAAG,CAAC;KACzD;IAEM,KAAK,GAAA;AACT,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AAChB,YAAA,OAAO,SAAS,CAAC;AACnB,SAAA;AACD,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO;AACtB,aAAA,QAAQ,EAAE;aACV,SAAS,CAAC,CAAC,MAAM,KAAK,MAAM,KAAK,IAAI,CAAC,CAAC;AAC3C,QAAA,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;AACnB,QAAA,OAAO,KAAK,CAAC;KACf;IAEM,WAAW,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC;KACzC;IAEM,IAAI,GAAA;;QACR,OAAO,CAAA,EAAA,GAAA,IAAI,CAAC,aAAa,CAAC,IAAI,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,EAAE,CAAC;KACvC;IAEM,MAAM,GAAA;QAGV,OAAO,IAAI,CAAC,OAAO,CAAC;KACtB;IAEM,IAAI,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;KAClC;IAEM,QAAQ,GAAA;AACZ,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;QAC3B,IAAI,KAAK,KAAK,SAAS,EAAE;AACtB,YAAA,MAAM,IAAI,SAAS,CAChB,sDAAsD,CACxD,CAAC;AACJ,SAAA;AACD,QAAA,IAAI,IAAI,CAAC,OAAO,YAAY,UAAU,EAAE;YACrC,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;AAC/C,YAAA,OAAO,CAAC,GAAG,cAAc,EAAE,KAAK,CAAC,CAAC;AACpC,SAAA;QACD,OAAO,CAAC,KAAK,CAAC,CAAC;KACjB;IAEM,KAAK,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE;AACrB,YAAA,MAAM,IAAI,SAAS,CAAC,sCAAsC,CAAC,CAAC;AAC9D,SAAA;AACD,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;AAC5B,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;AAC3B,QAAA,IAAI,KAAK,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO;AACxD,QAAA,MAAM,SAAS,GAAG,MAAM,CAAC,oBAAoB,EAAE,CAAC;AAChD,QAAA,MAAM,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC;QAChC,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC5C,QAAA,MAAM,CAAC,IAAI,CAAC,YAAY,KAAK,IAAI,CAAC,CAAC;AACnC,QAAA,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;AAC3B,QAAA,IAAI,CAAC,QAAQ,CACV,IAAI,UAAU,CAAC,IAAI,EAAE;AAClB,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,KAAK,EAAE,IAAI;AACX,YAAA,KAAK,EAAE,KAAK;AACd,SAAA,CAAC,CACJ,CAAC;AACF,QAAA,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;AACzB,QAAA,OAAO,IAAI,CAAC;KACd;IAEM,IAAI,GAAA;AACR,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QAC7B,IAAI,MAAM,YAAY,UAAU,EAAE;AAC/B,YAAA,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;AACvB,SAAA;QACD,MAAM,CAAC,MAAM,YAAY,QAAQ,IAAI,MAAM,KAAK,SAAS,CAAC,CAAC;AAC3D,QAAA,OAAO,MAAM,CAAC;KAChB;AAEM,IAAA,QAAQ,CACZ,QAES,EAAA;QAET,QAAQ,CAAC,IAAI,CAAC,CAAC;AACf,QAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;KACvC;IAEO,0BAA0B,CAC/B,SAAiE,EACjE,KAAc,EAAA;AAEd,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE;AACrB,YAAA,MAAM,IAAI,SAAS,CAAC,sCAAsC,CAAC,CAAC;AAC9D,SAAA;AACD,QAAA,IAAI,SAAS,CAAC,WAAW,EAAE,EAAE;AAC1B,YAAA,MAAM,IAAI,SAAS,CAAC,yCAAyC,CAAC,CAAC;AACjE,SAAA;QACD,IACG,OAAO,KAAK,KAAK,QAAQ;AACzB,YAAA,IAAI,CAAC,iBAAiB,CAAC,SAAS,EAAE,KAAK,CAAC,EACzC;AACC,YAAA,MAAM,IAAI,SAAS,CAChB,gCAAgC,KAAK,CAAA,6BAAA,CAA+B,CACtE,CAAC;AACJ,SAAA;AACD,QAAA,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,KAAI;YACpB,IAAI,IAAI,KAAK,SAAS,EAAE;AACrB,gBAAA,MAAM,IAAI,SAAS,CAChB,+DAA+D,CACjE,CAAC;AACJ,aAAA;AACJ,SAAC,CAAC,CAAC;KACL;IAEO,iBAAiB,CACtB,MAA8D,EAC9D,KAAa,EAAA;AAEb,QAAA,OAAO,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC;KACvD;AAEO,IAAA,YAAY,CAAC,KAAc,EAAA;AAChC,QAAA,MAAM,CAAC,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC;AACnC,QAAA,MAAM,CAAC,IAAI,CAAC,YAAY,KAAK,IAAI,CAAC,CAAC;QACnC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,oBAAoB,EAAE,CAAC;AACtD,QAAA,MAAM,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC;AAChC,QAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC;QAC7B,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;AAC3C,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;KAC3B;AAEO,IAAA,cAAc,CACnB,MAA8D,EAAA;;AAE9D,QAAA,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;AAC3B,QAAA,MAAM,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;QAC3B,MAAM,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AACvC,QAAA,MAAM,mBAAmB,GAAG,IAAI,CAAC,gBAAgB;AAC7C,aAAA,gBAAgB,EAAE;aAClB,sBAAsB,CAAC,oBAAoB,CAAC;aAC5C,IAAI,CAAC,CAAC,CAAC,CAAC;AACZ,QAAA,MAAM,CAAC,mBAAmB,YAAY,WAAW,CAAC,CAAC;AACnD,QAAA,mBAAmB,CAAC,KAAK,CAAC,UAAU,GAAG,GAAG,CAAA,EAAA,GAAA,OAAO,KAAP,IAAA,IAAA,OAAO,uBAAP,OAAO,CAAE,WAAW,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,EAAE,IAAI,CAAC;KAC3E;AACH;;ACrTD,MAAM,gBAAgB,CAAA;AAUnB,IAAA,WAAA,GAAA;AACG,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,GAAG,EAAE,CAAC;AAC1B,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;AAC3B,QAAA,WAAW,CAAC,YAAY,CAAC,SAAS,CAAC,MAAK;YACrC,IAAI,CAAC,mBAAmB,EAAE,CAAC;AAC9B,SAAC,CAAC,CAAC;QACH,SAAS;AACL,aAAA,MAAM,EAAE;AACR,aAAA,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,KAAK,UAAU,CAAC,QAAQ,CAAC,CAAC;aACtD,SAAS,CAAC,MAAK;;AACb,YAAA,MAAM,MAAM,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC;AACvC,YAAA,MAAM,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC;YAC7B,IAAI,MAAM,GAAG,CAAA,EAAA,GAAA,MAAM,CAAC,MAAM,EAAE,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,SAAS,CAAC,CAAC,MAAA,MAAM,CAAC,KAAK,EAAE,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACnE,YAAA,IAAI,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;YAC5B,OAAO,MAAM,KAAK,SAAS,EAAE;gBAC1B,KAAK,GAAG,MAAM,CAAC;gBACf,MAAM,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACpC,aAAA;YACD,MAAM;AACF,iBAAA,MAAM,EAAE;AACR,iBAAA,IAAI,CACF,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,YAAY,UAAU,CAAC,EAC9C,KAAK,EAAE,CACT;iBACA,SAAS,CAAC,MAAK;gBACb,MAAM,CACH,KAAK,YAAY,UAAU,IAAI,KAAK,YAAY,QAAQ,CAC1D,CAAC;AACF,gBAAA,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;AAC9B,aAAC,CAAC,CAAC;AACT,SAAC,CAAC,CAAC;KACR;IAEM,mBAAmB,GAAA;AACvB,QAAA,IAAI,IAAI,CAAC,cAAc,KAAK,IAAI;YAAE,OAAO;QACzC,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE;AAC1C,YAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,oBAAoB,EAAE,CAAC;AAC/C,YAAA,QAAQ,CAAC,iBAAiB,GAAG,KAAK,CAAC;YACnC,IAAI,QAAQ,YAAY,eAAe,EAAE;AACtC,gBAAA,QAAQ,CAAC,mBAAmB,GAAG,KAAK,CAAC;AACvC,aAAA;AACH,SAAA;AACD,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;KAC7B;AAEM,IAAA,qBAAqB,CAAC,IAAqC,EAAA;QAC/D,MAAM,KAAK,GAAoD,EAAE,CAAC;AAClE,QAAA,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC1C,KAAK,MAAM,CAAC,iBAAiB,EAAE,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE;AACxD,YAAA,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;AAC3B,gBAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;AAC1C,aAAA;AACH,SAAA;KACH;IAEM,iBAAiB,GAAA;AAIrB,QAAA,IAAI,IAAI,CAAC,cAAc,KAAK,IAAI;AAAE,YAAA,OAAO,IAAI,CAAC;QAC9C,OAAY,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,IAAI,CAAC,cAAc,CAAG,CAAA;KACpC;AAEM,IAAA,mBAAmB,CACvB,QAA2B,EAAA;QAE3B,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAC3C,QAAA,MAAM,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC;QACrC,IAAI,MAAM,KAAK,SAAS,EAAE;AACvB,YAAA,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;AACpD,SAAA;QACD,IAAI,SAAS,KAAK,SAAS,EAAE;AAC1B,YAAA,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;AACzD,SAAA;AACD,QAAA,OAAO,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;KAC7B;IAEM,UAAU,CACd,QAAqC,EACrC,SAA8B,EAAA;QAE9B,IAAI,SAAS,KAAK,OAAO,EAAE;AACxB,YAAA,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;AAChC,SAAA;AAAM,aAAA,IAAI,QAAQ,YAAY,UAAU,IAAI,SAAS,KAAK,SAAS,EAAE;AACnE,YAAA,MAAM,aAAa,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC;AACxC,YAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC;AAC/B,YAAA,IAAI,aAAa,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS,EAAE;AACrD,gBAAA,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;AAC/C,aAAA;YACD,WAAW,CAAC,IAAI,CAAC,aAAa,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;AAC7C,SAAA;QACD,IAAI,CAAC,mBAAmB,EAAE,CAAC;KAC7B;IAEM,gBAAgB,CACpB,QAA2B,EAC3B,QAAqC,EAAA;QAErC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;KACxC;IAEM,iBAAiB,CACrB,SAAsC,EACtC,UAAyB,EAAA;AAEzB,QAAA,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE;YAC/B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;AAC1C,SAAA;KACH;AAEM,IAAA,cAAc,CAAI,QAAqC,EAAA;QAC3D,IAAI,CAAC,mBAAmB,EAAE,CAAC;AAC3B,QAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAC7B,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE;AACnC,YAAA,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC;AACvC,SAAA;AACD,QAAA,IAAI,CAAC,cAAc,GAAG,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC;KACrE;AAEM,IAAA,cAAc,CAAI,UAAyB,EAAA;QAC/C,IAAI,CAAC,mBAAmB,EAAE,CAAC;AAC3B,QAAA,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAC;QACvC,IAAI,CAAC,cAAc,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC;KAC3D;AAEO,IAAA,qBAAqB,CAC1B,QAAqC,EAAA;QAErC,IAAI,MAAM,GAAuD,QAAQ,CAAC;QAC1E,OAAO,MAAM,YAAY,UAAU,EAAE;AAClC,YAAA,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;AAC7B,YAAA,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;AAC/B,YAAA,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;YAC7B,MAAM,CAAC,MAAM,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS,CAAC,CAAC;YACpD,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC,MAAM,GAAG,KAAK,GAAG,CAAC,EAAE;gBACvC,OAAO;AACT,aAAA;AACD,YAAA,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;AAC3B,SAAA;KACH;AAEO,IAAA,qBAAqB,CAAI,UAAyB,EAAA;;QACvD,IAAI,MAAM,GAAG,CAAA,EAAA,GAAA,UAAU;AACnB,aAAA,MAAM,EAAE,MACP,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,SAAS,CAAC,CAAC,MAAA,UAAU,CAAC,KAAK,EAAE,mCAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC9C,QAAA,IAAI,KAAK,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC;QAChC,OAAO,MAAM,KAAK,SAAS,EAAE;AAC1B,YAAA,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;YAC7B,KAAK,GAAG,MAAM,CAAC;YACf,MAAM,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACpC,SAAA;QACD,IACG,KAAK,KAAK,SAAS;aAClB,KAAK,YAAY,QAAQ,IAAI,KAAK,YAAY,UAAU,CAAC,EAC3D;AACC,YAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;AAC5B,SAAA;KACH;AAEO,IAAA,cAAc,CAAC,QAAiB,EAAA;;QACrC,IAAI,QAAQ,YAAY,QAAQ,EAAE;AAC/B,YAAA,OAAO,IAAI,CAAC;AACd,SAAA;QACD,IAAI,QAAQ,YAAY,UAAU,EAAE;YACjC,MAAM,YAAY,GACf,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,WAAW,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,YAAY,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,IAC3D,MAAY,IAAI,CAAC,CAAC;AACtB,YAAA,OAAO,YAAY,CAAC,QAAQ,CAAC,CAAC;AAChC,SAAA;AACD,QAAA,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;KAC/C;IAEO,WAAW,CAAC,MAAe,EAAE,KAAa,EAAA;;AAC/C,QAAA,MAAM,UAAU,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC;AAC3C,QAAA,MAAM,CAAC,UAAU,YAAY,UAAU,CAAC,CAAC;QACzC,IAAI,MAAM,YAAY,QAAQ,EAAE;YAC7B,MAAM,SAAS,GACZ,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,MAAA,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,0CAAE,WAAW,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,SAAS,MAChD,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,IAAC,MAAY,IAAI,CAAC,CAAC;YACtB,OAAO,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;AAC9C,SAAA;QACD,IAAI,MAAM,YAAY,UAAU,EAAE;YAC/B,MAAM,SAAS,GACZ,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,WAAW,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,SAAS,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,IACtD,MAAY,IAAI,CAAC,CAAC;YACtB,OAAO,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;AAC9C,SAAA;AACD,QAAA,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;KAC/C;AAEO,IAAA,aAAa,CAAI,QAAqC,EAAA;AAC3D,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC;YACjE,OAAO;AACV,QAAA,QAAQ,CAAC,oBAAoB,EAAE,CAAC,iBAAiB,GAAG,IAAI,CAAC;KAC3D;AAEO,IAAA,eAAe,CAAI,UAAyB,EAAA;AACjD,QAAA,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,EAAE,CAAC;AACjC,QAAA,MAAM,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC;AAC5B,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,KAAK,GAAG,CAAC,CAAC;YAAE,OAAO;AAC9D,QAAA,UAAU,CAAC,oBAAoB,EAAE,CAAC,mBAAmB,GAAG,IAAI,CAAC;KAC/D;AACH,CAAA;AAEM,MAAM,gBAAgB,GAAG,IAAI,gBAAgB,EAAE;;MC3NzC,sBAAsB,CAAA;IACzB,cAAc,GAAA;QAClB,gBAAgB,CAAC,mBAAmB,EAAE,CAAC;KACzC;IAEM,SAAS,CAAI,UAAyB,EAAE,KAAgB,EAAA;AAC5D,QAAA,WAAW,CAAC,SAAS,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;KAC3C;IAEM,mCAAmC,GAAA;AAIvC,QAAA,OAAO,gBAAgB,CAAC,iBAAiB,EAAE,CAAC;KAC9C;AAEM,IAAA,gBAAgB,CAAI,IAAiB,EAAA;AACzC,QAAA,gBAAgB,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;KACxC;IAEM,KAAK,GAAA;AACT,QAAA,OAAO,SAAS,CAAC,MAAM,EAAE,CAAC;KAC5B;;oHAtBS,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;wHAAtB,sBAAsB,EAAA,CAAA,CAAA;4FAAtB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBADlC,UAAU;;;MCOE,kBAAkB,CAAA;AAG5B,IAAA,WAAA,CACoB,kBAA0C,EAC3D,QAAmB,EACnB,WAAoC,EAAA;AAFnB,QAAA,IAAkB,CAAA,kBAAA,GAAlB,kBAAkB,CAAwB;QAI3D,QAAQ,CAAC,YAAY,CAAC,WAAW,CAAC,aAAa,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;QACtE,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,aAAa,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;KACjE;AAE6C,IAAA,WAAW,CACtD,KAAgB,EAAA;AAEhB,QAAA,IAAI,IAAI,CAAC,mBAAmB,KAAK,SAAS;YAAE,OAAO;QACnD,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,IAAI,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAC;KACrE;;gHAjBS,kBAAkB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,sBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,SAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;oGAAlB,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,WAAA,EAAA,qBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;4FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAJ9B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,QAAQ,EAAE,uBAAuB;AACjC,oBAAA,UAAU,EAAE,IAAI;iBAClB,CAAA;2JAEW,mBAAmB,EAAA,CAAA;sBAA3B,KAAK;gBAWwC,WAAW,EAAA,CAAA;sBAAxD,YAAY;uBAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAA;;;MChB3B,qBAAqB,CAAA;;mHAArB,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAArB,qBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,YAJrB,kBAAkB,EAAE,+BAA+B,CAEnD,EAAA,OAAA,EAAA,CAAA,kBAAkB,EAAE,+BAA+B,CAAA,EAAA,CAAA,CAAA;oHAEnD,qBAAqB,EAAA,SAAA,EAHpB,CAAC,sBAAsB,CAAC,EAAA,CAAA,CAAA;4FAGzB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBALjC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,OAAO,EAAE,CAAC,kBAAkB,EAAE,+BAA+B,CAAC;oBAC9D,SAAS,EAAE,CAAC,sBAAsB,CAAC;AACnC,oBAAA,OAAO,EAAE,CAAC,kBAAkB,EAAE,+BAA+B,CAAC;iBAChE,CAAA;;;ACFD;;;AAGG;MACU,UAAU,CAAA;;AAEb,IAAA,yBAAyB,CAC7B,SAA2B,EAC3B,IAAoB,EACpB,cAAuC,EAAE,EAAA;AAEzC,QAAA,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAY,SAAS,CAAC,CAAC;AAChD,QAAA,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,CAAC;AACzD,QAAA,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE;YACtB,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;AAC/C,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;KACd;AAEM,IAAA,cAAc,CAAC,aAAsC,EAAA;QACzD,OAAO;YACJ,WAAW,EAAE,aAAa,CAAC,MAAM;AACjC,YAAA,WAAW,EAAE;AACV,gBAAA,YAAY,EAAE,CAAC,MAAM,KAAa;AAC/B,oBAAA,IAAI,aAAa,CAAC,QAAQ,KAAK,IAAI,EAAE;AAClC,wBAAA,OAAO,KAAK,CAAC;AACf,qBAAA;AACD,oBAAA,IAAI,aAAa,CAAC,YAAY,KAAK,SAAS,EAAE;AAC3C,wBAAA,OAAO,IAAI,CAAC;AACd,qBAAA;AACD,oBAAA,IAAI,OAAO,aAAa,CAAC,YAAY,KAAK,SAAS,EAAE;wBAClD,OAAO,aAAa,CAAC,YAAY,CAAC;AACpC,qBAAA;AACD,oBAAA,OAAO,aAAa,CAAC,YAAY,CAAC,MAAa,CAAC,CAAC;iBACnD;AACD,gBAAA,aAAa,EAAE,CAAC,MAAM,KAAa;AAChC,oBAAA,IAAI,aAAa,CAAC,aAAa,KAAK,SAAS,EAAE;AAC5C,wBAAA,OAAO,IAAI,CAAC;AACd,qBAAA;AACD,oBAAA,IAAI,OAAO,aAAa,CAAC,aAAa,KAAK,SAAS,EAAE;wBACnD,OAAO,aAAa,CAAC,aAAa,CAAC;AACrC,qBAAA;AACD,oBAAA,OAAO,aAAa,CAAC,aAAa,CAAC,MAAa,CAAC,CAAC;iBACpD;gBACD,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,KAAa;AAC3C,oBAAA,IAAI,aAAa,CAAC,SAAS,KAAK,SAAS,EAAE;AACxC,wBAAA,OAAO,IAAI,CAAC;AACd,qBAAA;oBACD,OAAO,aAAa,CAAC,SAAS,CAC3B,MAAa,EACb,MAAa,EACb,KAAK,CACP,CAAC;iBACJ;AACH,aAAA;SACH,CAAC;KACJ;AAEO,IAAA,cAAc,CACnB,MAAmC,EACnC,IAAoB,EACpB,OAAgC,EAAA;;AAEhC,QAAA,MAAM,SAAS,GACZ,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,SAAS,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,MAAA,OAAO,CAAC,gBAAgB,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,KAAK,CAAC;QAC5D,IAAI,SAAS,KAAK,SAAS,EAAE;AAC1B,YAAA,MAAM,IAAI,SAAS,CAAC,8BAA8B,CAAC,CAAC;AACtD,SAAA;QACD,MAAM,QAAQ,IAAI,CAAA,EAAA,GAAA,MAAA,CAAA,EAAA,GAAA,IAAI,CAAC,SAAS,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,QAAQ,MACvC,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,CAAA,EAAA,GAAA,OAAO,CAAC,gBAAgB,0CAAE,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAClC,EAAE,CAA0C,CAAC;QAChD,MAAM,QAAQ,GAAG,IAAI,CAAC;AACtB,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,SAAoB,EAAE;AAC9C,YAAA,aAAa,EAAE,QAAQ;YACvB,IAAI,EAAE,EAAE,QAAQ,EAAE;AACpB,SAAA,CAAC,CAAC;QACH,KAAK,MAAM,SAAS,IAAI,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,EAAE,EAAE;YACvC,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;AAClD,SAAA;AACD,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,EAAE;AAC1B,YAAA,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AACjC,SAAA;KACH;AACH;;ACtED;MAMa,uBAAuB,CAAA;AAiBjC,IAAA,WAAA,GAAA;AAZS,QAAA,IAAY,CAAA,YAAA,GAAW,QAAQ,CAAC;AAChC,QAAA,IAAI,CAAA,IAAA,GAAW,CAAC,CAAC;AAIP,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAiB,CAAC;AAC/C,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,YAAY,EAAqB,CAAC;AAOjE,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,UAAU,EAAE,CAAC;KACrC;IAEM,eAAe,GAAA;QACnB,IAAI,CAAC,MAAM,EAAE,CAAC;KAChB;IAEM,WAAW,GAAA;QACf,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE;YACrD,IAAI,CAAC,MAAM,EAAE,CAAC;AAChB,SAAA;KACH;IAEM,WAAW,GAAA;;AACf,QAAA,CAAA,EAAA,GAAA,IAAI,CAAC,gBAAgB,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,WAAW,EAAE,CAAC;AACrC,QAAA,CAAA,EAAA,GAAA,IAAI,CAAC,IAAI,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,OAAO,EAAE,CAAC;KACvB;IAEM,OAAO,GAAA;QACX,OAAO,IAAI,CAAC,IAAI,CAAC;KACnB;IAEM,MAAM,GAAA;;AACV,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE;AAC1B,YAAA,MAAM,IAAI,SAAS,CAChB,oDAAoD,CACtD,CAAC;AACJ,SAAA;AACD,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE;AAC1B,YAAA,MAAM,IAAI,SAAS,CAChB,0DAA0D,CAC5D,CAAC;AACJ,SAAA;AACD,QAAA,CAAA,EAAA,GAAA,IAAI,CAAC,IAAI,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,OAAO,EAAE,CAAC;AACrB,QAAA,CAAA,EAAA,GAAA,IAAI,CAAC,gBAAgB,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,WAAW,EAAE,CAAC;AACrC,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;AACvC,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,yBAAyB,CAClD,IAAI,CAAC,IAAI,EACT,SAAS,EACT,IAAI,CAAC,OAAO,CACd,CAAC;AACF,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,IAAI;AAC7B,aAAA,MAAM,EAAE;AACR,aAAA,IAAI,CACF,MAAM,CACH,CAAC,KAAK,KACH,KAAK,YAAY,YAAY,CAClC,CACH;AACA,aAAA,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC7B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KAClC;IAEO,aAAa,GAAA;;AAClB,QAAA,MAAM,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;QAChC,IAAI,CAAA,MAAA,IAAI,CAAC,OAAO,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,QAAQ,MAAK,IAAI,EAAE;YAClC,OAAO,IAAI,CAAC,IAAI,CAAC;AACnB,SAAA;QACD,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CACnB,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC,YAAY,EACnC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,YAAY,CAC/B,CAAC;KACJ;;qHAhFS,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;yGAAvB,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,YAAA,EAAA,cAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,MAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,MAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAQN,gBAAgB,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EClC9C,qBACA,EAAA,CAAA,CAAA;4FDyBa,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBALnC,SAAS;AACG,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kBAAkB,cAEhB,IAAI,EAAA,QAAA,EAAA,qBAAA,EAAA,CAAA;0EAKP,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBACG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBACG,YAAY,EAAA,CAAA;sBAApB,KAAK;gBACG,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBAEyC,IAAI,EAAA,CAAA;sBAAlD,SAAS;gBAAC,IAAA,EAAA,CAAA,MAAM,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAA;gBAE1B,UAAU,EAAA,CAAA;sBAA5B,MAAM;gBACY,QAAQ,EAAA,CAAA;sBAA1B,MAAM;;;AEjCV;MAOa,sBAAsB,CAAA;;oHAAtB,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;qHAAtB,sBAAsB,EAAA,OAAA,EAAA,CAJtB,uBAAuB,CAAA,EAAA,OAAA,EAAA,CAEvB,uBAAuB,CAAA,EAAA,CAAA,CAAA;AAEvB,sBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,EAHrB,SAAA,EAAA,CAAC,UAAU,CAAC,YADb,uBAAuB,CAAA,EAAA,CAAA,CAAA;4FAIvB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBANlC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,YAAY,EAAE,EAAE;oBAChB,OAAO,EAAE,CAAC,uBAAuB,CAAC;oBAClC,SAAS,EAAE,CAAC,UAAU,CAAC;oBACvB,OAAO,EAAE,CAAC,uBAAuB,CAAC;iBACpC,CAAA;;;MCEY,gBAAgB,CAAA;;8GAAhB,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;+GAAhB,gBAAgB,EAAA,OAAA,EAAA,CAJhB,sBAAsB,EAAE,kBAAkB,EAAE,qBAAqB,CAAA,EAAA,OAAA,EAAA,CAEjE,sBAAsB,EAAE,kBAAkB,EAAE,qBAAqB,CAAA,EAAA,CAAA,CAAA;AAEjE,gBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,EAHf,SAAA,EAAA,CAAC,WAAW,CAAC,YADd,sBAAsB,EAAE,kBAAkB,EAAE,qBAAqB,EAEjE,sBAAsB,EAAE,kBAAkB,EAAE,qBAAqB,CAAA,EAAA,CAAA,CAAA;4FAEjE,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAN5B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,YAAY,EAAE,EAAE;AAChB,oBAAA,OAAO,EAAE,CAAC,sBAAsB,EAAE,kBAAkB,EAAE,qBAAqB,CAAC;oBAC5E,SAAS,EAAE,CAAC,WAAW,CAAC;AACxB,oBAAA,OAAO,EAAE,CAAC,sBAAsB,EAAE,kBAAkB,EAAE,qBAAqB,CAAC;iBAC9E,CAAA;;;ACXD;;AAEG;;ACFH;;AAEG;;;;"}