angular-mixed-cdk-drag-drop
Version:
angular-mixed-cdk-drag-drop is an Angular `Directive` to support mixed orientation drag drop using angular cdk.
1 lines • 19 kB
Source Map (JSON)
{"version":3,"file":"angular-mixed-cdk-drag-drop.mjs","sources":["../../../projects/angular-mixed-cdk-drag-drop/src/lib/mixed-drag-drop.ts","../../../projects/angular-mixed-cdk-drag-drop/src/lib/mixed-cdk-drag-drop.directive.ts","../../../projects/angular-mixed-cdk-drag-drop/src/lib/mixed-cdk-drag-drop.module.ts","../../../projects/angular-mixed-cdk-drag-drop/src/public-api.ts","../../../projects/angular-mixed-cdk-drag-drop/src/angular-mixed-cdk-drag-drop.ts"],"sourcesContent":["export class MixedDragDropConfig {\n autoScrollStep = 6;\n}\n","import {\n AfterViewInit,\n Directive,\n ElementRef,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n Self,\n SimpleChanges,\n SkipSelf,\n} from '@angular/core';\nimport {\n CdkDropList,\n CdkDragEnter,\n moveItemInArray,\n CdkDragSortEvent,\n DropListOrientation,\n CdkDropListGroup,\n CdkDrag,\n} from '@angular/cdk/drag-drop';\n\nimport { MixedDragDropConfig } from './mixed-drag-drop';\n\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nexport interface MixedCdkDragContainerSize { drag: CdkDrag; containerSize: DOMRectReadOnly };\n\n@Directive({\n selector: '[cdkDropListGroup][mixedCdkDragDrop]',\n standalone: true\n})\nexport class MixedCdkDragDropDirective<T = any> implements OnChanges, AfterViewInit, OnDestroy {\n /** @param {EventEmitter} dropped: emit previousIndex and currentIndex when dropList dropped. Valid when itemList is not being provided. **/\n @Output() readonly dropped = new EventEmitter<{ previousIndex: number; currentIndex: number }>();\n\n @Input() itemList: T[] | undefined;\n @Input() orientation: DropListOrientation = 'horizontal';\n @Input() containerSelector = '';\n\n private readonly _resizeDragItem = new Set<MixedCdkDragSizeHelperDirective>();\n\n private targetIndex = -1;\n private sourceIndex = -1;\n private source: CdkDropList | undefined;\n private observer: ResizeObserver | undefined;\n private currentContentRect: DOMRectReadOnly | undefined;\n private animationFrame: number | undefined;\n\n constructor(public element: ElementRef<HTMLElement>, @Self() private cdkDropListGroup: CdkDropListGroup<CdkDropList<T>>) {\n this.observer = new ResizeObserver((entries: Array<ResizeObserverEntry>) => {\n this.animationFrame = window.requestAnimationFrame(() => {\n if (entries.length) {\n const element = this.containerSelector\n ? entries[0]\n : entries.find((e: ResizeObserverEntry) => e.target === this.element.nativeElement);\n if (element) {\n this.currentContentRect = element.contentRect;\n for (let item of this._resizeDragItem) {\n item.onSizeChangeEmit(element.contentRect);\n }\n }\n }\n });\n });\n }\n\n ngAfterViewInit() {\n this.observeAll();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['orientation']) {\n this.cdkDropListGroup._items.forEach((i: CdkDropList<T>) => {\n i.orientation = this.orientation;\n i.element.nativeElement.style.flexDirection = this.orientation === 'horizontal' ? 'row' : 'column';\n });\n }\n if (changes['containerSelector']) {\n this.observer?.disconnect();\n this.observeAll();\n }\n }\n\n addResizeDragItem(item: MixedCdkDragSizeHelperDirective) {\n this._resizeDragItem.add(item);\n if (this.currentContentRect) {\n item.onSizeChangeEmit(this.currentContentRect);\n }\n }\n\n deleteResizeDragItem(item: MixedCdkDragSizeHelperDirective) {\n this._resizeDragItem.delete(item);\n }\n\n onDropListDropped() {\n if (this.sourceIndex < 0 || this.targetIndex < 0) {\n return;\n }\n // if sourceIndex is before targetIndex then the real target should minus one, to remove the source placeholder which being counted.\n const target = this.targetIndex + (this.sourceIndex < this.targetIndex ? -1 : 0);\n if (this.sourceIndex !== this.targetIndex && target >= 0) {\n if (this.itemList) {\n moveItemInArray(this.itemList, this.sourceIndex, target);\n } else {\n this.dropped.emit({\n previousIndex: this.sourceIndex,\n currentIndex: target,\n });\n }\n this.sourceIndex = -1;\n this.targetIndex = -1;\n }\n // reset\n this.source = undefined;\n }\n\n onDropListEntered({ item, container, currentIndex }: CdkDragEnter | CdkDragSortEvent) {\n // dropList which the cdkDrag currently entered.\n const dropElement = container.element.nativeElement;\n // get all the dropList nodes in dropListGroup\n const dropListNodes = Array.from(dropElement.parentElement?.children ?? []);\n // dropList which the cdkDrag originally belonged.\n const sourceElement = item.dropContainer.element.nativeElement;\n\n // might enter multiple dropList after drag start, should only keep the index from the first time\n if (!this.source || this.sourceIndex === -1) {\n this.sourceIndex = dropListNodes.indexOf(sourceElement);\n this.source = item.dropContainer;\n }\n // target index should consider the currentIndex, which indicate drop before/after dropIndex (index of dropList which currently entered).\n this.targetIndex = dropListNodes.indexOf(dropElement) + currentIndex;\n }\n\n private observeAll() {\n if (this.containerSelector) {\n const el = document.querySelector(this.containerSelector);\n if (el) {\n this.observer?.observe(el);\n }\n } else {\n this.observer?.observe(this.element.nativeElement);\n }\n }\n\n ngOnDestroy() {\n this.observer?.disconnect();\n this.observer = undefined;\n this.currentContentRect = undefined;\n this._resizeDragItem.clear();\n if (this.animationFrame) {\n window.cancelAnimationFrame(this.animationFrame);\n }\n }\n}\n\n@Directive({\n selector: '[cdkDropList][mixedCdkDropList]',\n standalone: true\n})\nexport class MixedCdkDropListDirective implements OnInit, OnDestroy {\n private lifecycleEmitter = new Subject<void>();\n\n constructor(\n @Self() private cdkDropList: CdkDropList,\n @SkipSelf() private mixedDragDrop: MixedCdkDragDropDirective,\n private config: MixedDragDropConfig\n ) {\n }\n\n ngOnInit() {\n this.cdkDropList.autoScrollStep = this.config.autoScrollStep;\n this.cdkDropList.orientation = this.mixedDragDrop.orientation;\n this.cdkDropList.element.nativeElement.style.flexDirection =\n this.mixedDragDrop.orientation === 'horizontal' ? 'row' : 'column';\n this.cdkDropList.element.nativeElement.style.display = 'flex';\n this.cdkDropList.element.nativeElement.style.flexWrap = 'nowrap';\n this.cdkDropList.element.nativeElement.style.width = 'fit-content';\n this.cdkDropList.element.nativeElement.style.height = 'fit-content';\n this.cdkDropList.sorted\n .pipe(takeUntil(this.lifecycleEmitter))\n .subscribe(event => this.mixedDragDrop.onDropListEntered(event));\n this.cdkDropList.entered\n .pipe(takeUntil(this.lifecycleEmitter))\n .subscribe(event => this.mixedDragDrop.onDropListEntered(event));\n this.cdkDropList.dropped\n .pipe(takeUntil(this.lifecycleEmitter))\n .subscribe(() => this.mixedDragDrop.onDropListDropped());\n }\n\n ngOnDestroy() {\n this.lifecycleEmitter.next();\n this.lifecycleEmitter.unsubscribe();\n }\n}\n\n@Directive({\n selector: '[cdkDrag][mixedCdkDragSizeHelper]',\n standalone: true\n})\nexport class MixedCdkDragSizeHelperDirective implements AfterViewInit, OnDestroy {\n @Output() contentBoxSize = new EventEmitter<MixedCdkDragContainerSize>();\n\n constructor(@Self() private cdkDrag: CdkDrag, @SkipSelf() private mixedContainer: MixedCdkDragDropDirective) {\n }\n\n ngAfterViewInit() {\n this.mixedContainer.addResizeDragItem(this);\n }\n\n ngOnDestroy() {\n this.mixedContainer.deleteResizeDragItem(this);\n }\n\n onSizeChangeEmit(rect: DOMRectReadOnly) {\n this.contentBoxSize?.emit({ drag: this.cdkDrag, containerSize: rect } as MixedCdkDragContainerSize);\n }\n\n /** @param event :{MixedCdkDragContainerSize} contentSize observer event.\n * @param percentWidth :{number} set width to the percentage based on the dropListGroup Container width, valid from 0 to 100.\n * @param percentHeight :{number} set width to the percentage based on the dropListGroup Container width, valid from 0 to 100. **/\n static defaultEmitter(\n event: MixedCdkDragContainerSize,\n percentWidth: number,\n percentHeight: number\n ) {\n if (percentWidth) {\n event.drag.element.nativeElement.style.width = `${(percentWidth * event.containerSize.width) / 100}px`;\n } else {\n event.drag.element.nativeElement.style.width = '';\n }\n if (percentHeight) {\n event.drag.element.nativeElement.style.height = `${(percentHeight * event.containerSize.height) / 100}px`;\n } else {\n event.drag.element.nativeElement.style.height = '';\n }\n }\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { DragDropModule } from '@angular/cdk/drag-drop';\n\nimport {\n MixedCdkDragSizeHelperDirective,\n MixedCdkDragDropDirective,\n MixedCdkDropListDirective,\n} from './mixed-cdk-drag-drop.directive';\nimport { MixedDragDropConfig } from './mixed-drag-drop';\n\n@NgModule({\n imports: [\n DragDropModule,\n MixedCdkDragDropDirective,\n MixedCdkDropListDirective,\n MixedCdkDragSizeHelperDirective\n ],\n exports: [\n MixedCdkDragDropDirective,\n MixedCdkDropListDirective,\n MixedCdkDragSizeHelperDirective\n ],\n providers: [\n {\n provide: MixedDragDropConfig,\n useValue: MixedDragDropConfig,\n },\n ],\n})\nexport class MixedCdkDragDropModule {\n static forRoot(config: MixedDragDropConfig): ModuleWithProviders<MixedCdkDragDropModule> {\n return {\n ngModule: MixedCdkDragDropModule,\n providers: [\n {\n provide: MixedDragDropConfig,\n useValue: config,\n },\n ],\n };\n }\n}\n","/*\n * Public API Surface of angular-mixed-cdk-drag-drop\n */\n\nexport * from './lib/mixed-cdk-drag-drop.directive';\nexport * from './lib/mixed-cdk-drag-drop.module';\nexport * from './lib/mixed-drag-drop';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2.MixedDragDropConfig"],"mappings":";;;;;;;MAAa,mBAAmB,CAAA;IAC9B,cAAc,GAAG,CAAC;AACnB;;AC2B2F;MAM/E,yBAAyB,CAAA;AAiBjB,IAAA,OAAA;AAAkD,IAAA,gBAAA;;AAflD,IAAA,OAAO,GAAG,IAAI,YAAY,EAAmD;AAEvF,IAAA,QAAQ;IACR,WAAW,GAAwB,YAAY;IAC/C,iBAAiB,GAAG,EAAE;AAEd,IAAA,eAAe,GAAG,IAAI,GAAG,EAAmC;IAErE,WAAW,GAAG,CAAC,CAAC;IAChB,WAAW,GAAG,CAAC,CAAC;AAChB,IAAA,MAAM;AACN,IAAA,QAAQ;AACR,IAAA,kBAAkB;AAClB,IAAA,cAAc;IAEtB,WAAmB,CAAA,OAAgC,EAAkB,gBAAkD,EAAA;QAApG,IAAO,CAAA,OAAA,GAAP,OAAO;QAA2C,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB;QACnF,IAAI,CAAC,QAAQ,GAAG,IAAI,cAAc,CAAC,CAAC,OAAmC,KAAI;YACzE,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,qBAAqB,CAAC,MAAK;AACtD,gBAAA,IAAI,OAAO,CAAC,MAAM,EAAE;AAClB,oBAAA,MAAM,OAAO,GAAG,IAAI,CAAC;AACnB,0BAAE,OAAO,CAAC,CAAC;0BACT,OAAO,CAAC,IAAI,CAAC,CAAC,CAAsB,KAAK,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC;oBACrF,IAAI,OAAO,EAAE;AACX,wBAAA,IAAI,CAAC,kBAAkB,GAAG,OAAO,CAAC,WAAW;AAC7C,wBAAA,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,eAAe,EAAE;AACrC,4BAAA,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,WAAW,CAAC;;;;AAIlD,aAAC,CAAC;AACJ,SAAC,CAAC;;IAGJ,eAAe,GAAA;QACb,IAAI,CAAC,UAAU,EAAE;;AAGnB,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,OAAO,CAAC,aAAa,CAAC,EAAE;YAC1B,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAiB,KAAI;AACzD,gBAAA,CAAC,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW;gBAChC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC,WAAW,KAAK,YAAY,GAAG,KAAK,GAAG,QAAQ;AACpG,aAAC,CAAC;;AAEJ,QAAA,IAAI,OAAO,CAAC,mBAAmB,CAAC,EAAE;AAChC,YAAA,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE;YAC3B,IAAI,CAAC,UAAU,EAAE;;;AAIrB,IAAA,iBAAiB,CAAC,IAAqC,EAAA;AACrD,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC;AAC9B,QAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE;AAC3B,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,kBAAkB,CAAC;;;AAIlD,IAAA,oBAAoB,CAAC,IAAqC,EAAA;AACxD,QAAA,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC;;IAGnC,iBAAiB,GAAA;AACf,QAAA,IAAI,IAAI,CAAC,WAAW,GAAG,CAAC,IAAI,IAAI,CAAC,WAAW,GAAG,CAAC,EAAE;YAChD;;;QAGF,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;AAChF,QAAA,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,CAAC,WAAW,IAAI,MAAM,IAAI,CAAC,EAAE;AACxD,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACjB,eAAe,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC;;iBACnD;AACL,gBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;oBAChB,aAAa,EAAE,IAAI,CAAC,WAAW;AAC/B,oBAAA,YAAY,EAAE,MAAM;AACrB,iBAAA,CAAC;;AAEJ,YAAA,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;AACrB,YAAA,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;;;AAGvB,QAAA,IAAI,CAAC,MAAM,GAAG,SAAS;;AAGzB,IAAA,iBAAiB,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,YAAY,EAAmC,EAAA;;AAElF,QAAA,MAAM,WAAW,GAAG,SAAS,CAAC,OAAO,CAAC,aAAa;;AAEnD,QAAA,MAAM,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,QAAQ,IAAI,EAAE,CAAC;;QAE3E,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,aAAa;;AAG9D,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,WAAW,KAAK,CAAC,CAAC,EAAE;YAC3C,IAAI,CAAC,WAAW,GAAG,aAAa,CAAC,OAAO,CAAC,aAAa,CAAC;AACvD,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa;;;QAGlC,IAAI,CAAC,WAAW,GAAG,aAAa,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,YAAY;;IAG9D,UAAU,GAAA;AAChB,QAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE;YAC1B,MAAM,EAAE,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,iBAAiB,CAAC;YACzD,IAAI,EAAE,EAAE;AACN,gBAAA,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,CAAC;;;aAEvB;YACL,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC;;;IAItD,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE;AAC3B,QAAA,IAAI,CAAC,QAAQ,GAAG,SAAS;AACzB,QAAA,IAAI,CAAC,kBAAkB,GAAG,SAAS;AACnC,QAAA,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE;AAC5B,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;AACvB,YAAA,MAAM,CAAC,oBAAoB,CAAC,IAAI,CAAC,cAAc,CAAC;;;uGAvHzC,yBAAyB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,IAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAzB,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,WAAA,EAAA,aAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAzB,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAJrC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,sCAAsC;AAChD,oBAAA,UAAU,EAAE;AACf,iBAAA;;0BAkBuD;yCAfnC,OAAO,EAAA,CAAA;sBAAzB;gBAEQ,QAAQ,EAAA,CAAA;sBAAhB;gBACQ,WAAW,EAAA,CAAA;sBAAnB;gBACQ,iBAAiB,EAAA,CAAA;sBAAzB;;MA0HU,yBAAyB,CAAA;AAIlB,IAAA,WAAA;AACI,IAAA,aAAA;AACZ,IAAA,MAAA;AALF,IAAA,gBAAgB,GAAG,IAAI,OAAO,EAAQ;AAE9C,IAAA,WAAA,CACkB,WAAwB,EACpB,aAAwC,EACpD,MAA2B,EAAA;QAFnB,IAAW,CAAA,WAAA,GAAX,WAAW;QACP,IAAa,CAAA,aAAA,GAAb,aAAa;QACzB,IAAM,CAAA,MAAA,GAAN,MAAM;;IAIhB,QAAQ,GAAA;QACN,IAAI,CAAC,WAAW,CAAC,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc;QAC5D,IAAI,CAAC,WAAW,CAAC,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW;QAC7D,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,aAAa;AACxD,YAAA,IAAI,CAAC,aAAa,CAAC,WAAW,KAAK,YAAY,GAAG,KAAK,GAAG,QAAQ;AACpE,QAAA,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM;AAC7D,QAAA,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,GAAG,QAAQ;AAChE,QAAA,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,GAAG,aAAa;AAClE,QAAA,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,GAAG,aAAa;QACnE,IAAI,CAAC,WAAW,CAAC;AACd,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,gBAAgB,CAAC;AACrC,aAAA,SAAS,CAAC,KAAK,IAAI,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAClE,IAAI,CAAC,WAAW,CAAC;AACd,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,gBAAgB,CAAC;AACrC,aAAA,SAAS,CAAC,KAAK,IAAI,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAClE,IAAI,CAAC,WAAW,CAAC;AACd,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,gBAAgB,CAAC;aACrC,SAAS,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,iBAAiB,EAAE,CAAC;;IAG5D,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE;AAC5B,QAAA,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE;;uGAhC1B,yBAAyB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,mBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAzB,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iCAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAzB,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAJrC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,iCAAiC;AAC3C,oBAAA,UAAU,EAAE;AACf,iBAAA;;0BAKI;;0BACA;;MAmCQ,+BAA+B,CAAA;AAGd,IAAA,OAAA;AAAsC,IAAA,cAAA;AAFxD,IAAA,cAAc,GAAG,IAAI,YAAY,EAA6B;IAExE,WAA4B,CAAA,OAAgB,EAAsB,cAAyC,EAAA;QAA/E,IAAO,CAAA,OAAA,GAAP,OAAO;QAA+B,IAAc,CAAA,cAAA,GAAd,cAAc;;IAGhF,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,cAAc,CAAC,iBAAiB,CAAC,IAAI,CAAC;;IAG7C,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,cAAc,CAAC,oBAAoB,CAAC,IAAI,CAAC;;AAGhD,IAAA,gBAAgB,CAAC,IAAqB,EAAA;AACpC,QAAA,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,aAAa,EAAE,IAAI,EAA+B,CAAC;;AAGrG;;AAEmI;AACnI,IAAA,OAAO,cAAc,CACnB,KAAgC,EAChC,YAAoB,EACpB,aAAqB,EAAA;QAErB,IAAI,YAAY,EAAE;YAChB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,GAAG,CAAA,EAAG,CAAC,YAAY,GAAG,KAAK,CAAC,aAAa,CAAC,KAAK,IAAI,GAAG,CAAA,EAAA,CAAI;;aACjG;AACL,YAAA,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE;;QAEnD,IAAI,aAAa,EAAE;YACjB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,GAAG,CAAA,EAAG,CAAC,aAAa,GAAG,KAAK,CAAC,aAAa,CAAC,MAAM,IAAI,GAAG,CAAA,EAAA,CAAI;;aACpG;AACL,YAAA,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE;;;uGAlC3C,+BAA+B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,OAAA,EAAA,IAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAA/B,+BAA+B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mCAAA,EAAA,OAAA,EAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAA/B,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAJ3C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,mCAAmC;AAC7C,oBAAA,UAAU,EAAE;AACf,iBAAA;;0BAIc;;0BAAkC;yCAFrC,cAAc,EAAA,CAAA;sBAAvB;;;MC/KU,sBAAsB,CAAA;IACjC,OAAO,OAAO,CAAC,MAA2B,EAAA;QACxC,OAAO;AACL,YAAA,QAAQ,EAAE,sBAAsB;AAChC,YAAA,SAAS,EAAE;AACT,gBAAA;AACE,oBAAA,OAAO,EAAE,mBAAmB;AAC5B,oBAAA,QAAQ,EAAE,MAAM;AACjB,iBAAA;AACF,aAAA;SACF;;uGAVQ,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;AAAtB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,YAjB/B,cAAc;YACd,yBAAyB;YACzB,yBAAyB;AACzB,YAAA,+BAA+B,aAG/B,yBAAyB;YACzB,yBAAyB;YACzB,+BAA+B,CAAA,EAAA,CAAA;AAStB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,EAPtB,SAAA,EAAA;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,mBAAmB;AAC5B,gBAAA,QAAQ,EAAE,mBAAmB;AAC9B,aAAA;AACF,SAAA,EAAA,OAAA,EAAA,CAfC,cAAc,CAAA,EAAA,CAAA;;2FAiBL,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAnBlC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE;wBACP,cAAc;wBACd,yBAAyB;wBACzB,yBAAyB;wBACzB;AACD,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,yBAAyB;wBACzB,yBAAyB;wBACzB;AACD,qBAAA;AACD,oBAAA,SAAS,EAAE;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,mBAAmB;AAC5B,4BAAA,QAAQ,EAAE,mBAAmB;AAC9B,yBAAA;AACF,qBAAA;AACF,iBAAA;;;AC5BD;;AAEG;;ACFH;;AAEG;;;;"}