slate-angular 15.1.0-next.1 → 15.1.0-next.3
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/components/editable/editable.component.d.ts +3 -2
- package/components/leaves/leaves.component.d.ts +1 -1
- package/components/string/default-string.component.d.ts +11 -1
- package/components/string/string.component.d.ts +5 -0
- package/components/string/template.component.d.ts +2 -3
- package/esm2020/components/editable/editable.component.mjs +20 -3
- package/esm2020/components/leaves/leaves.component.mjs +4 -4
- package/esm2020/components/string/default-string.component.mjs +44 -2
- package/esm2020/components/string/string.component.mjs +42 -22
- package/esm2020/components/string/template.component.mjs +7 -13
- package/esm2020/view/context.mjs +1 -1
- package/fesm2015/slate-angular.mjs +113 -39
- package/fesm2015/slate-angular.mjs.map +1 -1
- package/fesm2020/slate-angular.mjs +112 -39
- package/fesm2020/slate-angular.mjs.map +1 -1
- package/package.json +3 -2
- package/view/context.d.ts +1 -0
|
@@ -13,10 +13,10 @@ export class SlateLeavesComponent extends ViewContainer {
|
|
|
13
13
|
}
|
|
14
14
|
ngOnInit() {
|
|
15
15
|
this.leaves = Text.decorations(this.context.text, this.context.decorations);
|
|
16
|
-
this.leafContexts = this.
|
|
16
|
+
this.leafContexts = this.getLeafContexts();
|
|
17
17
|
this.initialized = true;
|
|
18
18
|
}
|
|
19
|
-
|
|
19
|
+
getLeafContexts() {
|
|
20
20
|
return this.leaves.map((leaf, index) => {
|
|
21
21
|
return {
|
|
22
22
|
leaf,
|
|
@@ -37,7 +37,7 @@ export class SlateLeavesComponent extends ViewContainer {
|
|
|
37
37
|
if (previousValue.text !== currentValue.text || !isDecoratorRangeListEqual(previousValue.decorations, currentValue.decorations)) {
|
|
38
38
|
this.leaves = Text.decorations(this.context.text, this.context.decorations);
|
|
39
39
|
}
|
|
40
|
-
this.leafContexts = this.
|
|
40
|
+
this.leafContexts = this.getLeafContexts();
|
|
41
41
|
}
|
|
42
42
|
trackBy(index, item) {
|
|
43
43
|
return index;
|
|
@@ -68,4 +68,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.4", ngImpor
|
|
|
68
68
|
type: ViewChildren,
|
|
69
69
|
args: [SlateLeafComponent, { read: SlateLeafComponent }]
|
|
70
70
|
}] } });
|
|
71
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
71
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGVhdmVzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL3NyYy9jb21wb25lbnRzL2xlYXZlcy9sZWF2ZXMuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULEtBQUssRUFLTCxZQUFZLEVBQ2YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUU3QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDckQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDNUQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sd0JBQXdCLENBQUM7Ozs7QUFZbkUsTUFBTSxPQUFPLG9CQUFxQixTQUFRLGFBQWlDO0lBVjNFOztRQVdJLGdCQUFXLEdBQUcsS0FBSyxDQUFDO0tBMkN2QjtJQWxDRyxRQUFRO1FBQ0osSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDNUUsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDM0MsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7SUFDNUIsQ0FBQztJQUVELGVBQWU7UUFDWCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQ25DLE9BQU87Z0JBQ0gsSUFBSTtnQkFDSixJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJO2dCQUN2QixNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNO2dCQUMzQixLQUFLO2dCQUNMLE1BQU0sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sSUFBSSxLQUFLLEtBQUssSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQzthQUNsRSxDQUFDO1FBQ04sQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsV0FBVyxDQUFDLGFBQTRCO1FBQ3BDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ25CLE9BQU87U0FDVjtRQUNELE1BQU0sT0FBTyxHQUFHLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN6QyxNQUFNLGFBQWEsR0FBcUIsT0FBTyxDQUFDLGFBQWEsQ0FBQztRQUM5RCxNQUFNLFlBQVksR0FBcUIsT0FBTyxDQUFDLFlBQVksQ0FBQztRQUM1RCxJQUFJLGFBQWEsQ0FBQyxJQUFJLEtBQUssWUFBWSxDQUFDLElBQUksSUFBSSxDQUFDLHlCQUF5QixDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsWUFBWSxDQUFDLFdBQVcsQ0FBQyxFQUFFO1lBQzdILElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQy9FO1FBQ0QsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDL0MsQ0FBQztJQUVELE9BQU8sQ0FBQyxLQUFLLEVBQUUsSUFBSTtRQUNmLE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7O2lIQTNDUSxvQkFBb0I7cUdBQXBCLG9CQUFvQiwwSEFPZixrQkFBa0IsMkJBQVUsa0JBQWtCLHlFQWZsRDs7Ozs7bUJBS0s7MkZBR04sb0JBQW9CO2tCQVZoQyxTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxjQUFjO29CQUN4QixRQUFRLEVBQUU7Ozs7O21CQUtLO29CQUNmLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2lCQUNsRDs4QkFNWSxPQUFPO3NCQUFmLEtBQUs7Z0JBR04saUJBQWlCO3NCQURoQixZQUFZO3VCQUFDLGtCQUFrQixFQUFFLEVBQUUsSUFBSSxFQUFFLGtCQUFrQixFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENvbXBvbmVudCxcbiAgICBJbnB1dCxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25Jbml0LFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFZpZXdDaGlsZHJlblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRleHQgfSBmcm9tICdzbGF0ZSc7XG5pbXBvcnQgeyBTbGF0ZUxlYWZDb250ZXh0LCBTbGF0ZVRleHRDb250ZXh0LCBTbGF0ZVZpZXdDb250ZXh0IH0gZnJvbSAnLi4vLi4vdmlldy9jb250ZXh0JztcbmltcG9ydCB7IFZpZXdDb250YWluZXIgfSBmcm9tICcuLi8uLi92aWV3L2NvbnRhaW5lcic7XG5pbXBvcnQgeyBTbGF0ZUxlYWZDb21wb25lbnQgfSBmcm9tICcuLi9sZWFmL2xlYWYuY29tcG9uZW50JztcbmltcG9ydCB7IGlzRGVjb3JhdG9yUmFuZ2VMaXN0RXF1YWwgfSBmcm9tICcuLi8uLi91dGlscy9yYW5nZS1saXN0JztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdzbGF0ZS1sZWF2ZXMnLFxuICAgIHRlbXBsYXRlOiBgPHNsYXRlLWxlYWZcbiAgICAgICAgW2NvbnRleHRdPVwiY29udGV4dFwiXG4gICAgICAgIFt2aWV3Q29udGV4dF09XCJ2aWV3Q29udGV4dFwiXG4gICAgICAgIFt2aWV3Q29udGV4dF09XCJ2aWV3Q29udGV4dFwiXG4gICAgICAgICpuZ0Zvcj1cImxldCBjb250ZXh0IG9mIGxlYWZDb250ZXh0czsgdHJhY2tCeTogdHJhY2tCeVwiXG4gICAgPjwvc2xhdGUtbGVhZj5gLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIFNsYXRlTGVhdmVzQ29tcG9uZW50IGV4dGVuZHMgVmlld0NvbnRhaW5lcjxTbGF0ZUxlYWZDb21wb25lbnQ+IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMge1xuICAgIGluaXRpYWxpemVkID0gZmFsc2U7XG4gICAgbGVhZkNvbnRleHRzOiBTbGF0ZUxlYWZDb250ZXh0W107XG4gICAgbGVhdmVzOiBUZXh0W107XG5cbiAgICBASW5wdXQoKSBjb250ZXh0OiBTbGF0ZVRleHRDb250ZXh0O1xuXG4gICAgQFZpZXdDaGlsZHJlbihTbGF0ZUxlYWZDb21wb25lbnQsIHsgcmVhZDogU2xhdGVMZWFmQ29tcG9uZW50IH0pXG4gICAgY2hpbGRyZW5Db21wb25lbnQ6IFF1ZXJ5TGlzdDxTbGF0ZUxlYWZDb21wb25lbnQ+O1xuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMubGVhdmVzID0gVGV4dC5kZWNvcmF0aW9ucyh0aGlzLmNvbnRleHQudGV4dCwgdGhpcy5jb250ZXh0LmRlY29yYXRpb25zKTtcbiAgICAgICAgdGhpcy5sZWFmQ29udGV4dHMgPSB0aGlzLmdldExlYWZDb250ZXh0cygpO1xuICAgICAgICB0aGlzLmluaXRpYWxpemVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBnZXRMZWFmQ29udGV4dHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxlYXZlcy5tYXAoKGxlYWYsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGxlYWYsXG4gICAgICAgICAgICAgICAgdGV4dDogdGhpcy5jb250ZXh0LnRleHQsXG4gICAgICAgICAgICAgICAgcGFyZW50OiB0aGlzLmNvbnRleHQucGFyZW50LFxuICAgICAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgICAgICAgIGlzTGFzdDogdGhpcy5jb250ZXh0LmlzTGFzdCAmJiBpbmRleCA9PT0gdGhpcy5sZWF2ZXMubGVuZ3RoIC0gMVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoc2ltcGxlQ2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgICAgICBpZiAoIXRoaXMuaW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb250ZXh0ID0gc2ltcGxlQ2hhbmdlc1snY29udGV4dCddO1xuICAgICAgICBjb25zdCBwcmV2aW91c1ZhbHVlOiBTbGF0ZVRleHRDb250ZXh0ID0gY29udGV4dC5wcmV2aW91c1ZhbHVlO1xuICAgICAgICBjb25zdCBjdXJyZW50VmFsdWU6IFNsYXRlVGV4dENvbnRleHQgPSBjb250ZXh0LmN1cnJlbnRWYWx1ZTtcbiAgICAgICAgaWYgKHByZXZpb3VzVmFsdWUudGV4dCAhPT0gY3VycmVudFZhbHVlLnRleHQgfHwgIWlzRGVjb3JhdG9yUmFuZ2VMaXN0RXF1YWwocHJldmlvdXNWYWx1ZS5kZWNvcmF0aW9ucywgY3VycmVudFZhbHVlLmRlY29yYXRpb25zKSkge1xuICAgICAgICAgICAgdGhpcy5sZWF2ZXMgPSBUZXh0LmRlY29yYXRpb25zKHRoaXMuY29udGV4dC50ZXh0LCB0aGlzLmNvbnRleHQuZGVjb3JhdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubGVhZkNvbnRleHRzID0gdGhpcy5nZXRMZWFmQ29udGV4dHMoKTtcbiAgICB9XG5cbiAgICB0cmFja0J5KGluZGV4LCBpdGVtKSB7XG4gICAgICAgIHJldHVybiBpbmRleDtcbiAgICB9XG59XG4iXX0=
|
|
@@ -7,15 +7,57 @@ export class SlateDefaultStringComponent extends BaseComponent {
|
|
|
7
7
|
this.elementRef = elementRef;
|
|
8
8
|
this.cdr = cdr;
|
|
9
9
|
}
|
|
10
|
+
beforeContextChange(value) {
|
|
11
|
+
if (this.context) {
|
|
12
|
+
if (this.context.type === 'lineBreakEmptyString') {
|
|
13
|
+
this.removeLineBreakEmptyStringDOM();
|
|
14
|
+
}
|
|
15
|
+
if (this.context.type === 'string') {
|
|
16
|
+
if (value.type === 'lineBreakEmptyString') {
|
|
17
|
+
this.removeStringDOM();
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}
|
|
10
22
|
onContextChange() {
|
|
23
|
+
if (this.context.type === 'string') {
|
|
24
|
+
this.createStringDOM();
|
|
25
|
+
}
|
|
26
|
+
else if (this.context.type === 'lineBreakEmptyString') {
|
|
27
|
+
this.createLineBreakEmptyStringDOM();
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
createLineBreakEmptyStringDOM() {
|
|
31
|
+
this.nativeElement.setAttribute('data-slate-zero-width', 'n');
|
|
32
|
+
this.nativeElement.setAttribute('data-slate-length', `${this.context.elementStringLength}`);
|
|
33
|
+
this.textNode = document.createTextNode(`\uFEFF`);
|
|
34
|
+
this.brNode = document.createElement('br');
|
|
35
|
+
this.nativeElement.append(this.textNode, this.brNode);
|
|
36
|
+
}
|
|
37
|
+
removeLineBreakEmptyStringDOM() {
|
|
38
|
+
this.brNode?.remove();
|
|
39
|
+
// remove zero width character
|
|
40
|
+
const zeroWidthCharacterIndex = this.textNode?.textContent.indexOf(`\uFEFF`);
|
|
41
|
+
this.textNode?.deleteData(zeroWidthCharacterIndex, 1);
|
|
42
|
+
this.nativeElement.removeAttribute('data-slate-zero-width');
|
|
43
|
+
this.nativeElement.removeAttribute('data-slate-length');
|
|
44
|
+
}
|
|
45
|
+
createStringDOM() {
|
|
46
|
+
this.nativeElement.setAttribute('data-slate-string', 'true');
|
|
47
|
+
this.updateStringDOM();
|
|
48
|
+
}
|
|
49
|
+
updateStringDOM() {
|
|
11
50
|
// Avoid breaking some browser default behaviors, such as spellCheck, android composition input state
|
|
12
51
|
if (this.nativeElement.textContent !== this.context.text) {
|
|
13
52
|
this.nativeElement.textContent = this.context.text;
|
|
14
53
|
}
|
|
15
54
|
}
|
|
55
|
+
removeStringDOM() {
|
|
56
|
+
this.nativeElement.removeAttribute('data-slate-string');
|
|
57
|
+
this.nativeElement.textContent = '';
|
|
58
|
+
}
|
|
16
59
|
ngOnInit() {
|
|
17
60
|
this.nativeElement.setAttribute('editable-text', '');
|
|
18
|
-
this.nativeElement.setAttribute('data-slate-string', 'true');
|
|
19
61
|
}
|
|
20
62
|
}
|
|
21
63
|
SlateDefaultStringComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: SlateDefaultStringComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
@@ -28,4 +70,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.4", ngImpor
|
|
|
28
70
|
changeDetection: ChangeDetectionStrategy.OnPush
|
|
29
71
|
}]
|
|
30
72
|
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }]; } });
|
|
31
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
73
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdC1zdHJpbmcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvc3JjL2NvbXBvbmVudHMvc3RyaW5nL2RlZmF1bHQtc3RyaW5nLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLHVCQUF1QixFQUFpQyxNQUFNLGVBQWUsQ0FBQztBQUUxRyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7O0FBU2hELE1BQU0sT0FBTywyQkFDVCxTQUFRLGFBQWlDO0lBTXpDLFlBQW1CLFVBQTJCLEVBQVMsR0FBc0I7UUFDekUsS0FBSyxDQUFDLFVBQVUsRUFBRSxHQUFHLENBQUMsQ0FBQztRQURSLGVBQVUsR0FBVixVQUFVLENBQWlCO1FBQVMsUUFBRyxHQUFILEdBQUcsQ0FBbUI7SUFFN0UsQ0FBQztJQUVELG1CQUFtQixDQUFDLEtBQXlCO1FBQ3pDLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNkLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUssc0JBQXNCLEVBQUU7Z0JBQzlDLElBQUksQ0FBQyw2QkFBNkIsRUFBRSxDQUFDO2FBQ3hDO1lBQ0QsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUU7Z0JBQ2hDLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxzQkFBc0IsRUFBRTtvQkFDdkMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO2lCQUMxQjthQUNKO1NBQ0o7SUFDTCxDQUFDO0lBRUQsZUFBZTtRQUNYLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFO1lBQ2hDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztTQUMxQjthQUFNLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUssc0JBQXNCLEVBQUU7WUFDckQsSUFBSSxDQUFDLDZCQUE2QixFQUFFLENBQUM7U0FDeEM7SUFDTCxDQUFDO0lBRUQsNkJBQTZCO1FBQ3pCLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLHVCQUF1QixFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQzlELElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLG1CQUFtQixFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLENBQUM7UUFDNUYsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2xELElBQUksQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzQyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsNkJBQTZCO1FBQ3pCLElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUM7UUFDdEIsOEJBQThCO1FBQzlCLE1BQU0sdUJBQXVCLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzdFLElBQUksQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLHVCQUF1QixFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFDNUQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRUQsZUFBZTtRQUNYLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLG1CQUFtQixFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzdELElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsZUFBZTtRQUNYLHFHQUFxRztRQUNyRyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxLQUFLLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFO1lBQ3RELElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO1NBQ3REO0lBQ0wsQ0FBQztJQUVELGVBQWU7UUFDWCxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ3hELElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztJQUN4QyxDQUFDO0lBRUQsUUFBUTtRQUNKLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLGVBQWUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN6RCxDQUFDOzt3SEFwRVEsMkJBQTJCOzRHQUEzQiwyQkFBMkIsdUZBSDFCLEVBQUU7MkZBR0gsMkJBQTJCO2tCQUx2QyxTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSwwQkFBMEI7b0JBQ3BDLFFBQVEsRUFBRSxFQUFFO29CQUNaLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2lCQUNsRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgRWxlbWVudFJlZiwgQ2hhbmdlRGV0ZWN0b3JSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFNsYXRlU3RyaW5nQ29udGV4dCB9IGZyb20gJy4uLy4uL3ZpZXcvY29udGV4dCc7XG5pbXBvcnQgeyBCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vdmlldy9iYXNlJztcbmltcG9ydCB7IEJlZm9yZUNvbnRleHRDaGFuZ2UgfSBmcm9tICcuLi8uLi92aWV3L2JlZm9yZS1jb250ZXh0LWNoYW5nZSc7XG5pbXBvcnQgeyBET01FbGVtZW50IH0gZnJvbSAnLi4vLi4vdXRpbHMvZG9tJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdzcGFuW3NsYXRlRGVmYXVsdFN0cmluZ10nLFxuICAgIHRlbXBsYXRlOiAnJyxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBTbGF0ZURlZmF1bHRTdHJpbmdDb21wb25lbnRcbiAgICBleHRlbmRzIEJhc2VDb21wb25lbnQ8U2xhdGVTdHJpbmdDb250ZXh0PlxuICAgIGltcGxlbWVudHMgT25Jbml0LCBCZWZvcmVDb250ZXh0Q2hhbmdlPFNsYXRlU3RyaW5nQ29udGV4dD5cbntcbiAgICB0ZXh0Tm9kZT86IFRleHQ7XG4gICAgYnJOb2RlPzogRE9NRWxlbWVudDtcblxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBlbGVtZW50UmVmOiBFbGVtZW50UmVmPGFueT4sIHB1YmxpYyBjZHI6IENoYW5nZURldGVjdG9yUmVmKSB7XG4gICAgICAgIHN1cGVyKGVsZW1lbnRSZWYsIGNkcik7XG4gICAgfVxuXG4gICAgYmVmb3JlQ29udGV4dENoYW5nZSh2YWx1ZTogU2xhdGVTdHJpbmdDb250ZXh0KSB7XG4gICAgICAgIGlmICh0aGlzLmNvbnRleHQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbnRleHQudHlwZSA9PT0gJ2xpbmVCcmVha0VtcHR5U3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlTGluZUJyZWFrRW1wdHlTdHJpbmdET00oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmNvbnRleHQudHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUudHlwZSA9PT0gJ2xpbmVCcmVha0VtcHR5U3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZVN0cmluZ0RPTSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uQ29udGV4dENoYW5nZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuY29udGV4dC50eXBlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdGhpcy5jcmVhdGVTdHJpbmdET00oKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbnRleHQudHlwZSA9PT0gJ2xpbmVCcmVha0VtcHR5U3RyaW5nJykge1xuICAgICAgICAgICAgdGhpcy5jcmVhdGVMaW5lQnJlYWtFbXB0eVN0cmluZ0RPTSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY3JlYXRlTGluZUJyZWFrRW1wdHlTdHJpbmdET00oKSB7XG4gICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtc2xhdGUtemVyby13aWR0aCcsICduJyk7XG4gICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtc2xhdGUtbGVuZ3RoJywgYCR7dGhpcy5jb250ZXh0LmVsZW1lbnRTdHJpbmdMZW5ndGh9YCk7XG4gICAgICAgIHRoaXMudGV4dE5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShgXFx1RkVGRmApO1xuICAgICAgICB0aGlzLmJyTm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2JyJyk7XG4gICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC5hcHBlbmQodGhpcy50ZXh0Tm9kZSwgdGhpcy5ick5vZGUpO1xuICAgIH1cblxuICAgIHJlbW92ZUxpbmVCcmVha0VtcHR5U3RyaW5nRE9NKCkge1xuICAgICAgICB0aGlzLmJyTm9kZT8ucmVtb3ZlKCk7XG4gICAgICAgIC8vIHJlbW92ZSB6ZXJvIHdpZHRoIGNoYXJhY3RlclxuICAgICAgICBjb25zdCB6ZXJvV2lkdGhDaGFyYWN0ZXJJbmRleCA9IHRoaXMudGV4dE5vZGU/LnRleHRDb250ZW50LmluZGV4T2YoYFxcdUZFRkZgKTtcbiAgICAgICAgdGhpcy50ZXh0Tm9kZT8uZGVsZXRlRGF0YSh6ZXJvV2lkdGhDaGFyYWN0ZXJJbmRleCwgMSk7XG4gICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ2RhdGEtc2xhdGUtemVyby13aWR0aCcpO1xuICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdkYXRhLXNsYXRlLWxlbmd0aCcpO1xuICAgIH1cblxuICAgIGNyZWF0ZVN0cmluZ0RPTSgpIHtcbiAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgnZGF0YS1zbGF0ZS1zdHJpbmcnLCAndHJ1ZScpO1xuICAgICAgICB0aGlzLnVwZGF0ZVN0cmluZ0RPTSgpO1xuICAgIH1cblxuICAgIHVwZGF0ZVN0cmluZ0RPTSgpIHtcbiAgICAgICAgLy8gQXZvaWQgYnJlYWtpbmcgc29tZSBicm93c2VyIGRlZmF1bHQgYmVoYXZpb3JzLCBzdWNoIGFzIHNwZWxsQ2hlY2ssIGFuZHJvaWQgY29tcG9zaXRpb24gaW5wdXQgc3RhdGVcbiAgICAgICAgaWYgKHRoaXMubmF0aXZlRWxlbWVudC50ZXh0Q29udGVudCAhPT0gdGhpcy5jb250ZXh0LnRleHQpIHtcbiAgICAgICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC50ZXh0Q29udGVudCA9IHRoaXMuY29udGV4dC50ZXh0O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVtb3ZlU3RyaW5nRE9NKCkge1xuICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdkYXRhLXNsYXRlLXN0cmluZycpO1xuICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQudGV4dENvbnRlbnQgPSAnJztcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgnZWRpdGFibGUtdGV4dCcsICcnKTtcbiAgICB9XG59XG4iXX0=
|
|
@@ -22,40 +22,60 @@ export class SlateStringComponent extends ViewContainerItem {
|
|
|
22
22
|
ngAfterViewInit() {
|
|
23
23
|
this.elementRef.nativeElement.remove();
|
|
24
24
|
}
|
|
25
|
-
|
|
25
|
+
// COMPAT: If this is the last text node in an empty block, render a zero-
|
|
26
|
+
// width space that will convert into a line break when copying and pasting
|
|
27
|
+
// to support expected plain text.
|
|
28
|
+
isLineBreakEmptyString() {
|
|
26
29
|
const path = AngularEditor.findPath(this.viewContext.editor, this.context.text);
|
|
27
30
|
const parentPath = Path.parent(path);
|
|
28
|
-
|
|
29
|
-
// So the node can contain selection but the text is not visible.
|
|
30
|
-
if (this.viewContext.editor.isVoid(this.context.parent)) {
|
|
31
|
-
return this.viewContext.templateComponent.emptyStringTemplate;
|
|
32
|
-
}
|
|
33
|
-
// COMPAT: If this is the last text node in an empty block, render a zero-
|
|
34
|
-
// width space that will convert into a line break when copying and pasting
|
|
35
|
-
// to support expected plain text.
|
|
36
|
-
if (this.context.leaf.text === '' &&
|
|
31
|
+
return (this.context.leaf.text === '' &&
|
|
37
32
|
this.context.parent.children[this.context.parent.children.length - 1] === this.context.text &&
|
|
38
33
|
!this.viewContext.editor.isInline(this.context.parent) &&
|
|
39
|
-
Editor.string(this.viewContext.editor, parentPath) === '')
|
|
40
|
-
|
|
34
|
+
Editor.string(this.viewContext.editor, parentPath) === '');
|
|
35
|
+
}
|
|
36
|
+
// COMPAT: If the text is empty, it's because it's on the edge of an inline
|
|
37
|
+
// node, so we render a zero-width space so that the selection can be
|
|
38
|
+
// inserted next to it still.
|
|
39
|
+
isEmptyText() {
|
|
40
|
+
return this.context.leaf.text === '';
|
|
41
|
+
}
|
|
42
|
+
// COMPAT: Browsers will collapse trailing new lines at the end of blocks,
|
|
43
|
+
// so we need to add an extra trailing new lines to prevent that.
|
|
44
|
+
isCompatibleString() {
|
|
45
|
+
return this.context.isLast && this.context.leaf.text.slice(-1) === '\n';
|
|
46
|
+
}
|
|
47
|
+
// COMPAT: Render text inside void nodes with a zero-width space.
|
|
48
|
+
// So the node can contain selection but the text is not visible.
|
|
49
|
+
isVoid() {
|
|
50
|
+
return this.viewContext.editor.isVoid(this.context.parent);
|
|
51
|
+
}
|
|
52
|
+
getViewType() {
|
|
53
|
+
if (this.isVoid()) {
|
|
54
|
+
return this.viewContext.templateComponent.voidStringTemplate;
|
|
55
|
+
}
|
|
56
|
+
if (this.isLineBreakEmptyString()) {
|
|
57
|
+
return SlateDefaultStringComponent;
|
|
41
58
|
}
|
|
42
|
-
|
|
43
|
-
// node, so we render a zero-width space so that the selection can be
|
|
44
|
-
// inserted next to it still.
|
|
45
|
-
if (this.context.leaf.text === '') {
|
|
59
|
+
if (this.isEmptyText()) {
|
|
46
60
|
return this.viewContext.templateComponent.emptyTextTemplate;
|
|
47
61
|
}
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
if (this.context.isLast && this.context.leaf.text.slice(-1) === '\n') {
|
|
51
|
-
return this.viewContext.templateComponent.compatStringTemplate;
|
|
62
|
+
if (this.isCompatibleString()) {
|
|
63
|
+
return this.viewContext.templateComponent.compatibleStringTemplate;
|
|
52
64
|
}
|
|
53
65
|
return SlateDefaultStringComponent;
|
|
54
66
|
}
|
|
67
|
+
getType() {
|
|
68
|
+
if (this.isLineBreakEmptyString()) {
|
|
69
|
+
return 'lineBreakEmptyString';
|
|
70
|
+
}
|
|
71
|
+
return 'string';
|
|
72
|
+
}
|
|
55
73
|
getContext() {
|
|
74
|
+
const stringType = this.getType();
|
|
56
75
|
return {
|
|
57
76
|
text: this.context.leaf.text,
|
|
58
|
-
elementStringLength: Node.string(this.context.parent).length
|
|
77
|
+
elementStringLength: Node.string(this.context.parent).length,
|
|
78
|
+
type: stringType
|
|
59
79
|
};
|
|
60
80
|
}
|
|
61
81
|
memoizedContext(prev, next) {
|
|
@@ -74,4 +94,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.4", ngImpor
|
|
|
74
94
|
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ViewContainerRef }]; }, propDecorators: { context: [{
|
|
75
95
|
type: Input
|
|
76
96
|
}] } });
|
|
77
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
97
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyaW5nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL3NyYy9jb21wb25lbnRzL3N0cmluZy9zdHJpbmcuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFFLHVCQUF1QixFQUEwRCxNQUFNLGVBQWUsQ0FBQztBQUMxSSxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDM0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFOUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzdELE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDRCQUE0QixDQUFDOztBQU96RSxNQUFNLE9BQU8sb0JBQXFCLFNBQVEsaUJBQXFDO0lBRzNFLFlBQW9CLFVBQTJCLEVBQVksZ0JBQWtDO1FBQ3pGLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBRFIsZUFBVSxHQUFWLFVBQVUsQ0FBaUI7UUFBWSxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO0lBRTdGLENBQUM7SUFFRCxRQUFRO1FBQ0osSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxXQUFXO1FBQ1AsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDbkIsT0FBTztTQUNWO1FBQ0QsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxlQUFlO1FBQ1gsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDM0MsQ0FBQztJQUVELDBFQUEwRTtJQUMxRSwyRUFBMkU7SUFDM0Usa0NBQWtDO0lBQ2xDLHNCQUFzQjtRQUNsQixNQUFNLElBQUksR0FBRyxhQUFhLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEYsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyQyxPQUFPLENBQ0gsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLEVBQUU7WUFDN0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJO1lBQzNGLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO1lBQ3RELE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUM1RCxDQUFDO0lBQ04sQ0FBQztJQUVELDJFQUEyRTtJQUMzRSxxRUFBcUU7SUFDckUsNkJBQTZCO0lBQzdCLFdBQVc7UUFDUCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxFQUFFLENBQUM7SUFDekMsQ0FBQztJQUVELDBFQUEwRTtJQUMxRSxpRUFBaUU7SUFDakUsa0JBQWtCO1FBQ2QsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDO0lBQzVFLENBQUM7SUFFRCxpRUFBaUU7SUFDakUsaUVBQWlFO0lBQ2pFLE1BQU07UUFDRixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFFRCxXQUFXO1FBQ1AsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDZixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsa0JBQWtCLENBQUM7U0FDaEU7UUFFRCxJQUFJLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxFQUFFO1lBQy9CLE9BQU8sMkJBQTJCLENBQUM7U0FDdEM7UUFFRCxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRTtZQUNwQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsaUJBQWlCLENBQUM7U0FDL0Q7UUFFRCxJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxFQUFFO1lBQzNCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyx3QkFBd0IsQ0FBQztTQUN0RTtRQUVELE9BQU8sMkJBQTJCLENBQUM7SUFDdkMsQ0FBQztJQUVELE9BQU87UUFDSCxJQUFJLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxFQUFFO1lBQy9CLE9BQU8sc0JBQXNCLENBQUM7U0FDakM7UUFDRCxPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0lBRUQsVUFBVTtRQUNOLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNsQyxPQUFPO1lBQ0gsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUk7WUFDNUIsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU07WUFDNUQsSUFBSSxFQUFFLFVBQVU7U0FDbkIsQ0FBQztJQUNOLENBQUM7SUFFRCxlQUFlLENBQUMsSUFBd0IsRUFBRSxJQUF3QjtRQUM5RCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDOztpSEE3RlEsb0JBQW9CO3FHQUFwQixvQkFBb0IscUlBSG5CLEVBQUU7MkZBR0gsb0JBQW9CO2tCQUxoQyxTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxtQkFBbUI7b0JBQzdCLFFBQVEsRUFBRSxFQUFFO29CQUNaLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2lCQUNsRDtnSUFFWSxPQUFPO3NCQUFmLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBPbkNoYW5nZXMsIEVsZW1lbnRSZWYsIFZpZXdDb250YWluZXJSZWYsIEFmdGVyVmlld0luaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEVkaXRvciwgUGF0aCwgTm9kZSB9IGZyb20gJ3NsYXRlJztcbmltcG9ydCB7IFZpZXdDb250YWluZXJJdGVtIH0gZnJvbSAnLi4vLi4vdmlldy9jb250YWluZXItaXRlbSc7XG5pbXBvcnQgeyBTbGF0ZUxlYWZDb250ZXh0LCBTbGF0ZVN0cmluZ0NvbnRleHQgfSBmcm9tICcuLi8uLi92aWV3L2NvbnRleHQnO1xuaW1wb3J0IHsgQW5ndWxhckVkaXRvciB9IGZyb20gJy4uLy4uL3BsdWdpbnMvYW5ndWxhci1lZGl0b3InO1xuaW1wb3J0IHsgU2xhdGVEZWZhdWx0U3RyaW5nQ29tcG9uZW50IH0gZnJvbSAnLi9kZWZhdWx0LXN0cmluZy5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3NwYW5bc2xhdGVTdHJpbmddJyxcbiAgICB0ZW1wbGF0ZTogJycsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgU2xhdGVTdHJpbmdDb21wb25lbnQgZXh0ZW5kcyBWaWV3Q29udGFpbmVySXRlbTxTbGF0ZVN0cmluZ0NvbnRleHQ+IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXQge1xuICAgIEBJbnB1dCgpIGNvbnRleHQ6IFNsYXRlTGVhZkNvbnRleHQ7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWY8YW55PiwgcHJvdGVjdGVkIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYpIHtcbiAgICAgICAgc3VwZXIodmlld0NvbnRhaW5lclJlZik7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY3JlYXRlVmlldygpO1xuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKCkge1xuICAgICAgICBpZiAoIXRoaXMuaW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVwZGF0ZVZpZXcoKTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnJlbW92ZSgpO1xuICAgIH1cblxuICAgIC8vIENPTVBBVDogSWYgdGhpcyBpcyB0aGUgbGFzdCB0ZXh0IG5vZGUgaW4gYW4gZW1wdHkgYmxvY2ssIHJlbmRlciBhIHplcm8tXG4gICAgLy8gd2lkdGggc3BhY2UgdGhhdCB3aWxsIGNvbnZlcnQgaW50byBhIGxpbmUgYnJlYWsgd2hlbiBjb3B5aW5nIGFuZCBwYXN0aW5nXG4gICAgLy8gdG8gc3VwcG9ydCBleHBlY3RlZCBwbGFpbiB0ZXh0LlxuICAgIGlzTGluZUJyZWFrRW1wdHlTdHJpbmcoKSB7XG4gICAgICAgIGNvbnN0IHBhdGggPSBBbmd1bGFyRWRpdG9yLmZpbmRQYXRoKHRoaXMudmlld0NvbnRleHQuZWRpdG9yLCB0aGlzLmNvbnRleHQudGV4dCk7XG4gICAgICAgIGNvbnN0IHBhcmVudFBhdGggPSBQYXRoLnBhcmVudChwYXRoKTtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5sZWFmLnRleHQgPT09ICcnICYmXG4gICAgICAgICAgICB0aGlzLmNvbnRleHQucGFyZW50LmNoaWxkcmVuW3RoaXMuY29udGV4dC5wYXJlbnQuY2hpbGRyZW4ubGVuZ3RoIC0gMV0gPT09IHRoaXMuY29udGV4dC50ZXh0ICYmXG4gICAgICAgICAgICAhdGhpcy52aWV3Q29udGV4dC5lZGl0b3IuaXNJbmxpbmUodGhpcy5jb250ZXh0LnBhcmVudCkgJiZcbiAgICAgICAgICAgIEVkaXRvci5zdHJpbmcodGhpcy52aWV3Q29udGV4dC5lZGl0b3IsIHBhcmVudFBhdGgpID09PSAnJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIC8vIENPTVBBVDogSWYgdGhlIHRleHQgaXMgZW1wdHksIGl0J3MgYmVjYXVzZSBpdCdzIG9uIHRoZSBlZGdlIG9mIGFuIGlubGluZVxuICAgIC8vIG5vZGUsIHNvIHdlIHJlbmRlciBhIHplcm8td2lkdGggc3BhY2Ugc28gdGhhdCB0aGUgc2VsZWN0aW9uIGNhbiBiZVxuICAgIC8vIGluc2VydGVkIG5leHQgdG8gaXQgc3RpbGwuXG4gICAgaXNFbXB0eVRleHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRleHQubGVhZi50ZXh0ID09PSAnJztcbiAgICB9XG5cbiAgICAvLyBDT01QQVQ6IEJyb3dzZXJzIHdpbGwgY29sbGFwc2UgdHJhaWxpbmcgbmV3IGxpbmVzIGF0IHRoZSBlbmQgb2YgYmxvY2tzLFxuICAgIC8vIHNvIHdlIG5lZWQgdG8gYWRkIGFuIGV4dHJhIHRyYWlsaW5nIG5ldyBsaW5lcyB0byBwcmV2ZW50IHRoYXQuXG4gICAgaXNDb21wYXRpYmxlU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb250ZXh0LmlzTGFzdCAmJiB0aGlzLmNvbnRleHQubGVhZi50ZXh0LnNsaWNlKC0xKSA9PT0gJ1xcbic7XG4gICAgfVxuXG4gICAgLy8gQ09NUEFUOiBSZW5kZXIgdGV4dCBpbnNpZGUgdm9pZCBub2RlcyB3aXRoIGEgemVyby13aWR0aCBzcGFjZS5cbiAgICAvLyBTbyB0aGUgbm9kZSBjYW4gY29udGFpbiBzZWxlY3Rpb24gYnV0IHRoZSB0ZXh0IGlzIG5vdCB2aXNpYmxlLlxuICAgIGlzVm9pZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmlld0NvbnRleHQuZWRpdG9yLmlzVm9pZCh0aGlzLmNvbnRleHQucGFyZW50KTtcbiAgICB9XG5cbiAgICBnZXRWaWV3VHlwZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNWb2lkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZpZXdDb250ZXh0LnRlbXBsYXRlQ29tcG9uZW50LnZvaWRTdHJpbmdUZW1wbGF0ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmlzTGluZUJyZWFrRW1wdHlTdHJpbmcoKSkge1xuICAgICAgICAgICAgcmV0dXJuIFNsYXRlRGVmYXVsdFN0cmluZ0NvbXBvbmVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmlzRW1wdHlUZXh0KCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZpZXdDb250ZXh0LnRlbXBsYXRlQ29tcG9uZW50LmVtcHR5VGV4dFRlbXBsYXRlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaXNDb21wYXRpYmxlU3RyaW5nKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZpZXdDb250ZXh0LnRlbXBsYXRlQ29tcG9uZW50LmNvbXBhdGlibGVTdHJpbmdUZW1wbGF0ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBTbGF0ZURlZmF1bHRTdHJpbmdDb21wb25lbnQ7XG4gICAgfVxuXG4gICAgZ2V0VHlwZSgpOiBTbGF0ZVN0cmluZ0NvbnRleHRbJ3R5cGUnXSB7XG4gICAgICAgIGlmICh0aGlzLmlzTGluZUJyZWFrRW1wdHlTdHJpbmcoKSkge1xuICAgICAgICAgICAgcmV0dXJuICdsaW5lQnJlYWtFbXB0eVN0cmluZyc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICdzdHJpbmcnO1xuICAgIH1cblxuICAgIGdldENvbnRleHQoKTogU2xhdGVTdHJpbmdDb250ZXh0IHtcbiAgICAgICAgY29uc3Qgc3RyaW5nVHlwZSA9IHRoaXMuZ2V0VHlwZSgpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdGV4dDogdGhpcy5jb250ZXh0LmxlYWYudGV4dCxcbiAgICAgICAgICAgIGVsZW1lbnRTdHJpbmdMZW5ndGg6IE5vZGUuc3RyaW5nKHRoaXMuY29udGV4dC5wYXJlbnQpLmxlbmd0aCxcbiAgICAgICAgICAgIHR5cGU6IHN0cmluZ1R5cGVcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBtZW1vaXplZENvbnRleHQocHJldjogU2xhdGVTdHJpbmdDb250ZXh0LCBuZXh0OiBTbGF0ZVN0cmluZ0NvbnRleHQpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -3,24 +3,18 @@ import * as i0 from "@angular/core";
|
|
|
3
3
|
export class SlateStringTemplateComponent {
|
|
4
4
|
}
|
|
5
5
|
SlateStringTemplateComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: SlateStringTemplateComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
6
|
-
SlateStringTemplateComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.4", type: SlateStringTemplateComponent, selector: "slate-string-template", viewQueries: [{ propertyName: "
|
|
6
|
+
SlateStringTemplateComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.4", type: SlateStringTemplateComponent, selector: "slate-string-template", viewQueries: [{ propertyName: "compatibleStringTemplate", first: true, predicate: ["compatibleStringTemplate"], descendants: true, read: TemplateRef, static: true }, { propertyName: "voidStringTemplate", first: true, predicate: ["voidStringTemplate"], descendants: true, read: TemplateRef, static: true }, { propertyName: "emptyTextTemplate", first: true, predicate: ["emptyTextTemplate"], descendants: true, read: TemplateRef, static: true }], ngImport: i0, template: "<ng-template #compatibleStringTemplate let-context=\"context\" let-viewContext=\"viewContext\">\n <!-- Compatible with Chinese input in Chrome with \\n -->\n <span editable-text data-slate-string=\"true\"\n >{{ context.text }}<span data-slate-zero-width>{{ '\\uFEFF' }}</span></span\n >\n</ng-template>\n<ng-template #voidStringTemplate let-context=\"context\" let-viewContext=\"viewContext\">\n <span editable-text data-slate-zero-width=\"z\" attr.data-slate-length=\"{{ context.elementStringLength }}\">{{ '\\uFEFF' }}</span>\n</ng-template>\n<ng-template #emptyTextTemplate let-context=\"context\" let-viewContext=\"viewContext\">\n <span editable-text data-slate-zero-width=\"z\" data-slate-length=\"0\">{{ '\\uFEFF' }}</span>\n</ng-template>\n", changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
7
7
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: SlateStringTemplateComponent, decorators: [{
|
|
8
8
|
type: Component,
|
|
9
|
-
args: [{ selector: 'slate-string-template', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-template #
|
|
10
|
-
}], propDecorators: {
|
|
9
|
+
args: [{ selector: 'slate-string-template', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-template #compatibleStringTemplate let-context=\"context\" let-viewContext=\"viewContext\">\n <!-- Compatible with Chinese input in Chrome with \\n -->\n <span editable-text data-slate-string=\"true\"\n >{{ context.text }}<span data-slate-zero-width>{{ '\\uFEFF' }}</span></span\n >\n</ng-template>\n<ng-template #voidStringTemplate let-context=\"context\" let-viewContext=\"viewContext\">\n <span editable-text data-slate-zero-width=\"z\" attr.data-slate-length=\"{{ context.elementStringLength }}\">{{ '\\uFEFF' }}</span>\n</ng-template>\n<ng-template #emptyTextTemplate let-context=\"context\" let-viewContext=\"viewContext\">\n <span editable-text data-slate-zero-width=\"z\" data-slate-length=\"0\">{{ '\\uFEFF' }}</span>\n</ng-template>\n" }]
|
|
10
|
+
}], propDecorators: { compatibleStringTemplate: [{
|
|
11
11
|
type: ViewChild,
|
|
12
|
-
args: ['
|
|
13
|
-
}],
|
|
12
|
+
args: ['compatibleStringTemplate', { read: TemplateRef, static: true }]
|
|
13
|
+
}], voidStringTemplate: [{
|
|
14
14
|
type: ViewChild,
|
|
15
|
-
args: ['
|
|
15
|
+
args: ['voidStringTemplate', { read: TemplateRef, static: true }]
|
|
16
16
|
}], emptyTextTemplate: [{
|
|
17
17
|
type: ViewChild,
|
|
18
18
|
args: ['emptyTextTemplate', { read: TemplateRef, static: true }]
|
|
19
|
-
}], lineBreakEmptyStringTemplate: [{
|
|
20
|
-
type: ViewChild,
|
|
21
|
-
args: ['lineBreakEmptyStringTemplate', {
|
|
22
|
-
read: TemplateRef,
|
|
23
|
-
static: true
|
|
24
|
-
}]
|
|
25
19
|
}] } });
|
|
26
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvc3JjL2NvbXBvbmVudHMvc3RyaW5nL3RlbXBsYXRlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3BhY2thZ2VzL3NyYy9jb21wb25lbnRzL3N0cmluZy90ZW1wbGF0ZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBTzNGLE1BQU0sT0FBTyw0QkFBNEI7O3lIQUE1Qiw0QkFBNEI7NkdBQTVCLDRCQUE0Qiw4S0FDVSxXQUFXLGlJQUdqQixXQUFXLCtIQUdaLFdBQVcsMkNDZHZELHN2QkFZQTsyRkRMYSw0QkFBNEI7a0JBTHhDLFNBQVM7K0JBQ0ksdUJBQXVCLG1CQUVoQix1QkFBdUIsQ0FBQyxNQUFNOzhCQUkvQyx3QkFBd0I7c0JBRHZCLFNBQVM7dUJBQUMsMEJBQTBCLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBSTFFLGtCQUFrQjtzQkFEakIsU0FBUzt1QkFBQyxvQkFBb0IsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFJcEUsaUJBQWlCO3NCQURoQixTQUFTO3VCQUFDLG1CQUFtQixFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgVmlld0NoaWxkLCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3NsYXRlLXN0cmluZy10ZW1wbGF0ZScsXG4gICAgdGVtcGxhdGVVcmw6ICd0ZW1wbGF0ZS5jb21wb25lbnQuaHRtbCcsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgU2xhdGVTdHJpbmdUZW1wbGF0ZUNvbXBvbmVudCB7XG4gICAgQFZpZXdDaGlsZCgnY29tcGF0aWJsZVN0cmluZ1RlbXBsYXRlJywgeyByZWFkOiBUZW1wbGF0ZVJlZiwgc3RhdGljOiB0cnVlIH0pXG4gICAgY29tcGF0aWJsZVN0cmluZ1RlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgQFZpZXdDaGlsZCgndm9pZFN0cmluZ1RlbXBsYXRlJywgeyByZWFkOiBUZW1wbGF0ZVJlZiwgc3RhdGljOiB0cnVlIH0pXG4gICAgdm9pZFN0cmluZ1RlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgQFZpZXdDaGlsZCgnZW1wdHlUZXh0VGVtcGxhdGUnLCB7IHJlYWQ6IFRlbXBsYXRlUmVmLCBzdGF0aWM6IHRydWUgfSlcbiAgICBlbXB0eVRleHRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55Pjtcbn1cbiIsIjxuZy10ZW1wbGF0ZSAjY29tcGF0aWJsZVN0cmluZ1RlbXBsYXRlIGxldC1jb250ZXh0PVwiY29udGV4dFwiIGxldC12aWV3Q29udGV4dD1cInZpZXdDb250ZXh0XCI+XG4gIDwhLS0gQ29tcGF0aWJsZSB3aXRoIENoaW5lc2UgaW5wdXQgaW4gQ2hyb21lIHdpdGggXFxuIC0tPlxuICA8c3BhbiBlZGl0YWJsZS10ZXh0IGRhdGEtc2xhdGUtc3RyaW5nPVwidHJ1ZVwiXG4gICAgPnt7IGNvbnRleHQudGV4dCB9fTxzcGFuIGRhdGEtc2xhdGUtemVyby13aWR0aD57eyAnXFx1RkVGRicgfX08L3NwYW4+PC9zcGFuXG4gID5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI3ZvaWRTdHJpbmdUZW1wbGF0ZSBsZXQtY29udGV4dD1cImNvbnRleHRcIiBsZXQtdmlld0NvbnRleHQ9XCJ2aWV3Q29udGV4dFwiPlxuICA8c3BhbiBlZGl0YWJsZS10ZXh0IGRhdGEtc2xhdGUtemVyby13aWR0aD1cInpcIiBhdHRyLmRhdGEtc2xhdGUtbGVuZ3RoPVwie3sgY29udGV4dC5lbGVtZW50U3RyaW5nTGVuZ3RoIH19XCI+e3sgJ1xcdUZFRkYnIH19PC9zcGFuPlxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjZW1wdHlUZXh0VGVtcGxhdGUgbGV0LWNvbnRleHQ9XCJjb250ZXh0XCIgbGV0LXZpZXdDb250ZXh0PVwidmlld0NvbnRleHRcIj5cbiAgPHNwYW4gZWRpdGFibGUtdGV4dCBkYXRhLXNsYXRlLXplcm8td2lkdGg9XCJ6XCIgZGF0YS1zbGF0ZS1sZW5ndGg9XCIwXCI+e3sgJ1xcdUZFRkYnIH19PC9zcGFuPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
package/esm2020/view/context.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3BhY2thZ2VzL3NyYy92aWV3L2NvbnRleHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5vZGVFbnRyeSwgUmFuZ2UsIEVsZW1lbnQsIEFuY2VzdG9yLCBUZXh0IH0gZnJvbSAnc2xhdGUnO1xuaW1wb3J0IHsgU2xhdGVTdHJpbmdUZW1wbGF0ZUNvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvc3RyaW5nL3RlbXBsYXRlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBbmd1bGFyRWRpdG9yIH0gZnJvbSAnLi4vcGx1Z2lucy9hbmd1bGFyLWVkaXRvcic7XG5pbXBvcnQgeyBWaWV3VHlwZSB9IGZyb20gJy4uL3R5cGVzL3ZpZXcnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNsYXRlVmlld0NvbnRleHQ8VCBleHRlbmRzIEFuZ3VsYXJFZGl0b3IgPSBBbmd1bGFyRWRpdG9yPiB7XG4gICAgZWRpdG9yOiBUO1xuICAgIHRlbXBsYXRlQ29tcG9uZW50OiBTbGF0ZVN0cmluZ1RlbXBsYXRlQ29tcG9uZW50O1xuICAgIHRyYWNrQnk6IChlbGVtZW50OiBFbGVtZW50KSA9PiBhbnk7XG4gICAgcmVuZGVyRWxlbWVudD86IChlbGVtZW50OiBFbGVtZW50KSA9PiBWaWV3VHlwZTtcbiAgICByZW5kZXJMZWFmPzogKHRleHQ6IFRleHQpID0+IFZpZXdUeXBlO1xuICAgIHJlbmRlclRleHQ/OiAodGV4dDogVGV4dCkgPT4gVmlld1R5cGU7XG4gICAgaXNTdHJpY3REZWNvcmF0ZTogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTbGF0ZUNoaWxkcmVuQ29udGV4dCB7XG4gICAgcGFyZW50OiBBbmNlc3RvcjtcbiAgICBzZWxlY3Rpb246IFJhbmdlO1xuICAgIGRlY29yYXRpb25zOiBSYW5nZVtdO1xuICAgIGRlY29yYXRlOiAoZW50cnk6IE5vZGVFbnRyeSkgPT4gUmFuZ2VbXTtcbiAgICByZWFkb25seTogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTbGF0ZUVsZW1lbnRDb250ZXh0PFQgZXh0ZW5kcyBFbGVtZW50ID0gRWxlbWVudD4ge1xuICAgIGVsZW1lbnQ6IFQ7XG4gICAgc2VsZWN0aW9uOiBSYW5nZSB8IG51bGw7XG4gICAgZGVjb3JhdGlvbnM6IFJhbmdlW107XG4gICAgYXR0cmlidXRlczogU2xhdGVFbGVtZW50QXR0cmlidXRlcztcbiAgICBkZWNvcmF0ZTogKGVudHJ5OiBOb2RlRW50cnkpID0+
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3BhY2thZ2VzL3NyYy92aWV3L2NvbnRleHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5vZGVFbnRyeSwgUmFuZ2UsIEVsZW1lbnQsIEFuY2VzdG9yLCBUZXh0IH0gZnJvbSAnc2xhdGUnO1xuaW1wb3J0IHsgU2xhdGVTdHJpbmdUZW1wbGF0ZUNvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvc3RyaW5nL3RlbXBsYXRlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBbmd1bGFyRWRpdG9yIH0gZnJvbSAnLi4vcGx1Z2lucy9hbmd1bGFyLWVkaXRvcic7XG5pbXBvcnQgeyBWaWV3VHlwZSB9IGZyb20gJy4uL3R5cGVzL3ZpZXcnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNsYXRlVmlld0NvbnRleHQ8VCBleHRlbmRzIEFuZ3VsYXJFZGl0b3IgPSBBbmd1bGFyRWRpdG9yPiB7XG4gICAgZWRpdG9yOiBUO1xuICAgIHRlbXBsYXRlQ29tcG9uZW50OiBTbGF0ZVN0cmluZ1RlbXBsYXRlQ29tcG9uZW50O1xuICAgIHRyYWNrQnk6IChlbGVtZW50OiBFbGVtZW50KSA9PiBhbnk7XG4gICAgcmVuZGVyRWxlbWVudD86IChlbGVtZW50OiBFbGVtZW50KSA9PiBWaWV3VHlwZTtcbiAgICByZW5kZXJMZWFmPzogKHRleHQ6IFRleHQpID0+IFZpZXdUeXBlO1xuICAgIHJlbmRlclRleHQ/OiAodGV4dDogVGV4dCkgPT4gVmlld1R5cGU7XG4gICAgaXNTdHJpY3REZWNvcmF0ZTogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTbGF0ZUNoaWxkcmVuQ29udGV4dCB7XG4gICAgcGFyZW50OiBBbmNlc3RvcjtcbiAgICBzZWxlY3Rpb246IFJhbmdlO1xuICAgIGRlY29yYXRpb25zOiBSYW5nZVtdO1xuICAgIGRlY29yYXRlOiAoZW50cnk6IE5vZGVFbnRyeSkgPT4gUmFuZ2VbXTtcbiAgICByZWFkb25seTogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTbGF0ZUVsZW1lbnRDb250ZXh0PFQgZXh0ZW5kcyBFbGVtZW50ID0gRWxlbWVudD4ge1xuICAgIGVsZW1lbnQ6IFQ7XG4gICAgc2VsZWN0aW9uOiBSYW5nZSB8IG51bGw7XG4gICAgZGVjb3JhdGlvbnM6IFJhbmdlW107XG4gICAgYXR0cmlidXRlczogU2xhdGVFbGVtZW50QXR0cmlidXRlcztcbiAgICBkZWNvcmF0ZTogKGVudHJ5OiBOb2RlRW50cnkpID0+IFJhbmdlW107XG4gICAgcmVhZG9ubHk6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2xhdGVUZXh0Q29udGV4dCB7XG4gICAgdGV4dDogVGV4dDtcbiAgICBkZWNvcmF0aW9uczogUmFuZ2VbXTtcbiAgICBpc0xhc3Q6IGJvb2xlYW47XG4gICAgcGFyZW50OiBFbGVtZW50O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNsYXRlTGVhZkNvbnRleHQge1xuICAgIGxlYWY6IFRleHQ7XG4gICAgdGV4dDogVGV4dDtcbiAgICBwYXJlbnQ6IEVsZW1lbnQ7XG4gICAgaXNMYXN0OiBib29sZWFuO1xuICAgIGluZGV4OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2xhdGVFbGVtZW50QXR0cmlidXRlcyB7XG4gICAgJ2RhdGEtc2xhdGUtbm9kZSc6ICdlbGVtZW50JztcbiAgICAnZGF0YS1zbGF0ZS12b2lkJz86IGJvb2xlYW47XG4gICAgJ2RhdGEtc2xhdGUtaW5saW5lJz86IGJvb2xlYW47XG4gICAgY29udGVudGVkaXRhYmxlPzogYm9vbGVhbjtcbiAgICAnZGF0YS1zbGF0ZS1rZXknPzogc3RyaW5nO1xuICAgIGRpcj86ICdydGwnO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNsYXRlU3RyaW5nQ29udGV4dCB7XG4gICAgdGV4dDogc3RyaW5nO1xuICAgIGVsZW1lbnRTdHJpbmdMZW5ndGg6IG51bWJlcjtcbiAgICB0eXBlOiAnc3RyaW5nJyB8ICdsaW5lQnJlYWtFbXB0eVN0cmluZyc7XG59XG4iXX0=
|
|
@@ -4,6 +4,7 @@ import * as i0 from '@angular/core';
|
|
|
4
4
|
import { TemplateRef, Component, ChangeDetectionStrategy, ViewChild, Directive, Input, HostBinding, ViewChildren, InjectionToken, Inject, forwardRef, ElementRef, NgModule } from '@angular/core';
|
|
5
5
|
import { __rest } from 'tslib';
|
|
6
6
|
import getDirection from 'direction';
|
|
7
|
+
import scrollIntoView from 'scroll-into-view-if-needed';
|
|
7
8
|
import { Subject } from 'rxjs';
|
|
8
9
|
import { NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
9
10
|
import { HistoryEditor } from 'slate-history';
|
|
@@ -1625,25 +1626,19 @@ function restoreDom(editor, execute) {
|
|
|
1625
1626
|
class SlateStringTemplateComponent {
|
|
1626
1627
|
}
|
|
1627
1628
|
SlateStringTemplateComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: SlateStringTemplateComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1628
|
-
SlateStringTemplateComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.4", type: SlateStringTemplateComponent, selector: "slate-string-template", viewQueries: [{ propertyName: "
|
|
1629
|
+
SlateStringTemplateComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.4", type: SlateStringTemplateComponent, selector: "slate-string-template", viewQueries: [{ propertyName: "compatibleStringTemplate", first: true, predicate: ["compatibleStringTemplate"], descendants: true, read: TemplateRef, static: true }, { propertyName: "voidStringTemplate", first: true, predicate: ["voidStringTemplate"], descendants: true, read: TemplateRef, static: true }, { propertyName: "emptyTextTemplate", first: true, predicate: ["emptyTextTemplate"], descendants: true, read: TemplateRef, static: true }], ngImport: i0, template: "<ng-template #compatibleStringTemplate let-context=\"context\" let-viewContext=\"viewContext\">\n <!-- Compatible with Chinese input in Chrome with \\n -->\n <span editable-text data-slate-string=\"true\"\n >{{ context.text }}<span data-slate-zero-width>{{ '\\uFEFF' }}</span></span\n >\n</ng-template>\n<ng-template #voidStringTemplate let-context=\"context\" let-viewContext=\"viewContext\">\n <span editable-text data-slate-zero-width=\"z\" attr.data-slate-length=\"{{ context.elementStringLength }}\">{{ '\\uFEFF' }}</span>\n</ng-template>\n<ng-template #emptyTextTemplate let-context=\"context\" let-viewContext=\"viewContext\">\n <span editable-text data-slate-zero-width=\"z\" data-slate-length=\"0\">{{ '\\uFEFF' }}</span>\n</ng-template>\n", changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
1629
1630
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: SlateStringTemplateComponent, decorators: [{
|
|
1630
1631
|
type: Component,
|
|
1631
|
-
args: [{ selector: 'slate-string-template', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-template #
|
|
1632
|
-
}], propDecorators: {
|
|
1632
|
+
args: [{ selector: 'slate-string-template', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-template #compatibleStringTemplate let-context=\"context\" let-viewContext=\"viewContext\">\n <!-- Compatible with Chinese input in Chrome with \\n -->\n <span editable-text data-slate-string=\"true\"\n >{{ context.text }}<span data-slate-zero-width>{{ '\\uFEFF' }}</span></span\n >\n</ng-template>\n<ng-template #voidStringTemplate let-context=\"context\" let-viewContext=\"viewContext\">\n <span editable-text data-slate-zero-width=\"z\" attr.data-slate-length=\"{{ context.elementStringLength }}\">{{ '\\uFEFF' }}</span>\n</ng-template>\n<ng-template #emptyTextTemplate let-context=\"context\" let-viewContext=\"viewContext\">\n <span editable-text data-slate-zero-width=\"z\" data-slate-length=\"0\">{{ '\\uFEFF' }}</span>\n</ng-template>\n" }]
|
|
1633
|
+
}], propDecorators: { compatibleStringTemplate: [{
|
|
1633
1634
|
type: ViewChild,
|
|
1634
|
-
args: ['
|
|
1635
|
-
}],
|
|
1635
|
+
args: ['compatibleStringTemplate', { read: TemplateRef, static: true }]
|
|
1636
|
+
}], voidStringTemplate: [{
|
|
1636
1637
|
type: ViewChild,
|
|
1637
|
-
args: ['
|
|
1638
|
+
args: ['voidStringTemplate', { read: TemplateRef, static: true }]
|
|
1638
1639
|
}], emptyTextTemplate: [{
|
|
1639
1640
|
type: ViewChild,
|
|
1640
1641
|
args: ['emptyTextTemplate', { read: TemplateRef, static: true }]
|
|
1641
|
-
}], lineBreakEmptyStringTemplate: [{
|
|
1642
|
-
type: ViewChild,
|
|
1643
|
-
args: ['lineBreakEmptyStringTemplate', {
|
|
1644
|
-
read: TemplateRef,
|
|
1645
|
-
static: true
|
|
1646
|
-
}]
|
|
1647
1642
|
}] } });
|
|
1648
1643
|
|
|
1649
1644
|
class SlateBlockCardComponent {
|
|
@@ -2106,15 +2101,58 @@ class SlateDefaultStringComponent extends BaseComponent {
|
|
|
2106
2101
|
this.elementRef = elementRef;
|
|
2107
2102
|
this.cdr = cdr;
|
|
2108
2103
|
}
|
|
2104
|
+
beforeContextChange(value) {
|
|
2105
|
+
if (this.context) {
|
|
2106
|
+
if (this.context.type === 'lineBreakEmptyString') {
|
|
2107
|
+
this.removeLineBreakEmptyStringDOM();
|
|
2108
|
+
}
|
|
2109
|
+
if (this.context.type === 'string') {
|
|
2110
|
+
if (value.type === 'lineBreakEmptyString') {
|
|
2111
|
+
this.removeStringDOM();
|
|
2112
|
+
}
|
|
2113
|
+
}
|
|
2114
|
+
}
|
|
2115
|
+
}
|
|
2109
2116
|
onContextChange() {
|
|
2117
|
+
if (this.context.type === 'string') {
|
|
2118
|
+
this.createStringDOM();
|
|
2119
|
+
}
|
|
2120
|
+
else if (this.context.type === 'lineBreakEmptyString') {
|
|
2121
|
+
this.createLineBreakEmptyStringDOM();
|
|
2122
|
+
}
|
|
2123
|
+
}
|
|
2124
|
+
createLineBreakEmptyStringDOM() {
|
|
2125
|
+
this.nativeElement.setAttribute('data-slate-zero-width', 'n');
|
|
2126
|
+
this.nativeElement.setAttribute('data-slate-length', `${this.context.elementStringLength}`);
|
|
2127
|
+
this.textNode = document.createTextNode(`\uFEFF`);
|
|
2128
|
+
this.brNode = document.createElement('br');
|
|
2129
|
+
this.nativeElement.append(this.textNode, this.brNode);
|
|
2130
|
+
}
|
|
2131
|
+
removeLineBreakEmptyStringDOM() {
|
|
2132
|
+
var _a, _b, _c;
|
|
2133
|
+
(_a = this.brNode) === null || _a === void 0 ? void 0 : _a.remove();
|
|
2134
|
+
// remove zero width character
|
|
2135
|
+
const zeroWidthCharacterIndex = (_b = this.textNode) === null || _b === void 0 ? void 0 : _b.textContent.indexOf(`\uFEFF`);
|
|
2136
|
+
(_c = this.textNode) === null || _c === void 0 ? void 0 : _c.deleteData(zeroWidthCharacterIndex, 1);
|
|
2137
|
+
this.nativeElement.removeAttribute('data-slate-zero-width');
|
|
2138
|
+
this.nativeElement.removeAttribute('data-slate-length');
|
|
2139
|
+
}
|
|
2140
|
+
createStringDOM() {
|
|
2141
|
+
this.nativeElement.setAttribute('data-slate-string', 'true');
|
|
2142
|
+
this.updateStringDOM();
|
|
2143
|
+
}
|
|
2144
|
+
updateStringDOM() {
|
|
2110
2145
|
// Avoid breaking some browser default behaviors, such as spellCheck, android composition input state
|
|
2111
2146
|
if (this.nativeElement.textContent !== this.context.text) {
|
|
2112
2147
|
this.nativeElement.textContent = this.context.text;
|
|
2113
2148
|
}
|
|
2114
2149
|
}
|
|
2150
|
+
removeStringDOM() {
|
|
2151
|
+
this.nativeElement.removeAttribute('data-slate-string');
|
|
2152
|
+
this.nativeElement.textContent = '';
|
|
2153
|
+
}
|
|
2115
2154
|
ngOnInit() {
|
|
2116
2155
|
this.nativeElement.setAttribute('editable-text', '');
|
|
2117
|
-
this.nativeElement.setAttribute('data-slate-string', 'true');
|
|
2118
2156
|
}
|
|
2119
2157
|
}
|
|
2120
2158
|
SlateDefaultStringComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: SlateDefaultStringComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
@@ -2146,40 +2184,60 @@ class SlateStringComponent extends ViewContainerItem {
|
|
|
2146
2184
|
ngAfterViewInit() {
|
|
2147
2185
|
this.elementRef.nativeElement.remove();
|
|
2148
2186
|
}
|
|
2149
|
-
|
|
2187
|
+
// COMPAT: If this is the last text node in an empty block, render a zero-
|
|
2188
|
+
// width space that will convert into a line break when copying and pasting
|
|
2189
|
+
// to support expected plain text.
|
|
2190
|
+
isLineBreakEmptyString() {
|
|
2150
2191
|
const path = AngularEditor.findPath(this.viewContext.editor, this.context.text);
|
|
2151
2192
|
const parentPath = Path.parent(path);
|
|
2152
|
-
|
|
2153
|
-
// So the node can contain selection but the text is not visible.
|
|
2154
|
-
if (this.viewContext.editor.isVoid(this.context.parent)) {
|
|
2155
|
-
return this.viewContext.templateComponent.emptyStringTemplate;
|
|
2156
|
-
}
|
|
2157
|
-
// COMPAT: If this is the last text node in an empty block, render a zero-
|
|
2158
|
-
// width space that will convert into a line break when copying and pasting
|
|
2159
|
-
// to support expected plain text.
|
|
2160
|
-
if (this.context.leaf.text === '' &&
|
|
2193
|
+
return (this.context.leaf.text === '' &&
|
|
2161
2194
|
this.context.parent.children[this.context.parent.children.length - 1] === this.context.text &&
|
|
2162
2195
|
!this.viewContext.editor.isInline(this.context.parent) &&
|
|
2163
|
-
Editor.string(this.viewContext.editor, parentPath) === '')
|
|
2164
|
-
|
|
2196
|
+
Editor.string(this.viewContext.editor, parentPath) === '');
|
|
2197
|
+
}
|
|
2198
|
+
// COMPAT: If the text is empty, it's because it's on the edge of an inline
|
|
2199
|
+
// node, so we render a zero-width space so that the selection can be
|
|
2200
|
+
// inserted next to it still.
|
|
2201
|
+
isEmptyText() {
|
|
2202
|
+
return this.context.leaf.text === '';
|
|
2203
|
+
}
|
|
2204
|
+
// COMPAT: Browsers will collapse trailing new lines at the end of blocks,
|
|
2205
|
+
// so we need to add an extra trailing new lines to prevent that.
|
|
2206
|
+
isCompatibleString() {
|
|
2207
|
+
return this.context.isLast && this.context.leaf.text.slice(-1) === '\n';
|
|
2208
|
+
}
|
|
2209
|
+
// COMPAT: Render text inside void nodes with a zero-width space.
|
|
2210
|
+
// So the node can contain selection but the text is not visible.
|
|
2211
|
+
isVoid() {
|
|
2212
|
+
return this.viewContext.editor.isVoid(this.context.parent);
|
|
2213
|
+
}
|
|
2214
|
+
getViewType() {
|
|
2215
|
+
if (this.isVoid()) {
|
|
2216
|
+
return this.viewContext.templateComponent.voidStringTemplate;
|
|
2217
|
+
}
|
|
2218
|
+
if (this.isLineBreakEmptyString()) {
|
|
2219
|
+
return SlateDefaultStringComponent;
|
|
2165
2220
|
}
|
|
2166
|
-
|
|
2167
|
-
// node, so we render a zero-width space so that the selection can be
|
|
2168
|
-
// inserted next to it still.
|
|
2169
|
-
if (this.context.leaf.text === '') {
|
|
2221
|
+
if (this.isEmptyText()) {
|
|
2170
2222
|
return this.viewContext.templateComponent.emptyTextTemplate;
|
|
2171
2223
|
}
|
|
2172
|
-
|
|
2173
|
-
|
|
2174
|
-
if (this.context.isLast && this.context.leaf.text.slice(-1) === '\n') {
|
|
2175
|
-
return this.viewContext.templateComponent.compatStringTemplate;
|
|
2224
|
+
if (this.isCompatibleString()) {
|
|
2225
|
+
return this.viewContext.templateComponent.compatibleStringTemplate;
|
|
2176
2226
|
}
|
|
2177
2227
|
return SlateDefaultStringComponent;
|
|
2178
2228
|
}
|
|
2229
|
+
getType() {
|
|
2230
|
+
if (this.isLineBreakEmptyString()) {
|
|
2231
|
+
return 'lineBreakEmptyString';
|
|
2232
|
+
}
|
|
2233
|
+
return 'string';
|
|
2234
|
+
}
|
|
2179
2235
|
getContext() {
|
|
2236
|
+
const stringType = this.getType();
|
|
2180
2237
|
return {
|
|
2181
2238
|
text: this.context.leaf.text,
|
|
2182
|
-
elementStringLength: Node.string(this.context.parent).length
|
|
2239
|
+
elementStringLength: Node.string(this.context.parent).length,
|
|
2240
|
+
type: stringType
|
|
2183
2241
|
};
|
|
2184
2242
|
}
|
|
2185
2243
|
memoizedContext(prev, next) {
|
|
@@ -2263,10 +2321,10 @@ class SlateLeavesComponent extends ViewContainer {
|
|
|
2263
2321
|
}
|
|
2264
2322
|
ngOnInit() {
|
|
2265
2323
|
this.leaves = Text$1.decorations(this.context.text, this.context.decorations);
|
|
2266
|
-
this.leafContexts = this.
|
|
2324
|
+
this.leafContexts = this.getLeafContexts();
|
|
2267
2325
|
this.initialized = true;
|
|
2268
2326
|
}
|
|
2269
|
-
|
|
2327
|
+
getLeafContexts() {
|
|
2270
2328
|
return this.leaves.map((leaf, index) => {
|
|
2271
2329
|
return {
|
|
2272
2330
|
leaf,
|
|
@@ -2287,7 +2345,7 @@ class SlateLeavesComponent extends ViewContainer {
|
|
|
2287
2345
|
if (previousValue.text !== currentValue.text || !isDecoratorRangeListEqual(previousValue.decorations, currentValue.decorations)) {
|
|
2288
2346
|
this.leaves = Text$1.decorations(this.context.text, this.context.decorations);
|
|
2289
2347
|
}
|
|
2290
|
-
this.leafContexts = this.
|
|
2348
|
+
this.leafContexts = this.getLeafContexts();
|
|
2291
2349
|
}
|
|
2292
2350
|
trackBy(index, item) {
|
|
2293
2351
|
return index;
|
|
@@ -2599,6 +2657,7 @@ class SlateEditableComponent {
|
|
|
2599
2657
|
this.onTouchedCallback = () => { };
|
|
2600
2658
|
this.onChangeCallback = () => { };
|
|
2601
2659
|
this.decorate = () => [];
|
|
2660
|
+
this.scrollSelectionIntoView = defaultScrollSelectionIntoView;
|
|
2602
2661
|
this.isStrictDecorate = true;
|
|
2603
2662
|
this.trackBy = () => null;
|
|
2604
2663
|
this.readonly = false;
|
|
@@ -2631,7 +2690,7 @@ class SlateEditableComponent {
|
|
|
2631
2690
|
this.initializeViewContext();
|
|
2632
2691
|
this.initializeContext();
|
|
2633
2692
|
// remove unused DOM, just keep templateComponent instance
|
|
2634
|
-
this.templateElementRef.nativeElement.remove();
|
|
2693
|
+
// this.templateElementRef.nativeElement.remove();
|
|
2635
2694
|
// add browser class
|
|
2636
2695
|
let browserClass = IS_FIREFOX ? 'firefox' : IS_SAFARI ? 'safari' : '';
|
|
2637
2696
|
browserClass && this.elementRef.nativeElement.classList.add(browserClass);
|
|
@@ -2764,6 +2823,7 @@ class SlateEditableComponent {
|
|
|
2764
2823
|
else {
|
|
2765
2824
|
domSelection.removeAllRanges();
|
|
2766
2825
|
}
|
|
2826
|
+
this.scrollSelectionIntoView(this.editor, newDomRange);
|
|
2767
2827
|
setTimeout(() => {
|
|
2768
2828
|
// COMPAT: In Firefox, it's not enough to create a range, you also need
|
|
2769
2829
|
// to focus the contenteditable element too. (2016/11/16)
|
|
@@ -3565,7 +3625,7 @@ class SlateEditableComponent {
|
|
|
3565
3625
|
}
|
|
3566
3626
|
}
|
|
3567
3627
|
SlateEditableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.4", ngImport: i0, type: SlateEditableComponent, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }, { token: i0.NgZone }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
|
|
3568
|
-
SlateEditableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.4", type: SlateEditableComponent, selector: "slate-editable", inputs: { editor: "editor", renderElement: "renderElement", renderLeaf: "renderLeaf", renderText: "renderText", decorate: "decorate", placeholderDecorate: "placeholderDecorate", isStrictDecorate: "isStrictDecorate", trackBy: "trackBy", readonly: "readonly", placeholder: "placeholder", beforeInput: "beforeInput", blur: "blur", click: "click", compositionEnd: "compositionEnd", compositionStart: "compositionStart", copy: "copy", cut: "cut", dragOver: "dragOver", dragStart: "dragStart", dragEnd: "dragEnd", drop: "drop", focus: "focus", keydown: "keydown", paste: "paste", spellCheck: "spellCheck", autoCorrect: "autoCorrect", autoCapitalize: "autoCapitalize" }, host: { properties: { "attr.contenteditable": "readonly ? undefined : true", "attr.role": "readonly ? undefined : 'textbox'", "attr.spellCheck": "!hasBeforeInputSupport ? false : spellCheck", "attr.autoCorrect": "!hasBeforeInputSupport ? 'false' : autoCorrect", "attr.autoCapitalize": "!hasBeforeInputSupport ? 'false' : autoCapitalize", "attr.data-slate-editor": "this.dataSlateEditor", "attr.data-slate-node": "this.dataSlateNode", "attr.data-gramm": "this.dataGramm" }, classAttribute: "slate-editable-container" }, providers: [
|
|
3628
|
+
SlateEditableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.4", type: SlateEditableComponent, selector: "slate-editable", inputs: { editor: "editor", renderElement: "renderElement", renderLeaf: "renderLeaf", renderText: "renderText", decorate: "decorate", placeholderDecorate: "placeholderDecorate", scrollSelectionIntoView: "scrollSelectionIntoView", isStrictDecorate: "isStrictDecorate", trackBy: "trackBy", readonly: "readonly", placeholder: "placeholder", beforeInput: "beforeInput", blur: "blur", click: "click", compositionEnd: "compositionEnd", compositionStart: "compositionStart", copy: "copy", cut: "cut", dragOver: "dragOver", dragStart: "dragStart", dragEnd: "dragEnd", drop: "drop", focus: "focus", keydown: "keydown", paste: "paste", spellCheck: "spellCheck", autoCorrect: "autoCorrect", autoCapitalize: "autoCapitalize" }, host: { properties: { "attr.contenteditable": "readonly ? undefined : true", "attr.role": "readonly ? undefined : 'textbox'", "attr.spellCheck": "!hasBeforeInputSupport ? false : spellCheck", "attr.autoCorrect": "!hasBeforeInputSupport ? 'false' : autoCorrect", "attr.autoCapitalize": "!hasBeforeInputSupport ? 'false' : autoCapitalize", "attr.data-slate-editor": "this.dataSlateEditor", "attr.data-slate-node": "this.dataSlateNode", "attr.data-gramm": "this.dataGramm" }, classAttribute: "slate-editable-container" }, providers: [
|
|
3569
3629
|
{
|
|
3570
3630
|
provide: NG_VALUE_ACCESSOR,
|
|
3571
3631
|
useExisting: forwardRef(() => SlateEditableComponent),
|
|
@@ -3600,6 +3660,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.4", ngImpor
|
|
|
3600
3660
|
type: Input
|
|
3601
3661
|
}], placeholderDecorate: [{
|
|
3602
3662
|
type: Input
|
|
3663
|
+
}], scrollSelectionIntoView: [{
|
|
3664
|
+
type: Input
|
|
3603
3665
|
}], isStrictDecorate: [{
|
|
3604
3666
|
type: Input
|
|
3605
3667
|
}], trackBy: [{
|
|
@@ -3658,6 +3720,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.4", ngImpor
|
|
|
3658
3720
|
type: ViewChild,
|
|
3659
3721
|
args: ['templateComponent', { static: true, read: ElementRef }]
|
|
3660
3722
|
}] } });
|
|
3723
|
+
const defaultScrollSelectionIntoView = (editor, domRange) => {
|
|
3724
|
+
// This was affecting the selection of multiple blocks and dragging behavior,
|
|
3725
|
+
// so enabled only if the selection has been collapsed.
|
|
3726
|
+
if (domRange.getBoundingClientRect && (!editor.selection || (editor.selection && Range.isCollapsed(editor.selection)))) {
|
|
3727
|
+
const leafEl = domRange.startContainer.parentElement;
|
|
3728
|
+
leafEl.getBoundingClientRect = domRange.getBoundingClientRect.bind(domRange);
|
|
3729
|
+
scrollIntoView(leafEl, {
|
|
3730
|
+
scrollMode: 'if-needed'
|
|
3731
|
+
});
|
|
3732
|
+
delete leafEl.getBoundingClientRect;
|
|
3733
|
+
}
|
|
3734
|
+
};
|
|
3661
3735
|
/**
|
|
3662
3736
|
* Check if the target is editable and in the editor.
|
|
3663
3737
|
*/
|