@libs-ui/components-preview-text-data 0.2.337-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/README.md ADDED
@@ -0,0 +1,3 @@
1
+ # preview-text-data
2
+
3
+ This library was generated with [Nx](https://nx.dev).
@@ -0,0 +1,4 @@
1
+ export * from './preview-text-data.component';
2
+ export * from './preview-text-data.interfaces';
3
+ export * from './preview-text-data.define';
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvcHJldmlldy10ZXh0LWRhdGEvc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsK0JBQStCLENBQUM7QUFDOUMsY0FBYyxnQ0FBZ0MsQ0FBQztBQUMvQyxjQUFjLDRCQUE0QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9wcmV2aWV3LXRleHQtZGF0YS5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9wcmV2aWV3LXRleHQtZGF0YS5pbnRlcmZhY2VzJztcbmV4cG9ydCAqIGZyb20gJy4vcHJldmlldy10ZXh0LWRhdGEuZGVmaW5lJztcbiJdfQ==
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './index';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlicy11aS1jb21wb25lbnRzLXByZXZpZXctdGV4dC1kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL3ByZXZpZXctdGV4dC1kYXRhL3NyYy9saWJzLXVpLWNvbXBvbmVudHMtcHJldmlldy10ZXh0LWRhdGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG4iXX0=
@@ -0,0 +1,255 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
2
+ import { ChangeDetectionStrategy, Component, computed, inject, input, model, output, signal, viewChild } from '@angular/core';
3
+ import { cpp } from '@codemirror/lang-cpp';
4
+ import { css } from '@codemirror/lang-css';
5
+ import { go } from '@codemirror/lang-go';
6
+ import { html } from '@codemirror/lang-html';
7
+ import { java } from '@codemirror/lang-java';
8
+ import { javascript } from '@codemirror/lang-javascript';
9
+ import { json } from '@codemirror/lang-json';
10
+ import { markdown } from '@codemirror/lang-markdown';
11
+ import { php } from '@codemirror/lang-php';
12
+ import { python } from '@codemirror/lang-python';
13
+ import { sql } from '@codemirror/lang-sql';
14
+ import { xml } from '@codemirror/lang-xml';
15
+ import { yaml } from '@codemirror/lang-yaml';
16
+ import { StreamLanguage } from '@codemirror/language';
17
+ import { linter, lintGutter } from '@codemirror/lint';
18
+ import { Compartment, EditorState } from '@codemirror/state';
19
+ import { lineNumbers } from '@codemirror/view';
20
+ import { LibsUiComponentsButtonsButtonComponent } from '@libs-ui/components-buttons-button';
21
+ import { LibsUiComponentsDropdownComponent } from '@libs-ui/components-dropdown';
22
+ import { LibsUiNotificationService } from '@libs-ui/services-notification';
23
+ import { get } from '@libs-ui/utils';
24
+ import { basicSetup, EditorView } from 'codemirror';
25
+ import { Parser } from 'node-sql-parser';
26
+ import { httpRequestConfigGetOptionsLang, optionsLang } from './preview-text-data.define';
27
+ import * as i0 from "@angular/core";
28
+ const sqlParser = new Parser();
29
+ export class LibsUiComponentsPreviewTextDataComponent {
30
+ editorViewInstance;
31
+ wrapCompartment = new Compartment();
32
+ languageCompartment = new Compartment();
33
+ lineNumberCompartment = new Compartment();
34
+ isWrap = signal(true);
35
+ configLoadDataIsHttpConfig = httpRequestConfigGetOptionsLang();
36
+ labelLang = computed(() => optionsLang().find((item) => item.id === this.langSelected())?.label);
37
+ content = input('', { transform: (value) => value ?? '' });
38
+ langSelected = model.required();
39
+ editable = input(false, { transform: (value) => value ?? false });
40
+ hiddenAction = input(false, { transform: (value) => value ?? false });
41
+ lintIgnorePatterns = input(['Cannot use import statement outside a module', 'Unexpected token export', 'import ', '@angular/core'], {
42
+ transform: (value) => value ?? ['Cannot use import statement outside a module', 'Unexpected token export', 'import ', '@angular/core'],
43
+ });
44
+ background = input('#f8f9fa', { transform: (value) => value ?? '#f8f9fa' });
45
+ outChange = output();
46
+ syntaxErrors = output();
47
+ containerPreview = viewChild.required('containerPreview');
48
+ notificationService = inject(LibsUiNotificationService);
49
+ ngAfterViewInit() {
50
+ this.editorViewInstance = new EditorView({ ...this.getExtensionsByLanguage(this.langSelected()), doc: this.content(), parent: this.containerPreview().nativeElement });
51
+ }
52
+ getExtensionsByLanguage(lang) {
53
+ let formatByLangFunction = StreamLanguage.define({
54
+ token(stream) {
55
+ stream.skipToEnd();
56
+ return null;
57
+ },
58
+ });
59
+ let lintFunction = linter(() => []);
60
+ const lowerLang = lang.toLowerCase();
61
+ switch (lowerLang) {
62
+ case 'javascript':
63
+ formatByLangFunction = javascript({ jsx: true, typescript: true });
64
+ lintFunction = this.jsLinterFn();
65
+ break;
66
+ case 'html':
67
+ formatByLangFunction = html();
68
+ break;
69
+ case 'css':
70
+ formatByLangFunction = css();
71
+ break;
72
+ case 'markdown':
73
+ formatByLangFunction = markdown();
74
+ break;
75
+ case 'json':
76
+ formatByLangFunction = json();
77
+ lintFunction = this.jsonLinterFn();
78
+ break;
79
+ case 'sql':
80
+ formatByLangFunction = sql();
81
+ lintFunction = this.sqlLinterFn();
82
+ break;
83
+ case 'xml':
84
+ formatByLangFunction = xml();
85
+ break;
86
+ case 'yaml':
87
+ formatByLangFunction = yaml();
88
+ break;
89
+ case 'python':
90
+ formatByLangFunction = python();
91
+ break;
92
+ case 'java':
93
+ formatByLangFunction = java();
94
+ break;
95
+ case 'cpp':
96
+ formatByLangFunction = cpp();
97
+ break;
98
+ case 'php':
99
+ formatByLangFunction = php();
100
+ break;
101
+ case 'go':
102
+ formatByLangFunction = go();
103
+ break;
104
+ }
105
+ return {
106
+ extensions: [
107
+ basicSetup,
108
+ this.languageCompartment.of(formatByLangFunction),
109
+ this.lightTheme(),
110
+ EditorView.editable.of(this.editable()),
111
+ this.wrapCompartment.of(EditorView.lineWrapping),
112
+ this.lineNumberCompartment.of(lineNumbers()),
113
+ lintGutter(),
114
+ this.customBracketTheme(),
115
+ lintFunction,
116
+ EditorView.updateListener.of((update) => {
117
+ if (update.docChanged && this.editable()) {
118
+ const newValue = update.state.doc.toString();
119
+ this.outChange.emit({
120
+ content: newValue,
121
+ isWrap: this.isWrap(),
122
+ language: this.langSelected(),
123
+ contextChange: 'content',
124
+ });
125
+ }
126
+ }),
127
+ ],
128
+ };
129
+ }
130
+ lightTheme() {
131
+ return EditorView.theme({
132
+ '&': { backgroundColor: this.background(), color: '#333' },
133
+ '.cm-content': { caretColor: '#111' },
134
+ '.cm-activeLine': { backgroundColor: '#f0f0f0' },
135
+ });
136
+ }
137
+ customBracketTheme() {
138
+ return EditorView.theme({
139
+ '.cm-matchingBracket': {
140
+ backgroundColor: 'rgba(100, 200, 255, 0.15)', // xanh nhẹ trong suốt
141
+ border: '1px solid rgba(100, 200, 255, 0.4)',
142
+ borderRadius: '3px',
143
+ transition: 'all 0.2s ease',
144
+ },
145
+ '.cm-nonmatchingBracket': {
146
+ backgroundColor: 'rgba(255, 100, 100, 0.15)', // đỏ nhẹ
147
+ border: '1px solid rgba(255, 100, 100, 0.3)',
148
+ borderRadius: '3px',
149
+ },
150
+ });
151
+ }
152
+ jsLinterFn() {
153
+ return linter((view) => {
154
+ const text = view.state.doc.toString();
155
+ const diagnostics = [];
156
+ try {
157
+ new Function(text); // test parse code
158
+ }
159
+ catch (err) {
160
+ if (!this.lintIgnorePatterns().some((pattern) => err.message.includes(pattern))) {
161
+ diagnostics.push({
162
+ from: 0,
163
+ to: text.length,
164
+ severity: 'error',
165
+ message: err.message,
166
+ });
167
+ this.syntaxErrors.emit(diagnostics);
168
+ }
169
+ }
170
+ return diagnostics;
171
+ });
172
+ }
173
+ jsonLinterFn() {
174
+ return linter((view) => {
175
+ const text = view.state.doc.toString();
176
+ const diagnostics = [];
177
+ try {
178
+ JSON.parse(text);
179
+ }
180
+ catch (err) {
181
+ diagnostics.push({
182
+ from: 0,
183
+ to: text.length,
184
+ severity: 'error',
185
+ message: get(err, 'message', ''),
186
+ });
187
+ }
188
+ this.syntaxErrors.emit(diagnostics);
189
+ return diagnostics;
190
+ });
191
+ }
192
+ sqlLinterFn() {
193
+ return linter((view) => {
194
+ const text = view.state.doc.toString();
195
+ const diagnostics = [];
196
+ try {
197
+ sqlParser.astify(text);
198
+ }
199
+ catch (err) {
200
+ diagnostics.push({
201
+ from: 0,
202
+ to: text.length,
203
+ severity: 'error',
204
+ message: get(err, 'message', ''),
205
+ });
206
+ }
207
+ this.syntaxErrors.emit(diagnostics);
208
+ return diagnostics;
209
+ });
210
+ }
211
+ handlerCopy() {
212
+ navigator.clipboard.writeText(this.content() || '');
213
+ this.notificationService.showCompTypeTextInfo('Sao chép thành công');
214
+ }
215
+ handlerLineWrap() {
216
+ this.isWrap.update((val) => !val);
217
+ this.editorViewInstance?.dispatch({
218
+ effects: this.wrapCompartment.reconfigure(this.isWrap() ? EditorView.lineWrapping : []),
219
+ });
220
+ this.editorViewInstance?.dispatch({
221
+ effects: this.lineNumberCompartment.reconfigure(this.isWrap() ? lineNumbers() : [] // 👈 nếu tắt thì remove extension
222
+ ),
223
+ });
224
+ this.outChange.emit({
225
+ content: this.content(),
226
+ isWrap: this.isWrap(),
227
+ language: this.langSelected(),
228
+ contextChange: 'isWrap',
229
+ });
230
+ }
231
+ handlerSelectKey(data) {
232
+ if (!data || !data.key) {
233
+ return;
234
+ }
235
+ this.langSelected.set(data.key);
236
+ const extensions = this.getExtensionsByLanguage(this.langSelected());
237
+ this.editorViewInstance?.setState(EditorState.create({
238
+ doc: this.editorViewInstance?.state.doc.toString(),
239
+ ...extensions,
240
+ }));
241
+ this.outChange.emit({
242
+ content: this.content(),
243
+ isWrap: this.isWrap(),
244
+ language: this.langSelected(),
245
+ contextChange: 'language',
246
+ });
247
+ }
248
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiComponentsPreviewTextDataComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
249
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: LibsUiComponentsPreviewTextDataComponent, isStandalone: true, selector: "libs_ui-components-preview_text_data", inputs: { content: { classPropertyName: "content", publicName: "content", isSignal: true, isRequired: false, transformFunction: null }, langSelected: { classPropertyName: "langSelected", publicName: "langSelected", isSignal: true, isRequired: true, transformFunction: null }, editable: { classPropertyName: "editable", publicName: "editable", isSignal: true, isRequired: false, transformFunction: null }, hiddenAction: { classPropertyName: "hiddenAction", publicName: "hiddenAction", isSignal: true, isRequired: false, transformFunction: null }, lintIgnorePatterns: { classPropertyName: "lintIgnorePatterns", publicName: "lintIgnorePatterns", isSignal: true, isRequired: false, transformFunction: null }, background: { classPropertyName: "background", publicName: "background", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { langSelected: "langSelectedChange", outChange: "outChange", syntaxErrors: "syntaxErrors" }, viewQueries: [{ propertyName: "containerPreview", first: true, predicate: ["containerPreview"], descendants: true, isSignal: true }], ngImport: i0, template: "<div\n class=\"libs-ui-preview-data-container flex flex-col w-full h-auto rounded-[8px] libs-ui-border-general px-[8px]\"\n [style.--background-color]=\"background()\"\n [class.pt-[8px]]=\"!hiddenAction()\">\n @if (!hiddenAction()) {\n <div class=\"flex items-center content-between color-[#6a7383]\">\n <libs_ui-components-dropdown\n classInclude=\"w-[200px]\"\n [listConfig]=\"configLoadDataIsHttpConfig\"\n [listMaxItemShow]=\"5\"\n [isNgContent]=\"true\"\n [readonly]=\"!editable()\"\n [listHasButtonUnSelectOption]=\"false\"\n (outSelectKey)=\"handlerSelectKey($event)\">\n <libs_ui-components-buttons-button\n [type]=\"'button-link-third'\"\n [label]=\"labelLang() || ''\"\n [sizeButton]=\"'small'\"\n [classIconRight]=\"editable() ? 'libs-ui-icon-move-right rotate-90' : ''\"\n [classInclude]=\"'!p-[0px]' + (editable() ? '' : '!pointer-events-none !cursor-default hover:!text-[#6A7383]')\" />\n </libs_ui-components-dropdown>\n <div class=\"flex items-center\">\n <libs_ui-components-buttons-button\n [type]=\"'button-link-third'\"\n [label]=\"isWrap() ? 'i18n_remove_line_wrap' : 'i18n_line_wrap'\"\n [sizeButton]=\"'small'\"\n [classIconLeft]=\"isWrap() ? 'libs-ui-icon-unwrap' : 'libs-ui-icon-wrap'\"\n [classInclude]=\"'mo-lib-p-0px mo-lib-mr-16px'\"\n (outClick)=\"handlerLineWrap()\" />\n <libs_ui-components-buttons-button\n [type]=\"'button-link-third'\"\n [label]=\"'i18n_copy'\"\n [sizeButton]=\"'small'\"\n [classIconLeft]=\"'libs-ui-icon-copy'\"\n [classInclude]=\"'mo-lib-p-0px'\"\n (outClick)=\"handlerCopy()\" />\n </div>\n </div>\n }\n <div #containerPreview></div>\n</div>\n", styles: [":host ::ng-deep .libs-ui-preview-data-container{background-color:var(--background-color)!important}:host ::ng-deep .libs-ui-preview-data-container .cm-line{white-space:pre-wrap}:host ::ng-deep .libs-ui-preview-data-container .cm-lintRange-error{background-color:#ff323233;border-bottom:2px solid red}:host ::ng-deep .libs-ui-preview-data-container .cm-lintRange-warning{background-color:#ffc80026}:host ::ng-deep .libs-ui-preview-data-container .cm-tooltip-lint{background:#fff8f8;color:#d32f2f;border:1px solid #f44336;padding:8px 10px;font-size:13px;font-family:Inter,sans-serif;border-radius:6px;box-shadow:0 2px 8px #ff000026}:host ::ng-deep .libs-ui-preview-data-container .cm-focused{outline:none!important}:host ::ng-deep .libs-ui-preview-data-container .cm-gutters{background-color:var(--background-color)!important}\n"], dependencies: [{ kind: "component", type: LibsUiComponentsDropdownComponent, selector: "libs_ui-components-dropdown", inputs: ["useXssFilter", "popoverElementRefCustom", "classInclude", "ignoreStopPropagationEvent", "flagMouse", "flagMouseContent", "popoverCustomConfig", "isNgContent", "zIndex", "convertItemSelected", "getPopoverItemSelected", "httpRequestDetailItemById", "lengthKeys", "textDisplayWhenNoSelect", "textDisplayWhenMultiSelect", "classIncludeTextDisplayWhenNoSelect", "fieldLabel", "fieldGetLabel", "labelPopoverConfig", "labelPopoverFullWidth", "hasContentUnitRight", "listSearchNoDataTemplateRef", "fieldGetImage", "imageSize", "typeShape", "fieldGetIcon", "fieldGetTextAvatar", "fieldGetColorAvatar", "classAvatarInclude", "getLastTextAfterSpace", "linkImageError", "showError", "showBorderError", "disable", "readonly", "labelConfig", "disableLabel", "listSearchConfig", "isSearchOnline", "listHiddenInputSearch", "listSearchPadding", "listKeySearch", "listDividerClassInclude", "listConfig", "listButtonsOther", "listHasButtonUnSelectOption", "listClickExactly", "listBackgroundCustom", "listMaxItemShow", "listKeySelected", "listMultiKeySelected", "listKeysDisable", "listKeysHidden", "validRequired", "validMaxItemSelected", "changeValidUndefinedResetError", "allowSelectItemMultiple", "focusInputSearch", "onlyEmitDataWhenReset", "resetKeyWhenSelectAllKey", "listConfigHasDivider", "classIncludeIcon", "classIncludeContent", "listIgnoreClassDisableDefaultWhenUseKeysDisableItem", "tabKeyActive", "tabsConfig", "ignoreBorderBottom"], outputs: ["flagMouseChange", "flagMouseContentChange", "lengthKeysChange", "showBorderErrorChange", "listKeySelectedChange", "listMultiKeySelectedChange", "tabKeyActiveChange", "outSelectKey", "outSelectMultiKey", "outFunctionsControl", "outValidEvent", "outChangStageFlagMouse", "outDataChange", "outClickButtonOther", "outShowList", "outChangeTabKeyActive"] }, { kind: "component", type: LibsUiComponentsButtonsButtonComponent, selector: "libs_ui-components-buttons-button", inputs: ["flagMouse", "type", "buttonCustom", "sizeButton", "label", "disable", "isPending", "imageLeft", "classInclude", "classIconLeft", "classIconRight", "classLabel", "iconOnlyType", "popover", "ignoreStopPropagationEvent", "zIndex", "widthLabelPopover", "styleIconLeft", "styleButton", "ignoreFocusWhenInputTab", "ignoreSetClickWhenShowPopover", "ignorePointerEvent", "isActive", "isHandlerEnterDocumentClickButton"], outputs: ["outClick", "outPopoverEvent", "outFunctionsControl"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
250
+ }
251
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiComponentsPreviewTextDataComponent, decorators: [{
252
+ type: Component,
253
+ args: [{ selector: 'libs_ui-components-preview_text_data', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [LibsUiComponentsDropdownComponent, LibsUiComponentsButtonsButtonComponent], template: "<div\n class=\"libs-ui-preview-data-container flex flex-col w-full h-auto rounded-[8px] libs-ui-border-general px-[8px]\"\n [style.--background-color]=\"background()\"\n [class.pt-[8px]]=\"!hiddenAction()\">\n @if (!hiddenAction()) {\n <div class=\"flex items-center content-between color-[#6a7383]\">\n <libs_ui-components-dropdown\n classInclude=\"w-[200px]\"\n [listConfig]=\"configLoadDataIsHttpConfig\"\n [listMaxItemShow]=\"5\"\n [isNgContent]=\"true\"\n [readonly]=\"!editable()\"\n [listHasButtonUnSelectOption]=\"false\"\n (outSelectKey)=\"handlerSelectKey($event)\">\n <libs_ui-components-buttons-button\n [type]=\"'button-link-third'\"\n [label]=\"labelLang() || ''\"\n [sizeButton]=\"'small'\"\n [classIconRight]=\"editable() ? 'libs-ui-icon-move-right rotate-90' : ''\"\n [classInclude]=\"'!p-[0px]' + (editable() ? '' : '!pointer-events-none !cursor-default hover:!text-[#6A7383]')\" />\n </libs_ui-components-dropdown>\n <div class=\"flex items-center\">\n <libs_ui-components-buttons-button\n [type]=\"'button-link-third'\"\n [label]=\"isWrap() ? 'i18n_remove_line_wrap' : 'i18n_line_wrap'\"\n [sizeButton]=\"'small'\"\n [classIconLeft]=\"isWrap() ? 'libs-ui-icon-unwrap' : 'libs-ui-icon-wrap'\"\n [classInclude]=\"'mo-lib-p-0px mo-lib-mr-16px'\"\n (outClick)=\"handlerLineWrap()\" />\n <libs_ui-components-buttons-button\n [type]=\"'button-link-third'\"\n [label]=\"'i18n_copy'\"\n [sizeButton]=\"'small'\"\n [classIconLeft]=\"'libs-ui-icon-copy'\"\n [classInclude]=\"'mo-lib-p-0px'\"\n (outClick)=\"handlerCopy()\" />\n </div>\n </div>\n }\n <div #containerPreview></div>\n</div>\n", styles: [":host ::ng-deep .libs-ui-preview-data-container{background-color:var(--background-color)!important}:host ::ng-deep .libs-ui-preview-data-container .cm-line{white-space:pre-wrap}:host ::ng-deep .libs-ui-preview-data-container .cm-lintRange-error{background-color:#ff323233;border-bottom:2px solid red}:host ::ng-deep .libs-ui-preview-data-container .cm-lintRange-warning{background-color:#ffc80026}:host ::ng-deep .libs-ui-preview-data-container .cm-tooltip-lint{background:#fff8f8;color:#d32f2f;border:1px solid #f44336;padding:8px 10px;font-size:13px;font-family:Inter,sans-serif;border-radius:6px;box-shadow:0 2px 8px #ff000026}:host ::ng-deep .libs-ui-preview-data-container .cm-focused{outline:none!important}:host ::ng-deep .libs-ui-preview-data-container .cm-gutters{background-color:var(--background-color)!important}\n"] }]
254
+ }] });
255
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJldmlldy10ZXh0LWRhdGEuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL3ByZXZpZXctdGV4dC1kYXRhL3NyYy9wcmV2aWV3LXRleHQtZGF0YS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvcHJldmlldy10ZXh0LWRhdGEvc3JjL3ByZXZpZXctdGV4dC1kYXRhLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHVEQUF1RDtBQUN2RCxPQUFPLEVBQWlCLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQWMsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekosT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDekMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzdDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM3QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDekQsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzdDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDM0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2pELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMzQyxP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Q0FBQztZQUN2QixPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUF5QyxDQUFDLENBQUM7UUFDdEUsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO1FBQ3JFLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxRQUFRLENBQy9CLFdBQVcsQ0FBQyxNQUFNLENBQUM7WUFDakIsR0FBRyxFQUFFLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRTtZQUNsRCxHQUFHLFVBQVU7U0FDZCxDQUFDLENBQ0gsQ0FBQztRQUNGLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDO1lBQ2xCLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ3ZCLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ3JCLFFBQVEsRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQzdCLGFBQWEsRUFBRSxVQUFVO1NBQzFCLENBQUMsQ0FBQztJQUNMLENBQUM7d0dBMVBVLHdDQUF3Qzs0RkFBeEMsd0NBQXdDLHVwQ0N2Q3JELGcwREF5Q0EsbzNCREpZLGlDQUFpQyxpMURBQUUsc0NBQXNDOzs0RkFFeEUsd0NBQXdDO2tCQVRwRCxTQUFTOytCQUVFLHNDQUFzQyxjQUdwQyxJQUFJLG1CQUNDLHVCQUF1QixDQUFDLE1BQU0sV0FDdEMsQ0FBQyxpQ0FBaUMsRUFBRSxzQ0FBc0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7IEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGNvbXB1dGVkLCBFbGVtZW50UmVmLCBpbmplY3QsIGlucHV0LCBtb2RlbCwgb3V0cHV0LCBzaWduYWwsIHZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgY3BwIH0gZnJvbSAnQGNvZGVtaXJyb3IvbGFuZy1jcHAnO1xuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGNvZGVtaXJyb3IvbGFuZy1jc3MnO1xuaW1wb3J0IHsgZ28gfSBmcm9tICdAY29kZW1pcnJvci9sYW5nLWdvJztcbmltcG9ydCB7IGh0bWwgfSBmcm9tICdAY29kZW1pcnJvci9sYW5nLWh0bWwnO1xuaW1wb3J0IHsgamF2YSB9IGZyb20gJ0Bjb2RlbWlycm9yL2xhbmctamF2YSc7XG5pbXBvcnQgeyBqYXZhc2NyaXB0IH0gZnJvbSAnQGNvZGVtaXJyb3IvbGFuZy1qYXZhc2NyaXB0JztcbmltcG9ydCB7IGpzb24gfSBmcm9tICdAY29kZW1pcnJvci9sYW5nLWpzb24nO1xuaW1wb3J0IHsgbWFya2Rvd24gfSBmcm9tICdAY29kZW1pcnJvci9sYW5nLW1hcmtkb3duJztcbmltcG9ydCB7IHBocCB9IGZyb20gJ0Bjb2RlbWlycm9yL2xhbmctcGhwJztcbmltcG9ydCB7IHB5dGhvbiB9IGZyb20gJ0Bjb2RlbWlycm9yL2xhbmctcHl0aG9uJztcbmltcG9ydCB7IHNxbCB9IGZyb20gJ0Bjb2RlbWlycm9yL2xhbmctc3FsJztcbmltcG9ydCB7IHhtbCB9IGZyb20gJ0Bjb2RlbWlycm9yL2xhbmcteG1sJztcbmltcG9ydCB7IHlhbWwgfSBmcm9tICdAY29kZW1pcnJvci9sYW5nLXlhbWwnO1xuaW1wb3J0IHsgU3RyZWFtTGFuZ3VhZ2UgfSBmcm9tICdAY29kZW1pcnJvci9sYW5ndWFnZSc7XG5pbXBvcnQgeyBEaWFnbm9zdGljLCBsaW50ZXIsIGxpbnRHdXR0ZXIgfSBmcm9tICdAY29kZW1pcnJvci9saW50JztcbmltcG9ydCB7IENvbXBhcnRtZW50LCBFZGl0b3JTdGF0ZSB9IGZyb20gJ0Bjb2RlbWlycm9yL3N0YXRlJztcbmltcG9ydCB7IGxpbmVOdW1iZXJzIH0gZnJvbSAnQGNvZGVtaXJyb3Ivdmlldyc7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzQnV0dG9uc0J1dHRvbkNvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtYnV0dG9ucy1idXR0b24nO1xuaW1wb3J0IHsgSUVtaXRTZWxlY3RLZXksIExpYnNVaUNvbXBvbmVudHNEcm9wZG93bkNvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtZHJvcGRvd24nO1xuaW1wb3J0IHsgTGlic1VpTm90aWZpY2F0aW9uU2VydmljZSB9IGZyb20gJ0BsaWJzLXVpL3NlcnZpY2VzLW5vdGlmaWNhdGlvbic7XG5pbXBvcnQgeyBnZXQgfSBmcm9tICdAbGlicy11aS91dGlscyc7XG5pbXBvcnQgeyBiYXNpY1NldHVwLCBFZGl0b3JWaWV3IH0gZnJvbSAnY29kZW1pcnJvcic7XG5pbXBvcnQgeyBQYXJzZXIgfSBmcm9tICdub2RlLXNxbC1wYXJzZXInO1xuaW1wb3J0IHsgaHR0cFJlcXVlc3RDb25maWdHZXRPcHRpb25zTGFuZywgb3B0aW9uc0xhbmcgfSBmcm9tICcuL3ByZXZpZXctdGV4dC1kYXRhLmRlZmluZSc7XG5pbXBvcnQgeyBJUHJldmlld1RleHREYXRhQ2hhbmdlLCBQUkVWSUVXX1RFWFRfREFUQV9MQU5HVUFHRV9TVVBQT1JUIH0gZnJvbSAnLi9wcmV2aWV3LXRleHQtZGF0YS5pbnRlcmZhY2VzJztcblxuY29uc3Qgc3FsUGFyc2VyID0gbmV3IFBhcnNlcigpO1xuXG5AQ29tcG9uZW50KHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdsaWJzX3VpLWNvbXBvbmVudHMtcHJldmlld190ZXh0X2RhdGEnLFxuICB0ZW1wbGF0ZVVybDogJy4vcHJldmlldy10ZXh0LWRhdGEuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9wcmV2aWV3LXRleHQtZGF0YS5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW0xpYnNVaUNvbXBvbmVudHNEcm9wZG93bkNvbXBvbmVudCwgTGlic1VpQ29tcG9uZW50c0J1dHRvbnNCdXR0b25Db21wb25lbnRdLFxufSlcbmV4cG9ydCBjbGFzcyBMaWJzVWlDb21wb25lbnRzUHJldmlld1RleHREYXRhQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG4gIHByaXZhdGUgZWRpdG9yVmlld0luc3RhbmNlPzogRWRpdG9yVmlldztcbiAgcHJpdmF0ZSB3cmFwQ29tcGFydG1lbnQgPSBuZXcgQ29tcGFydG1lbnQoKTtcbiAgcHJpdmF0ZSBsYW5ndWFnZUNvbXBhcnRtZW50ID0gbmV3IENvbXBhcnRtZW50KCk7XG4gIHByaXZhdGUgbGluZU51bWJlckNvbXBhcnRtZW50ID0gbmV3IENvbXBhcnRtZW50KCk7XG5cbiAgcHJvdGVjdGVkIGlzV3JhcCA9IHNpZ25hbDxib29sZWFuPih0cnVlKTtcbiAgcHJvdGVjdGVkIGNvbmZpZ0xvYWREYXRhSXNIdHRwQ29uZmlnID0gaHR0cFJlcXVlc3RDb25maWdHZXRPcHRpb25zTGFuZygpO1xuICBwcm90ZWN0ZWQgbGFiZWxMYW5nID0gY29tcHV0ZWQoKCkgPT4gb3B0aW9uc0xhbmcoKS5maW5kKChpdGVtKSA9PiBpdGVtLmlkID09PSB0aGlzLmxhbmdTZWxlY3RlZCgpKT8ubGFiZWwpO1xuXG4gIHJlYWRvbmx5IGNvbnRlbnQgPSBpbnB1dDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4oJycsIHsgdHJhbnNmb3JtOiAodmFsdWU/OiBzdHJpbmcpID0+IHZhbHVlID8/ICcnIH0pO1xuICByZWFkb25seSBsYW5nU2VsZWN0ZWQgPSBtb2RlbC5yZXF1aXJlZDxQUkVWSUVXX1RFWFRfREFUQV9MQU5HVUFHRV9TVVBQT1JUPigpO1xuICByZWFkb25seSBlZGl0YWJsZSA9IGlucHV0PGJvb2xlYW4sIGJvb2xlYW4gfCB1bmRlZmluZWQ+KGZhbHNlLCB7IHRyYW5zZm9ybTogKHZhbHVlPzogYm9vbGVhbikgPT4gdmFsdWUgPz8gZmFsc2UgfSk7XG4gIHJlYWRvbmx5IGhpZGRlbkFjdGlvbiA9IGlucHV0PGJvb2xlYW4sIGJvb2xlYW4gfCB1bmRlZmluZWQ+KGZhbHNlLCB7IHRyYW5zZm9ybTogKHZhbHVlPzogYm9vbGVhbikgPT4gdmFsdWUgPz8gZmFsc2UgfSk7XG4gIHJlYWRvbmx5IGxpbnRJZ25vcmVQYXR0ZXJucyA9IGlucHV0PEFycmF5PHN0cmluZz4sIEFycmF5PHN0cmluZz4gfCB1bmRlZmluZWQ+KFsnQ2Fubm90IHVzZSBpbXBvcnQgc3RhdGVtZW50IG91dHNpZGUgYSBtb2R1bGUnLCAnVW5leHBlY3RlZCB0b2tlbiBleHBvcnQnLCAnaW1wb3J0ICcsICdAYW5ndWxhci9jb3JlJ10sIHtcbiAgICB0cmFuc2Zvcm06ICh2YWx1ZT86IEFycmF5PHN0cmluZz4pID0+IHZhbHVlID8/IFsnQ2Fubm90IHVzZSBpbXBvcnQgc3RhdGVtZW50IG91dHNpZGUgYSBtb2R1bGUnLCAnVW5leHBlY3RlZCB0b2tlbiBleHBvcnQnLCAnaW1wb3J0ICcsICdAYW5ndWxhci9jb3JlJ10sXG4gIH0pO1xuXG4gIHJlYWRvbmx5IGJhY2tncm91bmQgPSBpbnB1dDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4oJyNmOGY5ZmEnLCB7IHRyYW5zZm9ybTogKHZhbHVlPzogc3RyaW5nKSA9PiB2YWx1ZSA/PyAnI2Y4ZjlmYScgfSk7XG5cbiAgcmVhZG9ubHkgb3V0Q2hhbmdlID0gb3V0cHV0PElQcmV2aWV3VGV4dERhdGFDaGFuZ2U+KCk7XG4gIHJlYWRvbmx5IHN5bnRheEVycm9ycyA9IG91dHB1dDxEaWFnbm9zdGljW10+KCk7XG5cbiAgcHJpdmF0ZSBjb250YWluZXJQcmV2aWV3ID0gdmlld0NoaWxkLnJlcXVpcmVkPEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+PignY29udGFpbmVyUHJldmlldycpO1xuXG4gIHByaXZhdGUgbm90aWZpY2F0aW9uU2VydmljZSA9IGluamVjdChMaWJzVWlOb3RpZmljYXRpb25TZXJ2aWNlKTtcbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMuZWRpdG9yVmlld0luc3RhbmNlID0gbmV3IEVkaXRvclZpZXcoeyAuLi50aGlzLmdldEV4dGVuc2lvbnNCeUxhbmd1YWdlKHRoaXMubGFuZ1NlbGVjdGVkKCkpLCBkb2M6IHRoaXMuY29udGVudCgpLCBwYXJlbnQ6IHRoaXMuY29udGFpbmVyUHJldmlldygpLm5hdGl2ZUVsZW1lbnQgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldEV4dGVuc2lvbnNCeUxhbmd1YWdlKGxhbmc6IFBSRVZJRVdfVEVYVF9EQVRBX0xBTkdVQUdFX1NVUFBPUlQpOiBhbnkge1xuICAgIGxldCBmb3JtYXRCeUxhbmdGdW5jdGlvbjogYW55ID0gU3RyZWFtTGFuZ3VhZ2UuZGVmaW5lKHtcbiAgICAgIHRva2VuKHN0cmVhbTogYW55KSB7XG4gICAgICAgIHN0cmVhbS5za2lwVG9FbmQoKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9LFxuICAgIH0pO1xuICAgIGxldCBsaW50RnVuY3Rpb24gPSBsaW50ZXIoKCkgPT4gW10pO1xuXG4gICAgY29uc3QgbG93ZXJMYW5nID0gbGFuZy50b0xvd2VyQ2FzZSgpO1xuXG4gICAgc3dpdGNoIChsb3dlckxhbmcpIHtcbiAgICAgIGNhc2UgJ2phdmFzY3JpcHQnOlxuICAgICAgICBmb3JtYXRCeUxhbmdGdW5jdGlvbiA9IGphdmFzY3JpcHQoeyBqc3g6IHRydWUsIHR5cGVzY3JpcHQ6IHRydWUgfSk7XG4gICAgICAgIGxpbnRGdW5jdGlvbiA9IHRoaXMuanNMaW50ZXJGbigpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnaHRtbCc6XG4gICAgICAgIGZvcm1hdEJ5TGFuZ0Z1bmN0aW9uID0gaHRtbCgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnY3NzJzpcbiAgICAgICAgZm9ybWF0QnlMYW5nRnVuY3Rpb24gPSBjc3MoKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ21hcmtkb3duJzpcbiAgICAgICAgZm9ybWF0QnlMYW5nRnVuY3Rpb24gPSBtYXJrZG93bigpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnanNvbic6XG4gICAgICAgIGZvcm1hdEJ5TGFuZ0Z1bmN0aW9uID0ganNvbigpO1xuICAgICAgICBsaW50RnVuY3Rpb24gPSB0aGlzLmpzb25MaW50ZXJGbigpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnc3FsJzpcbiAgICAgICAgZm9ybWF0QnlMYW5nRnVuY3Rpb24gPSBzcWwoKTtcbiAgICAgICAgbGludEZ1bmN0aW9uID0gdGhpcy5zcWxMaW50ZXJGbigpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAneG1sJzpcbiAgICAgICAgZm9ybWF0QnlMYW5nRnVuY3Rpb24gPSB4bWwoKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ3lhbWwnOlxuICAgICAgICBmb3JtYXRCeUxhbmdGdW5jdGlvbiA9IHlhbWwoKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ3B5dGhvbic6XG4gICAgICAgIGZvcm1hdEJ5TGFuZ0Z1bmN0aW9uID0gcHl0aG9uKCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdqYXZhJzpcbiAgICAgICAgZm9ybWF0QnlMYW5nRnVuY3Rpb24gPSBqYXZhKCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdjcHAnOlxuICAgICAgICBmb3JtYXRCeUxhbmdGdW5jdGlvbiA9IGNwcCgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAncGhwJzpcbiAgICAgICAgZm9ybWF0QnlMYW5nRnVuY3Rpb24gPSBwaHAoKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ2dvJzpcbiAgICAgICAgZm9ybWF0QnlMYW5nRnVuY3Rpb24gPSBnbygpO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgZXh0ZW5zaW9uczogW1xuICAgICAgICBiYXNpY1NldHVwLFxuICAgICAgICB0aGlzLmxhbmd1YWdlQ29tcGFydG1lbnQub2YoZm9ybWF0QnlMYW5nRnVuY3Rpb24pLFxuICAgICAgICB0aGlzLmxpZ2h0VGhlbWUoKSxcbiAgICAgICAgRWRpdG9yVmlldy5lZGl0YWJsZS5vZih0aGlzLmVkaXRhYmxlKCkpLFxuICAgICAgICB0aGlzLndyYXBDb21wYXJ0bWVudC5vZihFZGl0b3JWaWV3LmxpbmVXcmFwcGluZyksXG4gICAgICAgIHRoaXMubGluZU51bWJlckNvbXBhcnRtZW50Lm9mKGxpbmVOdW1iZXJzKCkpLFxuICAgICAgICBsaW50R3V0dGVyKCksXG4gICAgICAgIHRoaXMuY3VzdG9tQnJhY2tldFRoZW1lKCksXG4gICAgICAgIGxpbnRGdW5jdGlvbixcbiAgICAgICAgRWRpdG9yVmlldy51cGRhdGVMaXN0ZW5lci5vZigodXBkYXRlOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAodXBkYXRlLmRvY0NoYW5nZWQgJiYgdGhpcy5lZGl0YWJsZSgpKSB7XG4gICAgICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IHVwZGF0ZS5zdGF0ZS5kb2MudG9TdHJpbmcoKTtcblxuICAgICAgICAgICAgdGhpcy5vdXRDaGFuZ2UuZW1pdCh7XG4gICAgICAgICAgICAgIGNvbnRlbnQ6IG5ld1ZhbHVlLFxuICAgICAgICAgICAgICBpc1dyYXA6IHRoaXMuaXNXcmFwKCksXG4gICAgICAgICAgICAgIGxhbmd1YWdlOiB0aGlzLmxhbmdTZWxlY3RlZCgpLFxuICAgICAgICAgICAgICBjb250ZXh0Q2hhbmdlOiAnY29udGVudCcsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgXSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBsaWdodFRoZW1lKCkge1xuICAgIHJldHVybiBFZGl0b3JWaWV3LnRoZW1lKHtcbiAgICAgICcmJzogeyBiYWNrZ3JvdW5kQ29sb3I6IHRoaXMuYmFja2dyb3VuZCgpLCBjb2xvcjogJyMzMzMnIH0sXG4gICAgICAnLmNtLWNvbnRlbnQnOiB7IGNhcmV0Q29sb3I6ICcjMTExJyB9LFxuICAgICAgJy5jbS1hY3RpdmVMaW5lJzogeyBiYWNrZ3JvdW5kQ29sb3I6ICcjZjBmMGYwJyB9LFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjdXN0b21CcmFja2V0VGhlbWUoKSB7XG4gICAgcmV0dXJuIEVkaXRvclZpZXcudGhlbWUoe1xuICAgICAgJy5jbS1tYXRjaGluZ0JyYWNrZXQnOiB7XG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3JnYmEoMTAwLCAyMDAsIDI1NSwgMC4xNSknLCAvLyB4YW5oIG5o4bq5IHRyb25nIHN14buRdFxuICAgICAgICBib3JkZXI6ICcxcHggc29saWQgcmdiYSgxMDAsIDIwMCwgMjU1LCAwLjQpJyxcbiAgICAgICAgYm9yZGVyUmFkaXVzOiAnM3B4JyxcbiAgICAgICAgdHJhbnNpdGlvbjogJ2FsbCAwLjJzIGVhc2UnLFxuICAgICAgfSxcbiAgICAgICcuY20tbm9ubWF0Y2hpbmdCcmFja2V0Jzoge1xuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICdyZ2JhKDI1NSwgMTAwLCAxMDAsIDAuMTUpJywgLy8gxJHhu48gbmjhurlcbiAgICAgICAgYm9yZGVyOiAnMXB4IHNvbGlkIHJnYmEoMjU1LCAxMDAsIDEwMCwgMC4zKScsXG4gICAgICAgIGJvcmRlclJhZGl1czogJzNweCcsXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBqc0xpbnRlckZuKCkge1xuICAgIHJldHVybiBsaW50ZXIoKHZpZXc6IGFueSkgPT4ge1xuICAgICAgY29uc3QgdGV4dCA9IHZpZXcuc3RhdGUuZG9jLnRvU3RyaW5nKCk7XG4gICAgICBjb25zdCBkaWFnbm9zdGljczogRGlhZ25vc3RpY1tdID0gW107XG4gICAgICB0cnkge1xuICAgICAgICBuZXcgRnVuY3Rpb24odGV4dCk7IC8vIHRlc3QgcGFyc2UgY29kZVxuICAgICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgICAgaWYgKCF0aGlzLmxpbnRJZ25vcmVQYXR0ZXJucygpLnNvbWUoKHBhdHRlcm46IGFueSkgPT4gZXJyLm1lc3NhZ2UuaW5jbHVkZXMocGF0dGVybikpKSB7XG4gICAgICAgICAgZGlhZ25vc3RpY3MucHVzaCh7XG4gICAgICAgICAgICBmcm9tOiAwLFxuICAgICAgICAgICAgdG86IHRleHQubGVuZ3RoLFxuICAgICAgICAgICAgc2V2ZXJpdHk6ICdlcnJvcicsXG4gICAgICAgICAgICBtZXNzYWdlOiBlcnIubWVzc2FnZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLnN5bnRheEVycm9ycy5lbWl0KGRpYWdub3N0aWNzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGRpYWdub3N0aWNzO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBqc29uTGludGVyRm4oKSB7XG4gICAgcmV0dXJuIGxpbnRlcigodmlldzogYW55KSA9PiB7XG4gICAgICBjb25zdCB0ZXh0ID0gdmlldy5zdGF0ZS5kb2MudG9TdHJpbmcoKTtcbiAgICAgIGNvbnN0IGRpYWdub3N0aWNzOiBEaWFnbm9zdGljW10gPSBbXTtcbiAgICAgIHRyeSB7XG4gICAgICAgIEpTT04ucGFyc2UodGV4dCk7XG4gICAgICB9IGNhdGNoIChlcnI6IHVua25vd24pIHtcbiAgICAgICAgZGlhZ25vc3RpY3MucHVzaCh7XG4gICAgICAgICAgZnJvbTogMCxcbiAgICAgICAgICB0bzogdGV4dC5sZW5ndGgsXG4gICAgICAgICAgc2V2ZXJpdHk6ICdlcnJvcicsXG4gICAgICAgICAgbWVzc2FnZTogZ2V0KGVyciwgJ21lc3NhZ2UnLCAnJyksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgdGhpcy5zeW50YXhFcnJvcnMuZW1pdChkaWFnbm9zdGljcyk7XG4gICAgICByZXR1cm4gZGlhZ25vc3RpY3M7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHNxbExpbnRlckZuKCkge1xuICAgIHJldHVybiBsaW50ZXIoKHZpZXc6IGFueSkgPT4ge1xuICAgICAgY29uc3QgdGV4dCA9IHZpZXcuc3RhdGUuZG9jLnRvU3RyaW5nKCk7XG4gICAgICBjb25zdCBkaWFnbm9zdGljczogRGlhZ25vc3RpY1tdID0gW107XG4gICAgICB0cnkge1xuICAgICAgICBzcWxQYXJzZXIuYXN0aWZ5KHRleHQpO1xuICAgICAgfSBjYXRjaCAoZXJyOiB1bmtub3duKSB7XG4gICAgICAgIGRpYWdub3N0aWNzLnB1c2goe1xuICAgICAgICAgIGZyb206IDAsXG4gICAgICAgICAgdG86IHRleHQubGVuZ3RoLFxuICAgICAgICAgIHNldmVyaXR5OiAnZXJyb3InLFxuICAgICAgICAgIG1lc3NhZ2U6IGdldChlcnIsICdtZXNzYWdlJywgJycpLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc3ludGF4RXJyb3JzLmVtaXQoZGlhZ25vc3RpY3MpO1xuICAgICAgcmV0dXJuIGRpYWdub3N0aWNzO1xuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJDb3B5KCkge1xuICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHRoaXMuY29udGVudCgpIHx8ICcnKTtcbiAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc2hvd0NvbXBUeXBlVGV4dEluZm8oJ1NhbyBjaMOpcCB0aMOgbmggY8O0bmcnKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyTGluZVdyYXAoKSB7XG4gICAgdGhpcy5pc1dyYXAudXBkYXRlKCh2YWw6IGFueSkgPT4gIXZhbCk7XG4gICAgdGhpcy5lZGl0b3JWaWV3SW5zdGFuY2U/LmRpc3BhdGNoKHtcbiAgICAgIGVmZmVjdHM6IHRoaXMud3JhcENvbXBhcnRtZW50LnJlY29uZmlndXJlKHRoaXMuaXNXcmFwKCkgPyBFZGl0b3JWaWV3LmxpbmVXcmFwcGluZyA6IFtdKSxcbiAgICB9KTtcblxuICAgIHRoaXMuZWRpdG9yVmlld0luc3RhbmNlPy5kaXNwYXRjaCh7XG4gICAgICBlZmZlY3RzOiB0aGlzLmxpbmVOdW1iZXJDb21wYXJ0bWVudC5yZWNvbmZpZ3VyZShcbiAgICAgICAgdGhpcy5pc1dyYXAoKSA/IGxpbmVOdW1iZXJzKCkgOiBbXSAvLyDwn5GIIG7hur91IHThuq90IHRow6wgcmVtb3ZlIGV4dGVuc2lvblxuICAgICAgKSxcbiAgICB9KTtcbiAgICB0aGlzLm91dENoYW5nZS5lbWl0KHtcbiAgICAgIGNvbnRlbnQ6IHRoaXMuY29udGVudCgpLFxuICAgICAgaXNXcmFwOiB0aGlzLmlzV3JhcCgpLFxuICAgICAgbGFuZ3VhZ2U6IHRoaXMubGFuZ1NlbGVjdGVkKCksXG4gICAgICBjb250ZXh0Q2hhbmdlOiAnaXNXcmFwJyxcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyU2VsZWN0S2V5KGRhdGE/OiBJRW1pdFNlbGVjdEtleSkge1xuICAgIGlmICghZGF0YSB8fCAhZGF0YS5rZXkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5sYW5nU2VsZWN0ZWQuc2V0KGRhdGEua2V5IGFzIFBSRVZJRVdfVEVYVF9EQVRBX0xBTkdVQUdFX1NVUFBPUlQpO1xuICAgIGNvbnN0IGV4dGVuc2lvbnMgPSB0aGlzLmdldEV4dGVuc2lvbnNCeUxhbmd1YWdlKHRoaXMubGFuZ1NlbGVjdGVkKCkpO1xuICAgIHRoaXMuZWRpdG9yVmlld0luc3RhbmNlPy5zZXRTdGF0ZShcbiAgICAgIEVkaXRvclN0YXRlLmNyZWF0ZSh7XG4gICAgICAgIGRvYzogdGhpcy5lZGl0b3JWaWV3SW5zdGFuY2U/LnN0YXRlLmRvYy50b1N0cmluZygpLFxuICAgICAgICAuLi5leHRlbnNpb25zLFxuICAgICAgfSlcbiAgICApO1xuICAgIHRoaXMub3V0Q2hhbmdlLmVtaXQoe1xuICAgICAgY29udGVudDogdGhpcy5jb250ZW50KCksXG4gICAgICBpc1dyYXA6IHRoaXMuaXNXcmFwKCksXG4gICAgICBsYW5ndWFnZTogdGhpcy5sYW5nU2VsZWN0ZWQoKSxcbiAgICAgIGNvbnRleHRDaGFuZ2U6ICdsYW5ndWFnZScsXG4gICAgfSk7XG4gIH1cbn1cbiIsIjxkaXZcbiAgY2xhc3M9XCJsaWJzLXVpLXByZXZpZXctZGF0YS1jb250YWluZXIgZmxleCBmbGV4LWNvbCB3LWZ1bGwgaC1hdXRvIHJvdW5kZWQtWzhweF0gbGlicy11aS1ib3JkZXItZ2VuZXJhbCBweC1bOHB4XVwiXG4gIFtzdHlsZS4tLWJhY2tncm91bmQtY29sb3JdPVwiYmFja2dyb3VuZCgpXCJcbiAgW2NsYXNzLnB0LVs4cHhdXT1cIiFoaWRkZW5BY3Rpb24oKVwiPlxuICBAaWYgKCFoaWRkZW5BY3Rpb24oKSkge1xuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBjb250ZW50LWJldHdlZW4gY29sb3ItWyM2YTczODNdXCI+XG4gICAgICA8bGlic191aS1jb21wb25lbnRzLWRyb3Bkb3duXG4gICAgICAgIGNsYXNzSW5jbHVkZT1cInctWzIwMHB4XVwiXG4gICAgICAgIFtsaXN0Q29uZmlnXT1cImNvbmZpZ0xvYWREYXRhSXNIdHRwQ29uZmlnXCJcbiAgICAgICAgW2xpc3RNYXhJdGVtU2hvd109XCI1XCJcbiAgICAgICAgW2lzTmdDb250ZW50XT1cInRydWVcIlxuICAgICAgICBbcmVhZG9ubHldPVwiIWVkaXRhYmxlKClcIlxuICAgICAgICBbbGlzdEhhc0J1dHRvblVuU2VsZWN0T3B0aW9uXT1cImZhbHNlXCJcbiAgICAgICAgKG91dFNlbGVjdEtleSk9XCJoYW5kbGVyU2VsZWN0S2V5KCRldmVudClcIj5cbiAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1idXR0b25zLWJ1dHRvblxuICAgICAgICAgIFt0eXBlXT1cIididXR0b24tbGluay10aGlyZCdcIlxuICAgICAgICAgIFtsYWJlbF09XCJsYWJlbExhbmcoKSB8fCAnJ1wiXG4gICAgICAgICAgW3NpemVCdXR0b25dPVwiJ3NtYWxsJ1wiXG4gICAgICAgICAgW2NsYXNzSWNvblJpZ2h0XT1cImVkaXRhYmxlKCkgPyAnbGlicy11aS1pY29uLW1vdmUtcmlnaHQgcm90YXRlLTkwJyA6ICcnXCJcbiAgICAgICAgICBbY2xhc3NJbmNsdWRlXT1cIichcC1bMHB4XScgKyAoZWRpdGFibGUoKSA/ICcnIDogJyFwb2ludGVyLWV2ZW50cy1ub25lICFjdXJzb3ItZGVmYXVsdCBob3ZlcjohdGV4dC1bIzZBNzM4M10nKVwiIC8+XG4gICAgICA8L2xpYnNfdWktY29tcG9uZW50cy1kcm9wZG93bj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uXG4gICAgICAgICAgW3R5cGVdPVwiJ2J1dHRvbi1saW5rLXRoaXJkJ1wiXG4gICAgICAgICAgW2xhYmVsXT1cImlzV3JhcCgpID8gJ2kxOG5fcmVtb3ZlX2xpbmVfd3JhcCcgOiAnaTE4bl9saW5lX3dyYXAnXCJcbiAgICAgICAgICBbc2l6ZUJ1dHRvbl09XCInc21hbGwnXCJcbiAgICAgICAgICBbY2xhc3NJY29uTGVmdF09XCJpc1dyYXAoKSA/ICdsaWJzLXVpLWljb24tdW53cmFwJyA6ICdsaWJzLXVpLWljb24td3JhcCdcIlxuICAgICAgICAgIFtjbGFzc0luY2x1ZGVdPVwiJ21vLWxpYi1wLTBweCBtby1saWItbXItMTZweCdcIlxuICAgICAgICAgIChvdXRDbGljayk9XCJoYW5kbGVyTGluZVdyYXAoKVwiIC8+XG4gICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtYnV0dG9ucy1idXR0b25cbiAgICAgICAgICBbdHlwZV09XCInYnV0dG9uLWxpbmstdGhpcmQnXCJcbiAgICAgICAgICBbbGFiZWxdPVwiJ2kxOG5fY29weSdcIlxuICAgICAgICAgIFtzaXplQnV0dG9uXT1cIidzbWFsbCdcIlxuICAgICAgICAgIFtjbGFzc0ljb25MZWZ0XT1cIidsaWJzLXVpLWljb24tY29weSdcIlxuICAgICAgICAgIFtjbGFzc0luY2x1ZGVdPVwiJ21vLWxpYi1wLTBweCdcIlxuICAgICAgICAgIChvdXRDbGljayk9XCJoYW5kbGVyQ29weSgpXCIgLz5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICB9XG4gIDxkaXYgI2NvbnRhaW5lclByZXZpZXc+PC9kaXY+XG48L2Rpdj5cbiJdfQ==
@@ -0,0 +1,34 @@
1
+ import { signal } from '@angular/core';
2
+ import { returnListObject } from '@libs-ui/services-http-request';
3
+ import { UtilsHttpParamsRequest } from '@libs-ui/utils';
4
+ export const optionsLang = () => [
5
+ { id: 'text', label: 'Plain Text' },
6
+ { id: 'javascript', label: 'JavaScript/TypeScript' },
7
+ { id: 'html', label: 'HTML' },
8
+ { id: 'css', label: 'CSS/SCSS/SASS' },
9
+ { id: 'markdown', label: 'Markdown' },
10
+ { id: 'json', label: 'JSON' },
11
+ { id: 'sql', label: 'SQL' },
12
+ { id: 'xml', label: 'XML' },
13
+ { id: 'yaml', label: 'YAML' },
14
+ { id: 'python', label: 'Python' },
15
+ { id: 'java', label: 'Java' },
16
+ { id: 'cpp', label: 'C/C++' },
17
+ { id: 'php', label: 'PHP' },
18
+ { id: 'go', label: 'Go' },
19
+ ];
20
+ export const httpRequestConfigGetOptionsLang = () => {
21
+ return {
22
+ type: 'text',
23
+ httpRequestData: signal({
24
+ objectInstance: returnListObject(optionsLang()),
25
+ functionName: 'list',
26
+ argumentsValue: [new UtilsHttpParamsRequest({ fromObject: { page: 1, per_page: 40 } })],
27
+ }),
28
+ configTemplateText: signal({
29
+ fieldKey: 'id',
30
+ notUseVirtualScroll: true,
31
+ }),
32
+ };
33
+ };
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJldmlldy10ZXh0LWRhdGEuZGVmaW5lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL3ByZXZpZXctdGV4dC1kYXRhL3NyYy9wcmV2aWV3LXRleHQtZGF0YS5kZWZpbmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV2QyxPQUFPLEVBQXNCLGdCQUFnQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDdEYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEQsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLEdBQUcsRUFBRSxDQUFDO0lBQy9CLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFO0lBQ25DLEVBQUUsRUFBRSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsdUJBQXVCLEVBQUU7SUFDcEQsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUU7SUFDN0IsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxlQUFlLEVBQUU7SUFDckMsRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUU7SUFDckMsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUU7SUFDN0IsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7SUFDM0IsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7SUFDM0IsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUU7SUFDN0IsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUU7SUFDakMsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUU7SUFDN0IsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUU7SUFDN0IsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7SUFDM0IsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUU7Q0FDMUIsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLCtCQUErQixHQUFHLEdBQW9CLEVBQUU7SUFDbkUsT0FBTztRQUNMLElBQUksRUFBRSxNQUFNO1FBQ1osZUFBZSxFQUFFLE1BQU0sQ0FBcUI7WUFDMUMsY0FBYyxFQUFFLGdCQUFnQixDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQy9DLFlBQVksRUFBRSxNQUFNO1lBQ3BCLGNBQWMsRUFBRSxDQUFDLElBQUksc0JBQXNCLENBQUMsRUFBRSxVQUFVLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7U0FDeEYsQ0FBQztRQUNGLGtCQUFrQixFQUFFLE1BQU0sQ0FBQztZQUN6QixRQUFRLEVBQUUsSUFBSTtZQUNkLG1CQUFtQixFQUFFLElBQUk7U0FDMUIsQ0FBQztLQUNILENBQUM7QUFDSixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElMaXN0Q29uZmlnSXRlbSB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtbGlzdCc7XG5pbXBvcnQgeyBJSHR0cFJlcXVlc3RDb25maWcsIHJldHVybkxpc3RPYmplY3QgfSBmcm9tICdAbGlicy11aS9zZXJ2aWNlcy1odHRwLXJlcXVlc3QnO1xuaW1wb3J0IHsgVXRpbHNIdHRwUGFyYW1zUmVxdWVzdCB9IGZyb20gJ0BsaWJzLXVpL3V0aWxzJztcblxuZXhwb3J0IGNvbnN0IG9wdGlvbnNMYW5nID0gKCkgPT4gW1xuICB7IGlkOiAndGV4dCcsIGxhYmVsOiAnUGxhaW4gVGV4dCcgfSxcbiAgeyBpZDogJ2phdmFzY3JpcHQnLCBsYWJlbDogJ0phdmFTY3JpcHQvVHlwZVNjcmlwdCcgfSxcbiAgeyBpZDogJ2h0bWwnLCBsYWJlbDogJ0hUTUwnIH0sXG4gIHsgaWQ6ICdjc3MnLCBsYWJlbDogJ0NTUy9TQ1NTL1NBU1MnIH0sXG4gIHsgaWQ6ICdtYXJrZG93bicsIGxhYmVsOiAnTWFya2Rvd24nIH0sXG4gIHsgaWQ6ICdqc29uJywgbGFiZWw6ICdKU09OJyB9LFxuICB7IGlkOiAnc3FsJywgbGFiZWw6ICdTUUwnIH0sXG4gIHsgaWQ6ICd4bWwnLCBsYWJlbDogJ1hNTCcgfSxcbiAgeyBpZDogJ3lhbWwnLCBsYWJlbDogJ1lBTUwnIH0sXG4gIHsgaWQ6ICdweXRob24nLCBsYWJlbDogJ1B5dGhvbicgfSxcbiAgeyBpZDogJ2phdmEnLCBsYWJlbDogJ0phdmEnIH0sXG4gIHsgaWQ6ICdjcHAnLCBsYWJlbDogJ0MvQysrJyB9LFxuICB7IGlkOiAncGhwJywgbGFiZWw6ICdQSFAnIH0sXG4gIHsgaWQ6ICdnbycsIGxhYmVsOiAnR28nIH0sXG5dO1xuXG5leHBvcnQgY29uc3QgaHR0cFJlcXVlc3RDb25maWdHZXRPcHRpb25zTGFuZyA9ICgpOiBJTGlzdENvbmZpZ0l0ZW0gPT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6ICd0ZXh0JyxcbiAgICBodHRwUmVxdWVzdERhdGE6IHNpZ25hbDxJSHR0cFJlcXVlc3RDb25maWc+KHtcbiAgICAgIG9iamVjdEluc3RhbmNlOiByZXR1cm5MaXN0T2JqZWN0KG9wdGlvbnNMYW5nKCkpLFxuICAgICAgZnVuY3Rpb25OYW1lOiAnbGlzdCcsXG4gICAgICBhcmd1bWVudHNWYWx1ZTogW25ldyBVdGlsc0h0dHBQYXJhbXNSZXF1ZXN0KHsgZnJvbU9iamVjdDogeyBwYWdlOiAxLCBwZXJfcGFnZTogNDAgfSB9KV0sXG4gICAgfSksXG4gICAgY29uZmlnVGVtcGxhdGVUZXh0OiBzaWduYWwoe1xuICAgICAgZmllbGRLZXk6ICdpZCcsXG4gICAgICBub3RVc2VWaXJ0dWFsU2Nyb2xsOiB0cnVlLFxuICAgIH0pLFxuICB9O1xufTtcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJldmlldy10ZXh0LWRhdGEuaW50ZXJmYWNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy9wcmV2aWV3LXRleHQtZGF0YS9zcmMvcHJldmlldy10ZXh0LWRhdGEuaW50ZXJmYWNlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHR5cGUgUFJFVklFV19URVhUX0RBVEFfTEFOR1VBR0VfU1VQUE9SVCA9ICdqYXZhc2NyaXB0JyB8ICdodG1sJyB8ICdjc3MnIHwgJ21hcmtkb3duJyB8ICdqc29uJyB8ICdzcWwnIHwgJ3htbCcgfCAneWFtbCcgfCAncHl0aG9uJyB8ICdqYXZhJyB8ICdjcHAnIHwgJ3BocCcgfCAnZ28nIHwgJ3RleHQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElQcmV2aWV3VGV4dERhdGFDaGFuZ2Uge1xuICBjb250ZW50OiBzdHJpbmc7XG4gIGlzV3JhcDogYm9vbGVhbjtcbiAgbGFuZ3VhZ2U6IFBSRVZJRVdfVEVYVF9EQVRBX0xBTkdVQUdFX1NVUFBPUlQ7XG4gIGNvbnRleHRDaGFuZ2U6ICdjb250ZW50JyB8ICdsYW5ndWFnZScgfCAnaXNXcmFwJztcbn1cbiJdfQ==
@@ -0,0 +1,293 @@
1
+ import * as i0 from '@angular/core';
2
+ import { signal, computed, input, model, output, viewChild, inject, ChangeDetectionStrategy, Component } from '@angular/core';
3
+ import { cpp } from '@codemirror/lang-cpp';
4
+ import { css } from '@codemirror/lang-css';
5
+ import { go } from '@codemirror/lang-go';
6
+ import { html } from '@codemirror/lang-html';
7
+ import { java } from '@codemirror/lang-java';
8
+ import { javascript } from '@codemirror/lang-javascript';
9
+ import { json } from '@codemirror/lang-json';
10
+ import { markdown } from '@codemirror/lang-markdown';
11
+ import { php } from '@codemirror/lang-php';
12
+ import { python } from '@codemirror/lang-python';
13
+ import { sql } from '@codemirror/lang-sql';
14
+ import { xml } from '@codemirror/lang-xml';
15
+ import { yaml } from '@codemirror/lang-yaml';
16
+ import { StreamLanguage } from '@codemirror/language';
17
+ import { linter, lintGutter } from '@codemirror/lint';
18
+ import { Compartment, EditorState } from '@codemirror/state';
19
+ import { lineNumbers } from '@codemirror/view';
20
+ import { LibsUiComponentsButtonsButtonComponent } from '@libs-ui/components-buttons-button';
21
+ import { LibsUiComponentsDropdownComponent } from '@libs-ui/components-dropdown';
22
+ import { LibsUiNotificationService } from '@libs-ui/services-notification';
23
+ import { UtilsHttpParamsRequest, get } from '@libs-ui/utils';
24
+ import { EditorView, basicSetup } from 'codemirror';
25
+ import { Parser } from 'node-sql-parser';
26
+ import { returnListObject } from '@libs-ui/services-http-request';
27
+
28
+ const optionsLang = () => [
29
+ { id: 'text', label: 'Plain Text' },
30
+ { id: 'javascript', label: 'JavaScript/TypeScript' },
31
+ { id: 'html', label: 'HTML' },
32
+ { id: 'css', label: 'CSS/SCSS/SASS' },
33
+ { id: 'markdown', label: 'Markdown' },
34
+ { id: 'json', label: 'JSON' },
35
+ { id: 'sql', label: 'SQL' },
36
+ { id: 'xml', label: 'XML' },
37
+ { id: 'yaml', label: 'YAML' },
38
+ { id: 'python', label: 'Python' },
39
+ { id: 'java', label: 'Java' },
40
+ { id: 'cpp', label: 'C/C++' },
41
+ { id: 'php', label: 'PHP' },
42
+ { id: 'go', label: 'Go' },
43
+ ];
44
+ const httpRequestConfigGetOptionsLang = () => {
45
+ return {
46
+ type: 'text',
47
+ httpRequestData: signal({
48
+ objectInstance: returnListObject(optionsLang()),
49
+ functionName: 'list',
50
+ argumentsValue: [new UtilsHttpParamsRequest({ fromObject: { page: 1, per_page: 40 } })],
51
+ }),
52
+ configTemplateText: signal({
53
+ fieldKey: 'id',
54
+ notUseVirtualScroll: true,
55
+ }),
56
+ };
57
+ };
58
+
59
+ /* eslint-disable @typescript-eslint/no-explicit-any */
60
+ const sqlParser = new Parser();
61
+ class LibsUiComponentsPreviewTextDataComponent {
62
+ editorViewInstance;
63
+ wrapCompartment = new Compartment();
64
+ languageCompartment = new Compartment();
65
+ lineNumberCompartment = new Compartment();
66
+ isWrap = signal(true);
67
+ configLoadDataIsHttpConfig = httpRequestConfigGetOptionsLang();
68
+ labelLang = computed(() => optionsLang().find((item) => item.id === this.langSelected())?.label);
69
+ content = input('', { transform: (value) => value ?? '' });
70
+ langSelected = model.required();
71
+ editable = input(false, { transform: (value) => value ?? false });
72
+ hiddenAction = input(false, { transform: (value) => value ?? false });
73
+ lintIgnorePatterns = input(['Cannot use import statement outside a module', 'Unexpected token export', 'import ', '@angular/core'], {
74
+ transform: (value) => value ?? ['Cannot use import statement outside a module', 'Unexpected token export', 'import ', '@angular/core'],
75
+ });
76
+ background = input('#f8f9fa', { transform: (value) => value ?? '#f8f9fa' });
77
+ outChange = output();
78
+ syntaxErrors = output();
79
+ containerPreview = viewChild.required('containerPreview');
80
+ notificationService = inject(LibsUiNotificationService);
81
+ ngAfterViewInit() {
82
+ this.editorViewInstance = new EditorView({ ...this.getExtensionsByLanguage(this.langSelected()), doc: this.content(), parent: this.containerPreview().nativeElement });
83
+ }
84
+ getExtensionsByLanguage(lang) {
85
+ let formatByLangFunction = StreamLanguage.define({
86
+ token(stream) {
87
+ stream.skipToEnd();
88
+ return null;
89
+ },
90
+ });
91
+ let lintFunction = linter(() => []);
92
+ const lowerLang = lang.toLowerCase();
93
+ switch (lowerLang) {
94
+ case 'javascript':
95
+ formatByLangFunction = javascript({ jsx: true, typescript: true });
96
+ lintFunction = this.jsLinterFn();
97
+ break;
98
+ case 'html':
99
+ formatByLangFunction = html();
100
+ break;
101
+ case 'css':
102
+ formatByLangFunction = css();
103
+ break;
104
+ case 'markdown':
105
+ formatByLangFunction = markdown();
106
+ break;
107
+ case 'json':
108
+ formatByLangFunction = json();
109
+ lintFunction = this.jsonLinterFn();
110
+ break;
111
+ case 'sql':
112
+ formatByLangFunction = sql();
113
+ lintFunction = this.sqlLinterFn();
114
+ break;
115
+ case 'xml':
116
+ formatByLangFunction = xml();
117
+ break;
118
+ case 'yaml':
119
+ formatByLangFunction = yaml();
120
+ break;
121
+ case 'python':
122
+ formatByLangFunction = python();
123
+ break;
124
+ case 'java':
125
+ formatByLangFunction = java();
126
+ break;
127
+ case 'cpp':
128
+ formatByLangFunction = cpp();
129
+ break;
130
+ case 'php':
131
+ formatByLangFunction = php();
132
+ break;
133
+ case 'go':
134
+ formatByLangFunction = go();
135
+ break;
136
+ }
137
+ return {
138
+ extensions: [
139
+ basicSetup,
140
+ this.languageCompartment.of(formatByLangFunction),
141
+ this.lightTheme(),
142
+ EditorView.editable.of(this.editable()),
143
+ this.wrapCompartment.of(EditorView.lineWrapping),
144
+ this.lineNumberCompartment.of(lineNumbers()),
145
+ lintGutter(),
146
+ this.customBracketTheme(),
147
+ lintFunction,
148
+ EditorView.updateListener.of((update) => {
149
+ if (update.docChanged && this.editable()) {
150
+ const newValue = update.state.doc.toString();
151
+ this.outChange.emit({
152
+ content: newValue,
153
+ isWrap: this.isWrap(),
154
+ language: this.langSelected(),
155
+ contextChange: 'content',
156
+ });
157
+ }
158
+ }),
159
+ ],
160
+ };
161
+ }
162
+ lightTheme() {
163
+ return EditorView.theme({
164
+ '&': { backgroundColor: this.background(), color: '#333' },
165
+ '.cm-content': { caretColor: '#111' },
166
+ '.cm-activeLine': { backgroundColor: '#f0f0f0' },
167
+ });
168
+ }
169
+ customBracketTheme() {
170
+ return EditorView.theme({
171
+ '.cm-matchingBracket': {
172
+ backgroundColor: 'rgba(100, 200, 255, 0.15)', // xanh nhẹ trong suốt
173
+ border: '1px solid rgba(100, 200, 255, 0.4)',
174
+ borderRadius: '3px',
175
+ transition: 'all 0.2s ease',
176
+ },
177
+ '.cm-nonmatchingBracket': {
178
+ backgroundColor: 'rgba(255, 100, 100, 0.15)', // đỏ nhẹ
179
+ border: '1px solid rgba(255, 100, 100, 0.3)',
180
+ borderRadius: '3px',
181
+ },
182
+ });
183
+ }
184
+ jsLinterFn() {
185
+ return linter((view) => {
186
+ const text = view.state.doc.toString();
187
+ const diagnostics = [];
188
+ try {
189
+ new Function(text); // test parse code
190
+ }
191
+ catch (err) {
192
+ if (!this.lintIgnorePatterns().some((pattern) => err.message.includes(pattern))) {
193
+ diagnostics.push({
194
+ from: 0,
195
+ to: text.length,
196
+ severity: 'error',
197
+ message: err.message,
198
+ });
199
+ this.syntaxErrors.emit(diagnostics);
200
+ }
201
+ }
202
+ return diagnostics;
203
+ });
204
+ }
205
+ jsonLinterFn() {
206
+ return linter((view) => {
207
+ const text = view.state.doc.toString();
208
+ const diagnostics = [];
209
+ try {
210
+ JSON.parse(text);
211
+ }
212
+ catch (err) {
213
+ diagnostics.push({
214
+ from: 0,
215
+ to: text.length,
216
+ severity: 'error',
217
+ message: get(err, 'message', ''),
218
+ });
219
+ }
220
+ this.syntaxErrors.emit(diagnostics);
221
+ return diagnostics;
222
+ });
223
+ }
224
+ sqlLinterFn() {
225
+ return linter((view) => {
226
+ const text = view.state.doc.toString();
227
+ const diagnostics = [];
228
+ try {
229
+ sqlParser.astify(text);
230
+ }
231
+ catch (err) {
232
+ diagnostics.push({
233
+ from: 0,
234
+ to: text.length,
235
+ severity: 'error',
236
+ message: get(err, 'message', ''),
237
+ });
238
+ }
239
+ this.syntaxErrors.emit(diagnostics);
240
+ return diagnostics;
241
+ });
242
+ }
243
+ handlerCopy() {
244
+ navigator.clipboard.writeText(this.content() || '');
245
+ this.notificationService.showCompTypeTextInfo('Sao chép thành công');
246
+ }
247
+ handlerLineWrap() {
248
+ this.isWrap.update((val) => !val);
249
+ this.editorViewInstance?.dispatch({
250
+ effects: this.wrapCompartment.reconfigure(this.isWrap() ? EditorView.lineWrapping : []),
251
+ });
252
+ this.editorViewInstance?.dispatch({
253
+ effects: this.lineNumberCompartment.reconfigure(this.isWrap() ? lineNumbers() : [] // 👈 nếu tắt thì remove extension
254
+ ),
255
+ });
256
+ this.outChange.emit({
257
+ content: this.content(),
258
+ isWrap: this.isWrap(),
259
+ language: this.langSelected(),
260
+ contextChange: 'isWrap',
261
+ });
262
+ }
263
+ handlerSelectKey(data) {
264
+ if (!data || !data.key) {
265
+ return;
266
+ }
267
+ this.langSelected.set(data.key);
268
+ const extensions = this.getExtensionsByLanguage(this.langSelected());
269
+ this.editorViewInstance?.setState(EditorState.create({
270
+ doc: this.editorViewInstance?.state.doc.toString(),
271
+ ...extensions,
272
+ }));
273
+ this.outChange.emit({
274
+ content: this.content(),
275
+ isWrap: this.isWrap(),
276
+ language: this.langSelected(),
277
+ contextChange: 'language',
278
+ });
279
+ }
280
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiComponentsPreviewTextDataComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
281
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: LibsUiComponentsPreviewTextDataComponent, isStandalone: true, selector: "libs_ui-components-preview_text_data", inputs: { content: { classPropertyName: "content", publicName: "content", isSignal: true, isRequired: false, transformFunction: null }, langSelected: { classPropertyName: "langSelected", publicName: "langSelected", isSignal: true, isRequired: true, transformFunction: null }, editable: { classPropertyName: "editable", publicName: "editable", isSignal: true, isRequired: false, transformFunction: null }, hiddenAction: { classPropertyName: "hiddenAction", publicName: "hiddenAction", isSignal: true, isRequired: false, transformFunction: null }, lintIgnorePatterns: { classPropertyName: "lintIgnorePatterns", publicName: "lintIgnorePatterns", isSignal: true, isRequired: false, transformFunction: null }, background: { classPropertyName: "background", publicName: "background", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { langSelected: "langSelectedChange", outChange: "outChange", syntaxErrors: "syntaxErrors" }, viewQueries: [{ propertyName: "containerPreview", first: true, predicate: ["containerPreview"], descendants: true, isSignal: true }], ngImport: i0, template: "<div\n class=\"libs-ui-preview-data-container flex flex-col w-full h-auto rounded-[8px] libs-ui-border-general px-[8px]\"\n [style.--background-color]=\"background()\"\n [class.pt-[8px]]=\"!hiddenAction()\">\n @if (!hiddenAction()) {\n <div class=\"flex items-center content-between color-[#6a7383]\">\n <libs_ui-components-dropdown\n classInclude=\"w-[200px]\"\n [listConfig]=\"configLoadDataIsHttpConfig\"\n [listMaxItemShow]=\"5\"\n [isNgContent]=\"true\"\n [readonly]=\"!editable()\"\n [listHasButtonUnSelectOption]=\"false\"\n (outSelectKey)=\"handlerSelectKey($event)\">\n <libs_ui-components-buttons-button\n [type]=\"'button-link-third'\"\n [label]=\"labelLang() || ''\"\n [sizeButton]=\"'small'\"\n [classIconRight]=\"editable() ? 'libs-ui-icon-move-right rotate-90' : ''\"\n [classInclude]=\"'!p-[0px]' + (editable() ? '' : '!pointer-events-none !cursor-default hover:!text-[#6A7383]')\" />\n </libs_ui-components-dropdown>\n <div class=\"flex items-center\">\n <libs_ui-components-buttons-button\n [type]=\"'button-link-third'\"\n [label]=\"isWrap() ? 'i18n_remove_line_wrap' : 'i18n_line_wrap'\"\n [sizeButton]=\"'small'\"\n [classIconLeft]=\"isWrap() ? 'libs-ui-icon-unwrap' : 'libs-ui-icon-wrap'\"\n [classInclude]=\"'mo-lib-p-0px mo-lib-mr-16px'\"\n (outClick)=\"handlerLineWrap()\" />\n <libs_ui-components-buttons-button\n [type]=\"'button-link-third'\"\n [label]=\"'i18n_copy'\"\n [sizeButton]=\"'small'\"\n [classIconLeft]=\"'libs-ui-icon-copy'\"\n [classInclude]=\"'mo-lib-p-0px'\"\n (outClick)=\"handlerCopy()\" />\n </div>\n </div>\n }\n <div #containerPreview></div>\n</div>\n", styles: [":host ::ng-deep .libs-ui-preview-data-container{background-color:var(--background-color)!important}:host ::ng-deep .libs-ui-preview-data-container .cm-line{white-space:pre-wrap}:host ::ng-deep .libs-ui-preview-data-container .cm-lintRange-error{background-color:#ff323233;border-bottom:2px solid red}:host ::ng-deep .libs-ui-preview-data-container .cm-lintRange-warning{background-color:#ffc80026}:host ::ng-deep .libs-ui-preview-data-container .cm-tooltip-lint{background:#fff8f8;color:#d32f2f;border:1px solid #f44336;padding:8px 10px;font-size:13px;font-family:Inter,sans-serif;border-radius:6px;box-shadow:0 2px 8px #ff000026}:host ::ng-deep .libs-ui-preview-data-container .cm-focused{outline:none!important}:host ::ng-deep .libs-ui-preview-data-container .cm-gutters{background-color:var(--background-color)!important}\n"], dependencies: [{ kind: "component", type: LibsUiComponentsDropdownComponent, selector: "libs_ui-components-dropdown", inputs: ["useXssFilter", "popoverElementRefCustom", "classInclude", "ignoreStopPropagationEvent", "flagMouse", "flagMouseContent", "popoverCustomConfig", "isNgContent", "zIndex", "convertItemSelected", "getPopoverItemSelected", "httpRequestDetailItemById", "lengthKeys", "textDisplayWhenNoSelect", "textDisplayWhenMultiSelect", "classIncludeTextDisplayWhenNoSelect", "fieldLabel", "fieldGetLabel", "labelPopoverConfig", "labelPopoverFullWidth", "hasContentUnitRight", "listSearchNoDataTemplateRef", "fieldGetImage", "imageSize", "typeShape", "fieldGetIcon", "fieldGetTextAvatar", "fieldGetColorAvatar", "classAvatarInclude", "getLastTextAfterSpace", "linkImageError", "showError", "showBorderError", "disable", "readonly", "labelConfig", "disableLabel", "listSearchConfig", "isSearchOnline", "listHiddenInputSearch", "listSearchPadding", "listKeySearch", "listDividerClassInclude", "listConfig", "listButtonsOther", "listHasButtonUnSelectOption", "listClickExactly", "listBackgroundCustom", "listMaxItemShow", "listKeySelected", "listMultiKeySelected", "listKeysDisable", "listKeysHidden", "validRequired", "validMaxItemSelected", "changeValidUndefinedResetError", "allowSelectItemMultiple", "focusInputSearch", "onlyEmitDataWhenReset", "resetKeyWhenSelectAllKey", "listConfigHasDivider", "classIncludeIcon", "classIncludeContent", "listIgnoreClassDisableDefaultWhenUseKeysDisableItem", "tabKeyActive", "tabsConfig", "ignoreBorderBottom"], outputs: ["flagMouseChange", "flagMouseContentChange", "lengthKeysChange", "showBorderErrorChange", "listKeySelectedChange", "listMultiKeySelectedChange", "tabKeyActiveChange", "outSelectKey", "outSelectMultiKey", "outFunctionsControl", "outValidEvent", "outChangStageFlagMouse", "outDataChange", "outClickButtonOther", "outShowList", "outChangeTabKeyActive"] }, { kind: "component", type: LibsUiComponentsButtonsButtonComponent, selector: "libs_ui-components-buttons-button", inputs: ["flagMouse", "type", "buttonCustom", "sizeButton", "label", "disable", "isPending", "imageLeft", "classInclude", "classIconLeft", "classIconRight", "classLabel", "iconOnlyType", "popover", "ignoreStopPropagationEvent", "zIndex", "widthLabelPopover", "styleIconLeft", "styleButton", "ignoreFocusWhenInputTab", "ignoreSetClickWhenShowPopover", "ignorePointerEvent", "isActive", "isHandlerEnterDocumentClickButton"], outputs: ["outClick", "outPopoverEvent", "outFunctionsControl"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
282
+ }
283
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiComponentsPreviewTextDataComponent, decorators: [{
284
+ type: Component,
285
+ args: [{ selector: 'libs_ui-components-preview_text_data', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [LibsUiComponentsDropdownComponent, LibsUiComponentsButtonsButtonComponent], template: "<div\n class=\"libs-ui-preview-data-container flex flex-col w-full h-auto rounded-[8px] libs-ui-border-general px-[8px]\"\n [style.--background-color]=\"background()\"\n [class.pt-[8px]]=\"!hiddenAction()\">\n @if (!hiddenAction()) {\n <div class=\"flex items-center content-between color-[#6a7383]\">\n <libs_ui-components-dropdown\n classInclude=\"w-[200px]\"\n [listConfig]=\"configLoadDataIsHttpConfig\"\n [listMaxItemShow]=\"5\"\n [isNgContent]=\"true\"\n [readonly]=\"!editable()\"\n [listHasButtonUnSelectOption]=\"false\"\n (outSelectKey)=\"handlerSelectKey($event)\">\n <libs_ui-components-buttons-button\n [type]=\"'button-link-third'\"\n [label]=\"labelLang() || ''\"\n [sizeButton]=\"'small'\"\n [classIconRight]=\"editable() ? 'libs-ui-icon-move-right rotate-90' : ''\"\n [classInclude]=\"'!p-[0px]' + (editable() ? '' : '!pointer-events-none !cursor-default hover:!text-[#6A7383]')\" />\n </libs_ui-components-dropdown>\n <div class=\"flex items-center\">\n <libs_ui-components-buttons-button\n [type]=\"'button-link-third'\"\n [label]=\"isWrap() ? 'i18n_remove_line_wrap' : 'i18n_line_wrap'\"\n [sizeButton]=\"'small'\"\n [classIconLeft]=\"isWrap() ? 'libs-ui-icon-unwrap' : 'libs-ui-icon-wrap'\"\n [classInclude]=\"'mo-lib-p-0px mo-lib-mr-16px'\"\n (outClick)=\"handlerLineWrap()\" />\n <libs_ui-components-buttons-button\n [type]=\"'button-link-third'\"\n [label]=\"'i18n_copy'\"\n [sizeButton]=\"'small'\"\n [classIconLeft]=\"'libs-ui-icon-copy'\"\n [classInclude]=\"'mo-lib-p-0px'\"\n (outClick)=\"handlerCopy()\" />\n </div>\n </div>\n }\n <div #containerPreview></div>\n</div>\n", styles: [":host ::ng-deep .libs-ui-preview-data-container{background-color:var(--background-color)!important}:host ::ng-deep .libs-ui-preview-data-container .cm-line{white-space:pre-wrap}:host ::ng-deep .libs-ui-preview-data-container .cm-lintRange-error{background-color:#ff323233;border-bottom:2px solid red}:host ::ng-deep .libs-ui-preview-data-container .cm-lintRange-warning{background-color:#ffc80026}:host ::ng-deep .libs-ui-preview-data-container .cm-tooltip-lint{background:#fff8f8;color:#d32f2f;border:1px solid #f44336;padding:8px 10px;font-size:13px;font-family:Inter,sans-serif;border-radius:6px;box-shadow:0 2px 8px #ff000026}:host ::ng-deep .libs-ui-preview-data-container .cm-focused{outline:none!important}:host ::ng-deep .libs-ui-preview-data-container .cm-gutters{background-color:var(--background-color)!important}\n"] }]
286
+ }] });
287
+
288
+ /**
289
+ * Generated bundle index. Do not edit.
290
+ */
291
+
292
+ export { LibsUiComponentsPreviewTextDataComponent, httpRequestConfigGetOptionsLang, optionsLang };
293
+ //# sourceMappingURL=libs-ui-components-preview-text-data.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"libs-ui-components-preview-text-data.mjs","sources":["../../../../../libs-ui/components/preview-text-data/src/preview-text-data.define.ts","../../../../../libs-ui/components/preview-text-data/src/preview-text-data.component.ts","../../../../../libs-ui/components/preview-text-data/src/preview-text-data.component.html","../../../../../libs-ui/components/preview-text-data/src/libs-ui-components-preview-text-data.ts"],"sourcesContent":["import { signal } from '@angular/core';\nimport { IListConfigItem } from '@libs-ui/components-list';\nimport { IHttpRequestConfig, returnListObject } from '@libs-ui/services-http-request';\nimport { UtilsHttpParamsRequest } from '@libs-ui/utils';\n\nexport const optionsLang = () => [\n { id: 'text', label: 'Plain Text' },\n { id: 'javascript', label: 'JavaScript/TypeScript' },\n { id: 'html', label: 'HTML' },\n { id: 'css', label: 'CSS/SCSS/SASS' },\n { id: 'markdown', label: 'Markdown' },\n { id: 'json', label: 'JSON' },\n { id: 'sql', label: 'SQL' },\n { id: 'xml', label: 'XML' },\n { id: 'yaml', label: 'YAML' },\n { id: 'python', label: 'Python' },\n { id: 'java', label: 'Java' },\n { id: 'cpp', label: 'C/C++' },\n { id: 'php', label: 'PHP' },\n { id: 'go', label: 'Go' },\n];\n\nexport const httpRequestConfigGetOptionsLang = (): IListConfigItem => {\n return {\n type: 'text',\n httpRequestData: signal<IHttpRequestConfig>({\n objectInstance: returnListObject(optionsLang()),\n functionName: 'list',\n argumentsValue: [new UtilsHttpParamsRequest({ fromObject: { page: 1, per_page: 40 } })],\n }),\n configTemplateText: signal({\n fieldKey: 'id',\n notUseVirtualScroll: true,\n }),\n };\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { AfterViewInit, ChangeDetectionStrategy, Component, computed, ElementRef, inject, input, model, output, signal, viewChild } from '@angular/core';\nimport { cpp } from '@codemirror/lang-cpp';\nimport { css } from '@codemirror/lang-css';\nimport { go } from '@codemirror/lang-go';\nimport { html } from '@codemirror/lang-html';\nimport { java } from '@codemirror/lang-java';\nimport { javascript } from '@codemirror/lang-javascript';\nimport { json } from '@codemirror/lang-json';\nimport { markdown } from '@codemirror/lang-markdown';\nimport { php } from '@codemirror/lang-php';\nimport { python } from '@codemirror/lang-python';\nimport { sql } from '@codemirror/lang-sql';\nimport { xml } from '@codemirror/lang-xml';\nimport { yaml } from '@codemirror/lang-yaml';\nimport { StreamLanguage } from '@codemirror/language';\nimport { Diagnostic, linter, lintGutter } from '@codemirror/lint';\nimport { Compartment, EditorState } from '@codemirror/state';\nimport { lineNumbers } from '@codemirror/view';\nimport { LibsUiComponentsButtonsButtonComponent } from '@libs-ui/components-buttons-button';\nimport { IEmitSelectKey, LibsUiComponentsDropdownComponent } from '@libs-ui/components-dropdown';\nimport { LibsUiNotificationService } from '@libs-ui/services-notification';\nimport { get } from '@libs-ui/utils';\nimport { basicSetup, EditorView } from 'codemirror';\nimport { Parser } from 'node-sql-parser';\nimport { httpRequestConfigGetOptionsLang, optionsLang } from './preview-text-data.define';\nimport { IPreviewTextDataChange, PREVIEW_TEXT_DATA_LANGUAGE_SUPPORT } from './preview-text-data.interfaces';\n\nconst sqlParser = new Parser();\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'libs_ui-components-preview_text_data',\n templateUrl: './preview-text-data.component.html',\n styleUrls: ['./preview-text-data.component.scss'],\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [LibsUiComponentsDropdownComponent, LibsUiComponentsButtonsButtonComponent],\n})\nexport class LibsUiComponentsPreviewTextDataComponent implements AfterViewInit {\n private editorViewInstance?: EditorView;\n private wrapCompartment = new Compartment();\n private languageCompartment = new Compartment();\n private lineNumberCompartment = new Compartment();\n\n protected isWrap = signal<boolean>(true);\n protected configLoadDataIsHttpConfig = httpRequestConfigGetOptionsLang();\n protected labelLang = computed(() => optionsLang().find((item) => item.id === this.langSelected())?.label);\n\n readonly content = input<string, string | undefined>('', { transform: (value?: string) => value ?? '' });\n readonly langSelected = model.required<PREVIEW_TEXT_DATA_LANGUAGE_SUPPORT>();\n readonly editable = input<boolean, boolean | undefined>(false, { transform: (value?: boolean) => value ?? false });\n readonly hiddenAction = input<boolean, boolean | undefined>(false, { transform: (value?: boolean) => value ?? false });\n readonly lintIgnorePatterns = input<Array<string>, Array<string> | undefined>(['Cannot use import statement outside a module', 'Unexpected token export', 'import ', '@angular/core'], {\n transform: (value?: Array<string>) => value ?? ['Cannot use import statement outside a module', 'Unexpected token export', 'import ', '@angular/core'],\n });\n\n readonly background = input<string, string | undefined>('#f8f9fa', { transform: (value?: string) => value ?? '#f8f9fa' });\n\n readonly outChange = output<IPreviewTextDataChange>();\n readonly syntaxErrors = output<Diagnostic[]>();\n\n private containerPreview = viewChild.required<ElementRef<HTMLDivElement>>('containerPreview');\n\n private notificationService = inject(LibsUiNotificationService);\n ngAfterViewInit() {\n this.editorViewInstance = new EditorView({ ...this.getExtensionsByLanguage(this.langSelected()), doc: this.content(), parent: this.containerPreview().nativeElement });\n }\n\n private getExtensionsByLanguage(lang: PREVIEW_TEXT_DATA_LANGUAGE_SUPPORT): any {\n let formatByLangFunction: any = StreamLanguage.define({\n token(stream: any) {\n stream.skipToEnd();\n return null;\n },\n });\n let lintFunction = linter(() => []);\n\n const lowerLang = lang.toLowerCase();\n\n switch (lowerLang) {\n case 'javascript':\n formatByLangFunction = javascript({ jsx: true, typescript: true });\n lintFunction = this.jsLinterFn();\n break;\n\n case 'html':\n formatByLangFunction = html();\n break;\n\n case 'css':\n formatByLangFunction = css();\n break;\n\n case 'markdown':\n formatByLangFunction = markdown();\n break;\n\n case 'json':\n formatByLangFunction = json();\n lintFunction = this.jsonLinterFn();\n break;\n\n case 'sql':\n formatByLangFunction = sql();\n lintFunction = this.sqlLinterFn();\n break;\n\n case 'xml':\n formatByLangFunction = xml();\n break;\n\n case 'yaml':\n formatByLangFunction = yaml();\n break;\n\n case 'python':\n formatByLangFunction = python();\n break;\n\n case 'java':\n formatByLangFunction = java();\n break;\n\n case 'cpp':\n formatByLangFunction = cpp();\n break;\n\n case 'php':\n formatByLangFunction = php();\n break;\n\n case 'go':\n formatByLangFunction = go();\n break;\n }\n\n return {\n extensions: [\n basicSetup,\n this.languageCompartment.of(formatByLangFunction),\n this.lightTheme(),\n EditorView.editable.of(this.editable()),\n this.wrapCompartment.of(EditorView.lineWrapping),\n this.lineNumberCompartment.of(lineNumbers()),\n lintGutter(),\n this.customBracketTheme(),\n lintFunction,\n EditorView.updateListener.of((update: any) => {\n if (update.docChanged && this.editable()) {\n const newValue = update.state.doc.toString();\n\n this.outChange.emit({\n content: newValue,\n isWrap: this.isWrap(),\n language: this.langSelected(),\n contextChange: 'content',\n });\n }\n }),\n ],\n };\n }\n\n private lightTheme() {\n return EditorView.theme({\n '&': { backgroundColor: this.background(), color: '#333' },\n '.cm-content': { caretColor: '#111' },\n '.cm-activeLine': { backgroundColor: '#f0f0f0' },\n });\n }\n\n private customBracketTheme() {\n return EditorView.theme({\n '.cm-matchingBracket': {\n backgroundColor: 'rgba(100, 200, 255, 0.15)', // xanh nhẹ trong suốt\n border: '1px solid rgba(100, 200, 255, 0.4)',\n borderRadius: '3px',\n transition: 'all 0.2s ease',\n },\n '.cm-nonmatchingBracket': {\n backgroundColor: 'rgba(255, 100, 100, 0.15)', // đỏ nhẹ\n border: '1px solid rgba(255, 100, 100, 0.3)',\n borderRadius: '3px',\n },\n });\n }\n\n private jsLinterFn() {\n return linter((view: any) => {\n const text = view.state.doc.toString();\n const diagnostics: Diagnostic[] = [];\n try {\n new Function(text); // test parse code\n } catch (err: any) {\n if (!this.lintIgnorePatterns().some((pattern: any) => err.message.includes(pattern))) {\n diagnostics.push({\n from: 0,\n to: text.length,\n severity: 'error',\n message: err.message,\n });\n this.syntaxErrors.emit(diagnostics);\n }\n }\n return diagnostics;\n });\n }\n\n private jsonLinterFn() {\n return linter((view: any) => {\n const text = view.state.doc.toString();\n const diagnostics: Diagnostic[] = [];\n try {\n JSON.parse(text);\n } catch (err: unknown) {\n diagnostics.push({\n from: 0,\n to: text.length,\n severity: 'error',\n message: get(err, 'message', ''),\n });\n }\n this.syntaxErrors.emit(diagnostics);\n return diagnostics;\n });\n }\n\n private sqlLinterFn() {\n return linter((view: any) => {\n const text = view.state.doc.toString();\n const diagnostics: Diagnostic[] = [];\n try {\n sqlParser.astify(text);\n } catch (err: unknown) {\n diagnostics.push({\n from: 0,\n to: text.length,\n severity: 'error',\n message: get(err, 'message', ''),\n });\n }\n this.syntaxErrors.emit(diagnostics);\n return diagnostics;\n });\n }\n\n protected handlerCopy() {\n navigator.clipboard.writeText(this.content() || '');\n this.notificationService.showCompTypeTextInfo('Sao chép thành công');\n }\n\n protected handlerLineWrap() {\n this.isWrap.update((val: any) => !val);\n this.editorViewInstance?.dispatch({\n effects: this.wrapCompartment.reconfigure(this.isWrap() ? EditorView.lineWrapping : []),\n });\n\n this.editorViewInstance?.dispatch({\n effects: this.lineNumberCompartment.reconfigure(\n this.isWrap() ? lineNumbers() : [] // 👈 nếu tắt thì remove extension\n ),\n });\n this.outChange.emit({\n content: this.content(),\n isWrap: this.isWrap(),\n language: this.langSelected(),\n contextChange: 'isWrap',\n });\n }\n\n protected handlerSelectKey(data?: IEmitSelectKey) {\n if (!data || !data.key) {\n return;\n }\n this.langSelected.set(data.key as PREVIEW_TEXT_DATA_LANGUAGE_SUPPORT);\n const extensions = this.getExtensionsByLanguage(this.langSelected());\n this.editorViewInstance?.setState(\n EditorState.create({\n doc: this.editorViewInstance?.state.doc.toString(),\n ...extensions,\n })\n );\n this.outChange.emit({\n content: this.content(),\n isWrap: this.isWrap(),\n language: this.langSelected(),\n contextChange: 'language',\n });\n }\n}\n","<div\n class=\"libs-ui-preview-data-container flex flex-col w-full h-auto rounded-[8px] libs-ui-border-general px-[8px]\"\n [style.--background-color]=\"background()\"\n [class.pt-[8px]]=\"!hiddenAction()\">\n @if (!hiddenAction()) {\n <div class=\"flex items-center content-between color-[#6a7383]\">\n <libs_ui-components-dropdown\n classInclude=\"w-[200px]\"\n [listConfig]=\"configLoadDataIsHttpConfig\"\n [listMaxItemShow]=\"5\"\n [isNgContent]=\"true\"\n [readonly]=\"!editable()\"\n [listHasButtonUnSelectOption]=\"false\"\n (outSelectKey)=\"handlerSelectKey($event)\">\n <libs_ui-components-buttons-button\n [type]=\"'button-link-third'\"\n [label]=\"labelLang() || ''\"\n [sizeButton]=\"'small'\"\n [classIconRight]=\"editable() ? 'libs-ui-icon-move-right rotate-90' : ''\"\n [classInclude]=\"'!p-[0px]' + (editable() ? '' : '!pointer-events-none !cursor-default hover:!text-[#6A7383]')\" />\n </libs_ui-components-dropdown>\n <div class=\"flex items-center\">\n <libs_ui-components-buttons-button\n [type]=\"'button-link-third'\"\n [label]=\"isWrap() ? 'i18n_remove_line_wrap' : 'i18n_line_wrap'\"\n [sizeButton]=\"'small'\"\n [classIconLeft]=\"isWrap() ? 'libs-ui-icon-unwrap' : 'libs-ui-icon-wrap'\"\n [classInclude]=\"'mo-lib-p-0px mo-lib-mr-16px'\"\n (outClick)=\"handlerLineWrap()\" />\n <libs_ui-components-buttons-button\n [type]=\"'button-link-third'\"\n [label]=\"'i18n_copy'\"\n [sizeButton]=\"'small'\"\n [classIconLeft]=\"'libs-ui-icon-copy'\"\n [classInclude]=\"'mo-lib-p-0px'\"\n (outClick)=\"handlerCopy()\" />\n </div>\n </div>\n }\n <div #containerPreview></div>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
package/index.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ export * from './preview-text-data.component';
2
+ export * from './preview-text-data.interfaces';
3
+ export * from './preview-text-data.define';
package/package.json ADDED
@@ -0,0 +1,43 @@
1
+ {
2
+ "name": "@libs-ui/components-preview-text-data",
3
+ "version": "0.2.337-0",
4
+ "peerDependencies": {
5
+ "@codemirror/lang-angular": "0.1.4",
6
+ "@codemirror/lang-cpp": "6.0.3",
7
+ "@codemirror/lang-css": "6.3.1",
8
+ "@codemirror/lang-go": "6.0.1",
9
+ "@codemirror/lang-html": "6.4.11",
10
+ "@codemirror/lang-java": "6.0.2",
11
+ "@codemirror/lang-javascript": "6.2.4",
12
+ "@codemirror/lang-json": "6.0.2",
13
+ "@codemirror/lang-markdown": "6.5.0",
14
+ "@codemirror/lang-php": "6.0.2",
15
+ "@codemirror/lang-python": "6.2.1",
16
+ "@codemirror/lang-sql": "6.10.0",
17
+ "@codemirror/lang-xml": "6.1.0",
18
+ "@codemirror/lang-yaml": "6.1.2",
19
+ "@codemirror/lint": "6.9.1",
20
+ "@codemirror/state": "6.5.2",
21
+ "@codemirror/theme-one-dark": "6.1.3",
22
+ "@codemirror/view": "6.38.6",
23
+ "node-sql-parser": "5.3.13",
24
+ "codemirror": "6.0.2"
25
+ },
26
+ "sideEffects": false,
27
+ "module": "fesm2022/libs-ui-components-preview-text-data.mjs",
28
+ "typings": "index.d.ts",
29
+ "exports": {
30
+ "./package.json": {
31
+ "default": "./package.json"
32
+ },
33
+ ".": {
34
+ "types": "./index.d.ts",
35
+ "esm2022": "./esm2022/libs-ui-components-preview-text-data.mjs",
36
+ "esm": "./esm2022/libs-ui-components-preview-text-data.mjs",
37
+ "default": "./fesm2022/libs-ui-components-preview-text-data.mjs"
38
+ }
39
+ },
40
+ "dependencies": {
41
+ "tslib": "^2.3.0"
42
+ }
43
+ }
@@ -0,0 +1,36 @@
1
+ import { AfterViewInit } from '@angular/core';
2
+ import { Diagnostic } from '@codemirror/lint';
3
+ import { IEmitSelectKey } from '@libs-ui/components-dropdown';
4
+ import { IPreviewTextDataChange, PREVIEW_TEXT_DATA_LANGUAGE_SUPPORT } from './preview-text-data.interfaces';
5
+ import * as i0 from "@angular/core";
6
+ export declare class LibsUiComponentsPreviewTextDataComponent implements AfterViewInit {
7
+ private editorViewInstance?;
8
+ private wrapCompartment;
9
+ private languageCompartment;
10
+ private lineNumberCompartment;
11
+ protected isWrap: import("@angular/core").WritableSignal<boolean>;
12
+ protected configLoadDataIsHttpConfig: import("@libs-ui/components-list").IListConfigItem;
13
+ protected labelLang: import("@angular/core").Signal<string | undefined>;
14
+ readonly content: import("@angular/core").InputSignalWithTransform<string, string | undefined>;
15
+ readonly langSelected: import("@angular/core").ModelSignal<PREVIEW_TEXT_DATA_LANGUAGE_SUPPORT>;
16
+ readonly editable: import("@angular/core").InputSignalWithTransform<boolean, boolean | undefined>;
17
+ readonly hiddenAction: import("@angular/core").InputSignalWithTransform<boolean, boolean | undefined>;
18
+ readonly lintIgnorePatterns: import("@angular/core").InputSignalWithTransform<string[], string[] | undefined>;
19
+ readonly background: import("@angular/core").InputSignalWithTransform<string, string | undefined>;
20
+ readonly outChange: import("@angular/core").OutputEmitterRef<IPreviewTextDataChange>;
21
+ readonly syntaxErrors: import("@angular/core").OutputEmitterRef<Diagnostic[]>;
22
+ private containerPreview;
23
+ private notificationService;
24
+ ngAfterViewInit(): void;
25
+ private getExtensionsByLanguage;
26
+ private lightTheme;
27
+ private customBracketTheme;
28
+ private jsLinterFn;
29
+ private jsonLinterFn;
30
+ private sqlLinterFn;
31
+ protected handlerCopy(): void;
32
+ protected handlerLineWrap(): void;
33
+ protected handlerSelectKey(data?: IEmitSelectKey): void;
34
+ static ɵfac: i0.ɵɵFactoryDeclaration<LibsUiComponentsPreviewTextDataComponent, never>;
35
+ static ɵcmp: i0.ɵɵComponentDeclaration<LibsUiComponentsPreviewTextDataComponent, "libs_ui-components-preview_text_data", never, { "content": { "alias": "content"; "required": false; "isSignal": true; }; "langSelected": { "alias": "langSelected"; "required": true; "isSignal": true; }; "editable": { "alias": "editable"; "required": false; "isSignal": true; }; "hiddenAction": { "alias": "hiddenAction"; "required": false; "isSignal": true; }; "lintIgnorePatterns": { "alias": "lintIgnorePatterns"; "required": false; "isSignal": true; }; "background": { "alias": "background"; "required": false; "isSignal": true; }; }, { "langSelected": "langSelectedChange"; "outChange": "outChange"; "syntaxErrors": "syntaxErrors"; }, never, never, true, never>;
36
+ }
@@ -0,0 +1,6 @@
1
+ import { IListConfigItem } from '@libs-ui/components-list';
2
+ export declare const optionsLang: () => {
3
+ id: string;
4
+ label: string;
5
+ }[];
6
+ export declare const httpRequestConfigGetOptionsLang: () => IListConfigItem;
@@ -0,0 +1,7 @@
1
+ export type PREVIEW_TEXT_DATA_LANGUAGE_SUPPORT = 'javascript' | 'html' | 'css' | 'markdown' | 'json' | 'sql' | 'xml' | 'yaml' | 'python' | 'java' | 'cpp' | 'php' | 'go' | 'text';
2
+ export interface IPreviewTextDataChange {
3
+ content: string;
4
+ isWrap: boolean;
5
+ language: PREVIEW_TEXT_DATA_LANGUAGE_SUPPORT;
6
+ contextChange: 'content' | 'language' | 'isWrap';
7
+ }