wuic-framework-lib 1.0.7 → 1.0.9
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/fesm2022/{wuic-framework-lib-chart-list.component-j1eRaGZV.mjs → wuic-framework-lib-chart-list.component-Cjdbe3i0.mjs} +56 -4
- package/fesm2022/{wuic-framework-lib-code-editor.component-CNREC7r_.mjs → wuic-framework-lib-code-editor.component-xbC6-KoE.mjs} +4 -4
- package/fesm2022/{wuic-framework-lib-designer.component-Bb4B6eDu.mjs → wuic-framework-lib-designer.component-ChMnwQH_.mjs} +49 -33
- package/fesm2022/{wuic-framework-lib-first-run-wizard.component-CQTs6hR6.mjs → wuic-framework-lib-first-run-wizard.component-DoVifTlj.mjs} +31 -12
- package/fesm2022/{wuic-framework-lib-framework-docs.component-CzyQHVAV.mjs → wuic-framework-lib-framework-docs.component-Cqhp5yIg.mjs} +484 -13
- package/fesm2022/{wuic-framework-lib-pivot-builder.component-ms-x0Yob.mjs → wuic-framework-lib-pivot-builder.component-ala8bb7P.mjs} +29 -16
- package/fesm2022/{wuic-framework-lib-prompt-dialog-fallback-host.component-mXhyuLAE.mjs → wuic-framework-lib-prompt-dialog-fallback-host.component-CdRKaYSG.mjs} +2 -2
- package/fesm2022/{wuic-framework-lib-report-designer.component-BjUmOBU3.mjs → wuic-framework-lib-report-designer.component-BeEWCPy0.mjs} +2 -2
- package/fesm2022/{wuic-framework-lib-report-viewer.component-BOenTSd2.mjs → wuic-framework-lib-report-viewer.component-CWamvZrx.mjs} +2 -2
- package/fesm2022/{wuic-framework-lib-scheduler-list.component-DHcLQ_X7.mjs → wuic-framework-lib-scheduler-list.component-BvrjIVRY.mjs} +12 -4
- package/fesm2022/{wuic-framework-lib-spreadsheet-list-sf.component-AFm6hAX4.mjs → wuic-framework-lib-spreadsheet-list-sf.component-CRg47ux6.mjs} +10 -4
- package/fesm2022/{wuic-framework-lib-workflow-designer.component-Bn6ocOVw.mjs → wuic-framework-lib-workflow-designer.component-CKFG_J6E.mjs} +29 -3
- package/fesm2022/{wuic-framework-lib-wuic-framework-lib-KFbUlRIT.mjs → wuic-framework-lib-wuic-framework-lib-WQiFu5aA.mjs} +2047 -489
- package/fesm2022/wuic-framework-lib.mjs +1 -1
- package/package.json +1 -1
- package/types/wuic-framework-lib.d.ts +448 -14
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
2
|
import { EventEmitter, ViewChild, Output, Input, Component } from '@angular/core';
|
|
3
3
|
import { BehaviorSubject } from 'rxjs';
|
|
4
|
-
import { W as WtoolboxService, M as MetadataProviderService, T as TranslationManagerService, U as UserInfoService, A as ArchetypeConfiguratorComponent } from './wuic-framework-lib-wuic-framework-lib-
|
|
4
|
+
import { W as WtoolboxService, k as WuicClientException, l as WuicErrorCodes, G as GlobalHandler, M as MetadataProviderService, T as TranslationManagerService, U as UserInfoService, A as ArchetypeConfiguratorComponent } from './wuic-framework-lib-wuic-framework-lib-WQiFu5aA.mjs';
|
|
5
5
|
import * as i5 from 'primeng/chart';
|
|
6
6
|
import { ChartModule } from 'primeng/chart';
|
|
7
7
|
import * as i2 from '@ngx-translate/core';
|
|
@@ -408,15 +408,19 @@ class ChartListComponent {
|
|
|
408
408
|
// forniamo un default minimo con chartDrillDown no-op + log per debug.
|
|
409
409
|
const drillDown = this.metaInfo.tableMetadata.extraProps.archetypes.chart.drillDown;
|
|
410
410
|
const utility = this.resolveDrillDownUtility();
|
|
411
|
+
// skills/sql-injection-defense + skills/typed-localized-exceptions:
|
|
412
|
+
// user-supplied JS dal metadata DEVE passare per runUserCallbackSync
|
|
413
|
+
// → typed `errors.client.user_callback.failed` su throw, niente raw stack.
|
|
414
|
+
const ctx = { archetype: 'chart', route: this.metaInfo?.tableMetadata?.md_route_name };
|
|
411
415
|
if (typeof drillDown === 'string') {
|
|
412
416
|
// Iniettiamo `utility` SOLO nel path string-eval (legacy metadata che fanno
|
|
413
417
|
// riferimento a `utility.chartDrillDown`). Quando drillDown e' gia' una
|
|
414
418
|
// function ref, il caller ha accesso diretto ai suoi imports/closure →
|
|
415
419
|
// non serve iniettare utility (evita anche TS2554 su signature 3-args).
|
|
416
|
-
new Function("clickedItem, chartOptions, data, utility", drillDown)(clicked, this.chartOptions, this.data, utility);
|
|
420
|
+
WtoolboxService.runUserCallbackSync('archetypes.chart.drillDown', () => new Function("clickedItem, chartOptions, data, utility", drillDown)(clicked, this.chartOptions, this.data, utility), [], ctx);
|
|
417
421
|
}
|
|
418
422
|
else {
|
|
419
|
-
drillDown(clicked, this.chartOptions, this.data);
|
|
423
|
+
WtoolboxService.runUserCallbackSync('archetypes.chart.drillDown', () => drillDown(clicked, this.chartOptions, this.data), [], ctx);
|
|
420
424
|
}
|
|
421
425
|
}
|
|
422
426
|
}
|
|
@@ -572,10 +576,31 @@ class ChartListComponent {
|
|
|
572
576
|
* Ricompone le opzioni finali del grafico facendo merge tra base/theme/widget
|
|
573
577
|
* e pianifica un resize del canvas.
|
|
574
578
|
*/
|
|
579
|
+
// Chart.js + PrimeNG controller registry — la lista deve riflettere i
|
|
580
|
+
// controller registrati di default. Se l'utente configura un type non
|
|
581
|
+
// presente, falliamo PRIMA del render con typed envelope, invece di
|
|
582
|
+
// lasciare propagare il "is not a registered controller" raw da PrimeNG.
|
|
583
|
+
static KNOWN_CHART_TYPES = new Set([
|
|
584
|
+
'bar', 'line', 'pie', 'doughnut', 'polarArea', 'radar', 'bubble', 'scatter'
|
|
585
|
+
]);
|
|
575
586
|
refreshChartOptions() {
|
|
576
587
|
const widgetOptions = this.buildWidgetChartOptions();
|
|
577
588
|
this.chartOptions = this.deepMerge({}, this.basicOptions, widgetOptions);
|
|
578
589
|
this.chartOptions.type = this.selectedChartType || this.chartOptions.type || 'bar';
|
|
590
|
+
// skills/typed-localized-exceptions: pre-validate type per evitare il
|
|
591
|
+
// raw stack PrimeNG `Registry._get` quando type=metadata non noto.
|
|
592
|
+
if (!ChartListComponent.KNOWN_CHART_TYPES.has(this.chartOptions.type)) {
|
|
593
|
+
const exc = new WuicClientException(WuicErrorCodes.archetypeInitFailed('chart'), {
|
|
594
|
+
archetype: 'chart',
|
|
595
|
+
phase: 'refreshChartOptions',
|
|
596
|
+
route: this.metaInfo?.tableMetadata?.md_route_name,
|
|
597
|
+
innerName: 'UnknownChartType',
|
|
598
|
+
innerMessage: `Chart type '${this.chartOptions.type}' is not a registered controller. Known types: ${Array.from(ChartListComponent.KNOWN_CHART_TYPES).join(', ')}`,
|
|
599
|
+
}, { surface: 'archetype', targetName: 'ChartListComponent.refreshChartOptions' });
|
|
600
|
+
GlobalHandler.emitClientException(exc);
|
|
601
|
+
// Fallback al default 'bar' per non rompere il render successivo.
|
|
602
|
+
this.chartOptions.type = 'bar';
|
|
603
|
+
}
|
|
579
604
|
this.scheduleChartResize();
|
|
580
605
|
}
|
|
581
606
|
/**
|
|
@@ -994,6 +1019,33 @@ class ChartListComponent {
|
|
|
994
1019
|
* @returns Struttura dati prodotta da `parseData` dopo normalizzazione/elaborazione.
|
|
995
1020
|
*/
|
|
996
1021
|
parseData(result, runtimeCutOff) {
|
|
1022
|
+
// skills/typed-localized-exceptions: wrap il lifecycle parseData con
|
|
1023
|
+
// try/catch → typed `errors.client.archetype.chart.init_failed` (al posto
|
|
1024
|
+
// di lasciare propagare uncaught TypeError tipo "datasets.forEach is not
|
|
1025
|
+
// a function" → dialog raw stack).
|
|
1026
|
+
try {
|
|
1027
|
+
return this._parseDataInternal(result, runtimeCutOff);
|
|
1028
|
+
}
|
|
1029
|
+
catch (err) {
|
|
1030
|
+
try {
|
|
1031
|
+
err.__wuicHandled = true;
|
|
1032
|
+
}
|
|
1033
|
+
catch { /* primitive throw */ }
|
|
1034
|
+
const innerMessage = err instanceof Error ? err.message
|
|
1035
|
+
: (err && typeof err === 'object' && typeof err.message === 'string') ? err.message
|
|
1036
|
+
: String(err);
|
|
1037
|
+
const exc = new WuicClientException(WuicErrorCodes.archetypeInitFailed('chart'), {
|
|
1038
|
+
archetype: 'chart',
|
|
1039
|
+
phase: 'parseData',
|
|
1040
|
+
route: this.metaInfo?.tableMetadata?.md_route_name,
|
|
1041
|
+
innerName: err?.constructor?.name || (typeof err),
|
|
1042
|
+
innerMessage: innerMessage?.slice(0, 500),
|
|
1043
|
+
}, { surface: 'archetype', targetName: 'ChartListComponent.parseData', cause: err });
|
|
1044
|
+
GlobalHandler.emitClientException(exc);
|
|
1045
|
+
return undefined;
|
|
1046
|
+
}
|
|
1047
|
+
}
|
|
1048
|
+
_parseDataInternal(result, runtimeCutOff) {
|
|
997
1049
|
var chartData;
|
|
998
1050
|
// = {
|
|
999
1051
|
// labels: ['Q1', 'Q2', 'Q3', 'Q4'],
|
|
@@ -1265,4 +1317,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImpor
|
|
|
1265
1317
|
}] } });
|
|
1266
1318
|
|
|
1267
1319
|
export { ChartListComponent };
|
|
1268
|
-
//# sourceMappingURL=wuic-framework-lib-chart-list.component-
|
|
1320
|
+
//# sourceMappingURL=wuic-framework-lib-chart-list.component-Cjdbe3i0.mjs.map
|
|
@@ -6,7 +6,7 @@ import * as i1 from '@materia-ui/ngx-monaco-editor';
|
|
|
6
6
|
import { MonacoEditorModule } from '@materia-ui/ngx-monaco-editor';
|
|
7
7
|
import { filter, take } from 'rxjs/operators';
|
|
8
8
|
import { Emitter } from 'monaco-editor/esm/vs/base/common/event';
|
|
9
|
-
import { W as WtoolboxService, M as MetadataProviderService, e as MetadatiColonna,
|
|
9
|
+
import { W as WtoolboxService, M as MetadataProviderService, e as MetadatiColonna, m as MetaInfo, U as UserInfoService, f as DataProviderService } from './wuic-framework-lib-wuic-framework-lib-WQiFu5aA.mjs';
|
|
10
10
|
import { NgClass, NgStyle } from '@angular/common';
|
|
11
11
|
import * as i13 from 'primeng/contextmenu';
|
|
12
12
|
import { ContextMenuModule } from 'primeng/contextmenu';
|
|
@@ -17,7 +17,7 @@ import { HttpHeaders } from '@angular/common/http';
|
|
|
17
17
|
import { from, combineLatest } from 'rxjs';
|
|
18
18
|
import { parseFragment } from 'parse5';
|
|
19
19
|
import * as i1$2 from '@angular/platform-browser';
|
|
20
|
-
import * as
|
|
20
|
+
import * as i3 from 'primeng/api';
|
|
21
21
|
|
|
22
22
|
class SqlModel {
|
|
23
23
|
database;
|
|
@@ -3892,7 +3892,7 @@ class CodeEditorComponent {
|
|
|
3892
3892
|
}));
|
|
3893
3893
|
}
|
|
3894
3894
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: CodeEditorComponent, deps: [{ token: i1.MonacoEditorLoaderService }, { token: i1$1.HttpClient }, { token: MetadataProviderService }, { token: UserInfoService }, { token: DataProviderService }, { token: WtoolboxService }, { token: i1$2.DomSanitizer }], target: i0.ɵɵFactoryTarget.Component });
|
|
3895
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.8", type: CodeEditorComponent, isStandalone: true, selector: "wuic-code-editor", inputs: { field: "field", record: "record", metaInfo: "metaInfo" }, host: { properties: { "style": "this.style" } }, viewQueries: [{ propertyName: "contextMenuAnchor", first: true, predicate: ["contextMenuAnchor"], descendants: true }, { propertyName: "editorRef", first: true, predicate: ["editorRef"], descendants: true }, { propertyName: "ctxs", first: true, predicate: ["ctxs"], descendants: true }], ngImport: i0, template: "@if (render) {\n<div [ngClass]=\"{'fullscreen': fullscreen, 'no-full-screen': !fullscreen }\">\n <div\n [ngStyle]=\"{width: sqlObjView ? '22%' : null, display: sqlObjView ? null : 'none', position: fullscreen ? 'absolute' : null, 'left': fullscreen ? '0px' : null, 'top': fullscreen ? '0px' : null }\"\n style=\"float: left; height: 100%; overflow: auto; background-color: #1e1e1e; z-index: 2000;\">\n <p-tree [value]=\"primeTreeNodes\">\n <ng-template let-node pTemplate=\"default\">\n <span style=\"-webkit-user-select: none; -ms-user-select: none; user-select: none;\" draggable=\"true\"\n (dragstart)=\"onTreeNodeDragStart($event, node.data)\" (click)=\"editorOptions.onNodeClick($event, node.data)\"\n (dragend)=\"onTreeNodeDragEnd($event, node.data)\">\n <span>\n {{ node.label }}\n </span>\n </span>\n </ng-template>\n </p-tree>\n </div>\n <div [ngStyle]=\"{width: sqlObjView ? '78%' : '100%', 'left': fullscreen ? (!sqlObjView ? '0px' : '22%') : null }\"\n style=\"height: 100%; float: left;\">\n <ul class=\"editor-btn\">\n <li>\n <div (click)=\"setFullScreen($event, this)\">\n <i\n [ngClass]=\"{'pi': true, 'pi-window-maximize': fullscreen == false, 'pi-window-minimize': fullscreen == true}\"></i>\n </div>\n </li>\n @if (editorOptions.language == 'sql') {\n <li>\n <div (click)=\"toggleSqlObjView($event, this)\">\n <i [ngClass]=\"{'pi': true, 'pi-server': true}\"></i>\n </div>\n </li>\n }\n @if (editorOptions.language == 'sql') {\n <li>\n <div (click)=\"testSql($event, this)\">\n <i [ngClass]=\"{'pi': true, 'pi-verified': true}\"></i>\n </div>\n </li>\n }\n @if (field.mc_suggest_value_callback) {\n <li>\n <div (click)=\"suggest($event, this)\">\n <i [ngClass]=\"{'pi': true, 'pi-question': true}\"></i>\n </div>\n </li>\n }\n @if (isHtmlEditor) {\n <li>\n <div (click)=\"formatHtmlNow($event)\" title=\"Format HTML\">\n <i [ngClass]=\"{'pi': true, 'pi-align-left': true}\"></i>\n </div>\n </li>\n <li>\n <div (click)=\"toggleHtmlPreview($event)\" title=\"Toggle HTML preview\">\n <i [ngClass]=\"{'pi': true, 'pi-eye': showHtmlPreview, 'pi-eye-slash': !showHtmlPreview}\"></i>\n </div>\n </li>\n }\n @if (isJsonEditor) {\n <li>\n <div (click)=\"formatJsonNow($event)\" title=\"Format JSON\">\n <i [ngClass]=\"{'pi': true, 'pi-code': true}\"></i>\n </div>\n </li>\n }\n </ul>\n <div class=\"editor-shell\">\n <div class=\"editor-pane\" [ngClass]=\"{'editor-pane--with-preview': isHtmlEditor && showHtmlPreview}\">\n <ngx-monaco-editor #editorRef [options]=\"editorOptions\" [ngModel]=\"editorModelValue\"\n (ngModelChange)=\"onEditorModelChange($event)\"\n [ngModelOptions]=\"{standalone: true}\"\n [ngStyle]=\"{'left': fullscreen ? (!sqlObjView ? '0px' : '22%') : null, width: '100%' }\"\n style=\"width: 100%; height: 100%;\"\n (onDropIntoEditor)=\"editorOptions.onDropIntoEditor($event)\"></ngx-monaco-editor>\n </div>\n @if (isHtmlEditor && showHtmlPreview) {\n <div class=\"html-preview-pane\">\n <div class=\"html-preview-pane__header\">HTML Pseudo-Preview (sanitized)</div>\n <div class=\"html-preview-pane__body\" [innerHTML]=\"sanitizedHtmlPreview\"></div>\n </div>\n }\n </div>\n </div>\n</div>\n}\n\n@if (editorRef?.editorContent?.nativeElement) {\n<p-contextMenu [target]=\"editorRef?.editorContent?.nativeElement\" [model]=\"editorOptions.contextMenuItems\"\n appendTo=\"body\" />\n}\n", styles: [".editor-btn{color:#fff;list-style-type:none;z-index:2001;visibility:visible;position:absolute;right:10px;top:10px;display:flex;gap:8px;margin:0;padding:0}.editor-btn li{list-style:none}.editor-btn li div{width:24px;height:24px;display:flex;align-items:center;justify-content:center;border:1px solid #334155;border-radius:4px;background:#0f172ad9;cursor:pointer}.fullscreen{position:fixed;inset:16px;z-index:3000;background:#1e1e1e;width:auto;height:auto}.fullscreen .editor-shell{position:absolute;inset:44px 0 0;height:auto}.fullscreen .editor-pane ngx-monaco-editor{position:relative;height:auto!important}.no-full-screen{width:100%;height:200px;position:relative}.editor-container{overflow:visible!important}.editor-shell{display:flex;width:100%;height:100%;min-height:0}.editor-pane{flex:1 1 auto;min-width:0;height:100%}.editor-pane--with-preview{flex:0 0 62%}.html-preview-pane{flex:0 0 38%;min-width:260px;border-left:1px solid #404040;background:#111827;color:#e5e7eb;display:flex;flex-direction:column}.html-preview-pane__header{font-size:12px;letter-spacing:.04em;text-transform:uppercase;padding:10px 12px;border-bottom:1px solid #374151;color:#9ca3af}.html-preview-pane__body{flex:1 1 auto;overflow:auto;padding:12px;background:#fff;color:#111827}:host ::ng-deep .html-preview-pane__body .wuic-preview-component{border:1px solid #cbd5e1;border-left:4px solid #2563eb;border-radius:6px;padding:8px 10px;margin-bottom:10px;background:#f8fafc}:host ::ng-deep .html-preview-pane__body .wuic-preview-component__title{font-weight:600;color:#0f172a;margin-bottom:4px}:host ::ng-deep .html-preview-pane__body .wuic-preview-component__content{margin-top:8px}:host ::ng-deep .html-preview-pane__body .wuic-preview-field__label{display:block;font-size:13px;font-weight:600;color:#0f172a;margin-bottom:6px}:host ::ng-deep .html-preview-pane__body .wuic-preview-field__input{display:block;width:100%;border:1px solid #3b82f6;border-radius:4px;min-height:36px;box-sizing:border-box;background:#fff}:host ::ng-deep .monaco-editor .suggest-widget,:host ::ng-deep .monaco-editor .parameter-hints-widget,:host ::ng-deep .monaco-editor .monaco-hover{z-index:4000!important}:host ::ng-deep .monaco-editor .suggest-widget{height:220px!important;margin-top:-30px!important}:host ::ng-deep .monaco-editor .suggest-widget .tree,:host ::ng-deep .monaco-editor .suggest-widget .monaco-list,:host ::ng-deep .monaco-editor .suggest-widget .monaco-list-rows,:host ::ng-deep .monaco-editor .suggest-widget .monaco-scrollable-element{height:186px!important;max-height:186px!important}:host ::ng-deep .monaco-editor .suggest-widget .monaco-list-rows{box-sizing:border-box;padding-bottom:20px!important}::-webkit-scrollbar{width:12px}::-webkit-scrollbar-track{box-shadow:inset 0 0 5px gray;border-radius:10px}::-webkit-scrollbar-thumb{background:#ffffff80;border-radius:10px;visibility:hidden}::-webkit-scrollbar-thumb:hover{visibility:visible}::-webkit-scrollbar-thumb:hover{background:#fffc}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MonacoEditorModule }, { kind: "component", type: i1.MonacoEditorComponent, selector: "ngx-monaco-editor", inputs: ["options", "uri"], outputs: ["init"] }, { kind: "ngmodule", type: ContextMenuModule }, { kind: "component", type: i13.ContextMenu, selector: "p-contextMenu, p-contextmenu, p-context-menu", inputs: ["model", "triggerEvent", "target", "global", "style", "styleClass", "autoZIndex", "baseZIndex", "id", "breakpoint", "ariaLabel", "ariaLabelledBy", "pressDelay", "appendTo", "motionOptions"], outputs: ["onShow", "onHide"] }, { kind: "directive", type:
|
|
3895
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.8", type: CodeEditorComponent, isStandalone: true, selector: "wuic-code-editor", inputs: { field: "field", record: "record", metaInfo: "metaInfo" }, host: { properties: { "style": "this.style" } }, viewQueries: [{ propertyName: "contextMenuAnchor", first: true, predicate: ["contextMenuAnchor"], descendants: true }, { propertyName: "editorRef", first: true, predicate: ["editorRef"], descendants: true }, { propertyName: "ctxs", first: true, predicate: ["ctxs"], descendants: true }], ngImport: i0, template: "@if (render) {\n<div [ngClass]=\"{'fullscreen': fullscreen, 'no-full-screen': !fullscreen }\">\n <div\n [ngStyle]=\"{width: sqlObjView ? '22%' : null, display: sqlObjView ? null : 'none', position: fullscreen ? 'absolute' : null, 'left': fullscreen ? '0px' : null, 'top': fullscreen ? '0px' : null }\"\n style=\"float: left; height: 100%; overflow: auto; background-color: #1e1e1e; z-index: 2000;\">\n <p-tree [value]=\"primeTreeNodes\">\n <ng-template let-node pTemplate=\"default\">\n <span style=\"-webkit-user-select: none; -ms-user-select: none; user-select: none;\" draggable=\"true\"\n (dragstart)=\"onTreeNodeDragStart($event, node.data)\" (click)=\"editorOptions.onNodeClick($event, node.data)\"\n (dragend)=\"onTreeNodeDragEnd($event, node.data)\">\n <span>\n {{ node.label }}\n </span>\n </span>\n </ng-template>\n </p-tree>\n </div>\n <div [ngStyle]=\"{width: sqlObjView ? '78%' : '100%', 'left': fullscreen ? (!sqlObjView ? '0px' : '22%') : null }\"\n style=\"height: 100%; float: left;\">\n <ul class=\"editor-btn\">\n <li>\n <div (click)=\"setFullScreen($event, this)\">\n <i\n [ngClass]=\"{'pi': true, 'pi-window-maximize': fullscreen == false, 'pi-window-minimize': fullscreen == true}\"></i>\n </div>\n </li>\n @if (editorOptions.language == 'sql') {\n <li>\n <div (click)=\"toggleSqlObjView($event, this)\">\n <i [ngClass]=\"{'pi': true, 'pi-server': true}\"></i>\n </div>\n </li>\n }\n @if (editorOptions.language == 'sql') {\n <li>\n <div (click)=\"testSql($event, this)\">\n <i [ngClass]=\"{'pi': true, 'pi-verified': true}\"></i>\n </div>\n </li>\n }\n @if (field.mc_suggest_value_callback) {\n <li>\n <div (click)=\"suggest($event, this)\">\n <i [ngClass]=\"{'pi': true, 'pi-question': true}\"></i>\n </div>\n </li>\n }\n @if (isHtmlEditor) {\n <li>\n <div (click)=\"formatHtmlNow($event)\" title=\"Format HTML\">\n <i [ngClass]=\"{'pi': true, 'pi-align-left': true}\"></i>\n </div>\n </li>\n <li>\n <div (click)=\"toggleHtmlPreview($event)\" title=\"Toggle HTML preview\">\n <i [ngClass]=\"{'pi': true, 'pi-eye': showHtmlPreview, 'pi-eye-slash': !showHtmlPreview}\"></i>\n </div>\n </li>\n }\n @if (isJsonEditor) {\n <li>\n <div (click)=\"formatJsonNow($event)\" title=\"Format JSON\">\n <i [ngClass]=\"{'pi': true, 'pi-code': true}\"></i>\n </div>\n </li>\n }\n </ul>\n <div class=\"editor-shell\">\n <div class=\"editor-pane\" [ngClass]=\"{'editor-pane--with-preview': isHtmlEditor && showHtmlPreview}\">\n <ngx-monaco-editor #editorRef [options]=\"editorOptions\" [ngModel]=\"editorModelValue\"\n (ngModelChange)=\"onEditorModelChange($event)\"\n [ngModelOptions]=\"{standalone: true}\"\n [ngStyle]=\"{'left': fullscreen ? (!sqlObjView ? '0px' : '22%') : null, width: '100%' }\"\n style=\"width: 100%; height: 100%;\"\n (onDropIntoEditor)=\"editorOptions.onDropIntoEditor($event)\"></ngx-monaco-editor>\n </div>\n @if (isHtmlEditor && showHtmlPreview) {\n <div class=\"html-preview-pane\">\n <div class=\"html-preview-pane__header\">HTML Pseudo-Preview (sanitized)</div>\n <div class=\"html-preview-pane__body\" [innerHTML]=\"sanitizedHtmlPreview\"></div>\n </div>\n }\n </div>\n </div>\n</div>\n}\n\n@if (editorRef?.editorContent?.nativeElement) {\n<p-contextMenu [target]=\"editorRef?.editorContent?.nativeElement\" [model]=\"editorOptions.contextMenuItems\"\n appendTo=\"body\" />\n}\n", styles: [".editor-btn{color:#fff;list-style-type:none;z-index:2001;visibility:visible;position:absolute;right:10px;top:10px;display:flex;gap:8px;margin:0;padding:0}.editor-btn li{list-style:none}.editor-btn li div{width:24px;height:24px;display:flex;align-items:center;justify-content:center;border:1px solid #334155;border-radius:4px;background:#0f172ad9;cursor:pointer}.fullscreen{position:fixed;inset:16px;z-index:3000;background:#1e1e1e;width:auto;height:auto}.fullscreen .editor-shell{position:absolute;inset:44px 0 0;height:auto}.fullscreen .editor-pane ngx-monaco-editor{position:relative;height:auto!important}.no-full-screen{width:100%;height:200px;position:relative}.editor-container{overflow:visible!important}.editor-shell{display:flex;width:100%;height:100%;min-height:0}.editor-pane{flex:1 1 auto;min-width:0;height:100%}.editor-pane--with-preview{flex:0 0 62%}.html-preview-pane{flex:0 0 38%;min-width:260px;border-left:1px solid #404040;background:#111827;color:#e5e7eb;display:flex;flex-direction:column}.html-preview-pane__header{font-size:12px;letter-spacing:.04em;text-transform:uppercase;padding:10px 12px;border-bottom:1px solid #374151;color:#9ca3af}.html-preview-pane__body{flex:1 1 auto;overflow:auto;padding:12px;background:#fff;color:#111827}:host ::ng-deep .html-preview-pane__body .wuic-preview-component{border:1px solid #cbd5e1;border-left:4px solid #2563eb;border-radius:6px;padding:8px 10px;margin-bottom:10px;background:#f8fafc}:host ::ng-deep .html-preview-pane__body .wuic-preview-component__title{font-weight:600;color:#0f172a;margin-bottom:4px}:host ::ng-deep .html-preview-pane__body .wuic-preview-component__content{margin-top:8px}:host ::ng-deep .html-preview-pane__body .wuic-preview-field__label{display:block;font-size:13px;font-weight:600;color:#0f172a;margin-bottom:6px}:host ::ng-deep .html-preview-pane__body .wuic-preview-field__input{display:block;width:100%;border:1px solid #3b82f6;border-radius:4px;min-height:36px;box-sizing:border-box;background:#fff}:host ::ng-deep .monaco-editor .suggest-widget,:host ::ng-deep .monaco-editor .parameter-hints-widget,:host ::ng-deep .monaco-editor .monaco-hover{z-index:4000!important}:host ::ng-deep .monaco-editor .suggest-widget{height:220px!important;margin-top:-30px!important}:host ::ng-deep .monaco-editor .suggest-widget .tree,:host ::ng-deep .monaco-editor .suggest-widget .monaco-list,:host ::ng-deep .monaco-editor .suggest-widget .monaco-list-rows,:host ::ng-deep .monaco-editor .suggest-widget .monaco-scrollable-element{height:186px!important;max-height:186px!important}:host ::ng-deep .monaco-editor .suggest-widget .monaco-list-rows{box-sizing:border-box;padding-bottom:20px!important}::-webkit-scrollbar{width:12px}::-webkit-scrollbar-track{box-shadow:inset 0 0 5px gray;border-radius:10px}::-webkit-scrollbar-thumb{background:#ffffff80;border-radius:10px;visibility:hidden}::-webkit-scrollbar-thumb:hover{visibility:visible}::-webkit-scrollbar-thumb:hover{background:#fffc}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MonacoEditorModule }, { kind: "component", type: i1.MonacoEditorComponent, selector: "ngx-monaco-editor", inputs: ["options", "uri"], outputs: ["init"] }, { kind: "ngmodule", type: ContextMenuModule }, { kind: "component", type: i13.ContextMenu, selector: "p-contextMenu, p-contextmenu, p-context-menu", inputs: ["model", "triggerEvent", "target", "global", "style", "styleClass", "autoZIndex", "baseZIndex", "id", "breakpoint", "ariaLabel", "ariaLabelledBy", "pressDelay", "appendTo", "motionOptions"], outputs: ["onShow", "onHide"] }, { kind: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "ngmodule", type: TreeModule }, { kind: "component", type: i4.Tree, selector: "p-tree", inputs: ["value", "selectionMode", "loadingMode", "selection", "styleClass", "contextMenu", "contextMenuSelectionMode", "contextMenuSelection", "draggableScope", "droppableScope", "draggableNodes", "droppableNodes", "metaKeySelection", "propagateSelectionUp", "propagateSelectionDown", "loading", "loadingIcon", "emptyMessage", "ariaLabel", "togglerAriaLabel", "ariaLabelledBy", "validateDrop", "filter", "filterInputAutoFocus", "filterBy", "filterMode", "filterOptions", "filterPlaceholder", "filteredNodes", "filterLocale", "scrollHeight", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "indentation", "_templateMap", "trackBy", "highlightOnSelect"], outputs: ["selectionChange", "contextMenuSelectionChange", "onNodeSelect", "onNodeUnselect", "onNodeExpand", "onNodeCollapse", "onNodeContextMenuSelect", "onNodeDoubleClick", "onNodeDrop", "onLazyLoad", "onScroll", "onScrollIndexChange", "onFilter"] }] });
|
|
3896
3896
|
}
|
|
3897
3897
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: CodeEditorComponent, decorators: [{
|
|
3898
3898
|
type: Component,
|
|
@@ -3918,4 +3918,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImpor
|
|
|
3918
3918
|
}] } });
|
|
3919
3919
|
|
|
3920
3920
|
export { CodeEditorComponent };
|
|
3921
|
-
//# sourceMappingURL=wuic-framework-lib-code-editor.component-
|
|
3921
|
+
//# sourceMappingURL=wuic-framework-lib-code-editor.component-xbC6-KoE.mjs.map
|