@tmdjr/ngx-editor-js2 20.2.0 → 20.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -483,21 +483,23 @@ class EditorJsService {
|
|
|
483
483
|
autofocus: true,
|
|
484
484
|
});
|
|
485
485
|
}
|
|
486
|
-
addBlockComponent(ngxEditorJsBlock) {
|
|
486
|
+
addBlockComponent(ngxEditorJsBlock, emitEvent = true) {
|
|
487
487
|
return forkJoin([
|
|
488
|
-
this.createFormGroupControl(ngxEditorJsBlock),
|
|
488
|
+
this.createFormGroupControl(ngxEditorJsBlock, emitEvent),
|
|
489
489
|
this.attachComponent(ngxEditorJsBlock),
|
|
490
490
|
this.blockMovementService.updateComponentIndices(this.ngxEditor),
|
|
491
491
|
]).pipe(map(() => void 0));
|
|
492
492
|
}
|
|
493
|
-
createFormGroupControl({ blockId, dataClean, }) {
|
|
494
|
-
return of(this.formBuilder.control(dataClean, [])).pipe(tap((formControl) => this.formGroup.addControl(blockId, formControl)));
|
|
493
|
+
createFormGroupControl({ blockId, dataClean, }, emitEvent = true) {
|
|
494
|
+
return of(this.formBuilder.control(dataClean, [])).pipe(tap((formControl) => this.formGroup.addControl(blockId, formControl, { emitEvent })));
|
|
495
495
|
}
|
|
496
496
|
attachComponent({ component, blockId, autofocus, savedAction, sortIndex: index, }) {
|
|
497
497
|
return of(blockId).pipe(map((controlName) => {
|
|
498
498
|
const componentRef = this.ngxEditor.createComponent(component, {
|
|
499
499
|
index,
|
|
500
500
|
});
|
|
501
|
+
componentRef.location.nativeElement
|
|
502
|
+
.classList.add('ngx-editor-js2-block');
|
|
501
503
|
componentRef.setInput('sortIndex', index);
|
|
502
504
|
componentRef.setInput('formGroup', this.formGroup);
|
|
503
505
|
componentRef.setInput('formControlName', controlName);
|
|
@@ -892,7 +894,7 @@ class NgxEditorJs2Service {
|
|
|
892
894
|
}));
|
|
893
895
|
}
|
|
894
896
|
addBlocksToEditorJs(blocks) {
|
|
895
|
-
return combineLatest(blocks.map((block) => this.editorJsService.addBlockComponent(block)));
|
|
897
|
+
return combineLatest(blocks.map((block) => this.editorJsService.addBlockComponent(block, false)));
|
|
896
898
|
}
|
|
897
899
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.4", ngImport: i0, type: NgxEditorJs2Service, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
898
900
|
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.4", ngImport: i0, type: NgxEditorJs2Service, providedIn: 'root' });
|
|
@@ -917,32 +919,12 @@ class EditorJsComponent {
|
|
|
917
919
|
this.editorJsService.setNgxEditor(this.ngxEditor());
|
|
918
920
|
});
|
|
919
921
|
}
|
|
920
|
-
// * DEBUGGING
|
|
921
|
-
// ngOnInit() {
|
|
922
|
-
// this.editorJsService.formGroup.valueChanges.subscribe((value) => {
|
|
923
|
-
// console.log('[formGroup.value] : ', value);
|
|
924
|
-
// });
|
|
925
|
-
// this.editorJsService.blockComponents$.subscribe((components) => {
|
|
926
|
-
// console.log('[components] : ', components);
|
|
927
|
-
// });
|
|
928
|
-
// }
|
|
929
922
|
drop(event) {
|
|
930
|
-
lastValueFrom(this.editorJsService.moveBlockComponentPosition(event.previousIndex, event.currentIndex)
|
|
931
|
-
// DRAG ANIMATION HOT FIX
|
|
932
|
-
// Wait for Angular to update the DOM, then remove the animation class
|
|
933
|
-
requestAnimationFrame(() => {
|
|
934
|
-
document.querySelectorAll('.cdk-drag-animating').forEach((el) => {
|
|
935
|
-
const element = el;
|
|
936
|
-
element.classList.remove('cdk-drag-animating'); // Ensure old class is removed
|
|
937
|
-
void element.offsetWidth; // Force reflow
|
|
938
|
-
element.classList.add('cdk-drag-animating'); // Re-add for next drag
|
|
939
|
-
});
|
|
940
|
-
});
|
|
941
|
-
});
|
|
923
|
+
void lastValueFrom(this.editorJsService.moveBlockComponentPosition(event.previousIndex, event.currentIndex).pipe(tap(() => this.editorJsService.formGroup.updateValueAndValidity())));
|
|
942
924
|
}
|
|
943
925
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.4", ngImport: i0, type: EditorJsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
944
926
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "20.0.4", type: EditorJsComponent, isStandalone: true, selector: "editor-js", inputs: { bootstrapEditorJs: { classPropertyName: "bootstrapEditorJs", publicName: "bootstrapEditorJs", isSignal: true, isRequired: false, transformFunction: null }, blocks: { classPropertyName: "blocks", publicName: "blocks", isSignal: true, isRequired: true, transformFunction: null } }, viewQueries: [{ propertyName: "ngxEditor", first: true, predicate: ["ngxEditor"], descendants: true, read: ViewContainerRef, isSignal: true }], ngImport: i0, template: `
|
|
945
|
-
<div cdkDropList class="block-list" (cdkDropListDropped)="drop($event)">
|
|
927
|
+
<div cdkDropList class="block-list" (cdkDropListDropped)="drop($event)" >
|
|
946
928
|
<ng-container #ngxEditor></ng-container>
|
|
947
929
|
</div>
|
|
948
930
|
`, isInline: true, styles: [":host{display:block}:host .block-list{min-height:60px}\n"], dependencies: [{ kind: "directive", type: CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }] });
|
|
@@ -950,7 +932,7 @@ class EditorJsComponent {
|
|
|
950
932
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.4", ngImport: i0, type: EditorJsComponent, decorators: [{
|
|
951
933
|
type: Component,
|
|
952
934
|
args: [{ selector: 'editor-js', imports: [CdkDropList], template: `
|
|
953
|
-
<div cdkDropList class="block-list" (cdkDropListDropped)="drop($event)">
|
|
935
|
+
<div cdkDropList class="block-list" (cdkDropListDropped)="drop($event)" >
|
|
954
936
|
<ng-container #ngxEditor></ng-container>
|
|
955
937
|
</div>
|
|
956
938
|
`, styles: [":host{display:block}:host .block-list{min-height:60px}\n"] }]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tmdjr-ngx-editor-js2.mjs","sources":["../../../projects/ngx-editor-js2/src/lib/directives/control-accessor.directive.ts","../../../projects/ngx-editor-js2/src/lib/directives/autofocus.directive.ts","../../../projects/ngx-editor-js2/src/lib/ngx-editor-js2.interface.ts","../../../projects/ngx-editor-js2/src/lib/components/toolbar/toolbar-block-options.component.ts","../../../projects/ngx-editor-js2/src/lib/components/toolbar/toolbar-blocks.component.ts","../../../projects/ngx-editor-js2/src/lib/components/toolbar/toolbar.component.ts","../../../projects/ngx-editor-js2/src/lib/services/block-movement.service.ts","../../../projects/ngx-editor-js2/src/lib/services/editor-js.service.ts","../../../projects/ngx-editor-js2/src/lib/services/tool-fab.service.ts","../../../projects/ngx-editor-js2/src/lib/directives/toolbar-fab.directive.ts","../../../projects/ngx-editor-js2/src/lib/directives/clean-paste-data.directive.ts","../../../projects/ngx-editor-js2/src/lib/components/blocks/header-block.component.ts","../../../projects/ngx-editor-js2/src/lib/components/blocks/paragraph-block.component.ts","../../../projects/ngx-editor-js2/src/lib/services/ngx-editor-js2.service.ts","../../../projects/ngx-editor-js2/src/lib/components/editor-js.component.ts","../../../projects/ngx-editor-js2/src/lib/components/toolbar-inline/toolbar-inline.component.ts","../../../projects/ngx-editor-js2/src/lib/services/toolbar-inline.service.ts","../../../projects/ngx-editor-js2/src/lib/ngx-editor-js2.component.ts","../../../projects/ngx-editor-js2/src/public-api.ts","../../../projects/ngx-editor-js2/src/tmdjr-ngx-editor-js2.ts"],"sourcesContent":["import {\n Directive,\n ElementRef,\n forwardRef,\n HostListener,\n inject,\n input,\n} from '@angular/core';\nimport { NG_VALUE_ACCESSOR, ControlValueAccessor } from '@angular/forms';\n\n@Directive({\n selector: '[controlAccessor]',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ControlAccessorDirective),\n multi: true,\n },\n ],\n})\nexport class ControlAccessorDirective implements ControlValueAccessor {\n elementRef = inject(ElementRef);\n\n defaultValue = input<string>();\n\n onChange: (value: any) => void = () => {};\n onTouched: () => void = () => {};\n\n writeValue(): void {\n this.elementRef.nativeElement.innerHTML = this.defaultValue() || '';\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n @HostListener('blur')\n onBlur(): void {\n this.onTouched();\n }\n\n @HostListener('input')\n onInput(): void {\n this.onChange(this.elementRef.nativeElement.innerHTML);\n }\n}\n","import {\n AfterContentInit,\n Directive,\n ElementRef,\n inject,\n input,\n} from '@angular/core';\n\n@Directive({\n selector: '[autofocus]',\n})\nexport class AutofocusDirective implements AfterContentInit {\n elementRef = inject(ElementRef);\n\n autofocus = input<boolean>(false);\n\n ngAfterContentInit() {\n this.autofocus() && this.elementRef.nativeElement.focus?.();\n }\n}\n","import { InjectionToken, InputSignal, Signal, Type } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { Observable } from 'rxjs';\n\nexport interface NgxEditorjsOptions {\n consumerSupportedBlocks?: SupportedBlock[];\n}\nexport interface SupportedBlock {\n name: string;\n componentInstanceName: string;\n component: Type<BlockComponent>;\n}\n\nexport interface NgxEditorJsBlock {\n blockId: string;\n sortIndex: number;\n componentInstanceName: string;\n dataClean: string;\n savedAction?: string;\n}\nexport interface NgxEditorJsBlockWithComponent extends NgxEditorJsBlock {\n component: Type<BlockComponent>;\n autofocus?: boolean;\n}\n\nexport interface BlockComponent {\n sortIndex: InputSignal<number>;\n componentInstanceName: string;\n formControlName: InputSignal<string>;\n formGroup: InputSignal<FormGroup>;\n blockOptionActions: InputSignal<BlockOptionAction[]>;\n savedAction: Signal<string>;\n actionCallback?: (string: string) => void;\n}\n\nexport interface BlockOptionAction {\n action: string;\n icon?: string;\n text?: string;\n}\n\nexport enum MovePositionActions {\n UP = 'UP',\n DOWN = 'DOWN',\n DELETE = 'DELETE',\n}\n\nexport type TAddBlockCallback = (\n block: Type<BlockComponent>,\n index: number\n) => Observable<unknown>;\n\nexport type TMoveBlockPositionCallback = (\n action: MovePositionActions,\n index: number\n) => Observable<unknown>;\n","import { Component, input, output } from '@angular/core';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatRipple } from '@angular/material/core';\nimport {\n BlockOptionAction,\n MovePositionActions,\n} from '../../ngx-editor-js2.interface';\n\n@Component({\n selector: 'toolbar-block-options',\n imports: [MatIcon, MatRipple],\n template: `\n <div class=\"actions-panel\">\n <div class=\"action-btn\" matRipple (click)=\"movePosition(Position.UP)\">\n <mat-icon>arrow_upward</mat-icon>\n </div>\n <div class=\"action-btn\" matRipple (click)=\"movePosition(Position.DELETE)\">\n <mat-icon>delete</mat-icon>\n </div>\n <div class=\"action-btn\" matRipple (click)=\"movePosition(Position.DOWN)\">\n <mat-icon>arrow_downward</mat-icon>\n </div>\n @for(blockOptionAction of blockOptionActions(); track $index) {\n <div\n class=\"action-btn\"\n (click)=\"handleAction(blockOptionAction.action)\"\n matRipple\n >\n @if (blockOptionAction.text) {\n {{ blockOptionAction.text }}\n } @else {\n <mat-icon>{{ blockOptionAction.icon }}</mat-icon>\n }\n </div>\n }\n </div>\n `,\n styles: [\n `\n :host {\n .actions-panel {\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n gap: 1px;\n width: 128px;\n max-height: 128px;\n border-radius: 4px;\n overflow: auto;\n background: var(--mat-sys-secondary);\n box-shadow: var(--mat-sys-level5);\n .action-btn {\n cursor: pointer;\n width: 42px;\n height: 42px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 4px;\n\n color: var(--mat-sys-on-secondary);\n background: var(--mat-sys-secondary);\n &:hover,\n &:focus {\n color: var(--mat-sys-secondary);\n background: var(--mat-sys-on-secondary);\n }\n }\n }\n }\n `,\n ],\n})\nexport class ToolbarBlockOptionsComponent {\n readonly Position = MovePositionActions;\n\n blockOptionActions = input<BlockOptionAction[]>();\n\n handleActionEmitter = output<string>({ alias: 'handleAction' });\n moveBlockPositionEmitter = output<MovePositionActions>({\n alias: 'moveBlockPosition',\n });\n\n movePosition(action: MovePositionActions) {\n this.moveBlockPositionEmitter.emit(action);\n }\n\n handleAction(action: string) {\n this.handleActionEmitter.emit(action);\n }\n}\n","import { AsyncPipe } from '@angular/common';\nimport { Component, input, output, Type } from '@angular/core';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { MatRipple } from '@angular/material/core';\nimport { MatFormField, MatLabel } from '@angular/material/form-field';\nimport { MatInput } from '@angular/material/input';\nimport { MatList, MatListItem } from '@angular/material/list';\nimport { combineLatest, map, startWith } from 'rxjs';\nimport { BlockComponent, SupportedBlock } from '../../ngx-editor-js2.interface';\n\n@Component({\n selector: 'toolbar-blocks',\n imports: [\n MatFormField,\n MatInput,\n MatList,\n MatListItem,\n MatRipple,\n MatLabel,\n ReactiveFormsModule,\n AsyncPipe,\n ],\n template: `\n <div class=\"block-list-container\">\n <mat-form-field appearance=\"fill\" color=\"accent\">\n <mat-label>Filter</mat-label>\n <input\n class=\"filter-text\"\n matInput\n [formControl]=\"blockCtrl\"\n [autofocus]=\"true\"\n />\n </mat-form-field>\n @if(filteredBlocks$ | async; as filteredBlocks) {\n <mat-list class=\"block-list-panel\">\n @if (filteredBlocks.length <= 0) {\n <mat-list-item matRipple mat-list-item> No Results </mat-list-item>\n } @else { @for(block of filteredBlocks; track $index) {\n <mat-list-item matRipple mat-list-item (click)=\"addBlock(block)\">\n {{ block.name }}\n </mat-list-item>\n } }\n </mat-list>\n }\n </div>\n `,\n styles: [\n `\n :host {\n .mat-mdc-list-base {\n padding-top: 0px;\n margin-top: -14px;\n }\n\n .block-list-container {\n border-radius: 4px;\n background: var(--mat-sys-secondary-container);\n box-shadow: var(--mat-sys-level5);\n }\n\n .block-list-panel {\n max-width: 280px;\n max-height: 240px;\n border-bottom-left-radius: 4px;\n border-bottom-right-radius: 4px;\n overflow: auto;\n color: var(--mat-sys-on-secondary-container);\n }\n\n mat-list-item {\n cursor: pointer;\n user-select: none;\n &:hover,\n &:focus {\n background: var(--mat-sys-surface-bright);\n }\n }\n }\n `,\n ],\n})\nexport class ToolbarBlocksComponent {\n addBlockEmitter = output<Type<BlockComponent>>({ alias: 'addBlock' });\n supportedBlocks = input<SupportedBlock[]>([]);\n supportedBlocks$ = toObservable(this.supportedBlocks);\n\n blockCtrl = new FormControl([]);\n filter$ = this.blockCtrl.valueChanges.pipe(startWith(''));\n\n filteredBlocks$ = combineLatest([this.supportedBlocks$, this.filter$]).pipe(\n map(([blocks, filterString]) => {\n if (typeof filterString !== 'string') filterString = '';\n filterString = filterString.replace(/\\\\/g, '');\n const pattern = filterString\n ?.split('')\n .map((v: string) => `(?=.*${v})`)\n .join('');\n const regex = new RegExp(`${pattern}`, 'gi');\n\n // return blocks.filter(block => regex.exec(block));\n return blocks.filter((block) => block.name.match(regex));\n })\n );\n\n addBlock(block: SupportedBlock) {\n this.addBlockEmitter.emit(block?.component);\n }\n}\n","import { Component, input, signal, Type } from '@angular/core';\nimport { MatRipple } from '@angular/material/core';\nimport { CdkDragHandle } from '@angular/cdk/drag-drop';\nimport { OverlayModule } from '@angular/cdk/overlay';\nimport { ToolbarBlockOptionsComponent } from './toolbar-block-options.component';\nimport { ToolbarBlocksComponent } from './toolbar-blocks.component';\nimport { firstValueFrom } from 'rxjs';\nimport {\n BlockComponent,\n BlockOptionAction,\n MovePositionActions,\n SupportedBlock,\n TAddBlockCallback,\n TMoveBlockPositionCallback,\n} from '../../ngx-editor-js2.interface';\n\n@Component({\n selector: 'toolbar',\n imports: [\n CdkDragHandle,\n MatRipple,\n OverlayModule,\n ToolbarBlockOptionsComponent,\n ToolbarBlocksComponent,\n ],\n template: `\n <div class=\"toolbar-buttons-container\">\n <div\n class=\"toolbar-buttons\"\n #blockListTigger=\"cdkOverlayOrigin\"\n cdkOverlayOrigin\n matRipple\n (click)=\"openBlocksList()\"\n >\n <span class=\"material-icons\">add</span>\n </div>\n <div\n class=\"toolbar-buttons\"\n #blockOptionListTigger=\"cdkOverlayOrigin\"\n cdkDragHandle\n cdkOverlayOrigin\n matRipple\n (click)=\"openBlockOptionList()\"\n >\n <span class=\"material-icons\">drag_indicator</span>\n </div>\n </div>\n\n <!-- Block type search list -->\n <ng-template\n cdkConnectedOverlay\n (overlayOutsideClick)=\"openBlocks.set(false)\"\n [cdkConnectedOverlayOrigin]=\"blockListTigger\"\n [cdkConnectedOverlayOpen]=\"openBlocks()\"\n [cdkConnectedOverlayHasBackdrop]=\"true\"\n [cdkConnectedOverlayOffsetY]=\"15\"\n [cdkConnectedOverlayBackdropClass]=\"'cdk-overlay-transparent-backdrop'\"\n >\n <toolbar-blocks\n [supportedBlocks]=\"supportedBlocks()\"\n (addBlock)=\"addBlock($event)\"\n ></toolbar-blocks>\n </ng-template>\n\n <!-- Options List-->\n <ng-template\n cdkConnectedOverlay\n (overlayOutsideClick)=\"openBlocksOption.set(false)\"\n [cdkConnectedOverlayOrigin]=\"blockOptionListTigger\"\n [cdkConnectedOverlayOpen]=\"openBlocksOption()\"\n [cdkConnectedOverlayHasBackdrop]=\"true\"\n [cdkConnectedOverlayOffsetX]=\"-49\"\n [cdkConnectedOverlayOffsetY]=\"15\"\n [cdkConnectedOverlayBackdropClass]=\"'cdk-overlay-transparent-backdrop'\"\n >\n <toolbar-block-options\n [blockOptionActions]=\"blockOptionActions()\"\n (handleAction)=\"handleAction($event)\"\n (moveBlockPosition)=\"moveBlockPosition($event)\"\n ></toolbar-block-options>\n </ng-template>\n `,\n styles: [\n `\n :host {\n .toolbar-buttons-container {\n position: relative;\n display: flex;\n gap: 10px;\n }\n .toolbar-buttons {\n cursor: pointer;\n width: 30px;\n height: 30px;\n display: flex;\n justify-content: center;\n align-items: center;\n border-radius: 4px;\n margin-bottom: 14px;\n user-select: none;\n color: var(--mat-sys-on-tertiary-container);\n background: var(--mat-sys-tertiary-container);\n box-shadow: var(--mat-sys-level2);\n }\n .toolbar-buttons {\n &:hover,\n &:focus {\n background: var(--mat-sys-surface-bright);\n }\n }\n }\n @media (min-width: 768px) {\n :host {\n position: absolute;\n margin-left: -80px;\n top: 0;\n }\n }\n `,\n ],\n})\nexport class ToolbarComponent {\n componentContextPositionIndex = input.required<number>();\n supportedBlocks = input.required<SupportedBlock[]>();\n blockOptionActions = input<BlockOptionAction[]>();\n actionCallback = input<(action: string) => void>(() => () => {});\n formControlName = input<string>();\n addBlockCallback = input.required<TAddBlockCallback>();\n moveBlockPositionCallback = input.required<TMoveBlockPositionCallback>();\n\n openBlocks = signal<boolean>(false);\n openBlocksOption = signal<boolean>(false);\n\n openBlocksList() {\n this.openBlocks.update((prev) => !prev);\n }\n\n openBlockOptionList() {\n this.openBlocksOption.update((prev) => !prev);\n }\n\n moveBlockPosition(action: MovePositionActions) {\n this.closeLists();\n this.moveBlockPositionCallback()(\n action,\n this.componentContextPositionIndex()\n );\n }\n\n handleAction(action: string) {\n this.closeLists();\n this.actionCallback()(action);\n }\n\n addBlock(block: Type<BlockComponent>) {\n this.closeLists();\n firstValueFrom(\n this.addBlockCallback()(block, this.componentContextPositionIndex())\n );\n }\n\n closeLists() {\n this.openBlocks.set(false);\n this.openBlocksOption.set(false);\n }\n}\n","import { ComponentRef, Injectable, ViewContainerRef } from '@angular/core';\nimport { defaultIfEmpty, filter, from, map, of, tap } from 'rxjs';\nimport {\n BlockComponent,\n MovePositionActions,\n} from '../ngx-editor-js2.interface';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class BlockMovementService {\n componentRefMap = new Map<object, ComponentRef<BlockComponent>>();\n\n clearComponentRefs() {\n this.componentRefMap.clear();\n }\n\n getNgxEditorJsBlocks() {\n return of(Array.from(this.componentRefMap.values()));\n }\n\n newComponentAttached(componentRef: ComponentRef<BlockComponent>) {\n this.componentRefMap.set(componentRef.instance, componentRef);\n }\n\n updateComponentIndices(ngxEditor: ViewContainerRef) {\n return from(this.componentRefMap.values()).pipe(\n tap((componentRef: any) =>\n componentRef.setInput(\n 'sortIndex',\n ngxEditor.indexOf(componentRef.hostView)\n )\n )\n );\n }\n\n moveBlockComponentPosition(\n ngxEditor: ViewContainerRef,\n action: MovePositionActions,\n index: number\n ) {\n return of(Array.from(this.componentRefMap.values())).pipe(\n map((componentRefs) =>\n componentRefs.find(\n (componentRef) =>\n ngxEditor.indexOf(componentRef.hostView) === index - 1\n )\n ),\n filter((componentRef) => !!componentRef),\n map((componentRef) => ({\n componentRef,\n totalComponents: ngxEditor.length - 1,\n currentIndex: ngxEditor.indexOf(componentRef.hostView),\n newIndex: (index: number) =>\n action === MovePositionActions.UP ? index - 1 : index + 1,\n })),\n map(({ componentRef, totalComponents, currentIndex, newIndex }) => ({\n componentRef,\n currentIndex,\n newIndex: Math.max(\n 0,\n Math.min(newIndex(currentIndex), totalComponents)\n ),\n })),\n filter(({ currentIndex, newIndex }) => currentIndex !== newIndex),\n tap(({ componentRef, newIndex }) => {\n ngxEditor.move(componentRef.hostView, newIndex);\n componentRef.setInput('sortIndex', newIndex);\n componentRef.setInput('autofocus', true);\n }),\n defaultIfEmpty(false)\n );\n }\n\n removeBlockComponent(\n ngxEditor: ViewContainerRef,\n index: number,\n clear = false\n ) {\n return of(Array.from(this.componentRefMap.values())).pipe(\n filter((componentRefs) => clear || componentRefs.length !== 1),\n map((componentRefs) =>\n componentRefs.find(\n (componentRef) =>\n ngxEditor.indexOf(componentRef.hostView) === index - 1\n )\n ),\n map((componentRef) =>\n this.componentRefMap.delete(componentRef?.instance ?? {})\n ),\n tap((successful) => successful && ngxEditor.remove(index - 1)),\n defaultIfEmpty(false)\n );\n }\n}\n","import { inject, Injectable, Type, ViewContainerRef } from '@angular/core';\nimport { FormBuilder } from '@angular/forms';\nimport {\n combineLatest,\n defaultIfEmpty,\n filter,\n forkJoin,\n iif,\n lastValueFrom,\n map,\n mergeMap,\n Observable,\n of,\n switchMap,\n tap,\n} from 'rxjs';\nimport {\n BlockComponent,\n MovePositionActions,\n NgxEditorJsBlock,\n NgxEditorJsBlockWithComponent,\n} from '../ngx-editor-js2.interface';\nimport { BlockMovementService } from './block-movement.service';\n\nconst createUID = () => Math.random().toString(36).substring(7);\n@Injectable({\n providedIn: 'root',\n})\nexport class EditorJsService {\n formBuilder = inject(FormBuilder);\n blockMovementService = inject(BlockMovementService);\n\n componentRefMap = new Map<object, unknown>();\n\n ngxEditor!: ViewContainerRef;\n formGroup = this.formBuilder.group({});\n\n // TODO - Handle this idiomatically\n setNgxEditor(ngxEditor: ViewContainerRef) {\n this.ngxEditor = ngxEditor;\n }\n\n getBlocks$(): Observable<NgxEditorJsBlock[]> {\n return new Observable<NgxEditorJsBlock[]>((observer) => {\n lastValueFrom(\n this.blockMovementService.getNgxEditorJsBlocks().pipe(\n map((componentRefs) =>\n componentRefs.map<NgxEditorJsBlock>(({ instance }) => ({\n blockId: instance.formControlName(),\n sortIndex: instance.sortIndex(),\n componentInstanceName: instance.componentInstanceName,\n savedAction: instance.savedAction(),\n dataClean: instance.formGroup().get(instance.formControlName())\n ?.value,\n }))\n ),\n map((blocks) => blocks.sort((a, b) => a.sortIndex - b.sortIndex))\n )\n ).then((blocks) => {\n observer.next(blocks);\n observer.complete();\n });\n });\n }\n\n createNgxEditorJsBlockWithComponent(\n blockComponent: Type<BlockComponent>,\n componentContextPositionIndex: number\n ) {\n return of<NgxEditorJsBlockWithComponent>({\n blockId: createUID(),\n sortIndex: componentContextPositionIndex,\n componentInstanceName: blockComponent.name,\n component: blockComponent,\n // TODO - Force content-type for dataClean? JSON, HTML, etc.\n // TODO - And maybe rename dataClean to just data?\n dataClean: '',\n autofocus: true,\n });\n }\n\n addBlockComponent(\n ngxEditorJsBlock: NgxEditorJsBlockWithComponent\n ): Observable<void> {\n return forkJoin([\n this.createFormGroupControl(ngxEditorJsBlock),\n this.attachComponent(ngxEditorJsBlock),\n this.blockMovementService.updateComponentIndices(this.ngxEditor),\n ]).pipe(map(() => void 0));\n }\n\n createFormGroupControl({\n blockId,\n dataClean,\n }: NgxEditorJsBlockWithComponent) {\n return of(this.formBuilder.control(dataClean, [])).pipe(\n tap((formControl) => this.formGroup.addControl(blockId, formControl))\n );\n }\n\n attachComponent({\n component,\n blockId,\n autofocus,\n savedAction,\n sortIndex: index,\n }: NgxEditorJsBlockWithComponent) {\n return of(blockId).pipe(\n map((controlName) => {\n const componentRef = this.ngxEditor.createComponent(component, {\n index,\n });\n componentRef.setInput('sortIndex', index);\n componentRef.setInput('formGroup', this.formGroup);\n componentRef.setInput('formControlName', controlName);\n componentRef.setInput('autofocus', autofocus);\n\n savedAction && componentRef.instance.actionCallback?.(savedAction);\n\n this.blockMovementService.newComponentAttached(componentRef);\n return componentRef;\n })\n );\n }\n\n determineMovePositionAction(\n action: MovePositionActions,\n index: number,\n formControlName: string\n ) {\n return iif(\n () => action === MovePositionActions.DELETE,\n this.removeBlockComponent(index, formControlName),\n this.blockMovementService.moveBlockComponentPosition(\n this.ngxEditor,\n action,\n index\n )\n ).pipe(\n switchMap(() =>\n this.blockMovementService.updateComponentIndices(this.ngxEditor)\n )\n );\n }\n\n moveBlockComponentPosition(previousIndex: number, currentIndex: number) {\n return of(this.ngxEditor.get(previousIndex)).pipe(\n filter((viewRef) => !!viewRef),\n tap((viewRef) => {\n this.ngxEditor.move(viewRef, currentIndex);\n }),\n switchMap(() =>\n this.blockMovementService.updateComponentIndices(this.ngxEditor)\n ),\n defaultIfEmpty(false)\n );\n }\n\n removeBlockComponent(index: number, formControlName: string, clear = false) {\n return combineLatest([\n this.blockMovementService.removeBlockComponent(\n this.ngxEditor,\n index,\n clear\n ),\n of(this.formGroup.removeControl(formControlName)),\n ]);\n }\n\n clearBlocks() {\n return this.blockMovementService.getNgxEditorJsBlocks().pipe(\n filter((componentRefs) => componentRefs.length > 0),\n map((componentRefs) =>\n componentRefs.sort(\n (a, b) => a.instance.sortIndex() - b.instance.sortIndex()\n )\n ),\n mergeMap((componentRefs) =>\n forkJoin(\n Array.from(componentRefs.values()).map((componentRef) =>\n this.removeBlockComponent(\n componentRef.instance.sortIndex() + 1,\n componentRef.instance.formControlName(),\n true\n )\n )\n )\n ),\n switchMap(() =>\n this.blockMovementService.updateComponentIndices(this.ngxEditor)\n ),\n tap(() => {\n this.blockMovementService.clearComponentRefs();\n this.ngxEditor.clear();\n }),\n defaultIfEmpty(false)\n );\n }\n}\n","import { inject, Injectable, Type, ViewContainerRef } from '@angular/core';\nimport {\n BehaviorSubject,\n combineLatest,\n distinctUntilChanged,\n filter,\n lastValueFrom,\n map,\n switchMap,\n tap,\n} from 'rxjs';\nimport { ToolbarComponent } from '../components/toolbar/toolbar.component';\nimport { EditorJsService } from './editor-js.service';\nimport { NgxEditorJs2Service } from './ngx-editor-js2.service';\nimport {\n BlockOptionAction,\n BlockComponent,\n MovePositionActions,\n} from '../ngx-editor-js2.interface';\n\ntype ComponentContext = {\n index: number;\n viewContainerRef: ViewContainerRef;\n blockOptionActions: BlockOptionAction[];\n actionCallback: (v: string) => void;\n formControlName: string;\n} | null;\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ToolFabService {\n ngxEditorJs2Service = inject(NgxEditorJs2Service);\n editorJsService = inject(EditorJsService);\n // I need to explain this in detail so the future me can understand this.\n componentContext = new BehaviorSubject<ComponentContext>(null);\n toolbarComponentRef$ = combineLatest({\n componentContext: this.componentContext.asObservable(),\n supportedBlocks: this.ngxEditorJs2Service.supportedBlocks$,\n }).pipe(\n filter(({ componentContext }) => componentContext !== null),\n distinctUntilChanged(\n ({ componentContext: previous }, { componentContext: current }) =>\n previous!.index !== current!.index ||\n previous!.viewContainerRef !== current!.viewContainerRef\n ? (previous!.viewContainerRef.clear(), false)\n : true\n ),\n map(({ componentContext, supportedBlocks }) => {\n const {\n index,\n viewContainerRef,\n blockOptionActions,\n actionCallback,\n formControlName,\n } = componentContext!;\n // TODO We will need to create a ToolbarBottomRailComponent to handle the mobile view\n const componentRef = viewContainerRef.createComponent(ToolbarComponent);\n componentRef.setInput('componentContextPositionIndex', index + 1);\n componentRef.setInput('supportedBlocks', supportedBlocks);\n componentRef.setInput('blockOptionActions', blockOptionActions);\n componentRef.setInput('actionCallback', actionCallback);\n componentRef.setInput('formControlName', formControlName);\n componentRef.setInput('addBlockCallback', this.addBlock.bind(this));\n componentRef.setInput(\n 'moveBlockPositionCallback',\n this.movePositionAction.bind(this)\n );\n return componentRef;\n }),\n );\n\n addBlock(block: Type<BlockComponent>, index: number) {\n return this.editorJsService\n .createNgxEditorJsBlockWithComponent(block, index)\n .pipe(\n switchMap((block) => this.editorJsService.addBlockComponent(block))\n );\n }\n\n movePositionAction(\n action: MovePositionActions,\n index: number,\n formControlName: string\n ) {\n return lastValueFrom(\n this.editorJsService.determineMovePositionAction(\n action,\n index,\n formControlName\n )\n );\n }\n}\n","import {\n ComponentRef,\n Directive,\n effect,\n HostListener,\n inject,\n input,\n ViewContainerRef,\n} from '@angular/core';\nimport { ToolFabService } from '../services/tool-fab.service';\nimport { Observable } from 'rxjs';\nimport { ToolbarComponent } from '../components/toolbar/toolbar.component';\nimport { BlockOptionAction } from '../ngx-editor-js2.interface';\n\nexport type ToolbarComponentRef = Observable<ComponentRef<ToolbarComponent>>;\n\n@Directive({\n selector: '[toolbarFab]',\n})\nexport class ToolbarFabDirective {\n toolFabService = inject(ToolFabService);\n viewContainerRef = inject(ViewContainerRef);\n\n autofocus = input<boolean>();\n blockOptionActions = input<BlockOptionAction[]>();\n actionCallback = input.required<(action: string) => void>();\n componentContextPositionIndex = input.required<number>();\n formControlName = input.required<string>();\n\n @HostListener('mouseenter') onMouseEnter() {\n this.toolFabService.componentContext.next({\n viewContainerRef: this.viewContainerRef,\n blockOptionActions: this.blockOptionActions() ?? [],\n actionCallback: this.actionCallback(),\n index: this.componentContextPositionIndex(),\n formControlName: this.formControlName(),\n });\n }\n\n constructor() {\n effect(() => {\n this.autofocus() && this.onMouseEnter();\n });\n }\n}\n","import {\n Directive,\n HostListener,\n} from '@angular/core';\n\n@Directive({\n selector: '[cleanPasteData]',\n})\nexport class CleanPasteDataDirective {\n @HostListener('paste', ['$event'])\n onPaste(event: Event) {\n event.preventDefault();\n const text = (event as ClipboardEvent).clipboardData?.getData('text/plain');\n document.execCommand('insertText', false, text);\n }\n}\n","import { Component, input, signal } from '@angular/core';\nimport { ControlAccessorDirective } from '../../directives/control-accessor.directive';\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { AutofocusDirective } from '../../directives/autofocus.directive';\nimport { ToolbarFabDirective } from '../../directives/toolbar-fab.directive';\nimport { CleanPasteDataDirective } from '../../directives/clean-paste-data.directive';\nimport {\n BlockComponent,\n BlockOptionAction,\n} from '../../ngx-editor-js2.interface';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { CdkDrag } from '@angular/cdk/drag-drop';\n\n@Component({\n selector: 'header-block',\n host: { class: 'cdk-drag-animating' },\n hostDirectives: [CdkDrag],\n imports: [\n ReactiveFormsModule,\n ControlAccessorDirective,\n AutofocusDirective,\n ToolbarFabDirective,\n CleanPasteDataDirective,\n NgTemplateOutlet\n],\n template: `\n@switch (savedAction()) {\n @case ('h1') {\n <h1>\n <ng-container *ngTemplateOutlet=\"sharedHeaderTemplate\"></ng-container>\n </h1>\n }\n @case ('h2') {\n <h2>\n <ng-container *ngTemplateOutlet=\"sharedHeaderTemplate\"></ng-container>\n </h2>\n }\n @case ('h3') {\n <h3>\n <ng-container *ngTemplateOutlet=\"sharedHeaderTemplate\"></ng-container>\n </h3>\n }\n @case ('h4') {\n <h4>\n <ng-container *ngTemplateOutlet=\"sharedHeaderTemplate\"></ng-container>\n </h4>\n }\n @case ('h5') {\n <h5>\n <ng-container *ngTemplateOutlet=\"sharedHeaderTemplate\"></ng-container>\n </h5>\n }\n @case ('h6') {\n <h6>\n <ng-container *ngTemplateOutlet=\"sharedHeaderTemplate\"></ng-container>\n </h6>\n }\n}\n\n<ng-template [formGroup]=\"formGroup()\" #sharedHeaderTemplate>\n <span\n controlAccessor\n cleanPasteData\n contentEditable\n toolbarFab\n [defaultValue]=\"formGroup().get(formControlName())?.value\"\n [actionCallback]=\"actionCallbackBind\"\n [blockOptionActions]=\"blockOptionActions()\"\n [autofocus]=\"autofocus()\"\n [formControlName]=\"formControlName()\"\n [componentContextPositionIndex]=\"sortIndex()\"\n ></span>\n</ng-template>\n`,\n styles: [\n `\n :host {\n display: block;\n position: relative;\n :is(h1, h2, h3, h4, h5, h6) {\n margin: 0;\n span {\n display: block;\n line-height: inherit;\n }\n }\n\n h1 > * {\n font: var(--mat-sys-display-large);\n }\n h2 > * {\n font: var(--mat-sys-display-medium);\n }\n h3 > * {\n font: var(--mat-sys-display-small);\n }\n h4 > * {\n font: var(--mat-sys-headline-large);\n }\n h5 > * {\n font: var(--mat-sys-headline-medium);\n }\n h6 > * {\n font: var(--mat-sys-headline-small);\n }\n }\n `,\n ],\n})\nexport class HeaderBlockComponent implements BlockComponent {\n sortIndex = input<number>(0);\n componentInstanceName = 'HeaderBlockComponent';\n autofocus = input<boolean>(true);\n formGroup = input.required<FormGroup>();\n formControlName = input.required<string>();\n blockOptionActions = input<BlockOptionAction[]>([\n { action: 'h1', text: 'H1' },\n { action: 'h2', text: 'H2' },\n { action: 'h3', text: 'H3' },\n { action: 'h4', text: 'H4' },\n { action: 'h5', text: 'H5' },\n { action: 'h6', text: 'H6' },\n ]);\n\n savedAction = signal<string>('h1');\n actionCallbackBind = this.actionCallback.bind(this);\n\n actionCallback(selectedAction: string) {\n this.savedAction.set(selectedAction);\n }\n}\n","import { Component, input, signal } from '@angular/core';\nimport { ControlAccessorDirective } from '../../directives/control-accessor.directive';\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { AutofocusDirective } from '../../directives/autofocus.directive';\nimport { ToolbarFabDirective } from '../../directives/toolbar-fab.directive';\nimport { CleanPasteDataDirective } from '../../directives/clean-paste-data.directive';\nimport {\n BlockComponent,\n BlockOptionAction,\n} from '../../ngx-editor-js2.interface';\nimport { NgClass } from '@angular/common';\nimport { CdkDrag } from '@angular/cdk/drag-drop';\n\n\n@Component({\n selector: 'paragraph-block',\n host: { class: 'cdk-drag-animating' },\n hostDirectives: [CdkDrag],\n imports: [\n ReactiveFormsModule,\n ControlAccessorDirective,\n AutofocusDirective,\n ToolbarFabDirective,\n CleanPasteDataDirective,\n NgClass,\n ],\n template: `\n <ng-container [formGroup]=\"formGroup()\">\n <p\n controlAccessor\n contentEditable\n toolbarFab\n cleanPasteData\n [ngClass]=\"savedAction()\"\n [defaultValue]=\"formGroup().get(formControlName())?.value\"\n [actionCallback]=\"actionCallbackBind\"\n [autofocus]=\"autofocus()\"\n [blockOptionActions]=\"blockOptionActions()\"\n [formControlName]=\"formControlName()\"\n [componentContextPositionIndex]=\"sortIndex()\"\n ></p>\n </ng-container>\n `,\n styles: [\n `\n :host {\n display: block;\n position: relative;\n .small {\n font: var(--mat-sys-body-small);\n }\n .medium {\n font: var(--mat-sys-body-medium);\n }\n .large {\n font: var(--mat-sys-body-large);\n }\n .title-small {\n font: var(--mat-sys-title-small);\n }\n .title-medium {\n font: var(--mat-sys-title-medium);\n }\n .title-large {\n font: var(--mat-sys-title-large);\n }\n }\n `,\n ],\n})\nexport class ParagraphBlockComponent implements BlockComponent {\n sortIndex = input<number>(0);\n componentInstanceName = 'ParagraphBlockComponent';\n autofocus = input<boolean>(true);\n formGroup = input.required<FormGroup>();\n formControlName = input.required<string>();\n blockOptionActions = input<BlockOptionAction[]>([\n { action: 'small', icon: 'density_small' },\n { action: 'medium', icon: 'density_medium' },\n { action: 'large', icon: 'density_large' },\n { action: 'title-small', text: 'TS' },\n { action: 'title-medium', text: 'TM' },\n { action: 'title-large', text: 'TL' },\n ]);\n\n savedAction = signal<string>('medium');\n actionCallbackBind = this.actionCallback.bind(this);\n\n actionCallback(action: string) {\n this.savedAction.update(() => action);\n }\n}\n","import { inject, Injectable, InjectionToken, Type } from '@angular/core';\nimport { HeaderBlockComponent } from '../components/blocks/header-block.component';\nimport { ParagraphBlockComponent } from '../components/blocks/paragraph-block.component';\nimport {\n BehaviorSubject,\n combineLatest,\n delay,\n exhaustMap,\n forkJoin,\n map,\n mergeMap,\n of,\n switchMap,\n} from 'rxjs';\nimport { EditorJsService } from './editor-js.service';\nimport {\n NgxEditorjsOptions,\n NgxEditorJsBlock,\n NgxEditorJsBlockWithComponent,\n SupportedBlock,\n BlockComponent,\n} from '../ngx-editor-js2.interface';\n\nexport const NGX_EDITORJS_OPTIONS = new InjectionToken<NgxEditorjsOptions>(\n 'NGX_EDITORJS_OPTIONS'\n);\n\n@Injectable({\n providedIn: 'root',\n})\nexport class NgxEditorJs2Service {\n editorJsService = inject(EditorJsService);\n\n consumerSupportedBlocks = new BehaviorSubject<SupportedBlock[]>(\n inject(NGX_EDITORJS_OPTIONS, { optional: true })?.consumerSupportedBlocks ??\n []\n );\n\n internalSupportedBlocks = new BehaviorSubject<SupportedBlock[]>([\n {\n name: 'Paragraph',\n component: ParagraphBlockComponent,\n componentInstanceName: 'ParagraphBlockComponent',\n },\n {\n name: 'Header',\n component: HeaderBlockComponent,\n componentInstanceName: 'HeaderBlockComponent',\n },\n ]);\n\n supportedBlocks$ = combineLatest([\n this.internalSupportedBlocks.asObservable(),\n this.consumerSupportedBlocks.asObservable(),\n ]).pipe(map(([internal, consumer]) => [...internal, ...consumer]));\n\n blocksToLoad = new BehaviorSubject<NgxEditorJsBlock[]>([]);\n\n loadBlocks$ = this.blocksToLoad.asObservable().pipe(\n delay(0),\n exhaustMap((blocks) => this.clearBlocksFromEditorJs(blocks)),\n map(([blocks]) => this.determineToloadDefaultBlocks(blocks)),\n map((blocks) => this.removeDuplicateBlocksWithSameIds(blocks)),\n map((blocks) => this.sortBlocks(blocks)),\n switchMap((blocks) => this.combineSupportBlocks(blocks)),\n map(([blocks, supportedBlocks]) =>\n this.createALookupMapForSupportedBlocks(blocks, supportedBlocks)\n ),\n map(({ blocks, supportedBlocksMap }) =>\n this.findAndMarshalBlocksComponent(blocks, supportedBlocksMap)\n ),\n mergeMap((blocks) =>\n this.addBlocksToEditorJs(blocks).pipe(map(() => blocks))\n )\n );\n\n clearBlocksFromEditorJs(blocks: NgxEditorJsBlock[]) {\n return forkJoin([of(blocks), this.editorJsService.clearBlocks()]);\n }\n\n determineToloadDefaultBlocks(blocks: NgxEditorJsBlock[]) {\n return blocks.length > 0 ? blocks : this.loadDefaultBlocks();\n }\n\n loadDefaultBlocks() {\n return [\n {\n blockId: 'tmdjr',\n sortIndex: 0,\n componentInstanceName: 'HeaderBlockComponent',\n dataClean: \"Let's get started... 🚀\",\n savedAction: 'h1',\n },\n ];\n }\n\n removeDuplicateBlocksWithSameIds(blocks: NgxEditorJsBlock[]) {\n return Array.from(\n new Map(blocks.map((block) => [block.blockId, block])).values()\n );\n }\n\n sortBlocks(blocks: NgxEditorJsBlock[]) {\n return blocks.sort((a, b) => a.sortIndex - b.sortIndex);\n }\n\n combineSupportBlocks(blocks: NgxEditorJsBlock[]) {\n return combineLatest([of(blocks), this.supportedBlocks$]);\n }\n\n createALookupMapForSupportedBlocks(\n blocks: NgxEditorJsBlock[],\n supportedBlocks: SupportedBlock[]\n ) {\n return {\n blocks,\n supportedBlocksMap: new Map(\n supportedBlocks.map((sb) => [sb.componentInstanceName, sb.component])\n ),\n };\n }\n\n findAndMarshalBlocksComponent(\n blocks: NgxEditorJsBlock[],\n supportedBlocksMap: Map<string, Type<BlockComponent>>\n ) {\n return blocks.map((block) => ({\n ...block,\n component:\n supportedBlocksMap.get(block.componentInstanceName) ??\n HeaderBlockComponent,\n }));\n }\n\n addBlocksToEditorJs(blocks: NgxEditorJsBlockWithComponent[]) {\n return combineLatest(\n blocks.map((block: NgxEditorJsBlockWithComponent) =>\n this.editorJsService.addBlockComponent(block)\n )\n );\n }\n}\n","import {\n Component,\n effect,\n inject,\n input,\n viewChild,\n ViewContainerRef,\n} from '@angular/core';\nimport { EditorJsService } from '../services/editor-js.service';\nimport { NgxEditorJs2Service } from '../services/ngx-editor-js2.service';\nimport { NgxEditorJsBlock } from '../ngx-editor-js2.interface';\nimport { CdkDropList, CdkDragDrop } from '@angular/cdk/drag-drop';\nimport { lastValueFrom } from 'rxjs';\n\n@Component({\n selector: 'editor-js',\n imports: [CdkDropList],\n template: `\n <div cdkDropList class=\"block-list\" (cdkDropListDropped)=\"drop($event)\">\n <ng-container #ngxEditor></ng-container>\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n .block-list {\n min-height: 60px;\n }\n }\n `,\n ],\n})\nexport class EditorJsComponent {\n editorJsService = inject(EditorJsService);\n ngxEditorJs2Service = inject(NgxEditorJs2Service);\n\n bootstrapEditorJs = input();\n blocks = input.required({\n transform: (value: NgxEditorJsBlock[]) =>\n this.ngxEditorJs2Service.blocksToLoad.next(value),\n });\n\n ngxEditor = viewChild.required('ngxEditor', { read: ViewContainerRef });\n\n constructor() {\n effect(() => {\n this.editorJsService.setNgxEditor(this.ngxEditor());\n });\n }\n\n // * DEBUGGING\n // ngOnInit() {\n // this.editorJsService.formGroup.valueChanges.subscribe((value) => {\n // console.log('[formGroup.value] : ', value);\n // });\n // this.editorJsService.blockComponents$.subscribe((components) => {\n // console.log('[components] : ', components);\n // });\n // }\n\n drop(event: CdkDragDrop<string[]>) {\n lastValueFrom(\n this.editorJsService.moveBlockComponentPosition(\n event.previousIndex,\n event.currentIndex\n )\n ).then(() => {\n // DRAG ANIMATION HOT FIX\n // Wait for Angular to update the DOM, then remove the animation class\n requestAnimationFrame(() => {\n document.querySelectorAll('.cdk-drag-animating').forEach((el) => {\n const element = el as HTMLElement;\n element.classList.remove('cdk-drag-animating'); // Ensure old class is removed\n void element.offsetWidth; // Force reflow\n element.classList.add('cdk-drag-animating'); // Re-add for next drag\n });\n });\n });\n }\n}\n","import {\n Component,\n EventEmitter,\n inject,\n input,\n Input,\n Output,\n Renderer2,\n signal,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatListModule } from '@angular/material/list';\n\n@Component({\n selector: 'toolbar-inline',\n imports: [MatListModule, MatIconModule, FormsModule],\n template: `\n <div class=\"panel\">\n @for (item of options; track $index) {\n <div class=\"inline-option\" (click)=\"addInlineTag(item.action)\">\n <mat-icon>{{ item.icon }}</mat-icon>\n </div>\n }\n <div class=\"inline-option\" (click)=\"addClassTag('code', 'inline-code')\">\n <mat-icon>code</mat-icon>\n </div>\n <div class=\"inline-option\" (click)=\"openUrlInput()\">\n <mat-icon>insert_link</mat-icon>\n </div>\n <div class=\"inline-option\" (click)=\"clearTags()\">\n <mat-icon>format_clear</mat-icon>\n </div>\n </div>\n\n @if(showURLInputField()) {\n <div class=\"panel\">\n <input\n type=\"text\"\n placeholder=\"Enter URL\"\n class=\"block-option-input\"\n [(ngModel)]=\"url\"\n />\n <div class=\"inline-option\" (click)=\"createLink()\">\n <mat-icon>add</mat-icon>\n </div>\n </div>\n }\n `,\n styles: [\n `\n :host {\n color: var(--mat-sys-on-secondary);\n background: var(--mat-sys-secondary);\n box-shadow: var(--mat-sys-level5);\n border-radius: 8px;\n .panel {\n display: flex;\n width: 230px;\n flex-wrap: wrap;\n gap: 1px;\n }\n .inline-option {\n cursor: pointer;\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n .block-option-input {\n width: 197px;\n height: 32px;\n border: none;\n outline: none;\n color: var(--mat-sys-on-secondary);\n background-color: transparent;\n box-sizing: border-box;\n }\n }\n `,\n ],\n})\nexport class ToolbarInlineComponent {\n // @Input() selection!: Selection;\n selection = input.required<Selection>();\n @Output('closeOverlay') closeOverlayEmitter = new EventEmitter();\n\n renderer = inject(Renderer2);\n\n url = '';\n showURLInputField = signal(false);\n savedRanges: Range[] = [];\n options = [\n { icon: 'format_bold', action: 'bold' },\n { icon: 'format_italic', action: 'italic' },\n { icon: 'format_underlined', action: 'underline' },\n { icon: 'strikethrough_s', action: 'strikethrough' },\n { icon: 'format_list_bulleted', action: 'insertUnorderedList' },\n { icon: 'format_list_numbered', action: 'insertOrderedList' },\n { icon: 'highlight', action: 'highlightColor' },\n { icon: 'format_align_left', action: 'justifyLeft' },\n { icon: 'format_align_center', action: 'justifyCenter' },\n { icon: 'format_align_right', action: 'justifyRight' },\n { icon: 'format_align_justify', action: 'justifyFull' },\n ];\n\n addInlineTag(tag: string) {\n // https://stackoverflow.com/questions/60581285/execcommand-is-now-obsolete-whats-the-alternative\n document.execCommand(tag);\n this.closeOverlayEmitter.emit();\n }\n\n addClassTag(tag: string, className: string) {\n const range = this.selection().getRangeAt(0);\n const element = this.renderer.createElement(tag);\n element.className = className ?? '';\n element.innerHTML = range.toString();\n range.deleteContents();\n range.insertNode(element);\n this.closeOverlayEmitter.emit();\n }\n\n clearTags() {\n document.execCommand('removeFormat');\n document.execCommand('unlink');\n this.closeOverlayEmitter.emit();\n }\n\n openUrlInput() {\n this.savedRanges.push(this.selection().getRangeAt(0));\n this.showURLInputField.set(true);\n }\n\n createLink() {\n this.selection().removeAllRanges();\n this.selection().addRange(this.savedRanges.pop()!);\n document.execCommand('createLink', false, this.url);\n this.closeOverlayEmitter.emit();\n }\n}\n","import { Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { inject, Injectable } from '@angular/core';\nimport { exhaustMap, filter, lastValueFrom, map, merge, of, tap } from 'rxjs';\nimport { ToolbarInlineComponent } from '../components/toolbar-inline/toolbar-inline.component';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ToolbarInlineService {\n overlay = inject(Overlay);\n overlayRef!: OverlayRef;\n\n determineToDisplayInlineToolbarBlock(_event: Event) {\n return of(window.getSelection()).pipe(\n filter((selection) => selection !== null),\n filter((selection) => selection.rangeCount > 0),\n filter((selection) => selection.toString().length > 0),\n filter((selection) => selection.toString() !== ''),\n tap(() => this.overlayRef?.hasAttached() && this.overlayRef.dispose()), // So hacky tired to do this properly\n map((selection) => ({\n selection,\n parant: this.getSelectionParent(selection),\n })),\n filter(({ parant }) => this.isSelectionInABlock(parant as HTMLElement)),\n exhaustMap(({ selection }) => this.attachInlineToolbar(selection))\n );\n }\n\n getSelectionParent(selection: Selection): HTMLElement | null {\n const range = selection.getRangeAt(0);\n return range.commonAncestorContainer.nodeType === Node.ELEMENT_NODE\n ? (range.commonAncestorContainer as HTMLElement)\n : range.commonAncestorContainer.parentElement;\n }\n\n isSelectionInABlock(target: HTMLElement | null) {\n // ! TODO: This is a hacky way to determine if the selection is in a block\n // ! Need to also check if the block wants to display the inline toolbar\n return (\n !!target &&\n (target.closest('.no-toolbar-inline') !== null\n ? false\n : target.closest('ngx-editor-js2') !== null\n ? true\n : false)\n );\n }\n\n attachInlineToolbar(selection: Selection) {\n return of(selection.getRangeAt(0)).pipe(\n map((range) => range.getBoundingClientRect()),\n map((selectionRect) => this.createOverlay(selectionRect)),\n // So hacky tired to do this properly\n // passing the refs down the pipe adds a bug\n // user selects text with a drag\n // (mousedown → mousemove → wait → mousemove → mouseup)\n tap((overlayRef) => (this.overlayRef = overlayRef)),\n map((overlayRef) => {\n const inlineToolbar = overlayRef.attach(\n new ComponentPortal(ToolbarInlineComponent)\n );\n inlineToolbar.setInput('selection', selection);\n\n lastValueFrom(\n merge(\n overlayRef.backdropClick(),\n inlineToolbar.instance.closeOverlayEmitter\n ).pipe(\n tap(() => overlayRef.dispose()),\n tap(() => selection.removeAllRanges())\n )\n );\n return true;\n })\n );\n }\n\n createOverlay(selectionRect: DOMRect) {\n return this.overlay.create({\n hasBackdrop: true,\n backdropClass: 'cdk-overlay-transparent-backdrop',\n positionStrategy: this.overlay\n .position()\n .flexibleConnectedTo(selectionRect)\n .withPositions([\n {\n offsetY: 8,\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n },\n ]),\n });\n }\n}\n","import { Component, inject, input, output } from '@angular/core';\nimport { EditorJsComponent } from './components/editor-js.component';\nimport { AsyncPipe } from '@angular/common';\nimport {\n combineLatest,\n debounceTime,\n firstValueFrom,\n fromEvent,\n Observable,\n switchMap,\n tap,\n} from 'rxjs';\nimport { ToolFabService } from './services/tool-fab.service';\nimport { NgxEditorJsBlock } from './ngx-editor-js2.interface';\nimport { ToolbarInlineService } from './services/toolbar-inline.service';\nimport { EditorJsService } from './services/editor-js.service';\nimport { NgxEditorJs2Service } from './services/ngx-editor-js2.service';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Component({\n selector: 'ngx-editor-js2',\n imports: [EditorJsComponent, AsyncPipe],\n template: `\n <editor-js\n [blocks]=\"blocks()\"\n [bootstrapEditorJs]=\"bootstrapEditorJs$ | async\"\n ></editor-js>\n `,\n})\nexport class NgxEditorJs2Component {\n inlineToolbarSerivce = inject(ToolbarInlineService);\n editorJsService = inject(EditorJsService);\n ngxEditorJs2Service = inject(NgxEditorJs2Service);\n\n constructor() {\n this.editorJsService.formGroup.valueChanges.pipe(\n takeUntilDestroyed(),\n debounceTime(500),\n switchMap(() => this.editorJsService.getBlocks$()),\n tap((blocks) => this.formChanged.emit(blocks))\n ).subscribe();\n }\n\n blocks = input<NgxEditorJsBlock[]>([]);\n\n // Allows the parent component to request the current blocks\n blocksRequested = output<Observable<NgxEditorJsBlock[]>>();\n requestBlocks = input.required({\n transform: (value: unknown) =>\n value && this.blocksRequested.emit(this.editorJsService.getBlocks$()),\n });\n\n // Tells the parent component when the form has changed\n formChanged = output<NgxEditorJsBlock[]>();\n\n\n bootstrapEditorJs$ = combineLatest([\n inject(ToolFabService).toolbarComponentRef$,\n this.ngxEditorJs2Service.loadBlocks$,\n fromEvent(document, 'selectionchange').pipe(\n debounceTime(200),\n switchMap((event) =>\n this.inlineToolbarSerivce.determineToDisplayInlineToolbarBlock(event)\n )\n )\n ]);\n}\n","/*\n * Public API Surface of ngx-editor-js2\n */\n\nexport * from './lib/services/ngx-editor-js2.service';\nexport * from './lib/ngx-editor-js2.component';\nexport type * from './lib/ngx-editor-js2.interface';\nexport * from './lib/directives/autofocus.directive';\nexport * from './lib/directives/toolbar-fab.directive';\nexport * from './lib/directives/control-accessor.directive';\nexport * from './lib/directives/clean-paste-data.directive';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1"],"mappings":";;;;;;;;;;;;;;;;;;;MAoBa,wBAAwB,CAAA;AACnC,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;IAE/B,YAAY,GAAG,KAAK,EAAU;AAE9B,IAAA,QAAQ,GAAyB,MAAK,GAAG;AACzC,IAAA,SAAS,GAAe,MAAK,GAAG;IAEhC,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,SAAS,GAAG,IAAI,CAAC,YAAY,EAAE,IAAI,EAAE;;AAGrE,IAAA,gBAAgB,CAAC,EAAO,EAAA;AACtB,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;;AAGpB,IAAA,iBAAiB,CAAC,EAAO,EAAA;AACvB,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;;IAIrB,MAAM,GAAA;QACJ,IAAI,CAAC,SAAS,EAAE;;IAIlB,OAAO,GAAA;QACL,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,SAAS,CAAC;;uGA3B7C,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAxB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,EARxB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,MAAA,EAAA,UAAA,EAAA,OAAA,EAAA,WAAA,EAAA,EAAA,EAAA,SAAA,EAAA;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,wBAAwB,CAAC;AACvD,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACF,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAEU,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAVpC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,mBAAmB;AAC7B,oBAAA,SAAS,EAAE;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,8BAA8B,CAAC;AACvD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA;AACF,iBAAA;8BAsBC,MAAM,EAAA,CAAA;sBADL,YAAY;uBAAC,MAAM;gBAMpB,OAAO,EAAA,CAAA;sBADN,YAAY;uBAAC,OAAO;;;MClCV,kBAAkB,CAAA;AAC7B,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAE/B,IAAA,SAAS,GAAG,KAAK,CAAU,KAAK,CAAC;IAEjC,kBAAkB,GAAA;AAChB,QAAA,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,KAAK,IAAI;;uGANlD,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAlB,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAH9B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,aAAa;AACxB,iBAAA;;;AC+BD,IAAY,mBAIX;AAJD,CAAA,UAAY,mBAAmB,EAAA;AAC7B,IAAA,mBAAA,CAAA,IAAA,CAAA,GAAA,IAAS;AACT,IAAA,mBAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,mBAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACnB,CAAC,EAJW,mBAAmB,KAAnB,mBAAmB,GAI9B,EAAA,CAAA,CAAA;;MC4BY,4BAA4B,CAAA;IAC9B,QAAQ,GAAG,mBAAmB;IAEvC,kBAAkB,GAAG,KAAK,EAAuB;IAEjD,mBAAmB,GAAG,MAAM,CAAS,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC;IAC/D,wBAAwB,GAAG,MAAM,CAAsB;AACrD,QAAA,KAAK,EAAE,mBAAmB;AAC3B,KAAA,CAAC;AAEF,IAAA,YAAY,CAAC,MAA2B,EAAA;AACtC,QAAA,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,MAAM,CAAC;;AAG5C,IAAA,YAAY,CAAC,MAAc,EAAA;AACzB,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC;;uGAf5B,4BAA4B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA5B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,4BAA4B,EA9D7B,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,EAAA,kBAAA,EAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,mBAAA,EAAA,cAAA,EAAA,wBAAA,EAAA,mBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBT,EA1BS,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,4jBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,OAAO,2IAAE,SAAS,EAAA,QAAA,EAAA,2BAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,oBAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,mBAAA,EAAA,kBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FA+DjB,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBAjExC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,uBAAuB,WACxB,CAAC,OAAO,EAAE,SAAS,CAAC,EACnB,QAAA,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;AAyBT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,4jBAAA,CAAA,EAAA;;;MC8CU,sBAAsB,CAAA;IACjC,eAAe,GAAG,MAAM,CAAuB,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;AACrE,IAAA,eAAe,GAAG,KAAK,CAAmB,EAAE,CAAC;AAC7C,IAAA,gBAAgB,GAAG,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC;AAErD,IAAA,SAAS,GAAG,IAAI,WAAW,CAAC,EAAE,CAAC;AAC/B,IAAA,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IAEzD,eAAe,GAAG,aAAa,CAAC,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CACzE,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,YAAY,CAAC,KAAI;QAC7B,IAAI,OAAO,YAAY,KAAK,QAAQ;YAAE,YAAY,GAAG,EAAE;QACvD,YAAY,GAAG,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;QAC9C,MAAM,OAAO,GAAG;cACZ,KAAK,CAAC,EAAE;aACT,GAAG,CAAC,CAAC,CAAS,KAAK,CAAA,KAAA,EAAQ,CAAC,CAAA,CAAA,CAAG;aAC/B,IAAI,CAAC,EAAE,CAAC;QACX,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,CAAG,EAAA,OAAO,CAAE,CAAA,EAAE,IAAI,CAAC;;AAG5C,QAAA,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;KACzD,CAAC,CACH;AAED,IAAA,QAAQ,CAAC,KAAqB,EAAA;QAC5B,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC;;uGAxBlC,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAtB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAsB,EA3DvB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,eAAA,EAAA,UAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA;;;;;;;;;;;;;;;;;;;;;;;AAuBT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,mhBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAhCC,YAAY,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACZ,QAAQ,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACR,OAAO,EACP,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,WAAW,EACX,QAAA,EAAA,wDAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,SAAS,EACT,QAAA,EAAA,2BAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,oBAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,mBAAA,EAAA,kBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAQ,EACR,QAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,mBAAmB,qkBACnB,SAAS,EAAA,IAAA,EAAA,OAAA,EAAA,CAAA,EAAA,CAAA;;2FA6DA,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAvElC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,EACjB,OAAA,EAAA;wBACP,YAAY;wBACZ,QAAQ;wBACR,OAAO;wBACP,WAAW;wBACX,SAAS;wBACT,QAAQ;wBACR,mBAAmB;wBACnB,SAAS;qBACV,EACS,QAAA,EAAA;;;;;;;;;;;;;;;;;;;;;;;AAuBT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,mhBAAA,CAAA,EAAA;;;MC2EU,gBAAgB,CAAA;AAC3B,IAAA,6BAA6B,GAAG,KAAK,CAAC,QAAQ,EAAU;AACxD,IAAA,eAAe,GAAG,KAAK,CAAC,QAAQ,EAAoB;IACpD,kBAAkB,GAAG,KAAK,EAAuB;IACjD,cAAc,GAAG,KAAK,CAA2B,MAAM,MAAK,GAAG,CAAC;IAChE,eAAe,GAAG,KAAK,EAAU;AACjC,IAAA,gBAAgB,GAAG,KAAK,CAAC,QAAQ,EAAqB;AACtD,IAAA,yBAAyB,GAAG,KAAK,CAAC,QAAQ,EAA8B;AAExE,IAAA,UAAU,GAAG,MAAM,CAAU,KAAK,CAAC;AACnC,IAAA,gBAAgB,GAAG,MAAM,CAAU,KAAK,CAAC;IAEzC,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC;;IAGzC,mBAAmB,GAAA;AACjB,QAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC;;AAG/C,IAAA,iBAAiB,CAAC,MAA2B,EAAA;QAC3C,IAAI,CAAC,UAAU,EAAE;QACjB,IAAI,CAAC,yBAAyB,EAAE,CAC9B,MAAM,EACN,IAAI,CAAC,6BAA6B,EAAE,CACrC;;AAGH,IAAA,YAAY,CAAC,MAAc,EAAA;QACzB,IAAI,CAAC,UAAU,EAAE;AACjB,QAAA,IAAI,CAAC,cAAc,EAAE,CAAC,MAAM,CAAC;;AAG/B,IAAA,QAAQ,CAAC,KAA2B,EAAA;QAClC,IAAI,CAAC,UAAU,EAAE;AACjB,QAAA,cAAc,CACZ,IAAI,CAAC,gBAAgB,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,6BAA6B,EAAE,CAAC,CACrE;;IAGH,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;AAC1B,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC;;uGA1CvB,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAhB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,gBAAgB,EAhGjB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,EAAA,6BAAA,EAAA,EAAA,iBAAA,EAAA,+BAAA,EAAA,UAAA,EAAA,+BAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,kBAAA,EAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,gBAAA,EAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,yBAAA,EAAA,EAAA,iBAAA,EAAA,2BAAA,EAAA,UAAA,EAAA,2BAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwDT,EA9DC,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,ujBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,aAAa,+FACb,SAAS,EAAA,QAAA,EAAA,2BAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,oBAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,mBAAA,EAAA,kBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACT,aAAa,EACb,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,qEAAA,EAAA,MAAA,EAAA,CAAA,2BAAA,EAAA,8BAAA,EAAA,qCAAA,EAAA,4BAAA,EAAA,4BAAA,EAAA,0BAAA,EAAA,2BAAA,EAAA,6BAAA,EAAA,8BAAA,EAAA,kCAAA,EAAA,+BAAA,EAAA,mCAAA,EAAA,mCAAA,EAAA,yBAAA,EAAA,iCAAA,EAAA,sCAAA,EAAA,gCAAA,EAAA,iCAAA,EAAA,uCAAA,EAAA,kCAAA,EAAA,yBAAA,EAAA,wCAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,4DAAA,EAAA,QAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,4BAA4B,kJAC5B,sBAAsB,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAkGb,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAzG5B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,SAAS,EACV,OAAA,EAAA;wBACP,aAAa;wBACb,SAAS;wBACT,aAAa;wBACb,4BAA4B;wBAC5B,sBAAsB;qBACvB,EACS,QAAA,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwDT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,ujBAAA,CAAA,EAAA;;;MCvEU,oBAAoB,CAAA;AAC/B,IAAA,eAAe,GAAG,IAAI,GAAG,EAAwC;IAEjE,kBAAkB,GAAA;AAChB,QAAA,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE;;IAG9B,oBAAoB,GAAA;AAClB,QAAA,OAAO,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC;;AAGtD,IAAA,oBAAoB,CAAC,YAA0C,EAAA;QAC7D,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,YAAY,CAAC,QAAQ,EAAE,YAAY,CAAC;;AAG/D,IAAA,sBAAsB,CAAC,SAA2B,EAAA;AAChD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAC7C,GAAG,CAAC,CAAC,YAAiB,KACpB,YAAY,CAAC,QAAQ,CACnB,WAAW,EACX,SAAS,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,CACzC,CACF,CACF;;AAGH,IAAA,0BAA0B,CACxB,SAA2B,EAC3B,MAA2B,EAC3B,KAAa,EAAA;AAEb,QAAA,OAAO,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,CACvD,GAAG,CAAC,CAAC,aAAa,KAChB,aAAa,CAAC,IAAI,CAChB,CAAC,YAAY,KACX,SAAS,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,KAAK,GAAG,CAAC,CACzD,CACF,EACD,MAAM,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,YAAY,CAAC,EACxC,GAAG,CAAC,CAAC,YAAY,MAAM;YACrB,YAAY;AACZ,YAAA,eAAe,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC;YACrC,YAAY,EAAE,SAAS,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC;YACtD,QAAQ,EAAE,CAAC,KAAa,KACtB,MAAM,KAAK,mBAAmB,CAAC,EAAE,GAAG,KAAK,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC;AAC5D,SAAA,CAAC,CAAC,EACH,GAAG,CAAC,CAAC,EAAE,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM;YAClE,YAAY;YACZ,YAAY;AACZ,YAAA,QAAQ,EAAE,IAAI,CAAC,GAAG,CAChB,CAAC,EACD,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,eAAe,CAAC,CAClD;SACF,CAAC,CAAC,EACH,MAAM,CAAC,CAAC,EAAE,YAAY,EAAE,QAAQ,EAAE,KAAK,YAAY,KAAK,QAAQ,CAAC,EACjE,GAAG,CAAC,CAAC,EAAE,YAAY,EAAE,QAAQ,EAAE,KAAI;YACjC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,QAAQ,CAAC;AAC/C,YAAA,YAAY,CAAC,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC;AAC5C,YAAA,YAAY,CAAC,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC;AAC1C,SAAC,CAAC,EACF,cAAc,CAAC,KAAK,CAAC,CACtB;;AAGH,IAAA,oBAAoB,CAClB,SAA2B,EAC3B,KAAa,EACb,KAAK,GAAG,KAAK,EAAA;QAEb,OAAO,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,CACvD,MAAM,CAAC,CAAC,aAAa,KAAK,KAAK,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,CAAC,EAC9D,GAAG,CAAC,CAAC,aAAa,KAChB,aAAa,CAAC,IAAI,CAChB,CAAC,YAAY,KACX,SAAS,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,KAAK,GAAG,CAAC,CACzD,CACF,EACD,GAAG,CAAC,CAAC,YAAY,KACf,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,YAAY,EAAE,QAAQ,IAAI,EAAE,CAAC,CAC1D,EACD,GAAG,CAAC,CAAC,UAAU,KAAK,UAAU,IAAI,SAAS,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,EAC9D,cAAc,CAAC,KAAK,CAAC,CACtB;;uGAlFQ,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAApB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,cAFnB,MAAM,EAAA,CAAA;;2FAEP,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAHhC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;ACeD,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;MAIlD,eAAe,CAAA;AAC1B,IAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AACjC,IAAA,oBAAoB,GAAG,MAAM,CAAC,oBAAoB,CAAC;AAEnD,IAAA,eAAe,GAAG,IAAI,GAAG,EAAmB;AAE5C,IAAA,SAAS;IACT,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;;AAGtC,IAAA,YAAY,CAAC,SAA2B,EAAA;AACtC,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS;;IAG5B,UAAU,GAAA;AACR,QAAA,OAAO,IAAI,UAAU,CAAqB,CAAC,QAAQ,KAAI;AACrD,YAAA,aAAa,CACX,IAAI,CAAC,oBAAoB,CAAC,oBAAoB,EAAE,CAAC,IAAI,CACnD,GAAG,CAAC,CAAC,aAAa,KAChB,aAAa,CAAC,GAAG,CAAmB,CAAC,EAAE,QAAQ,EAAE,MAAM;AACrD,gBAAA,OAAO,EAAE,QAAQ,CAAC,eAAe,EAAE;AACnC,gBAAA,SAAS,EAAE,QAAQ,CAAC,SAAS,EAAE;gBAC/B,qBAAqB,EAAE,QAAQ,CAAC,qBAAqB;AACrD,gBAAA,WAAW,EAAE,QAAQ,CAAC,WAAW,EAAE;AACnC,gBAAA,SAAS,EAAE,QAAQ,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,eAAe,EAAE;AAC5D,sBAAE,KAAK;AACV,aAAA,CAAC,CAAC,CACJ,EACD,GAAG,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAClE,CACF,CAAC,IAAI,CAAC,CAAC,MAAM,KAAI;AAChB,gBAAA,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;gBACrB,QAAQ,CAAC,QAAQ,EAAE;AACrB,aAAC,CAAC;AACJ,SAAC,CAAC;;IAGJ,mCAAmC,CACjC,cAAoC,EACpC,6BAAqC,EAAA;AAErC,QAAA,OAAO,EAAE,CAAgC;YACvC,OAAO,EAAE,SAAS,EAAE;AACpB,YAAA,SAAS,EAAE,6BAA6B;YACxC,qBAAqB,EAAE,cAAc,CAAC,IAAI;AAC1C,YAAA,SAAS,EAAE,cAAc;;;AAGzB,YAAA,SAAS,EAAE,EAAE;AACb,YAAA,SAAS,EAAE,IAAI;AAChB,SAAA,CAAC;;AAGJ,IAAA,iBAAiB,CACf,gBAA+C,EAAA;AAE/C,QAAA,OAAO,QAAQ,CAAC;AACd,YAAA,IAAI,CAAC,sBAAsB,CAAC,gBAAgB,CAAC;AAC7C,YAAA,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC;YACtC,IAAI,CAAC,oBAAoB,CAAC,sBAAsB,CAAC,IAAI,CAAC,SAAS,CAAC;AACjE,SAAA,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC;;AAG5B,IAAA,sBAAsB,CAAC,EACrB,OAAO,EACP,SAAS,GACqB,EAAA;AAC9B,QAAA,OAAO,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CACrD,GAAG,CAAC,CAAC,WAAW,KAAK,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,CACtE;;AAGH,IAAA,eAAe,CAAC,EACd,SAAS,EACT,OAAO,EACP,SAAS,EACT,WAAW,EACX,SAAS,EAAE,KAAK,GACc,EAAA;AAC9B,QAAA,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CACrB,GAAG,CAAC,CAAC,WAAW,KAAI;YAClB,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,SAAS,EAAE;gBAC7D,KAAK;AACN,aAAA,CAAC;AACF,YAAA,YAAY,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,CAAC;YACzC,YAAY,CAAC,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC;AAClD,YAAA,YAAY,CAAC,QAAQ,CAAC,iBAAiB,EAAE,WAAW,CAAC;AACrD,YAAA,YAAY,CAAC,QAAQ,CAAC,WAAW,EAAE,SAAS,CAAC;YAE7C,WAAW,IAAI,YAAY,CAAC,QAAQ,CAAC,cAAc,GAAG,WAAW,CAAC;AAElE,YAAA,IAAI,CAAC,oBAAoB,CAAC,oBAAoB,CAAC,YAAY,CAAC;AAC5D,YAAA,OAAO,YAAY;SACpB,CAAC,CACH;;AAGH,IAAA,2BAA2B,CACzB,MAA2B,EAC3B,KAAa,EACb,eAAuB,EAAA;QAEvB,OAAO,GAAG,CACR,MAAM,MAAM,KAAK,mBAAmB,CAAC,MAAM,EAC3C,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,eAAe,CAAC,EACjD,IAAI,CAAC,oBAAoB,CAAC,0BAA0B,CAClD,IAAI,CAAC,SAAS,EACd,MAAM,EACN,KAAK,CACN,CACF,CAAC,IAAI,CACJ,SAAS,CAAC,MACR,IAAI,CAAC,oBAAoB,CAAC,sBAAsB,CAAC,IAAI,CAAC,SAAS,CAAC,CACjE,CACF;;IAGH,0BAA0B,CAAC,aAAqB,EAAE,YAAoB,EAAA;AACpE,QAAA,OAAO,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAC/C,MAAM,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,OAAO,CAAC,EAC9B,GAAG,CAAC,CAAC,OAAO,KAAI;YACd,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC;SAC3C,CAAC,EACF,SAAS,CAAC,MACR,IAAI,CAAC,oBAAoB,CAAC,sBAAsB,CAAC,IAAI,CAAC,SAAS,CAAC,CACjE,EACD,cAAc,CAAC,KAAK,CAAC,CACtB;;AAGH,IAAA,oBAAoB,CAAC,KAAa,EAAE,eAAuB,EAAE,KAAK,GAAG,KAAK,EAAA;AACxE,QAAA,OAAO,aAAa,CAAC;AACnB,YAAA,IAAI,CAAC,oBAAoB,CAAC,oBAAoB,CAC5C,IAAI,CAAC,SAAS,EACd,KAAK,EACL,KAAK,CACN;YACD,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC;AAClD,SAAA,CAAC;;IAGJ,WAAW,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,oBAAoB,CAAC,oBAAoB,EAAE,CAAC,IAAI,CAC1D,MAAM,CAAC,CAAC,aAAa,KAAK,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,EACnD,GAAG,CAAC,CAAC,aAAa,KAChB,aAAa,CAAC,IAAI,CAChB,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,SAAS,EAAE,CAC1D,CACF,EACD,QAAQ,CAAC,CAAC,aAAa,KACrB,QAAQ,CACN,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,YAAY,KAClD,IAAI,CAAC,oBAAoB,CACvB,YAAY,CAAC,QAAQ,CAAC,SAAS,EAAE,GAAG,CAAC,EACrC,YAAY,CAAC,QAAQ,CAAC,eAAe,EAAE,EACvC,IAAI,CACL,CACF,CACF,CACF,EACD,SAAS,CAAC,MACR,IAAI,CAAC,oBAAoB,CAAC,sBAAsB,CAAC,IAAI,CAAC,SAAS,CAAC,CACjE,EACD,GAAG,CAAC,MAAK;AACP,YAAA,IAAI,CAAC,oBAAoB,CAAC,kBAAkB,EAAE;AAC9C,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;AACxB,SAAC,CAAC,EACF,cAAc,CAAC,KAAK,CAAC,CACtB;;uGAxKQ,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAf,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,cAFd,MAAM,EAAA,CAAA;;2FAEP,eAAe,EAAA,UAAA,EAAA,CAAA;kBAH3B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;MCIY,cAAc,CAAA;AACzB,IAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;AACjD,IAAA,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;;AAEzC,IAAA,gBAAgB,GAAG,IAAI,eAAe,CAAmB,IAAI,CAAC;IAC9D,oBAAoB,GAAG,aAAa,CAAC;AACnC,QAAA,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE;AACtD,QAAA,eAAe,EAAE,IAAI,CAAC,mBAAmB,CAAC,gBAAgB;AAC3D,KAAA,CAAC,CAAC,IAAI,CACL,MAAM,CAAC,CAAC,EAAE,gBAAgB,EAAE,KAAK,gBAAgB,KAAK,IAAI,CAAC,EAC3D,oBAAoB,CAClB,CAAC,EAAE,gBAAgB,EAAE,QAAQ,EAAE,EAAE,EAAE,gBAAgB,EAAE,OAAO,EAAE,KAC5D,QAAS,CAAC,KAAK,KAAK,OAAQ,CAAC,KAAK;AAClC,QAAA,QAAS,CAAC,gBAAgB,KAAK,OAAQ,CAAC;WACnC,QAAS,CAAC,gBAAgB,CAAC,KAAK,EAAE,EAAE,KAAK;AAC5C,UAAE,IAAI,CACX,EACD,GAAG,CAAC,CAAC,EAAE,gBAAgB,EAAE,eAAe,EAAE,KAAI;AAC5C,QAAA,MAAM,EACJ,KAAK,EACL,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,EACd,eAAe,GAChB,GAAG,gBAAiB;;QAErB,MAAM,YAAY,GAAG,gBAAgB,CAAC,eAAe,CAAC,gBAAgB,CAAC;QACvE,YAAY,CAAC,QAAQ,CAAC,+BAA+B,EAAE,KAAK,GAAG,CAAC,CAAC;AACjE,QAAA,YAAY,CAAC,QAAQ,CAAC,iBAAiB,EAAE,eAAe,CAAC;AACzD,QAAA,YAAY,CAAC,QAAQ,CAAC,oBAAoB,EAAE,kBAAkB,CAAC;AAC/D,QAAA,YAAY,CAAC,QAAQ,CAAC,gBAAgB,EAAE,cAAc,CAAC;AACvD,QAAA,YAAY,CAAC,QAAQ,CAAC,iBAAiB,EAAE,eAAe,CAAC;AACzD,QAAA,YAAY,CAAC,QAAQ,CAAC,kBAAkB,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACnE,QAAA,YAAY,CAAC,QAAQ,CACnB,2BAA2B,EAC3B,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CACnC;AACD,QAAA,OAAO,YAAY;KACpB,CAAC,CACH;IAED,QAAQ,CAAC,KAA2B,EAAE,KAAa,EAAA;QACjD,OAAO,IAAI,CAAC;AACT,aAAA,mCAAmC,CAAC,KAAK,EAAE,KAAK;AAChD,aAAA,IAAI,CACH,SAAS,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CACpE;;AAGL,IAAA,kBAAkB,CAChB,MAA2B,EAC3B,KAAa,EACb,eAAuB,EAAA;AAEvB,QAAA,OAAO,aAAa,CAClB,IAAI,CAAC,eAAe,CAAC,2BAA2B,CAC9C,MAAM,EACN,KAAK,EACL,eAAe,CAChB,CACF;;uGA5DQ,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAd,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,cAFb,MAAM,EAAA,CAAA;;2FAEP,cAAc,EAAA,UAAA,EAAA,CAAA;kBAH1B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;MCXY,mBAAmB,CAAA;AAC9B,IAAA,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;AACvC,IAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;IAE3C,SAAS,GAAG,KAAK,EAAW;IAC5B,kBAAkB,GAAG,KAAK,EAAuB;AACjD,IAAA,cAAc,GAAG,KAAK,CAAC,QAAQ,EAA4B;AAC3D,IAAA,6BAA6B,GAAG,KAAK,CAAC,QAAQ,EAAU;AACxD,IAAA,eAAe,GAAG,KAAK,CAAC,QAAQ,EAAU;IAEd,YAAY,GAAA;AACtC,QAAA,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,IAAI,CAAC;YACxC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;AACvC,YAAA,kBAAkB,EAAE,IAAI,CAAC,kBAAkB,EAAE,IAAI,EAAE;AACnD,YAAA,cAAc,EAAE,IAAI,CAAC,cAAc,EAAE;AACrC,YAAA,KAAK,EAAE,IAAI,CAAC,6BAA6B,EAAE;AAC3C,YAAA,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE;AACxC,SAAA,CAAC;;AAGJ,IAAA,WAAA,GAAA;QACE,MAAM,CAAC,MAAK;YACV,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,YAAY,EAAE;AACzC,SAAC,CAAC;;uGAvBO,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAnB,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,kBAAA,EAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,6BAAA,EAAA,EAAA,iBAAA,EAAA,+BAAA,EAAA,UAAA,EAAA,+BAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAH/B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,cAAc;AACzB,iBAAA;wDAW6B,YAAY,EAAA,CAAA;sBAAvC,YAAY;uBAAC,YAAY;;;MCrBf,uBAAuB,CAAA;AAElC,IAAA,OAAO,CAAC,KAAY,EAAA;QAClB,KAAK,CAAC,cAAc,EAAE;QACtB,MAAM,IAAI,GAAI,KAAwB,CAAC,aAAa,EAAE,OAAO,CAAC,YAAY,CAAC;QAC3E,QAAQ,CAAC,WAAW,CAAC,YAAY,EAAE,KAAK,EAAE,IAAI,CAAC;;uGALtC,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAvB,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAvB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAHnC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,kBAAkB;AAC7B,iBAAA;8BAGC,OAAO,EAAA,CAAA;sBADN,YAAY;uBAAC,OAAO,EAAE,CAAC,QAAQ,CAAC;;;MCoGtB,oBAAoB,CAAA;AAC/B,IAAA,SAAS,GAAG,KAAK,CAAS,CAAC,CAAC;IAC5B,qBAAqB,GAAG,sBAAsB;AAC9C,IAAA,SAAS,GAAG,KAAK,CAAU,IAAI,CAAC;AAChC,IAAA,SAAS,GAAG,KAAK,CAAC,QAAQ,EAAa;AACvC,IAAA,eAAe,GAAG,KAAK,CAAC,QAAQ,EAAU;IAC1C,kBAAkB,GAAG,KAAK,CAAsB;AAC9C,QAAA,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;AAC5B,QAAA,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;AAC5B,QAAA,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;AAC5B,QAAA,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;AAC5B,QAAA,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;AAC5B,QAAA,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;AAC7B,KAAA,CAAC;AAEF,IAAA,WAAW,GAAG,MAAM,CAAS,IAAI,CAAC;IAClC,kBAAkB,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;AAEnD,IAAA,cAAc,CAAC,cAAsB,EAAA;AACnC,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,cAAc,CAAC;;uGAnB3B,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAApB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oBAAoB,EApFrB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,kBAAA,EAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,EAAA,cAAA,EAAA,CAAA,EAAA,SAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgDX,EAvDG,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,uaAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,mBAAmB,EACnB,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,wBAAwB,EACxB,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,kBAAkB,+EAClB,mBAAmB,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,oBAAA,EAAA,gBAAA,EAAA,+BAAA,EAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,uBAAuB,EAAA,QAAA,EAAA,kBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACvB,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAsFP,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAhGhC,SAAS;+BACE,cAAc,EAAA,IAAA,EAClB,EAAE,KAAK,EAAE,oBAAoB,EAAE,EACrB,cAAA,EAAA,CAAC,OAAO,CAAC,EAChB,OAAA,EAAA;wBACP,mBAAmB;wBACnB,wBAAwB;wBACxB,kBAAkB;wBAClB,mBAAmB;wBACnB,uBAAuB;wBACvB;qBACH,EACW,QAAA,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgDX,CAAA,EAAA,MAAA,EAAA,CAAA,uaAAA,CAAA,EAAA;;;MCHY,uBAAuB,CAAA;AAClC,IAAA,SAAS,GAAG,KAAK,CAAS,CAAC,CAAC;IAC5B,qBAAqB,GAAG,yBAAyB;AACjD,IAAA,SAAS,GAAG,KAAK,CAAU,IAAI,CAAC;AAChC,IAAA,SAAS,GAAG,KAAK,CAAC,QAAQ,EAAa;AACvC,IAAA,eAAe,GAAG,KAAK,CAAC,QAAQ,EAAU;IAC1C,kBAAkB,GAAG,KAAK,CAAsB;AAC9C,QAAA,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE;AAC1C,QAAA,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,gBAAgB,EAAE;AAC5C,QAAA,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE;AAC1C,QAAA,EAAE,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,EAAE;AACrC,QAAA,EAAE,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,IAAI,EAAE;AACtC,QAAA,EAAE,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,EAAE;AACtC,KAAA,CAAC;AAEF,IAAA,WAAW,GAAG,MAAM,CAAS,QAAQ,CAAC;IACtC,kBAAkB,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;AAEnD,IAAA,cAAc,CAAC,MAAc,EAAA;QAC3B,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,MAAM,CAAC;;uGAnB5B,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAvB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uBAAuB,EA5CxB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,kBAAA,EAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,EAAA,cAAA,EAAA,CAAA,EAAA,SAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA;;;;;;;;;;;;;;;;GAgBT,EAvBC,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,2UAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,mBAAmB,EACnB,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,wBAAwB,EACxB,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,kBAAkB,+EAClB,mBAAmB,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,oBAAA,EAAA,gBAAA,EAAA,+BAAA,EAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,uBAAuB,EAAA,QAAA,EAAA,kBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACvB,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FA8CE,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAxDnC,SAAS;+BACE,iBAAiB,EAAA,IAAA,EACrB,EAAE,KAAK,EAAE,oBAAoB,EAAE,EACrB,cAAA,EAAA,CAAC,OAAO,CAAC,EAChB,OAAA,EAAA;wBACP,mBAAmB;wBACnB,wBAAwB;wBACxB,kBAAkB;wBAClB,mBAAmB;wBACnB,uBAAuB;wBACvB,OAAO;qBACR,EACS,QAAA,EAAA;;;;;;;;;;;;;;;;AAgBT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,2UAAA,CAAA,EAAA;;;MCnBU,oBAAoB,GAAG,IAAI,cAAc,CACpD,sBAAsB;MAMX,mBAAmB,CAAA;AAC9B,IAAA,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;AAEzC,IAAA,uBAAuB,GAAG,IAAI,eAAe,CAC3C,MAAM,CAAC,oBAAoB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,uBAAuB;AACvE,QAAA,EAAE,CACL;IAED,uBAAuB,GAAG,IAAI,eAAe,CAAmB;AAC9D,QAAA;AACE,YAAA,IAAI,EAAE,WAAW;AACjB,YAAA,SAAS,EAAE,uBAAuB;AAClC,YAAA,qBAAqB,EAAE,yBAAyB;AACjD,SAAA;AACD,QAAA;AACE,YAAA,IAAI,EAAE,QAAQ;AACd,YAAA,SAAS,EAAE,oBAAoB;AAC/B,YAAA,qBAAqB,EAAE,sBAAsB;AAC9C,SAAA;AACF,KAAA,CAAC;IAEF,gBAAgB,GAAG,aAAa,CAAC;AAC/B,QAAA,IAAI,CAAC,uBAAuB,CAAC,YAAY,EAAE;AAC3C,QAAA,IAAI,CAAC,uBAAuB,CAAC,YAAY,EAAE;KAC5C,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,KAAK,CAAC,GAAG,QAAQ,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC;AAElE,IAAA,YAAY,GAAG,IAAI,eAAe,CAAqB,EAAE,CAAC;AAE1D,IAAA,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,CAAC,IAAI,CACjD,KAAK,CAAC,CAAC,CAAC,EACR,UAAU,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC,EAC5D,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,4BAA4B,CAAC,MAAM,CAAC,CAAC,EAC5D,GAAG,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,gCAAgC,CAAC,MAAM,CAAC,CAAC,EAC9D,GAAG,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,EACxC,SAAS,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,EACxD,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,eAAe,CAAC,KAC5B,IAAI,CAAC,kCAAkC,CAAC,MAAM,EAAE,eAAe,CAAC,CACjE,EACD,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,kBAAkB,EAAE,KACjC,IAAI,CAAC,6BAA6B,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAC/D,EACD,QAAQ,CAAC,CAAC,MAAM,KACd,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,MAAM,CAAC,CAAC,CACzD,CACF;AAED,IAAA,uBAAuB,CAAC,MAA0B,EAAA;AAChD,QAAA,OAAO,QAAQ,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,CAAC,CAAC;;AAGnE,IAAA,4BAA4B,CAAC,MAA0B,EAAA;AACrD,QAAA,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC,iBAAiB,EAAE;;IAG9D,iBAAiB,GAAA;QACf,OAAO;AACL,YAAA;AACE,gBAAA,OAAO,EAAE,OAAO;AAChB,gBAAA,SAAS,EAAE,CAAC;AACZ,gBAAA,qBAAqB,EAAE,sBAAsB;AAC7C,gBAAA,SAAS,EAAE,yBAAyB;AACpC,gBAAA,WAAW,EAAE,IAAI;AAClB,aAAA;SACF;;AAGH,IAAA,gCAAgC,CAAC,MAA0B,EAAA;AACzD,QAAA,OAAO,KAAK,CAAC,IAAI,CACf,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAChE;;AAGH,IAAA,UAAU,CAAC,MAA0B,EAAA;AACnC,QAAA,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC;;AAGzD,IAAA,oBAAoB,CAAC,MAA0B,EAAA;AAC7C,QAAA,OAAO,aAAa,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;;IAG3D,kCAAkC,CAChC,MAA0B,EAC1B,eAAiC,EAAA;QAEjC,OAAO;YACL,MAAM;YACN,kBAAkB,EAAE,IAAI,GAAG,CACzB,eAAe,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,qBAAqB,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CACtE;SACF;;IAGH,6BAA6B,CAC3B,MAA0B,EAC1B,kBAAqD,EAAA;QAErD,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,MAAM;AAC5B,YAAA,GAAG,KAAK;YACR,SAAS,EACP,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,qBAAqB,CAAC;gBACnD,oBAAoB;AACvB,SAAA,CAAC,CAAC;;AAGL,IAAA,mBAAmB,CAAC,MAAuC,EAAA;QACzD,OAAO,aAAa,CAClB,MAAM,CAAC,GAAG,CAAC,CAAC,KAAoC,KAC9C,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAC9C,CACF;;uGA7GQ,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAnB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,cAFlB,MAAM,EAAA,CAAA;;2FAEP,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAH/B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;MCIY,iBAAiB,CAAA;AAC5B,IAAA,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;AACzC,IAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;IAEjD,iBAAiB,GAAG,KAAK,EAAE;AAC3B,IAAA,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC;AACtB,QAAA,SAAS,EAAE,CAAC,KAAyB,KACnC,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;AACpD,KAAA,CAAC;AAEF,IAAA,SAAS,GAAG,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC;AAEvE,IAAA,WAAA,GAAA;QACE,MAAM,CAAC,MAAK;YACV,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;AACrD,SAAC,CAAC;;;;;;;;;;;AAaJ,IAAA,IAAI,CAAC,KAA4B,EAAA;QAC/B,aAAa,CACX,IAAI,CAAC,eAAe,CAAC,0BAA0B,CAC7C,KAAK,CAAC,aAAa,EACnB,KAAK,CAAC,YAAY,CACnB,CACF,CAAC,IAAI,CAAC,MAAK;;;YAGV,qBAAqB,CAAC,MAAK;gBACzB,QAAQ,CAAC,gBAAgB,CAAC,qBAAqB,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,KAAI;oBAC9D,MAAM,OAAO,GAAG,EAAiB;oBACjC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;AAC/C,oBAAA,KAAK,OAAO,CAAC,WAAW,CAAC;oBACzB,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;AAC9C,iBAAC,CAAC;AACJ,aAAC,CAAC;AACJ,SAAC,CAAC;;uGA7CO,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAjB,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,WAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAUwB,gBAAgB,EA1B1D,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA;;;;AAIT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,0DAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EALS,WAAW,EAAA,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,EAAA,iBAAA,EAAA,wBAAA,EAAA,IAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,4BAAA,EAAA,2BAAA,EAAA,0BAAA,EAAA,+BAAA,EAAA,2BAAA,EAAA,6BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,oBAAA,EAAA,oBAAA,EAAA,mBAAA,EAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAiBV,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAnB7B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,WAAW,EACZ,OAAA,EAAA,CAAC,WAAW,CAAC,EACZ,QAAA,EAAA;;;;AAIT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,0DAAA,CAAA,EAAA;;;MC8DU,sBAAsB,CAAA;;AAEjC,IAAA,SAAS,GAAG,KAAK,CAAC,QAAQ,EAAa;AACf,IAAA,mBAAmB,GAAG,IAAI,YAAY,EAAE;AAEhE,IAAA,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC;IAE5B,GAAG,GAAG,EAAE;AACR,IAAA,iBAAiB,GAAG,MAAM,CAAC,KAAK,CAAC;IACjC,WAAW,GAAY,EAAE;AACzB,IAAA,OAAO,GAAG;AACR,QAAA,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE;AACvC,QAAA,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,QAAQ,EAAE;AAC3C,QAAA,EAAE,IAAI,EAAE,mBAAmB,EAAE,MAAM,EAAE,WAAW,EAAE;AAClD,QAAA,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,eAAe,EAAE;AACpD,QAAA,EAAE,IAAI,EAAE,sBAAsB,EAAE,MAAM,EAAE,qBAAqB,EAAE;AAC/D,QAAA,EAAE,IAAI,EAAE,sBAAsB,EAAE,MAAM,EAAE,mBAAmB,EAAE;AAC7D,QAAA,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,gBAAgB,EAAE;AAC/C,QAAA,EAAE,IAAI,EAAE,mBAAmB,EAAE,MAAM,EAAE,aAAa,EAAE;AACpD,QAAA,EAAE,IAAI,EAAE,qBAAqB,EAAE,MAAM,EAAE,eAAe,EAAE;AACxD,QAAA,EAAE,IAAI,EAAE,oBAAoB,EAAE,MAAM,EAAE,cAAc,EAAE;AACtD,QAAA,EAAE,IAAI,EAAE,sBAAsB,EAAE,MAAM,EAAE,aAAa,EAAE;KACxD;AAED,IAAA,YAAY,CAAC,GAAW,EAAA;;AAEtB,QAAA,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC;AACzB,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE;;IAGjC,WAAW,CAAC,GAAW,EAAE,SAAiB,EAAA;QACxC,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;QAC5C,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC;AAChD,QAAA,OAAO,CAAC,SAAS,GAAG,SAAS,IAAI,EAAE;AACnC,QAAA,OAAO,CAAC,SAAS,GAAG,KAAK,CAAC,QAAQ,EAAE;QACpC,KAAK,CAAC,cAAc,EAAE;AACtB,QAAA,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC;AACzB,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE;;IAGjC,SAAS,GAAA;AACP,QAAA,QAAQ,CAAC,WAAW,CAAC,cAAc,CAAC;AACpC,QAAA,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC;AAC9B,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE;;IAGjC,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AACrD,QAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC;;IAGlC,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,SAAS,EAAE,CAAC,eAAe,EAAE;AAClC,QAAA,IAAI,CAAC,SAAS,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,EAAG,CAAC;QAClD,QAAQ,CAAC,WAAW,CAAC,YAAY,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC;AACnD,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE;;uGAvDtB,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAtB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAsB,EAlEvB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,mBAAA,EAAA,cAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,kdAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAhCS,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAmExC,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBArElC,SAAS;+BACE,gBAAgB,EAAA,OAAA,EACjB,CAAC,aAAa,EAAE,aAAa,EAAE,WAAW,CAAC,EAC1C,QAAA,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,kdAAA,CAAA,EAAA;8BAsCuB,mBAAmB,EAAA,CAAA;sBAA1C,MAAM;uBAAC,cAAc;;;MC7EX,oBAAoB,CAAA;AAC/B,IAAA,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;AACzB,IAAA,UAAU;AAEV,IAAA,oCAAoC,CAAC,MAAa,EAAA;AAChD,QAAA,OAAO,EAAE,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC,IAAI,CACnC,MAAM,CAAC,CAAC,SAAS,KAAK,SAAS,KAAK,IAAI,CAAC,EACzC,MAAM,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,UAAU,GAAG,CAAC,CAAC,EAC/C,MAAM,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,QAAQ,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,EACtD,MAAM,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC,EAClD,GAAG,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,WAAW,EAAE,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;AACtE,QAAA,GAAG,CAAC,CAAC,SAAS,MAAM;YAClB,SAAS;AACT,YAAA,MAAM,EAAE,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC;AAC3C,SAAA,CAAC,CAAC,EACH,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC,mBAAmB,CAAC,MAAqB,CAAC,CAAC,EACvE,UAAU,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC,CACnE;;AAGH,IAAA,kBAAkB,CAAC,SAAoB,EAAA;QACrC,MAAM,KAAK,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC;QACrC,OAAO,KAAK,CAAC,uBAAuB,CAAC,QAAQ,KAAK,IAAI,CAAC;cAClD,KAAK,CAAC;AACT,cAAE,KAAK,CAAC,uBAAuB,CAAC,aAAa;;AAGjD,IAAA,mBAAmB,CAAC,MAA0B,EAAA;;;QAG5C,QACE,CAAC,CAAC,MAAM;AACR,aAAC,MAAM,CAAC,OAAO,CAAC,oBAAoB,CAAC,KAAK;AACxC,kBAAE;kBACA,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,KAAK;AACvC,sBAAE;AACF,sBAAE,KAAK,CAAC;;AAId,IAAA,mBAAmB,CAAC,SAAoB,EAAA;AACtC,QAAA,OAAO,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CACrC,GAAG,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,qBAAqB,EAAE,CAAC,EAC7C,GAAG,CAAC,CAAC,aAAa,KAAK,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;;;;;QAKzD,GAAG,CAAC,CAAC,UAAU,MAAM,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,CAAC,EACnD,GAAG,CAAC,CAAC,UAAU,KAAI;AACjB,YAAA,MAAM,aAAa,GAAG,UAAU,CAAC,MAAM,CACrC,IAAI,eAAe,CAAC,sBAAsB,CAAC,CAC5C;AACD,YAAA,aAAa,CAAC,QAAQ,CAAC,WAAW,EAAE,SAAS,CAAC;AAE9C,YAAA,aAAa,CACX,KAAK,CACH,UAAU,CAAC,aAAa,EAAE,EAC1B,aAAa,CAAC,QAAQ,CAAC,mBAAmB,CAC3C,CAAC,IAAI,CACJ,GAAG,CAAC,MAAM,UAAU,CAAC,OAAO,EAAE,CAAC,EAC/B,GAAG,CAAC,MAAM,SAAS,CAAC,eAAe,EAAE,CAAC,CACvC,CACF;AACD,YAAA,OAAO,IAAI;SACZ,CAAC,CACH;;AAGH,IAAA,aAAa,CAAC,aAAsB,EAAA;AAClC,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;AACzB,YAAA,WAAW,EAAE,IAAI;AACjB,YAAA,aAAa,EAAE,kCAAkC;YACjD,gBAAgB,EAAE,IAAI,CAAC;AACpB,iBAAA,QAAQ;iBACR,mBAAmB,CAAC,aAAa;AACjC,iBAAA,aAAa,CAAC;AACb,gBAAA;AACE,oBAAA,OAAO,EAAE,CAAC;AACV,oBAAA,OAAO,EAAE,OAAO;AAChB,oBAAA,OAAO,EAAE,QAAQ;AACjB,oBAAA,QAAQ,EAAE,OAAO;AACjB,oBAAA,QAAQ,EAAE,KAAK;AAChB,iBAAA;aACF,CAAC;AACL,SAAA,CAAC;;uGArFO,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAApB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,cAFnB,MAAM,EAAA,CAAA;;2FAEP,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAHhC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;MCqBY,qBAAqB,CAAA;AAChC,IAAA,oBAAoB,GAAG,MAAM,CAAC,oBAAoB,CAAC;AACnD,IAAA,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;AACzC,IAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;AAEjD,IAAA,WAAA,GAAA;QACE,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,CAC9C,kBAAkB,EAAE,EACpB,YAAY,CAAC,GAAG,CAAC,EACjB,SAAS,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC,EAClD,GAAG,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAC/C,CAAC,SAAS,EAAE;;AAGf,IAAA,MAAM,GAAG,KAAK,CAAqB,EAAE,CAAC;;IAGtC,eAAe,GAAG,MAAM,EAAkC;AAC1D,IAAA,aAAa,GAAG,KAAK,CAAC,QAAQ,CAAC;QAC7B,SAAS,EAAE,CAAC,KAAc,KACxB,KAAK,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC;AACxE,KAAA,CAAC;;IAGF,WAAW,GAAG,MAAM,EAAsB;IAG1C,kBAAkB,GAAG,aAAa,CAAC;AACjC,QAAA,MAAM,CAAC,cAAc,CAAC,CAAC,oBAAoB;QAC3C,IAAI,CAAC,mBAAmB,CAAC,WAAW;AACpC,QAAA,SAAS,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC,IAAI,CACzC,YAAY,CAAC,GAAG,CAAC,EACjB,SAAS,CAAC,CAAC,KAAK,KACd,IAAI,CAAC,oBAAoB,CAAC,oCAAoC,CAAC,KAAK,CAAC,CACtE;AAEJ,KAAA,CAAC;uGApCS,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,EAPtB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA;;;;;GAKT,EANS,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,iBAAiB,0FAAE,SAAS,EAAA,IAAA,EAAA,OAAA,EAAA,CAAA,EAAA,CAAA;;2FAQ3B,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAVjC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,gBAAgB;AAC1B,oBAAA,OAAO,EAAE,CAAC,iBAAiB,EAAE,SAAS,CAAC;AACvC,oBAAA,QAAQ,EAAE;;;;;AAKT,EAAA,CAAA;AACF,iBAAA;;;AC5BD;;AAEG;;ACFH;;AAEG;;;;"}
|
|
1
|
+
{"version":3,"file":"tmdjr-ngx-editor-js2.mjs","sources":["../../../projects/ngx-editor-js2/src/lib/directives/control-accessor.directive.ts","../../../projects/ngx-editor-js2/src/lib/directives/autofocus.directive.ts","../../../projects/ngx-editor-js2/src/lib/ngx-editor-js2.interface.ts","../../../projects/ngx-editor-js2/src/lib/components/toolbar/toolbar-block-options.component.ts","../../../projects/ngx-editor-js2/src/lib/components/toolbar/toolbar-blocks.component.ts","../../../projects/ngx-editor-js2/src/lib/components/toolbar/toolbar.component.ts","../../../projects/ngx-editor-js2/src/lib/services/block-movement.service.ts","../../../projects/ngx-editor-js2/src/lib/services/editor-js.service.ts","../../../projects/ngx-editor-js2/src/lib/services/tool-fab.service.ts","../../../projects/ngx-editor-js2/src/lib/directives/toolbar-fab.directive.ts","../../../projects/ngx-editor-js2/src/lib/directives/clean-paste-data.directive.ts","../../../projects/ngx-editor-js2/src/lib/components/blocks/header-block.component.ts","../../../projects/ngx-editor-js2/src/lib/components/blocks/paragraph-block.component.ts","../../../projects/ngx-editor-js2/src/lib/services/ngx-editor-js2.service.ts","../../../projects/ngx-editor-js2/src/lib/components/editor-js.component.ts","../../../projects/ngx-editor-js2/src/lib/components/toolbar-inline/toolbar-inline.component.ts","../../../projects/ngx-editor-js2/src/lib/services/toolbar-inline.service.ts","../../../projects/ngx-editor-js2/src/lib/ngx-editor-js2.component.ts","../../../projects/ngx-editor-js2/src/public-api.ts","../../../projects/ngx-editor-js2/src/tmdjr-ngx-editor-js2.ts"],"sourcesContent":["import {\n Directive,\n ElementRef,\n forwardRef,\n HostListener,\n inject,\n input,\n} from '@angular/core';\nimport { NG_VALUE_ACCESSOR, ControlValueAccessor } from '@angular/forms';\n\n@Directive({\n selector: '[controlAccessor]',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ControlAccessorDirective),\n multi: true,\n },\n ],\n})\nexport class ControlAccessorDirective implements ControlValueAccessor {\n elementRef = inject(ElementRef);\n\n defaultValue = input<string>();\n\n onChange: (value: any) => void = () => {};\n onTouched: () => void = () => {};\n\n writeValue(): void {\n this.elementRef.nativeElement.innerHTML = this.defaultValue() || '';\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n @HostListener('blur')\n onBlur(): void {\n this.onTouched();\n }\n\n @HostListener('input')\n onInput(): void {\n this.onChange(this.elementRef.nativeElement.innerHTML);\n }\n}\n","import {\n AfterContentInit,\n Directive,\n ElementRef,\n inject,\n input,\n} from '@angular/core';\n\n@Directive({\n selector: '[autofocus]',\n})\nexport class AutofocusDirective implements AfterContentInit {\n elementRef = inject(ElementRef);\n\n autofocus = input<boolean>(false);\n\n ngAfterContentInit() {\n this.autofocus() && this.elementRef.nativeElement.focus?.();\n }\n}\n","import { InjectionToken, InputSignal, Signal, Type } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { Observable } from 'rxjs';\n\nexport interface NgxEditorjsOptions {\n consumerSupportedBlocks?: SupportedBlock[];\n}\nexport interface SupportedBlock {\n name: string;\n componentInstanceName: string;\n component: Type<BlockComponent>;\n}\n\nexport interface NgxEditorJsBlock {\n blockId: string;\n sortIndex: number;\n componentInstanceName: string;\n dataClean: string;\n savedAction?: string;\n}\nexport interface NgxEditorJsBlockWithComponent extends NgxEditorJsBlock {\n component: Type<BlockComponent>;\n autofocus?: boolean;\n}\n\nexport interface BlockComponent {\n sortIndex: InputSignal<number>;\n componentInstanceName: string;\n formControlName: InputSignal<string>;\n formGroup: InputSignal<FormGroup>;\n blockOptionActions: InputSignal<BlockOptionAction[]>;\n savedAction: Signal<string>;\n actionCallback?: (string: string) => void;\n}\n\nexport interface BlockOptionAction {\n action: string;\n icon?: string;\n text?: string;\n}\n\nexport enum MovePositionActions {\n UP = 'UP',\n DOWN = 'DOWN',\n DELETE = 'DELETE',\n}\n\nexport type TAddBlockCallback = (\n block: Type<BlockComponent>,\n index: number\n) => Observable<unknown>;\n\nexport type TMoveBlockPositionCallback = (\n action: MovePositionActions,\n index: number\n) => Observable<unknown>;\n","import { Component, input, output } from '@angular/core';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatRipple } from '@angular/material/core';\nimport {\n BlockOptionAction,\n MovePositionActions,\n} from '../../ngx-editor-js2.interface';\n\n@Component({\n selector: 'toolbar-block-options',\n imports: [MatIcon, MatRipple],\n template: `\n <div class=\"actions-panel\">\n <div class=\"action-btn\" matRipple (click)=\"movePosition(Position.UP)\">\n <mat-icon>arrow_upward</mat-icon>\n </div>\n <div class=\"action-btn\" matRipple (click)=\"movePosition(Position.DELETE)\">\n <mat-icon>delete</mat-icon>\n </div>\n <div class=\"action-btn\" matRipple (click)=\"movePosition(Position.DOWN)\">\n <mat-icon>arrow_downward</mat-icon>\n </div>\n @for(blockOptionAction of blockOptionActions(); track $index) {\n <div\n class=\"action-btn\"\n (click)=\"handleAction(blockOptionAction.action)\"\n matRipple\n >\n @if (blockOptionAction.text) {\n {{ blockOptionAction.text }}\n } @else {\n <mat-icon>{{ blockOptionAction.icon }}</mat-icon>\n }\n </div>\n }\n </div>\n `,\n styles: [\n `\n :host {\n .actions-panel {\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n gap: 1px;\n width: 128px;\n max-height: 128px;\n border-radius: 4px;\n overflow: auto;\n background: var(--mat-sys-secondary);\n box-shadow: var(--mat-sys-level5);\n .action-btn {\n cursor: pointer;\n width: 42px;\n height: 42px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 4px;\n\n color: var(--mat-sys-on-secondary);\n background: var(--mat-sys-secondary);\n &:hover,\n &:focus {\n color: var(--mat-sys-secondary);\n background: var(--mat-sys-on-secondary);\n }\n }\n }\n }\n `,\n ],\n})\nexport class ToolbarBlockOptionsComponent {\n readonly Position = MovePositionActions;\n\n blockOptionActions = input<BlockOptionAction[]>();\n\n handleActionEmitter = output<string>({ alias: 'handleAction' });\n moveBlockPositionEmitter = output<MovePositionActions>({\n alias: 'moveBlockPosition',\n });\n\n movePosition(action: MovePositionActions) {\n this.moveBlockPositionEmitter.emit(action);\n }\n\n handleAction(action: string) {\n this.handleActionEmitter.emit(action);\n }\n}\n","import { AsyncPipe } from '@angular/common';\nimport { Component, input, output, Type } from '@angular/core';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { MatRipple } from '@angular/material/core';\nimport { MatFormField, MatLabel } from '@angular/material/form-field';\nimport { MatInput } from '@angular/material/input';\nimport { MatList, MatListItem } from '@angular/material/list';\nimport { combineLatest, map, startWith } from 'rxjs';\nimport { BlockComponent, SupportedBlock } from '../../ngx-editor-js2.interface';\n\n@Component({\n selector: 'toolbar-blocks',\n imports: [\n MatFormField,\n MatInput,\n MatList,\n MatListItem,\n MatRipple,\n MatLabel,\n ReactiveFormsModule,\n AsyncPipe,\n ],\n template: `\n <div class=\"block-list-container\">\n <mat-form-field appearance=\"fill\" color=\"accent\">\n <mat-label>Filter</mat-label>\n <input\n class=\"filter-text\"\n matInput\n [formControl]=\"blockCtrl\"\n [autofocus]=\"true\"\n />\n </mat-form-field>\n @if(filteredBlocks$ | async; as filteredBlocks) {\n <mat-list class=\"block-list-panel\">\n @if (filteredBlocks.length <= 0) {\n <mat-list-item matRipple mat-list-item> No Results </mat-list-item>\n } @else { @for(block of filteredBlocks; track $index) {\n <mat-list-item matRipple mat-list-item (click)=\"addBlock(block)\">\n {{ block.name }}\n </mat-list-item>\n } }\n </mat-list>\n }\n </div>\n `,\n styles: [\n `\n :host {\n .mat-mdc-list-base {\n padding-top: 0px;\n margin-top: -14px;\n }\n\n .block-list-container {\n border-radius: 4px;\n background: var(--mat-sys-secondary-container);\n box-shadow: var(--mat-sys-level5);\n }\n\n .block-list-panel {\n max-width: 280px;\n max-height: 240px;\n border-bottom-left-radius: 4px;\n border-bottom-right-radius: 4px;\n overflow: auto;\n color: var(--mat-sys-on-secondary-container);\n }\n\n mat-list-item {\n cursor: pointer;\n user-select: none;\n &:hover,\n &:focus {\n background: var(--mat-sys-surface-bright);\n }\n }\n }\n `,\n ],\n})\nexport class ToolbarBlocksComponent {\n addBlockEmitter = output<Type<BlockComponent>>({ alias: 'addBlock' });\n supportedBlocks = input<SupportedBlock[]>([]);\n supportedBlocks$ = toObservable(this.supportedBlocks);\n\n blockCtrl = new FormControl([]);\n filter$ = this.blockCtrl.valueChanges.pipe(startWith(''));\n\n filteredBlocks$ = combineLatest([this.supportedBlocks$, this.filter$]).pipe(\n map(([blocks, filterString]) => {\n if (typeof filterString !== 'string') filterString = '';\n filterString = filterString.replace(/\\\\/g, '');\n const pattern = filterString\n ?.split('')\n .map((v: string) => `(?=.*${v})`)\n .join('');\n const regex = new RegExp(`${pattern}`, 'gi');\n\n // return blocks.filter(block => regex.exec(block));\n return blocks.filter((block) => block.name.match(regex));\n })\n );\n\n addBlock(block: SupportedBlock) {\n this.addBlockEmitter.emit(block?.component);\n }\n}\n","import { Component, input, signal, Type } from '@angular/core';\nimport { MatRipple } from '@angular/material/core';\nimport { CdkDragHandle } from '@angular/cdk/drag-drop';\nimport { OverlayModule } from '@angular/cdk/overlay';\nimport { ToolbarBlockOptionsComponent } from './toolbar-block-options.component';\nimport { ToolbarBlocksComponent } from './toolbar-blocks.component';\nimport { firstValueFrom } from 'rxjs';\nimport {\n BlockComponent,\n BlockOptionAction,\n MovePositionActions,\n SupportedBlock,\n TAddBlockCallback,\n TMoveBlockPositionCallback,\n} from '../../ngx-editor-js2.interface';\n\n@Component({\n selector: 'toolbar',\n imports: [\n CdkDragHandle,\n MatRipple,\n OverlayModule,\n ToolbarBlockOptionsComponent,\n ToolbarBlocksComponent,\n ],\n template: `\n <div class=\"toolbar-buttons-container\">\n <div\n class=\"toolbar-buttons\"\n #blockListTigger=\"cdkOverlayOrigin\"\n cdkOverlayOrigin\n matRipple\n (click)=\"openBlocksList()\"\n >\n <span class=\"material-icons\">add</span>\n </div>\n <div\n class=\"toolbar-buttons\"\n #blockOptionListTigger=\"cdkOverlayOrigin\"\n cdkDragHandle\n cdkOverlayOrigin\n matRipple\n (click)=\"openBlockOptionList()\"\n >\n <span class=\"material-icons\">drag_indicator</span>\n </div>\n </div>\n\n <!-- Block type search list -->\n <ng-template\n cdkConnectedOverlay\n (overlayOutsideClick)=\"openBlocks.set(false)\"\n [cdkConnectedOverlayOrigin]=\"blockListTigger\"\n [cdkConnectedOverlayOpen]=\"openBlocks()\"\n [cdkConnectedOverlayHasBackdrop]=\"true\"\n [cdkConnectedOverlayOffsetY]=\"15\"\n [cdkConnectedOverlayBackdropClass]=\"'cdk-overlay-transparent-backdrop'\"\n >\n <toolbar-blocks\n [supportedBlocks]=\"supportedBlocks()\"\n (addBlock)=\"addBlock($event)\"\n ></toolbar-blocks>\n </ng-template>\n\n <!-- Options List-->\n <ng-template\n cdkConnectedOverlay\n (overlayOutsideClick)=\"openBlocksOption.set(false)\"\n [cdkConnectedOverlayOrigin]=\"blockOptionListTigger\"\n [cdkConnectedOverlayOpen]=\"openBlocksOption()\"\n [cdkConnectedOverlayHasBackdrop]=\"true\"\n [cdkConnectedOverlayOffsetX]=\"-49\"\n [cdkConnectedOverlayOffsetY]=\"15\"\n [cdkConnectedOverlayBackdropClass]=\"'cdk-overlay-transparent-backdrop'\"\n >\n <toolbar-block-options\n [blockOptionActions]=\"blockOptionActions()\"\n (handleAction)=\"handleAction($event)\"\n (moveBlockPosition)=\"moveBlockPosition($event)\"\n ></toolbar-block-options>\n </ng-template>\n `,\n styles: [\n `\n :host {\n .toolbar-buttons-container {\n position: relative;\n display: flex;\n gap: 10px;\n }\n .toolbar-buttons {\n cursor: pointer;\n width: 30px;\n height: 30px;\n display: flex;\n justify-content: center;\n align-items: center;\n border-radius: 4px;\n margin-bottom: 14px;\n user-select: none;\n color: var(--mat-sys-on-tertiary-container);\n background: var(--mat-sys-tertiary-container);\n box-shadow: var(--mat-sys-level2);\n }\n .toolbar-buttons {\n &:hover,\n &:focus {\n background: var(--mat-sys-surface-bright);\n }\n }\n }\n @media (min-width: 768px) {\n :host {\n position: absolute;\n margin-left: -80px;\n top: 0;\n }\n }\n `,\n ],\n})\nexport class ToolbarComponent {\n componentContextPositionIndex = input.required<number>();\n supportedBlocks = input.required<SupportedBlock[]>();\n blockOptionActions = input<BlockOptionAction[]>();\n actionCallback = input<(action: string) => void>(() => () => {});\n formControlName = input<string>();\n addBlockCallback = input.required<TAddBlockCallback>();\n moveBlockPositionCallback = input.required<TMoveBlockPositionCallback>();\n\n openBlocks = signal<boolean>(false);\n openBlocksOption = signal<boolean>(false);\n\n openBlocksList() {\n this.openBlocks.update((prev) => !prev);\n }\n\n openBlockOptionList() {\n this.openBlocksOption.update((prev) => !prev);\n }\n\n moveBlockPosition(action: MovePositionActions) {\n this.closeLists();\n this.moveBlockPositionCallback()(\n action,\n this.componentContextPositionIndex()\n );\n }\n\n handleAction(action: string) {\n this.closeLists();\n this.actionCallback()(action);\n }\n\n addBlock(block: Type<BlockComponent>) {\n this.closeLists();\n firstValueFrom(\n this.addBlockCallback()(block, this.componentContextPositionIndex())\n );\n }\n\n closeLists() {\n this.openBlocks.set(false);\n this.openBlocksOption.set(false);\n }\n}\n","import { ComponentRef, Injectable, ViewContainerRef } from '@angular/core';\nimport { defaultIfEmpty, filter, from, map, of, tap } from 'rxjs';\nimport {\n BlockComponent,\n MovePositionActions,\n} from '../ngx-editor-js2.interface';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class BlockMovementService {\n componentRefMap = new Map<object, ComponentRef<BlockComponent>>();\n\n clearComponentRefs() {\n this.componentRefMap.clear();\n }\n\n getNgxEditorJsBlocks() {\n return of(Array.from(this.componentRefMap.values()));\n }\n\n newComponentAttached(componentRef: ComponentRef<BlockComponent>) {\n this.componentRefMap.set(componentRef.instance, componentRef);\n }\n\n updateComponentIndices(ngxEditor: ViewContainerRef) {\n return from(this.componentRefMap.values()).pipe(\n tap((componentRef: any) =>\n componentRef.setInput(\n 'sortIndex',\n ngxEditor.indexOf(componentRef.hostView)\n )\n )\n );\n }\n\n moveBlockComponentPosition(\n ngxEditor: ViewContainerRef,\n action: MovePositionActions,\n index: number\n ) {\n return of(Array.from(this.componentRefMap.values())).pipe(\n map((componentRefs) =>\n componentRefs.find(\n (componentRef) =>\n ngxEditor.indexOf(componentRef.hostView) === index - 1\n )\n ),\n filter((componentRef) => !!componentRef),\n map((componentRef) => ({\n componentRef,\n totalComponents: ngxEditor.length - 1,\n currentIndex: ngxEditor.indexOf(componentRef.hostView),\n newIndex: (index: number) =>\n action === MovePositionActions.UP ? index - 1 : index + 1,\n })),\n map(({ componentRef, totalComponents, currentIndex, newIndex }) => ({\n componentRef,\n currentIndex,\n newIndex: Math.max(\n 0,\n Math.min(newIndex(currentIndex), totalComponents)\n ),\n })),\n filter(({ currentIndex, newIndex }) => currentIndex !== newIndex),\n tap(({ componentRef, newIndex }) => {\n ngxEditor.move(componentRef.hostView, newIndex);\n componentRef.setInput('sortIndex', newIndex);\n componentRef.setInput('autofocus', true);\n }),\n defaultIfEmpty(false)\n );\n }\n\n removeBlockComponent(\n ngxEditor: ViewContainerRef,\n index: number,\n clear = false\n ) {\n return of(Array.from(this.componentRefMap.values())).pipe(\n filter((componentRefs) => clear || componentRefs.length !== 1),\n map((componentRefs) =>\n componentRefs.find(\n (componentRef) =>\n ngxEditor.indexOf(componentRef.hostView) === index - 1\n )\n ),\n map((componentRef) =>\n this.componentRefMap.delete(componentRef?.instance ?? {})\n ),\n tap((successful) => successful && ngxEditor.remove(index - 1)),\n defaultIfEmpty(false)\n );\n }\n}\n","import { inject, Injectable, Type, ViewContainerRef } from '@angular/core';\nimport { FormBuilder } from '@angular/forms';\nimport {\n combineLatest,\n defaultIfEmpty,\n filter,\n forkJoin,\n iif,\n lastValueFrom,\n map,\n mergeMap,\n Observable,\n of,\n switchMap,\n tap,\n} from 'rxjs';\nimport {\n BlockComponent,\n MovePositionActions,\n NgxEditorJsBlock,\n NgxEditorJsBlockWithComponent,\n} from '../ngx-editor-js2.interface';\nimport { BlockMovementService } from './block-movement.service';\n\nconst createUID = () => Math.random().toString(36).substring(7);\n@Injectable({\n providedIn: 'root',\n})\nexport class EditorJsService {\n formBuilder = inject(FormBuilder);\n blockMovementService = inject(BlockMovementService);\n\n componentRefMap = new Map<object, unknown>();\n\n ngxEditor!: ViewContainerRef;\n formGroup = this.formBuilder.group({});\n\n // TODO - Handle this idiomatically\n setNgxEditor(ngxEditor: ViewContainerRef) {\n this.ngxEditor = ngxEditor;\n }\n\n getBlocks$(): Observable<NgxEditorJsBlock[]> {\n return new Observable<NgxEditorJsBlock[]>((observer) => {\n lastValueFrom(\n this.blockMovementService.getNgxEditorJsBlocks().pipe(\n map((componentRefs) =>\n componentRefs.map<NgxEditorJsBlock>(({ instance }) => ({\n blockId: instance.formControlName(),\n sortIndex: instance.sortIndex(),\n componentInstanceName: instance.componentInstanceName,\n savedAction: instance.savedAction(),\n dataClean: instance.formGroup().get(instance.formControlName())\n ?.value,\n }))\n ),\n map((blocks) => blocks.sort((a, b) => a.sortIndex - b.sortIndex))\n )\n ).then((blocks) => {\n observer.next(blocks);\n observer.complete();\n });\n });\n }\n\n createNgxEditorJsBlockWithComponent(\n blockComponent: Type<BlockComponent>,\n componentContextPositionIndex: number\n ) {\n return of<NgxEditorJsBlockWithComponent>({\n blockId: createUID(),\n sortIndex: componentContextPositionIndex,\n componentInstanceName: blockComponent.name,\n component: blockComponent,\n // TODO - Force content-type for dataClean? JSON, HTML, etc.\n // TODO - And maybe rename dataClean to just data?\n dataClean: '',\n autofocus: true,\n });\n }\n\n addBlockComponent(\n ngxEditorJsBlock: NgxEditorJsBlockWithComponent,\n emitEvent = true\n ): Observable<void> {\n return forkJoin([\n this.createFormGroupControl(ngxEditorJsBlock, emitEvent),\n this.attachComponent(ngxEditorJsBlock),\n this.blockMovementService.updateComponentIndices(this.ngxEditor),\n ]).pipe(map(() => void 0));\n }\n\n createFormGroupControl({\n blockId,\n dataClean,\n }: NgxEditorJsBlockWithComponent, emitEvent = true) {\n return of(this.formBuilder.control(dataClean, [])).pipe(\n tap((formControl) => this.formGroup.addControl(blockId, formControl, { emitEvent }))\n );\n }\n\n attachComponent({\n component,\n blockId,\n autofocus,\n savedAction,\n sortIndex: index,\n }: NgxEditorJsBlockWithComponent) {\n return of(blockId).pipe(\n map((controlName) => {\n const componentRef = this.ngxEditor.createComponent(component, {\n index,\n });\n\n (componentRef.location.nativeElement as HTMLElement)\n .classList.add('ngx-editor-js2-block');\n\n componentRef.setInput('sortIndex', index);\n componentRef.setInput('formGroup', this.formGroup);\n componentRef.setInput('formControlName', controlName);\n componentRef.setInput('autofocus', autofocus);\n\n savedAction && componentRef.instance.actionCallback?.(savedAction);\n\n this.blockMovementService.newComponentAttached(componentRef);\n return componentRef;\n })\n );\n }\n\n determineMovePositionAction(\n action: MovePositionActions,\n index: number,\n formControlName: string\n ) {\n return iif(\n () => action === MovePositionActions.DELETE,\n this.removeBlockComponent(index, formControlName),\n this.blockMovementService.moveBlockComponentPosition(\n this.ngxEditor,\n action,\n index\n )\n ).pipe(\n switchMap(() =>\n this.blockMovementService.updateComponentIndices(this.ngxEditor)\n )\n );\n }\n\n moveBlockComponentPosition(previousIndex: number, currentIndex: number) {\n return of(this.ngxEditor.get(previousIndex)).pipe(\n filter((viewRef) => !!viewRef),\n tap((viewRef) => {\n this.ngxEditor.move(viewRef, currentIndex);\n }),\n switchMap(() =>\n this.blockMovementService.updateComponentIndices(this.ngxEditor)\n ),\n defaultIfEmpty(false)\n );\n }\n\n removeBlockComponent(index: number, formControlName: string, clear = false) {\n return combineLatest([\n this.blockMovementService.removeBlockComponent(\n this.ngxEditor,\n index,\n clear\n ),\n of(this.formGroup.removeControl(formControlName)),\n ]);\n }\n\n clearBlocks() {\n return this.blockMovementService.getNgxEditorJsBlocks().pipe(\n filter((componentRefs) => componentRefs.length > 0),\n map((componentRefs) =>\n componentRefs.sort(\n (a, b) => a.instance.sortIndex() - b.instance.sortIndex()\n )\n ),\n mergeMap((componentRefs) =>\n forkJoin(\n Array.from(componentRefs.values()).map((componentRef) =>\n this.removeBlockComponent(\n componentRef.instance.sortIndex() + 1,\n componentRef.instance.formControlName(),\n true\n )\n )\n )\n ),\n switchMap(() =>\n this.blockMovementService.updateComponentIndices(this.ngxEditor)\n ),\n tap(() => {\n this.blockMovementService.clearComponentRefs();\n this.ngxEditor.clear();\n }),\n defaultIfEmpty(false)\n );\n }\n}\n","import { inject, Injectable, Type, ViewContainerRef } from '@angular/core';\nimport {\n BehaviorSubject,\n combineLatest,\n distinctUntilChanged,\n filter,\n lastValueFrom,\n map,\n switchMap,\n tap,\n} from 'rxjs';\nimport { ToolbarComponent } from '../components/toolbar/toolbar.component';\nimport { EditorJsService } from './editor-js.service';\nimport { NgxEditorJs2Service } from './ngx-editor-js2.service';\nimport {\n BlockOptionAction,\n BlockComponent,\n MovePositionActions,\n} from '../ngx-editor-js2.interface';\n\ntype ComponentContext = {\n index: number;\n viewContainerRef: ViewContainerRef;\n blockOptionActions: BlockOptionAction[];\n actionCallback: (v: string) => void;\n formControlName: string;\n} | null;\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ToolFabService {\n ngxEditorJs2Service = inject(NgxEditorJs2Service);\n editorJsService = inject(EditorJsService);\n // I need to explain this in detail so the future me can understand this.\n componentContext = new BehaviorSubject<ComponentContext>(null);\n toolbarComponentRef$ = combineLatest({\n componentContext: this.componentContext.asObservable(),\n supportedBlocks: this.ngxEditorJs2Service.supportedBlocks$,\n }).pipe(\n filter(({ componentContext }) => componentContext !== null),\n distinctUntilChanged(\n ({ componentContext: previous }, { componentContext: current }) =>\n previous!.index !== current!.index ||\n previous!.viewContainerRef !== current!.viewContainerRef\n ? (previous!.viewContainerRef.clear(), false)\n : true\n ),\n map(({ componentContext, supportedBlocks }) => {\n const {\n index,\n viewContainerRef,\n blockOptionActions,\n actionCallback,\n formControlName,\n } = componentContext!;\n // TODO We will need to create a ToolbarBottomRailComponent to handle the mobile view\n const componentRef = viewContainerRef.createComponent(ToolbarComponent);\n componentRef.setInput('componentContextPositionIndex', index + 1);\n componentRef.setInput('supportedBlocks', supportedBlocks);\n componentRef.setInput('blockOptionActions', blockOptionActions);\n componentRef.setInput('actionCallback', actionCallback);\n componentRef.setInput('formControlName', formControlName);\n componentRef.setInput('addBlockCallback', this.addBlock.bind(this));\n componentRef.setInput(\n 'moveBlockPositionCallback',\n this.movePositionAction.bind(this)\n );\n return componentRef;\n }),\n );\n\n addBlock(block: Type<BlockComponent>, index: number) {\n return this.editorJsService\n .createNgxEditorJsBlockWithComponent(block, index)\n .pipe(\n switchMap((block) => this.editorJsService.addBlockComponent(block))\n );\n }\n\n movePositionAction(\n action: MovePositionActions,\n index: number,\n formControlName: string\n ) {\n return lastValueFrom(\n this.editorJsService.determineMovePositionAction(\n action,\n index,\n formControlName\n )\n );\n }\n}\n","import {\n ComponentRef,\n Directive,\n effect,\n HostListener,\n inject,\n input,\n ViewContainerRef,\n} from '@angular/core';\nimport { ToolFabService } from '../services/tool-fab.service';\nimport { Observable } from 'rxjs';\nimport { ToolbarComponent } from '../components/toolbar/toolbar.component';\nimport { BlockOptionAction } from '../ngx-editor-js2.interface';\n\nexport type ToolbarComponentRef = Observable<ComponentRef<ToolbarComponent>>;\n\n@Directive({\n selector: '[toolbarFab]',\n})\nexport class ToolbarFabDirective {\n toolFabService = inject(ToolFabService);\n viewContainerRef = inject(ViewContainerRef);\n\n autofocus = input<boolean>();\n blockOptionActions = input<BlockOptionAction[]>();\n actionCallback = input.required<(action: string) => void>();\n componentContextPositionIndex = input.required<number>();\n formControlName = input.required<string>();\n\n @HostListener('mouseenter') onMouseEnter() {\n this.toolFabService.componentContext.next({\n viewContainerRef: this.viewContainerRef,\n blockOptionActions: this.blockOptionActions() ?? [],\n actionCallback: this.actionCallback(),\n index: this.componentContextPositionIndex(),\n formControlName: this.formControlName(),\n });\n }\n\n constructor() {\n effect(() => {\n this.autofocus() && this.onMouseEnter();\n });\n }\n}\n","import {\n Directive,\n HostListener,\n} from '@angular/core';\n\n@Directive({\n selector: '[cleanPasteData]',\n})\nexport class CleanPasteDataDirective {\n @HostListener('paste', ['$event'])\n onPaste(event: Event) {\n event.preventDefault();\n const text = (event as ClipboardEvent).clipboardData?.getData('text/plain');\n document.execCommand('insertText', false, text);\n }\n}\n","import { Component, input, signal } from '@angular/core';\nimport { ControlAccessorDirective } from '../../directives/control-accessor.directive';\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { AutofocusDirective } from '../../directives/autofocus.directive';\nimport { ToolbarFabDirective } from '../../directives/toolbar-fab.directive';\nimport { CleanPasteDataDirective } from '../../directives/clean-paste-data.directive';\nimport {\n BlockComponent,\n BlockOptionAction,\n} from '../../ngx-editor-js2.interface';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { CdkDrag } from '@angular/cdk/drag-drop';\n\n@Component({\n selector: 'header-block',\n host: { class: 'cdk-drag-animating' },\n hostDirectives: [CdkDrag],\n imports: [\n ReactiveFormsModule,\n ControlAccessorDirective,\n AutofocusDirective,\n ToolbarFabDirective,\n CleanPasteDataDirective,\n NgTemplateOutlet\n],\n template: `\n@switch (savedAction()) {\n @case ('h1') {\n <h1>\n <ng-container *ngTemplateOutlet=\"sharedHeaderTemplate\"></ng-container>\n </h1>\n }\n @case ('h2') {\n <h2>\n <ng-container *ngTemplateOutlet=\"sharedHeaderTemplate\"></ng-container>\n </h2>\n }\n @case ('h3') {\n <h3>\n <ng-container *ngTemplateOutlet=\"sharedHeaderTemplate\"></ng-container>\n </h3>\n }\n @case ('h4') {\n <h4>\n <ng-container *ngTemplateOutlet=\"sharedHeaderTemplate\"></ng-container>\n </h4>\n }\n @case ('h5') {\n <h5>\n <ng-container *ngTemplateOutlet=\"sharedHeaderTemplate\"></ng-container>\n </h5>\n }\n @case ('h6') {\n <h6>\n <ng-container *ngTemplateOutlet=\"sharedHeaderTemplate\"></ng-container>\n </h6>\n }\n}\n\n<ng-template [formGroup]=\"formGroup()\" #sharedHeaderTemplate>\n <span\n controlAccessor\n cleanPasteData\n contentEditable\n toolbarFab\n [defaultValue]=\"formGroup().get(formControlName())?.value\"\n [actionCallback]=\"actionCallbackBind\"\n [blockOptionActions]=\"blockOptionActions()\"\n [autofocus]=\"autofocus()\"\n [formControlName]=\"formControlName()\"\n [componentContextPositionIndex]=\"sortIndex()\"\n ></span>\n</ng-template>\n`,\n styles: [\n `\n :host {\n display: block;\n position: relative;\n :is(h1, h2, h3, h4, h5, h6) {\n margin: 0;\n span {\n display: block;\n line-height: inherit;\n }\n }\n\n h1 > * {\n font: var(--mat-sys-display-large);\n }\n h2 > * {\n font: var(--mat-sys-display-medium);\n }\n h3 > * {\n font: var(--mat-sys-display-small);\n }\n h4 > * {\n font: var(--mat-sys-headline-large);\n }\n h5 > * {\n font: var(--mat-sys-headline-medium);\n }\n h6 > * {\n font: var(--mat-sys-headline-small);\n }\n }\n `,\n ],\n})\nexport class HeaderBlockComponent implements BlockComponent {\n sortIndex = input<number>(0);\n componentInstanceName = 'HeaderBlockComponent';\n autofocus = input<boolean>(true);\n formGroup = input.required<FormGroup>();\n formControlName = input.required<string>();\n blockOptionActions = input<BlockOptionAction[]>([\n { action: 'h1', text: 'H1' },\n { action: 'h2', text: 'H2' },\n { action: 'h3', text: 'H3' },\n { action: 'h4', text: 'H4' },\n { action: 'h5', text: 'H5' },\n { action: 'h6', text: 'H6' },\n ]);\n\n savedAction = signal<string>('h1');\n actionCallbackBind = this.actionCallback.bind(this);\n\n actionCallback(selectedAction: string) {\n this.savedAction.set(selectedAction);\n }\n}\n","import { Component, input, signal } from '@angular/core';\nimport { ControlAccessorDirective } from '../../directives/control-accessor.directive';\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { AutofocusDirective } from '../../directives/autofocus.directive';\nimport { ToolbarFabDirective } from '../../directives/toolbar-fab.directive';\nimport { CleanPasteDataDirective } from '../../directives/clean-paste-data.directive';\nimport {\n BlockComponent,\n BlockOptionAction,\n} from '../../ngx-editor-js2.interface';\nimport { NgClass } from '@angular/common';\nimport { CdkDrag } from '@angular/cdk/drag-drop';\n\n\n@Component({\n selector: 'paragraph-block',\n host: { class: 'cdk-drag-animating' },\n hostDirectives: [CdkDrag],\n imports: [\n ReactiveFormsModule,\n ControlAccessorDirective,\n AutofocusDirective,\n ToolbarFabDirective,\n CleanPasteDataDirective,\n NgClass,\n ],\n template: `\n <ng-container [formGroup]=\"formGroup()\">\n <p\n controlAccessor\n contentEditable\n toolbarFab\n cleanPasteData\n [ngClass]=\"savedAction()\"\n [defaultValue]=\"formGroup().get(formControlName())?.value\"\n [actionCallback]=\"actionCallbackBind\"\n [autofocus]=\"autofocus()\"\n [blockOptionActions]=\"blockOptionActions()\"\n [formControlName]=\"formControlName()\"\n [componentContextPositionIndex]=\"sortIndex()\"\n ></p>\n </ng-container>\n `,\n styles: [\n `\n :host {\n display: block;\n position: relative;\n .small {\n font: var(--mat-sys-body-small);\n }\n .medium {\n font: var(--mat-sys-body-medium);\n }\n .large {\n font: var(--mat-sys-body-large);\n }\n .title-small {\n font: var(--mat-sys-title-small);\n }\n .title-medium {\n font: var(--mat-sys-title-medium);\n }\n .title-large {\n font: var(--mat-sys-title-large);\n }\n }\n `,\n ],\n})\nexport class ParagraphBlockComponent implements BlockComponent {\n sortIndex = input<number>(0);\n componentInstanceName = 'ParagraphBlockComponent';\n autofocus = input<boolean>(true);\n formGroup = input.required<FormGroup>();\n formControlName = input.required<string>();\n blockOptionActions = input<BlockOptionAction[]>([\n { action: 'small', icon: 'density_small' },\n { action: 'medium', icon: 'density_medium' },\n { action: 'large', icon: 'density_large' },\n { action: 'title-small', text: 'TS' },\n { action: 'title-medium', text: 'TM' },\n { action: 'title-large', text: 'TL' },\n ]);\n\n savedAction = signal<string>('medium');\n actionCallbackBind = this.actionCallback.bind(this);\n\n actionCallback(action: string) {\n this.savedAction.update(() => action);\n }\n}\n","import { inject, Injectable, InjectionToken, Type } from '@angular/core';\nimport { HeaderBlockComponent } from '../components/blocks/header-block.component';\nimport { ParagraphBlockComponent } from '../components/blocks/paragraph-block.component';\nimport {\n BehaviorSubject,\n combineLatest,\n delay,\n exhaustMap,\n forkJoin,\n map,\n mergeMap,\n of,\n switchMap,\n} from 'rxjs';\nimport { EditorJsService } from './editor-js.service';\nimport {\n NgxEditorjsOptions,\n NgxEditorJsBlock,\n NgxEditorJsBlockWithComponent,\n SupportedBlock,\n BlockComponent,\n} from '../ngx-editor-js2.interface';\n\nexport const NGX_EDITORJS_OPTIONS = new InjectionToken<NgxEditorjsOptions>(\n 'NGX_EDITORJS_OPTIONS'\n);\n\n@Injectable({\n providedIn: 'root',\n})\nexport class NgxEditorJs2Service {\n editorJsService = inject(EditorJsService);\n\n consumerSupportedBlocks = new BehaviorSubject<SupportedBlock[]>(\n inject(NGX_EDITORJS_OPTIONS, { optional: true })?.consumerSupportedBlocks ??\n []\n );\n\n internalSupportedBlocks = new BehaviorSubject<SupportedBlock[]>([\n {\n name: 'Paragraph',\n component: ParagraphBlockComponent,\n componentInstanceName: 'ParagraphBlockComponent',\n },\n {\n name: 'Header',\n component: HeaderBlockComponent,\n componentInstanceName: 'HeaderBlockComponent',\n },\n ]);\n\n supportedBlocks$ = combineLatest([\n this.internalSupportedBlocks.asObservable(),\n this.consumerSupportedBlocks.asObservable(),\n ]).pipe(map(([internal, consumer]) => [...internal, ...consumer]));\n\n blocksToLoad = new BehaviorSubject<NgxEditorJsBlock[]>([]);\n\n loadBlocks$ = this.blocksToLoad.asObservable().pipe(\n delay(0),\n exhaustMap((blocks) => this.clearBlocksFromEditorJs(blocks)),\n map(([blocks]) => this.determineToloadDefaultBlocks(blocks)),\n map((blocks) => this.removeDuplicateBlocksWithSameIds(blocks)),\n map((blocks) => this.sortBlocks(blocks)),\n switchMap((blocks) => this.combineSupportBlocks(blocks)),\n map(([blocks, supportedBlocks]) =>\n this.createALookupMapForSupportedBlocks(blocks, supportedBlocks)\n ),\n map(({ blocks, supportedBlocksMap }) =>\n this.findAndMarshalBlocksComponent(blocks, supportedBlocksMap)\n ),\n mergeMap((blocks) =>\n this.addBlocksToEditorJs(blocks).pipe(map(() => blocks))\n )\n );\n\n clearBlocksFromEditorJs(blocks: NgxEditorJsBlock[]) {\n return forkJoin([of(blocks), this.editorJsService.clearBlocks()]);\n }\n\n determineToloadDefaultBlocks(blocks: NgxEditorJsBlock[]) {\n return blocks.length > 0 ? blocks : this.loadDefaultBlocks();\n }\n\n loadDefaultBlocks() {\n return [\n {\n blockId: 'tmdjr',\n sortIndex: 0,\n componentInstanceName: 'HeaderBlockComponent',\n dataClean: \"Let's get started... 🚀\",\n savedAction: 'h1',\n },\n ];\n }\n\n removeDuplicateBlocksWithSameIds(blocks: NgxEditorJsBlock[]) {\n return Array.from(\n new Map(blocks.map((block) => [block.blockId, block])).values()\n );\n }\n\n sortBlocks(blocks: NgxEditorJsBlock[]) {\n return blocks.sort((a, b) => a.sortIndex - b.sortIndex);\n }\n\n combineSupportBlocks(blocks: NgxEditorJsBlock[]) {\n return combineLatest([of(blocks), this.supportedBlocks$]);\n }\n\n createALookupMapForSupportedBlocks(\n blocks: NgxEditorJsBlock[],\n supportedBlocks: SupportedBlock[]\n ) {\n return {\n blocks,\n supportedBlocksMap: new Map(\n supportedBlocks.map((sb) => [sb.componentInstanceName, sb.component])\n ),\n };\n }\n\n findAndMarshalBlocksComponent(\n blocks: NgxEditorJsBlock[],\n supportedBlocksMap: Map<string, Type<BlockComponent>>\n ) {\n return blocks.map((block) => ({\n ...block,\n component:\n supportedBlocksMap.get(block.componentInstanceName) ??\n HeaderBlockComponent,\n }));\n }\n\n addBlocksToEditorJs(blocks: NgxEditorJsBlockWithComponent[]) {\n return combineLatest(\n blocks.map((block: NgxEditorJsBlockWithComponent) =>\n this.editorJsService.addBlockComponent(block, false)\n )\n );\n }\n}\n","import {\n Component,\n effect,\n inject,\n input,\n viewChild,\n ViewContainerRef,\n} from '@angular/core';\nimport { EditorJsService } from '../services/editor-js.service';\nimport { NgxEditorJs2Service } from '../services/ngx-editor-js2.service';\nimport { NgxEditorJsBlock } from '../ngx-editor-js2.interface';\nimport { CdkDropList, CdkDragDrop } from '@angular/cdk/drag-drop';\nimport { lastValueFrom, tap } from 'rxjs';\n\n@Component({\n selector: 'editor-js',\n imports: [CdkDropList],\n template: `\n <div cdkDropList class=\"block-list\" (cdkDropListDropped)=\"drop($event)\" >\n <ng-container #ngxEditor></ng-container>\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n .block-list {\n min-height: 60px;\n }\n }\n `,\n ],\n})\nexport class EditorJsComponent {\n editorJsService = inject(EditorJsService);\n ngxEditorJs2Service = inject(NgxEditorJs2Service);\n\n bootstrapEditorJs = input();\n blocks = input.required({\n transform: (value: NgxEditorJsBlock[]) =>\n this.ngxEditorJs2Service.blocksToLoad.next(value),\n });\n\n ngxEditor = viewChild.required('ngxEditor', { read: ViewContainerRef });\n\n constructor() {\n effect(() => {\n this.editorJsService.setNgxEditor(this.ngxEditor());\n });\n }\n\n drop(event: CdkDragDrop<string[]>) {\n void lastValueFrom(\n this.editorJsService.moveBlockComponentPosition(\n event.previousIndex,\n event.currentIndex\n ).pipe(\n tap(() => this.editorJsService.formGroup.updateValueAndValidity())\n )\n );\n }\n}\n","import {\n Component,\n EventEmitter,\n inject,\n input,\n Input,\n Output,\n Renderer2,\n signal,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatListModule } from '@angular/material/list';\n\n@Component({\n selector: 'toolbar-inline',\n imports: [MatListModule, MatIconModule, FormsModule],\n template: `\n <div class=\"panel\">\n @for (item of options; track $index) {\n <div class=\"inline-option\" (click)=\"addInlineTag(item.action)\">\n <mat-icon>{{ item.icon }}</mat-icon>\n </div>\n }\n <div class=\"inline-option\" (click)=\"addClassTag('code', 'inline-code')\">\n <mat-icon>code</mat-icon>\n </div>\n <div class=\"inline-option\" (click)=\"openUrlInput()\">\n <mat-icon>insert_link</mat-icon>\n </div>\n <div class=\"inline-option\" (click)=\"clearTags()\">\n <mat-icon>format_clear</mat-icon>\n </div>\n </div>\n\n @if(showURLInputField()) {\n <div class=\"panel\">\n <input\n type=\"text\"\n placeholder=\"Enter URL\"\n class=\"block-option-input\"\n [(ngModel)]=\"url\"\n />\n <div class=\"inline-option\" (click)=\"createLink()\">\n <mat-icon>add</mat-icon>\n </div>\n </div>\n }\n `,\n styles: [\n `\n :host {\n color: var(--mat-sys-on-secondary);\n background: var(--mat-sys-secondary);\n box-shadow: var(--mat-sys-level5);\n border-radius: 8px;\n .panel {\n display: flex;\n width: 230px;\n flex-wrap: wrap;\n gap: 1px;\n }\n .inline-option {\n cursor: pointer;\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n .block-option-input {\n width: 197px;\n height: 32px;\n border: none;\n outline: none;\n color: var(--mat-sys-on-secondary);\n background-color: transparent;\n box-sizing: border-box;\n }\n }\n `,\n ],\n})\nexport class ToolbarInlineComponent {\n // @Input() selection!: Selection;\n selection = input.required<Selection>();\n @Output('closeOverlay') closeOverlayEmitter = new EventEmitter();\n\n renderer = inject(Renderer2);\n\n url = '';\n showURLInputField = signal(false);\n savedRanges: Range[] = [];\n options = [\n { icon: 'format_bold', action: 'bold' },\n { icon: 'format_italic', action: 'italic' },\n { icon: 'format_underlined', action: 'underline' },\n { icon: 'strikethrough_s', action: 'strikethrough' },\n { icon: 'format_list_bulleted', action: 'insertUnorderedList' },\n { icon: 'format_list_numbered', action: 'insertOrderedList' },\n { icon: 'highlight', action: 'highlightColor' },\n { icon: 'format_align_left', action: 'justifyLeft' },\n { icon: 'format_align_center', action: 'justifyCenter' },\n { icon: 'format_align_right', action: 'justifyRight' },\n { icon: 'format_align_justify', action: 'justifyFull' },\n ];\n\n addInlineTag(tag: string) {\n // https://stackoverflow.com/questions/60581285/execcommand-is-now-obsolete-whats-the-alternative\n document.execCommand(tag);\n this.closeOverlayEmitter.emit();\n }\n\n addClassTag(tag: string, className: string) {\n const range = this.selection().getRangeAt(0);\n const element = this.renderer.createElement(tag);\n element.className = className ?? '';\n element.innerHTML = range.toString();\n range.deleteContents();\n range.insertNode(element);\n this.closeOverlayEmitter.emit();\n }\n\n clearTags() {\n document.execCommand('removeFormat');\n document.execCommand('unlink');\n this.closeOverlayEmitter.emit();\n }\n\n openUrlInput() {\n this.savedRanges.push(this.selection().getRangeAt(0));\n this.showURLInputField.set(true);\n }\n\n createLink() {\n this.selection().removeAllRanges();\n this.selection().addRange(this.savedRanges.pop()!);\n document.execCommand('createLink', false, this.url);\n this.closeOverlayEmitter.emit();\n }\n}\n","import { Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { inject, Injectable } from '@angular/core';\nimport { exhaustMap, filter, lastValueFrom, map, merge, of, tap } from 'rxjs';\nimport { ToolbarInlineComponent } from '../components/toolbar-inline/toolbar-inline.component';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ToolbarInlineService {\n overlay = inject(Overlay);\n overlayRef!: OverlayRef;\n\n determineToDisplayInlineToolbarBlock(_event: Event) {\n return of(window.getSelection()).pipe(\n filter((selection) => selection !== null),\n filter((selection) => selection.rangeCount > 0),\n filter((selection) => selection.toString().length > 0),\n filter((selection) => selection.toString() !== ''),\n tap(() => this.overlayRef?.hasAttached() && this.overlayRef.dispose()), // So hacky tired to do this properly\n map((selection) => ({\n selection,\n parant: this.getSelectionParent(selection),\n })),\n filter(({ parant }) => this.isSelectionInABlock(parant as HTMLElement)),\n exhaustMap(({ selection }) => this.attachInlineToolbar(selection))\n );\n }\n\n getSelectionParent(selection: Selection): HTMLElement | null {\n const range = selection.getRangeAt(0);\n return range.commonAncestorContainer.nodeType === Node.ELEMENT_NODE\n ? (range.commonAncestorContainer as HTMLElement)\n : range.commonAncestorContainer.parentElement;\n }\n\n isSelectionInABlock(target: HTMLElement | null) {\n // ! TODO: This is a hacky way to determine if the selection is in a block\n // ! Need to also check if the block wants to display the inline toolbar\n return (\n !!target &&\n (target.closest('.no-toolbar-inline') !== null\n ? false\n : target.closest('ngx-editor-js2') !== null\n ? true\n : false)\n );\n }\n\n attachInlineToolbar(selection: Selection) {\n return of(selection.getRangeAt(0)).pipe(\n map((range) => range.getBoundingClientRect()),\n map((selectionRect) => this.createOverlay(selectionRect)),\n // So hacky tired to do this properly\n // passing the refs down the pipe adds a bug\n // user selects text with a drag\n // (mousedown → mousemove → wait → mousemove → mouseup)\n tap((overlayRef) => (this.overlayRef = overlayRef)),\n map((overlayRef) => {\n const inlineToolbar = overlayRef.attach(\n new ComponentPortal(ToolbarInlineComponent)\n );\n inlineToolbar.setInput('selection', selection);\n\n lastValueFrom(\n merge(\n overlayRef.backdropClick(),\n inlineToolbar.instance.closeOverlayEmitter\n ).pipe(\n tap(() => overlayRef.dispose()),\n tap(() => selection.removeAllRanges())\n )\n );\n return true;\n })\n );\n }\n\n createOverlay(selectionRect: DOMRect) {\n return this.overlay.create({\n hasBackdrop: true,\n backdropClass: 'cdk-overlay-transparent-backdrop',\n positionStrategy: this.overlay\n .position()\n .flexibleConnectedTo(selectionRect)\n .withPositions([\n {\n offsetY: 8,\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n },\n ]),\n });\n }\n}\n","import { Component, inject, input, output } from '@angular/core';\nimport { EditorJsComponent } from './components/editor-js.component';\nimport { AsyncPipe } from '@angular/common';\nimport {\n combineLatest,\n debounceTime,\n firstValueFrom,\n fromEvent,\n Observable,\n switchMap,\n tap,\n} from 'rxjs';\nimport { ToolFabService } from './services/tool-fab.service';\nimport { NgxEditorJsBlock } from './ngx-editor-js2.interface';\nimport { ToolbarInlineService } from './services/toolbar-inline.service';\nimport { EditorJsService } from './services/editor-js.service';\nimport { NgxEditorJs2Service } from './services/ngx-editor-js2.service';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Component({\n selector: 'ngx-editor-js2',\n imports: [EditorJsComponent, AsyncPipe],\n template: `\n <editor-js\n [blocks]=\"blocks()\"\n [bootstrapEditorJs]=\"bootstrapEditorJs$ | async\"\n ></editor-js>\n `,\n})\nexport class NgxEditorJs2Component {\n inlineToolbarSerivce = inject(ToolbarInlineService);\n editorJsService = inject(EditorJsService);\n ngxEditorJs2Service = inject(NgxEditorJs2Service);\n\n constructor() {\n this.editorJsService.formGroup.valueChanges.pipe(\n takeUntilDestroyed(),\n debounceTime(500),\n switchMap(() => this.editorJsService.getBlocks$()),\n tap((blocks) => this.formChanged.emit(blocks)),\n ).subscribe();\n }\n\n blocks = input<NgxEditorJsBlock[]>([]);\n\n // Allows the parent component to request the current blocks\n blocksRequested = output<Observable<NgxEditorJsBlock[]>>();\n requestBlocks = input.required({\n transform: (value: unknown) =>\n value && this.blocksRequested.emit(this.editorJsService.getBlocks$()),\n });\n\n // Tells the parent component when the form has changed\n formChanged = output<NgxEditorJsBlock[]>();\n\n\n bootstrapEditorJs$ = combineLatest([\n inject(ToolFabService).toolbarComponentRef$,\n this.ngxEditorJs2Service.loadBlocks$,\n fromEvent(document, 'selectionchange').pipe(\n debounceTime(200),\n switchMap((event) =>\n this.inlineToolbarSerivce.determineToDisplayInlineToolbarBlock(event)\n )\n )\n ]);\n}\n","/*\n * Public API Surface of ngx-editor-js2\n */\n\nexport * from './lib/services/ngx-editor-js2.service';\nexport * from './lib/ngx-editor-js2.component';\nexport type * from './lib/ngx-editor-js2.interface';\nexport * from './lib/directives/autofocus.directive';\nexport * from './lib/directives/toolbar-fab.directive';\nexport * from './lib/directives/control-accessor.directive';\nexport * from './lib/directives/clean-paste-data.directive';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1"],"mappings":"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"}
|
package/index.d.ts
CHANGED
|
@@ -73,8 +73,8 @@ declare class EditorJsService {
|
|
|
73
73
|
setNgxEditor(ngxEditor: ViewContainerRef): void;
|
|
74
74
|
getBlocks$(): Observable<NgxEditorJsBlock[]>;
|
|
75
75
|
createNgxEditorJsBlockWithComponent(blockComponent: Type<BlockComponent>, componentContextPositionIndex: number): Observable<NgxEditorJsBlockWithComponent>;
|
|
76
|
-
addBlockComponent(ngxEditorJsBlock: NgxEditorJsBlockWithComponent): Observable<void>;
|
|
77
|
-
createFormGroupControl({ blockId, dataClean, }: NgxEditorJsBlockWithComponent): Observable<_angular_forms.FormControl<string | null>>;
|
|
76
|
+
addBlockComponent(ngxEditorJsBlock: NgxEditorJsBlockWithComponent, emitEvent?: boolean): Observable<void>;
|
|
77
|
+
createFormGroupControl({ blockId, dataClean, }: NgxEditorJsBlockWithComponent, emitEvent?: boolean): Observable<_angular_forms.FormControl<string | null>>;
|
|
78
78
|
attachComponent({ component, blockId, autofocus, savedAction, sortIndex: index, }: NgxEditorJsBlockWithComponent): Observable<_angular_core.ComponentRef<BlockComponent>>;
|
|
79
79
|
determineMovePositionAction(action: MovePositionActions, index: number, formControlName: string): Observable<any>;
|
|
80
80
|
moveBlockComponentPosition(previousIndex: number, currentIndex: number): Observable<any>;
|
package/package.json
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
.cdk-drag-preview {
|
|
1
|
+
.ngx-editor-js2-block.cdk-drag-preview {
|
|
2
2
|
overflow: visible;
|
|
3
3
|
color: var(--mat-sys-on-secondary-container);
|
|
4
4
|
background-color: var(--mat-sys-secondary-container);
|
|
@@ -11,14 +11,19 @@
|
|
|
11
11
|
}
|
|
12
12
|
}
|
|
13
13
|
|
|
14
|
-
.cdk-drag-placeholder {
|
|
14
|
+
.ngx-editor-js2-block.cdk-drag-placeholder {
|
|
15
15
|
opacity: 0;
|
|
16
16
|
}
|
|
17
17
|
|
|
18
|
-
.cdk-drag-animating {
|
|
18
|
+
// .ngx-editor-js2-block.cdk-drag-animating {
|
|
19
|
+
// transition: transform 250ms cubic-bezier(0, 0, 0.2, 1);
|
|
20
|
+
// }
|
|
21
|
+
|
|
22
|
+
.block-list.cdk-drop-list-dragging .ngx-editor-js2-block:not(.cdk-drag-placeholder) {
|
|
19
23
|
transition: transform 250ms cubic-bezier(0, 0, 0.2, 1);
|
|
20
24
|
}
|
|
21
25
|
|
|
26
|
+
|
|
22
27
|
paragraph-block.cdk-drag-preview {
|
|
23
28
|
p {
|
|
24
29
|
ul {
|
package/styles/drag-preview.scss
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
.cdk-drag-preview {
|
|
1
|
+
.ngx-editor-js2-block.cdk-drag-preview {
|
|
2
2
|
overflow: visible;
|
|
3
3
|
color: var(--mat-sys-on-secondary-container);
|
|
4
4
|
background-color: var(--mat-sys-secondary-container);
|
|
@@ -11,14 +11,19 @@
|
|
|
11
11
|
}
|
|
12
12
|
}
|
|
13
13
|
|
|
14
|
-
.cdk-drag-placeholder {
|
|
14
|
+
.ngx-editor-js2-block.cdk-drag-placeholder {
|
|
15
15
|
opacity: 0;
|
|
16
16
|
}
|
|
17
17
|
|
|
18
|
-
.cdk-drag-animating {
|
|
18
|
+
// .ngx-editor-js2-block.cdk-drag-animating {
|
|
19
|
+
// transition: transform 250ms cubic-bezier(0, 0, 0.2, 1);
|
|
20
|
+
// }
|
|
21
|
+
|
|
22
|
+
.block-list.cdk-drop-list-dragging .ngx-editor-js2-block:not(.cdk-drag-placeholder) {
|
|
19
23
|
transition: transform 250ms cubic-bezier(0, 0, 0.2, 1);
|
|
20
24
|
}
|
|
21
25
|
|
|
26
|
+
|
|
22
27
|
paragraph-block.cdk-drag-preview {
|
|
23
28
|
p {
|
|
24
29
|
ul {
|