@libs-ui/components-inputs-quill 0.1.1-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/README.md +3 -0
- package/blots-custom/div.component.d.ts +5 -0
- package/blots-custom/image.component.d.ts +6 -0
- package/blots-custom/mention.component.d.ts +19 -0
- package/esm2022/blots-custom/div.component.mjs +6 -0
- package/esm2022/blots-custom/image.component.mjs +13 -0
- package/esm2022/blots-custom/mention.component.mjs +34 -0
- package/esm2022/indent-attributor/indent-attributor.component.mjs +20 -0
- package/esm2022/index.mjs +4 -0
- package/esm2022/interfaces/quill.interface.mjs +2 -0
- package/esm2022/libs-ui-components-inputs-quill.mjs +5 -0
- package/esm2022/link/link.component.mjs +52 -0
- package/esm2022/quill.component.mjs +878 -0
- package/esm2022/quill2x.component.mjs +150 -0
- package/esm2022/upload-image/upload-image.component.mjs +67 -0
- package/esm2022/utils/quill.define.mjs +429 -0
- package/esm2022/utils/quill2x.define.mjs +210 -0
- package/fesm2022/libs-ui-components-inputs-quill.mjs +1836 -0
- package/fesm2022/libs-ui-components-inputs-quill.mjs.map +1 -0
- package/indent-attributor/indent-attributor.component.d.ts +8 -0
- package/index.d.ts +3 -0
- package/interfaces/quill.interface.d.ts +89 -0
- package/link/link.component.d.ts +27 -0
- package/package.json +47 -0
- package/quill.component.d.ts +157 -0
- package/quill2x.component.d.ts +18 -0
- package/upload-image/upload-image.component.d.ts +15 -0
- package/utils/quill.define.d.ts +25 -0
- package/utils/quill2x.define.d.ts +3 -0
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, input, output, viewChild, DestroyRef, inject } from '@angular/core';
|
|
2
|
+
import { TranslateModule } from '@ngx-translate/core';
|
|
3
|
+
import Quill2x from 'quill2x';
|
|
4
|
+
import { fromEvent } from 'rxjs';
|
|
5
|
+
import { createContextMenuOptionTable, createTableSelector } from './utils/quill2x.define';
|
|
6
|
+
import { UtilsKeyCodeConstant } from '@libs-ui/utils';
|
|
7
|
+
import { get } from '@libs-ui/utils';
|
|
8
|
+
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
9
|
+
import * as i0 from "@angular/core";
|
|
10
|
+
export class LibsUiComponentsInputsQuill2xComponent {
|
|
11
|
+
quill;
|
|
12
|
+
blotsRegister = input();
|
|
13
|
+
outContextMenu = output();
|
|
14
|
+
outFunctionsControl = output();
|
|
15
|
+
htmlContainer = viewChild.required('htmlContainer');
|
|
16
|
+
quillBodyContainer = viewChild.required('snowContainer');
|
|
17
|
+
destroyRef = inject(DestroyRef);
|
|
18
|
+
ngOnInit() {
|
|
19
|
+
this.blotsRegister()?.forEach((item) => {
|
|
20
|
+
Quill2x.register(item.component, true);
|
|
21
|
+
});
|
|
22
|
+
const toolbarOptions = [
|
|
23
|
+
['bold', 'italic', 'underline', 'strike'],
|
|
24
|
+
['blockquote', 'code-block', 'code'],
|
|
25
|
+
['link', 'image', 'video', 'formula'],
|
|
26
|
+
[{ list: 'ordered' }, { list: 'bullet' }, { list: 'check' }],
|
|
27
|
+
[{ script: 'sub' }, { script: 'super' }],
|
|
28
|
+
[{ indent: '-1' }, { indent: '+1' }],
|
|
29
|
+
[{ direction: 'rtl' }],
|
|
30
|
+
[{ size: ['small', false, 'large', 'huge'] }],
|
|
31
|
+
[{ header: [1, 2, 3, 4, 5, 6, false] }],
|
|
32
|
+
[{ color: [] }, { background: [] }],
|
|
33
|
+
[{ font: [] }],
|
|
34
|
+
[{ align: [] }],
|
|
35
|
+
['table'],
|
|
36
|
+
];
|
|
37
|
+
const options = {
|
|
38
|
+
theme: 'snow',
|
|
39
|
+
modules: {
|
|
40
|
+
toolbar: {
|
|
41
|
+
container: toolbarOptions,
|
|
42
|
+
handlers: {
|
|
43
|
+
table: () => {
|
|
44
|
+
const button = this.htmlContainer().nativeElement.querySelector?.('button.ql-table');
|
|
45
|
+
console.log('button', button, this.htmlContainer().nativeElement);
|
|
46
|
+
createTableSelector(this.quill, button);
|
|
47
|
+
},
|
|
48
|
+
},
|
|
49
|
+
},
|
|
50
|
+
table: true,
|
|
51
|
+
keyboard: {
|
|
52
|
+
bindings: {
|
|
53
|
+
backspace: {
|
|
54
|
+
key: UtilsKeyCodeConstant.BACKSPACE,
|
|
55
|
+
handler: (range) => this.noPreventEmbedDeletion(range),
|
|
56
|
+
},
|
|
57
|
+
delete: {
|
|
58
|
+
key: UtilsKeyCodeConstant.DELETE,
|
|
59
|
+
handler: (range) => this.noPreventEmbedDeletion(range),
|
|
60
|
+
},
|
|
61
|
+
},
|
|
62
|
+
},
|
|
63
|
+
},
|
|
64
|
+
};
|
|
65
|
+
this.quill = new Quill2x(this.quillBodyContainer().nativeElement, options);
|
|
66
|
+
fromEvent(this.quillBodyContainer()?.nativeElement, 'contextmenu')
|
|
67
|
+
.pipe(takeUntilDestroyed(this.destroyRef))
|
|
68
|
+
.subscribe((e) => this.outContextMenu.emit(e));
|
|
69
|
+
// Tự động tải nội dung đã lưu (nếu có)
|
|
70
|
+
try {
|
|
71
|
+
const saved = localStorage.getItem('quill2x_saved_html');
|
|
72
|
+
if (saved) {
|
|
73
|
+
this.quill.clipboard.dangerouslyPasteHTML(saved, 'silent');
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
/* no-op: bỏ qua nếu không thể tải từ localStorage */
|
|
78
|
+
}
|
|
79
|
+
// Gán handler lưu/tải/xóa nội dung
|
|
80
|
+
const saveBtn = document.getElementById('save-content');
|
|
81
|
+
saveBtn?.addEventListener('click', () => {
|
|
82
|
+
const html = (this.quill?.root).innerHTML;
|
|
83
|
+
try {
|
|
84
|
+
localStorage.setItem('quill2x_saved_html', html);
|
|
85
|
+
this.setStyleForContent();
|
|
86
|
+
// eslint-disable-next-line no-console
|
|
87
|
+
console.log('Đã lưu nội dung');
|
|
88
|
+
}
|
|
89
|
+
catch {
|
|
90
|
+
/* no-op: bỏ qua nếu lưu thất bại */
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
this.outFunctionsControl.emit(this.FunctionsControl);
|
|
94
|
+
this.setStyleForContent();
|
|
95
|
+
createContextMenuOptionTable(this.quill);
|
|
96
|
+
}
|
|
97
|
+
get FunctionsControl() {
|
|
98
|
+
return {
|
|
99
|
+
quill: () => this.quill,
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
noPreventEmbedDeletion(range) {
|
|
103
|
+
if (!this.quill)
|
|
104
|
+
return false;
|
|
105
|
+
const delta = this.quill?.getContents(range.index, 1);
|
|
106
|
+
if (delta?.ops.some((option) => this.blotsRegister()?.find((item) => get(option.insert, item.component['blotName']) && item.ignoreDelete))) {
|
|
107
|
+
return false; // Ngăn không cho Quill xử lý xóa
|
|
108
|
+
}
|
|
109
|
+
return true;
|
|
110
|
+
}
|
|
111
|
+
setStyleForContent() {
|
|
112
|
+
const styleArray = [
|
|
113
|
+
{ selector: '.ql-font-Arial', style: 'font-family: Arial' },
|
|
114
|
+
{ selector: '.ql-font-sans-serif', style: 'font-family: sans-serif' },
|
|
115
|
+
{ selector: '.ql-font-serif', style: 'font-family: serif' },
|
|
116
|
+
{ selector: '.ql-font-monospace', style: 'font-family: monospace' },
|
|
117
|
+
{ selector: '.ql-font-Helvetica', style: 'font-family: Helvetica' },
|
|
118
|
+
{ selector: '.libs-ui-quill-format-image', style: 'max-width: 100%; height: auto', overrideStyle: true },
|
|
119
|
+
{ selector: '.libs-ui-quill-mention', style: 'font-weight: 600;-moz-osx-font-smoothing: grayscale;-webkit-font-smoothing: antialiased; color: #7239EA', overrideStyle: true },
|
|
120
|
+
{ selector: 'blockquote', style: 'border-left: 4px solid #ccc; margin-bottom: 5px; margin-top: 5px; padding-left: 16px', overrideStyle: true },
|
|
121
|
+
];
|
|
122
|
+
this.blotsRegister()?.forEach((item) => {
|
|
123
|
+
styleArray.push({ selector: `.${item.className}`, style: item.style, overrideStyle: true });
|
|
124
|
+
});
|
|
125
|
+
styleArray.forEach((item) => {
|
|
126
|
+
const elements = this.quill?.root.querySelectorAll(item.selector);
|
|
127
|
+
elements?.forEach((element) => {
|
|
128
|
+
if (item.overrideStyle) {
|
|
129
|
+
element.setAttribute('style', item.style);
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
// Fixbug issue: https://admin-cv.mobio.vn/issues/49092
|
|
133
|
+
let styleExist = element.getAttribute('style');
|
|
134
|
+
if (styleExist) {
|
|
135
|
+
['font-family: Arial', 'font-family: sans-serif', 'font-family: serif', 'font-family: monospace', 'font-family: Helvetica'].forEach((font) => {
|
|
136
|
+
styleExist = (styleExist?.includes(`${font};`) ? styleExist?.replace(`${font};`, '') : styleExist?.replace(font, ''));
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
element.setAttribute('style', styleExist ? `${styleExist}${styleExist[styleExist.length - 1] === ';' ? '' : ';'}${item.style};` : item.style);
|
|
140
|
+
});
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiComponentsInputsQuill2xComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
144
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.2.14", type: LibsUiComponentsInputsQuill2xComponent, isStandalone: true, selector: "libs_ui-components-inputs-quill2x", inputs: { blotsRegister: { classPropertyName: "blotsRegister", publicName: "blotsRegister", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { outContextMenu: "outContextMenu", outFunctionsControl: "outFunctionsControl" }, viewQueries: [{ propertyName: "htmlContainer", first: true, predicate: ["htmlContainer"], descendants: true, isSignal: true }, { propertyName: "quillBodyContainer", first: true, predicate: ["snowContainer"], descendants: true, isSignal: true }], ngImport: i0, template: "<div\n #htmlContainer\n class=\"container\">\n <div class=\"panel\">\n <div #snowContainer></div>\n <div class=\"action-buttons\">\n <button\n id=\"save-content\"\n class=\"action-btn save-btn\">\n \uD83D\uDCBE L\u01B0u n\u1ED9i dung\n </button>\n </div>\n </div>\n</div>\n", styles: ["body{padding:25px}.container{display:flex;flex-direction:column}.action-buttons{display:flex;gap:10px;margin-top:15px;padding:10px;background-color:#f8f9fa;border-radius:4px;border:1px solid #e9ecef}.action-btn{padding:8px 16px;border:none;border-radius:4px;cursor:pointer;font-size:14px;font-weight:500;transition:all .2s ease;display:flex;align-items:center;gap:5px}.action-btn:hover{transform:translateY(-1px);box-shadow:0 2px 4px #0000001a}.action-btn:active{transform:translateY(0)}.action-btn.save-btn{background-color:#28a745;color:#fff}.action-btn.save-btn:hover{background-color:#218838}.action-btn.clear-btn{background-color:#dc3545;color:#fff}.action-btn.clear-btn:hover{background-color:#c82333}.action-btn.load-btn{background-color:#007bff;color:#fff}.action-btn.load-btn:hover{background-color:#0056b3}.panel{margin:10px 0}.ql-container{font-size:14px;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;border:1px solid #ccc;border-radius:4px}.ql-toolbar{border:1px solid #ccc;border-bottom:none;border-radius:4px 4px 0 0;padding:8px;background-color:#f8f9fa}.ql-toolbar .ql-formats{margin-right:15px}.ql-toolbar .ql-formats:last-child{margin-right:0}.ql-toolbar button{border:none;background:none;cursor:pointer;padding:5px;margin:0 1px;border-radius:3px;color:#444}.ql-toolbar button:hover{background-color:#e9ecef;color:#000}.ql-toolbar button.ql-active{background-color:#007bff;color:#fff}.ql-toolbar .ql-picker{color:#444}.ql-toolbar .ql-picker:not(.ql-color-picker):not(.ql-icon-picker).ql-table-up{width:28px}.ql-toolbar .ql-picker:not(.ql-color-picker):not(.ql-icon-picker).ql-table-up .ql-picker-label{padding:2px 4px}.ql-toolbar .ql-picker:not(.ql-color-picker):not(.ql-icon-picker).ql-table-up .ql-picker-label svg{position:static;margin-top:0;width:18px;height:18px}.ql-toolbar .ql-picker:not(.ql-color-picker):not(.ql-icon-picker).ql-table-up .ql-picker-options .ql-picker-item:hover{background-color:#f0f0f0}.ql-toolbar .ql-table-up svg{width:18px;height:18px}.ql-toolbar .custom-table-icon{display:inline-block;width:18px;height:18px;vertical-align:middle;color:currentColor}.ql-editor{border:1px solid #ccc;border-top:none;border-radius:0 0 4px 4px;padding:12px;min-height:300px;line-height:1.42}.ql-editor:focus{outline:none;box-shadow:0 0 0 2px #007bff40}.ql-editor p{margin-bottom:10px}.ql-editor h1,.ql-editor h2,.ql-editor h3,.ql-editor h4,.ql-editor h5,.ql-editor h6{margin-top:10px;margin-bottom:10px;font-weight:700}.ql-editor blockquote{border-left:4px solid #ccc;margin:16px 0;padding-left:16px;color:#666}.ql-editor ul,.ql-editor ol{padding-left:1.5em}.ql-editor .ql-table,.ql-editor table{border-collapse:separate!important;border-spacing:0!important;table-layout:fixed!important;width:100%!important;margin:10px 0!important}.ql-editor .ql-table colgroup col,.ql-editor table colgroup col{border:none!important}.ql-editor .ql-table td,.ql-editor .ql-table th,.ql-editor table td,.ql-editor table th{border:1px solid #ccc!important;padding:8px!important;position:relative!important;vertical-align:top!important;min-width:50px!important;min-height:30px!important;word-wrap:break-word!important;box-sizing:border-box!important}.ql-editor .ql-table td:focus,.ql-editor .ql-table th:focus,.ql-editor table td:focus,.ql-editor table th:focus{outline:2px solid #007bff!important;outline-offset:-2px!important}.ql-editor .ql-table th,.ql-editor table th{background-color:#f5f5f5!important;font-weight:700!important;text-align:center!important}.ql-editor .ql-table tr:hover td,.ql-editor .ql-table tr:hover th,.ql-editor table tr:hover td,.ql-editor table tr:hover th{background-color:#007bff0d!important}.ql-editor .table-up-wrapper{position:relative!important;margin:10px 0!important}.ql-editor .table-up-wrapper .ql-table,.ql-editor .table-up-wrapper table{border-collapse:separate!important;border-spacing:0!important;table-layout:fixed!important;width:100%!important;margin:0!important}.ql-editor .table-up-cell{position:relative!important}.ql-editor .table-up-cell .table-up-cell-inner{min-height:1em!important;outline:none!important;width:100%!important;height:100%!important}.ql-editor .table-up-cell .table-up-cell-inner:focus{outline:none!important}.ql-editor .table-up-selected{background-color:#007bff1a!important}.ql-editor .table-up-selected:after{content:\"\"!important;position:absolute!important;inset:0!important;background-color:#007bff1a!important;pointer-events:none!important}.ql-editor .table-up-resize-line{position:absolute!important;background-color:#007bff!important;z-index:100!important}.ql-editor .table-up-resize-line.table-up-resize-line-row{height:2px!important;cursor:row-resize!important;left:0!important;right:0!important}.ql-editor .table-up-resize-line.table-up-resize-line-col{width:2px!important;cursor:col-resize!important;top:0!important;bottom:0!important}.ql-editor .table-up-resize-scale{position:absolute!important;width:8px!important;height:8px!important;background-color:#007bff!important;border:1px solid #fff!important;z-index:101!important;cursor:nw-resize!important}.ql-editor .table-up-resize-scale.table-up-resize-scale-tr{top:-4px!important;right:-4px!important;cursor:ne-resize!important}.ql-editor .table-up-resize-scale.table-up-resize-scale-br{bottom:-4px!important;right:-4px!important;cursor:se-resize!important}.ql-editor .table-up-resize-scale.table-up-resize-scale-bl{bottom:-4px!important;left:-4px!important;cursor:sw-resize!important}.ql-editor .table-up-resize-scale.table-up-resize-scale-tl{top:-4px!important;left:-4px!important;cursor:nw-resize!important}.ql-editor .ql-editor table td.table-up-cell-selected,.ql-editor .ql-editor table th.table-up-cell-selected,.ql-editor .ql-editor .table-up-cell-selected,.ql-editor table td.table-up-cell-selected,.ql-editor table th.table-up-cell-selected,.ql-editor td.table-up-cell-selected,.ql-editor th.table-up-cell-selected{background-color:#007bff66!important;border:3px solid #007bff!important;box-shadow:0 0 0 1px #007bff99!important;position:relative!important}.ql-editor .table-up-merged-cell{background-color:#007bff0d!important;border:2px solid #007bff!important;position:relative!important}.ql-editor .table-up-merged-cell:after{content:\"\"!important;position:absolute!important;top:2px!important;right:2px!important;width:0!important;height:0!important;border-left:8px solid transparent!important;border-right:8px solid transparent!important;border-top:8px solid #007bff!important}.ql-editor .ql-editor table td,.ql-editor .ql-editor table th{transition:all .2s ease!important}.ql-editor .ql-editor table td:hover,.ql-editor .ql-editor table th:hover{background-color:#007bff1a!important;cursor:pointer!important}.ql-editor .table-selection-guide{position:fixed!important;top:10px!important;right:10px!important;background:#007bffe6!important;color:#fff!important;padding:8px 12px!important;border-radius:4px!important;font-size:12px!important;font-weight:700!important;z-index:1000!important;pointer-events:none!important}.ql-editor .table-selection-guide.hidden{display:none!important}.ql-editor .table-up-resize-indicator{position:absolute!important;background-color:#007bff4d!important;pointer-events:none!important;z-index:99!important}.ql-editor .table-up-resize-indicator.table-up-resize-indicator-col{width:2px!important;top:0!important;bottom:0!important}.ql-editor .table-up-resize-indicator.table-up-resize-indicator-row{height:2px!important;left:0!important;right:0!important}.ql-editor .table-up-cell:after{content:\"\"!important;position:absolute!important;right:-1px!important;top:0!important;bottom:0!important;width:4px!important;cursor:col-resize!important;background:transparent!important;z-index:10!important}.ql-editor .table-up-cell:hover:after{background:#007bff4d!important}.ql-editor .manual-resize-handle{position:absolute!important;right:-2px!important;top:0!important;bottom:0!important;width:4px!important;cursor:col-resize!important;background:transparent!important;z-index:15!important;transition:background-color .2s ease!important}.ql-editor .manual-resize-handle:hover{background:#007bff4d!important}.ql-editor .manual-resize-handle:active{background:#007bff80!important}.ql-editor .ql-editor .ql-table td,.ql-editor .ql-editor .ql-table th,.ql-editor .ql-editor table td,.ql-editor .ql-editor table th{position:relative!important}.ql-editor .table-up-menu{position:absolute!important;background:#fff!important;border:1px solid #ccc!important;border-radius:4px!important;box-shadow:0 2px 8px #00000026!important;z-index:1000!important;padding:4px!important}.ql-editor .table-up-menu .table-up-menu-item{padding:8px 12px!important;cursor:pointer!important;border-radius:3px!important;font-size:13px!important}.ql-editor .table-up-menu .table-up-menu-item:hover{background-color:#f5f5f5!important}.ql-editor .table-up-menu .table-up-menu-item.table-up-menu-item-break{height:1px!important;background-color:#e9ecef!important;margin:4px 0!important;padding:0!important}button{background-color:#007bff;color:#fff;border:none;padding:8px 12px;margin:4px;border-radius:4px;cursor:pointer;font-size:14px}button:hover{background-color:#0056b3}button:active{background-color:#004085}button:disabled{background-color:#6c757d;cursor:not-allowed}.table-up-creator,.ql-table-up-creator,[class*=table-creator],[class*=creator]{position:absolute!important;background:#fff!important;border:1px solid #ccc!important;border-radius:4px!important;box-shadow:0 2px 8px #00000026!important;z-index:9999!important;padding:12px!important;display:block!important;visibility:visible!important;opacity:1!important}.table-up-creator .table-up-creator-grid,.ql-table-up-creator .table-up-creator-grid,[class*=table-creator] .table-up-creator-grid,[class*=creator] .table-up-creator-grid{display:grid!important;gap:2px!important;margin-bottom:10px!important}.table-up-creator .table-up-creator-grid .table-up-creator-cell,.ql-table-up-creator .table-up-creator-grid .table-up-creator-cell,[class*=table-creator] .table-up-creator-grid .table-up-creator-cell,[class*=creator] .table-up-creator-grid .table-up-creator-cell{width:16px!important;height:16px!important;border:1px solid #ddd!important;cursor:pointer!important}.table-up-creator .table-up-creator-grid .table-up-creator-cell:hover,.table-up-creator .table-up-creator-grid .table-up-creator-cell.active,.ql-table-up-creator .table-up-creator-grid .table-up-creator-cell:hover,.ql-table-up-creator .table-up-creator-grid .table-up-creator-cell.active,[class*=table-creator] .table-up-creator-grid .table-up-creator-cell:hover,[class*=table-creator] .table-up-creator-grid .table-up-creator-cell.active,[class*=creator] .table-up-creator-grid .table-up-creator-cell:hover,[class*=creator] .table-up-creator-grid .table-up-creator-cell.active{background-color:#007bff!important;border-color:#007bff!important}.table-up-creator .table-up-creator-info,.ql-table-up-creator .table-up-creator-info,[class*=table-creator] .table-up-creator-info,[class*=creator] .table-up-creator-info{text-align:center!important;font-size:12px!important;color:#666!important;margin-bottom:10px!important}.table-up-creator .table-up-creator-buttons,.ql-table-up-creator .table-up-creator-buttons,[class*=table-creator] .table-up-creator-buttons,[class*=creator] .table-up-creator-buttons{display:flex!important;gap:8px!important}.table-up-creator .table-up-creator-buttons button,.ql-table-up-creator .table-up-creator-buttons button,[class*=table-creator] .table-up-creator-buttons button,[class*=creator] .table-up-creator-buttons button{flex:1!important;padding:6px 12px!important;font-size:12px!important}[class*=creator]{position:absolute!important;background:#fff!important;border:1px solid #ccc!important;z-index:9999!important;padding:10px!important;min-width:200px!important;min-height:100px!important}.ql-picker-options{z-index:9999!important}[class*=creator],[class*=table-creator]{outline:2px solid red!important;background:#ff0!important}.manual-table-creator{position:absolute!important;background:#fff!important;border:1px solid #ccc!important;border-radius:4px!important;box-shadow:0 2px 8px #00000026!important;z-index:10000!important;padding:12px!important;display:block!important;visibility:visible!important;opacity:1!important;min-width:200px!important}.manual-table-creator div:first-child{text-align:center!important;font-size:12px!important;color:#333!important;margin-bottom:10px!important;font-weight:700!important;background:#f8f9fa!important;padding:4px 8px!important;border-radius:3px!important}.manual-table-creator div:last-child{display:grid!important;grid-template-columns:repeat(8,20px)!important;gap:2px!important;-webkit-user-select:none!important;user-select:none!important}.manual-table-creator div:last-child div{width:18px!important;height:18px!important;border:1px solid #ddd!important;cursor:pointer!important;background:#fff!important;transition:all .1s ease!important}.manual-table-creator div:last-child div:hover{background-color:#007bff!important;border-color:#0056b3!important;transform:scale(1.05)!important}.manual-table-menu{position:absolute!important;background:#fff!important;border:1px solid #ccc!important;border-radius:4px!important;box-shadow:0 4px 12px #0003!important;z-index:10001!important;padding:4px!important;min-width:150px!important;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif!important}.manual-table-menu div{padding:6px 12px!important;cursor:pointer!important;border-radius:3px!important;font-size:13px!important;color:#333!important;transition:background-color .1s ease!important}.manual-table-menu div:hover{background-color:#f5f5f5!important}.manual-table-menu div:active{background-color:#e9ecef!important}.manual-table-menu div[style*=\"height: 1px\"]{height:1px!important;background:#eee!important;margin:4px 0!important;padding:0!important;cursor:default!important}.manual-table-menu div[style*=\"height: 1px\"]:hover{background:#eee!important}.manual-table-creator *,.manual-table-menu *{pointer-events:auto!important;-webkit-user-select:none!important;user-select:none!important}.status-message{position:fixed!important;top:20px!important;right:20px!important;padding:12px 20px!important;border-radius:4px!important;box-shadow:0 2px 8px #0003!important;z-index:10001!important;font-size:14px!important;font-weight:500!important;color:#fff!important}@keyframes slideIn{0%{transform:translate(100%);opacity:0}to{transform:translate(0);opacity:1}}@keyframes slideOut{0%{transform:translate(0);opacity:1}to{transform:translate(100%);opacity:0}}.table-up-color-picker .table-up-color-grid{display:grid;grid-template-columns:repeat(10,1fr);gap:2px;margin:8px 0}.table-up-color-picker .table-up-color-grid .table-up-color-item{width:20px;height:20px;cursor:pointer;border:1px solid #ddd;border-radius:2px}.table-up-color-picker .table-up-color-grid .table-up-color-item:hover{transform:scale(1.1);border-color:#007bff}@keyframes selection-glow{0%{opacity:.3}to{opacity:.7}}.ql-editor table td,.ql-editor table th{transition:all .2s ease!important;cursor:pointer!important}.ql-editor table td:hover,.ql-editor table th:hover{background-color:#007bff1a!important;transform:scale(1.02)!important;box-shadow:0 2px 4px #007bff33!important}.selection-area-indicator{position:absolute!important;border:2px dashed #007bff!important;background-color:#007bff1a!important;pointer-events:none!important;z-index:1000!important;border-radius:4px!important}.manual-table-creator{position:absolute;top:0;left:0;background:#fff;border:1px solid #ddd;border-radius:6px;box-shadow:0 6px 16px #0000001f;padding:12px;z-index:10000;min-width:200px}.manual-table-creator>div:first-child{font-size:12px;color:#333;margin-bottom:10px;text-align:center;font-weight:600}.manual-table-creator>div:last-child{display:grid;grid-template-columns:repeat(8,18px);gap:4px}.manual-table-creator>div:last-child>div{width:18px;height:18px;border:1px solid #e5e7eb;background:#fff;cursor:pointer;transition:background-color .12s ease}.manual-table-creator>div:last-child>div:hover{background-color:#dbeafe;border-color:#93c5fd}\n"], dependencies: [{ kind: "ngmodule", type: TranslateModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
145
|
+
}
|
|
146
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiComponentsInputsQuill2xComponent, decorators: [{
|
|
147
|
+
type: Component,
|
|
148
|
+
args: [{ selector: 'libs_ui-components-inputs-quill2x', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [TranslateModule], template: "<div\n #htmlContainer\n class=\"container\">\n <div class=\"panel\">\n <div #snowContainer></div>\n <div class=\"action-buttons\">\n <button\n id=\"save-content\"\n class=\"action-btn save-btn\">\n \uD83D\uDCBE L\u01B0u n\u1ED9i dung\n </button>\n </div>\n </div>\n</div>\n", styles: ["body{padding:25px}.container{display:flex;flex-direction:column}.action-buttons{display:flex;gap:10px;margin-top:15px;padding:10px;background-color:#f8f9fa;border-radius:4px;border:1px solid #e9ecef}.action-btn{padding:8px 16px;border:none;border-radius:4px;cursor:pointer;font-size:14px;font-weight:500;transition:all .2s ease;display:flex;align-items:center;gap:5px}.action-btn:hover{transform:translateY(-1px);box-shadow:0 2px 4px #0000001a}.action-btn:active{transform:translateY(0)}.action-btn.save-btn{background-color:#28a745;color:#fff}.action-btn.save-btn:hover{background-color:#218838}.action-btn.clear-btn{background-color:#dc3545;color:#fff}.action-btn.clear-btn:hover{background-color:#c82333}.action-btn.load-btn{background-color:#007bff;color:#fff}.action-btn.load-btn:hover{background-color:#0056b3}.panel{margin:10px 0}.ql-container{font-size:14px;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;border:1px solid #ccc;border-radius:4px}.ql-toolbar{border:1px solid #ccc;border-bottom:none;border-radius:4px 4px 0 0;padding:8px;background-color:#f8f9fa}.ql-toolbar .ql-formats{margin-right:15px}.ql-toolbar .ql-formats:last-child{margin-right:0}.ql-toolbar button{border:none;background:none;cursor:pointer;padding:5px;margin:0 1px;border-radius:3px;color:#444}.ql-toolbar button:hover{background-color:#e9ecef;color:#000}.ql-toolbar button.ql-active{background-color:#007bff;color:#fff}.ql-toolbar .ql-picker{color:#444}.ql-toolbar .ql-picker:not(.ql-color-picker):not(.ql-icon-picker).ql-table-up{width:28px}.ql-toolbar .ql-picker:not(.ql-color-picker):not(.ql-icon-picker).ql-table-up .ql-picker-label{padding:2px 4px}.ql-toolbar .ql-picker:not(.ql-color-picker):not(.ql-icon-picker).ql-table-up .ql-picker-label svg{position:static;margin-top:0;width:18px;height:18px}.ql-toolbar .ql-picker:not(.ql-color-picker):not(.ql-icon-picker).ql-table-up .ql-picker-options .ql-picker-item:hover{background-color:#f0f0f0}.ql-toolbar .ql-table-up svg{width:18px;height:18px}.ql-toolbar .custom-table-icon{display:inline-block;width:18px;height:18px;vertical-align:middle;color:currentColor}.ql-editor{border:1px solid #ccc;border-top:none;border-radius:0 0 4px 4px;padding:12px;min-height:300px;line-height:1.42}.ql-editor:focus{outline:none;box-shadow:0 0 0 2px #007bff40}.ql-editor p{margin-bottom:10px}.ql-editor h1,.ql-editor h2,.ql-editor h3,.ql-editor h4,.ql-editor h5,.ql-editor h6{margin-top:10px;margin-bottom:10px;font-weight:700}.ql-editor blockquote{border-left:4px solid #ccc;margin:16px 0;padding-left:16px;color:#666}.ql-editor ul,.ql-editor ol{padding-left:1.5em}.ql-editor .ql-table,.ql-editor table{border-collapse:separate!important;border-spacing:0!important;table-layout:fixed!important;width:100%!important;margin:10px 0!important}.ql-editor .ql-table colgroup col,.ql-editor table colgroup col{border:none!important}.ql-editor .ql-table td,.ql-editor .ql-table th,.ql-editor table td,.ql-editor table th{border:1px solid #ccc!important;padding:8px!important;position:relative!important;vertical-align:top!important;min-width:50px!important;min-height:30px!important;word-wrap:break-word!important;box-sizing:border-box!important}.ql-editor .ql-table td:focus,.ql-editor .ql-table th:focus,.ql-editor table td:focus,.ql-editor table th:focus{outline:2px solid #007bff!important;outline-offset:-2px!important}.ql-editor .ql-table th,.ql-editor table th{background-color:#f5f5f5!important;font-weight:700!important;text-align:center!important}.ql-editor .ql-table tr:hover td,.ql-editor .ql-table tr:hover th,.ql-editor table tr:hover td,.ql-editor table tr:hover th{background-color:#007bff0d!important}.ql-editor .table-up-wrapper{position:relative!important;margin:10px 0!important}.ql-editor .table-up-wrapper .ql-table,.ql-editor .table-up-wrapper table{border-collapse:separate!important;border-spacing:0!important;table-layout:fixed!important;width:100%!important;margin:0!important}.ql-editor .table-up-cell{position:relative!important}.ql-editor .table-up-cell .table-up-cell-inner{min-height:1em!important;outline:none!important;width:100%!important;height:100%!important}.ql-editor .table-up-cell .table-up-cell-inner:focus{outline:none!important}.ql-editor .table-up-selected{background-color:#007bff1a!important}.ql-editor .table-up-selected:after{content:\"\"!important;position:absolute!important;inset:0!important;background-color:#007bff1a!important;pointer-events:none!important}.ql-editor .table-up-resize-line{position:absolute!important;background-color:#007bff!important;z-index:100!important}.ql-editor .table-up-resize-line.table-up-resize-line-row{height:2px!important;cursor:row-resize!important;left:0!important;right:0!important}.ql-editor .table-up-resize-line.table-up-resize-line-col{width:2px!important;cursor:col-resize!important;top:0!important;bottom:0!important}.ql-editor .table-up-resize-scale{position:absolute!important;width:8px!important;height:8px!important;background-color:#007bff!important;border:1px solid #fff!important;z-index:101!important;cursor:nw-resize!important}.ql-editor .table-up-resize-scale.table-up-resize-scale-tr{top:-4px!important;right:-4px!important;cursor:ne-resize!important}.ql-editor .table-up-resize-scale.table-up-resize-scale-br{bottom:-4px!important;right:-4px!important;cursor:se-resize!important}.ql-editor .table-up-resize-scale.table-up-resize-scale-bl{bottom:-4px!important;left:-4px!important;cursor:sw-resize!important}.ql-editor .table-up-resize-scale.table-up-resize-scale-tl{top:-4px!important;left:-4px!important;cursor:nw-resize!important}.ql-editor .ql-editor table td.table-up-cell-selected,.ql-editor .ql-editor table th.table-up-cell-selected,.ql-editor .ql-editor .table-up-cell-selected,.ql-editor table td.table-up-cell-selected,.ql-editor table th.table-up-cell-selected,.ql-editor td.table-up-cell-selected,.ql-editor th.table-up-cell-selected{background-color:#007bff66!important;border:3px solid #007bff!important;box-shadow:0 0 0 1px #007bff99!important;position:relative!important}.ql-editor .table-up-merged-cell{background-color:#007bff0d!important;border:2px solid #007bff!important;position:relative!important}.ql-editor .table-up-merged-cell:after{content:\"\"!important;position:absolute!important;top:2px!important;right:2px!important;width:0!important;height:0!important;border-left:8px solid transparent!important;border-right:8px solid transparent!important;border-top:8px solid #007bff!important}.ql-editor .ql-editor table td,.ql-editor .ql-editor table th{transition:all .2s ease!important}.ql-editor .ql-editor table td:hover,.ql-editor .ql-editor table th:hover{background-color:#007bff1a!important;cursor:pointer!important}.ql-editor .table-selection-guide{position:fixed!important;top:10px!important;right:10px!important;background:#007bffe6!important;color:#fff!important;padding:8px 12px!important;border-radius:4px!important;font-size:12px!important;font-weight:700!important;z-index:1000!important;pointer-events:none!important}.ql-editor .table-selection-guide.hidden{display:none!important}.ql-editor .table-up-resize-indicator{position:absolute!important;background-color:#007bff4d!important;pointer-events:none!important;z-index:99!important}.ql-editor .table-up-resize-indicator.table-up-resize-indicator-col{width:2px!important;top:0!important;bottom:0!important}.ql-editor .table-up-resize-indicator.table-up-resize-indicator-row{height:2px!important;left:0!important;right:0!important}.ql-editor .table-up-cell:after{content:\"\"!important;position:absolute!important;right:-1px!important;top:0!important;bottom:0!important;width:4px!important;cursor:col-resize!important;background:transparent!important;z-index:10!important}.ql-editor .table-up-cell:hover:after{background:#007bff4d!important}.ql-editor .manual-resize-handle{position:absolute!important;right:-2px!important;top:0!important;bottom:0!important;width:4px!important;cursor:col-resize!important;background:transparent!important;z-index:15!important;transition:background-color .2s ease!important}.ql-editor .manual-resize-handle:hover{background:#007bff4d!important}.ql-editor .manual-resize-handle:active{background:#007bff80!important}.ql-editor .ql-editor .ql-table td,.ql-editor .ql-editor .ql-table th,.ql-editor .ql-editor table td,.ql-editor .ql-editor table th{position:relative!important}.ql-editor .table-up-menu{position:absolute!important;background:#fff!important;border:1px solid #ccc!important;border-radius:4px!important;box-shadow:0 2px 8px #00000026!important;z-index:1000!important;padding:4px!important}.ql-editor .table-up-menu .table-up-menu-item{padding:8px 12px!important;cursor:pointer!important;border-radius:3px!important;font-size:13px!important}.ql-editor .table-up-menu .table-up-menu-item:hover{background-color:#f5f5f5!important}.ql-editor .table-up-menu .table-up-menu-item.table-up-menu-item-break{height:1px!important;background-color:#e9ecef!important;margin:4px 0!important;padding:0!important}button{background-color:#007bff;color:#fff;border:none;padding:8px 12px;margin:4px;border-radius:4px;cursor:pointer;font-size:14px}button:hover{background-color:#0056b3}button:active{background-color:#004085}button:disabled{background-color:#6c757d;cursor:not-allowed}.table-up-creator,.ql-table-up-creator,[class*=table-creator],[class*=creator]{position:absolute!important;background:#fff!important;border:1px solid #ccc!important;border-radius:4px!important;box-shadow:0 2px 8px #00000026!important;z-index:9999!important;padding:12px!important;display:block!important;visibility:visible!important;opacity:1!important}.table-up-creator .table-up-creator-grid,.ql-table-up-creator .table-up-creator-grid,[class*=table-creator] .table-up-creator-grid,[class*=creator] .table-up-creator-grid{display:grid!important;gap:2px!important;margin-bottom:10px!important}.table-up-creator .table-up-creator-grid .table-up-creator-cell,.ql-table-up-creator .table-up-creator-grid .table-up-creator-cell,[class*=table-creator] .table-up-creator-grid .table-up-creator-cell,[class*=creator] .table-up-creator-grid .table-up-creator-cell{width:16px!important;height:16px!important;border:1px solid #ddd!important;cursor:pointer!important}.table-up-creator .table-up-creator-grid .table-up-creator-cell:hover,.table-up-creator .table-up-creator-grid .table-up-creator-cell.active,.ql-table-up-creator .table-up-creator-grid .table-up-creator-cell:hover,.ql-table-up-creator .table-up-creator-grid .table-up-creator-cell.active,[class*=table-creator] .table-up-creator-grid .table-up-creator-cell:hover,[class*=table-creator] .table-up-creator-grid .table-up-creator-cell.active,[class*=creator] .table-up-creator-grid .table-up-creator-cell:hover,[class*=creator] .table-up-creator-grid .table-up-creator-cell.active{background-color:#007bff!important;border-color:#007bff!important}.table-up-creator .table-up-creator-info,.ql-table-up-creator .table-up-creator-info,[class*=table-creator] .table-up-creator-info,[class*=creator] .table-up-creator-info{text-align:center!important;font-size:12px!important;color:#666!important;margin-bottom:10px!important}.table-up-creator .table-up-creator-buttons,.ql-table-up-creator .table-up-creator-buttons,[class*=table-creator] .table-up-creator-buttons,[class*=creator] .table-up-creator-buttons{display:flex!important;gap:8px!important}.table-up-creator .table-up-creator-buttons button,.ql-table-up-creator .table-up-creator-buttons button,[class*=table-creator] .table-up-creator-buttons button,[class*=creator] .table-up-creator-buttons button{flex:1!important;padding:6px 12px!important;font-size:12px!important}[class*=creator]{position:absolute!important;background:#fff!important;border:1px solid #ccc!important;z-index:9999!important;padding:10px!important;min-width:200px!important;min-height:100px!important}.ql-picker-options{z-index:9999!important}[class*=creator],[class*=table-creator]{outline:2px solid red!important;background:#ff0!important}.manual-table-creator{position:absolute!important;background:#fff!important;border:1px solid #ccc!important;border-radius:4px!important;box-shadow:0 2px 8px #00000026!important;z-index:10000!important;padding:12px!important;display:block!important;visibility:visible!important;opacity:1!important;min-width:200px!important}.manual-table-creator div:first-child{text-align:center!important;font-size:12px!important;color:#333!important;margin-bottom:10px!important;font-weight:700!important;background:#f8f9fa!important;padding:4px 8px!important;border-radius:3px!important}.manual-table-creator div:last-child{display:grid!important;grid-template-columns:repeat(8,20px)!important;gap:2px!important;-webkit-user-select:none!important;user-select:none!important}.manual-table-creator div:last-child div{width:18px!important;height:18px!important;border:1px solid #ddd!important;cursor:pointer!important;background:#fff!important;transition:all .1s ease!important}.manual-table-creator div:last-child div:hover{background-color:#007bff!important;border-color:#0056b3!important;transform:scale(1.05)!important}.manual-table-menu{position:absolute!important;background:#fff!important;border:1px solid #ccc!important;border-radius:4px!important;box-shadow:0 4px 12px #0003!important;z-index:10001!important;padding:4px!important;min-width:150px!important;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif!important}.manual-table-menu div{padding:6px 12px!important;cursor:pointer!important;border-radius:3px!important;font-size:13px!important;color:#333!important;transition:background-color .1s ease!important}.manual-table-menu div:hover{background-color:#f5f5f5!important}.manual-table-menu div:active{background-color:#e9ecef!important}.manual-table-menu div[style*=\"height: 1px\"]{height:1px!important;background:#eee!important;margin:4px 0!important;padding:0!important;cursor:default!important}.manual-table-menu div[style*=\"height: 1px\"]:hover{background:#eee!important}.manual-table-creator *,.manual-table-menu *{pointer-events:auto!important;-webkit-user-select:none!important;user-select:none!important}.status-message{position:fixed!important;top:20px!important;right:20px!important;padding:12px 20px!important;border-radius:4px!important;box-shadow:0 2px 8px #0003!important;z-index:10001!important;font-size:14px!important;font-weight:500!important;color:#fff!important}@keyframes slideIn{0%{transform:translate(100%);opacity:0}to{transform:translate(0);opacity:1}}@keyframes slideOut{0%{transform:translate(0);opacity:1}to{transform:translate(100%);opacity:0}}.table-up-color-picker .table-up-color-grid{display:grid;grid-template-columns:repeat(10,1fr);gap:2px;margin:8px 0}.table-up-color-picker .table-up-color-grid .table-up-color-item{width:20px;height:20px;cursor:pointer;border:1px solid #ddd;border-radius:2px}.table-up-color-picker .table-up-color-grid .table-up-color-item:hover{transform:scale(1.1);border-color:#007bff}@keyframes selection-glow{0%{opacity:.3}to{opacity:.7}}.ql-editor table td,.ql-editor table th{transition:all .2s ease!important;cursor:pointer!important}.ql-editor table td:hover,.ql-editor table th:hover{background-color:#007bff1a!important;transform:scale(1.02)!important;box-shadow:0 2px 4px #007bff33!important}.selection-area-indicator{position:absolute!important;border:2px dashed #007bff!important;background-color:#007bff1a!important;pointer-events:none!important;z-index:1000!important;border-radius:4px!important}.manual-table-creator{position:absolute;top:0;left:0;background:#fff;border:1px solid #ddd;border-radius:6px;box-shadow:0 6px 16px #0000001f;padding:12px;z-index:10000;min-width:200px}.manual-table-creator>div:first-child{font-size:12px;color:#333;margin-bottom:10px;text-align:center;font-weight:600}.manual-table-creator>div:last-child{display:grid;grid-template-columns:repeat(8,18px);gap:4px}.manual-table-creator>div:last-child>div{width:18px;height:18px;border:1px solid #e5e7eb;background:#fff;cursor:pointer;transition:background-color .12s ease}.manual-table-creator>div:last-child>div:hover{background-color:#dbeafe;border-color:#93c5fd}\n"] }]
|
|
149
|
+
}] });
|
|
150
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVpbGwyeC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvaW5wdXRzL3F1aWxsL3NyYy9xdWlsbDJ4LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy9pbnB1dHMvcXVpbGwvc3JjL3F1aWxsMnguY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBYyxLQUFLLEVBQVUsTUFBTSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JJLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLE9BQWtCLE1BQU0sU0FBUyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDakMsT0FBTyxFQUFFLDRCQUE0QixFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFM0YsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEQsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDOztBQVdoRSxNQUFNLE9BQU8sc0NBQXNDO0lBQ3pDLEtBQUssQ0FBVztJQUVmLGFBQWEsR0FBRyxLQUFLLEVBQTZCLENBQUM7SUFFbkQsY0FBYyxHQUFHLE1BQU0sRUFBYyxDQUFDO0lBQ3RDLG1CQUFtQixHQUFHLE1BQU0sRUFBOEIsQ0FBQztJQUVuRCxhQUFhLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBNkIsZUFBZSxDQUFDLENBQUM7SUFDaEYsa0JBQWtCLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBNkIsZUFBZSxDQUFDLENBQUM7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VSxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQy9DLElBQUksVUFBVSxFQUFFLENBQUM7b0JBQ2YsQ0FBQyxvQkFBb0IsRUFBRSx5QkFBeUIsRUFBRSxvQkFBb0IsRUFBRSx3QkFBd0IsRUFBRSx3QkFBd0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO3dCQUMzSSxVQUFVLEdBQUcsQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxHQUFHLElBQUksR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBVyxDQUFDO29CQUNsSSxDQUFDLENBQUMsQ0FBQztnQkFDTCxDQUFDO2dCQUNELE9BQU8sQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxVQUFVLEdBQUcsVUFBVSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNoSixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzt3R0FsSlUsc0NBQXNDOzRGQUF0QyxzQ0FBc0MsMGtCQ25CbkQsK1RBY0Esa3hmREdZLGVBQWU7OzRGQUVkLHNDQUFzQztrQkFUbEQsU0FBUzsrQkFFRSxtQ0FBbUMsY0FDakMsSUFBSSxtQkFDQyx1QkFBdUIsQ0FBQyxNQUFNLFdBR3RDLENBQUMsZUFBZSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgRWxlbWVudFJlZiwgaW5wdXQsIE9uSW5pdCwgb3V0cHV0LCB2aWV3Q2hpbGQsIERlc3Ryb3lSZWYsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgUXVpbGwyeCwgeyBSYW5nZSB9IGZyb20gJ3F1aWxsMngnO1xuaW1wb3J0IHsgZnJvbUV2ZW50IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjcmVhdGVDb250ZXh0TWVudU9wdGlvblRhYmxlLCBjcmVhdGVUYWJsZVNlbGVjdG9yIH0gZnJvbSAnLi91dGlscy9xdWlsbDJ4LmRlZmluZSc7XG5pbXBvcnQgeyBJUXVpbGxCbG90UmVnaXN0ZXIsIElRdWlsbEZ1bmN0aW9uQ29udHJvbEV2ZW50IH0gZnJvbSAnLi9pbnRlcmZhY2VzL3F1aWxsLmludGVyZmFjZSc7XG5pbXBvcnQgeyBVdGlsc0tleUNvZGVDb25zdGFudCB9IGZyb20gJ0BsaWJzLXVpL3V0aWxzJztcbmltcG9ydCB7IGdldCB9IGZyb20gJ0BsaWJzLXVpL3V0aWxzJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcblxuQENvbXBvbmVudCh7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnbGlic191aS1jb21wb25lbnRzLWlucHV0cy1xdWlsbDJ4JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHRlbXBsYXRlVXJsOiAnLi9xdWlsbDJ4LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL3F1aWxsMnguY29tcG9uZW50LnNjc3MnLFxuICBpbXBvcnRzOiBbVHJhbnNsYXRlTW9kdWxlXSxcbn0pXG5leHBvcnQgY2xhc3MgTGlic1VpQ29tcG9uZW50c0lucHV0c1F1aWxsMnhDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBwcml2YXRlIHF1aWxsPzogUXVpbGwyeDtcblxuICByZWFkb25seSBibG90c1JlZ2lzdGVyID0gaW5wdXQ8QXJyYXk8SVF1aWxsQmxvdFJlZ2lzdGVyPj4oKTtcblxuICByZWFkb25seSBvdXRDb250ZXh0TWVudSA9IG91dHB1dDxNb3VzZUV2ZW50PigpO1xuICByZWFkb25seSBvdXRGdW5jdGlvbnNDb250cm9sID0gb3V0cHV0PElRdWlsbEZ1bmN0aW9uQ29udHJvbEV2ZW50PigpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgaHRtbENvbnRhaW5lciA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50Pj4oJ2h0bWxDb250YWluZXInKTtcbiAgcHJpdmF0ZSByZWFkb25seSBxdWlsbEJvZHlDb250YWluZXIgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD4+KCdzbm93Q29udGFpbmVyJyk7XG5cbiAgcHJpdmF0ZSBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmJsb3RzUmVnaXN0ZXIoKT8uZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgUXVpbGwyeC5yZWdpc3RlcihpdGVtLmNvbXBvbmVudCwgdHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBjb25zdCB0b29sYmFyT3B0aW9ucyA9IFtcbiAgICAgIFsnYm9sZCcsICdpdGFsaWMnLCAndW5kZXJsaW5lJywgJ3N0cmlrZSddLFxuICAgICAgWydibG9ja3F1b3RlJywgJ2NvZGUtYmxvY2snLCAnY29kZSddLFxuICAgICAgWydsaW5rJywgJ2ltYWdlJywgJ3ZpZGVvJywgJ2Zvcm11bGEnXSxcbiAgICAgIFt7IGxpc3Q6ICdvcmRlcmVkJyB9LCB7IGxpc3Q6ICdidWxsZXQnIH0sIHsgbGlzdDogJ2NoZWNrJyB9XSxcbiAgICAgIFt7IHNjcmlwdDogJ3N1YicgfSwgeyBzY3JpcHQ6ICdzdXBlcicgfV0sXG4gICAgICBbeyBpbmRlbnQ6ICctMScgfSwgeyBpbmRlbnQ6ICcrMScgfV0sXG4gICAgICBbeyBkaXJlY3Rpb246ICdydGwnIH1dLFxuICAgICAgW3sgc2l6ZTogWydzbWFsbCcsIGZhbHNlLCAnbGFyZ2UnLCAnaHVnZSddIH1dLFxuICAgICAgW3sgaGVhZGVyOiBbMSwgMiwgMywgNCwgNSwgNiwgZmFsc2VdIH1dLFxuICAgICAgW3sgY29sb3I6IFtdIH0sIHsgYmFja2dyb3VuZDogW10gfV0sXG4gICAgICBbeyBmb250OiBbXSB9XSxcbiAgICAgIFt7IGFsaWduOiBbXSB9XSxcbiAgICAgIFsndGFibGUnXSxcbiAgICBdO1xuXG4gICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgIHRoZW1lOiAnc25vdycsXG4gICAgICBtb2R1bGVzOiB7XG4gICAgICAgIHRvb2xiYXI6IHtcbiAgICAgICAgICBjb250YWluZXI6IHRvb2xiYXJPcHRpb25zLFxuICAgICAgICAgIGhhbmRsZXJzOiB7XG4gICAgICAgICAgICB0YWJsZTogKCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBidXR0b24gPSB0aGlzLmh0bWxDb250YWluZXIoKS5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3I/LignYnV0dG9uLnFsLXRhYmxlJykgYXMgSFRNTEVsZW1lbnQgfCBudWxsO1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZygnYnV0dG9uJywgYnV0dG9uLCB0aGlzLmh0bWxDb250YWluZXIoKS5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgICAgICAgY3JlYXRlVGFibGVTZWxlY3Rvcih0aGlzLnF1aWxsIGFzIFF1aWxsMngsIGJ1dHRvbik7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHRhYmxlOiB0cnVlLFxuICAgICAgICBrZXlib2FyZDoge1xuICAgICAgICAgIGJpbmRpbmdzOiB7XG4gICAgICAgICAgICBiYWNrc3BhY2U6IHtcbiAgICAgICAgICAgICAga2V5OiBVdGlsc0tleUNvZGVDb25zdGFudC5CQUNLU1BBQ0UsXG4gICAgICAgICAgICAgIGhhbmRsZXI6IChyYW5nZTogUmFuZ2UpID0+IHRoaXMubm9QcmV2ZW50RW1iZWREZWxldGlvbihyYW5nZSksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGVsZXRlOiB7XG4gICAgICAgICAgICAgIGtleTogVXRpbHNLZXlDb2RlQ29uc3RhbnQuREVMRVRFLFxuICAgICAgICAgICAgICBoYW5kbGVyOiAocmFuZ2U6IFJhbmdlKSA9PiB0aGlzLm5vUHJldmVudEVtYmVkRGVsZXRpb24ocmFuZ2UpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9IGFzIGNvbnN0O1xuXG4gICAgdGhpcy5xdWlsbCA9IG5ldyBRdWlsbDJ4KHRoaXMucXVpbGxCb2R5Q29udGFpbmVyKCkubmF0aXZlRWxlbWVudCwgb3B0aW9ucyk7XG5cbiAgICBmcm9tRXZlbnQ8TW91c2VFdmVudD4odGhpcy5xdWlsbEJvZHlDb250YWluZXIoKT8ubmF0aXZlRWxlbWVudCwgJ2NvbnRleHRtZW51JylcbiAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxuICAgICAgLnN1YnNjcmliZSgoZSkgPT4gdGhpcy5vdXRDb250ZXh0TWVudS5lbWl0KGUpKTtcblxuICAgIC8vIFThu7EgxJHhu5luZyB04bqjaSBu4buZaSBkdW5nIMSRw6MgbMawdSAobuG6v3UgY8OzKVxuICAgIHRyeSB7XG4gICAgICBjb25zdCBzYXZlZCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdxdWlsbDJ4X3NhdmVkX2h0bWwnKTtcbiAgICAgIGlmIChzYXZlZCkge1xuICAgICAgICB0aGlzLnF1aWxsLmNsaXBib2FyZC5kYW5nZXJvdXNseVBhc3RlSFRNTChzYXZlZCwgJ3NpbGVudCcpO1xuICAgICAgfVxuICAgIH0gY2F0Y2gge1xuICAgICAgLyogbm8tb3A6IGLhu48gcXVhIG7hur91IGtow7RuZyB0aOG7gyB04bqjaSB04burIGxvY2FsU3RvcmFnZSAqL1xuICAgIH1cblxuICAgIC8vIEfDoW4gaGFuZGxlciBsxrB1L3ThuqNpL3jDs2EgbuG7mWkgZHVuZ1xuICAgIGNvbnN0IHNhdmVCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2F2ZS1jb250ZW50Jyk7XG5cbiAgICBzYXZlQnRuPy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICAgIGNvbnN0IGh0bWwgPSAodGhpcy5xdWlsbD8ucm9vdCBhcyBIVE1MRWxlbWVudCkuaW5uZXJIVE1MO1xuICAgICAgdHJ5IHtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3F1aWxsMnhfc2F2ZWRfaHRtbCcsIGh0bWwpO1xuICAgICAgICB0aGlzLnNldFN0eWxlRm9yQ29udGVudCgpO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICBjb25zb2xlLmxvZygnxJDDoyBsxrB1IG7hu5lpIGR1bmcnKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvKiBuby1vcDogYuG7jyBxdWEgbuG6v3UgbMawdSB0aOG6pXQgYuG6oWkgKi9cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMub3V0RnVuY3Rpb25zQ29udHJvbC5lbWl0KHRoaXMuRnVuY3Rpb25zQ29udHJvbCk7XG4gICAgdGhpcy5zZXRTdHlsZUZvckNvbnRlbnQoKTtcbiAgICBjcmVhdGVDb250ZXh0TWVudU9wdGlvblRhYmxlKHRoaXMucXVpbGwgYXMgUXVpbGwyeCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IEZ1bmN0aW9uc0NvbnRyb2woKTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgcXVpbGw6ICgpID0+IHRoaXMucXVpbGwgYXMgYW55LFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIG5vUHJldmVudEVtYmVkRGVsZXRpb24ocmFuZ2U6IFJhbmdlKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLnF1aWxsKSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgZGVsdGEgPSB0aGlzLnF1aWxsPy5nZXRDb250ZW50cyhyYW5nZS5pbmRleCwgMSk7XG5cbiAgICBpZiAoZGVsdGE/Lm9wcy5zb21lKChvcHRpb24pID0+IHRoaXMuYmxvdHNSZWdpc3RlcigpPy5maW5kKChpdGVtKSA9PiBnZXQob3B0aW9uLmluc2VydCwgaXRlbS5jb21wb25lbnRbJ2Jsb3ROYW1lJ10pICYmIGl0ZW0uaWdub3JlRGVsZXRlKSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTsgLy8gTmfEg24ga2jDtG5nIGNobyBRdWlsbCB44butIGzDvSB4w7NhXG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwcml2YXRlIHNldFN0eWxlRm9yQ29udGVudCgpIHtcbiAgICBjb25zdCBzdHlsZUFycmF5ID0gW1xuICAgICAgeyBzZWxlY3RvcjogJy5xbC1mb250LUFyaWFsJywgc3R5bGU6ICdmb250LWZhbWlseTogQXJpYWwnIH0sXG4gICAgICB7IHNlbGVjdG9yOiAnLnFsLWZvbnQtc2Fucy1zZXJpZicsIHN0eWxlOiAnZm9udC1mYW1pbHk6IHNhbnMtc2VyaWYnIH0sXG4gICAgICB7IHNlbGVjdG9yOiAnLnFsLWZvbnQtc2VyaWYnLCBzdHlsZTogJ2ZvbnQtZmFtaWx5OiBzZXJpZicgfSxcbiAgICAgIHsgc2VsZWN0b3I6ICcucWwtZm9udC1tb25vc3BhY2UnLCBzdHlsZTogJ2ZvbnQtZmFtaWx5OiBtb25vc3BhY2UnIH0sXG4gICAgICB7IHNlbGVjdG9yOiAnLnFsLWZvbnQtSGVsdmV0aWNhJywgc3R5bGU6ICdmb250LWZhbWlseTogSGVsdmV0aWNhJyB9LFxuICAgICAgeyBzZWxlY3RvcjogJy5saWJzLXVpLXF1aWxsLWZvcm1hdC1pbWFnZScsIHN0eWxlOiAnbWF4LXdpZHRoOiAxMDAlOyBoZWlnaHQ6IGF1dG8nLCBvdmVycmlkZVN0eWxlOiB0cnVlIH0sXG4gICAgICB7IHNlbGVjdG9yOiAnLmxpYnMtdWktcXVpbGwtbWVudGlvbicsIHN0eWxlOiAnZm9udC13ZWlnaHQ6IDYwMDstbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlOy13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOyBjb2xvcjogIzcyMzlFQScsIG92ZXJyaWRlU3R5bGU6IHRydWUgfSxcbiAgICAgIHsgc2VsZWN0b3I6ICdibG9ja3F1b3RlJywgc3R5bGU6ICdib3JkZXItbGVmdDogNHB4IHNvbGlkICNjY2M7IG1hcmdpbi1ib3R0b206IDVweDsgbWFyZ2luLXRvcDogNXB4OyBwYWRkaW5nLWxlZnQ6IDE2cHgnLCBvdmVycmlkZVN0eWxlOiB0cnVlIH0sXG4gICAgXTtcbiAgICB0aGlzLmJsb3RzUmVnaXN0ZXIoKT8uZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgc3R5bGVBcnJheS5wdXNoKHsgc2VsZWN0b3I6IGAuJHtpdGVtLmNsYXNzTmFtZX1gLCBzdHlsZTogaXRlbS5zdHlsZSwgb3ZlcnJpZGVTdHlsZTogdHJ1ZSB9KTtcbiAgICB9KTtcbiAgICBzdHlsZUFycmF5LmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgIGNvbnN0IGVsZW1lbnRzID0gdGhpcy5xdWlsbD8ucm9vdC5xdWVyeVNlbGVjdG9yQWxsKGl0ZW0uc2VsZWN0b3IpO1xuICAgICAgZWxlbWVudHM/LmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xuICAgICAgICBpZiAoaXRlbS5vdmVycmlkZVN0eWxlKSB7XG4gICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgaXRlbS5zdHlsZSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIEZpeGJ1ZyBpc3N1ZTogaHR0cHM6Ly9hZG1pbi1jdi5tb2Jpby52bi9pc3N1ZXMvNDkwOTJcbiAgICAgICAgbGV0IHN0eWxlRXhpc3QgPSBlbGVtZW50LmdldEF0dHJpYnV0ZSgnc3R5bGUnKTtcbiAgICAgICAgaWYgKHN0eWxlRXhpc3QpIHtcbiAgICAgICAgICBbJ2ZvbnQtZmFtaWx5OiBBcmlhbCcsICdmb250LWZhbWlseTogc2Fucy1zZXJpZicsICdmb250LWZhbWlseTogc2VyaWYnLCAnZm9udC1mYW1pbHk6IG1vbm9zcGFjZScsICdmb250LWZhbWlseTogSGVsdmV0aWNhJ10uZm9yRWFjaCgoZm9udCkgPT4ge1xuICAgICAgICAgICAgc3R5bGVFeGlzdCA9IChzdHlsZUV4aXN0Py5pbmNsdWRlcyhgJHtmb250fTtgKSA/IHN0eWxlRXhpc3Q/LnJlcGxhY2UoYCR7Zm9udH07YCwgJycpIDogc3R5bGVFeGlzdD8ucmVwbGFjZShmb250LCAnJykpIGFzIHN0cmluZztcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnc3R5bGUnLCBzdHlsZUV4aXN0ID8gYCR7c3R5bGVFeGlzdH0ke3N0eWxlRXhpc3Rbc3R5bGVFeGlzdC5sZW5ndGggLSAxXSA9PT0gJzsnID8gJycgOiAnOyd9JHtpdGVtLnN0eWxlfTtgIDogaXRlbS5zdHlsZSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxufVxuIiwiPGRpdlxuICAjaHRtbENvbnRhaW5lclxuICBjbGFzcz1cImNvbnRhaW5lclwiPlxuICA8ZGl2IGNsYXNzPVwicGFuZWxcIj5cbiAgICA8ZGl2ICNzbm93Q29udGFpbmVyPjwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJhY3Rpb24tYnV0dG9uc1wiPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBpZD1cInNhdmUtY29udGVudFwiXG4gICAgICAgIGNsYXNzPVwiYWN0aW9uLWJ0biBzYXZlLWJ0blwiPlxuICAgICAgICDwn5K+IEzGsHUgbuG7mWkgZHVuZ1xuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, input, output, signal } from '@angular/core';
|
|
2
|
+
import { LibsUiComponentsModalComponent } from '@libs-ui/components-modal';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export class LibsUiComponentsInputsQuillUploadImageComponent {
|
|
5
|
+
buttonFooter = signal([
|
|
6
|
+
{
|
|
7
|
+
type: 'button-third',
|
|
8
|
+
label: 'i18n_cancel',
|
|
9
|
+
action: async () => this.outClose.emit(),
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
label: 'i18n_save',
|
|
13
|
+
action: () => this.handlerSaveImage(),
|
|
14
|
+
},
|
|
15
|
+
]);
|
|
16
|
+
disable = signal(false);
|
|
17
|
+
ignoreCommunicateMicroEvent = input();
|
|
18
|
+
// private mediaFile =signal<IMediaFile | undefined>(undefined);
|
|
19
|
+
// private mediaUploadFunctionControl =signal<IMediaUploadBaseFunctionControlEvent | undefined>(undefined);
|
|
20
|
+
uploadImageConfig = input.required();
|
|
21
|
+
outClose = output();
|
|
22
|
+
// protected handlerFunctionsControl(event: IMediaUploadBaseFunctionControlEvent) {
|
|
23
|
+
// this.mediaUploadFunctionControl.set(event);
|
|
24
|
+
// }
|
|
25
|
+
// protected handlerChangeFile(event: IChangeFile) {
|
|
26
|
+
// this.mediaFile.set(event.files[0]);
|
|
27
|
+
// }
|
|
28
|
+
async handlerSaveImage() {
|
|
29
|
+
// if (!await this.mediaUploadFunctionControl()?.checkIsValid()) {
|
|
30
|
+
// return;
|
|
31
|
+
// }
|
|
32
|
+
// if (this.mediaFile?.origin_url) {
|
|
33
|
+
// this.moClose.emit(this.mediaFile.origin_url);
|
|
34
|
+
// return;
|
|
35
|
+
// }
|
|
36
|
+
// const body: IOptionsUploadMedia = {
|
|
37
|
+
// do_not_delete: true,
|
|
38
|
+
// file: this.mediaFile?.file,
|
|
39
|
+
// option: 'thumb',
|
|
40
|
+
// size: [{ 'width': '200', 'height': '200' }]
|
|
41
|
+
// };
|
|
42
|
+
// this.disable = true;
|
|
43
|
+
// try {
|
|
44
|
+
// const params = new HttpParamsRequest({ fromObject: { pem: BUILD_PEM_OBJECT({ isCheck: 0, action: DefineConstants.PERMISSION_ACTION_VIEW, pathCheck: '/other' }) } });
|
|
45
|
+
// const res = await this.mediaService.uploadImage(params, body);
|
|
46
|
+
// this.moClose.emit(res.data?.url);
|
|
47
|
+
// } catch (error) {
|
|
48
|
+
// console.log(error);
|
|
49
|
+
// this.pushMessageService.showCompTypeText('i18n_notification_manipulation_not_success', undefined, undefined, { timeRemove: 2000, type: 'error' });
|
|
50
|
+
// this.moClose.emit();
|
|
51
|
+
// } finally {
|
|
52
|
+
// this.disable = false;
|
|
53
|
+
// }
|
|
54
|
+
}
|
|
55
|
+
handlerEventModal(event) {
|
|
56
|
+
if (event === 'close') {
|
|
57
|
+
this.outClose.emit();
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiComponentsInputsQuillUploadImageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
61
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.14", type: LibsUiComponentsInputsQuillUploadImageComponent, isStandalone: true, selector: "libs_ui-components-inputs-quill-upload_image", inputs: { ignoreCommunicateMicroEvent: { classPropertyName: "ignoreCommunicateMicroEvent", publicName: "ignoreCommunicateMicroEvent", isSignal: true, isRequired: false, transformFunction: null }, uploadImageConfig: { classPropertyName: "uploadImageConfig", publicName: "uploadImageConfig", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { outClose: "outClose" }, ngImport: i0, template: "<libs_ui-components-modal\n [title]=\"'i18n_upload_image'\"\n [mode]=\"'center'\"\n [width]=\"'598px'\"\n [headerConfig]=\"{ ignoreHeaderTheme: true }\"\n [maxHeight]=\"'calc(100% - 100px)'\"\n [height]=\"'auto'\"\n [zIndex]=\"uploadImageConfig().zIndex || 1203\"\n [disable]=\"disable()\"\n [ignoreCommunicateMicroEvent]=\"ignoreCommunicateMicroEvent()\"\n [buttonsFooter]=\"buttonFooter()\"\n (outEvent)=\"handlerEventModal($event)\">\n <div class=\"libs-ui-modal-body-custom\">\n <!-- <libs-uicomponents-media-upload [zIndex]=\"zIndex+1\"\n [labelConfig]=\"labelConfig\"\n [multiple]=\"false\"\n [fileType]=\"'image'\"\n [doNotDelete]=\"true\"\n [maxImageSize]=\"maxImageSize || 1048576\"\n [limitFile]=\"10\"\n [validRequired]=\"{isRequired: true}\"\n (moChangeFile)=\"handlerChangeFile($event)\"\n (outFunctionsControl)=\"handlerFunctionsControl($event)\">\n </libs-uicomponents-media-upload> -->\n </div>\n</libs_ui-components-modal>\n", dependencies: [{ kind: "component", type: LibsUiComponentsModalComponent, selector: "libs_ui-components-modal", inputs: ["show", "mode", "isBackdropTransparent", "isBackgroundTransparentModal", "isSizeBackdropByWidthHeightInput", "hasShadowBoxWhenHiddenBackDropTransparent", "classIncludeModalWrapper", "zIndex", "width", "height", "maxWidth", "maxHeight", "minWidth", "isFullScreen", "disable", "ignoreCommunicateMicroEvent", "headerConfig", "bodyConfig", "footerConfig", "buttonsFooter", "title", "titleUseXssFilter", "titleUseTooltip", "titleUseInnerText"], outputs: ["showChange", "widthChange", "heightChange", "maxWidthChange", "maxHeightChange", "minWidthChange", "disableChange", "buttonsFooterChange", "outScrollContent", "outEvent", "outFunctionControl"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
62
|
+
}
|
|
63
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiComponentsInputsQuillUploadImageComponent, decorators: [{
|
|
64
|
+
type: Component,
|
|
65
|
+
args: [{ selector: 'libs_ui-components-inputs-quill-upload_image', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [LibsUiComponentsModalComponent], template: "<libs_ui-components-modal\n [title]=\"'i18n_upload_image'\"\n [mode]=\"'center'\"\n [width]=\"'598px'\"\n [headerConfig]=\"{ ignoreHeaderTheme: true }\"\n [maxHeight]=\"'calc(100% - 100px)'\"\n [height]=\"'auto'\"\n [zIndex]=\"uploadImageConfig().zIndex || 1203\"\n [disable]=\"disable()\"\n [ignoreCommunicateMicroEvent]=\"ignoreCommunicateMicroEvent()\"\n [buttonsFooter]=\"buttonFooter()\"\n (outEvent)=\"handlerEventModal($event)\">\n <div class=\"libs-ui-modal-body-custom\">\n <!-- <libs-uicomponents-media-upload [zIndex]=\"zIndex+1\"\n [labelConfig]=\"labelConfig\"\n [multiple]=\"false\"\n [fileType]=\"'image'\"\n [doNotDelete]=\"true\"\n [maxImageSize]=\"maxImageSize || 1048576\"\n [limitFile]=\"10\"\n [validRequired]=\"{isRequired: true}\"\n (moChangeFile)=\"handlerChangeFile($event)\"\n (outFunctionsControl)=\"handlerFunctionsControl($event)\">\n </libs-uicomponents-media-upload> -->\n </div>\n</libs_ui-components-modal>\n" }]
|
|
66
|
+
}] });
|
|
67
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLWltYWdlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy9pbnB1dHMvcXVpbGwvc3JjL3VwbG9hZC1pbWFnZS91cGxvYWQtaW1hZ2UuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2lucHV0cy9xdWlsbC9zcmMvdXBsb2FkLWltYWdlL3VwbG9hZC1pbWFnZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTFGLE9BQU8sRUFBRSw4QkFBOEIsRUFBb0IsTUFBTSwyQkFBMkIsQ0FBQzs7QUFXN0YsTUFBTSxPQUFPLCtDQUErQztJQUNoRCxZQUFZLEdBQUcsTUFBTSxDQUFpQjtRQUM5QztZQUNFLElBQUksRUFBRSxjQUFjO1lBQ3BCLEtBQUssRUFBRSxhQUFhO1lBQ3BCLE1BQU0sRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFO1NBQ3pDO1FBQ0Q7WUFDRSxLQUFLLEVBQUUsV0FBVztZQUNsQixNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFO1NBQ3RDO0tBQ0YsQ0FBQyxDQUFDO0lBQ08sT0FBTyxHQUFHLE1BQU0sQ0FBVSxLQUFLLENBQUMsQ0FBQztJQUNsQywyQkFBMkIsR0FBRyxLQUFLLEVBQVcsQ0FBQztJQUV4RCxnRUFBZ0U7SUFDaEUsMkdBQTJHO0lBRWxHLGlCQUFpQixHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQTJCLENBQUM7SUFFOUQsUUFBUSxHQUFHLE1BQU0sRUFBaUIsQ0FBQztJQUU1QyxtRkFBbUY7SUFDbkYsZ0RBQWdEO0lBQ2hELElBQUk7SUFFSixvREFBb0Q7SUFDcEQsd0NBQXdDO0lBQ3hDLElBQUk7SUFFSSxLQUFLLENBQUMsZ0JBQWdCO1FBQzVCLGtFQUFrRTtRQUNsRSxZQUFZO1FBQ1osSUFBSTtRQUNKLG9DQUFvQztRQUNwQyxrREFBa0Q7UUFDbEQsWUFBWTtRQUNaLElBQUk7UUFDSixzQ0FBc0M7UUFDdEMseUJBQXlCO1FBQ3pCLGdDQUFnQztRQUNoQyxxQkFBcUI7UUFDckIsZ0RBQWdEO1FBQ2hELEtBQUs7UUFDTCx1QkFBdUI7UUFDdkIsUUFBUTtRQUNSLDBLQUEwSztRQUMxSyxtRUFBbUU7UUFDbkUsc0NBQXNDO1FBQ3RDLG9CQUFvQjtRQUNwQix3QkFBd0I7UUFDeEIsdUpBQXVKO1FBQ3ZKLHlCQUF5QjtRQUN6QixjQUFjO1FBQ2QsMEJBQTBCO1FBQzFCLElBQUk7SUFDTixDQUFDO0lBRVMsaUJBQWlCLENBQUMsS0FBdUI7UUFDakQsSUFBSSxLQUFLLEtBQUssT0FBTyxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN2QixDQUFDO0lBQ0gsQ0FBQzt3R0E5RFUsK0NBQStDOzRGQUEvQywrQ0FBK0MsNGVDYjVELCsrQkEwQkEsNENEZlksOEJBQThCOzs0RkFFN0IsK0NBQStDO2tCQVIzRCxTQUFTOytCQUVFLDhDQUE4QyxjQUU1QyxJQUFJLG1CQUNDLHVCQUF1QixDQUFDLE1BQU0sV0FDdEMsQ0FBQyw4QkFBOEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGlucHV0LCBvdXRwdXQsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSUJ1dHRvbiB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtYnV0dG9ucy1idXR0b24nO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c01vZGFsQ29tcG9uZW50LCBUWVBFX01PREFMX0VWRU5UIH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1tb2RhbCc7XG5pbXBvcnQgeyBJUXVpbGxVcGxvYWRJbWFnZUNvbmZpZyB9IGZyb20gJy4uL2ludGVyZmFjZXMvcXVpbGwuaW50ZXJmYWNlJztcblxuQENvbXBvbmVudCh7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnbGlic191aS1jb21wb25lbnRzLWlucHV0cy1xdWlsbC11cGxvYWRfaW1hZ2UnLFxuICB0ZW1wbGF0ZVVybDogJy4vdXBsb2FkLWltYWdlLmNvbXBvbmVudC5odG1sJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGltcG9ydHM6IFtMaWJzVWlDb21wb25lbnRzTW9kYWxDb21wb25lbnRdLFxufSlcbmV4cG9ydCBjbGFzcyBMaWJzVWlDb21wb25lbnRzSW5wdXRzUXVpbGxVcGxvYWRJbWFnZUNvbXBvbmVudCB7XG4gIHByb3RlY3RlZCBidXR0b25Gb290ZXIgPSBzaWduYWw8QXJyYXk8SUJ1dHRvbj4+KFtcbiAgICB7XG4gICAgICB0eXBlOiAnYnV0dG9uLXRoaXJkJyxcbiAgICAgIGxhYmVsOiAnaTE4bl9jYW5jZWwnLFxuICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB0aGlzLm91dENsb3NlLmVtaXQoKSxcbiAgICB9LFxuICAgIHtcbiAgICAgIGxhYmVsOiAnaTE4bl9zYXZlJyxcbiAgICAgIGFjdGlvbjogKCkgPT4gdGhpcy5oYW5kbGVyU2F2ZUltYWdlKCksXG4gICAgfSxcbiAgXSk7XG4gIHByb3RlY3RlZCBkaXNhYmxlID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgaWdub3JlQ29tbXVuaWNhdGVNaWNyb0V2ZW50ID0gaW5wdXQ8Ym9vbGVhbj4oKTtcblxuICAvLyBwcml2YXRlIG1lZGlhRmlsZSA9c2lnbmFsPElNZWRpYUZpbGUgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIC8vIHByaXZhdGUgbWVkaWFVcGxvYWRGdW5jdGlvbkNvbnRyb2wgPXNpZ25hbDxJTWVkaWFVcGxvYWRCYXNlRnVuY3Rpb25Db250cm9sRXZlbnQgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG5cbiAgcmVhZG9ubHkgdXBsb2FkSW1hZ2VDb25maWcgPSBpbnB1dC5yZXF1aXJlZDxJUXVpbGxVcGxvYWRJbWFnZUNvbmZpZz4oKTtcblxuICByZWFkb25seSBvdXRDbG9zZSA9IG91dHB1dDxzdHJpbmcgfCB2b2lkPigpO1xuXG4gIC8vIHByb3RlY3RlZCBoYW5kbGVyRnVuY3Rpb25zQ29udHJvbChldmVudDogSU1lZGlhVXBsb2FkQmFzZUZ1bmN0aW9uQ29udHJvbEV2ZW50KSB7XG4gIC8vICAgdGhpcy5tZWRpYVVwbG9hZEZ1bmN0aW9uQ29udHJvbC5zZXQoZXZlbnQpO1xuICAvLyB9XG5cbiAgLy8gcHJvdGVjdGVkIGhhbmRsZXJDaGFuZ2VGaWxlKGV2ZW50OiBJQ2hhbmdlRmlsZSkge1xuICAvLyAgIHRoaXMubWVkaWFGaWxlLnNldChldmVudC5maWxlc1swXSk7XG4gIC8vIH1cblxuICBwcml2YXRlIGFzeW5jIGhhbmRsZXJTYXZlSW1hZ2UoKSB7XG4gICAgLy8gaWYgKCFhd2FpdCB0aGlzLm1lZGlhVXBsb2FkRnVuY3Rpb25Db250cm9sKCk/LmNoZWNrSXNWYWxpZCgpKSB7XG4gICAgLy8gICByZXR1cm47XG4gICAgLy8gfVxuICAgIC8vIGlmICh0aGlzLm1lZGlhRmlsZT8ub3JpZ2luX3VybCkge1xuICAgIC8vICAgdGhpcy5tb0Nsb3NlLmVtaXQodGhpcy5tZWRpYUZpbGUub3JpZ2luX3VybCk7XG4gICAgLy8gICByZXR1cm47XG4gICAgLy8gfVxuICAgIC8vIGNvbnN0IGJvZHk6IElPcHRpb25zVXBsb2FkTWVkaWEgPSB7XG4gICAgLy8gICBkb19ub3RfZGVsZXRlOiB0cnVlLFxuICAgIC8vICAgZmlsZTogdGhpcy5tZWRpYUZpbGU/LmZpbGUsXG4gICAgLy8gICBvcHRpb246ICd0aHVtYicsXG4gICAgLy8gICBzaXplOiBbeyAnd2lkdGgnOiAnMjAwJywgJ2hlaWdodCc6ICcyMDAnIH1dXG4gICAgLy8gfTtcbiAgICAvLyB0aGlzLmRpc2FibGUgPSB0cnVlO1xuICAgIC8vIHRyeSB7XG4gICAgLy8gICBjb25zdCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtc1JlcXVlc3QoeyBmcm9tT2JqZWN0OiB7IHBlbTogQlVJTERfUEVNX09CSkVDVCh7IGlzQ2hlY2s6IDAsIGFjdGlvbjogRGVmaW5lQ29uc3RhbnRzLlBFUk1JU1NJT05fQUNUSU9OX1ZJRVcsIHBhdGhDaGVjazogJy9vdGhlcicgfSkgfSB9KTtcbiAgICAvLyAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMubWVkaWFTZXJ2aWNlLnVwbG9hZEltYWdlKHBhcmFtcywgYm9keSk7XG4gICAgLy8gICB0aGlzLm1vQ2xvc2UuZW1pdChyZXMuZGF0YT8udXJsKTtcbiAgICAvLyB9IGNhdGNoIChlcnJvcikge1xuICAgIC8vICAgY29uc29sZS5sb2coZXJyb3IpO1xuICAgIC8vICAgdGhpcy5wdXNoTWVzc2FnZVNlcnZpY2Uuc2hvd0NvbXBUeXBlVGV4dCgnaTE4bl9ub3RpZmljYXRpb25fbWFuaXB1bGF0aW9uX25vdF9zdWNjZXNzJywgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHsgdGltZVJlbW92ZTogMjAwMCwgdHlwZTogJ2Vycm9yJyB9KTtcbiAgICAvLyAgIHRoaXMubW9DbG9zZS5lbWl0KCk7XG4gICAgLy8gfSBmaW5hbGx5IHtcbiAgICAvLyAgIHRoaXMuZGlzYWJsZSA9IGZhbHNlO1xuICAgIC8vIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyRXZlbnRNb2RhbChldmVudDogVFlQRV9NT0RBTF9FVkVOVCkge1xuICAgIGlmIChldmVudCA9PT0gJ2Nsb3NlJykge1xuICAgICAgdGhpcy5vdXRDbG9zZS5lbWl0KCk7XG4gICAgfVxuICB9XG59XG4iLCI8bGlic191aS1jb21wb25lbnRzLW1vZGFsXG4gIFt0aXRsZV09XCInaTE4bl91cGxvYWRfaW1hZ2UnXCJcbiAgW21vZGVdPVwiJ2NlbnRlcidcIlxuICBbd2lkdGhdPVwiJzU5OHB4J1wiXG4gIFtoZWFkZXJDb25maWddPVwieyBpZ25vcmVIZWFkZXJUaGVtZTogdHJ1ZSB9XCJcbiAgW21heEhlaWdodF09XCInY2FsYygxMDAlIC0gMTAwcHgpJ1wiXG4gIFtoZWlnaHRdPVwiJ2F1dG8nXCJcbiAgW3pJbmRleF09XCJ1cGxvYWRJbWFnZUNvbmZpZygpLnpJbmRleCB8fCAxMjAzXCJcbiAgW2Rpc2FibGVdPVwiZGlzYWJsZSgpXCJcbiAgW2lnbm9yZUNvbW11bmljYXRlTWljcm9FdmVudF09XCJpZ25vcmVDb21tdW5pY2F0ZU1pY3JvRXZlbnQoKVwiXG4gIFtidXR0b25zRm9vdGVyXT1cImJ1dHRvbkZvb3RlcigpXCJcbiAgKG91dEV2ZW50KT1cImhhbmRsZXJFdmVudE1vZGFsKCRldmVudClcIj5cbiAgPGRpdiBjbGFzcz1cImxpYnMtdWktbW9kYWwtYm9keS1jdXN0b21cIj5cbiAgICA8IS0tIDxsaWJzLXVpY29tcG9uZW50cy1tZWRpYS11cGxvYWQgW3pJbmRleF09XCJ6SW5kZXgrMVwiXG4gICAgICBbbGFiZWxDb25maWddPVwibGFiZWxDb25maWdcIlxuICAgICAgW211bHRpcGxlXT1cImZhbHNlXCJcbiAgICAgIFtmaWxlVHlwZV09XCInaW1hZ2UnXCJcbiAgICAgIFtkb05vdERlbGV0ZV09XCJ0cnVlXCJcbiAgICAgIFttYXhJbWFnZVNpemVdPVwibWF4SW1hZ2VTaXplIHx8IDEwNDg1NzZcIlxuICAgICAgW2xpbWl0RmlsZV09XCIxMFwiXG4gICAgICBbdmFsaWRSZXF1aXJlZF09XCJ7aXNSZXF1aXJlZDogdHJ1ZX1cIlxuICAgICAgKG1vQ2hhbmdlRmlsZSk9XCJoYW5kbGVyQ2hhbmdlRmlsZSgkZXZlbnQpXCJcbiAgICAgIChvdXRGdW5jdGlvbnNDb250cm9sKT1cImhhbmRsZXJGdW5jdGlvbnNDb250cm9sKCRldmVudClcIj5cbiAgICA8L2xpYnMtdWljb21wb25lbnRzLW1lZGlhLXVwbG9hZD4gLS0+XG4gIDwvZGl2PlxuPC9saWJzX3VpLWNvbXBvbmVudHMtbW9kYWw+XG4iXX0=
|