@flogeez/angular-tiptap-editor 3.1.4 → 3.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/esm2022/lib/components/editor/angular-tiptap-editor.component.mjs +25 -3
- package/esm2022/lib/models/ate-editor-ref.mjs +319 -0
- package/esm2022/lib/services/ate-editor-commands.service.mjs +34 -1
- package/esm2022/lib/services/ate-editor-registry.service.mjs +94 -0
- package/esm2022/lib/services/ate-export.service.mjs +71 -0
- package/esm2022/lib/services/ate-i18n.service.mjs +28 -1
- package/esm2022/lib/utils/ate-markdown.utils.mjs +179 -0
- package/esm2022/public-api.mjs +4 -1
- package/fesm2022/flogeez-angular-tiptap-editor.mjs +739 -3
- package/fesm2022/flogeez-angular-tiptap-editor.mjs.map +1 -1
- package/lib/components/editor/angular-tiptap-editor.component.d.ts +9 -1
- package/lib/models/ate-editor-ref.d.ts +73 -0
- package/lib/services/ate-editor-commands.service.d.ts +14 -0
- package/lib/services/ate-editor-registry.service.d.ts +36 -0
- package/lib/services/ate-export.service.d.ts +27 -0
- package/lib/services/ate-i18n.service.d.ts +26 -0
- package/lib/utils/ate-markdown.utils.d.ts +4 -0
- package/package.json +1 -1
- package/public-api.d.ts +3 -0
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HTML to Markdown converter utility (no external dependencies).
|
|
3
|
+
*/
|
|
4
|
+
export function htmlToMarkdown(html) {
|
|
5
|
+
const parser = new DOMParser();
|
|
6
|
+
const doc = parser.parseFromString(html, "text/html");
|
|
7
|
+
const result = convertNode(doc.body, { listDepth: 0, listType: null });
|
|
8
|
+
// Normalize multiple blank lines to max two
|
|
9
|
+
return result.replace(/\n{3,}/g, "\n\n").trim();
|
|
10
|
+
}
|
|
11
|
+
function convertNode(node, ctx) {
|
|
12
|
+
if (node.nodeType === Node.TEXT_NODE) {
|
|
13
|
+
return node.textContent || "";
|
|
14
|
+
}
|
|
15
|
+
if (node.nodeType !== Node.ELEMENT_NODE) {
|
|
16
|
+
return "";
|
|
17
|
+
}
|
|
18
|
+
const el = node;
|
|
19
|
+
const tag = el.tagName.toLowerCase();
|
|
20
|
+
const children = Array.from(el.childNodes);
|
|
21
|
+
const inner = (overrideCtx) => children.map(c => convertNode(c, { ...ctx, ...overrideCtx })).join("");
|
|
22
|
+
// ── Block-level elements ──────────────────────────────────
|
|
23
|
+
if (tag === "br") {
|
|
24
|
+
return "\n";
|
|
25
|
+
}
|
|
26
|
+
if (tag === "hr") {
|
|
27
|
+
return "\n\n---\n\n";
|
|
28
|
+
}
|
|
29
|
+
if (/^h[1-6]$/.test(tag)) {
|
|
30
|
+
const level = parseInt(tag[1], 10);
|
|
31
|
+
const prefix = "#".repeat(level);
|
|
32
|
+
return `\n\n${prefix} ${inner().trim()}\n\n`;
|
|
33
|
+
}
|
|
34
|
+
if (tag === "p") {
|
|
35
|
+
const content = inner().trim();
|
|
36
|
+
if (!content) {
|
|
37
|
+
return "";
|
|
38
|
+
}
|
|
39
|
+
return `\n\n${content}\n\n`;
|
|
40
|
+
}
|
|
41
|
+
if (tag === "blockquote") {
|
|
42
|
+
const content = inner()
|
|
43
|
+
.trim()
|
|
44
|
+
.split("\n")
|
|
45
|
+
.map(line => `> ${line}`)
|
|
46
|
+
.join("\n");
|
|
47
|
+
return `\n\n${content}\n\n`;
|
|
48
|
+
}
|
|
49
|
+
if (tag === "pre") {
|
|
50
|
+
// Extract language from code class e.g. "language-typescript"
|
|
51
|
+
const codeEl = el.querySelector("code");
|
|
52
|
+
const lang = codeEl
|
|
53
|
+
? (codeEl.className.match(/language-(\S+)/) || [])[1] || ""
|
|
54
|
+
: "";
|
|
55
|
+
const code = codeEl ? codeEl.textContent || "" : el.textContent || "";
|
|
56
|
+
return `\n\n\`\`\`${lang}\n${code}\n\`\`\`\n\n`;
|
|
57
|
+
}
|
|
58
|
+
if (tag === "ul" || tag === "ol") {
|
|
59
|
+
const isTaskList = el.getAttribute("data-type") === "taskList";
|
|
60
|
+
const items = children
|
|
61
|
+
.filter(c => c.tagName?.toLowerCase() === "li")
|
|
62
|
+
.map((li, idx) => convertListItem(li, {
|
|
63
|
+
listDepth: ctx.listDepth + 1,
|
|
64
|
+
listType: tag === "ul" ? "ul" : "ol",
|
|
65
|
+
orderedIndex: idx + 1,
|
|
66
|
+
isTaskList,
|
|
67
|
+
}))
|
|
68
|
+
.join("\n");
|
|
69
|
+
const block = `\n\n${items}\n\n`;
|
|
70
|
+
// Only add surrounding newlines for root-level lists
|
|
71
|
+
return ctx.listDepth === 0 ? block : `\n${items}`;
|
|
72
|
+
}
|
|
73
|
+
if (tag === "table") {
|
|
74
|
+
return convertTable(el);
|
|
75
|
+
}
|
|
76
|
+
// ── Inline elements ──────────────────────────────────────
|
|
77
|
+
if (tag === "strong" || tag === "b") {
|
|
78
|
+
const content = inner();
|
|
79
|
+
return content ? `**${content}**` : "";
|
|
80
|
+
}
|
|
81
|
+
if (tag === "em" || tag === "i") {
|
|
82
|
+
const content = inner();
|
|
83
|
+
return content ? `*${content}*` : "";
|
|
84
|
+
}
|
|
85
|
+
if (tag === "s" || tag === "del" || tag === "strike") {
|
|
86
|
+
const content = inner();
|
|
87
|
+
return content ? `~~${content}~~` : "";
|
|
88
|
+
}
|
|
89
|
+
if (tag === "u") {
|
|
90
|
+
// No standard Markdown for underline — use HTML passthrough
|
|
91
|
+
const content = inner();
|
|
92
|
+
return content ? `<u>${content}</u>` : "";
|
|
93
|
+
}
|
|
94
|
+
if (tag === "code") {
|
|
95
|
+
// Inline code (not inside pre)
|
|
96
|
+
const content = el.textContent || "";
|
|
97
|
+
return content ? `\`${content}\`` : "";
|
|
98
|
+
}
|
|
99
|
+
if (tag === "a") {
|
|
100
|
+
const href = el.getAttribute("href") || "";
|
|
101
|
+
const content = inner().trim();
|
|
102
|
+
if (!content && !href) {
|
|
103
|
+
return "";
|
|
104
|
+
}
|
|
105
|
+
if (!content) {
|
|
106
|
+
return href;
|
|
107
|
+
}
|
|
108
|
+
return `[${content}](${href})`;
|
|
109
|
+
}
|
|
110
|
+
if (tag === "img") {
|
|
111
|
+
const src = el.getAttribute("src") || "";
|
|
112
|
+
const alt = el.getAttribute("alt") || "";
|
|
113
|
+
return ``;
|
|
114
|
+
}
|
|
115
|
+
// ── Wrapper / Unknown elements → recurse ─────────────────
|
|
116
|
+
return inner();
|
|
117
|
+
}
|
|
118
|
+
function convertListItem(li, ctx) {
|
|
119
|
+
const indent = " ".repeat(ctx.listDepth - 1);
|
|
120
|
+
// Task list item
|
|
121
|
+
if (ctx.isTaskList) {
|
|
122
|
+
const checked = li.getAttribute("data-checked") === "true";
|
|
123
|
+
const checkMark = checked ? "[x]" : "[ ]";
|
|
124
|
+
const content = Array.from(li.childNodes)
|
|
125
|
+
.map(c => convertNode(c, { listDepth: ctx.listDepth, listType: ctx.listType }))
|
|
126
|
+
.join("")
|
|
127
|
+
.trim();
|
|
128
|
+
return `${indent}- ${checkMark} ${content}`;
|
|
129
|
+
}
|
|
130
|
+
// Normal list item
|
|
131
|
+
const bullet = ctx.listType === "ol" ? `${ctx.orderedIndex}.` : "-";
|
|
132
|
+
// Check if li contains nested lists
|
|
133
|
+
const nestedListNodes = Array.from(li.childNodes).filter(c => c.tagName?.toLowerCase() === "ul" ||
|
|
134
|
+
c.tagName?.toLowerCase() === "ol");
|
|
135
|
+
const textNodes = Array.from(li.childNodes).filter(c => !["ul", "ol"].includes(c.tagName?.toLowerCase()));
|
|
136
|
+
const textContent = textNodes
|
|
137
|
+
.map(c => convertNode(c, { listDepth: ctx.listDepth, listType: ctx.listType }))
|
|
138
|
+
.join("")
|
|
139
|
+
.trim();
|
|
140
|
+
const nestedContent = nestedListNodes
|
|
141
|
+
.map(c => convertNode(c, { listDepth: ctx.listDepth, listType: ctx.listType }))
|
|
142
|
+
.join("")
|
|
143
|
+
.trimEnd();
|
|
144
|
+
return `${indent}${bullet} ${textContent}${nestedContent}`;
|
|
145
|
+
}
|
|
146
|
+
function convertTable(table) {
|
|
147
|
+
const rows = Array.from(table.querySelectorAll("tr"));
|
|
148
|
+
if (rows.length === 0) {
|
|
149
|
+
return "";
|
|
150
|
+
}
|
|
151
|
+
const tableData = rows.map(row => Array.from(row.querySelectorAll("th, td")).map(cell => cell.textContent?.replace(/\n/g, " ").trim() || ""));
|
|
152
|
+
if (tableData.length === 0) {
|
|
153
|
+
return "";
|
|
154
|
+
}
|
|
155
|
+
const colCount = Math.max(...tableData.map(r => r.length));
|
|
156
|
+
// Pad rows to same width
|
|
157
|
+
const normalized = tableData.map(row => {
|
|
158
|
+
while (row.length < colCount) {
|
|
159
|
+
row.push("");
|
|
160
|
+
}
|
|
161
|
+
return row;
|
|
162
|
+
});
|
|
163
|
+
// Calculate column widths
|
|
164
|
+
const colWidths = Array.from({ length: colCount }, (_, i) => Math.max(...normalized.map(r => (r[i] || "").length), 3));
|
|
165
|
+
const pad = (str, len) => str.padEnd(len, " ");
|
|
166
|
+
const separator = colWidths.map(w => "-".repeat(w)).join(" | ");
|
|
167
|
+
// Build rows
|
|
168
|
+
const lines = [];
|
|
169
|
+
normalized.forEach((row, rowIdx) => {
|
|
170
|
+
const line = row.map((cell, i) => pad(cell, colWidths[i])).join(" | ");
|
|
171
|
+
lines.push(`| ${line} |`);
|
|
172
|
+
// Add separator after header row (first row)
|
|
173
|
+
if (rowIdx === 0) {
|
|
174
|
+
lines.push(`| ${separator} |`);
|
|
175
|
+
}
|
|
176
|
+
});
|
|
177
|
+
return `\n\n${lines.join("\n")}\n\n`;
|
|
178
|
+
}
|
|
179
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXRlLW1hcmtkb3duLnV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci10aXB0YXAtZWRpdG9yL3NyYy9saWIvdXRpbHMvYXRlLW1hcmtkb3duLnV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsTUFBTSxVQUFVLGNBQWMsQ0FBQyxJQUFZO0lBQ3pDLE1BQU0sTUFBTSxHQUFHLElBQUksU0FBUyxFQUFFLENBQUM7SUFDL0IsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDdEQsTUFBTSxNQUFNLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZFLDRDQUE0QztJQUM1QyxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ2xELENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FDbEIsSUFBVSxFQUNWLEdBQStFO0lBRS9FLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDckMsT0FBTyxJQUFJLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBRUQsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN4QyxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRCxNQUFNLEVBQUUsR0FBRyxJQUFtQixDQUFDO0lBQy9CLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDckMsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUM7SUFFM0MsTUFBTSxLQUFLLEdBQUcsQ0FBQyxXQUFpQyxFQUFFLEVBQUUsQ0FDbEQsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFFekUsNkRBQTZEO0lBRTdELElBQUksR0FBRyxLQUFLLElBQUksRUFBRSxDQUFDO1FBQ2pCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELElBQUksR0FBRyxLQUFLLElBQUksRUFBRSxDQUFDO1FBQ2pCLE9BQU8sYUFBYSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUN6QixNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ25DLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakMsT0FBTyxPQUFPLE1BQU0sSUFBSSxLQUFLLEVBQUUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDO0lBQy9DLENBQUM7SUFFRCxJQUFJLEdBQUcsS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUNoQixNQUFNLE9BQU8sR0FBRyxLQUFLLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMvQixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFBQSxPQUFPLEVBQUUsQ0FBQztRQUFBLENBQUM7UUFDMUIsT0FBTyxPQUFPLE9BQU8sTUFBTSxDQUFDO0lBQzlCLENBQUM7SUFFRCxJQUFJLEdBQUcsS0FBSyxZQUFZLEVBQUUsQ0FBQztRQUN6QixNQUFNLE9BQU8sR0FBRyxLQUFLLEVBQUU7YUFDcEIsSUFBSSxFQUFFO2FBQ04sS0FBSyxDQUFDLElBQUksQ0FBQzthQUNYLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7YUFDeEIsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2QsT0FBTyxPQUFPLE9BQU8sTUFBTSxDQUFDO0lBQzlCLENBQUM7SUFFRCxJQUFJLEdBQUcsS0FBSyxLQUFLLEVBQUUsQ0FBQztRQUNsQiw4REFBOEQ7UUFDOUQsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN4QyxNQUFNLElBQUksR0FBRyxNQUFNO1lBQ2pCLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRTtZQUMzRCxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ1AsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFdBQVcsSUFBSSxFQUFFLENBQUM7UUFDdEUsT0FBTyxhQUFhLElBQUksS0FBSyxJQUFJLGNBQWMsQ0FBQztJQUNsRCxDQUFDO0lBRUQsSUFBSSxHQUFHLEtBQUssSUFBSSxJQUFJLEdBQUcsS0FBSyxJQUFJLEVBQUUsQ0FBQztRQUNqQyxNQUFNLFVBQVUsR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxLQUFLLFVBQVUsQ0FBQztRQUMvRCxNQUFNLEtBQUssR0FBRyxRQUFRO2FBQ25CLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFFLENBQWlCLENBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxLQUFLLElBQUksQ0FBQzthQUMvRCxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FDZixlQUFlLENBQUMsRUFBaUIsRUFBRTtZQUNqQyxTQUFTLEVBQUUsR0FBRyxDQUFDLFNBQVMsR0FBRyxDQUFDO1lBQzVCLFFBQVEsRUFBRSxHQUFHLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUk7WUFDcEMsWUFBWSxFQUFFLEdBQUcsR0FBRyxDQUFDO1lBQ3JCLFVBQVU7U0FDWCxDQUFDLENBQ0g7YUFDQSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDZCxNQUFNLEtBQUssR0FBRyxPQUFPLEtBQUssTUFBTSxDQUFDO1FBQ2pDLHFEQUFxRDtRQUNyRCxPQUFPLEdBQUcsQ0FBQyxTQUFTLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxFQUFFLENBQUM7SUFDcEQsQ0FBQztJQUVELElBQUksR0FBRyxLQUFLLE9BQU8sRUFBRSxDQUFDO1FBQ3BCLE9BQU8sWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFFRCw0REFBNEQ7SUFFNUQsSUFBSSxHQUFHLEtBQUssUUFBUSxJQUFJLEdBQUcsS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUNwQyxNQUFNLE9BQU8sR0FBRyxLQUFLLEVBQUUsQ0FBQztRQUN4QixPQUFPLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ3pDLENBQUM7SUFFRCxJQUFJLEdBQUcsS0FBSyxJQUFJLElBQUksR0FBRyxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ2hDLE1BQU0sT0FBTyxHQUFHLEtBQUssRUFBRSxDQUFDO1FBQ3hCLE9BQU8sT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDdkMsQ0FBQztJQUVELElBQUksR0FBRyxLQUFLLEdBQUcsSUFBSSxHQUFHLEtBQUssS0FBSyxJQUFJLEdBQUcsS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUNyRCxNQUFNLE9BQU8sR0FBRyxLQUFLLEVBQUUsQ0FBQztRQUN4QixPQUFPLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ3pDLENBQUM7SUFFRCxJQUFJLEdBQUcsS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUNoQiw0REFBNEQ7UUFDNUQsTUFBTSxPQUFPLEdBQUcsS0FBSyxFQUFFLENBQUM7UUFDeEIsT0FBTyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUM1QyxDQUFDO0lBRUQsSUFBSSxHQUFHLEtBQUssTUFBTSxFQUFFLENBQUM7UUFDbkIsK0JBQStCO1FBQy9CLE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQyxXQUFXLElBQUksRUFBRSxDQUFDO1FBQ3JDLE9BQU8sT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDekMsQ0FBQztJQUVELElBQUksR0FBRyxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLE1BQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzNDLE1BQU0sT0FBTyxHQUFHLEtBQUssRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQy9CLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUFBLE9BQU8sRUFBRSxDQUFDO1FBQUEsQ0FBQztRQUNuQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFBQSxPQUFPLElBQUksQ0FBQztRQUFBLENBQUM7UUFDNUIsT0FBTyxJQUFJLE9BQU8sS0FBSyxJQUFJLEdBQUcsQ0FBQztJQUNqQyxDQUFDO0lBRUQsSUFBSSxHQUFHLEtBQUssS0FBSyxFQUFFLENBQUM7UUFDbEIsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDekMsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDekMsT0FBTyxLQUFLLEdBQUcsS0FBSyxHQUFHLEdBQUcsQ0FBQztJQUM3QixDQUFDO0lBRUQsNERBQTREO0lBQzVELE9BQU8sS0FBSyxFQUFFLENBQUM7QUFDakIsQ0FBQztBQUVELFNBQVMsZUFBZSxDQUN0QixFQUFlLEVBQ2YsR0FLQztJQUVELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUU5QyxpQkFBaUI7SUFDakIsSUFBSSxHQUFHLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDbkIsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsS0FBSyxNQUFNLENBQUM7UUFDM0QsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUMxQyxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUM7YUFDdEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxHQUFHLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQzthQUM5RSxJQUFJLENBQUMsRUFBRSxDQUFDO2FBQ1IsSUFBSSxFQUFFLENBQUM7UUFDVixPQUFPLEdBQUcsTUFBTSxLQUFLLFNBQVMsSUFBSSxPQUFPLEVBQUUsQ0FBQztJQUM5QyxDQUFDO0lBRUQsbUJBQW1CO0lBQ25CLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxRQUFRLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO0lBRXBFLG9DQUFvQztJQUNwQyxNQUFNLGVBQWUsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFNLENBQ3RELENBQUMsQ0FBQyxFQUFFLENBQUUsQ0FBaUIsQ0FBQyxPQUFPLEVBQUUsV0FBVyxFQUFFLEtBQUssSUFBSTtRQUNoRCxDQUFpQixDQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsS0FBSyxJQUFJLENBQ3pELENBQUM7SUFDRixNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFNLENBQ2hELENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUUsQ0FBaUIsQ0FBQyxPQUFPLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FDdkUsQ0FBQztJQUVGLE1BQU0sV0FBVyxHQUFHLFNBQVM7U0FDMUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxHQUFHLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztTQUM5RSxJQUFJLENBQUMsRUFBRSxDQUFDO1NBQ1IsSUFBSSxFQUFFLENBQUM7SUFFVixNQUFNLGFBQWEsR0FBRyxlQUFlO1NBQ2xDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxTQUFTLEVBQUUsR0FBRyxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7U0FDOUUsSUFBSSxDQUFDLEVBQUUsQ0FBQztTQUNSLE9BQU8sRUFBRSxDQUFDO0lBRWIsT0FBTyxHQUFHLE1BQU0sR0FBRyxNQUFNLElBQUksV0FBVyxHQUFHLGFBQWEsRUFBRSxDQUFDO0FBQzdELENBQUM7QUFFRCxTQUFTLFlBQVksQ0FBQyxLQUFrQjtJQUN0QyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3RELElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUFBLE9BQU8sRUFBRSxDQUFDO0lBQUEsQ0FBQztJQUVuQyxNQUFNLFNBQVMsR0FBZSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQzNDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUM1QyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQzNELENBQ0YsQ0FBQztJQUVGLElBQUksU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUFBLE9BQU8sRUFBRSxDQUFDO0lBQUEsQ0FBQztJQUV4QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBRTNELHlCQUF5QjtJQUN6QixNQUFNLFVBQVUsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1FBQ3JDLE9BQU8sR0FBRyxDQUFDLE1BQU0sR0FBRyxRQUFRLEVBQUUsQ0FBQztZQUFBLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFBQSxDQUFDO1FBQzdDLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQyxDQUFDLENBQUM7SUFFSCwwQkFBMEI7SUFDMUIsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUMxRCxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUN6RCxDQUFDO0lBRUYsTUFBTSxHQUFHLEdBQUcsQ0FBQyxHQUFXLEVBQUUsR0FBVyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUMvRCxNQUFNLFNBQVMsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUVoRSxhQUFhO0lBQ2IsTUFBTSxLQUFLLEdBQWEsRUFBRSxDQUFDO0lBQzNCLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFDakMsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkUsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLENBQUM7UUFDMUIsNkNBQTZDO1FBQzdDLElBQUksTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ2pCLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxTQUFTLElBQUksQ0FBQyxDQUFDO1FBQ2pDLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQztJQUVILE9BQU8sT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDdkMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogSFRNTCB0byBNYXJrZG93biBjb252ZXJ0ZXIgdXRpbGl0eSAobm8gZXh0ZXJuYWwgZGVwZW5kZW5jaWVzKS5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gaHRtbFRvTWFya2Rvd24oaHRtbDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgcGFyc2VyID0gbmV3IERPTVBhcnNlcigpO1xuICBjb25zdCBkb2MgPSBwYXJzZXIucGFyc2VGcm9tU3RyaW5nKGh0bWwsIFwidGV4dC9odG1sXCIpO1xuICBjb25zdCByZXN1bHQgPSBjb252ZXJ0Tm9kZShkb2MuYm9keSwgeyBsaXN0RGVwdGg6IDAsIGxpc3RUeXBlOiBudWxsIH0pO1xuICAvLyBOb3JtYWxpemUgbXVsdGlwbGUgYmxhbmsgbGluZXMgdG8gbWF4IHR3b1xuICByZXR1cm4gcmVzdWx0LnJlcGxhY2UoL1xcbnszLH0vZywgXCJcXG5cXG5cIikudHJpbSgpO1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0Tm9kZShcbiAgbm9kZTogTm9kZSxcbiAgY3R4OiB7IGxpc3REZXB0aDogbnVtYmVyOyBsaXN0VHlwZTogXCJ1bFwiIHwgXCJvbFwiIHwgbnVsbDsgb3JkZXJlZEluZGV4PzogbnVtYmVyIH1cbik6IHN0cmluZyB7XG4gIGlmIChub2RlLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgIHJldHVybiBub2RlLnRleHRDb250ZW50IHx8IFwiXCI7XG4gIH1cblxuICBpZiAobm9kZS5ub2RlVHlwZSAhPT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuXG4gIGNvbnN0IGVsID0gbm9kZSBhcyBIVE1MRWxlbWVudDtcbiAgY29uc3QgdGFnID0gZWwudGFnTmFtZS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBjaGlsZHJlbiA9IEFycmF5LmZyb20oZWwuY2hpbGROb2Rlcyk7XG5cbiAgY29uc3QgaW5uZXIgPSAob3ZlcnJpZGVDdHg/OiBQYXJ0aWFsPHR5cGVvZiBjdHg+KSA9PlxuICAgIGNoaWxkcmVuLm1hcChjID0+IGNvbnZlcnROb2RlKGMsIHsgLi4uY3R4LCAuLi5vdmVycmlkZUN0eCB9KSkuam9pbihcIlwiKTtcblxuICAvLyDilIDilIAgQmxvY2stbGV2ZWwgZWxlbWVudHMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgaWYgKHRhZyA9PT0gXCJiclwiKSB7XG4gICAgcmV0dXJuIFwiXFxuXCI7XG4gIH1cblxuICBpZiAodGFnID09PSBcImhyXCIpIHtcbiAgICByZXR1cm4gXCJcXG5cXG4tLS1cXG5cXG5cIjtcbiAgfVxuXG4gIGlmICgvXmhbMS02XSQvLnRlc3QodGFnKSkge1xuICAgIGNvbnN0IGxldmVsID0gcGFyc2VJbnQodGFnWzFdLCAxMCk7XG4gICAgY29uc3QgcHJlZml4ID0gXCIjXCIucmVwZWF0KGxldmVsKTtcbiAgICByZXR1cm4gYFxcblxcbiR7cHJlZml4fSAke2lubmVyKCkudHJpbSgpfVxcblxcbmA7XG4gIH1cblxuICBpZiAodGFnID09PSBcInBcIikge1xuICAgIGNvbnN0IGNvbnRlbnQgPSBpbm5lcigpLnRyaW0oKTtcbiAgICBpZiAoIWNvbnRlbnQpIHtyZXR1cm4gXCJcIjt9XG4gICAgcmV0dXJuIGBcXG5cXG4ke2NvbnRlbnR9XFxuXFxuYDtcbiAgfVxuXG4gIGlmICh0YWcgPT09IFwiYmxvY2txdW90ZVwiKSB7XG4gICAgY29uc3QgY29udGVudCA9IGlubmVyKClcbiAgICAgIC50cmltKClcbiAgICAgIC5zcGxpdChcIlxcblwiKVxuICAgICAgLm1hcChsaW5lID0+IGA+ICR7bGluZX1gKVxuICAgICAgLmpvaW4oXCJcXG5cIik7XG4gICAgcmV0dXJuIGBcXG5cXG4ke2NvbnRlbnR9XFxuXFxuYDtcbiAgfVxuXG4gIGlmICh0YWcgPT09IFwicHJlXCIpIHtcbiAgICAvLyBFeHRyYWN0IGxhbmd1YWdlIGZyb20gY29kZSBjbGFzcyBlLmcuIFwibGFuZ3VhZ2UtdHlwZXNjcmlwdFwiXG4gICAgY29uc3QgY29kZUVsID0gZWwucXVlcnlTZWxlY3RvcihcImNvZGVcIik7XG4gICAgY29uc3QgbGFuZyA9IGNvZGVFbFxuICAgICAgPyAoY29kZUVsLmNsYXNzTmFtZS5tYXRjaCgvbGFuZ3VhZ2UtKFxcUyspLykgfHwgW10pWzFdIHx8IFwiXCJcbiAgICAgIDogXCJcIjtcbiAgICBjb25zdCBjb2RlID0gY29kZUVsID8gY29kZUVsLnRleHRDb250ZW50IHx8IFwiXCIgOiBlbC50ZXh0Q29udGVudCB8fCBcIlwiO1xuICAgIHJldHVybiBgXFxuXFxuXFxgXFxgXFxgJHtsYW5nfVxcbiR7Y29kZX1cXG5cXGBcXGBcXGBcXG5cXG5gO1xuICB9XG5cbiAgaWYgKHRhZyA9PT0gXCJ1bFwiIHx8IHRhZyA9PT0gXCJvbFwiKSB7XG4gICAgY29uc3QgaXNUYXNrTGlzdCA9IGVsLmdldEF0dHJpYnV0ZShcImRhdGEtdHlwZVwiKSA9PT0gXCJ0YXNrTGlzdFwiO1xuICAgIGNvbnN0IGl0ZW1zID0gY2hpbGRyZW5cbiAgICAgIC5maWx0ZXIoYyA9PiAoYyBhcyBIVE1MRWxlbWVudCkudGFnTmFtZT8udG9Mb3dlckNhc2UoKSA9PT0gXCJsaVwiKVxuICAgICAgLm1hcCgobGksIGlkeCkgPT5cbiAgICAgICAgY29udmVydExpc3RJdGVtKGxpIGFzIEhUTUxFbGVtZW50LCB7XG4gICAgICAgICAgbGlzdERlcHRoOiBjdHgubGlzdERlcHRoICsgMSxcbiAgICAgICAgICBsaXN0VHlwZTogdGFnID09PSBcInVsXCIgPyBcInVsXCIgOiBcIm9sXCIsXG4gICAgICAgICAgb3JkZXJlZEluZGV4OiBpZHggKyAxLFxuICAgICAgICAgIGlzVGFza0xpc3QsXG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAuam9pbihcIlxcblwiKTtcbiAgICBjb25zdCBibG9jayA9IGBcXG5cXG4ke2l0ZW1zfVxcblxcbmA7XG4gICAgLy8gT25seSBhZGQgc3Vycm91bmRpbmcgbmV3bGluZXMgZm9yIHJvb3QtbGV2ZWwgbGlzdHNcbiAgICByZXR1cm4gY3R4Lmxpc3REZXB0aCA9PT0gMCA/IGJsb2NrIDogYFxcbiR7aXRlbXN9YDtcbiAgfVxuXG4gIGlmICh0YWcgPT09IFwidGFibGVcIikge1xuICAgIHJldHVybiBjb252ZXJ0VGFibGUoZWwpO1xuICB9XG5cbiAgLy8g4pSA4pSAIElubGluZSBlbGVtZW50cyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICBpZiAodGFnID09PSBcInN0cm9uZ1wiIHx8IHRhZyA9PT0gXCJiXCIpIHtcbiAgICBjb25zdCBjb250ZW50ID0gaW5uZXIoKTtcbiAgICByZXR1cm4gY29udGVudCA/IGAqKiR7Y29udGVudH0qKmAgOiBcIlwiO1xuICB9XG5cbiAgaWYgKHRhZyA9PT0gXCJlbVwiIHx8IHRhZyA9PT0gXCJpXCIpIHtcbiAgICBjb25zdCBjb250ZW50ID0gaW5uZXIoKTtcbiAgICByZXR1cm4gY29udGVudCA/IGAqJHtjb250ZW50fSpgIDogXCJcIjtcbiAgfVxuXG4gIGlmICh0YWcgPT09IFwic1wiIHx8IHRhZyA9PT0gXCJkZWxcIiB8fCB0YWcgPT09IFwic3RyaWtlXCIpIHtcbiAgICBjb25zdCBjb250ZW50ID0gaW5uZXIoKTtcbiAgICByZXR1cm4gY29udGVudCA/IGB+fiR7Y29udGVudH1+fmAgOiBcIlwiO1xuICB9XG5cbiAgaWYgKHRhZyA9PT0gXCJ1XCIpIHtcbiAgICAvLyBObyBzdGFuZGFyZCBNYXJrZG93biBmb3IgdW5kZXJsaW5lIOKAlCB1c2UgSFRNTCBwYXNzdGhyb3VnaFxuICAgIGNvbnN0IGNvbnRlbnQgPSBpbm5lcigpO1xuICAgIHJldHVybiBjb250ZW50ID8gYDx1PiR7Y29udGVudH08L3U+YCA6IFwiXCI7XG4gIH1cblxuICBpZiAodGFnID09PSBcImNvZGVcIikge1xuICAgIC8vIElubGluZSBjb2RlIChub3QgaW5zaWRlIHByZSlcbiAgICBjb25zdCBjb250ZW50ID0gZWwudGV4dENvbnRlbnQgfHwgXCJcIjtcbiAgICByZXR1cm4gY29udGVudCA/IGBcXGAke2NvbnRlbnR9XFxgYCA6IFwiXCI7XG4gIH1cblxuICBpZiAodGFnID09PSBcImFcIikge1xuICAgIGNvbnN0IGhyZWYgPSBlbC5nZXRBdHRyaWJ1dGUoXCJocmVmXCIpIHx8IFwiXCI7XG4gICAgY29uc3QgY29udGVudCA9IGlubmVyKCkudHJpbSgpO1xuICAgIGlmICghY29udGVudCAmJiAhaHJlZikge3JldHVybiBcIlwiO31cbiAgICBpZiAoIWNvbnRlbnQpIHtyZXR1cm4gaHJlZjt9XG4gICAgcmV0dXJuIGBbJHtjb250ZW50fV0oJHtocmVmfSlgO1xuICB9XG5cbiAgaWYgKHRhZyA9PT0gXCJpbWdcIikge1xuICAgIGNvbnN0IHNyYyA9IGVsLmdldEF0dHJpYnV0ZShcInNyY1wiKSB8fCBcIlwiO1xuICAgIGNvbnN0IGFsdCA9IGVsLmdldEF0dHJpYnV0ZShcImFsdFwiKSB8fCBcIlwiO1xuICAgIHJldHVybiBgIVske2FsdH1dKCR7c3JjfSlgO1xuICB9XG5cbiAgLy8g4pSA4pSAIFdyYXBwZXIgLyBVbmtub3duIGVsZW1lbnRzIOKGkiByZWN1cnNlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICByZXR1cm4gaW5uZXIoKTtcbn1cblxuZnVuY3Rpb24gY29udmVydExpc3RJdGVtKFxuICBsaTogSFRNTEVsZW1lbnQsXG4gIGN0eDoge1xuICAgIGxpc3REZXB0aDogbnVtYmVyO1xuICAgIGxpc3RUeXBlOiBcInVsXCIgfCBcIm9sXCI7XG4gICAgb3JkZXJlZEluZGV4OiBudW1iZXI7XG4gICAgaXNUYXNrTGlzdDogYm9vbGVhbjtcbiAgfVxuKTogc3RyaW5nIHtcbiAgY29uc3QgaW5kZW50ID0gXCIgIFwiLnJlcGVhdChjdHgubGlzdERlcHRoIC0gMSk7XG5cbiAgLy8gVGFzayBsaXN0IGl0ZW1cbiAgaWYgKGN0eC5pc1Rhc2tMaXN0KSB7XG4gICAgY29uc3QgY2hlY2tlZCA9IGxpLmdldEF0dHJpYnV0ZShcImRhdGEtY2hlY2tlZFwiKSA9PT0gXCJ0cnVlXCI7XG4gICAgY29uc3QgY2hlY2tNYXJrID0gY2hlY2tlZCA/IFwiW3hdXCIgOiBcIlsgXVwiO1xuICAgIGNvbnN0IGNvbnRlbnQgPSBBcnJheS5mcm9tKGxpLmNoaWxkTm9kZXMpXG4gICAgICAubWFwKGMgPT4gY29udmVydE5vZGUoYywgeyBsaXN0RGVwdGg6IGN0eC5saXN0RGVwdGgsIGxpc3RUeXBlOiBjdHgubGlzdFR5cGUgfSkpXG4gICAgICAuam9pbihcIlwiKVxuICAgICAgLnRyaW0oKTtcbiAgICByZXR1cm4gYCR7aW5kZW50fS0gJHtjaGVja01hcmt9ICR7Y29udGVudH1gO1xuICB9XG5cbiAgLy8gTm9ybWFsIGxpc3QgaXRlbVxuICBjb25zdCBidWxsZXQgPSBjdHgubGlzdFR5cGUgPT09IFwib2xcIiA/IGAke2N0eC5vcmRlcmVkSW5kZXh9LmAgOiBcIi1cIjtcblxuICAvLyBDaGVjayBpZiBsaSBjb250YWlucyBuZXN0ZWQgbGlzdHNcbiAgY29uc3QgbmVzdGVkTGlzdE5vZGVzID0gQXJyYXkuZnJvbShsaS5jaGlsZE5vZGVzKS5maWx0ZXIoXG4gICAgYyA9PiAoYyBhcyBIVE1MRWxlbWVudCkudGFnTmFtZT8udG9Mb3dlckNhc2UoKSA9PT0gXCJ1bFwiIHx8XG4gICAgICAgICAgKGMgYXMgSFRNTEVsZW1lbnQpLnRhZ05hbWU/LnRvTG93ZXJDYXNlKCkgPT09IFwib2xcIlxuICApO1xuICBjb25zdCB0ZXh0Tm9kZXMgPSBBcnJheS5mcm9tKGxpLmNoaWxkTm9kZXMpLmZpbHRlcihcbiAgICBjID0+ICFbXCJ1bFwiLCBcIm9sXCJdLmluY2x1ZGVzKChjIGFzIEhUTUxFbGVtZW50KS50YWdOYW1lPy50b0xvd2VyQ2FzZSgpKVxuICApO1xuXG4gIGNvbnN0IHRleHRDb250ZW50ID0gdGV4dE5vZGVzXG4gICAgLm1hcChjID0+IGNvbnZlcnROb2RlKGMsIHsgbGlzdERlcHRoOiBjdHgubGlzdERlcHRoLCBsaXN0VHlwZTogY3R4Lmxpc3RUeXBlIH0pKVxuICAgIC5qb2luKFwiXCIpXG4gICAgLnRyaW0oKTtcblxuICBjb25zdCBuZXN0ZWRDb250ZW50ID0gbmVzdGVkTGlzdE5vZGVzXG4gICAgLm1hcChjID0+IGNvbnZlcnROb2RlKGMsIHsgbGlzdERlcHRoOiBjdHgubGlzdERlcHRoLCBsaXN0VHlwZTogY3R4Lmxpc3RUeXBlIH0pKVxuICAgIC5qb2luKFwiXCIpXG4gICAgLnRyaW1FbmQoKTtcblxuICByZXR1cm4gYCR7aW5kZW50fSR7YnVsbGV0fSAke3RleHRDb250ZW50fSR7bmVzdGVkQ29udGVudH1gO1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0VGFibGUodGFibGU6IEhUTUxFbGVtZW50KTogc3RyaW5nIHtcbiAgY29uc3Qgcm93cyA9IEFycmF5LmZyb20odGFibGUucXVlcnlTZWxlY3RvckFsbChcInRyXCIpKTtcbiAgaWYgKHJvd3MubGVuZ3RoID09PSAwKSB7cmV0dXJuIFwiXCI7fVxuXG4gIGNvbnN0IHRhYmxlRGF0YTogc3RyaW5nW11bXSA9IHJvd3MubWFwKHJvdyA9PlxuICAgIEFycmF5LmZyb20ocm93LnF1ZXJ5U2VsZWN0b3JBbGwoXCJ0aCwgdGRcIikpLm1hcChcbiAgICAgIGNlbGwgPT4gY2VsbC50ZXh0Q29udGVudD8ucmVwbGFjZSgvXFxuL2csIFwiIFwiKS50cmltKCkgfHwgXCJcIlxuICAgIClcbiAgKTtcblxuICBpZiAodGFibGVEYXRhLmxlbmd0aCA9PT0gMCkge3JldHVybiBcIlwiO31cblxuICBjb25zdCBjb2xDb3VudCA9IE1hdGgubWF4KC4uLnRhYmxlRGF0YS5tYXAociA9PiByLmxlbmd0aCkpO1xuXG4gIC8vIFBhZCByb3dzIHRvIHNhbWUgd2lkdGhcbiAgY29uc3Qgbm9ybWFsaXplZCA9IHRhYmxlRGF0YS5tYXAocm93ID0+IHtcbiAgICB3aGlsZSAocm93Lmxlbmd0aCA8IGNvbENvdW50KSB7cm93LnB1c2goXCJcIik7fVxuICAgIHJldHVybiByb3c7XG4gIH0pO1xuXG4gIC8vIENhbGN1bGF0ZSBjb2x1bW4gd2lkdGhzXG4gIGNvbnN0IGNvbFdpZHRocyA9IEFycmF5LmZyb20oeyBsZW5ndGg6IGNvbENvdW50IH0sIChfLCBpKSA9PlxuICAgIE1hdGgubWF4KC4uLm5vcm1hbGl6ZWQubWFwKHIgPT4gKHJbaV0gfHwgXCJcIikubGVuZ3RoKSwgMylcbiAgKTtcblxuICBjb25zdCBwYWQgPSAoc3RyOiBzdHJpbmcsIGxlbjogbnVtYmVyKSA9PiBzdHIucGFkRW5kKGxlbiwgXCIgXCIpO1xuICBjb25zdCBzZXBhcmF0b3IgPSBjb2xXaWR0aHMubWFwKHcgPT4gXCItXCIucmVwZWF0KHcpKS5qb2luKFwiIHwgXCIpO1xuXG4gIC8vIEJ1aWxkIHJvd3NcbiAgY29uc3QgbGluZXM6IHN0cmluZ1tdID0gW107XG4gIG5vcm1hbGl6ZWQuZm9yRWFjaCgocm93LCByb3dJZHgpID0+IHtcbiAgICBjb25zdCBsaW5lID0gcm93Lm1hcCgoY2VsbCwgaSkgPT4gcGFkKGNlbGwsIGNvbFdpZHRoc1tpXSkpLmpvaW4oXCIgfCBcIik7XG4gICAgbGluZXMucHVzaChgfCAke2xpbmV9IHxgKTtcbiAgICAvLyBBZGQgc2VwYXJhdG9yIGFmdGVyIGhlYWRlciByb3cgKGZpcnN0IHJvdylcbiAgICBpZiAocm93SWR4ID09PSAwKSB7XG4gICAgICBsaW5lcy5wdXNoKGB8ICR7c2VwYXJhdG9yfSB8YCk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gYFxcblxcbiR7bGluZXMuam9pbihcIlxcblwiKX1cXG5cXG5gO1xufVxuIl19
|
package/esm2022/public-api.mjs
CHANGED
|
@@ -13,6 +13,9 @@ export * from "./lib/services/ate-editor-commands.service";
|
|
|
13
13
|
export * from "./lib/services/ate-image.service";
|
|
14
14
|
export * from "./lib/services/ate-color-picker.service";
|
|
15
15
|
export * from "./lib/services/ate-link.service";
|
|
16
|
+
export * from "./lib/services/ate-export.service";
|
|
17
|
+
export * from "./lib/services/ate-editor-registry.service";
|
|
18
|
+
export * from "./lib/models/ate-editor-ref";
|
|
16
19
|
// State & Calculators (Essential for custom plugins)
|
|
17
20
|
export * from "./lib/models/ate-editor-state.model";
|
|
18
21
|
export * from "./lib/extensions/calculators/ate-discovery.calculator";
|
|
@@ -37,4 +40,4 @@ export { AteAngularNodeView } from "./lib/node-view/ate-angular-node-view";
|
|
|
37
40
|
export { AteNodeViewRenderer } from "./lib/node-view/ate-node-view.renderer";
|
|
38
41
|
export { createAngularComponentExtension } from "./lib/node-view/ate-node-view.factory";
|
|
39
42
|
export { registerAngularComponent } from "./lib/node-view/ate-register-angular-component";
|
|
40
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
43
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItdGlwdGFwLWVkaXRvci9zcmMvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILDRCQUE0QjtBQUM1QixjQUFjLHlEQUF5RCxDQUFDO0FBQ3hFLGNBQWMsMkJBQTJCLENBQUM7QUFFMUMsYUFBYTtBQUNiLGNBQWMsb0RBQW9ELENBQUM7QUFDbkUsY0FBYyx3Q0FBd0MsQ0FBQztBQUV2RCxXQUFXO0FBQ1gsY0FBYyxpQ0FBaUMsQ0FBQztBQUNoRCxjQUFjLDRDQUE0QyxDQUFDO0FBQzNELGNBQWMsa0NBQWtDLENBQUM7QUFDakQsY0FBYyx5Q0FBeUMsQ0FBQztBQUN4RCxjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMsbUNBQW1DLENBQUM7QUFDbEQsY0FBYyw0Q0FBNEMsQ0FBQztBQUMzRCxjQUFjLDZCQUE2QixDQUFDO0FBRTVDLHFEQUFxRDtBQUNyRCxjQUFjLHFDQUFxQyxDQUFDO0FBQ3BELGNBQWMsdURBQXVELENBQUM7QUFDdEUsY0FBYyxtREFBbUQsQ0FBQztBQUNsRSxjQUFjLG1EQUFtRCxDQUFDO0FBQ2xFLGNBQWMsdURBQXVELENBQUM7QUFDdEUsY0FBYyx1REFBdUQsQ0FBQztBQUN0RSxjQUFjLG1EQUFtRCxDQUFDO0FBRWxFLHlDQUF5QztBQUN6QyxjQUFjLGdDQUFnQyxDQUFDO0FBQy9DLGNBQWMsOEJBQThCLENBQUM7QUFDN0MsY0FBYyxvQ0FBb0MsQ0FBQztBQUNuRCxjQUFjLHNDQUFzQyxDQUFDO0FBQ3JELGNBQWMsc0NBQXNDLENBQUM7QUFFckQseUJBQXlCO0FBQ3pCLGNBQWMsZ0NBQWdDLENBQUM7QUFDL0MsY0FBYyxzQ0FBc0MsQ0FBQztBQUVyRCx1Q0FBdUM7QUFDdkMsY0FBYyx3Q0FBd0MsQ0FBQztBQUt2RCwrQkFBK0I7QUFDL0IsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDM0UsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDN0UsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDeEYsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sZ0RBQWdELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogUHVibGljIEFQSSBTdXJmYWNlIG9mIHRpcHRhcC1lZGl0b3JcbiAqL1xuXG4vLyBNYWluIGNvbXBvbmVudCAmIFByb3ZpZGVyXG5leHBvcnQgKiBmcm9tIFwiLi9saWIvY29tcG9uZW50cy9lZGl0b3IvYW5ndWxhci10aXB0YXAtZWRpdG9yLmNvbXBvbmVudFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vbGliL2F0ZS1lZGl0b3IucHJvdmlkZXJcIjtcblxuLy8gRGlyZWN0aXZlc1xuZXhwb3J0ICogZnJvbSBcIi4vbGliL2RpcmVjdGl2ZXMvYXRlLW5vb3AtdmFsdWUtYWNjZXNzb3IuZGlyZWN0aXZlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9saWIvZGlyZWN0aXZlcy9hdGUtdG9vbHRpcC5kaXJlY3RpdmVcIjtcblxuLy8gU2VydmljZXNcbmV4cG9ydCAqIGZyb20gXCIuL2xpYi9zZXJ2aWNlcy9hdGUtaTE4bi5zZXJ2aWNlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9saWIvc2VydmljZXMvYXRlLWVkaXRvci1jb21tYW5kcy5zZXJ2aWNlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9saWIvc2VydmljZXMvYXRlLWltYWdlLnNlcnZpY2VcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2xpYi9zZXJ2aWNlcy9hdGUtY29sb3ItcGlja2VyLnNlcnZpY2VcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2xpYi9zZXJ2aWNlcy9hdGUtbGluay5zZXJ2aWNlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9saWIvc2VydmljZXMvYXRlLWV4cG9ydC5zZXJ2aWNlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9saWIvc2VydmljZXMvYXRlLWVkaXRvci1yZWdpc3RyeS5zZXJ2aWNlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9saWIvbW9kZWxzL2F0ZS1lZGl0b3ItcmVmXCI7XG5cbi8vIFN0YXRlICYgQ2FsY3VsYXRvcnMgKEVzc2VudGlhbCBmb3IgY3VzdG9tIHBsdWdpbnMpXG5leHBvcnQgKiBmcm9tIFwiLi9saWIvbW9kZWxzL2F0ZS1lZGl0b3Itc3RhdGUubW9kZWxcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2xpYi9leHRlbnNpb25zL2NhbGN1bGF0b3JzL2F0ZS1kaXNjb3ZlcnkuY2FsY3VsYXRvclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vbGliL2V4dGVuc2lvbnMvY2FsY3VsYXRvcnMvYXRlLWltYWdlLmNhbGN1bGF0b3JcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2xpYi9leHRlbnNpb25zL2NhbGN1bGF0b3JzL2F0ZS1tYXJrcy5jYWxjdWxhdG9yXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9saWIvZXh0ZW5zaW9ucy9jYWxjdWxhdG9ycy9hdGUtc2VsZWN0aW9uLmNhbGN1bGF0b3JcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2xpYi9leHRlbnNpb25zL2NhbGN1bGF0b3JzL2F0ZS1zdHJ1Y3R1cmUuY2FsY3VsYXRvclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vbGliL2V4dGVuc2lvbnMvY2FsY3VsYXRvcnMvYXRlLXRhYmxlLmNhbGN1bGF0b3JcIjtcblxuLy8gVHlwZXMgYW5kIGludGVyZmFjZXMgZm9yIGNvbmZpZ3VyYXRpb25cbmV4cG9ydCAqIGZyb20gXCIuL2xpYi9tb2RlbHMvYXRlLXRvb2xiYXIubW9kZWxcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2xpYi9tb2RlbHMvYXRlLWltYWdlLm1vZGVsXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9saWIvbW9kZWxzL2F0ZS1idWJibGUtbWVudS5tb2RlbFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vbGliL21vZGVscy9hdGUtZWRpdG9yLWNvbmZpZy5tb2RlbFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vbGliL21vZGVscy9hdGUtc2xhc2gtY29tbWFuZC5tb2RlbFwiO1xuXG4vLyBEZWZhdWx0IGNvbmZpZ3VyYXRpb25zXG5leHBvcnQgKiBmcm9tIFwiLi9saWIvY29uZmlnL2F0ZS1lZGl0b3IuY29uZmlnXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9saWIvY29uZmlnL2F0ZS1nbG9iYWwtY29uZmlnLnRva2VuXCI7XG5cbi8vIFV0aWxpdHkgZnVuY3Rpb25zIGZvciBzbGFzaCBjb21tYW5kc1xuZXhwb3J0ICogZnJvbSBcIi4vbGliL2NvbmZpZy9hdGUtc2xhc2gtY29tbWFuZHMuY29uZmlnXCI7XG5cbi8vIFRyYW5zbGF0aW9uc1xuZXhwb3J0IHR5cGUgeyBTdXBwb3J0ZWRMb2NhbGUgfSBmcm9tIFwiLi9saWIvc2VydmljZXMvYXRlLWkxOG4uc2VydmljZVwiO1xuXG4vLyBBbmd1bGFyIE5vZGVWaWV3IEludGVncmF0aW9uXG5leHBvcnQgeyBBdGVBbmd1bGFyTm9kZVZpZXcgfSBmcm9tIFwiLi9saWIvbm9kZS12aWV3L2F0ZS1hbmd1bGFyLW5vZGUtdmlld1wiO1xuZXhwb3J0IHsgQXRlTm9kZVZpZXdSZW5kZXJlciB9IGZyb20gXCIuL2xpYi9ub2RlLXZpZXcvYXRlLW5vZGUtdmlldy5yZW5kZXJlclwiO1xuZXhwb3J0IHsgY3JlYXRlQW5ndWxhckNvbXBvbmVudEV4dGVuc2lvbiB9IGZyb20gXCIuL2xpYi9ub2RlLXZpZXcvYXRlLW5vZGUtdmlldy5mYWN0b3J5XCI7XG5leHBvcnQgeyByZWdpc3RlckFuZ3VsYXJDb21wb25lbnQgfSBmcm9tIFwiLi9saWIvbm9kZS12aWV3L2F0ZS1yZWdpc3Rlci1hbmd1bGFyLWNvbXBvbmVudFwiO1xuXG4vLyBOb2RlIFZpZXcgVHlwZXMgLSBBdGVBbmd1bGFyTm9kZSBpcyB0aGUgcHJpbWFyeSBwdWJsaWMgdHlwZVxuZXhwb3J0IHR5cGUgeyBBdGVBbmd1bGFyTm9kZSB9IGZyb20gXCIuL2xpYi9tb2RlbHMvYXRlLWVkaXRvci1jb25maWcubW9kZWxcIjtcbi8vIEFkdmFuY2VkOiBMb3ctbGV2ZWwgb3B0aW9ucyBmb3IgZnVsbCBjb250cm9sIG92ZXIgbm9kZSByZWdpc3RyYXRpb25cbmV4cG9ydCB0eXBlIHtcbiAgUmVnaXN0ZXJBbmd1bGFyQ29tcG9uZW50T3B0aW9ucyxcbiAgQXRlQ29tcG9uZW50UmVuZGVyT3B0aW9ucyxcbn0gZnJvbSBcIi4vbGliL25vZGUtdmlldy9hdGUtbm9kZS12aWV3Lm1vZGVsc1wiO1xuIl19
|