wuic-framework-lib 1.0.7 → 1.0.10

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.
Files changed (18) hide show
  1. package/fesm2022/{wuic-framework-lib-chart-list.component-j1eRaGZV.mjs → wuic-framework-lib-chart-list.component-vuzmQW9F.mjs} +56 -4
  2. package/fesm2022/{wuic-framework-lib-code-editor.component-CNREC7r_.mjs → wuic-framework-lib-code-editor.component-BjbIkm4g.mjs} +4 -4
  3. package/fesm2022/wuic-framework-lib-core.mjs +1 -1
  4. package/fesm2022/{wuic-framework-lib-designer.component-Bb4B6eDu.mjs → wuic-framework-lib-designer.component-BM3elB-a.mjs} +49 -33
  5. package/fesm2022/{wuic-framework-lib-first-run-wizard.component-CQTs6hR6.mjs → wuic-framework-lib-first-run-wizard.component-5tcl67dK.mjs} +31 -12
  6. package/fesm2022/{wuic-framework-lib-framework-docs.component-CzyQHVAV.mjs → wuic-framework-lib-framework-docs.component-BGcJ7k1X.mjs} +484 -13
  7. package/fesm2022/{wuic-framework-lib-pivot-builder.component-ms-x0Yob.mjs → wuic-framework-lib-pivot-builder.component-ChNyMAfi.mjs} +29 -16
  8. package/fesm2022/{wuic-framework-lib-prompt-dialog-fallback-host.component-mXhyuLAE.mjs → wuic-framework-lib-prompt-dialog-fallback-host.component-DFLR_EmK.mjs} +2 -2
  9. package/fesm2022/{wuic-framework-lib-report-designer.component-BjUmOBU3.mjs → wuic-framework-lib-report-designer.component-B_SC7VkW.mjs} +2 -2
  10. package/fesm2022/{wuic-framework-lib-report-viewer.component-BOenTSd2.mjs → wuic-framework-lib-report-viewer.component-BTK-p8xF.mjs} +2 -2
  11. package/fesm2022/{wuic-framework-lib-scheduler-list.component-DHcLQ_X7.mjs → wuic-framework-lib-scheduler-list.component-CIoGVf4O.mjs} +12 -4
  12. package/fesm2022/{wuic-framework-lib-spreadsheet-list-sf.component-AFm6hAX4.mjs → wuic-framework-lib-spreadsheet-list-sf.component-DQ5OxO4j.mjs} +10 -4
  13. package/fesm2022/{wuic-framework-lib-workflow-designer.component-Bn6ocOVw.mjs → wuic-framework-lib-workflow-designer.component-BHLT4MER.mjs} +29 -3
  14. package/fesm2022/{wuic-framework-lib-wuic-framework-lib-KFbUlRIT.mjs → wuic-framework-lib-wuic-framework-lib-DDokY6wY.mjs} +2130 -491
  15. package/fesm2022/wuic-framework-lib.mjs +1 -1
  16. package/package.json +1 -1
  17. package/types/wuic-framework-lib-core.d.ts +1 -1
  18. package/types/wuic-framework-lib.d.ts +458 -15
@@ -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-KFbUlRIT.mjs';
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-DDokY6wY.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-j1eRaGZV.mjs.map
1320
+ //# sourceMappingURL=wuic-framework-lib-chart-list.component-vuzmQW9F.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, k as MetaInfo, U as UserInfoService, f as DataProviderService } from './wuic-framework-lib-wuic-framework-lib-KFbUlRIT.mjs';
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-DDokY6wY.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 i2 from 'primeng/api';
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: i2.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"] }] });
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-CNREC7r_.mjs.map
3921
+ //# sourceMappingURL=wuic-framework-lib-code-editor.component-BjbIkm4g.mjs.map
@@ -1,4 +1,4 @@
1
- export { AuthSessionService, CustomException, GlobalHandler, MetadataEditorService, MetadataProviderService, MetadatiColonna, MetadatiTabella, PRIMARY_PALETTES, TranslationManagerService, UserInfoService, WtoolboxService, authExpiredInterceptor, getThemeOptions } from 'wuic-framework-lib';
1
+ export { AuthSessionService, CustomException, GlobalHandler, MetadataEditorService, MetadataProviderService, MetadatiColonna, MetadatiTabella, PRIMARY_PALETTES, TranslationManagerService, UserInfoService, WtoolboxService, authExpiredInterceptor, getThemeOptions, wuicErrorInterceptor } from 'wuic-framework-lib';
2
2
 
3
3
  /**
4
4
  * Generated bundle index. Do not edit.