@yourself.create/ngx-form-designer 0.0.11 → 0.0.12

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.
@@ -433,6 +433,7 @@ class FormEngine {
433
433
  }
434
434
  updateSchema(schema) {
435
435
  this.schema = schema;
436
+ let valuesChanged = false;
436
437
  // Re-initialize any new fields
437
438
  this.schema.fields.forEach(field => {
438
439
  if (this.values[field.name] === undefined) {
@@ -442,10 +443,13 @@ class FormEngine {
442
443
  else {
443
444
  this.values[field.name] = null;
444
445
  }
446
+ valuesChanged = true;
445
447
  }
446
448
  });
447
- // Emit new state to ensure UI syncs if defaults added
448
- this.valueSubject.next({ ...this.values });
449
+ // Emit only when schema updates also change the value map.
450
+ if (valuesChanged) {
451
+ this.valueSubject.next({ ...this.values });
452
+ }
449
453
  // Re-validate all
450
454
  this.validate();
451
455
  }
@@ -5178,6 +5182,7 @@ class JsonFormRendererComponent {
5178
5182
  eventApiExecutor;
5179
5183
  navigateToPage;
5180
5184
  uploadOnSubmit = true;
5185
+ severityEvaluationMode = 'rule-failed';
5181
5186
  fieldDataAccessMap;
5182
5187
  fieldDataAccessApi;
5183
5188
  formContentId;
@@ -5478,7 +5483,7 @@ class JsonFormRendererComponent {
5478
5483
  errors: fieldErrors,
5479
5484
  validators: this.describeFieldValidators(field, visible, required, fieldErrors)
5480
5485
  };
5481
- states[field.name].isSeverityError = states[field.name].validators.some(validator => validator.severity === 'error' && validator.valid === false);
5486
+ states[field.name].isSeverityError = states[field.name].validators.some(validator => validator.severity === 'error' && validator.isSeverityTriggered === true);
5482
5487
  }
5483
5488
  return states;
5484
5489
  }
@@ -5556,11 +5561,13 @@ class JsonFormRendererComponent {
5556
5561
  }
5557
5562
  for (const outcome of ruleOutcomes) {
5558
5563
  const message = this.getRuleValidationMessage(outcome.rule);
5564
+ const isSeverityTriggered = this.isRuleSeverityTriggered(outcome);
5559
5565
  validators.push({
5560
5566
  name: outcome.rule.name?.trim() || this.describeRuleName(outcome.rule),
5561
5567
  source: 'rule',
5562
5568
  active: true,
5563
5569
  valid: outcome.conditionMet || outcome.nextAction !== undefined,
5570
+ ...(isSeverityTriggered ? { isSeverityTriggered: true } : {}),
5564
5571
  value: {
5565
5572
  action: outcome.rule.action,
5566
5573
  elseAction: outcome.rule.elseAction
@@ -5585,6 +5592,15 @@ class JsonFormRendererComponent {
5585
5592
  }
5586
5593
  return false;
5587
5594
  }
5595
+ isRuleSeverityTriggered(outcome) {
5596
+ if (outcome.rule.severity !== 'error') {
5597
+ return false;
5598
+ }
5599
+ if (this.severityEvaluationMode === 'rule-matched') {
5600
+ return outcome.conditionMet && outcome.rule.elseAction === undefined;
5601
+ }
5602
+ return !outcome.conditionMet && outcome.nextAction === undefined;
5603
+ }
5588
5604
  getRuleOutcomes(field) {
5589
5605
  if (!field.rules?.length) {
5590
5606
  return [];
@@ -5944,7 +5960,7 @@ class JsonFormRendererComponent {
5944
5960
  || typeof record['type'] === 'string';
5945
5961
  }
5946
5962
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: JsonFormRendererComponent, deps: [{ token: DesignerStateService }], target: i0.ɵɵFactoryTarget.Component });
5947
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: JsonFormRendererComponent, isStandalone: true, selector: "app-json-form-renderer", inputs: { schema: "schema", initialValues: "initialValues", initialFieldLabels: "initialFieldLabels", mode: "mode", device: "device", showLayoutGuides: "showLayoutGuides", breakpoint: "breakpoint", eventLogger: "eventLogger", eventApis: "eventApis", eventApiExecutor: "eventApiExecutor", navigateToPage: "navigateToPage", uploadOnSubmit: "uploadOnSubmit", fieldDataAccessMap: "fieldDataAccessMap", fieldDataAccessApi: "fieldDataAccessApi", formContentId: "formContentId", formContentVersion: "formContentVersion" }, outputs: { valueChange: "valueChange", groupedValueChange: "groupedValueChange", combinedValueChange: "combinedValueChange", validationChange: "validationChange", uploadedFilesChange: "uploadedFilesChange", formSubmit: "formSubmit" }, usesOnChanges: true, ngImport: i0, template: `
5963
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: JsonFormRendererComponent, isStandalone: true, selector: "app-json-form-renderer", inputs: { schema: "schema", initialValues: "initialValues", initialFieldLabels: "initialFieldLabels", mode: "mode", device: "device", showLayoutGuides: "showLayoutGuides", breakpoint: "breakpoint", eventLogger: "eventLogger", eventApis: "eventApis", eventApiExecutor: "eventApiExecutor", navigateToPage: "navigateToPage", uploadOnSubmit: "uploadOnSubmit", severityEvaluationMode: "severityEvaluationMode", fieldDataAccessMap: "fieldDataAccessMap", fieldDataAccessApi: "fieldDataAccessApi", formContentId: "formContentId", formContentVersion: "formContentVersion" }, outputs: { valueChange: "valueChange", groupedValueChange: "groupedValueChange", combinedValueChange: "combinedValueChange", validationChange: "validationChange", uploadedFilesChange: "uploadedFilesChange", formSubmit: "formSubmit" }, usesOnChanges: true, ngImport: i0, template: `
5948
5964
  <div class="form-renderer-container"
5949
5965
  data-fd="renderer"
5950
5966
  [class.is-mobile]="device === 'mobile'"
@@ -6017,6 +6033,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImpo
6017
6033
  type: Input
6018
6034
  }], uploadOnSubmit: [{
6019
6035
  type: Input
6036
+ }], severityEvaluationMode: [{
6037
+ type: Input
6020
6038
  }], fieldDataAccessMap: [{
6021
6039
  type: Input
6022
6040
  }], fieldDataAccessApi: [{
@@ -6217,6 +6235,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImpo
6217
6235
  class FormJourneyViewerComponent {
6218
6236
  journey;
6219
6237
  viewOnly = false;
6238
+ severityEvaluationMode = 'rule-failed';
6220
6239
  eventApis = [];
6221
6240
  eventApiExecutor;
6222
6241
  initialValues;
@@ -6359,7 +6378,7 @@ class FormJourneyViewerComponent {
6359
6378
  return flattened;
6360
6379
  }
6361
6380
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: FormJourneyViewerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
6362
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: FormJourneyViewerComponent, isStandalone: true, selector: "app-form-journey-viewer", inputs: { journey: "journey", viewOnly: "viewOnly", eventApis: "eventApis", eventApiExecutor: "eventApiExecutor", initialValues: "initialValues", initialFieldLabels: "initialFieldLabels", fieldDataAccessMap: "fieldDataAccessMap", fieldDataAccessApi: "fieldDataAccessApi", formContentId: "formContentId", formContentVersion: "formContentVersion" }, outputs: { formDataChange: "formDataChange", formDataByPageChange: "formDataByPageChange", formValidationChange: "formValidationChange", uploadedFilesChange: "uploadedFilesChange", submit: "submit", activePageIdChange: "activePageIdChange" }, viewQueries: [{ propertyName: "renderer", first: true, predicate: JsonFormRendererComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: `
6381
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: FormJourneyViewerComponent, isStandalone: true, selector: "app-form-journey-viewer", inputs: { journey: "journey", viewOnly: "viewOnly", severityEvaluationMode: "severityEvaluationMode", eventApis: "eventApis", eventApiExecutor: "eventApiExecutor", initialValues: "initialValues", initialFieldLabels: "initialFieldLabels", fieldDataAccessMap: "fieldDataAccessMap", fieldDataAccessApi: "fieldDataAccessApi", formContentId: "formContentId", formContentVersion: "formContentVersion" }, outputs: { formDataChange: "formDataChange", formDataByPageChange: "formDataByPageChange", formValidationChange: "formValidationChange", uploadedFilesChange: "uploadedFilesChange", submit: "submit", activePageIdChange: "activePageIdChange" }, viewQueries: [{ propertyName: "renderer", first: true, predicate: JsonFormRendererComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: `
6363
6382
  <div class="form-journey-viewer flex h-full w-full flex-col" data-fd="form-journey-viewer">
6364
6383
  <div class="border-b border-gray-200 bg-white px-4 py-2 text-xs text-gray-600" data-fd="journey-progress">
6365
6384
  {{ activePageIndex() + 1 }} / {{ journey.pages.length }}
@@ -6373,6 +6392,7 @@ class FormJourneyViewerComponent {
6373
6392
  [initialValues]="values()"
6374
6393
  [initialFieldLabels]="fieldLabels()"
6375
6394
  [mode]="viewOnly ? 'preview' : 'live'"
6395
+ [severityEvaluationMode]="severityEvaluationMode"
6376
6396
  [eventApis]="eventApis"
6377
6397
  [eventApiExecutor]="eventApiExecutor"
6378
6398
  [fieldDataAccessMap]="fieldDataAccessMap"
@@ -6387,7 +6407,7 @@ class FormJourneyViewerComponent {
6387
6407
  </app-json-form-renderer>
6388
6408
  </div>
6389
6409
  </div>
6390
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: JsonFormRendererComponent, selector: "app-json-form-renderer", inputs: ["schema", "initialValues", "initialFieldLabels", "mode", "device", "showLayoutGuides", "breakpoint", "eventLogger", "eventApis", "eventApiExecutor", "navigateToPage", "uploadOnSubmit", "fieldDataAccessMap", "fieldDataAccessApi", "formContentId", "formContentVersion"], outputs: ["valueChange", "groupedValueChange", "combinedValueChange", "validationChange", "uploadedFilesChange", "formSubmit"] }] });
6410
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: JsonFormRendererComponent, selector: "app-json-form-renderer", inputs: ["schema", "initialValues", "initialFieldLabels", "mode", "device", "showLayoutGuides", "breakpoint", "eventLogger", "eventApis", "eventApiExecutor", "navigateToPage", "uploadOnSubmit", "severityEvaluationMode", "fieldDataAccessMap", "fieldDataAccessApi", "formContentId", "formContentVersion"], outputs: ["valueChange", "groupedValueChange", "combinedValueChange", "validationChange", "uploadedFilesChange", "formSubmit"] }] });
6391
6411
  }
6392
6412
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: FormJourneyViewerComponent, decorators: [{
6393
6413
  type: Component,
@@ -6409,6 +6429,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImpo
6409
6429
  [initialValues]="values()"
6410
6430
  [initialFieldLabels]="fieldLabels()"
6411
6431
  [mode]="viewOnly ? 'preview' : 'live'"
6432
+ [severityEvaluationMode]="severityEvaluationMode"
6412
6433
  [eventApis]="eventApis"
6413
6434
  [eventApiExecutor]="eventApiExecutor"
6414
6435
  [fieldDataAccessMap]="fieldDataAccessMap"
@@ -6430,6 +6451,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImpo
6430
6451
  args: [{ required: true }]
6431
6452
  }], viewOnly: [{
6432
6453
  type: Input
6454
+ }], severityEvaluationMode: [{
6455
+ type: Input
6433
6456
  }], eventApis: [{
6434
6457
  type: Input
6435
6458
  }], eventApiExecutor: [{
@@ -6486,6 +6509,7 @@ class FormViewerComponent {
6486
6509
  emitOnChange: true
6487
6510
  };
6488
6511
  viewOnly = false;
6512
+ severityEvaluationMode = 'rule-failed';
6489
6513
  eventApis = [];
6490
6514
  eventApiExecutor;
6491
6515
  fieldDataAccessMap;
@@ -6767,7 +6791,7 @@ class FormViewerComponent {
6767
6791
  return !!value && typeof value === 'object';
6768
6792
  }
6769
6793
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: FormViewerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
6770
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: FormViewerComponent, isStandalone: true, selector: "app-form-viewer", inputs: { schema: "schema", journey: "journey", data: "data", dataUsesFieldNameKeys: "dataUsesFieldNameKeys", options: "options", viewOnly: "viewOnly", eventApis: "eventApis", eventApiExecutor: "eventApiExecutor", fieldDataAccessMap: "fieldDataAccessMap", fieldDataAccessApi: "fieldDataAccessApi", formContentId: "formContentId", formContentVersion: "formContentVersion" }, outputs: { formDataChange: "formDataChange", formDataByPageChange: "formDataByPageChange", formValidationChange: "formValidationChange", uploadedFilesChange: "uploadedFilesChange", submit: "submit", activePageIdChange: "activePageIdChange" }, viewQueries: [{ propertyName: "renderer", first: true, predicate: JsonFormRendererComponent, descendants: true }, { propertyName: "journeyViewer", first: true, predicate: FormJourneyViewerComponent, descendants: true }], ngImport: i0, template: `
6794
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: FormViewerComponent, isStandalone: true, selector: "app-form-viewer", inputs: { schema: "schema", journey: "journey", data: "data", dataUsesFieldNameKeys: "dataUsesFieldNameKeys", options: "options", viewOnly: "viewOnly", severityEvaluationMode: "severityEvaluationMode", eventApis: "eventApis", eventApiExecutor: "eventApiExecutor", fieldDataAccessMap: "fieldDataAccessMap", fieldDataAccessApi: "fieldDataAccessApi", formContentId: "formContentId", formContentVersion: "formContentVersion" }, outputs: { formDataChange: "formDataChange", formDataByPageChange: "formDataByPageChange", formValidationChange: "formValidationChange", uploadedFilesChange: "uploadedFilesChange", submit: "submit", activePageIdChange: "activePageIdChange" }, viewQueries: [{ propertyName: "renderer", first: true, predicate: JsonFormRendererComponent, descendants: true }, { propertyName: "journeyViewer", first: true, predicate: FormJourneyViewerComponent, descendants: true }], ngImport: i0, template: `
6771
6795
  <div class="form-viewer-container flex flex-col h-full"
6772
6796
  data-fd="form-viewer"
6773
6797
  [attr.data-fd-mode]="viewOnly ? 'preview' : 'live'">
@@ -6777,6 +6801,7 @@ class FormViewerComponent {
6777
6801
  data-fd="form-viewer-journey"
6778
6802
  [journey]="journey!"
6779
6803
  [viewOnly]="viewOnly"
6804
+ [severityEvaluationMode]="severityEvaluationMode"
6780
6805
  [eventApis]="eventApis"
6781
6806
  [eventApiExecutor]="eventApiExecutor"
6782
6807
  [initialValues]="normalizedInitialValues"
@@ -6800,6 +6825,7 @@ class FormViewerComponent {
6800
6825
  [initialValues]="normalizedInitialValues"
6801
6826
  [initialFieldLabels]="normalizedInitialFieldLabels"
6802
6827
  [mode]="viewOnly ? 'preview' : 'live'"
6828
+ [severityEvaluationMode]="severityEvaluationMode"
6803
6829
  [breakpoint]="breakpoint()"
6804
6830
  [uploadOnSubmit]="true"
6805
6831
  [eventApis]="eventApis"
@@ -6828,7 +6854,7 @@ class FormViewerComponent {
6828
6854
  </button>
6829
6855
  </div>
6830
6856
  </div>
6831
- `, isInline: true, styles: [":host{display:block;height:100%;width:100%}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: JsonFormRendererComponent, selector: "app-json-form-renderer", inputs: ["schema", "initialValues", "initialFieldLabels", "mode", "device", "showLayoutGuides", "breakpoint", "eventLogger", "eventApis", "eventApiExecutor", "navigateToPage", "uploadOnSubmit", "fieldDataAccessMap", "fieldDataAccessApi", "formContentId", "formContentVersion"], outputs: ["valueChange", "groupedValueChange", "combinedValueChange", "validationChange", "uploadedFilesChange", "formSubmit"] }, { kind: "component", type: FormJourneyViewerComponent, selector: "app-form-journey-viewer", inputs: ["journey", "viewOnly", "eventApis", "eventApiExecutor", "initialValues", "initialFieldLabels", "fieldDataAccessMap", "fieldDataAccessApi", "formContentId", "formContentVersion"], outputs: ["formDataChange", "formDataByPageChange", "formValidationChange", "uploadedFilesChange", "submit", "activePageIdChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
6857
+ `, isInline: true, styles: [":host{display:block;height:100%;width:100%}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: JsonFormRendererComponent, selector: "app-json-form-renderer", inputs: ["schema", "initialValues", "initialFieldLabels", "mode", "device", "showLayoutGuides", "breakpoint", "eventLogger", "eventApis", "eventApiExecutor", "navigateToPage", "uploadOnSubmit", "severityEvaluationMode", "fieldDataAccessMap", "fieldDataAccessApi", "formContentId", "formContentVersion"], outputs: ["valueChange", "groupedValueChange", "combinedValueChange", "validationChange", "uploadedFilesChange", "formSubmit"] }, { kind: "component", type: FormJourneyViewerComponent, selector: "app-form-journey-viewer", inputs: ["journey", "viewOnly", "severityEvaluationMode", "eventApis", "eventApiExecutor", "initialValues", "initialFieldLabels", "fieldDataAccessMap", "fieldDataAccessApi", "formContentId", "formContentVersion"], outputs: ["formDataChange", "formDataByPageChange", "formValidationChange", "uploadedFilesChange", "submit", "activePageIdChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
6832
6858
  }
6833
6859
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: FormViewerComponent, decorators: [{
6834
6860
  type: Component,
@@ -6842,6 +6868,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImpo
6842
6868
  data-fd="form-viewer-journey"
6843
6869
  [journey]="journey!"
6844
6870
  [viewOnly]="viewOnly"
6871
+ [severityEvaluationMode]="severityEvaluationMode"
6845
6872
  [eventApis]="eventApis"
6846
6873
  [eventApiExecutor]="eventApiExecutor"
6847
6874
  [initialValues]="normalizedInitialValues"
@@ -6865,6 +6892,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImpo
6865
6892
  [initialValues]="normalizedInitialValues"
6866
6893
  [initialFieldLabels]="normalizedInitialFieldLabels"
6867
6894
  [mode]="viewOnly ? 'preview' : 'live'"
6895
+ [severityEvaluationMode]="severityEvaluationMode"
6868
6896
  [breakpoint]="breakpoint()"
6869
6897
  [uploadOnSubmit]="true"
6870
6898
  [eventApis]="eventApis"
@@ -6906,6 +6934,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImpo
6906
6934
  type: Input
6907
6935
  }], viewOnly: [{
6908
6936
  type: Input
6937
+ }], severityEvaluationMode: [{
6938
+ type: Input
6909
6939
  }], eventApis: [{
6910
6940
  type: Input
6911
6941
  }], eventApiExecutor: [{
@@ -8999,7 +9029,7 @@ class LayoutCanvasComponent {
8999
9029
 
9000
9030
  <!-- Hidden file input for import -->
9001
9031
  <input type="file" #fileInput accept=".json" (change)="onFileSelected($event)" style="display: none;">
9002
- `, isInline: true, styles: [".canvas-grid{background-image:radial-gradient(rgba(148,163,184,.35) 1px,transparent 1px);background-size:18px 18px}.custom-scrollbar::-webkit-scrollbar{width:6px;height:6px}.custom-scrollbar::-webkit-scrollbar-track{background:transparent}.custom-scrollbar::-webkit-scrollbar-thumb{background:transparent;border-radius:10px}.custom-scrollbar:hover::-webkit-scrollbar-thumb{background:#00000026}.custom-scrollbar{scrollbar-width:thin;scrollbar-color:transparent transparent}.custom-scrollbar:hover{scrollbar-color:rgba(0,0,0,.15) transparent}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: JsonFormRendererComponent, selector: "app-json-form-renderer", inputs: ["schema", "initialValues", "initialFieldLabels", "mode", "device", "showLayoutGuides", "breakpoint", "eventLogger", "eventApis", "eventApiExecutor", "navigateToPage", "uploadOnSubmit", "fieldDataAccessMap", "fieldDataAccessApi", "formContentId", "formContentVersion"], outputs: ["valueChange", "groupedValueChange", "combinedValueChange", "validationChange", "uploadedFilesChange", "formSubmit"] }, { kind: "ngmodule", type: UiIconModule }, { kind: "component", type: i3$1.LucideAngularComponent, selector: "lucide-angular, lucide-icon, i-lucide, span-lucide", inputs: ["class", "name", "img", "color", "absoluteStrokeWidth", "size", "strokeWidth"] }, { kind: "component", type: MonacoEditorComponent, selector: "app-monaco-editor", inputs: ["value", "language", "theme", "readOnly", "minimap", "options"], outputs: ["valueChange"] }] });
9032
+ `, isInline: true, styles: [".canvas-grid{background-image:radial-gradient(rgba(148,163,184,.35) 1px,transparent 1px);background-size:18px 18px}.custom-scrollbar::-webkit-scrollbar{width:6px;height:6px}.custom-scrollbar::-webkit-scrollbar-track{background:transparent}.custom-scrollbar::-webkit-scrollbar-thumb{background:transparent;border-radius:10px}.custom-scrollbar:hover::-webkit-scrollbar-thumb{background:#00000026}.custom-scrollbar{scrollbar-width:thin;scrollbar-color:transparent transparent}.custom-scrollbar:hover{scrollbar-color:rgba(0,0,0,.15) transparent}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: JsonFormRendererComponent, selector: "app-json-form-renderer", inputs: ["schema", "initialValues", "initialFieldLabels", "mode", "device", "showLayoutGuides", "breakpoint", "eventLogger", "eventApis", "eventApiExecutor", "navigateToPage", "uploadOnSubmit", "severityEvaluationMode", "fieldDataAccessMap", "fieldDataAccessApi", "formContentId", "formContentVersion"], outputs: ["valueChange", "groupedValueChange", "combinedValueChange", "validationChange", "uploadedFilesChange", "formSubmit"] }, { kind: "ngmodule", type: UiIconModule }, { kind: "component", type: i3$1.LucideAngularComponent, selector: "lucide-angular, lucide-icon, i-lucide, span-lucide", inputs: ["class", "name", "img", "color", "absoluteStrokeWidth", "size", "strokeWidth"] }, { kind: "component", type: MonacoEditorComponent, selector: "app-monaco-editor", inputs: ["value", "language", "theme", "readOnly", "minimap", "options"], outputs: ["valueChange"] }] });
9003
9033
  }
9004
9034
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: LayoutCanvasComponent, decorators: [{
9005
9035
  type: Component,
@@ -19608,7 +19638,7 @@ class FormPreviewComponent {
19608
19638
  </div>
19609
19639
  </div>
19610
19640
  </div>
19611
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1.JsonPipe, name: "json" }, { kind: "ngmodule", type: UiIconModule }, { kind: "component", type: i3$1.LucideAngularComponent, selector: "lucide-angular, lucide-icon, i-lucide, span-lucide", inputs: ["class", "name", "img", "color", "absoluteStrokeWidth", "size", "strokeWidth"] }, { kind: "component", type: JsonFormRendererComponent, selector: "app-json-form-renderer", inputs: ["schema", "initialValues", "initialFieldLabels", "mode", "device", "showLayoutGuides", "breakpoint", "eventLogger", "eventApis", "eventApiExecutor", "navigateToPage", "uploadOnSubmit", "fieldDataAccessMap", "fieldDataAccessApi", "formContentId", "formContentVersion"], outputs: ["valueChange", "groupedValueChange", "combinedValueChange", "validationChange", "uploadedFilesChange", "formSubmit"] }] });
19641
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1.JsonPipe, name: "json" }, { kind: "ngmodule", type: UiIconModule }, { kind: "component", type: i3$1.LucideAngularComponent, selector: "lucide-angular, lucide-icon, i-lucide, span-lucide", inputs: ["class", "name", "img", "color", "absoluteStrokeWidth", "size", "strokeWidth"] }, { kind: "component", type: JsonFormRendererComponent, selector: "app-json-form-renderer", inputs: ["schema", "initialValues", "initialFieldLabels", "mode", "device", "showLayoutGuides", "breakpoint", "eventLogger", "eventApis", "eventApiExecutor", "navigateToPage", "uploadOnSubmit", "severityEvaluationMode", "fieldDataAccessMap", "fieldDataAccessApi", "formContentId", "formContentVersion"], outputs: ["valueChange", "groupedValueChange", "combinedValueChange", "validationChange", "uploadedFilesChange", "formSubmit"] }] });
19612
19642
  }
19613
19643
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: FormPreviewComponent, decorators: [{
19614
19644
  type: Component,
@@ -26263,7 +26293,7 @@ class FormDesignerShellComponent {
26263
26293
  </div>
26264
26294
  </section>
26265
26295
  </div>
26266
- `, isInline: true, styles: ["@keyframes slideInRight{0%{transform:translate(100%);opacity:0}to{transform:translate(0);opacity:1}}.animate-slide-in-right{animation:slideInRight .3s cubic-bezier(.16,1,.3,1)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1.TitleCasePipe, name: "titlecase" }, { kind: "component", type: JsonFormDesignerComponent, selector: "app-json-form-designer", inputs: ["flavor", "mode", "eventApis", "eventApiExecutor", "pages", "activePageId", "canRemovePage"], outputs: ["pageAdd", "pageSelect", "pageRemove", "pageRename", "pageRouteChange"] }, { kind: "component", type: EventsWorkspaceComponent, selector: "app-events-workspace", inputs: ["schema", "readOnly", "eventApis", "eventApiBrowser", "pages"], outputs: ["schemaChange", "eventsSave"] }, { kind: "component", type: JsonFormRendererComponent, selector: "app-json-form-renderer", inputs: ["schema", "initialValues", "initialFieldLabels", "mode", "device", "showLayoutGuides", "breakpoint", "eventLogger", "eventApis", "eventApiExecutor", "navigateToPage", "uploadOnSubmit", "fieldDataAccessMap", "fieldDataAccessApi", "formContentId", "formContentVersion"], outputs: ["valueChange", "groupedValueChange", "combinedValueChange", "validationChange", "uploadedFilesChange", "formSubmit"] }, { kind: "component", type: EmailRendererComponent, selector: "app-email-renderer", inputs: ["schema", "engine"] }, { kind: "component", type: GlobalDataManagerComponent, selector: "app-global-data-manager", outputs: ["close"] }, { kind: "component", type: AiChatDrawerComponent, selector: "app-ai-chat-drawer", outputs: ["close", "expand"] }, { kind: "component", type: AiWorkspaceComponent, selector: "app-ai-workspace", outputs: ["close"] }] });
26296
+ `, isInline: true, styles: ["@keyframes slideInRight{0%{transform:translate(100%);opacity:0}to{transform:translate(0);opacity:1}}.animate-slide-in-right{animation:slideInRight .3s cubic-bezier(.16,1,.3,1)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1.TitleCasePipe, name: "titlecase" }, { kind: "component", type: JsonFormDesignerComponent, selector: "app-json-form-designer", inputs: ["flavor", "mode", "eventApis", "eventApiExecutor", "pages", "activePageId", "canRemovePage"], outputs: ["pageAdd", "pageSelect", "pageRemove", "pageRename", "pageRouteChange"] }, { kind: "component", type: EventsWorkspaceComponent, selector: "app-events-workspace", inputs: ["schema", "readOnly", "eventApis", "eventApiBrowser", "pages"], outputs: ["schemaChange", "eventsSave"] }, { kind: "component", type: JsonFormRendererComponent, selector: "app-json-form-renderer", inputs: ["schema", "initialValues", "initialFieldLabels", "mode", "device", "showLayoutGuides", "breakpoint", "eventLogger", "eventApis", "eventApiExecutor", "navigateToPage", "uploadOnSubmit", "severityEvaluationMode", "fieldDataAccessMap", "fieldDataAccessApi", "formContentId", "formContentVersion"], outputs: ["valueChange", "groupedValueChange", "combinedValueChange", "validationChange", "uploadedFilesChange", "formSubmit"] }, { kind: "component", type: EmailRendererComponent, selector: "app-email-renderer", inputs: ["schema", "engine"] }, { kind: "component", type: GlobalDataManagerComponent, selector: "app-global-data-manager", outputs: ["close"] }, { kind: "component", type: AiChatDrawerComponent, selector: "app-ai-chat-drawer", outputs: ["close", "expand"] }, { kind: "component", type: AiWorkspaceComponent, selector: "app-ai-workspace", outputs: ["close"] }] });
26267
26297
  }
26268
26298
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: FormDesignerShellComponent, decorators: [{
26269
26299
  type: Component,
@@ -31517,7 +31547,7 @@ class WebsitePreviewShellComponent {
31517
31547
  }
31518
31548
  </main>
31519
31549
  </div>
31520
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: JsonFormRendererComponent, selector: "app-json-form-renderer", inputs: ["schema", "initialValues", "initialFieldLabels", "mode", "device", "showLayoutGuides", "breakpoint", "eventLogger", "eventApis", "eventApiExecutor", "navigateToPage", "uploadOnSubmit", "fieldDataAccessMap", "fieldDataAccessApi", "formContentId", "formContentVersion"], outputs: ["valueChange", "groupedValueChange", "combinedValueChange", "validationChange", "uploadedFilesChange", "formSubmit"] }] });
31550
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: JsonFormRendererComponent, selector: "app-json-form-renderer", inputs: ["schema", "initialValues", "initialFieldLabels", "mode", "device", "showLayoutGuides", "breakpoint", "eventLogger", "eventApis", "eventApiExecutor", "navigateToPage", "uploadOnSubmit", "severityEvaluationMode", "fieldDataAccessMap", "fieldDataAccessApi", "formContentId", "formContentVersion"], outputs: ["valueChange", "groupedValueChange", "combinedValueChange", "validationChange", "uploadedFilesChange", "formSubmit"] }] });
31521
31551
  }
31522
31552
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: WebsitePreviewShellComponent, decorators: [{
31523
31553
  type: Component,
@@ -36973,6 +37003,9 @@ class InlineQuillEditorComponent {
36973
37003
  this.applyEditorAppearance();
36974
37004
  }
36975
37005
  if (changes['html'] && !changes['html'].firstChange) {
37006
+ if (!this.readOnly) {
37007
+ return;
37008
+ }
36976
37009
  this.setHtml(this.html ?? '');
36977
37010
  }
36978
37011
  }
@@ -37066,6 +37099,9 @@ class InlineQuillEditorComponent {
37066
37099
  onEditorMouseDown(event) {
37067
37100
  this.stopInteractionEvent(event);
37068
37101
  }
37102
+ onEditorClick(event) {
37103
+ this.stopInteractionEvent(event);
37104
+ }
37069
37105
  onEditorPointerDown(event) {
37070
37106
  this.stopInteractionEvent(event);
37071
37107
  }
@@ -37086,6 +37122,7 @@ class InlineQuillEditorComponent {
37086
37122
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: InlineQuillEditorComponent, isStandalone: true, selector: "app-inline-quill-editor", inputs: { html: "html", placeholder: "placeholder", readOnly: "readOnly", autoFocus: "autoFocus", containerClass: "containerClass", editorClass: "editorClass", editorStyle: "editorStyle" }, outputs: { htmlChange: "htmlChange", editorBlur: "editorBlur", editorFocus: "editorFocus" }, viewQueries: [{ propertyName: "editorRef", first: true, predicate: ["editor"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: `
37087
37123
  <div class="inline-quill"
37088
37124
  [ngClass]="containerClass"
37125
+ (click)="onEditorClick($event)"
37089
37126
  (mousedown)="onEditorMouseDown($event)"
37090
37127
  (pointerdown)="onEditorPointerDown($event)"
37091
37128
  (touchstart)="onEditorTouchStart($event)"
@@ -37099,6 +37136,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImpo
37099
37136
  args: [{ selector: 'app-inline-quill-editor', standalone: true, imports: [CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, template: `
37100
37137
  <div class="inline-quill"
37101
37138
  [ngClass]="containerClass"
37139
+ (click)="onEditorClick($event)"
37102
37140
  (mousedown)="onEditorMouseDown($event)"
37103
37141
  (pointerdown)="onEditorPointerDown($event)"
37104
37142
  (touchstart)="onEditorTouchStart($event)"