@firestitch/markdown-editor 18.0.0 → 18.0.1
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/app/modules/markdown-editor/components/markdown-editor/markdown-editor.component.d.ts +4 -4
- package/app/modules/markdown-editor/services/milkdown-loader.service.d.ts +2 -2
- package/assets/milkdown/milkdown.js +993 -0
- package/assets/milkdown/theme/common/block-edit.css +131 -0
- package/assets/milkdown/theme/common/code-mirror.css +333 -0
- package/assets/milkdown/theme/common/cursor.css +22 -0
- package/assets/milkdown/theme/common/image-block.css +384 -0
- package/assets/milkdown/theme/common/latex.css +44 -0
- package/assets/milkdown/theme/common/link-tooltip.css +107 -0
- package/assets/milkdown/theme/common/list-item.css +50 -0
- package/assets/milkdown/theme/common/placeholder.css +11 -0
- package/assets/milkdown/theme/common/table.css +219 -0
- package/assets/milkdown/theme/common/toolbar.css +50 -0
- package/assets/milkdown/theme/nord/style.css +29 -0
- package/esm2022/app/modules/markdown-editor/components/markdown-editor/markdown-editor.component.mjs +16 -15
- package/esm2022/app/modules/markdown-editor/services/milkdown-loader.service.mjs +52 -43
- package/fesm2022/firestitch-markdown-editor.mjs +66 -56
- package/fesm2022/firestitch-markdown-editor.mjs.map +1 -1
- package/package.json +1 -3
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
@import '@milkdown/kit/prose/tables/style/tables.css';
|
|
2
|
+
|
|
3
|
+
.milkdown .milkdown-table-block {
|
|
4
|
+
display: block;
|
|
5
|
+
margin: 4px 0;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
.milkdown .milkdown-table-block th,
|
|
9
|
+
.milkdown .milkdown-table-block td {
|
|
10
|
+
border: 1px solid
|
|
11
|
+
color-mix(in srgb, var(--crepe-color-outline), transparent 80%);
|
|
12
|
+
padding: 4px 16px;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
.milkdown .milkdown-table-block th .ProseMirror-selectednode, .milkdown .milkdown-table-block td .ProseMirror-selectednode {
|
|
16
|
+
background-color: transparent !important;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
.milkdown .milkdown-table-block th:has(.ProseMirror-selectednode), .milkdown .milkdown-table-block td:has(.ProseMirror-selectednode) {
|
|
20
|
+
outline: 1px solid var(--crepe-color-primary);
|
|
21
|
+
outline-offset: -1px;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
.milkdown .milkdown-table-block .selectedCell::after {
|
|
25
|
+
background-color: var(--crepe-color-selected);
|
|
26
|
+
opacity: 0.4;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
.milkdown .milkdown-table-block .selectedCell ::-moz-selection {
|
|
30
|
+
background: transparent;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.milkdown .milkdown-table-block .selectedCell ::selection {
|
|
34
|
+
background: transparent;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
.milkdown .milkdown-table-block .drag-preview {
|
|
38
|
+
background-color: var(--crepe-color-surface);
|
|
39
|
+
opacity: 0.4;
|
|
40
|
+
position: absolute;
|
|
41
|
+
z-index: 100;
|
|
42
|
+
display: flex;
|
|
43
|
+
flex-direction: column;
|
|
44
|
+
outline: 1px solid var(--crepe-color-primary);
|
|
45
|
+
outline-offset: -1px;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
.milkdown .milkdown-table-block .drag-preview[data-show='false'] {
|
|
49
|
+
display: none;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
.milkdown .milkdown-table-block .drag-preview th:has(.ProseMirror-selectednode), .milkdown .milkdown-table-block .drag-preview td:has(.ProseMirror-selectednode) {
|
|
53
|
+
outline: none;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
.milkdown .milkdown-table-block .handle {
|
|
57
|
+
position: absolute;
|
|
58
|
+
font-size: 14px;
|
|
59
|
+
transition: opacity ease-in-out 0.2s;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
.milkdown .milkdown-table-block .handle[data-show='false'] {
|
|
63
|
+
opacity: 0;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
.milkdown .milkdown-table-block svg {
|
|
67
|
+
fill: var(--crepe-color-outline);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
.milkdown .milkdown-table-block .cell-handle {
|
|
71
|
+
z-index: 50;
|
|
72
|
+
left: -999px;
|
|
73
|
+
top: -999px;
|
|
74
|
+
cursor: grab;
|
|
75
|
+
background-color: var(--crepe-color-surface);
|
|
76
|
+
color: var(--crepe-color-outline);
|
|
77
|
+
border-radius: 100px;
|
|
78
|
+
box-shadow: var(--crepe-shadow-1);
|
|
79
|
+
transition: background-color 0.2s ease-in-out;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
.milkdown .milkdown-table-block .cell-handle:hover {
|
|
83
|
+
background-color: var(--crepe-color-hover);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
.milkdown .milkdown-table-block .cell-handle:has(.button-group:hover) {
|
|
87
|
+
background-color: var(--crepe-color-surface);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
.milkdown .milkdown-table-block .cell-handle[data-role='col-drag-handle'] {
|
|
91
|
+
transform: translateY(50%);
|
|
92
|
+
padding: 0 6px;
|
|
93
|
+
width: 28px;
|
|
94
|
+
height: 16px;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
.milkdown .milkdown-table-block .cell-handle[data-role='row-drag-handle'] {
|
|
98
|
+
transform: translateX(50%);
|
|
99
|
+
padding: 6px 0;
|
|
100
|
+
width: 16px;
|
|
101
|
+
height: 28px;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
.milkdown .milkdown-table-block .cell-handle .button-group {
|
|
105
|
+
position: absolute;
|
|
106
|
+
transform: translateX(-50%);
|
|
107
|
+
left: 50%;
|
|
108
|
+
top: -52px;
|
|
109
|
+
display: flex;
|
|
110
|
+
background-color: var(--crepe-color-surface);
|
|
111
|
+
border-radius: 8px;
|
|
112
|
+
box-shadow: var(--crepe-shadow-1);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
.milkdown .milkdown-table-block .cell-handle .button-group::after {
|
|
116
|
+
content: '';
|
|
117
|
+
position: absolute;
|
|
118
|
+
bottom: -8px;
|
|
119
|
+
height: 8px;
|
|
120
|
+
background-color: transparent;
|
|
121
|
+
width: 100%;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
.milkdown .milkdown-table-block .cell-handle .button-group[data-show='false'] {
|
|
125
|
+
display: none;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
.milkdown .milkdown-table-block .cell-handle .button-group button {
|
|
129
|
+
cursor: pointer;
|
|
130
|
+
margin: 6px;
|
|
131
|
+
padding: 4px;
|
|
132
|
+
display: flex;
|
|
133
|
+
justify-content: center;
|
|
134
|
+
align-items: center;
|
|
135
|
+
border-radius: 4px;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
.milkdown .milkdown-table-block .cell-handle .button-group button svg {
|
|
139
|
+
width: 24px;
|
|
140
|
+
height: 24px;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
.milkdown .milkdown-table-block .cell-handle .button-group button:hover {
|
|
144
|
+
border-radius: 8px;
|
|
145
|
+
background-color: var(--crepe-color-hover);
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
.milkdown .milkdown-table-block .cell-handle .button-group button:active {
|
|
149
|
+
background: var(--crepe-color-selected);
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
.milkdown .milkdown-table-block .cell-handle:hover {
|
|
153
|
+
opacity: 1;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
.milkdown .milkdown-table-block .line-handle {
|
|
157
|
+
z-index: 20;
|
|
158
|
+
background-color: var(--crepe-color-primary);
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
.milkdown .milkdown-table-block .line-handle:hover {
|
|
162
|
+
opacity: 1;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
.milkdown .milkdown-table-block .line-handle .add-button {
|
|
166
|
+
cursor: pointer;
|
|
167
|
+
background-color: var(--crepe-color-surface);
|
|
168
|
+
color: var(--crepe-color-outline);
|
|
169
|
+
border-radius: 100px;
|
|
170
|
+
box-shadow: var(--crepe-shadow-1);
|
|
171
|
+
transition: background-color 0.2s ease-in-out;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
.milkdown .milkdown-table-block .line-handle .add-button svg {
|
|
175
|
+
width: 16px;
|
|
176
|
+
height: 16px;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
.milkdown .milkdown-table-block .line-handle .add-button:hover {
|
|
180
|
+
background-color: var(--crepe-color-hover);
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
.milkdown .milkdown-table-block .line-handle .add-button:active {
|
|
184
|
+
background: var(--crepe-color-selected);
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
.milkdown .milkdown-table-block .line-handle[data-role='x-line-drag-handle'] {
|
|
188
|
+
height: 1px;
|
|
189
|
+
z-index: 2;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
.milkdown .milkdown-table-block .line-handle[data-role='x-line-drag-handle'] .add-button {
|
|
193
|
+
position: absolute;
|
|
194
|
+
transform: translateX(-50%) translateY(-50%);
|
|
195
|
+
padding: 6px 0;
|
|
196
|
+
width: 16px;
|
|
197
|
+
height: 28px;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
.milkdown .milkdown-table-block .line-handle[data-role='y-line-drag-handle'] {
|
|
201
|
+
width: 1px;
|
|
202
|
+
z-index: 1;
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
.milkdown .milkdown-table-block .line-handle[data-role='y-line-drag-handle'] .add-button {
|
|
206
|
+
position: absolute;
|
|
207
|
+
transform: translateY(-50%) translateX(-50%);
|
|
208
|
+
padding: 0 6px;
|
|
209
|
+
width: 28px;
|
|
210
|
+
height: 16px;
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
.milkdown .milkdown-table-block .line-handle[data-display-type='indicator'] .add-button {
|
|
214
|
+
display: none;
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
.milkdown .milkdown-table-block.readonly .handle {
|
|
218
|
+
display: none;
|
|
219
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
.milkdown:has(.milkdown-link-preview[data-show='true']) .milkdown-toolbar,
|
|
2
|
+
.milkdown:has(.milkdown-link-edit[data-show='true']) .milkdown-toolbar {
|
|
3
|
+
display: none;
|
|
4
|
+
}
|
|
5
|
+
.milkdown .milkdown-toolbar[data-show='false'] {
|
|
6
|
+
display: none;
|
|
7
|
+
}
|
|
8
|
+
.milkdown .milkdown-toolbar {
|
|
9
|
+
z-index: 10;
|
|
10
|
+
position: absolute;
|
|
11
|
+
display: flex;
|
|
12
|
+
background: var(--crepe-color-surface);
|
|
13
|
+
box-shadow: var(--crepe-shadow-1);
|
|
14
|
+
border-radius: 8px;
|
|
15
|
+
overflow: hidden;
|
|
16
|
+
}
|
|
17
|
+
.milkdown .milkdown-toolbar .divider {
|
|
18
|
+
width: 1px;
|
|
19
|
+
background: color-mix(
|
|
20
|
+
in srgb,
|
|
21
|
+
var(--crepe-color-outline),
|
|
22
|
+
transparent 80%
|
|
23
|
+
);
|
|
24
|
+
height: 24px;
|
|
25
|
+
margin: 10px;
|
|
26
|
+
}
|
|
27
|
+
.milkdown .milkdown-toolbar .toolbar-item {
|
|
28
|
+
width: 32px;
|
|
29
|
+
height: 32px;
|
|
30
|
+
margin: 6px;
|
|
31
|
+
padding: 4px;
|
|
32
|
+
cursor: pointer;
|
|
33
|
+
border-radius: 4px;
|
|
34
|
+
}
|
|
35
|
+
.milkdown .milkdown-toolbar .toolbar-item:hover {
|
|
36
|
+
background: var(--crepe-color-hover);
|
|
37
|
+
}
|
|
38
|
+
.milkdown .milkdown-toolbar .toolbar-item:active {
|
|
39
|
+
background: var(--crepe-color-selected);
|
|
40
|
+
}
|
|
41
|
+
.milkdown .milkdown-toolbar .toolbar-item svg {
|
|
42
|
+
height: 24px;
|
|
43
|
+
width: 24px;
|
|
44
|
+
color: var(--crepe-color-outline);
|
|
45
|
+
fill: var(--crepe-color-outline);
|
|
46
|
+
}
|
|
47
|
+
.milkdown .milkdown-toolbar .toolbar-item.active svg {
|
|
48
|
+
color: var(--crepe-color-primary);
|
|
49
|
+
fill: var(--crepe-color-primary);
|
|
50
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
.milkdown {
|
|
2
|
+
--crepe-color-background: #fdfcff;
|
|
3
|
+
--crepe-color-on-background: #1b1c1d;
|
|
4
|
+
--crepe-color-surface: #f8f9ff;
|
|
5
|
+
--crepe-color-surface-low: #f2f3fa;
|
|
6
|
+
--crepe-color-on-surface: #191c20;
|
|
7
|
+
--crepe-color-on-surface-variant: #43474e;
|
|
8
|
+
--crepe-color-outline: #73777f;
|
|
9
|
+
--crepe-color-primary: #37618e;
|
|
10
|
+
--crepe-color-secondary: #d7e3f8;
|
|
11
|
+
--crepe-color-on-secondary: #101c2b;
|
|
12
|
+
--crepe-color-inverse: #2e3135;
|
|
13
|
+
--crepe-color-on-inverse: #eff0f7;
|
|
14
|
+
--crepe-color-inline-code: #ba1a1a;
|
|
15
|
+
--crepe-color-error: #ba1a1a;
|
|
16
|
+
--crepe-color-hover: #eceef4;
|
|
17
|
+
--crepe-color-selected: #e1e2e8;
|
|
18
|
+
--crepe-color-inline-area: #d8dae0;
|
|
19
|
+
|
|
20
|
+
--crepe-font-title: Rubik, Cambria, 'Times New Roman', Times, serif;
|
|
21
|
+
--crepe-font-default: Inter, Arial, Helvetica, sans-serif;
|
|
22
|
+
--crepe-font-code:
|
|
23
|
+
'JetBrains Mono', Menlo, Monaco, 'Courier New', Courier, monospace;
|
|
24
|
+
|
|
25
|
+
--crepe-shadow-1:
|
|
26
|
+
0px 1px 3px 1px rgba(0, 0, 0, 0.15), 0px 1px 2px 0px rgba(0, 0, 0, 0.3);
|
|
27
|
+
--crepe-shadow-2:
|
|
28
|
+
0px 2px 6px 2px rgba(0, 0, 0, 0.15), 0px 1px 2px 0px rgba(0, 0, 0, 0.3);
|
|
29
|
+
}
|
package/esm2022/app/modules/markdown-editor/components/markdown-editor/markdown-editor.component.mjs
CHANGED
|
@@ -9,10 +9,6 @@ import { FsMilkdownLoaderService } from '../../services/milkdown-loader.service'
|
|
|
9
9
|
import * as i0 from "@angular/core";
|
|
10
10
|
import * as i1 from "@firestitch/label";
|
|
11
11
|
export class FsMarkdownEditorComponent {
|
|
12
|
-
_defaultConfig = inject(FS_MARKDOWN_EDITOR_CONFIG, { optional: true });
|
|
13
|
-
_cdRef = inject(ChangeDetectorRef);
|
|
14
|
-
_loader = inject(FsMilkdownLoaderService);
|
|
15
|
-
_zone = inject(NgZone);
|
|
16
12
|
editorRef;
|
|
17
13
|
classFocused = false;
|
|
18
14
|
config = {};
|
|
@@ -27,12 +23,16 @@ export class FsMarkdownEditorComponent {
|
|
|
27
23
|
_markdown = '';
|
|
28
24
|
_editorReady = false;
|
|
29
25
|
_destroy$ = new Subject();
|
|
26
|
+
_defaultConfig = inject(FS_MARKDOWN_EDITOR_CONFIG, { optional: true });
|
|
27
|
+
_cdRef = inject(ChangeDetectorRef);
|
|
28
|
+
_loader = inject(FsMilkdownLoaderService);
|
|
29
|
+
_zone = inject(NgZone);
|
|
30
30
|
get markdown() {
|
|
31
31
|
return this._markdown;
|
|
32
32
|
}
|
|
33
33
|
ngOnInit() {
|
|
34
34
|
this.config = { ...(this._defaultConfig || {}), ...(this.config || {}) };
|
|
35
|
-
this._loader.
|
|
35
|
+
this._loader.load();
|
|
36
36
|
}
|
|
37
37
|
ngAfterViewInit() {
|
|
38
38
|
this._loader.loaded$
|
|
@@ -114,19 +114,20 @@ export class FsMarkdownEditorComponent {
|
|
|
114
114
|
if (this._crepe || !this.editorRef) {
|
|
115
115
|
return;
|
|
116
116
|
}
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
117
|
+
const milkdown = window.__MILKDOWN__;
|
|
118
|
+
if (!milkdown) {
|
|
119
|
+
console.error('Milkdown not loaded. Ensure assets are configured.');
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
this._editorViewCtx = milkdown.editorViewCtx;
|
|
123
|
+
this._parserCtx = milkdown.parserCtx;
|
|
124
|
+
this._zone.runOutsideAngular(() => {
|
|
125
|
+
this._crepe = new milkdown.Crepe({
|
|
125
126
|
root: this.editorRef.nativeElement,
|
|
126
127
|
defaultValue: this._markdown,
|
|
127
128
|
features: {},
|
|
128
129
|
featureConfigs: {
|
|
129
|
-
[Crepe.Feature.Placeholder]: {
|
|
130
|
+
[milkdown.Crepe.Feature.Placeholder]: {
|
|
130
131
|
text: this.config.placeholder || 'Start typing...',
|
|
131
132
|
},
|
|
132
133
|
},
|
|
@@ -235,4 +236,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
|
|
|
235
236
|
type: HostBinding,
|
|
236
237
|
args: ['class.initialized']
|
|
237
238
|
}] } });
|
|
238
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFya2Rvd24tZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvbW9kdWxlcy9tYXJrZG93bi1lZGl0b3IvY29tcG9uZW50cy9tYXJrZG93bi1lZGl0b3IvbWFya2Rvd24tZWRpdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvbW9kdWxlcy9tYXJrZG93bi1lZGl0b3IvY29tcG9uZW50cy9tYXJrZG93bi1lZGl0b3IvbWFya2Rvd24tZWRpdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsVUFBVSxFQUNWLFdBQVcsRUFDWCxNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFHTixRQUFRLEVBQ1IsU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCxnQkFBZ0IsRUFFaEIsYUFBYSxFQUNiLGlCQUFpQixFQUNqQixNQUFNLEdBR1AsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDMUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRWxELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBSTNDLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRXhFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDOzs7QUFnQ2pGLE1BQU0sT0FBTyx5QkFBeUI7SUFHNUIsY0FBYyxHQUFHLE1BQU0sQ0FBeUIseUJBQXlCLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFF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dXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBmb3J3YXJkUmVmLFxuICBIb3N0QmluZGluZyxcbiAgaW5qZWN0LFxuICBJbnB1dCxcbiAgTmdab25lLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3B0aW9uYWwsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBDb250cm9sQ29udGFpbmVyLFxuICBDb250cm9sVmFsdWVBY2Nlc3NvcixcbiAgTkdfVkFMSURBVE9SUyxcbiAgTkdfVkFMVUVfQUNDRVNTT1IsXG4gIE5nRm9ybSxcbiAgVmFsaWRhdGlvbkVycm9ycyxcbiAgVmFsaWRhdG9yLFxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7IGd1aWQgfSBmcm9tICdAZmlyZXN0aXRjaC9jb21tb24nO1xuaW1wb3J0IHsgRnNMYWJlbE1vZHVsZSB9IGZyb20gJ0BmaXJlc3RpdGNoL2xhYmVsJztcblxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgdHlwZSB7IENyZXBlIH0gZnJvbSAnQG1pbGtkb3duL2NyZXBlJztcblxuaW1wb3J0IHsgRlNfTUFSS0RPV05fRURJVE9SX0NPTkZJRyB9IGZyb20gJy4uLy4uL2luamVjdHMvY29uZmlnLmluamVjdCc7XG5pbXBvcnQgeyBGc01hcmtkb3duRWRpdG9yQ29uZmlnIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9tYXJrZG93bi1lZGl0b3ItY29uZmlnJztcbmltcG9ydCB7IEZzTWlsa2Rvd25Mb2FkZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbWlsa2Rvd24tbG9hZGVyLnNlcnZpY2UnO1xuXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2ZzLW1hcmtkb3duLWVkaXRvcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9tYXJrZG93bi1lZGl0b3IuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9tYXJrZG93bi1lZGl0b3IuY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBGc01hcmtkb3duRWRpdG9yQ29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMSURBVE9SUyxcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEZzTWFya2Rvd25FZGl0b3JDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgfSxcbiAgXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHZpZXdQcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBDb250cm9sQ29udGFpbmVyLFxuICAgICAgZGVwczogW1tPcHRpb25hbCwgTmdGb3JtXV0sXG4gICAgICB1c2VGYWN0b3J5OiAobmdGb3JtOiBOZ0Zvcm0pID0+IG5nRm9ybSxcbiAgICB9LFxuICBdLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgRnNMYWJlbE1vZHVsZSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgRnNNYXJrZG93bkVkaXRvckNvbXBvbmVudFxuICBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIFZhbGlkYXRvciwgT25EZXN0cm95IHtcblxuICBwcml2YXRlIF9kZWZhdWx0Q29uZmlnID0gaW5qZWN0PEZzTWFya2Rvd25FZGl0b3JDb25maWc+KEZTX01BUktET1dOX0VESVRPUl9DT05GSUcsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG4gIHByaXZhdGUgX2NkUmVmID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcbiAgcHJpdmF0ZSBfbG9hZGVyID0gaW5qZWN0KEZzTWlsa2Rvd25Mb2FkZXJTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBfem9uZSA9IGluamVjdChOZ1pvbmUpO1xuXG4gIEBWaWV3Q2hpbGQoJ2VkaXRvclJlZicpIHB1YmxpYyBlZGl0b3JSZWY6IEVsZW1lbnRSZWY7XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5mb2N1c2VkJykgcHVibGljIGNsYXNzRm9jdXNlZCA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIHB1YmxpYyBjb25maWc6IEZzTWFya2Rvd25FZGl0b3JDb25maWcgPSB7fTtcblxuICBASW5wdXQoKVxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmRpc2FibGVkJylcbiAgcHVibGljIGRpc2FibGVkID0gZmFsc2U7XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pbml0aWFsaXplZCcpXG4gIHB1YmxpYyBpbml0aWFsaXplZCA9IGZhbHNlO1xuXG4gIHB1YmxpYyByZWFkb25seSBjb250YWluZXJJRCA9IGBmcy1tYXJrZG93bi1lZGl0b3ItJHtndWlkKCd4eHgnKX1gO1xuICBwdWJsaWMgb25Ub3VjaGVkOiAoKSA9PiB2b2lkO1xuICBwdWJsaWMgb25DaGFuZ2U6IChkYXRhOiBhbnkpID0+IHZvaWQ7XG5cbiAgcHJpdmF0ZSBfY3JlcGU6IENyZXBlO1xuICBwcml2YXRlIF9lZGl0b3JWaWV3Q3R4OiBhbnk7XG4gIHByaXZhdGUgX3BhcnNlckN0eDogYW55O1xuICBwcml2YXRlIF9tYXJrZG93biA9ICcnO1xuICBwcml2YXRlIF9lZGl0b3JSZWFkeSA9IGZhbHNlO1xuICBwcml2YXRlIF9kZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgcHVibGljIGdldCBtYXJrZG93bigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9tYXJrZG93bjtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmNvbmZpZyA9IHsgLi4uKHRoaXMuX2RlZmF1bHRDb25maWcgfHwge30pLCAuLi4odGhpcy5jb25maWcgfHwge30pIH07XG4gICAgdGhpcy5fbG9hZGVyLmxvYWRTdHlsZXMoKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5fbG9hZGVyLmxvYWRlZCRcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpXG4gICAgICAuc3Vic2NyaWJlKChsb2FkZWQpID0+IHtcbiAgICAgICAgaWYgKGxvYWRlZCkge1xuICAgICAgICAgIHRoaXMuX2luaXRFZGl0b3IoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgd3JpdGVWYWx1ZShtYXJrZG93bjogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5fbWFya2Rvd24gPSBtYXJrZG93biB8fCAnJztcblxuICAgIGlmICh0aGlzLl9lZGl0b3JSZWFkeSkge1xuICAgICAgdGhpcy5fc2V0RWRpdG9yQ29udGVudCh0aGlzLl9tYXJrZG93bik7XG4gICAgfVxuXG4gICAgdGhpcy5fY2RSZWYubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbjogKGRhdGE6IGFueSkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gIH1cblxuICBwdWJsaWMgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gIH1cblxuICBwdWJsaWMgdmFsaWRhdGUoKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIGNvbnN0IGVycjogYW55ID0ge307XG4gICAgaWYgKHRoaXMuY29uZmlnLm1heExlbmd0aCAmJiB0aGlzLl9tYXJrZG93bikge1xuICAgICAgY29uc3QgbGVuZ3RoID0gdGhpcy5fbWFya2Rvd24ubGVuZ3RoO1xuICAgICAgaWYgKGxlbmd0aCA+IHRoaXMuY29uZmlnLm1heExlbmd0aCkge1xuICAgICAgICBlcnIubWF4TGVuZ3RoRXJyb3IgPSBgTXVzdCBiZSAke3RoaXMuY29uZmlnLm1heExlbmd0aH0gY2hhcmFjdGVycyBvciBmZXdlci4gWW91IGVudGVyZWQgJHtsZW5ndGh9IGNoYXJhY3RlcnMuYDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gT2JqZWN0LmtleXMoZXJyKS5sZW5ndGggPyBlcnIgOiBudWxsO1xuICB9XG5cbiAgcHVibGljIGNsZWFyKCk6IHZvaWQge1xuICAgIHRoaXMud3JpdGVWYWx1ZSgnJyk7XG4gICAgaWYgKHRoaXMub25DaGFuZ2UpIHtcbiAgICAgIHRoaXMub25DaGFuZ2UoJycpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzZXRNYXJrZG93bihtYXJrZG93bjogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy53cml0ZVZhbHVlKG1hcmtkb3duKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRNYXJrZG93bigpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5fY3JlcGUpIHtcbiAgICAgIHJldHVybiB0aGlzLl9tYXJrZG93bjtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fY3JlcGUuZ2V0TWFya2Rvd24oKTtcbiAgfVxuXG4gIHB1YmxpYyBmb2N1cygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fY3JlcGUgJiYgdGhpcy5fZWRpdG9yVmlld0N0eCkge1xuICAgICAgdGhpcy5fY3JlcGUuZWRpdG9yLmFjdGlvbigoY3R4KSA9PiB7XG4gICAgICAgIGNvbnN0IHZpZXcgPSBjdHguZ2V0KHRoaXMuX2VkaXRvclZpZXdDdHgpIGFzIGFueTtcbiAgICAgICAgdmlldy5mb2N1cygpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGRpc2FibGUoKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IHRydWU7XG4gICAgdGhpcy5fY2RSZWYubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwdWJsaWMgZGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fY3JlcGUpIHtcbiAgICAgIHRoaXMuX2NyZXBlLmRlc3Ryb3koKTtcbiAgICAgIHRoaXMuX2NyZXBlID0gbnVsbDtcbiAgICB9XG4gICAgdGhpcy5fZWRpdG9yUmVhZHkgPSBmYWxzZTtcbiAgICB0aGlzLmluaXRpYWxpemVkID0gZmFsc2U7XG4gICAgdGhpcy5fY2RSZWYubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fZGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMuX2Rlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5kZXN0cm95KCk7XG4gIH1cblxuICBwcml2YXRlIF9pbml0RWRpdG9yKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9jcmVwZSB8fCAhdGhpcy5lZGl0b3JSZWYpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl96b25lLnJ1bk91dHNpZGVBbmd1bGFyKGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IFt7IENyZXBlIH0sIHsgZWRpdG9yVmlld0N0eCwgcGFyc2VyQ3R4IH1dID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICBpbXBvcnQoJ0BtaWxrZG93bi9jcmVwZScpLFxuICAgICAgICBpbXBvcnQoJ0BtaWxrZG93bi9raXQvY29yZScpLFxuICAgICAgXSk7XG5cbiAgICAgIHRoaXMuX2VkaXRvclZpZXdDdHggPSBlZGl0b3JWaWV3Q3R4O1xuICAgICAgdGhpcy5fcGFyc2VyQ3R4ID0gcGFyc2VyQ3R4O1xuXG4gICAgICB0aGlzLl9jcmVwZSA9IG5ldyBDcmVwZSh7XG4gICAgICAgIHJvb3Q6IHRoaXMuZWRpdG9yUmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogdGhpcy5fbWFya2Rvd24sXG4gICAgICAgIGZlYXR1cmVzOiB7fSxcbiAgICAgICAgZmVhdHVyZUNvbmZpZ3M6IHtcbiAgICAgICAgICBbQ3JlcGUuRmVhdHVyZS5QbGFjZWhvbGRlcl06IHtcbiAgICAgICAgICAgIHRleHQ6IHRoaXMuY29uZmlnLnBsYWNlaG9sZGVyIHx8ICdTdGFydCB0eXBpbmcuLi4nLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgdGhpcy5fY3JlcGUub24oKGxpc3RlbmVyKSA9PiB7XG4gICAgICAgIGxpc3RlbmVyLm1hcmtkb3duVXBkYXRlZCgoX2N0eCwgbWFya2Rvd24sIHByZXZNYXJrZG93bikgPT4ge1xuICAgICAgICAgIGlmIChtYXJrZG93biAhPT0gcHJldk1hcmtkb3duKSB7XG4gICAgICAgICAgICB0aGlzLl96b25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX21hcmtkb3duID0gbWFya2Rvd247XG4gICAgICAgICAgICAgIGlmICh0aGlzLm9uQ2hhbmdlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkNoYW5nZShtYXJrZG93bik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHRoaXMub25Ub3VjaGVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB0aGlzLl9jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5fY3JlcGUuY3JlYXRlKCkudGhlbigoKSA9PiB7XG4gICAgICAgIHRoaXMuX3pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICB0aGlzLl9lZGl0b3JSZWFkeSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7XG5cbiAgICAgICAgICBpZiAodGhpcy5fbWFya2Rvd24pIHtcbiAgICAgICAgICAgIHRoaXMuX3NldEVkaXRvckNvbnRlbnQodGhpcy5fbWFya2Rvd24pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuX2NkUmVmLm1hcmtGb3JDaGVjaygpO1xuXG4gICAgICAgICAgaWYgKHRoaXMuY29uZmlnLmF1dG9mb2N1cykge1xuICAgICAgICAgICAgdGhpcy5mb2N1cygpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0aGlzLmNvbmZpZy5pbml0aWFsaXplZCkge1xuICAgICAgICAgICAgdGhpcy5jb25maWcuaW5pdGlhbGl6ZWQoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9zZXRFZGl0b3JDb250ZW50KG1hcmtkb3duOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLl9jcmVwZS5lZGl0b3IuYWN0aW9uKChjdHgpID0+IHtcbiAgICAgIGNvbnN0IHZpZXcgPSBjdHguZ2V0KHRoaXMuX2VkaXRvclZpZXdDdHgpIGFzIGFueTtcbiAgICAgIGNvbnN0IHBhcnNlciA9IGN0eC5nZXQodGhpcy5fcGFyc2VyQ3R4KSBhcyBhbnk7XG4gICAgICBjb25zdCBkb2MgPSBwYXJzZXIobWFya2Rvd24pO1xuICAgICAgaWYgKGRvYykge1xuICAgICAgICBjb25zdCB0ciA9IHZpZXcuc3RhdGUudHIucmVwbGFjZVdpdGgoXG4gICAgICAgICAgMCwgdmlldy5zdGF0ZS5kb2MuY29udGVudC5zaXplLCBkb2MuY29udGVudCxcbiAgICAgICAgKTtcbiAgICAgICAgdmlldy5kaXNwYXRjaCh0cik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cbiIsIjxmcy1sYWJlbC1maWVsZFxuICBbYXBwZWFyYW5jZV09XCInb3V0bGluZSdcIlxuICBbaG92ZXJhYmxlXT1cInRydWVcIlxuICBbc2hvd091dGxpbmVdPVwiaW5pdGlhbGl6ZWRcIlxuICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICBbcGFkbGVzc109XCJjb25maWcucGFkbGVzc1wiXG4gIFtjbGFzcy5pbml0aWFsaXplZF09XCJpbml0aWFsaXplZFwiPlxuICBAaWYgKGNvbmZpZy5sYWJlbCkge1xuICAgIDxmcy1sYWJlbD5cbiAgICAgIHt7IGNvbmZpZy5sYWJlbCB9fVxuICAgIDwvZnMtbGFiZWw+XG4gIH1cbiAgPGRpdlxuICAgIGNsYXNzPVwibWFya2Rvd24tZWRpdG9yLWNvbnRhaW5lclwiXG4gICAgW2lkXT1cImNvbnRhaW5lcklEXCI+XG4gICAgPGRpdiAjZWRpdG9yUmVmPjwvZGl2PlxuICA8L2Rpdj5cbiAgPGZzLWxhYmVsLW1lc3NhZ2U+XG4gICAgPGRpdiBjbGFzcz1cImZzLWZvcm0tbWVzc2FnZVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImZzLWZvcm0taGludFwiPlxuICAgICAgICB7eyBjb25maWcuaGludCB9fVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZnMtbGFiZWwtbWVzc2FnZT5cbjwvZnMtbGFiZWwtZmllbGQ+XG4iXX0=
|
|
239
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFya2Rvd24tZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvbW9kdWxlcy9tYXJrZG93bi1lZGl0b3IvY29tcG9uZW50cy9tYXJrZG93bi1lZGl0b3IvbWFya2Rvd24tZWRpdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvbW9kdWxlcy9tYXJrZG93bi1lZGl0b3IvY29tcG9uZW50cy9tYXJrZG93bi1lZGl0b3IvbWFya2Rvd24tZWRpdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsVUFBVSxFQUNWLFdBQVcsRUFDWCxNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFHTixRQUFRLEVBQ1IsU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCxnQkFBZ0IsRUFFaEIsYUFBYSxFQUNiLGlCQUFpQixFQUNqQixNQUFNLEdBR1AsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDMUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRWxELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNDLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRXhFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDOzs7QUFnQ2pGLE1BQU0sT0FBTyx5QkFBeUI7SUFHTCxTQUFTLENBQWE7SUFFaEIsWUFBWSxHQUFHLEtBQUssQ0FBQztJQUUxQyxNQUFNLEdBQTJCLEVBQUUs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c291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIGZvcndhcmRSZWYsXG4gIEhvc3RCaW5kaW5nLFxuICBpbmplY3QsXG4gIElucHV0LFxuICBOZ1pvbmUsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPcHRpb25hbCxcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIENvbnRyb2xDb250YWluZXIsXG4gIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICBOR19WQUxJREFUT1JTLFxuICBOR19WQUxVRV9BQ0NFU1NPUixcbiAgTmdGb3JtLFxuICBWYWxpZGF0aW9uRXJyb3JzLFxuICBWYWxpZGF0b3IsXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHsgZ3VpZCB9IGZyb20gJ0BmaXJlc3RpdGNoL2NvbW1vbic7XG5pbXBvcnQgeyBGc0xhYmVsTW9kdWxlIH0gZnJvbSAnQGZpcmVzdGl0Y2gvbGFiZWwnO1xuXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IEZTX01BUktET1dOX0VESVRPUl9DT05GSUcgfSBmcm9tICcuLi8uLi9pbmplY3RzL2NvbmZpZy5pbmplY3QnO1xuaW1wb3J0IHsgRnNNYXJrZG93bkVkaXRvckNvbmZpZyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvbWFya2Rvd24tZWRpdG9yLWNvbmZpZyc7XG5pbXBvcnQgeyBGc01pbGtkb3duTG9hZGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL21pbGtkb3duLWxvYWRlci5zZXJ2aWNlJztcblxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdmcy1tYXJrZG93bi1lZGl0b3InLFxuICB0ZW1wbGF0ZVVybDogJy4vbWFya2Rvd24tZWRpdG9yLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbWFya2Rvd24tZWRpdG9yLmNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRnNNYXJrZG93bkVkaXRvckNvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBGc01hcmtkb3duRWRpdG9yQ29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgIH0sXG4gIF0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICB2aWV3UHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogQ29udHJvbENvbnRhaW5lcixcbiAgICAgIGRlcHM6IFtbT3B0aW9uYWwsIE5nRm9ybV1dLFxuICAgICAgdXNlRmFjdG9yeTogKG5nRm9ybTogTmdGb3JtKSA9PiBuZ0Zvcm0sXG4gICAgfSxcbiAgXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIEZzTGFiZWxNb2R1bGUsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIEZzTWFya2Rvd25FZGl0b3JDb21wb25lbnRcbmltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBDb250cm9sVmFsdWVBY2Nlc3NvciwgVmFsaWRhdG9yLCBPbkRlc3Ryb3kge1xuXG4gIEBWaWV3Q2hpbGQoJ2VkaXRvclJlZicpIHB1YmxpYyBlZGl0b3JSZWY6IEVsZW1lbnRSZWY7XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5mb2N1c2VkJykgcHVibGljIGNsYXNzRm9jdXNlZCA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIHB1YmxpYyBjb25maWc6IEZzTWFya2Rvd25FZGl0b3JDb25maWcgPSB7fTtcblxuICBASW5wdXQoKVxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmRpc2FibGVkJylcbiAgcHVibGljIGRpc2FibGVkID0gZmFsc2U7XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pbml0aWFsaXplZCcpXG4gIHB1YmxpYyBpbml0aWFsaXplZCA9IGZhbHNlO1xuXG4gIHB1YmxpYyByZWFkb25seSBjb250YWluZXJJRCA9IGBmcy1tYXJrZG93bi1lZGl0b3ItJHtndWlkKCd4eHgnKX1gO1xuICBwdWJsaWMgb25Ub3VjaGVkOiAoKSA9PiB2b2lkO1xuICBwdWJsaWMgb25DaGFuZ2U6IChkYXRhOiBhbnkpID0+IHZvaWQ7XG5cbiAgcHJpdmF0ZSBfY3JlcGU6IGFueTtcbiAgcHJpdmF0ZSBfZWRpdG9yVmlld0N0eDogYW55O1xuICBwcml2YXRlIF9wYXJzZXJDdHg6IGFueTtcbiAgcHJpdmF0ZSBfbWFya2Rvd24gPSAnJztcbiAgcHJpdmF0ZSBfZWRpdG9yUmVhZHkgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBwcml2YXRlIF9kZWZhdWx0Q29uZmlnID0gaW5qZWN0PEZzTWFya2Rvd25FZGl0b3JDb25maWc+KEZTX01BUktET1dOX0VESVRPUl9DT05GSUcsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG4gIHByaXZhdGUgX2NkUmVmID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcbiAgcHJpdmF0ZSBfbG9hZGVyID0gaW5qZWN0KEZzTWlsa2Rvd25Mb2FkZXJTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBfem9uZSA9IGluamVjdChOZ1pvbmUpO1xuXG5cbiAgcHVibGljIGdldCBtYXJrZG93bigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9tYXJrZG93bjtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmNvbmZpZyA9IHsgLi4uKHRoaXMuX2RlZmF1bHRDb25maWcgfHwge30pLCAuLi4odGhpcy5jb25maWcgfHwge30pIH07XG4gICAgdGhpcy5fbG9hZGVyLmxvYWQoKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5fbG9hZGVyLmxvYWRlZCRcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpXG4gICAgICAuc3Vic2NyaWJlKChsb2FkZWQpID0+IHtcbiAgICAgICAgaWYgKGxvYWRlZCkge1xuICAgICAgICAgIHRoaXMuX2luaXRFZGl0b3IoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgd3JpdGVWYWx1ZShtYXJrZG93bjogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5fbWFya2Rvd24gPSBtYXJrZG93biB8fCAnJztcblxuICAgIGlmICh0aGlzLl9lZGl0b3JSZWFkeSkge1xuICAgICAgdGhpcy5fc2V0RWRpdG9yQ29udGVudCh0aGlzLl9tYXJrZG93bik7XG4gICAgfVxuXG4gICAgdGhpcy5fY2RSZWYubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbjogKGRhdGE6IGFueSkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gIH1cblxuICBwdWJsaWMgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gIH1cblxuICBwdWJsaWMgdmFsaWRhdGUoKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIGNvbnN0IGVycjogYW55ID0ge307XG4gICAgaWYgKHRoaXMuY29uZmlnLm1heExlbmd0aCAmJiB0aGlzLl9tYXJrZG93bikge1xuICAgICAgY29uc3QgbGVuZ3RoID0gdGhpcy5fbWFya2Rvd24ubGVuZ3RoO1xuICAgICAgaWYgKGxlbmd0aCA+IHRoaXMuY29uZmlnLm1heExlbmd0aCkge1xuICAgICAgICBlcnIubWF4TGVuZ3RoRXJyb3IgPSBgTXVzdCBiZSAke3RoaXMuY29uZmlnLm1heExlbmd0aH0gY2hhcmFjdGVycyBvciBmZXdlci4gWW91IGVudGVyZWQgJHtsZW5ndGh9IGNoYXJhY3RlcnMuYDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gT2JqZWN0LmtleXMoZXJyKS5sZW5ndGggPyBlcnIgOiBudWxsO1xuICB9XG5cbiAgcHVibGljIGNsZWFyKCk6IHZvaWQge1xuICAgIHRoaXMud3JpdGVWYWx1ZSgnJyk7XG4gICAgaWYgKHRoaXMub25DaGFuZ2UpIHtcbiAgICAgIHRoaXMub25DaGFuZ2UoJycpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzZXRNYXJrZG93bihtYXJrZG93bjogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy53cml0ZVZhbHVlKG1hcmtkb3duKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRNYXJrZG93bigpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5fY3JlcGUpIHtcbiAgICAgIHJldHVybiB0aGlzLl9tYXJrZG93bjtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fY3JlcGUuZ2V0TWFya2Rvd24oKTtcbiAgfVxuXG4gIHB1YmxpYyBmb2N1cygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fY3JlcGUgJiYgdGhpcy5fZWRpdG9yVmlld0N0eCkge1xuICAgICAgdGhpcy5fY3JlcGUuZWRpdG9yLmFjdGlvbigoY3R4OiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgdmlldyA9IGN0eC5nZXQodGhpcy5fZWRpdG9yVmlld0N0eCk7XG4gICAgICAgIHZpZXcuZm9jdXMoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBkaXNhYmxlKCk6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZWQgPSB0cnVlO1xuICAgIHRoaXMuX2NkUmVmLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHVibGljIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2NyZXBlKSB7XG4gICAgICB0aGlzLl9jcmVwZS5kZXN0cm95KCk7XG4gICAgICB0aGlzLl9jcmVwZSA9IG51bGw7XG4gICAgfVxuICAgIHRoaXMuX2VkaXRvclJlYWR5ID0gZmFsc2U7XG4gICAgdGhpcy5pbml0aWFsaXplZCA9IGZhbHNlO1xuICAgIHRoaXMuX2NkUmVmLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX2Rlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLl9kZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgIHRoaXMuZGVzdHJveSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfaW5pdEVkaXRvcigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fY3JlcGUgfHwgIXRoaXMuZWRpdG9yUmVmKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbWlsa2Rvd24gPSAod2luZG93IGFzIGFueSkuX19NSUxLRE9XTl9fO1xuICAgIGlmICghbWlsa2Rvd24pIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ01pbGtkb3duIG5vdCBsb2FkZWQuIEVuc3VyZSBhc3NldHMgYXJlIGNvbmZpZ3VyZWQuJyk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9lZGl0b3JWaWV3Q3R4ID0gbWlsa2Rvd24uZWRpdG9yVmlld0N0eDtcbiAgICB0aGlzLl9wYXJzZXJDdHggPSBtaWxrZG93bi5wYXJzZXJDdHg7XG5cbiAgICB0aGlzLl96b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgIHRoaXMuX2NyZXBlID0gbmV3IG1pbGtkb3duLkNyZXBlKHtcbiAgICAgICAgcm9vdDogdGhpcy5lZGl0b3JSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICAgZGVmYXVsdFZhbHVlOiB0aGlzLl9tYXJrZG93bixcbiAgICAgICAgZmVhdHVyZXM6IHt9LFxuICAgICAgICBmZWF0dXJlQ29uZmlnczoge1xuICAgICAgICAgIFttaWxrZG93bi5DcmVwZS5GZWF0dXJlLlBsYWNlaG9sZGVyXToge1xuICAgICAgICAgICAgdGV4dDogdGhpcy5jb25maWcucGxhY2Vob2xkZXIgfHwgJ1N0YXJ0IHR5cGluZy4uLicsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLl9jcmVwZS5vbigobGlzdGVuZXI6IGFueSkgPT4ge1xuICAgICAgICBsaXN0ZW5lci5tYXJrZG93blVwZGF0ZWQoKF9jdHg6IGFueSwgbWFya2Rvd246IHN0cmluZywgcHJldk1hcmtkb3duOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICBpZiAobWFya2Rvd24gIT09IHByZXZNYXJrZG93bikge1xuICAgICAgICAgICAgdGhpcy5fem9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLl9tYXJrZG93biA9IG1hcmtkb3duO1xuICAgICAgICAgICAgICBpZiAodGhpcy5vbkNoYW5nZSkge1xuICAgICAgICAgICAgICAgIHRoaXMub25DaGFuZ2UobWFya2Rvd24pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmICh0aGlzLm9uVG91Y2hlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdGhpcy5fY2RSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuX2NyZXBlLmNyZWF0ZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICB0aGlzLl96b25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgdGhpcy5fZWRpdG9yUmVhZHkgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZWQgPSB0cnVlO1xuXG4gICAgICAgICAgaWYgKHRoaXMuX21hcmtkb3duKSB7XG4gICAgICAgICAgICB0aGlzLl9zZXRFZGl0b3JDb250ZW50KHRoaXMuX21hcmtkb3duKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLl9jZFJlZi5tYXJrRm9yQ2hlY2soKTtcblxuICAgICAgICAgIGlmICh0aGlzLmNvbmZpZy5hdXRvZm9jdXMpIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodGhpcy5jb25maWcuaW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY29uZmlnLmluaXRpYWxpemVkKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2V0RWRpdG9yQ29udGVudChtYXJrZG93bjogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5fY3JlcGUuZWRpdG9yLmFjdGlvbigoY3R4OiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IHZpZXcgPSBjdHguZ2V0KHRoaXMuX2VkaXRvclZpZXdDdHgpO1xuICAgICAgY29uc3QgcGFyc2VyID0gY3R4LmdldCh0aGlzLl9wYXJzZXJDdHgpO1xuICAgICAgY29uc3QgZG9jID0gcGFyc2VyKG1hcmtkb3duKTtcbiAgICAgIGlmIChkb2MpIHtcbiAgICAgICAgY29uc3QgdHIgPSB2aWV3LnN0YXRlLnRyLnJlcGxhY2VXaXRoKFxuICAgICAgICAgIDAsIHZpZXcuc3RhdGUuZG9jLmNvbnRlbnQuc2l6ZSwgZG9jLmNvbnRlbnQsXG4gICAgICAgICk7XG4gICAgICAgIHZpZXcuZGlzcGF0Y2godHIpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG4iLCI8ZnMtbGFiZWwtZmllbGRcbiAgW2FwcGVhcmFuY2VdPVwiJ291dGxpbmUnXCJcbiAgW2hvdmVyYWJsZV09XCJ0cnVlXCJcbiAgW3Nob3dPdXRsaW5lXT1cImluaXRpYWxpemVkXCJcbiAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgW3BhZGxlc3NdPVwiY29uZmlnLnBhZGxlc3NcIlxuICBbY2xhc3MuaW5pdGlhbGl6ZWRdPVwiaW5pdGlhbGl6ZWRcIj5cbiAgQGlmIChjb25maWcubGFiZWwpIHtcbiAgICA8ZnMtbGFiZWw+XG4gICAgICB7eyBjb25maWcubGFiZWwgfX1cbiAgICA8L2ZzLWxhYmVsPlxuICB9XG4gIDxkaXZcbiAgICBjbGFzcz1cIm1hcmtkb3duLWVkaXRvci1jb250YWluZXJcIlxuICAgIFtpZF09XCJjb250YWluZXJJRFwiPlxuICAgIDxkaXYgI2VkaXRvclJlZj48L2Rpdj5cbiAgPC9kaXY+XG4gIDxmcy1sYWJlbC1tZXNzYWdlPlxuICAgIDxkaXYgY2xhc3M9XCJmcy1mb3JtLW1lc3NhZ2VcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmcy1mb3JtLWhpbnRcIj5cbiAgICAgICAge3sgY29uZmlnLmhpbnQgfX1cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2ZzLWxhYmVsLW1lc3NhZ2U+XG48L2ZzLWxhYmVsLWZpZWxkPlxuIl19
|
|
@@ -3,68 +3,77 @@ import { Injectable, inject } from '@angular/core';
|
|
|
3
3
|
import { BehaviorSubject } from 'rxjs';
|
|
4
4
|
import { shareReplay } from 'rxjs/operators';
|
|
5
5
|
import * as i0 from "@angular/core";
|
|
6
|
-
const
|
|
6
|
+
const ASSET_BASE = '/assets/markdown-editor/';
|
|
7
7
|
const STYLESHEETS = [
|
|
8
|
-
`${
|
|
9
|
-
`${
|
|
10
|
-
`${
|
|
11
|
-
`${
|
|
12
|
-
`${
|
|
13
|
-
`${
|
|
14
|
-
`${
|
|
15
|
-
`${
|
|
16
|
-
`${
|
|
17
|
-
`${
|
|
8
|
+
`${ASSET_BASE}theme/common/block-edit.css`,
|
|
9
|
+
`${ASSET_BASE}theme/common/code-mirror.css`,
|
|
10
|
+
`${ASSET_BASE}theme/common/cursor.css`,
|
|
11
|
+
`${ASSET_BASE}theme/common/image-block.css`,
|
|
12
|
+
`${ASSET_BASE}theme/common/latex.css`,
|
|
13
|
+
`${ASSET_BASE}theme/common/link-tooltip.css`,
|
|
14
|
+
`${ASSET_BASE}theme/common/list-item.css`,
|
|
15
|
+
`${ASSET_BASE}theme/common/placeholder.css`,
|
|
16
|
+
`${ASSET_BASE}theme/common/toolbar.css`,
|
|
17
|
+
`${ASSET_BASE}theme/common/table.css`,
|
|
18
18
|
];
|
|
19
|
+
const SCRIPT = `${ASSET_BASE}milkdown.js`;
|
|
19
20
|
export class FsMilkdownLoaderService {
|
|
20
21
|
_document = inject(DOCUMENT);
|
|
21
22
|
_loaded = new BehaviorSubject(false);
|
|
22
|
-
|
|
23
|
+
_loading = false;
|
|
23
24
|
_loaded$ = this._loaded.asObservable()
|
|
24
25
|
.pipe(shareReplay(1));
|
|
25
26
|
get loaded$() {
|
|
26
27
|
return this._loaded$;
|
|
27
28
|
}
|
|
28
|
-
|
|
29
|
-
if (this.
|
|
30
|
-
this._loaded.
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
let remaining = STYLESHEETS.length;
|
|
34
|
-
if (remaining === 0) {
|
|
35
|
-
this._stylesLoaded = true;
|
|
36
|
-
this._loaded.next(true);
|
|
29
|
+
load() {
|
|
30
|
+
if (this._loaded.value || this._loading) {
|
|
31
|
+
if (this._loaded.value) {
|
|
32
|
+
this._loaded.next(true);
|
|
33
|
+
}
|
|
37
34
|
return;
|
|
38
35
|
}
|
|
36
|
+
this._loading = true;
|
|
37
|
+
let stylesRemaining = STYLESHEETS.length;
|
|
38
|
+
let scriptDone = false;
|
|
39
|
+
const checkComplete = () => {
|
|
40
|
+
if (stylesRemaining === 0 && scriptDone) {
|
|
41
|
+
this._loading = false;
|
|
42
|
+
this._loaded.next(true);
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
const onStyleDone = () => {
|
|
46
|
+
stylesRemaining--;
|
|
47
|
+
checkComplete();
|
|
48
|
+
};
|
|
39
49
|
STYLESHEETS.forEach((href) => {
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
remaining--;
|
|
43
|
-
if (remaining === 0) {
|
|
44
|
-
this._stylesLoaded = true;
|
|
45
|
-
this._loaded.next(true);
|
|
46
|
-
}
|
|
50
|
+
if (this._document.querySelector(`link[href="${href}"]`)) {
|
|
51
|
+
onStyleDone();
|
|
47
52
|
return;
|
|
48
53
|
}
|
|
49
54
|
const link = this._document.createElement('link');
|
|
50
55
|
link.rel = 'stylesheet';
|
|
51
56
|
link.href = href;
|
|
52
|
-
link.onload =
|
|
53
|
-
|
|
54
|
-
if (remaining === 0) {
|
|
55
|
-
this._stylesLoaded = true;
|
|
56
|
-
this._loaded.next(true);
|
|
57
|
-
}
|
|
58
|
-
};
|
|
59
|
-
link.onerror = () => {
|
|
60
|
-
remaining--;
|
|
61
|
-
if (remaining === 0) {
|
|
62
|
-
this._stylesLoaded = true;
|
|
63
|
-
this._loaded.next(true);
|
|
64
|
-
}
|
|
65
|
-
};
|
|
57
|
+
link.onload = onStyleDone;
|
|
58
|
+
link.onerror = onStyleDone;
|
|
66
59
|
this._document.head.appendChild(link);
|
|
67
60
|
});
|
|
61
|
+
if (this._document.querySelector(`script[src="${SCRIPT}"]`)) {
|
|
62
|
+
scriptDone = true;
|
|
63
|
+
checkComplete();
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
const script = this._document.createElement('script');
|
|
67
|
+
script.src = SCRIPT;
|
|
68
|
+
script.onload = () => {
|
|
69
|
+
scriptDone = true;
|
|
70
|
+
checkComplete();
|
|
71
|
+
};
|
|
72
|
+
script.onerror = () => {
|
|
73
|
+
scriptDone = true;
|
|
74
|
+
checkComplete();
|
|
75
|
+
};
|
|
76
|
+
this._document.head.appendChild(script);
|
|
68
77
|
}
|
|
69
78
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: FsMilkdownLoaderService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
70
79
|
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: FsMilkdownLoaderService, providedIn: 'root' });
|
|
@@ -75,4 +84,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
|
|
|
75
84
|
providedIn: 'root',
|
|
76
85
|
}]
|
|
77
86
|
}] });
|
|
78
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
87
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlsa2Rvd24tbG9hZGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL21vZHVsZXMvbWFya2Rvd24tZWRpdG9yL3NlcnZpY2VzL21pbGtkb3duLWxvYWRlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRCxPQUFPLEVBQUUsZUFBZSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFFN0MsTUFBTSxVQUFVLEdBQUcsMEJBQTBCLENBQUM7QUFFOUMsTUFBTSxXQUFXLEdBQUc7SUFDbEIsR0FBRyxVQUFVLDZCQUE2QjtJQUMxQyxHQUFHLFVBQVUsOEJBQThCO0lBQzNDLEdBQUcsVUFBVSx5QkFBeUI7SUFDdEMsR0FBRyxVQUFVLDhCQUE4QjtJQUMzQyxHQUFHLFVBQVUsd0JBQXdCO0lBQ3JDLEdBQUcsVUFBVSwrQkFBK0I7SUFDNUMsR0FBRyxVQUFVLDRCQUE0QjtJQUN6QyxHQUFHLFVBQVUsOEJBQThCO0lBQzNDLEdBQUcsVUFBVSwwQkFBMEI7SUFDdkMsR0FBRyxVQUFVLHdCQUF3QjtDQUN0QyxDQUFDO0FBRUYsTUFBTSxNQUFNLEdBQUcsR0FBRyxVQUFVLGFBQWEsQ0FBQztBQUsxQyxNQUFNLE9BQU8sdUJBQXVCO0lBQzFCLFNBQVMsR0FBRyxNQUFNLENBQVcsUUFBUSxDQUFDLENBQUM7SUFDdkMsT0FBTyxHQUFHLElBQUksZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3JDLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFFakIsUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFO1NBQzNDLElBQUksQ0FDSCxX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cG9ydCB7IEluamVjdGFibGUsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHNoYXJlUmVwbGF5IH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5jb25zdCBBU1NFVF9CQVNFID0gJy9hc3NldHMvbWFya2Rvd24tZWRpdG9yLyc7XG5cbmNvbnN0IFNUWUxFU0hFRVRTID0gW1xuICBgJHtBU1NFVF9CQVNFfXRoZW1lL2NvbW1vbi9ibG9jay1lZGl0LmNzc2AsXG4gIGAke0FTU0VUX0JBU0V9dGhlbWUvY29tbW9uL2NvZGUtbWlycm9yLmNzc2AsXG4gIGAke0FTU0VUX0JBU0V9dGhlbWUvY29tbW9uL2N1cnNvci5jc3NgLFxuICBgJHtBU1NFVF9CQVNFfXRoZW1lL2NvbW1vbi9pbWFnZS1ibG9jay5jc3NgLFxuICBgJHtBU1NFVF9CQVNFfXRoZW1lL2NvbW1vbi9sYXRleC5jc3NgLFxuICBgJHtBU1NFVF9CQVNFfXRoZW1lL2NvbW1vbi9saW5rLXRvb2x0aXAuY3NzYCxcbiAgYCR7QVNTRVRfQkFTRX10aGVtZS9jb21tb24vbGlzdC1pdGVtLmNzc2AsXG4gIGAke0FTU0VUX0JBU0V9dGhlbWUvY29tbW9uL3BsYWNlaG9sZGVyLmNzc2AsXG4gIGAke0FTU0VUX0JBU0V9dGhlbWUvY29tbW9uL3Rvb2xiYXIuY3NzYCxcbiAgYCR7QVNTRVRfQkFTRX10aGVtZS9jb21tb24vdGFibGUuY3NzYCxcbl07XG5cbmNvbnN0IFNDUklQVCA9IGAke0FTU0VUX0JBU0V9bWlsa2Rvd24uanNgO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgRnNNaWxrZG93bkxvYWRlclNlcnZpY2Uge1xuICBwcml2YXRlIF9kb2N1bWVudCA9IGluamVjdDxEb2N1bWVudD4oRE9DVU1FTlQpO1xuICBwcml2YXRlIF9sb2FkZWQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcbiAgcHJpdmF0ZSBfbG9hZGluZyA9IGZhbHNlO1xuXG4gIHByaXZhdGUgX2xvYWRlZCQgPSB0aGlzLl9sb2FkZWQuYXNPYnNlcnZhYmxlKClcbiAgICAucGlwZShcbiAgICAgIHNoYXJlUmVwbGF5KDEpLFxuICAgICk7XG5cbiAgcHVibGljIGdldCBsb2FkZWQkKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9sb2FkZWQkO1xuICB9XG5cbiAgcHVibGljIGxvYWQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2xvYWRlZC52YWx1ZSB8fCB0aGlzLl9sb2FkaW5nKSB7XG4gICAgICBpZiAodGhpcy5fbG9hZGVkLnZhbHVlKSB7XG4gICAgICAgIHRoaXMuX2xvYWRlZC5uZXh0KHRydWUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fbG9hZGluZyA9IHRydWU7XG5cbiAgICBsZXQgc3R5bGVzUmVtYWluaW5nID0gU1RZTEVTSEVFVFMubGVuZ3RoO1xuICAgIGxldCBzY3JpcHREb25lID0gZmFsc2U7XG5cbiAgICBjb25zdCBjaGVja0NvbXBsZXRlID0gKCkgPT4ge1xuICAgICAgaWYgKHN0eWxlc1JlbWFpbmluZyA9PT0gMCAmJiBzY3JpcHREb25lKSB7XG4gICAgICAgIHRoaXMuX2xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fbG9hZGVkLm5leHQodHJ1ZSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IG9uU3R5bGVEb25lID0gKCkgPT4ge1xuICAgICAgc3R5bGVzUmVtYWluaW5nLS07XG4gICAgICBjaGVja0NvbXBsZXRlKCk7XG4gICAgfTtcblxuICAgIFNUWUxFU0hFRVRTLmZvckVhY2goKGhyZWYpID0+IHtcbiAgICAgIGlmICh0aGlzLl9kb2N1bWVudC5xdWVyeVNlbGVjdG9yKGBsaW5rW2hyZWY9XCIke2hyZWZ9XCJdYCkpIHtcbiAgICAgICAgb25TdHlsZURvbmUoKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGxpbmsgPSB0aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsaW5rJyk7XG4gICAgICBsaW5rLnJlbCA9ICdzdHlsZXNoZWV0JztcbiAgICAgIGxpbmsuaHJlZiA9IGhyZWY7XG4gICAgICBsaW5rLm9ubG9hZCA9IG9uU3R5bGVEb25lO1xuICAgICAgbGluay5vbmVycm9yID0gb25TdHlsZURvbmU7XG4gICAgICB0aGlzLl9kb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGxpbmspO1xuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMuX2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYHNjcmlwdFtzcmM9XCIke1NDUklQVH1cIl1gKSkge1xuICAgICAgc2NyaXB0RG9uZSA9IHRydWU7XG4gICAgICBjaGVja0NvbXBsZXRlKCk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzY3JpcHQgPSB0aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcbiAgICBzY3JpcHQuc3JjID0gU0NSSVBUO1xuICAgIHNjcmlwdC5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICBzY3JpcHREb25lID0gdHJ1ZTtcbiAgICAgIGNoZWNrQ29tcGxldGUoKTtcbiAgICB9O1xuICAgIHNjcmlwdC5vbmVycm9yID0gKCkgPT4ge1xuICAgICAgc2NyaXB0RG9uZSA9IHRydWU7XG4gICAgICBjaGVja0NvbXBsZXRlKCk7XG4gICAgfTtcbiAgICB0aGlzLl9kb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHNjcmlwdCk7XG4gIH1cbn1cbiJdfQ==
|