novo-elements 11.3.0-next.3 → 11.3.0-next.5

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.
@@ -29,8 +29,8 @@ export declare class ConditionGroupComponent implements OnInit, OnDestroy {
29
29
  private sanitizeCondition;
30
30
  get root(): FormArray;
31
31
  addCondition(data?: any): void;
32
- removeCondition(index: number): void;
33
- newCondition({ field, operator, scope, value, supportingValue, entity }?: Condition): UntypedFormGroup;
32
+ removeCondition(index: number): Promise<void>;
33
+ newCondition({ field, operator, scope, value, supportingValue, entity, warnOnDelete }?: Condition): UntypedFormGroup;
34
34
  cantRemoveRow(): boolean;
35
35
  static ɵfac: i0.ɵɵFactoryDeclaration<ConditionGroupComponent, never>;
36
36
  static ɵcmp: i0.ɵɵComponentDeclaration<ConditionGroupComponent, "novo-condition-group", never, { "controlName": { "alias": "controlName"; "required": false; }; "groupIndex": { "alias": "groupIndex"; "required": false; }; "hideFirstOperator": { "alias": "hideFirstOperator"; "required": false; }; "canBeEmpty": { "alias": "canBeEmpty"; "required": false; }; "formGroupName": { "alias": "formGroupName"; "required": false; }; }, {}, never, never, false, never>;
@@ -42,7 +42,7 @@ export declare class CriteriaBuilderComponent implements OnInit, OnDestroy, Afte
42
42
  get root(): FormArray;
43
43
  addConditionGroup(data?: any): void;
44
44
  newConditionGroup(data: ConditionGroup): UntypedFormGroup;
45
- newCondition({ field, operator, scope, value, supportingValue }?: Condition): UntypedFormGroup;
45
+ newCondition({ field, operator, scope, value, supportingValue, warnOnDelete }?: Condition): UntypedFormGroup;
46
46
  getFieldEntity(fieldConfigs: any, scope: any): any;
47
47
  removeConditionGroupAt(index: number): void;
48
48
  clearAllConditions(): void;
@@ -41,6 +41,7 @@ export interface Condition {
41
41
  value: any;
42
42
  supportingValue?: any;
43
43
  entity?: string;
44
+ warnOnDelete?: () => Promise<boolean>;
44
45
  }
45
46
  export interface Criteria {
46
47
  criteria: ConditionGroup[];
@@ -1 +1 @@
1
- {"version":3,"file":"novo-elements-addons-ckeditor.mjs","sources":["../../../projects/novo-elements/src/addons/ckeditor/CKEditor.ts","../../../projects/novo-elements/src/addons/ckeditor/CKEditor.module.ts","../../../projects/novo-elements/src/addons/ckeditor/novo-elements-addons-ckeditor.ts"],"sourcesContent":["// NG2\nimport { AfterViewInit, Component, EventEmitter, forwardRef, Input, NgZone, OnDestroy, Output, ViewChild } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n// Value accessor for the component (supports ngModel)\nconst CKEDITOR_CONTROL_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NovoCKEditorElement),\n multi: true,\n};\n\ndeclare const CKEDITOR: any;\ndeclare global {\n interface Window {\n CKEDITOR: any;\n }\n}\n// Prevents CKEDITOR from querying the page for all [contenteditable] elements (fixes a conflict against Codemirror Editor)\ntry {\n CKEDITOR.disableAutoInline = true;\n} catch(err) {\n // may be running in a context without CKEDITOR - ignore\n}\n\n/**\n * CKEditor component\n * Usage :\n * <novo-editor [(ngModel)]=\"data\" [config]=\"{...}\" debounce=\"500\"></novo-editor>\n */\n@Component({\n selector: 'novo-editor',\n providers: [CKEDITOR_CONTROL_VALUE_ACCESSOR],\n template: '<textarea [name]=\"name\" [id]=\"name\" #host></textarea>',\n styleUrls: ['./CKEditor.scss'],\n standalone: false,\n})\nexport class NovoCKEditorElement implements OnDestroy, AfterViewInit, ControlValueAccessor {\n @Input()\n config;\n @Input()\n debounce;\n @Input()\n name;\n @Input()\n minimal;\n @Input()\n startupFocus: boolean = false;\n @Input()\n fileBrowserImageUploadUrl: string = '';\n @Input()\n disabled: boolean = false;\n\n @Output()\n change = new EventEmitter();\n @Output()\n ready = new EventEmitter();\n @Output()\n blur = new EventEmitter();\n @Output()\n focus = new EventEmitter();\n @Output()\n paste = new EventEmitter();\n @Output()\n loaded = new EventEmitter();\n @ViewChild('host')\n host;\n\n _value: string = '';\n instance;\n debounceTimeout;\n\n constructor(private zone: NgZone) {}\n\n get value() {\n return this._value;\n }\n\n @Input()\n set value(v) {\n if (v !== this._value) {\n this._value = v;\n this.onChange(v);\n }\n }\n\n ngOnDestroy() {\n if (this.instance) {\n this.instance.focusManager.blur(true); // Remove focus from editor\n setTimeout(() => {\n this.instance.removeAllListeners();\n const aInstance = CKEDITOR.instances[this.instance.name];\n if (aInstance) {\n aInstance.destroy();\n }\n this.instance.destroy();\n this.instance = null;\n });\n }\n }\n\n ngAfterViewInit() {\n const config = Object.assign(this.getBaseConfig(), this.config);\n if (this.startupFocus) {\n config.startupFocus = true;\n }\n if (this.disabled) {\n config.readOnly = true;\n }\n this.ckeditorInit(config);\n }\n\n updateValue(value) {\n this.zone.run(() => {\n this.value = value;\n this.onChange(value);\n this.onTouched();\n this.change.emit(value);\n });\n }\n\n private ckeditorInit(config) {\n if (!CKEDITOR) {\n console.error('Make sure to include CKEditor sources in your dependencies!');\n return;\n }\n\n // CKEditor replace textarea\n this.instance = CKEDITOR.replace(this.host.nativeElement, config);\n\n // Set initial value\n this.instance.setData(this.value);\n\n // listen for instanceReady event\n this.instance.on('instanceReady', (evt) => {\n // send the evt to the EventEmitter\n this.ready.emit(evt);\n });\n\n // CKEditor change event\n this.instance.on('change', () => {\n this.onTouched();\n const value = this.instance.getData();\n\n // Debounce update\n if (this.debounce) {\n if (this.debounceTimeout) {\n clearTimeout(this.debounceTimeout);\n }\n this.debounceTimeout = setTimeout(() => {\n this.updateValue(value);\n this.debounceTimeout = null;\n }, parseInt(this.debounce, 10));\n } else {\n this.updateValue(value);\n }\n });\n this.instance.on('blur', (event) => {\n this.blur.emit(event);\n });\n this.instance.on('focus', (event) => {\n this.focus.emit(event);\n });\n this.instance.on('paste', (event) => {\n this.paste.emit(event);\n });\n this.instance.on('loaded', (event) => {\n this.loaded.emit(event);\n });\n }\n\n getBaseConfig(): { [key: string]: any } {\n const baseConfig = {\n enterMode: CKEDITOR.ENTER_BR,\n entities: false,\n shiftEnterMode: CKEDITOR.ENTER_P,\n disableNativeSpellChecker: false,\n removePlugins: 'liststyle,tabletools,contextmenu,tableselection', // allows browser based spell checking\n extraAllowedContent: '*(*){*};table tbody tr td th[*];', // allows class names (*) and inline styles {*} for all and attributes [*] on tables\n font_names:\n 'Arial/Arial, Helvetica, sans-serif;' +\n 'Calibri/Calibri, Verdana, Geneva, sans-serif;' +\n 'Comic Sans MS/Comic Sans MS, cursive;' +\n 'Courier New/Courier New, Courier, monospace;' +\n 'Georgia/Georgia, serif;' +\n 'Lucida Sans Unicode/Lucida Sans Unicode, Lucida Grande, sans-serif;' +\n 'Tahoma/Tahoma, Geneva, sans-serif;' +\n 'Times New Roman/Times New Roman, Times, serif;' +\n 'Trebuchet MS/Trebuchet MS, Helvetica, sans-serif;' +\n 'Verdana/Verdana, Geneva, sans-serif',\n };\n\n const minimalConfig = {\n toolbar: [\n {\n name: 'basicstyles',\n items: [\n 'Styles',\n 'FontSize',\n 'Bold',\n 'Italic',\n 'Underline',\n 'TextColor',\n '-',\n 'NumberedList',\n 'BulletedList',\n 'Outdent',\n 'Indent',\n 'Link',\n ],\n },\n ],\n };\n\n const extendedConfig = {\n toolbar: [\n { name: 'clipboard', items: ['Paste', 'PasteText', 'PasteFromWord', 'Undo', 'Redo'] },\n {\n name: 'paragraph',\n items: [\n 'NumberedList',\n 'BulletedList',\n 'Outdent',\n 'Indent',\n 'Blockquote',\n 'JustifyLeft',\n 'JustifyCenter',\n 'JustifyRight',\n 'JustifyBlock',\n 'BidiLtr',\n 'BidiRtl',\n ],\n },\n { name: 'links', items: ['Link'] },\n { name: 'insert', items: ['Image', 'Table', 'HorizontalRule'] },\n { name: 'tools', items: ['Maximize', 'Source'] },\n '/', // line break\n { name: 'basicstyles', items: ['Bold', 'Italic', 'Underline', 'Strike', 'Subscript', 'Superscript'] },\n { name: 'styles', items: ['Styles', 'Format', 'Font', 'FontSize'] },\n { name: 'colors', items: ['TextColor', 'BGColor'] },\n ],\n filebrowserImageUploadUrl: this.fileBrowserImageUploadUrl,\n };\n\n return Object.assign(baseConfig, this.minimal ? minimalConfig : extendedConfig);\n }\n\n writeValue(value) {\n this._value = value;\n if (this.instance) {\n this.instance.setData(value);\n }\n }\n\n onChange(value?: any) {}\n\n onTouched(event?) {}\n\n registerOnChange(fn) {\n this.onChange = fn;\n }\n\n registerOnTouched(fn) {\n this.onTouched = fn;\n }\n\n setDisabledState(disabled: boolean): void {\n this.disabled = disabled;\n if (this.instance) {\n CKEDITOR.instances[this.instance.name].setReadOnly(disabled);\n }\n }\n\n insertText(text) {\n const trimmedText = text.trim();\n this.instance.insertText(trimmedText);\n }\n}\n","// NG2\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n// APP\nimport { NovoCKEditorElement } from './CKEditor';\n\n@NgModule({\n imports: [CommonModule, FormsModule],\n declarations: [NovoCKEditorElement],\n exports: [NovoCKEditorElement],\n})\nexport class NovoNovoCKEditorModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"novo-elements-addons-ckeditor.mjs","sources":["../../../projects/novo-elements/src/addons/ckeditor/CKEditor.ts","../../../projects/novo-elements/src/addons/ckeditor/CKEditor.module.ts","../../../projects/novo-elements/src/addons/ckeditor/novo-elements-addons-ckeditor.ts"],"sourcesContent":["// NG2\nimport { AfterViewInit, Component, EventEmitter, forwardRef, Input, NgZone, OnDestroy, Output, ViewChild } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n// Value accessor for the component (supports ngModel)\nconst CKEDITOR_CONTROL_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NovoCKEditorElement),\n multi: true,\n};\n\ndeclare const CKEDITOR: any;\ndeclare global {\n interface Window {\n CKEDITOR: any;\n }\n}\n// Prevents CKEDITOR from querying the page for all [contenteditable] elements (fixes a conflict against Codemirror Editor)\ntry {\n CKEDITOR.disableAutoInline = true;\n} catch (err) {\n // may be running in a context without CKEDITOR - ignore\n}\n\n/**\n * CKEditor component\n * Usage :\n * <novo-editor [(ngModel)]=\"data\" [config]=\"{...}\" debounce=\"500\"></novo-editor>\n */\n@Component({\n selector: 'novo-editor',\n providers: [CKEDITOR_CONTROL_VALUE_ACCESSOR],\n template: '<textarea [name]=\"name\" [id]=\"name\" #host></textarea>',\n styleUrls: ['./CKEditor.scss'],\n standalone: false,\n})\nexport class NovoCKEditorElement implements OnDestroy, AfterViewInit, ControlValueAccessor {\n @Input()\n config;\n @Input()\n debounce;\n @Input()\n name;\n @Input()\n minimal;\n @Input()\n startupFocus: boolean = false;\n @Input()\n fileBrowserImageUploadUrl: string = '';\n @Input()\n disabled: boolean = false;\n\n @Output()\n change = new EventEmitter();\n @Output()\n ready = new EventEmitter();\n @Output()\n blur = new EventEmitter();\n @Output()\n focus = new EventEmitter();\n @Output()\n paste = new EventEmitter();\n @Output()\n loaded = new EventEmitter();\n @ViewChild('host')\n host;\n\n _value: string = '';\n instance;\n debounceTimeout;\n\n constructor(private zone: NgZone) {}\n\n get value() {\n return this._value;\n }\n\n @Input()\n set value(v) {\n if (v !== this._value) {\n this._value = v;\n this.onChange(v);\n }\n }\n\n ngOnDestroy() {\n if (this.instance) {\n this.instance.focusManager.blur(true); // Remove focus from editor\n setTimeout(() => {\n this.instance.removeAllListeners();\n const aInstance = CKEDITOR.instances[this.instance.name];\n if (aInstance) {\n aInstance.destroy();\n }\n this.instance.destroy();\n this.instance = null;\n });\n }\n }\n\n ngAfterViewInit() {\n const config = Object.assign(this.getBaseConfig(), this.config);\n if (this.startupFocus) {\n config.startupFocus = true;\n }\n if (this.disabled) {\n config.readOnly = true;\n }\n this.ckeditorInit(config);\n }\n\n updateValue(value) {\n this.zone.run(() => {\n this.value = value;\n this.onChange(value);\n this.onTouched();\n this.change.emit(value);\n });\n }\n\n private ckeditorInit(config) {\n if (!CKEDITOR) {\n console.error('Make sure to include CKEditor sources in your dependencies!');\n return;\n }\n\n // CKEditor replace textarea\n this.instance = CKEDITOR.replace(this.host.nativeElement, config);\n\n // Set initial value\n this.instance.setData(this.value);\n\n // listen for instanceReady event\n this.instance.on('instanceReady', (evt) => {\n // send the evt to the EventEmitter\n this.ready.emit(evt);\n });\n\n // CKEditor change event\n this.instance.on('change', () => {\n this.onTouched();\n const value = this.instance.getData();\n\n // Debounce update\n if (this.debounce) {\n if (this.debounceTimeout) {\n clearTimeout(this.debounceTimeout);\n }\n this.debounceTimeout = setTimeout(() => {\n this.updateValue(value);\n this.debounceTimeout = null;\n }, parseInt(this.debounce, 10));\n } else {\n this.updateValue(value);\n }\n });\n this.instance.on('blur', (event) => {\n this.blur.emit(event);\n });\n this.instance.on('focus', (event) => {\n this.focus.emit(event);\n });\n this.instance.on('paste', (event) => {\n this.paste.emit(event);\n });\n this.instance.on('loaded', (event) => {\n this.loaded.emit(event);\n });\n }\n\n getBaseConfig(): { [key: string]: any } {\n const baseConfig = {\n enterMode: CKEDITOR.ENTER_BR,\n entities: false,\n shiftEnterMode: CKEDITOR.ENTER_P,\n disableNativeSpellChecker: false,\n removePlugins: 'liststyle,tabletools,contextmenu,tableselection', // allows browser based spell checking\n extraAllowedContent: '*(*){*};table tbody tr td th[*];', // allows class names (*) and inline styles {*} for all and attributes [*] on tables\n font_names:\n 'Arial/Arial, Helvetica, sans-serif;' +\n 'Calibri/Calibri, Verdana, Geneva, sans-serif;' +\n 'Comic Sans MS/Comic Sans MS, cursive;' +\n 'Courier New/Courier New, Courier, monospace;' +\n 'Georgia/Georgia, serif;' +\n 'Lucida Sans Unicode/Lucida Sans Unicode, Lucida Grande, sans-serif;' +\n 'Tahoma/Tahoma, Geneva, sans-serif;' +\n 'Times New Roman/Times New Roman, Times, serif;' +\n 'Trebuchet MS/Trebuchet MS, Helvetica, sans-serif;' +\n 'Verdana/Verdana, Geneva, sans-serif',\n };\n\n const minimalConfig = {\n toolbar: [\n {\n name: 'basicstyles',\n items: [\n 'Styles',\n 'FontSize',\n 'Bold',\n 'Italic',\n 'Underline',\n 'TextColor',\n '-',\n 'NumberedList',\n 'BulletedList',\n 'Outdent',\n 'Indent',\n 'Link',\n ],\n },\n ],\n };\n\n const extendedConfig = {\n toolbar: [\n { name: 'clipboard', items: ['Paste', 'PasteText', 'PasteFromWord', 'Undo', 'Redo'] },\n {\n name: 'paragraph',\n items: [\n 'NumberedList',\n 'BulletedList',\n 'Outdent',\n 'Indent',\n 'Blockquote',\n 'JustifyLeft',\n 'JustifyCenter',\n 'JustifyRight',\n 'JustifyBlock',\n 'BidiLtr',\n 'BidiRtl',\n ],\n },\n { name: 'links', items: ['Link'] },\n { name: 'insert', items: ['Image', 'Table', 'HorizontalRule'] },\n { name: 'tools', items: ['Maximize', 'Source'] },\n '/', // line break\n { name: 'basicstyles', items: ['Bold', 'Italic', 'Underline', 'Strike', 'Subscript', 'Superscript'] },\n { name: 'styles', items: ['Styles', 'Format', 'Font', 'FontSize'] },\n { name: 'colors', items: ['TextColor', 'BGColor'] },\n ],\n filebrowserImageUploadUrl: this.fileBrowserImageUploadUrl,\n };\n\n return Object.assign(baseConfig, this.minimal ? minimalConfig : extendedConfig);\n }\n\n writeValue(value) {\n this._value = value;\n if (this.instance) {\n this.instance.setData(value);\n }\n }\n\n onChange(value?: any) {}\n\n onTouched(event?) {}\n\n registerOnChange(fn) {\n this.onChange = fn;\n }\n\n registerOnTouched(fn) {\n this.onTouched = fn;\n }\n\n setDisabledState(disabled: boolean): void {\n this.disabled = disabled;\n if (this.instance) {\n CKEDITOR.instances[this.instance.name].setReadOnly(disabled);\n }\n }\n\n insertText(text) {\n const trimmedText = text.trim();\n this.instance.insertText(trimmedText);\n }\n}\n","// NG2\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n// APP\nimport { NovoCKEditorElement } from './CKEditor';\n\n@NgModule({\n imports: [CommonModule, FormsModule],\n declarations: [NovoCKEditorElement],\n exports: [NovoCKEditorElement],\n})\nexport class NovoNovoCKEditorModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -1777,6 +1777,7 @@ class ConditionGroupComponent {
1777
1777
  value: condition.value,
1778
1778
  supportingValue: condition.supportingValue,
1779
1779
  entity: condition.entity,
1780
+ warnOnDelete: condition.warnOnDelete,
1780
1781
  };
1781
1782
  }
1782
1783
  get root() {
@@ -1789,7 +1790,17 @@ class ConditionGroupComponent {
1789
1790
  this.qbs.hasMultipleScopes() && onlyConditionIsEmpty && this.removeCondition(0);
1790
1791
  this.cdr.markForCheck();
1791
1792
  }
1792
- removeCondition(index) {
1793
+ async removeCondition(index) {
1794
+ const condition = this.root.at(index)?.value;
1795
+ const warnOnDelete = condition?.warnOnDelete;
1796
+ const fieldName = condition?.field;
1797
+ const isLastInstanceOfPinnedField = typeof warnOnDelete === 'function' && this.root.value.filter(c => c.field === fieldName).length === 1;
1798
+ if (isLastInstanceOfPinnedField) {
1799
+ const shouldDelete = await warnOnDelete();
1800
+ if (!shouldDelete) {
1801
+ return;
1802
+ }
1803
+ }
1793
1804
  const isPrimaryScope = this.scope === this.qbs.scopes()[0];
1794
1805
  const lastRowInGroup = this.root.length === 1;
1795
1806
  const lastRowInQueryBuilder = this.cantRemoveRow();
@@ -1799,7 +1810,7 @@ class ConditionGroupComponent {
1799
1810
  }
1800
1811
  this.cdr.markForCheck();
1801
1812
  }
1802
- newCondition({ field, operator, scope, value, supportingValue, entity } = EMPTY_CONDITION$1) {
1813
+ newCondition({ field, operator, scope, value, supportingValue, entity, warnOnDelete } = EMPTY_CONDITION$1) {
1803
1814
  return this.formBuilder.group({
1804
1815
  conditionType: '$and',
1805
1816
  field: [field, Validators.required],
@@ -1808,6 +1819,7 @@ class ConditionGroupComponent {
1808
1819
  value: [value],
1809
1820
  supportingValue: [supportingValue],
1810
1821
  entity: [entity],
1822
+ warnOnDelete: [warnOnDelete],
1811
1823
  });
1812
1824
  }
1813
1825
  cantRemoveRow() {
@@ -1817,13 +1829,13 @@ class ConditionGroupComponent {
1817
1829
  return this.root.length <= 1;
1818
1830
  }
1819
1831
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: ConditionGroupComponent, deps: [{ token: QueryBuilderService }, { token: i1.NovoLabelService }, { token: i3.ControlContainer }, { token: i3.FormBuilder }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
1820
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.15", type: ConditionGroupComponent, isStandalone: false, selector: "novo-condition-group", inputs: { controlName: "controlName", groupIndex: "groupIndex", hideFirstOperator: "hideFirstOperator", canBeEmpty: "canBeEmpty", formGroupName: "formGroupName" }, host: { classAttribute: "novo-condition-group" }, providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => ConditionGroupComponent), multi: true }], usesOnChanges: true, ngImport: i0, template: "<div [formGroup]=\"parentForm\" class=\"condition-group-container\">\n <novo-stack [formArrayName]=\"controlName\" gap=\"md\">\n <ng-container\n *ngFor=\"let andGroup of root.controls; let andIndex = index; let isFirst = first;let isLast = last;\">\n <ng-container [formGroupName]=\"andIndex\">\n <novo-flex class=\"condition-row\" [ngClass]=\"{ isFirst: andIndex === 0 }\" [class]=\"entity || scope\" align=\"end\" gap=\"sm\" #flex>\n <novo-dropdown *ngIf=\"(!isFirst || !hideFirstOperator) && qbs.allowedGroupings.length > 1; else labeledGroup\" data-automation-id=\"groupings-dropdown\">\n <button theme=\"dialogue\" icon=\"collapse\" size=\"sm\">{{qbs.getConjunctionLabel(controlName)}}</button>\n <novo-optgroup>\n <novo-option *ngFor=\"let c of qbs.allowedGroupings\" (click)=\"updateControlName(c)\" [attr.data-automation-id]=\"c\">\n {{qbs.getConjunctionLabel(c)}}</novo-option>\n </novo-optgroup>\n </novo-dropdown>\n <ng-template #labeledGroup>\n <novo-label *ngIf=\"!isFirst || !hideFirstOperator\" color=\"ash\" size=\"xs\" uppercase padding=\"sm\">\n {{qbs.getConjunctionLabel(controlName)}}</novo-label>\n </ng-template>\n <novo-condition-builder [groupIndex]=\"groupIndex\" [andIndex]=\"andIndex\" [hideOperator]=\"isFirst && hideFirstOperator\" [scope]=\"scope\" [conditionType]=\"controlName\"></novo-condition-builder>\n <novo-button class=\"delete-btn\" theme=\"icon\" icon=\"delete-o\" color=\"negative\" (click)=\"removeCondition(andIndex)\">\n </novo-button>\n </novo-flex>\n </ng-container>\n </ng-container>\n <button\n *ngIf=\"!qbs.hasMultipleScopes()\"\n theme=\"dialogue\"\n data-automation-id=\"add-advanced-search-condition\"\n icon=\"add-thin\"\n side=\"left\"\n size=\"sm\"\n uppercase\n (click)=\"addCondition()\">\n {{ labels.addCondition }}</button>\n </novo-stack>\n</div>\n", styles: [":host{position:relative;display:block;border:1px solid var(--border);border-radius:var(--border-radius-round);padding:var(--spacing-md);width:100%}:host .condition-row{width:100%}:host .delete-btn{margin-bottom:1px}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i3.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "component", type: i5$2.NovoButtonElement, selector: "novo-button,button[theme]", inputs: ["color", "side", "size", "theme", "loading", "icon", "secondIcon", "disabled"] }, { kind: "component", type: i5.NovoLabel, selector: "novo-label,[novo-label]", inputs: ["id"] }, { kind: "directive", type: i5.PaddingDirective, selector: "[p],[padding],[paddingTop],[paddingRight],[paddingBottom],[paddingLeft],[paddingX],[paddingY],[pt],[pr],[pb],[pl],[px],[py]", inputs: ["padding", "p", "paddingLeft", "pl", "paddingRight", "pr", "paddingTop", "pt", "paddingBottom", "pb", "paddingX", "px", "paddingY", "py"] }, { kind: "directive", type: i5.GapDirective, selector: "[gap]", inputs: ["gap"] }, { kind: "directive", type: i5.ThemeColorDirective, selector: "[theme]", inputs: ["theme"] }, { kind: "component", type: i5.NovoOption, selector: "novo-option", inputs: ["selected", "keepOpen", "novoInert", "value", "disabled"], exportAs: ["novoOption"] }, { kind: "component", type: i5.NovoOptgroup, selector: "novo-optgroup", inputs: ["disabled", "label"], exportAs: ["novoOptgroup"] }, { kind: "component", type: i8.NovoFlexElement, selector: "novo-flex,novo-row", inputs: ["direction", "align", "justify", "wrap", "gap"] }, { kind: "component", type: i8.NovoStackElement, selector: "novo-stack,novo-column", inputs: ["direction", "align"] }, { kind: "component", type: i8$3.NovoDropdownElement, selector: "novo-dropdown", inputs: ["parentScrollSelector", "parentScrollAction", "containerClass", "side", "scrollStrategy", "keepOpen", "height", "width", "appendToBody", "multiple", "scrollToActiveItemOnOpen"], outputs: ["toggled"] }, { kind: "component", type: ConditionBuilderComponent, selector: "novo-condition-builder", inputs: ["label", "scope", "andIndex", "groupIndex", "addressConfig", "dateConfig", "hideOperator", "conditionType", "config", "editTypeFn"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1832
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.15", type: ConditionGroupComponent, isStandalone: false, selector: "novo-condition-group", inputs: { controlName: "controlName", groupIndex: "groupIndex", hideFirstOperator: "hideFirstOperator", canBeEmpty: "canBeEmpty", formGroupName: "formGroupName" }, host: { classAttribute: "novo-condition-group" }, providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => ConditionGroupComponent), multi: true }], usesOnChanges: true, ngImport: i0, template: "<div [formGroup]=\"parentForm\" class=\"condition-group-container\">\n <novo-stack [formArrayName]=\"controlName\" gap=\"md\">\n <ng-container\n *ngFor=\"let andGroup of root.controls; let andIndex = index; let isFirst = first;let isLast = last;\">\n <ng-container [formGroupName]=\"andIndex\">\n <novo-flex class=\"condition-row\" [ngClass]=\"{ isFirst: andIndex === 0 }\" [class]=\"entity || scope\" align=\"end\" gap=\"sm\" #flex>\n <novo-dropdown *ngIf=\"(!isFirst || !hideFirstOperator) && qbs.allowedGroupings.length > 1; else labeledGroup\" data-automation-id=\"groupings-dropdown\">\n <button theme=\"dialogue\" icon=\"collapse\" size=\"sm\">{{qbs.getConjunctionLabel(controlName)}}</button>\n <novo-optgroup>\n <novo-option *ngFor=\"let c of qbs.allowedGroupings\" (click)=\"updateControlName(c)\" [attr.data-automation-id]=\"c\">\n {{qbs.getConjunctionLabel(c)}}</novo-option>\n </novo-optgroup>\n </novo-dropdown>\n <ng-template #labeledGroup>\n <novo-label *ngIf=\"!isFirst || !hideFirstOperator\" color=\"ash\" size=\"xs\" uppercase padding=\"sm\">\n {{qbs.getConjunctionLabel(controlName)}}</novo-label>\n </ng-template>\n <novo-condition-builder [groupIndex]=\"groupIndex\" [andIndex]=\"andIndex\" [hideOperator]=\"isFirst && hideFirstOperator\" [scope]=\"scope\" [conditionType]=\"controlName\"></novo-condition-builder>\n <novo-button class=\"delete-btn\" theme=\"icon\" icon=\"delete-o\" color=\"negative\" (click)=\"removeCondition(andIndex)\" data-automation-id=\"delete-filter-button\">\n </novo-button>\n </novo-flex>\n </ng-container>\n </ng-container>\n <button\n *ngIf=\"!qbs.hasMultipleScopes()\"\n theme=\"dialogue\"\n data-automation-id=\"add-advanced-search-condition\"\n icon=\"add-thin\"\n side=\"left\"\n size=\"sm\"\n uppercase\n (click)=\"addCondition()\">\n {{ labels.addCondition }}</button>\n </novo-stack>\n</div>\n", styles: [":host{position:relative;display:block;border:1px solid var(--border);border-radius:var(--border-radius-round);padding:var(--spacing-md);width:100%}:host .condition-row{width:100%}:host .delete-btn{margin-bottom:1px}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i3.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "component", type: i5$2.NovoButtonElement, selector: "novo-button,button[theme]", inputs: ["color", "side", "size", "theme", "loading", "icon", "secondIcon", "disabled"] }, { kind: "component", type: i5.NovoLabel, selector: "novo-label,[novo-label]", inputs: ["id"] }, { kind: "directive", type: i5.PaddingDirective, selector: "[p],[padding],[paddingTop],[paddingRight],[paddingBottom],[paddingLeft],[paddingX],[paddingY],[pt],[pr],[pb],[pl],[px],[py]", inputs: ["padding", "p", "paddingLeft", "pl", "paddingRight", "pr", "paddingTop", "pt", "paddingBottom", "pb", "paddingX", "px", "paddingY", "py"] }, { kind: "directive", type: i5.GapDirective, selector: "[gap]", inputs: ["gap"] }, { kind: "directive", type: i5.ThemeColorDirective, selector: "[theme]", inputs: ["theme"] }, { kind: "component", type: i5.NovoOption, selector: "novo-option", inputs: ["selected", "keepOpen", "novoInert", "value", "disabled"], exportAs: ["novoOption"] }, { kind: "component", type: i5.NovoOptgroup, selector: "novo-optgroup", inputs: ["disabled", "label"], exportAs: ["novoOptgroup"] }, { kind: "component", type: i8.NovoFlexElement, selector: "novo-flex,novo-row", inputs: ["direction", "align", "justify", "wrap", "gap"] }, { kind: "component", type: i8.NovoStackElement, selector: "novo-stack,novo-column", inputs: ["direction", "align"] }, { kind: "component", type: i8$3.NovoDropdownElement, selector: "novo-dropdown", inputs: ["parentScrollSelector", "parentScrollAction", "containerClass", "side", "scrollStrategy", "keepOpen", "height", "width", "appendToBody", "multiple", "scrollToActiveItemOnOpen"], outputs: ["toggled"] }, { kind: "component", type: ConditionBuilderComponent, selector: "novo-condition-builder", inputs: ["label", "scope", "andIndex", "groupIndex", "addressConfig", "dateConfig", "hideOperator", "conditionType", "config", "editTypeFn"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1821
1833
  }
1822
1834
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: ConditionGroupComponent, decorators: [{
1823
1835
  type: Component,
1824
1836
  args: [{ selector: 'novo-condition-group', changeDetection: ChangeDetectionStrategy.OnPush, providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => ConditionGroupComponent), multi: true }], host: {
1825
1837
  class: 'novo-condition-group',
1826
- }, standalone: false, template: "<div [formGroup]=\"parentForm\" class=\"condition-group-container\">\n <novo-stack [formArrayName]=\"controlName\" gap=\"md\">\n <ng-container\n *ngFor=\"let andGroup of root.controls; let andIndex = index; let isFirst = first;let isLast = last;\">\n <ng-container [formGroupName]=\"andIndex\">\n <novo-flex class=\"condition-row\" [ngClass]=\"{ isFirst: andIndex === 0 }\" [class]=\"entity || scope\" align=\"end\" gap=\"sm\" #flex>\n <novo-dropdown *ngIf=\"(!isFirst || !hideFirstOperator) && qbs.allowedGroupings.length > 1; else labeledGroup\" data-automation-id=\"groupings-dropdown\">\n <button theme=\"dialogue\" icon=\"collapse\" size=\"sm\">{{qbs.getConjunctionLabel(controlName)}}</button>\n <novo-optgroup>\n <novo-option *ngFor=\"let c of qbs.allowedGroupings\" (click)=\"updateControlName(c)\" [attr.data-automation-id]=\"c\">\n {{qbs.getConjunctionLabel(c)}}</novo-option>\n </novo-optgroup>\n </novo-dropdown>\n <ng-template #labeledGroup>\n <novo-label *ngIf=\"!isFirst || !hideFirstOperator\" color=\"ash\" size=\"xs\" uppercase padding=\"sm\">\n {{qbs.getConjunctionLabel(controlName)}}</novo-label>\n </ng-template>\n <novo-condition-builder [groupIndex]=\"groupIndex\" [andIndex]=\"andIndex\" [hideOperator]=\"isFirst && hideFirstOperator\" [scope]=\"scope\" [conditionType]=\"controlName\"></novo-condition-builder>\n <novo-button class=\"delete-btn\" theme=\"icon\" icon=\"delete-o\" color=\"negative\" (click)=\"removeCondition(andIndex)\">\n </novo-button>\n </novo-flex>\n </ng-container>\n </ng-container>\n <button\n *ngIf=\"!qbs.hasMultipleScopes()\"\n theme=\"dialogue\"\n data-automation-id=\"add-advanced-search-condition\"\n icon=\"add-thin\"\n side=\"left\"\n size=\"sm\"\n uppercase\n (click)=\"addCondition()\">\n {{ labels.addCondition }}</button>\n </novo-stack>\n</div>\n", styles: [":host{position:relative;display:block;border:1px solid var(--border);border-radius:var(--border-radius-round);padding:var(--spacing-md);width:100%}:host .condition-row{width:100%}:host .delete-btn{margin-bottom:1px}\n"] }]
1838
+ }, standalone: false, template: "<div [formGroup]=\"parentForm\" class=\"condition-group-container\">\n <novo-stack [formArrayName]=\"controlName\" gap=\"md\">\n <ng-container\n *ngFor=\"let andGroup of root.controls; let andIndex = index; let isFirst = first;let isLast = last;\">\n <ng-container [formGroupName]=\"andIndex\">\n <novo-flex class=\"condition-row\" [ngClass]=\"{ isFirst: andIndex === 0 }\" [class]=\"entity || scope\" align=\"end\" gap=\"sm\" #flex>\n <novo-dropdown *ngIf=\"(!isFirst || !hideFirstOperator) && qbs.allowedGroupings.length > 1; else labeledGroup\" data-automation-id=\"groupings-dropdown\">\n <button theme=\"dialogue\" icon=\"collapse\" size=\"sm\">{{qbs.getConjunctionLabel(controlName)}}</button>\n <novo-optgroup>\n <novo-option *ngFor=\"let c of qbs.allowedGroupings\" (click)=\"updateControlName(c)\" [attr.data-automation-id]=\"c\">\n {{qbs.getConjunctionLabel(c)}}</novo-option>\n </novo-optgroup>\n </novo-dropdown>\n <ng-template #labeledGroup>\n <novo-label *ngIf=\"!isFirst || !hideFirstOperator\" color=\"ash\" size=\"xs\" uppercase padding=\"sm\">\n {{qbs.getConjunctionLabel(controlName)}}</novo-label>\n </ng-template>\n <novo-condition-builder [groupIndex]=\"groupIndex\" [andIndex]=\"andIndex\" [hideOperator]=\"isFirst && hideFirstOperator\" [scope]=\"scope\" [conditionType]=\"controlName\"></novo-condition-builder>\n <novo-button class=\"delete-btn\" theme=\"icon\" icon=\"delete-o\" color=\"negative\" (click)=\"removeCondition(andIndex)\" data-automation-id=\"delete-filter-button\">\n </novo-button>\n </novo-flex>\n </ng-container>\n </ng-container>\n <button\n *ngIf=\"!qbs.hasMultipleScopes()\"\n theme=\"dialogue\"\n data-automation-id=\"add-advanced-search-condition\"\n icon=\"add-thin\"\n side=\"left\"\n size=\"sm\"\n uppercase\n (click)=\"addCondition()\">\n {{ labels.addCondition }}</button>\n </novo-stack>\n</div>\n", styles: [":host{position:relative;display:block;border:1px solid var(--border);border-radius:var(--border-radius-round);padding:var(--spacing-md);width:100%}:host .condition-row{width:100%}:host .delete-btn{margin-bottom:1px}\n"] }]
1827
1839
  }], ctorParameters: () => [{ type: QueryBuilderService }, { type: i1.NovoLabelService }, { type: i3.ControlContainer }, { type: i3.FormBuilder }, { type: i0.ChangeDetectorRef }], propDecorators: { controlName: [{
1828
1840
  type: Input
1829
1841
  }], groupIndex: [{
@@ -1844,6 +1856,7 @@ const EMPTY_CONDITION = {
1844
1856
  value: null,
1845
1857
  supportingValue: null,
1846
1858
  entity: null,
1859
+ warnOnDelete: undefined,
1847
1860
  };
1848
1861
  class CriteriaBuilderComponent {
1849
1862
  set HideFirstOperator(hide) {
@@ -1975,7 +1988,7 @@ class CriteriaBuilderComponent {
1975
1988
  }, {});
1976
1989
  return this.formBuilder.group(controls);
1977
1990
  }
1978
- newCondition({ field, operator, scope, value, supportingValue } = EMPTY_CONDITION) {
1991
+ newCondition({ field, operator, scope, value, supportingValue, warnOnDelete } = EMPTY_CONDITION) {
1979
1992
  const entity = this.getFieldEntity(this.config, scope);
1980
1993
  return this.formBuilder.group({
1981
1994
  conditionType: '$and',
@@ -1985,6 +1998,7 @@ class CriteriaBuilderComponent {
1985
1998
  value: [value],
1986
1999
  supportingValue: [supportingValue],
1987
2000
  entity: [entity],
2001
+ warnOnDelete: [warnOnDelete],
1988
2002
  });
1989
2003
  }
1990
2004
  getFieldEntity(fieldConfigs, scope) {