@plait/angular-board 0.90.1 → 0.92.0-next.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.
- package/fesm2022/plait-angular-board.mjs +11 -11
- package/fesm2022/plait-angular-board.mjs.map +1 -1
- package/index.d.ts +122 -5
- package/package.json +3 -3
- package/board/board.component.d.ts +0 -59
- package/board/board.component.interface.d.ts +0 -10
- package/island/island-base.component.d.ts +0 -35
- package/plugins/angular-board.d.ts +0 -21
- package/plugins/with-angular.d.ts +0 -4
- package/public-api.d.ts +0 -4
- package/utils/weak-maps.d.ts +0 -3
|
@@ -21,10 +21,10 @@ class PlaitIslandBaseComponent {
|
|
|
21
21
|
markForCheck() {
|
|
22
22
|
this.cdr.markForCheck();
|
|
23
23
|
}
|
|
24
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
25
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "
|
|
24
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: PlaitIslandBaseComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
25
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.12", type: PlaitIslandBaseComponent, isStandalone: false, host: { classAttribute: "plait-island-container" }, ngImport: i0 }); }
|
|
26
26
|
}
|
|
27
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
27
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: PlaitIslandBaseComponent, decorators: [{
|
|
28
28
|
type: Directive,
|
|
29
29
|
args: [{
|
|
30
30
|
host: {
|
|
@@ -58,10 +58,10 @@ class PlaitIslandPopoverBaseComponent {
|
|
|
58
58
|
this.subscription?.unsubscribe();
|
|
59
59
|
this.islandOnDestroy();
|
|
60
60
|
}
|
|
61
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
62
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "
|
|
61
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: PlaitIslandPopoverBaseComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
62
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.12", type: PlaitIslandPopoverBaseComponent, isStandalone: false, inputs: { board: "board" }, host: { classAttribute: "plait-island-popover-container" }, ngImport: i0 }); }
|
|
63
63
|
}
|
|
64
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
64
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: PlaitIslandPopoverBaseComponent, decorators: [{
|
|
65
65
|
type: Directive,
|
|
66
66
|
args: [{
|
|
67
67
|
host: {
|
|
@@ -175,7 +175,7 @@ class PlaitBoardComponent {
|
|
|
175
175
|
this.plaitPlugins = [];
|
|
176
176
|
this.onChange = new EventEmitter();
|
|
177
177
|
this.plaitBoardInitialized = new EventEmitter();
|
|
178
|
-
this.activeHostG = viewChild('activeHostG');
|
|
178
|
+
this.activeHostG = viewChild('activeHostG', ...(ngDevMode ? [{ debugName: "activeHostG" }] : []));
|
|
179
179
|
this.trackBy = (index, element) => {
|
|
180
180
|
return element.id;
|
|
181
181
|
};
|
|
@@ -537,8 +537,8 @@ class PlaitBoardComponent {
|
|
|
537
537
|
this.updateIslands();
|
|
538
538
|
});
|
|
539
539
|
}
|
|
540
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
541
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "
|
|
540
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: PlaitBoardComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.Injector }, { token: i0.ViewContainerRef }, { token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
541
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "20.3.12", type: PlaitBoardComponent, isStandalone: true, selector: "plait-board", inputs: { plaitValue: "plaitValue", plaitViewport: "plaitViewport", plaitPlugins: "plaitPlugins", plaitOptions: "plaitOptions", plaitTheme: "plaitTheme" }, outputs: { onChange: "onChange", plaitBoardInitialized: "plaitBoardInitialized" }, host: { properties: { "class": "this.hostClass", "class.readonly": "this.readonly", "class.focused": "this.isFocused", "class.disabled-scroll": "this.disabledScrollOnNonFocus" } }, queries: [{ propertyName: "islands", predicate: PlaitIslandBaseComponent, descendants: true }], viewQueries: [{ propertyName: "activeHostG", first: true, predicate: ["activeHostG"], descendants: true, isSignal: true }, { propertyName: "svg", first: true, predicate: ["svg"], descendants: true, static: true }, { propertyName: "viewportContainer", first: true, predicate: ["viewportContainer"], descendants: true, read: ElementRef, static: true }], usesOnChanges: true, ngImport: i0, template: `
|
|
542
542
|
<div class="viewport-container" #viewportContainer>
|
|
543
543
|
<svg #svg width="100%" height="100%" style="position: relative;" class="board-host-svg">
|
|
544
544
|
<g class="element-lower-host"></g>
|
|
@@ -553,7 +553,7 @@ class PlaitBoardComponent {
|
|
|
553
553
|
<ng-content></ng-content>
|
|
554
554
|
`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
555
555
|
}
|
|
556
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
556
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: PlaitBoardComponent, decorators: [{
|
|
557
557
|
type: Component,
|
|
558
558
|
args: [{
|
|
559
559
|
selector: 'plait-board',
|
|
@@ -603,7 +603,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
|
|
|
603
603
|
}], svg: [{
|
|
604
604
|
type: ViewChild,
|
|
605
605
|
args: ['svg', { static: true }]
|
|
606
|
-
}], viewportContainer: [{
|
|
606
|
+
}], activeHostG: [{ type: i0.ViewChild, args: ['activeHostG', { isSignal: true }] }], viewportContainer: [{
|
|
607
607
|
type: ViewChild,
|
|
608
608
|
args: ['viewportContainer', { read: ElementRef, static: true }]
|
|
609
609
|
}], islands: [{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plait-angular-board.mjs","sources":["../../../packages/angular-board/src/utils/weak-maps.ts","../../../packages/angular-board/src/island/island-base.component.ts","../../../packages/angular-board/src/plugins/with-angular.ts","../../../packages/angular-board/src/board/board.component.ts","../../../packages/angular-board/src/plugins/angular-board.ts","../../../packages/angular-board/src/public-api.ts","../../../packages/angular-board/src/plait-angular-board.ts"],"sourcesContent":["import { PlaitBoard } from '@plait/core';\nimport { BoardComponentInterface } from '../board/board.component.interface';\n\nexport const BOARD_TO_COMPONENT = new WeakMap<PlaitBoard, BoardComponentInterface>();\n","import { ChangeDetectorRef, Directive, Input, OnDestroy, OnInit } from '@angular/core';\nimport { PlaitBoard } from '@plait/core';\nimport { Subscription } from 'rxjs';\nimport { BOARD_TO_COMPONENT } from '../utils/weak-maps';\nimport { BoardComponentInterface } from '../board/board.component.interface';\n\n@Directive({\n host: {\n class: 'plait-island-container'\n },\n standalone: false\n})\nexport abstract class PlaitIslandBaseComponent {\n board!: PlaitBoard;\n\n constructor(protected cdr: ChangeDetectorRef) {}\n\n initialize(board: PlaitBoard) {\n this.board = board;\n this.markForCheck();\n }\n\n markForCheck() {\n this.cdr.markForCheck();\n }\n}\n\n@Directive({\n host: {\n class: 'plait-island-popover-container'\n },\n standalone: false\n})\nexport abstract class PlaitIslandPopoverBaseComponent implements OnInit, OnDestroy {\n @Input() board!: PlaitBoard;\n\n private subscription?: Subscription;\n\n constructor(public cdr: ChangeDetectorRef) {}\n\n initialize(board: PlaitBoard) {\n this.board = board;\n const boardComponent = BOARD_TO_COMPONENT.get(board) as BoardComponentInterface;\n this.subscription = boardComponent.onChange.subscribe(() => {\n if (hasOnBoardChange(this)) {\n this.onBoardChange();\n }\n this.cdr.markForCheck();\n });\n }\n\n ngOnInit(): void {\n if (!this.board) {\n throw new Error('can not find board instance');\n }\n this.initialize(this.board);\n this.islandOnInit();\n }\n\n ngOnDestroy(): void {\n this.subscription?.unsubscribe();\n this.islandOnDestroy();\n }\n\n /**\n * use islandOnInit replace ngOnInit to avoid ngOnInit being overridden\n */\n abstract islandOnInit(): void;\n\n /**\n * use islandOnDestroy replace ngOnDestroy to avoid ngOnDestroy being overridden\n */\n abstract islandOnDestroy(): void;\n}\n\nexport interface OnBoardChange {\n onBoardChange: () => void;\n}\n\nexport const hasOnBoardChange = (value: any): value is OnBoardChange => {\n if (value.onBoardChange) {\n return true;\n } else {\n return false;\n }\n};\n","import { ComponentType, PlaitBoard } from '@plait/core';\nimport { AngularBoard } from './angular-board';\nimport { PlaitTextBoard, TextComponentRef, TextProps } from '@plait/common';\nimport { PlaitTextComponent } from '@plait/angular-text';\nimport { AngularEditor } from 'slate-angular';\nimport { BOARD_TO_COMPONENT } from '../utils/weak-maps';\nimport { BoardComponentInterface } from '../board/board.component.interface';\n\nexport const withAngular = (board: PlaitBoard & PlaitTextBoard) => {\n const newBoard = board as PlaitBoard & PlaitTextBoard & AngularBoard;\n\n newBoard.renderComponent = <T, K extends { nativeElement: () => HTMLElement }>(\n type: ComponentType<K>,\n container: Element | DocumentFragment,\n props: T\n ) => {\n const boardComponent = BOARD_TO_COMPONENT.get(board) as BoardComponentInterface;\n const componentRef = boardComponent.viewContainerRef.createComponent<K>(type);\n for (const key in props) {\n const value = props[key as keyof T];\n (componentRef.instance as any)[key as keyof TextProps] = value as any;\n }\n container.appendChild(componentRef.instance.nativeElement());\n componentRef.changeDetectorRef.detectChanges();\n const ref: TextComponentRef = {\n destroy: () => {\n componentRef.destroy();\n },\n update: (props: Partial<TextProps>) => {\n for (const key in props) {\n const value = props[key as keyof TextProps];\n (componentRef.instance as any)[key] = value;\n }\n // solve image lose on move node\n if (container.children.length === 0) {\n container.append(componentRef.instance.nativeElement());\n }\n componentRef.changeDetectorRef.detectChanges();\n }\n };\n return { ref, componentRef };\n };\n\n newBoard.renderText = (container: Element | DocumentFragment, props: TextProps) => {\n const { ref, componentRef } = newBoard.renderComponent(PlaitTextComponent, container, props);\n const { update } = ref;\n ref.update = props => {\n const beforeReadonly = componentRef.instance.readonly;\n update(props);\n if (beforeReadonly === true && props.readonly === false) {\n AngularEditor.focus(componentRef.instance.editor);\n } else if (beforeReadonly === false && props.readonly === true) {\n AngularEditor.blur(componentRef.instance.editor);\n }\n };\n return ref;\n };\n\n return newBoard;\n};\n","import {\n AfterContentInit,\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n ElementRef,\n EventEmitter,\n HostBinding,\n Injector,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n QueryList,\n SimpleChanges,\n viewChild,\n ViewChild,\n ViewContainerRef\n} from '@angular/core';\nimport rough from 'roughjs/bin/rough';\nimport { RoughSVG } from 'roughjs/bin/svg';\nimport { fromEvent, Subject } from 'rxjs';\nimport { filter, takeUntil, tap } from 'rxjs/operators';\nimport { BoardComponentInterface } from './board.component.interface';\nimport {\n BOARD_TO_AFTER_CHANGE,\n BOARD_TO_CONTEXT,\n BOARD_TO_ELEMENT_HOST,\n BOARD_TO_HOST,\n BOARD_TO_MOVING_POINT,\n BOARD_TO_MOVING_POINT_IN_BOARD,\n BOARD_TO_ON_CHANGE,\n BOARD_TO_ROUGH_SVG,\n BoardTransforms,\n FLUSHING,\n HOST_CLASS_NAME,\n IS_BOARD_ALIVE,\n IS_CHROME,\n IS_FIREFOX,\n IS_SAFARI,\n KEY_TO_ELEMENT_MAP,\n ListRender,\n PlaitBoard,\n PlaitBoardContext,\n PlaitBoardOptions,\n PlaitChildrenContext,\n PlaitElement,\n PlaitPlugin,\n PlaitTheme,\n Viewport,\n WritableClipboardOperationType,\n ZOOM_STEP,\n createBoard,\n deleteFragment,\n getClipboardData,\n getSelectedElements,\n hasInputOrTextareaTarget,\n initializeViewBox,\n initializeViewportContainer,\n initializeViewportOffset,\n isFromScrolling,\n isFromViewportChange,\n setFragment,\n setIsFromScrolling,\n setIsFromViewportChange,\n toHostPoint,\n toViewBoxPoint,\n updateViewBox,\n updateViewportByScrolling,\n updateViewportOffset,\n withBoard,\n withHandPointer,\n withHistory,\n withHotkey,\n withI18n,\n withMoving,\n withOptions,\n withRelatedFragment,\n withSelection\n} from '@plait/core';\nimport { PlaitIslandBaseComponent, hasOnBoardChange } from '../island/island-base.component';\nimport { BOARD_TO_COMPONENT } from '../utils/weak-maps';\nimport { withAngular } from '../plugins/with-angular';\nimport { PlaitCommonElementRef, withImage, withText } from '@plait/common';\nimport { OnChangeData } from '../plugins/angular-board';\n\nconst ElementLowerHostClass = 'element-lower-host';\nconst ElementHostClass = 'element-host';\nconst ElementUpperHostClass = 'element-upper-host';\nconst ElementTopHostClass = 'element-top-host';\n\n@Component({\n selector: 'plait-board',\n template: `\n <div class=\"viewport-container\" #viewportContainer>\n <svg #svg width=\"100%\" height=\"100%\" style=\"position: relative;\" class=\"board-host-svg\">\n <g class=\"element-lower-host\"></g>\n <g class=\"element-host\"></g>\n <g class=\"element-upper-host\"></g>\n <g class=\"element-top-host\"></g>\n </svg>\n <svg width=\"100%\" height=\"100%\" class=\"board-active-svg\">\n <g #activeHostG class=\"active-host-g\"></g>\n </svg>\n </div>\n <ng-content></ng-content>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class PlaitBoardComponent implements BoardComponentInterface, OnInit, OnChanges, AfterViewInit, AfterContentInit, OnDestroy {\n hasInitialized = false;\n\n board!: PlaitBoard;\n\n roughSVG!: RoughSVG;\n\n destroy$ = new Subject<void>();\n\n private resizeObserver!: ResizeObserver;\n\n @Input() plaitValue: PlaitElement[] = [];\n\n @Input() plaitViewport!: Viewport;\n\n @Input() plaitPlugins: PlaitPlugin[] = [];\n\n @Input() plaitOptions?: PlaitBoardOptions;\n\n @Input() plaitTheme?: PlaitTheme;\n\n @Output() onChange: EventEmitter<OnChangeData> = new EventEmitter();\n\n @Output() plaitBoardInitialized: EventEmitter<PlaitBoard> = new EventEmitter();\n\n get host(): SVGSVGElement {\n return this.svg.nativeElement;\n }\n\n @HostBinding('class')\n get hostClass() {\n return `${HOST_CLASS_NAME} theme-${this.board.theme.themeColorMode} ${this.getBrowserClassName()} pointer-${this.board.pointer}`;\n }\n\n getBrowserClassName() {\n if (IS_SAFARI) {\n return 'safari';\n }\n if (IS_CHROME) {\n return 'chrome';\n }\n if (IS_FIREFOX) {\n return 'firefox';\n }\n return '';\n }\n\n @HostBinding('class.readonly')\n get readonly() {\n return this.board.options.readonly;\n }\n\n @HostBinding('class.focused')\n get isFocused() {\n return PlaitBoard.isFocus(this.board);\n }\n\n @HostBinding('class.disabled-scroll')\n get disabledScrollOnNonFocus() {\n return this.board.options.disabledScrollOnNonFocus && !PlaitBoard.isFocus(this.board);\n }\n\n get nativeElement(): HTMLElement {\n return this.elementRef.nativeElement;\n }\n\n @ViewChild('svg', { static: true })\n svg!: ElementRef;\n\n activeHostG = viewChild<ElementRef>('activeHostG');\n\n @ViewChild('viewportContainer', { read: ElementRef, static: true })\n viewportContainer!: ElementRef;\n\n @ContentChildren(PlaitIslandBaseComponent, { descendants: true }) islands?: QueryList<PlaitIslandBaseComponent>;\n\n listRender!: ListRender;\n\n constructor(\n public cdr: ChangeDetectorRef,\n public injector: Injector,\n public viewContainerRef: ViewContainerRef,\n private elementRef: ElementRef<HTMLElement>,\n private ngZone: NgZone\n ) {}\n\n ngOnInit(): void {\n const elementLowerHost = this.host.querySelector(`.${ElementLowerHostClass}`) as SVGGElement;\n const elementHost = this.host.querySelector(`.${ElementHostClass}`) as SVGGElement;\n const elementUpperHost = this.host.querySelector(`.${ElementUpperHostClass}`) as SVGGElement;\n const elementTopHost = this.host.querySelector(`.${ElementTopHostClass}`) as SVGGElement;\n const roughSVG = rough.svg(this.host as SVGSVGElement, {\n options: { roughness: 0, strokeWidth: 1 }\n });\n this.roughSVG = roughSVG;\n this.initializePlugins();\n this.ngZone.runOutsideAngular(() => {\n this.initializeHookListener();\n this.viewportScrollListener();\n this.wheelZoomListener();\n this.elementResizeListener();\n fromEvent<MouseEvent>(document, 'mouseleave')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: MouseEvent) => {\n BOARD_TO_MOVING_POINT.delete(this.board);\n });\n });\n BOARD_TO_COMPONENT.set(this.board, this);\n BOARD_TO_ROUGH_SVG.set(this.board, roughSVG);\n BOARD_TO_HOST.set(this.board, this.host);\n IS_BOARD_ALIVE.set(this.board, true);\n BOARD_TO_ELEMENT_HOST.set(this.board, {\n lowerHost: elementLowerHost,\n host: elementHost,\n upperHost: elementUpperHost,\n topHost: elementTopHost,\n activeHost: this.activeHostG()?.nativeElement,\n container: this.elementRef.nativeElement,\n viewportContainer: this.viewportContainer.nativeElement\n });\n BOARD_TO_ON_CHANGE.set(this.board, () => {\n this.ngZone.run(() => {\n const isOnlySetSelection = this.board.operations.length && this.board.operations.every((op) => op.type === 'set_selection');\n if (isOnlySetSelection) {\n this.updateListRender();\n return;\n }\n const isSetViewport = this.board.operations.length && this.board.operations.some((op) => op.type === 'set_viewport');\n if (isSetViewport && isFromScrolling(this.board)) {\n setIsFromScrolling(this.board, false);\n this.updateListRender();\n return;\n }\n this.updateListRender();\n if (isSetViewport) {\n initializeViewBox(this.board);\n } else {\n updateViewBox(this.board);\n }\n updateViewportOffset(this.board);\n const selectedElements = getSelectedElements(this.board);\n selectedElements.forEach((element) => {\n const elementRef = PlaitElement.getElementRef<PlaitCommonElementRef>(element);\n elementRef.updateActiveSection();\n });\n });\n });\n BOARD_TO_AFTER_CHANGE.set(this.board, () => {\n this.ngZone.run(() => {\n const data: OnChangeData = {\n children: this.board.children,\n operations: this.board.operations,\n viewport: this.board.viewport,\n selection: this.board.selection,\n theme: this.board.theme\n };\n this.updateIslands();\n this.onChange.emit(data);\n });\n });\n const context = new PlaitBoardContext();\n BOARD_TO_CONTEXT.set(this.board, context);\n this.initializeListRender();\n this.hasInitialized = true;\n }\n\n ngAfterContentInit(): void {\n this.initializeIslands();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (this.hasInitialized) {\n const valueChange = changes['plaitValue'];\n const options = changes['plaitOptions'];\n\n if (valueChange) {\n // avoid useless updating\n if (this.board.children !== valueChange.currentValue && !FLUSHING.get(this.board)) {\n this.board.children = valueChange.currentValue;\n this.updateListRender();\n }\n }\n if (options) {\n this.board.options = options.currentValue;\n }\n this.cdr.markForCheck();\n }\n }\n\n ngAfterViewInit(): void {\n this.plaitBoardInitialized.emit(this.board);\n initializeViewportContainer(this.board);\n initializeViewBox(this.board);\n initializeViewportOffset(this.board);\n }\n\n private initializePlugins() {\n let board = withRelatedFragment(\n withHotkey(\n withHandPointer(\n withHistory(\n withSelection(\n withMoving(\n withBoard(\n withI18n(withOptions(withAngular(withImage(withText(createBoard(this.plaitValue, this.plaitOptions))))))\n )\n )\n )\n )\n )\n )\n );\n this.plaitPlugins.forEach((plugin) => {\n board = plugin(board);\n });\n this.board = board;\n\n if (this.plaitViewport) {\n this.board.viewport = this.plaitViewport;\n }\n\n if (this.plaitTheme) {\n this.board.theme = this.plaitTheme;\n }\n\n KEY_TO_ELEMENT_MAP.set(board, new Map());\n }\n\n private initializeHookListener() {\n fromEvent<MouseEvent>(this.host, 'mousedown')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: MouseEvent) => {\n this.board.mousedown(event);\n });\n\n fromEvent<PointerEvent>(this.host, 'pointerdown')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: PointerEvent) => {\n this.board.pointerDown(event);\n });\n\n fromEvent<MouseEvent>(this.host, 'mousemove')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: MouseEvent) => {\n BOARD_TO_MOVING_POINT_IN_BOARD.set(this.board, [event.x, event.y]);\n this.board.mousemove(event);\n });\n\n fromEvent<PointerEvent>(this.host, 'pointermove')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: PointerEvent) => {\n BOARD_TO_MOVING_POINT_IN_BOARD.set(this.board, [event.x, event.y]);\n this.board.pointerMove(event);\n });\n\n fromEvent<MouseEvent>(this.host, 'mouseleave')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: MouseEvent) => {\n BOARD_TO_MOVING_POINT_IN_BOARD.delete(this.board);\n this.board.mouseleave(event);\n });\n\n fromEvent<PointerEvent>(this.host, 'pointerleave')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: PointerEvent) => {\n BOARD_TO_MOVING_POINT_IN_BOARD.delete(this.board);\n this.board.pointerLeave(event);\n });\n\n fromEvent<PointerEvent>(this.host, 'pointercancel')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: PointerEvent) => {\n BOARD_TO_MOVING_POINT_IN_BOARD.delete(this.board);\n this.board.pointerCancel(event);\n });\n\n fromEvent<MouseEvent>(document, 'mousemove')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: MouseEvent) => {\n BOARD_TO_MOVING_POINT.set(this.board, [event.x, event.y]);\n this.board.globalMousemove(event);\n });\n\n fromEvent<PointerEvent>(document, 'pointermove')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: PointerEvent) => {\n BOARD_TO_MOVING_POINT.set(this.board, [event.x, event.y]);\n this.board.globalPointerMove(event);\n });\n\n fromEvent<MouseEvent>(this.host, 'mouseup')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: MouseEvent) => {\n this.board.mouseup(event);\n });\n\n fromEvent<PointerEvent>(this.host, 'pointerup')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: PointerEvent) => {\n this.board.pointerUp(event);\n });\n\n fromEvent<TouchEvent>(this.host, 'touchstart')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: TouchEvent) => {\n this.board.touchStart(event);\n });\n\n fromEvent<TouchEvent>(this.host, 'touchmove')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: TouchEvent) => {\n this.board.touchMove(event);\n });\n\n fromEvent<TouchEvent>(this.host, 'touchend')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: TouchEvent) => {\n this.board.touchEnd(event);\n });\n\n fromEvent<MouseEvent>(document, 'mouseup')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: MouseEvent) => {\n this.board.globalMouseup(event);\n });\n\n fromEvent<PointerEvent>(document, 'pointerup')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: PointerEvent) => {\n this.board.globalPointerUp(event);\n });\n\n fromEvent<MouseEvent>(this.host, 'dblclick')\n .pipe(\n takeUntil(this.destroy$),\n filter(() => this.isFocused && !PlaitBoard.hasBeenTextEditing(this.board))\n )\n .subscribe((event: MouseEvent) => {\n this.board.dblClick(event);\n });\n\n fromEvent<KeyboardEvent>(document, 'keydown')\n .pipe(\n takeUntil(this.destroy$),\n tap((event) => {\n this.board.globalKeyDown(event);\n }),\n filter((event) => this.isFocused && !PlaitBoard.hasBeenTextEditing(this.board) && !hasInputOrTextareaTarget(event.target))\n )\n .subscribe((event: KeyboardEvent) => {\n this.board.keyDown(event);\n });\n\n fromEvent<KeyboardEvent>(document, 'keyup')\n .pipe(\n takeUntil(this.destroy$),\n filter(() => this.isFocused && !PlaitBoard.hasBeenTextEditing(this.board))\n )\n .subscribe((event: KeyboardEvent) => {\n this.board?.keyUp(event);\n });\n\n fromEvent<ClipboardEvent>(document, 'copy')\n .pipe(\n takeUntil(this.destroy$),\n filter(() => this.isFocused && !PlaitBoard.hasBeenTextEditing(this.board))\n )\n .subscribe((event: ClipboardEvent) => {\n event.preventDefault();\n setFragment(this.board, WritableClipboardOperationType.copy, event.clipboardData);\n });\n\n fromEvent<ClipboardEvent>(document, 'paste')\n .pipe(\n takeUntil(this.destroy$),\n filter(() => this.isFocused && !PlaitBoard.isReadonly(this.board) && !PlaitBoard.hasBeenTextEditing(this.board))\n )\n .subscribe(async (clipboardEvent: ClipboardEvent) => {\n const mousePoint = PlaitBoard.getMovingPointInBoard(this.board);\n if (mousePoint) {\n const targetPoint = toViewBoxPoint(this.board, toHostPoint(this.board, mousePoint[0], mousePoint[1]));\n const clipboardData = await getClipboardData(clipboardEvent.clipboardData);\n this.board.insertFragment(clipboardData, targetPoint, WritableClipboardOperationType.paste);\n }\n });\n\n fromEvent<ClipboardEvent>(document, 'cut')\n .pipe(\n takeUntil(this.destroy$),\n filter(() => this.isFocused && !PlaitBoard.isReadonly(this.board) && !PlaitBoard.hasBeenTextEditing(this.board))\n )\n .subscribe((event: ClipboardEvent) => {\n event.preventDefault();\n setFragment(this.board, WritableClipboardOperationType.cut, event.clipboardData);\n deleteFragment(this.board);\n });\n\n fromEvent<DragEvent>(this.host, 'drop')\n .pipe(\n takeUntil(this.destroy$),\n filter(() => !PlaitBoard.isReadonly(this.board))\n )\n .subscribe((event: DragEvent) => {\n event.preventDefault();\n this.board.drop(event);\n });\n fromEvent<DragEvent>(this.host, 'dragover')\n .pipe(\n takeUntil(this.destroy$),\n filter(() => !PlaitBoard.isReadonly(this.board))\n )\n .subscribe((event: DragEvent) => {\n event.preventDefault();\n });\n }\n\n private initializeListRender() {\n this.listRender = new ListRender(this.board);\n this.listRender.initialize(this.board.children, this.initializeChildrenContext());\n }\n\n private updateListRender() {\n this.listRender.update(this.board.children, this.initializeChildrenContext());\n }\n\n private initializeChildrenContext(): PlaitChildrenContext {\n return {\n board: this.board,\n parent: this.board,\n parentG: PlaitBoard.getElementHost(this.board)\n };\n }\n\n private viewportScrollListener() {\n fromEvent<MouseEvent>(this.viewportContainer.nativeElement, 'scroll')\n .pipe(\n takeUntil(this.destroy$),\n filter(() => {\n if (isFromViewportChange(this.board)) {\n setIsFromViewportChange(this.board, false);\n return false;\n }\n return true;\n })\n )\n .subscribe((event: Event) => {\n const { scrollLeft, scrollTop } = event.target as HTMLElement;\n updateViewportByScrolling(this.board, scrollLeft, scrollTop);\n });\n }\n\n private elementResizeListener() {\n this.resizeObserver = new ResizeObserver(() => {\n initializeViewportContainer(this.board);\n initializeViewBox(this.board);\n updateViewportOffset(this.board);\n });\n this.resizeObserver.observe(this.nativeElement);\n }\n\n private initializeIslands() {\n this.islands?.forEach((island) => {\n island.initialize(this.board);\n });\n }\n\n private updateIslands() {\n this.islands?.forEach((island) => {\n if (hasOnBoardChange(island)) {\n island.onBoardChange();\n }\n island.markForCheck();\n });\n }\n\n private wheelZoomListener() {\n fromEvent<WheelEvent>(this.host, 'wheel', { passive: false })\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: WheelEvent) => {\n // Credits to excalidraw\n // https://github.com/excalidraw/excalidraw/blob/b7d7ccc929696cc17b4cc34452e4afd846d59f4f/src/components/App.tsx#L9060\n if (event.metaKey || event.ctrlKey) {\n event.preventDefault();\n const { deltaX, deltaY } = event;\n const zoom = this.board.viewport.zoom;\n const sign = Math.sign(deltaY);\n const MAX_STEP = ZOOM_STEP * 100;\n const absDelta = Math.abs(deltaY);\n let delta = deltaY;\n if (absDelta > MAX_STEP) {\n delta = MAX_STEP * sign;\n }\n let newZoom = zoom - delta / 100;\n // increase zoom steps the more zoomed-in we are (applies to >100% only)\n newZoom +=\n Math.log10(Math.max(1, zoom)) *\n -sign *\n // reduced amplification for small deltas (small movements on a trackpad)\n Math.min(1, absDelta / 20);\n BoardTransforms.updateZoom(this.board, newZoom, PlaitBoard.getMovingPointInBoard(this.board));\n }\n });\n }\n\n trackBy = (index: number, element: PlaitElement) => {\n return element.id;\n };\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n this.resizeObserver && this.resizeObserver?.disconnect();\n BOARD_TO_ROUGH_SVG.delete(this.board);\n BOARD_TO_COMPONENT.delete(this.board);\n BOARD_TO_ROUGH_SVG.delete(this.board);\n BOARD_TO_HOST.delete(this.board);\n BOARD_TO_ELEMENT_HOST.delete(this.board);\n IS_BOARD_ALIVE.set(this.board, false);\n BOARD_TO_ON_CHANGE.delete(this.board);\n BOARD_TO_AFTER_CHANGE.set(this.board, () => {});\n KEY_TO_ELEMENT_MAP.delete(this.board);\n }\n\n markForCheck() {\n this.cdr.markForCheck();\n this.ngZone.run(() => {\n this.updateIslands();\n });\n }\n}\n","import { PlaitElement, PlaitOperation, PlaitTheme, Viewport, Selection, ComponentType, PlaitBoard } from '@plait/core';\nimport { RenderComponentRef } from '@plait/common';\nimport { ComponentRef } from '@angular/core';\nimport { BOARD_TO_COMPONENT } from '../utils/weak-maps';\nimport { BoardComponentInterface } from '../board/board.component.interface';\n\nexport interface AngularBoard {\n renderComponent: <T, K extends { nativeElement: () => HTMLElement }>(\n type: ComponentType<K>,\n container: Element | DocumentFragment,\n props: T\n ) => { ref: RenderComponentRef<T>; componentRef: ComponentRef<K> };\n}\n\nexport const AngularBoard = {\n getBoardComponentInjector(board: PlaitBoard) {\n const boardComponent = BOARD_TO_COMPONENT.get(board) as BoardComponentInterface;\n return boardComponent.injector;\n }\n}\n\nexport interface OnChangeData {\n children: PlaitElement[];\n operations: PlaitOperation[];\n viewport: Viewport;\n selection: Selection | null;\n theme: PlaitTheme;\n}\n","/*\n * Public API Surface of plait\n */\n\nexport * from './board/board.component';\nexport * from './board/board.component.interface';\nexport * from './plugins/angular-board';\nexport * from './island/island-base.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"plait-angular-board.mjs","sources":["../../../packages/angular-board/src/utils/weak-maps.ts","../../../packages/angular-board/src/island/island-base.component.ts","../../../packages/angular-board/src/plugins/with-angular.ts","../../../packages/angular-board/src/board/board.component.ts","../../../packages/angular-board/src/plugins/angular-board.ts","../../../packages/angular-board/src/public-api.ts","../../../packages/angular-board/src/plait-angular-board.ts"],"sourcesContent":["import { PlaitBoard } from '@plait/core';\nimport { BoardComponentInterface } from '../board/board.component.interface';\n\nexport const BOARD_TO_COMPONENT = new WeakMap<PlaitBoard, BoardComponentInterface>();\n","import { ChangeDetectorRef, Directive, Input, OnDestroy, OnInit } from '@angular/core';\nimport { PlaitBoard } from '@plait/core';\nimport { Subscription } from 'rxjs';\nimport { BOARD_TO_COMPONENT } from '../utils/weak-maps';\nimport { BoardComponentInterface } from '../board/board.component.interface';\n\n@Directive({\n host: {\n class: 'plait-island-container'\n },\n standalone: false\n})\nexport abstract class PlaitIslandBaseComponent {\n board!: PlaitBoard;\n\n constructor(protected cdr: ChangeDetectorRef) {}\n\n initialize(board: PlaitBoard) {\n this.board = board;\n this.markForCheck();\n }\n\n markForCheck() {\n this.cdr.markForCheck();\n }\n}\n\n@Directive({\n host: {\n class: 'plait-island-popover-container'\n },\n standalone: false\n})\nexport abstract class PlaitIslandPopoverBaseComponent implements OnInit, OnDestroy {\n @Input() board!: PlaitBoard;\n\n private subscription?: Subscription;\n\n constructor(public cdr: ChangeDetectorRef) {}\n\n initialize(board: PlaitBoard) {\n this.board = board;\n const boardComponent = BOARD_TO_COMPONENT.get(board) as BoardComponentInterface;\n this.subscription = boardComponent.onChange.subscribe(() => {\n if (hasOnBoardChange(this)) {\n this.onBoardChange();\n }\n this.cdr.markForCheck();\n });\n }\n\n ngOnInit(): void {\n if (!this.board) {\n throw new Error('can not find board instance');\n }\n this.initialize(this.board);\n this.islandOnInit();\n }\n\n ngOnDestroy(): void {\n this.subscription?.unsubscribe();\n this.islandOnDestroy();\n }\n\n /**\n * use islandOnInit replace ngOnInit to avoid ngOnInit being overridden\n */\n abstract islandOnInit(): void;\n\n /**\n * use islandOnDestroy replace ngOnDestroy to avoid ngOnDestroy being overridden\n */\n abstract islandOnDestroy(): void;\n}\n\nexport interface OnBoardChange {\n onBoardChange: () => void;\n}\n\nexport const hasOnBoardChange = (value: any): value is OnBoardChange => {\n if (value.onBoardChange) {\n return true;\n } else {\n return false;\n }\n};\n","import { ComponentType, PlaitBoard } from '@plait/core';\nimport { AngularBoard } from './angular-board';\nimport { PlaitTextBoard, TextComponentRef, TextProps } from '@plait/common';\nimport { PlaitTextComponent } from '@plait/angular-text';\nimport { AngularEditor } from 'slate-angular';\nimport { BOARD_TO_COMPONENT } from '../utils/weak-maps';\nimport { BoardComponentInterface } from '../board/board.component.interface';\n\nexport const withAngular = (board: PlaitBoard & PlaitTextBoard) => {\n const newBoard = board as PlaitBoard & PlaitTextBoard & AngularBoard;\n\n newBoard.renderComponent = <T, K extends { nativeElement: () => HTMLElement }>(\n type: ComponentType<K>,\n container: Element | DocumentFragment,\n props: T\n ) => {\n const boardComponent = BOARD_TO_COMPONENT.get(board) as BoardComponentInterface;\n const componentRef = boardComponent.viewContainerRef.createComponent<K>(type);\n for (const key in props) {\n const value = props[key as keyof T];\n (componentRef.instance as any)[key as keyof TextProps] = value as any;\n }\n container.appendChild(componentRef.instance.nativeElement());\n componentRef.changeDetectorRef.detectChanges();\n const ref: TextComponentRef = {\n destroy: () => {\n componentRef.destroy();\n },\n update: (props: Partial<TextProps>) => {\n for (const key in props) {\n const value = props[key as keyof TextProps];\n (componentRef.instance as any)[key] = value;\n }\n // solve image lose on move node\n if (container.children.length === 0) {\n container.append(componentRef.instance.nativeElement());\n }\n componentRef.changeDetectorRef.detectChanges();\n }\n };\n return { ref, componentRef };\n };\n\n newBoard.renderText = (container: Element | DocumentFragment, props: TextProps) => {\n const { ref, componentRef } = newBoard.renderComponent(PlaitTextComponent, container, props);\n const { update } = ref;\n ref.update = props => {\n const beforeReadonly = componentRef.instance.readonly;\n update(props);\n if (beforeReadonly === true && props.readonly === false) {\n AngularEditor.focus(componentRef.instance.editor);\n } else if (beforeReadonly === false && props.readonly === true) {\n AngularEditor.blur(componentRef.instance.editor);\n }\n };\n return ref;\n };\n\n return newBoard;\n};\n","import {\n AfterContentInit,\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n ElementRef,\n EventEmitter,\n HostBinding,\n Injector,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n QueryList,\n SimpleChanges,\n viewChild,\n ViewChild,\n ViewContainerRef\n} from '@angular/core';\nimport rough from 'roughjs/bin/rough';\nimport { RoughSVG } from 'roughjs/bin/svg';\nimport { fromEvent, Subject } from 'rxjs';\nimport { filter, takeUntil, tap } from 'rxjs/operators';\nimport { BoardComponentInterface } from './board.component.interface';\nimport {\n BOARD_TO_AFTER_CHANGE,\n BOARD_TO_CONTEXT,\n BOARD_TO_ELEMENT_HOST,\n BOARD_TO_HOST,\n BOARD_TO_MOVING_POINT,\n BOARD_TO_MOVING_POINT_IN_BOARD,\n BOARD_TO_ON_CHANGE,\n BOARD_TO_ROUGH_SVG,\n BoardTransforms,\n FLUSHING,\n HOST_CLASS_NAME,\n IS_BOARD_ALIVE,\n IS_CHROME,\n IS_FIREFOX,\n IS_SAFARI,\n KEY_TO_ELEMENT_MAP,\n ListRender,\n PlaitBoard,\n PlaitBoardContext,\n PlaitBoardOptions,\n PlaitChildrenContext,\n PlaitElement,\n PlaitPlugin,\n PlaitTheme,\n Viewport,\n WritableClipboardOperationType,\n ZOOM_STEP,\n createBoard,\n deleteFragment,\n getClipboardData,\n getSelectedElements,\n hasInputOrTextareaTarget,\n initializeViewBox,\n initializeViewportContainer,\n initializeViewportOffset,\n isFromScrolling,\n isFromViewportChange,\n setFragment,\n setIsFromScrolling,\n setIsFromViewportChange,\n toHostPoint,\n toViewBoxPoint,\n updateViewBox,\n updateViewportByScrolling,\n updateViewportOffset,\n withBoard,\n withHandPointer,\n withHistory,\n withHotkey,\n withI18n,\n withMoving,\n withOptions,\n withRelatedFragment,\n withSelection\n} from '@plait/core';\nimport { PlaitIslandBaseComponent, hasOnBoardChange } from '../island/island-base.component';\nimport { BOARD_TO_COMPONENT } from '../utils/weak-maps';\nimport { withAngular } from '../plugins/with-angular';\nimport { PlaitCommonElementRef, withImage, withText } from '@plait/common';\nimport { OnChangeData } from '../plugins/angular-board';\n\nconst ElementLowerHostClass = 'element-lower-host';\nconst ElementHostClass = 'element-host';\nconst ElementUpperHostClass = 'element-upper-host';\nconst ElementTopHostClass = 'element-top-host';\n\n@Component({\n selector: 'plait-board',\n template: `\n <div class=\"viewport-container\" #viewportContainer>\n <svg #svg width=\"100%\" height=\"100%\" style=\"position: relative;\" class=\"board-host-svg\">\n <g class=\"element-lower-host\"></g>\n <g class=\"element-host\"></g>\n <g class=\"element-upper-host\"></g>\n <g class=\"element-top-host\"></g>\n </svg>\n <svg width=\"100%\" height=\"100%\" class=\"board-active-svg\">\n <g #activeHostG class=\"active-host-g\"></g>\n </svg>\n </div>\n <ng-content></ng-content>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class PlaitBoardComponent implements BoardComponentInterface, OnInit, OnChanges, AfterViewInit, AfterContentInit, OnDestroy {\n hasInitialized = false;\n\n board!: PlaitBoard;\n\n roughSVG!: RoughSVG;\n\n destroy$ = new Subject<void>();\n\n private resizeObserver!: ResizeObserver;\n\n @Input() plaitValue: PlaitElement[] = [];\n\n @Input() plaitViewport!: Viewport;\n\n @Input() plaitPlugins: PlaitPlugin[] = [];\n\n @Input() plaitOptions?: PlaitBoardOptions;\n\n @Input() plaitTheme?: PlaitTheme;\n\n @Output() onChange: EventEmitter<OnChangeData> = new EventEmitter();\n\n @Output() plaitBoardInitialized: EventEmitter<PlaitBoard> = new EventEmitter();\n\n get host(): SVGSVGElement {\n return this.svg.nativeElement;\n }\n\n @HostBinding('class')\n get hostClass() {\n return `${HOST_CLASS_NAME} theme-${this.board.theme.themeColorMode} ${this.getBrowserClassName()} pointer-${this.board.pointer}`;\n }\n\n getBrowserClassName() {\n if (IS_SAFARI) {\n return 'safari';\n }\n if (IS_CHROME) {\n return 'chrome';\n }\n if (IS_FIREFOX) {\n return 'firefox';\n }\n return '';\n }\n\n @HostBinding('class.readonly')\n get readonly() {\n return this.board.options.readonly;\n }\n\n @HostBinding('class.focused')\n get isFocused() {\n return PlaitBoard.isFocus(this.board);\n }\n\n @HostBinding('class.disabled-scroll')\n get disabledScrollOnNonFocus() {\n return this.board.options.disabledScrollOnNonFocus && !PlaitBoard.isFocus(this.board);\n }\n\n get nativeElement(): HTMLElement {\n return this.elementRef.nativeElement;\n }\n\n @ViewChild('svg', { static: true })\n svg!: ElementRef;\n\n activeHostG = viewChild<ElementRef>('activeHostG');\n\n @ViewChild('viewportContainer', { read: ElementRef, static: true })\n viewportContainer!: ElementRef;\n\n @ContentChildren(PlaitIslandBaseComponent, { descendants: true }) islands?: QueryList<PlaitIslandBaseComponent>;\n\n listRender!: ListRender;\n\n constructor(\n public cdr: ChangeDetectorRef,\n public injector: Injector,\n public viewContainerRef: ViewContainerRef,\n private elementRef: ElementRef<HTMLElement>,\n private ngZone: NgZone\n ) {}\n\n ngOnInit(): void {\n const elementLowerHost = this.host.querySelector(`.${ElementLowerHostClass}`) as SVGGElement;\n const elementHost = this.host.querySelector(`.${ElementHostClass}`) as SVGGElement;\n const elementUpperHost = this.host.querySelector(`.${ElementUpperHostClass}`) as SVGGElement;\n const elementTopHost = this.host.querySelector(`.${ElementTopHostClass}`) as SVGGElement;\n const roughSVG = rough.svg(this.host as SVGSVGElement, {\n options: { roughness: 0, strokeWidth: 1 }\n });\n this.roughSVG = roughSVG;\n this.initializePlugins();\n this.ngZone.runOutsideAngular(() => {\n this.initializeHookListener();\n this.viewportScrollListener();\n this.wheelZoomListener();\n this.elementResizeListener();\n fromEvent<MouseEvent>(document, 'mouseleave')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: MouseEvent) => {\n BOARD_TO_MOVING_POINT.delete(this.board);\n });\n });\n BOARD_TO_COMPONENT.set(this.board, this);\n BOARD_TO_ROUGH_SVG.set(this.board, roughSVG);\n BOARD_TO_HOST.set(this.board, this.host);\n IS_BOARD_ALIVE.set(this.board, true);\n BOARD_TO_ELEMENT_HOST.set(this.board, {\n lowerHost: elementLowerHost,\n host: elementHost,\n upperHost: elementUpperHost,\n topHost: elementTopHost,\n activeHost: this.activeHostG()?.nativeElement,\n container: this.elementRef.nativeElement,\n viewportContainer: this.viewportContainer.nativeElement\n });\n BOARD_TO_ON_CHANGE.set(this.board, () => {\n this.ngZone.run(() => {\n const isOnlySetSelection = this.board.operations.length && this.board.operations.every((op) => op.type === 'set_selection');\n if (isOnlySetSelection) {\n this.updateListRender();\n return;\n }\n const isSetViewport = this.board.operations.length && this.board.operations.some((op) => op.type === 'set_viewport');\n if (isSetViewport && isFromScrolling(this.board)) {\n setIsFromScrolling(this.board, false);\n this.updateListRender();\n return;\n }\n this.updateListRender();\n if (isSetViewport) {\n initializeViewBox(this.board);\n } else {\n updateViewBox(this.board);\n }\n updateViewportOffset(this.board);\n const selectedElements = getSelectedElements(this.board);\n selectedElements.forEach((element) => {\n const elementRef = PlaitElement.getElementRef<PlaitCommonElementRef>(element);\n elementRef.updateActiveSection();\n });\n });\n });\n BOARD_TO_AFTER_CHANGE.set(this.board, () => {\n this.ngZone.run(() => {\n const data: OnChangeData = {\n children: this.board.children,\n operations: this.board.operations,\n viewport: this.board.viewport,\n selection: this.board.selection,\n theme: this.board.theme\n };\n this.updateIslands();\n this.onChange.emit(data);\n });\n });\n const context = new PlaitBoardContext();\n BOARD_TO_CONTEXT.set(this.board, context);\n this.initializeListRender();\n this.hasInitialized = true;\n }\n\n ngAfterContentInit(): void {\n this.initializeIslands();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (this.hasInitialized) {\n const valueChange = changes['plaitValue'];\n const options = changes['plaitOptions'];\n\n if (valueChange) {\n // avoid useless updating\n if (this.board.children !== valueChange.currentValue && !FLUSHING.get(this.board)) {\n this.board.children = valueChange.currentValue;\n this.updateListRender();\n }\n }\n if (options) {\n this.board.options = options.currentValue;\n }\n this.cdr.markForCheck();\n }\n }\n\n ngAfterViewInit(): void {\n this.plaitBoardInitialized.emit(this.board);\n initializeViewportContainer(this.board);\n initializeViewBox(this.board);\n initializeViewportOffset(this.board);\n }\n\n private initializePlugins() {\n let board = withRelatedFragment(\n withHotkey(\n withHandPointer(\n withHistory(\n withSelection(\n withMoving(\n withBoard(\n withI18n(withOptions(withAngular(withImage(withText(createBoard(this.plaitValue, this.plaitOptions))))))\n )\n )\n )\n )\n )\n )\n );\n this.plaitPlugins.forEach((plugin) => {\n board = plugin(board);\n });\n this.board = board;\n\n if (this.plaitViewport) {\n this.board.viewport = this.plaitViewport;\n }\n\n if (this.plaitTheme) {\n this.board.theme = this.plaitTheme;\n }\n\n KEY_TO_ELEMENT_MAP.set(board, new Map());\n }\n\n private initializeHookListener() {\n fromEvent<MouseEvent>(this.host, 'mousedown')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: MouseEvent) => {\n this.board.mousedown(event);\n });\n\n fromEvent<PointerEvent>(this.host, 'pointerdown')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: PointerEvent) => {\n this.board.pointerDown(event);\n });\n\n fromEvent<MouseEvent>(this.host, 'mousemove')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: MouseEvent) => {\n BOARD_TO_MOVING_POINT_IN_BOARD.set(this.board, [event.x, event.y]);\n this.board.mousemove(event);\n });\n\n fromEvent<PointerEvent>(this.host, 'pointermove')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: PointerEvent) => {\n BOARD_TO_MOVING_POINT_IN_BOARD.set(this.board, [event.x, event.y]);\n this.board.pointerMove(event);\n });\n\n fromEvent<MouseEvent>(this.host, 'mouseleave')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: MouseEvent) => {\n BOARD_TO_MOVING_POINT_IN_BOARD.delete(this.board);\n this.board.mouseleave(event);\n });\n\n fromEvent<PointerEvent>(this.host, 'pointerleave')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: PointerEvent) => {\n BOARD_TO_MOVING_POINT_IN_BOARD.delete(this.board);\n this.board.pointerLeave(event);\n });\n\n fromEvent<PointerEvent>(this.host, 'pointercancel')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: PointerEvent) => {\n BOARD_TO_MOVING_POINT_IN_BOARD.delete(this.board);\n this.board.pointerCancel(event);\n });\n\n fromEvent<MouseEvent>(document, 'mousemove')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: MouseEvent) => {\n BOARD_TO_MOVING_POINT.set(this.board, [event.x, event.y]);\n this.board.globalMousemove(event);\n });\n\n fromEvent<PointerEvent>(document, 'pointermove')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: PointerEvent) => {\n BOARD_TO_MOVING_POINT.set(this.board, [event.x, event.y]);\n this.board.globalPointerMove(event);\n });\n\n fromEvent<MouseEvent>(this.host, 'mouseup')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: MouseEvent) => {\n this.board.mouseup(event);\n });\n\n fromEvent<PointerEvent>(this.host, 'pointerup')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: PointerEvent) => {\n this.board.pointerUp(event);\n });\n\n fromEvent<TouchEvent>(this.host, 'touchstart')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: TouchEvent) => {\n this.board.touchStart(event);\n });\n\n fromEvent<TouchEvent>(this.host, 'touchmove')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: TouchEvent) => {\n this.board.touchMove(event);\n });\n\n fromEvent<TouchEvent>(this.host, 'touchend')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: TouchEvent) => {\n this.board.touchEnd(event);\n });\n\n fromEvent<MouseEvent>(document, 'mouseup')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: MouseEvent) => {\n this.board.globalMouseup(event);\n });\n\n fromEvent<PointerEvent>(document, 'pointerup')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: PointerEvent) => {\n this.board.globalPointerUp(event);\n });\n\n fromEvent<MouseEvent>(this.host, 'dblclick')\n .pipe(\n takeUntil(this.destroy$),\n filter(() => this.isFocused && !PlaitBoard.hasBeenTextEditing(this.board))\n )\n .subscribe((event: MouseEvent) => {\n this.board.dblClick(event);\n });\n\n fromEvent<KeyboardEvent>(document, 'keydown')\n .pipe(\n takeUntil(this.destroy$),\n tap((event) => {\n this.board.globalKeyDown(event);\n }),\n filter((event) => this.isFocused && !PlaitBoard.hasBeenTextEditing(this.board) && !hasInputOrTextareaTarget(event.target))\n )\n .subscribe((event: KeyboardEvent) => {\n this.board.keyDown(event);\n });\n\n fromEvent<KeyboardEvent>(document, 'keyup')\n .pipe(\n takeUntil(this.destroy$),\n filter(() => this.isFocused && !PlaitBoard.hasBeenTextEditing(this.board))\n )\n .subscribe((event: KeyboardEvent) => {\n this.board?.keyUp(event);\n });\n\n fromEvent<ClipboardEvent>(document, 'copy')\n .pipe(\n takeUntil(this.destroy$),\n filter(() => this.isFocused && !PlaitBoard.hasBeenTextEditing(this.board))\n )\n .subscribe((event: ClipboardEvent) => {\n event.preventDefault();\n setFragment(this.board, WritableClipboardOperationType.copy, event.clipboardData);\n });\n\n fromEvent<ClipboardEvent>(document, 'paste')\n .pipe(\n takeUntil(this.destroy$),\n filter(() => this.isFocused && !PlaitBoard.isReadonly(this.board) && !PlaitBoard.hasBeenTextEditing(this.board))\n )\n .subscribe(async (clipboardEvent: ClipboardEvent) => {\n const mousePoint = PlaitBoard.getMovingPointInBoard(this.board);\n if (mousePoint) {\n const targetPoint = toViewBoxPoint(this.board, toHostPoint(this.board, mousePoint[0], mousePoint[1]));\n const clipboardData = await getClipboardData(clipboardEvent.clipboardData);\n this.board.insertFragment(clipboardData, targetPoint, WritableClipboardOperationType.paste);\n }\n });\n\n fromEvent<ClipboardEvent>(document, 'cut')\n .pipe(\n takeUntil(this.destroy$),\n filter(() => this.isFocused && !PlaitBoard.isReadonly(this.board) && !PlaitBoard.hasBeenTextEditing(this.board))\n )\n .subscribe((event: ClipboardEvent) => {\n event.preventDefault();\n setFragment(this.board, WritableClipboardOperationType.cut, event.clipboardData);\n deleteFragment(this.board);\n });\n\n fromEvent<DragEvent>(this.host, 'drop')\n .pipe(\n takeUntil(this.destroy$),\n filter(() => !PlaitBoard.isReadonly(this.board))\n )\n .subscribe((event: DragEvent) => {\n event.preventDefault();\n this.board.drop(event);\n });\n fromEvent<DragEvent>(this.host, 'dragover')\n .pipe(\n takeUntil(this.destroy$),\n filter(() => !PlaitBoard.isReadonly(this.board))\n )\n .subscribe((event: DragEvent) => {\n event.preventDefault();\n });\n }\n\n private initializeListRender() {\n this.listRender = new ListRender(this.board);\n this.listRender.initialize(this.board.children, this.initializeChildrenContext());\n }\n\n private updateListRender() {\n this.listRender.update(this.board.children, this.initializeChildrenContext());\n }\n\n private initializeChildrenContext(): PlaitChildrenContext {\n return {\n board: this.board,\n parent: this.board,\n parentG: PlaitBoard.getElementHost(this.board)\n };\n }\n\n private viewportScrollListener() {\n fromEvent<MouseEvent>(this.viewportContainer.nativeElement, 'scroll')\n .pipe(\n takeUntil(this.destroy$),\n filter(() => {\n if (isFromViewportChange(this.board)) {\n setIsFromViewportChange(this.board, false);\n return false;\n }\n return true;\n })\n )\n .subscribe((event: Event) => {\n const { scrollLeft, scrollTop } = event.target as HTMLElement;\n updateViewportByScrolling(this.board, scrollLeft, scrollTop);\n });\n }\n\n private elementResizeListener() {\n this.resizeObserver = new ResizeObserver(() => {\n initializeViewportContainer(this.board);\n initializeViewBox(this.board);\n updateViewportOffset(this.board);\n });\n this.resizeObserver.observe(this.nativeElement);\n }\n\n private initializeIslands() {\n this.islands?.forEach((island) => {\n island.initialize(this.board);\n });\n }\n\n private updateIslands() {\n this.islands?.forEach((island) => {\n if (hasOnBoardChange(island)) {\n island.onBoardChange();\n }\n island.markForCheck();\n });\n }\n\n private wheelZoomListener() {\n fromEvent<WheelEvent>(this.host, 'wheel', { passive: false })\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: WheelEvent) => {\n // Credits to excalidraw\n // https://github.com/excalidraw/excalidraw/blob/b7d7ccc929696cc17b4cc34452e4afd846d59f4f/src/components/App.tsx#L9060\n if (event.metaKey || event.ctrlKey) {\n event.preventDefault();\n const { deltaX, deltaY } = event;\n const zoom = this.board.viewport.zoom;\n const sign = Math.sign(deltaY);\n const MAX_STEP = ZOOM_STEP * 100;\n const absDelta = Math.abs(deltaY);\n let delta = deltaY;\n if (absDelta > MAX_STEP) {\n delta = MAX_STEP * sign;\n }\n let newZoom = zoom - delta / 100;\n // increase zoom steps the more zoomed-in we are (applies to >100% only)\n newZoom +=\n Math.log10(Math.max(1, zoom)) *\n -sign *\n // reduced amplification for small deltas (small movements on a trackpad)\n Math.min(1, absDelta / 20);\n BoardTransforms.updateZoom(this.board, newZoom, PlaitBoard.getMovingPointInBoard(this.board));\n }\n });\n }\n\n trackBy = (index: number, element: PlaitElement) => {\n return element.id;\n };\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n this.resizeObserver && this.resizeObserver?.disconnect();\n BOARD_TO_ROUGH_SVG.delete(this.board);\n BOARD_TO_COMPONENT.delete(this.board);\n BOARD_TO_ROUGH_SVG.delete(this.board);\n BOARD_TO_HOST.delete(this.board);\n BOARD_TO_ELEMENT_HOST.delete(this.board);\n IS_BOARD_ALIVE.set(this.board, false);\n BOARD_TO_ON_CHANGE.delete(this.board);\n BOARD_TO_AFTER_CHANGE.set(this.board, () => {});\n KEY_TO_ELEMENT_MAP.delete(this.board);\n }\n\n markForCheck() {\n this.cdr.markForCheck();\n this.ngZone.run(() => {\n this.updateIslands();\n });\n }\n}\n","import { PlaitElement, PlaitOperation, PlaitTheme, Viewport, Selection, ComponentType, PlaitBoard } from '@plait/core';\nimport { RenderComponentRef } from '@plait/common';\nimport { ComponentRef } from '@angular/core';\nimport { BOARD_TO_COMPONENT } from '../utils/weak-maps';\nimport { BoardComponentInterface } from '../board/board.component.interface';\n\nexport interface AngularBoard {\n renderComponent: <T, K extends { nativeElement: () => HTMLElement }>(\n type: ComponentType<K>,\n container: Element | DocumentFragment,\n props: T\n ) => { ref: RenderComponentRef<T>; componentRef: ComponentRef<K> };\n}\n\nexport const AngularBoard = {\n getBoardComponentInjector(board: PlaitBoard) {\n const boardComponent = BOARD_TO_COMPONENT.get(board) as BoardComponentInterface;\n return boardComponent.injector;\n }\n}\n\nexport interface OnChangeData {\n children: PlaitElement[];\n operations: PlaitOperation[];\n viewport: Viewport;\n selection: Selection | null;\n theme: PlaitTheme;\n}\n","/*\n * Public API Surface of plait\n */\n\nexport * from './board/board.component';\nexport * from './board/board.component.interface';\nexport * from './plugins/angular-board';\nexport * from './island/island-base.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
package/index.d.ts
CHANGED
|
@@ -1,5 +1,122 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { ComponentRef, ChangeDetectorRef, ViewContainerRef, Injector, EventEmitter, OnInit, OnDestroy, OnChanges, AfterViewInit, AfterContentInit, ElementRef, QueryList, NgZone, SimpleChanges } from '@angular/core';
|
|
3
|
+
import { RoughSVG } from 'roughjs/bin/svg';
|
|
4
|
+
import { Subject } from 'rxjs';
|
|
5
|
+
import { PlaitElement, PlaitOperation, Viewport, Selection, PlaitTheme, ComponentType, PlaitBoard, PlaitPlugin, PlaitBoardOptions, ListRender } from '@plait/core';
|
|
6
|
+
import { RenderComponentRef } from '@plait/common';
|
|
7
|
+
|
|
8
|
+
interface AngularBoard {
|
|
9
|
+
renderComponent: <T, K extends {
|
|
10
|
+
nativeElement: () => HTMLElement;
|
|
11
|
+
}>(type: ComponentType<K>, container: Element | DocumentFragment, props: T) => {
|
|
12
|
+
ref: RenderComponentRef<T>;
|
|
13
|
+
componentRef: ComponentRef<K>;
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
declare const AngularBoard: {
|
|
17
|
+
getBoardComponentInjector(board: PlaitBoard): i0.Injector;
|
|
18
|
+
};
|
|
19
|
+
interface OnChangeData {
|
|
20
|
+
children: PlaitElement[];
|
|
21
|
+
operations: PlaitOperation[];
|
|
22
|
+
viewport: Viewport;
|
|
23
|
+
selection: Selection | null;
|
|
24
|
+
theme: PlaitTheme;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
interface BoardComponentInterface {
|
|
28
|
+
markForCheck: () => void;
|
|
29
|
+
cdr: ChangeDetectorRef;
|
|
30
|
+
nativeElement: HTMLElement;
|
|
31
|
+
viewContainerRef: ViewContainerRef;
|
|
32
|
+
injector: Injector;
|
|
33
|
+
onChange: EventEmitter<OnChangeData>;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
declare abstract class PlaitIslandBaseComponent {
|
|
37
|
+
protected cdr: ChangeDetectorRef;
|
|
38
|
+
board: PlaitBoard;
|
|
39
|
+
constructor(cdr: ChangeDetectorRef);
|
|
40
|
+
initialize(board: PlaitBoard): void;
|
|
41
|
+
markForCheck(): void;
|
|
42
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<PlaitIslandBaseComponent, never>;
|
|
43
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<PlaitIslandBaseComponent, never, never, {}, {}, never, never, false, never>;
|
|
44
|
+
}
|
|
45
|
+
declare abstract class PlaitIslandPopoverBaseComponent implements OnInit, OnDestroy {
|
|
46
|
+
cdr: ChangeDetectorRef;
|
|
47
|
+
board: PlaitBoard;
|
|
48
|
+
private subscription?;
|
|
49
|
+
constructor(cdr: ChangeDetectorRef);
|
|
50
|
+
initialize(board: PlaitBoard): void;
|
|
51
|
+
ngOnInit(): void;
|
|
52
|
+
ngOnDestroy(): void;
|
|
53
|
+
/**
|
|
54
|
+
* use islandOnInit replace ngOnInit to avoid ngOnInit being overridden
|
|
55
|
+
*/
|
|
56
|
+
abstract islandOnInit(): void;
|
|
57
|
+
/**
|
|
58
|
+
* use islandOnDestroy replace ngOnDestroy to avoid ngOnDestroy being overridden
|
|
59
|
+
*/
|
|
60
|
+
abstract islandOnDestroy(): void;
|
|
61
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<PlaitIslandPopoverBaseComponent, never>;
|
|
62
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<PlaitIslandPopoverBaseComponent, never, never, { "board": { "alias": "board"; "required": false; }; }, {}, never, never, false, never>;
|
|
63
|
+
}
|
|
64
|
+
interface OnBoardChange {
|
|
65
|
+
onBoardChange: () => void;
|
|
66
|
+
}
|
|
67
|
+
declare const hasOnBoardChange: (value: any) => value is OnBoardChange;
|
|
68
|
+
|
|
69
|
+
declare class PlaitBoardComponent implements BoardComponentInterface, OnInit, OnChanges, AfterViewInit, AfterContentInit, OnDestroy {
|
|
70
|
+
cdr: ChangeDetectorRef;
|
|
71
|
+
injector: Injector;
|
|
72
|
+
viewContainerRef: ViewContainerRef;
|
|
73
|
+
private elementRef;
|
|
74
|
+
private ngZone;
|
|
75
|
+
hasInitialized: boolean;
|
|
76
|
+
board: PlaitBoard;
|
|
77
|
+
roughSVG: RoughSVG;
|
|
78
|
+
destroy$: Subject<void>;
|
|
79
|
+
private resizeObserver;
|
|
80
|
+
plaitValue: PlaitElement[];
|
|
81
|
+
plaitViewport: Viewport;
|
|
82
|
+
plaitPlugins: PlaitPlugin[];
|
|
83
|
+
plaitOptions?: PlaitBoardOptions;
|
|
84
|
+
plaitTheme?: PlaitTheme;
|
|
85
|
+
onChange: EventEmitter<OnChangeData>;
|
|
86
|
+
plaitBoardInitialized: EventEmitter<PlaitBoard>;
|
|
87
|
+
get host(): SVGSVGElement;
|
|
88
|
+
get hostClass(): string;
|
|
89
|
+
getBrowserClassName(): "safari" | "chrome" | "firefox" | "";
|
|
90
|
+
get readonly(): boolean | undefined;
|
|
91
|
+
get isFocused(): boolean;
|
|
92
|
+
get disabledScrollOnNonFocus(): boolean | undefined;
|
|
93
|
+
get nativeElement(): HTMLElement;
|
|
94
|
+
svg: ElementRef;
|
|
95
|
+
activeHostG: i0.Signal<ElementRef<any> | undefined>;
|
|
96
|
+
viewportContainer: ElementRef;
|
|
97
|
+
islands?: QueryList<PlaitIslandBaseComponent>;
|
|
98
|
+
listRender: ListRender;
|
|
99
|
+
constructor(cdr: ChangeDetectorRef, injector: Injector, viewContainerRef: ViewContainerRef, elementRef: ElementRef<HTMLElement>, ngZone: NgZone);
|
|
100
|
+
ngOnInit(): void;
|
|
101
|
+
ngAfterContentInit(): void;
|
|
102
|
+
ngOnChanges(changes: SimpleChanges): void;
|
|
103
|
+
ngAfterViewInit(): void;
|
|
104
|
+
private initializePlugins;
|
|
105
|
+
private initializeHookListener;
|
|
106
|
+
private initializeListRender;
|
|
107
|
+
private updateListRender;
|
|
108
|
+
private initializeChildrenContext;
|
|
109
|
+
private viewportScrollListener;
|
|
110
|
+
private elementResizeListener;
|
|
111
|
+
private initializeIslands;
|
|
112
|
+
private updateIslands;
|
|
113
|
+
private wheelZoomListener;
|
|
114
|
+
trackBy: (index: number, element: PlaitElement) => string;
|
|
115
|
+
ngOnDestroy(): void;
|
|
116
|
+
markForCheck(): void;
|
|
117
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<PlaitBoardComponent, never>;
|
|
118
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<PlaitBoardComponent, "plait-board", never, { "plaitValue": { "alias": "plaitValue"; "required": false; }; "plaitViewport": { "alias": "plaitViewport"; "required": false; }; "plaitPlugins": { "alias": "plaitPlugins"; "required": false; }; "plaitOptions": { "alias": "plaitOptions"; "required": false; }; "plaitTheme": { "alias": "plaitTheme"; "required": false; }; }, { "onChange": "onChange"; "plaitBoardInitialized": "plaitBoardInitialized"; }, ["islands"], ["*"], true, never>;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
export { AngularBoard, PlaitBoardComponent, PlaitIslandBaseComponent, PlaitIslandPopoverBaseComponent, hasOnBoardChange };
|
|
122
|
+
export type { BoardComponentInterface, OnBoardChange, OnChangeData };
|
package/package.json
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@plait/angular-board",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.92.0-next.0",
|
|
4
4
|
"peerDependencies": {
|
|
5
|
-
"@angular/common": "^
|
|
6
|
-
"@angular/core": "^
|
|
5
|
+
"@angular/common": "^20.0.0",
|
|
6
|
+
"@angular/core": "^20.0.0"
|
|
7
7
|
},
|
|
8
8
|
"dependencies": {
|
|
9
9
|
"tslib": "^2.3.0"
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
import { AfterContentInit, AfterViewInit, ChangeDetectorRef, ElementRef, EventEmitter, Injector, NgZone, OnChanges, OnDestroy, OnInit, QueryList, SimpleChanges, ViewContainerRef } from '@angular/core';
|
|
2
|
-
import { RoughSVG } from 'roughjs/bin/svg';
|
|
3
|
-
import { Subject } from 'rxjs';
|
|
4
|
-
import { BoardComponentInterface } from './board.component.interface';
|
|
5
|
-
import { ListRender, PlaitBoard, PlaitBoardOptions, PlaitElement, PlaitPlugin, PlaitTheme, Viewport } from '@plait/core';
|
|
6
|
-
import { PlaitIslandBaseComponent } from '../island/island-base.component';
|
|
7
|
-
import { OnChangeData } from '../plugins/angular-board';
|
|
8
|
-
import * as i0 from "@angular/core";
|
|
9
|
-
export declare class PlaitBoardComponent implements BoardComponentInterface, OnInit, OnChanges, AfterViewInit, AfterContentInit, OnDestroy {
|
|
10
|
-
cdr: ChangeDetectorRef;
|
|
11
|
-
injector: Injector;
|
|
12
|
-
viewContainerRef: ViewContainerRef;
|
|
13
|
-
private elementRef;
|
|
14
|
-
private ngZone;
|
|
15
|
-
hasInitialized: boolean;
|
|
16
|
-
board: PlaitBoard;
|
|
17
|
-
roughSVG: RoughSVG;
|
|
18
|
-
destroy$: Subject<void>;
|
|
19
|
-
private resizeObserver;
|
|
20
|
-
plaitValue: PlaitElement[];
|
|
21
|
-
plaitViewport: Viewport;
|
|
22
|
-
plaitPlugins: PlaitPlugin[];
|
|
23
|
-
plaitOptions?: PlaitBoardOptions;
|
|
24
|
-
plaitTheme?: PlaitTheme;
|
|
25
|
-
onChange: EventEmitter<OnChangeData>;
|
|
26
|
-
plaitBoardInitialized: EventEmitter<PlaitBoard>;
|
|
27
|
-
get host(): SVGSVGElement;
|
|
28
|
-
get hostClass(): string;
|
|
29
|
-
getBrowserClassName(): "safari" | "chrome" | "firefox" | "";
|
|
30
|
-
get readonly(): boolean | undefined;
|
|
31
|
-
get isFocused(): boolean;
|
|
32
|
-
get disabledScrollOnNonFocus(): boolean | undefined;
|
|
33
|
-
get nativeElement(): HTMLElement;
|
|
34
|
-
svg: ElementRef;
|
|
35
|
-
activeHostG: import("@angular/core").Signal<ElementRef<any> | undefined>;
|
|
36
|
-
viewportContainer: ElementRef;
|
|
37
|
-
islands?: QueryList<PlaitIslandBaseComponent>;
|
|
38
|
-
listRender: ListRender;
|
|
39
|
-
constructor(cdr: ChangeDetectorRef, injector: Injector, viewContainerRef: ViewContainerRef, elementRef: ElementRef<HTMLElement>, ngZone: NgZone);
|
|
40
|
-
ngOnInit(): void;
|
|
41
|
-
ngAfterContentInit(): void;
|
|
42
|
-
ngOnChanges(changes: SimpleChanges): void;
|
|
43
|
-
ngAfterViewInit(): void;
|
|
44
|
-
private initializePlugins;
|
|
45
|
-
private initializeHookListener;
|
|
46
|
-
private initializeListRender;
|
|
47
|
-
private updateListRender;
|
|
48
|
-
private initializeChildrenContext;
|
|
49
|
-
private viewportScrollListener;
|
|
50
|
-
private elementResizeListener;
|
|
51
|
-
private initializeIslands;
|
|
52
|
-
private updateIslands;
|
|
53
|
-
private wheelZoomListener;
|
|
54
|
-
trackBy: (index: number, element: PlaitElement) => string;
|
|
55
|
-
ngOnDestroy(): void;
|
|
56
|
-
markForCheck(): void;
|
|
57
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<PlaitBoardComponent, never>;
|
|
58
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<PlaitBoardComponent, "plait-board", never, { "plaitValue": { "alias": "plaitValue"; "required": false; }; "plaitViewport": { "alias": "plaitViewport"; "required": false; }; "plaitPlugins": { "alias": "plaitPlugins"; "required": false; }; "plaitOptions": { "alias": "plaitOptions"; "required": false; }; "plaitTheme": { "alias": "plaitTheme"; "required": false; }; }, { "onChange": "onChange"; "plaitBoardInitialized": "plaitBoardInitialized"; }, ["islands"], ["*"], true, never>;
|
|
59
|
-
}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { ChangeDetectorRef, EventEmitter, Injector, ViewContainerRef } from '@angular/core';
|
|
2
|
-
import { OnChangeData } from '../plugins/angular-board';
|
|
3
|
-
export interface BoardComponentInterface {
|
|
4
|
-
markForCheck: () => void;
|
|
5
|
-
cdr: ChangeDetectorRef;
|
|
6
|
-
nativeElement: HTMLElement;
|
|
7
|
-
viewContainerRef: ViewContainerRef;
|
|
8
|
-
injector: Injector;
|
|
9
|
-
onChange: EventEmitter<OnChangeData>;
|
|
10
|
-
}
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import { ChangeDetectorRef, OnDestroy, OnInit } from '@angular/core';
|
|
2
|
-
import { PlaitBoard } from '@plait/core';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
export declare abstract class PlaitIslandBaseComponent {
|
|
5
|
-
protected cdr: ChangeDetectorRef;
|
|
6
|
-
board: PlaitBoard;
|
|
7
|
-
constructor(cdr: ChangeDetectorRef);
|
|
8
|
-
initialize(board: PlaitBoard): void;
|
|
9
|
-
markForCheck(): void;
|
|
10
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<PlaitIslandBaseComponent, never>;
|
|
11
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<PlaitIslandBaseComponent, never, never, {}, {}, never, never, false, never>;
|
|
12
|
-
}
|
|
13
|
-
export declare abstract class PlaitIslandPopoverBaseComponent implements OnInit, OnDestroy {
|
|
14
|
-
cdr: ChangeDetectorRef;
|
|
15
|
-
board: PlaitBoard;
|
|
16
|
-
private subscription?;
|
|
17
|
-
constructor(cdr: ChangeDetectorRef);
|
|
18
|
-
initialize(board: PlaitBoard): void;
|
|
19
|
-
ngOnInit(): void;
|
|
20
|
-
ngOnDestroy(): void;
|
|
21
|
-
/**
|
|
22
|
-
* use islandOnInit replace ngOnInit to avoid ngOnInit being overridden
|
|
23
|
-
*/
|
|
24
|
-
abstract islandOnInit(): void;
|
|
25
|
-
/**
|
|
26
|
-
* use islandOnDestroy replace ngOnDestroy to avoid ngOnDestroy being overridden
|
|
27
|
-
*/
|
|
28
|
-
abstract islandOnDestroy(): void;
|
|
29
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<PlaitIslandPopoverBaseComponent, never>;
|
|
30
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<PlaitIslandPopoverBaseComponent, never, never, { "board": { "alias": "board"; "required": false; }; }, {}, never, never, false, never>;
|
|
31
|
-
}
|
|
32
|
-
export interface OnBoardChange {
|
|
33
|
-
onBoardChange: () => void;
|
|
34
|
-
}
|
|
35
|
-
export declare const hasOnBoardChange: (value: any) => value is OnBoardChange;
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import { PlaitElement, PlaitOperation, PlaitTheme, Viewport, Selection, ComponentType, PlaitBoard } from '@plait/core';
|
|
2
|
-
import { RenderComponentRef } from '@plait/common';
|
|
3
|
-
import { ComponentRef } from '@angular/core';
|
|
4
|
-
export interface AngularBoard {
|
|
5
|
-
renderComponent: <T, K extends {
|
|
6
|
-
nativeElement: () => HTMLElement;
|
|
7
|
-
}>(type: ComponentType<K>, container: Element | DocumentFragment, props: T) => {
|
|
8
|
-
ref: RenderComponentRef<T>;
|
|
9
|
-
componentRef: ComponentRef<K>;
|
|
10
|
-
};
|
|
11
|
-
}
|
|
12
|
-
export declare const AngularBoard: {
|
|
13
|
-
getBoardComponentInjector(board: PlaitBoard): import("@angular/core").Injector;
|
|
14
|
-
};
|
|
15
|
-
export interface OnChangeData {
|
|
16
|
-
children: PlaitElement[];
|
|
17
|
-
operations: PlaitOperation[];
|
|
18
|
-
viewport: Viewport;
|
|
19
|
-
selection: Selection | null;
|
|
20
|
-
theme: PlaitTheme;
|
|
21
|
-
}
|
package/public-api.d.ts
DELETED
package/utils/weak-maps.d.ts
DELETED