novo-elements 7.4.0 → 7.5.0-next.1

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 (25) hide show
  1. package/elements/picker/Picker.scss +8 -1
  2. package/elements/query-builder/condition-builder/condition-builder.component.scss +0 -1
  3. package/esm2020/src/elements/chips/ChipInput.mjs +2 -2
  4. package/esm2020/src/elements/data-table/data-table.component.mjs +14 -11
  5. package/esm2020/src/elements/data-table/interfaces.mjs +1 -1
  6. package/esm2020/src/elements/data-table/state/data-table-state.service.mjs +48 -30
  7. package/esm2020/src/elements/field/formats/date-format.mjs +2 -4
  8. package/esm2020/src/elements/field/formats/date-range-format.mjs +1 -2
  9. package/esm2020/src/elements/field/formats/time-format.mjs +2 -4
  10. package/esm2020/src/elements/picker/extras/workers-comp-codes-picker-results/WorkersCompCodesPickerResults.mjs +16 -21
  11. package/esm2020/src/elements/query-builder/condition-builder/condition-builder.component.mjs +1 -5
  12. package/esm2020/src/elements/query-builder/condition-definitions/string-condition.definition.mjs +9 -12
  13. package/esm2020/src/elements/query-builder/condition-group/condition-group.component.mjs +4 -4
  14. package/esm2020/src/elements/query-builder/criteria-builder/criteria-builder.component.mjs +2 -2
  15. package/fesm2015/novo-elements.mjs +89 -84
  16. package/fesm2015/novo-elements.mjs.map +1 -1
  17. package/fesm2020/novo-elements.mjs +88 -84
  18. package/fesm2020/novo-elements.mjs.map +1 -1
  19. package/package.json +1 -1
  20. package/src/elements/chips/ChipInput.d.ts +1 -1
  21. package/src/elements/data-table/interfaces.d.ts +1 -0
  22. package/src/elements/data-table/state/data-table-state.service.d.ts +5 -1
  23. package/src/elements/picker/extras/workers-comp-codes-picker-results/WorkersCompCodesPickerResults.d.ts +2 -5
  24. package/src/elements/query-builder/condition-definitions/string-condition.definition.d.ts +3 -4
  25. package/elements/picker/extras/workers-comp-codes-picker-results/WorkersCompCodesPickerResults.scss +0 -0
@@ -29712,26 +29712,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
29712
29712
  }] } });
29713
29713
 
29714
29714
  // NG2
29715
- class WorkersCompCodesPickerResults extends BasePickerResults {
29715
+ class WorkersCompCodesPickerResults extends PickerResults {
29716
29716
  constructor(element, sanitizer, labels, ref) {
29717
- super(element, ref);
29717
+ super(element, labels, ref);
29718
29718
  this.sanitizer = sanitizer;
29719
29719
  this.labels = labels;
29720
- this.active = true;
29721
- this.sanitizer = sanitizer;
29722
- }
29723
- get isHidden() {
29724
- return this.matches.length === 0;
29725
- }
29726
- getListElement() {
29727
- return this.element.nativeElement.querySelector('novo-list');
29728
29720
  }
29729
29721
  sanitizeHTML(compCode, name) {
29730
29722
  return this.sanitizer.bypassSecurityTrustHtml(`${compCode} | ${name}`);
29731
29723
  }
29732
29724
  }
29733
29725
  WorkersCompCodesPickerResults.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: WorkersCompCodesPickerResults, deps: [{ token: i0.ElementRef }, { token: i1$2.DomSanitizer }, { token: NovoLabelService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
29734
- WorkersCompCodesPickerResults.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: WorkersCompCodesPickerResults, selector: "workers-comp-codes-picker-results", host: { properties: { "class.active": "this.active", "hidden": "this.isHidden" } }, usesInheritance: true, ngImport: i0, template: `
29726
+ WorkersCompCodesPickerResults.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: WorkersCompCodesPickerResults, selector: "workers-comp-codes-picker-results", host: { classAttribute: "active" }, usesInheritance: true, ngImport: i0, template: `
29735
29727
  <section class="picker-loading" *ngIf="isLoading && !matches?.length">
29736
29728
  <novo-loading theme="line"></novo-loading>
29737
29729
  </section>
@@ -29769,11 +29761,17 @@ WorkersCompCodesPickerResults.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "1
29769
29761
  </novo-list-item>
29770
29762
  <novo-loading theme="line" *ngIf="isLoading && matches?.length > 0"></novo-loading>
29771
29763
  </novo-list>
29764
+ <div class="picker-loader" *ngIf="isLoading && matches.length === 0"><novo-loading theme="line"></novo-loading></div>
29765
+ <p class="picker-error" *ngIf="hasError">{{ labels.pickerError }}</p>
29766
+ <p class="picker-null-results" *ngIf="hasNonErrorMessage">{{ getEmptyMessage() }}</p>
29772
29767
  `, isInline: true, components: [{ type: NovoLoadingElement, selector: "novo-loading", inputs: ["theme", "color", "size"] }, { type: NovoListElement, selector: "novo-list", inputs: ["theme", "direction"] }, { type: NovoListItemElement, selector: "novo-list-item, a[list-item], button[list-item]" }, { type: NovoItemHeaderElement, selector: "item-header, novo-item-header" }, { type: NovoItemTitleElement, selector: "item-title, novo-item-title" }, { type: NovoItemContentElement, selector: "item-content, novo-item-content", inputs: ["direction"] }], directives: [{ type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: ThemeColorDirective, selector: "[theme]", inputs: ["theme"] }, { type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
29773
29768
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: WorkersCompCodesPickerResults, decorators: [{
29774
29769
  type: Component,
29775
29770
  args: [{
29776
29771
  selector: 'workers-comp-codes-picker-results',
29772
+ host: {
29773
+ class: 'active',
29774
+ },
29777
29775
  template: `
29778
29776
  <section class="picker-loading" *ngIf="isLoading && !matches?.length">
29779
29777
  <novo-loading theme="line"></novo-loading>
@@ -29812,15 +29810,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
29812
29810
  </novo-list-item>
29813
29811
  <novo-loading theme="line" *ngIf="isLoading && matches?.length > 0"></novo-loading>
29814
29812
  </novo-list>
29813
+ <div class="picker-loader" *ngIf="isLoading && matches.length === 0"><novo-loading theme="line"></novo-loading></div>
29814
+ <p class="picker-error" *ngIf="hasError">{{ labels.pickerError }}</p>
29815
+ <p class="picker-null-results" *ngIf="hasNonErrorMessage">{{ getEmptyMessage() }}</p>
29815
29816
  `,
29816
29817
  }]
29817
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1$2.DomSanitizer }, { type: NovoLabelService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { active: [{
29818
- type: HostBinding,
29819
- args: ['class.active']
29820
- }], isHidden: [{
29821
- type: HostBinding,
29822
- args: ['hidden']
29823
- }] } });
29818
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1$2.DomSanitizer }, { type: NovoLabelService }, { type: i0.ChangeDetectorRef }]; } });
29824
29819
 
29825
29820
  // NG2
29826
29821
  // Value accessor for the component (supports ngModel)
@@ -33269,9 +33264,7 @@ const DATEFORMAT_VALUE_ACCESSOR = {
33269
33264
  multi: true,
33270
33265
  };
33271
33266
  class NovoDateFormatDirective extends IMaskDirective {
33272
- constructor(_element, _renderer, _factory,
33273
- // @Optional() @Inject(PLATFORM_ID) _platformId: string,
33274
- _compositionMode, labels) {
33267
+ constructor(_element, _renderer, _factory, _compositionMode, labels) {
33275
33268
  super(_element, _renderer, _factory, _compositionMode);
33276
33269
  this._element = _element;
33277
33270
  this.labels = labels;
@@ -33397,7 +33390,6 @@ class NovoDateRangeFormatDirective extends IMaskDirective {
33397
33390
  this.unmask = false;
33398
33391
  this.imask = {
33399
33392
  mask: 'm{/}`d{/}`Y - m{/}`d{/}`Y',
33400
- // pattern: 'm{/}`d{/}`Y - m{/}`d{/}`Y',
33401
33393
  overwrite: true,
33402
33394
  autofix: true,
33403
33395
  lazy: false,
@@ -33527,9 +33519,7 @@ var TIME_FORMATS;
33527
33519
  TIME_FORMATS["STRING"] = "string";
33528
33520
  })(TIME_FORMATS || (TIME_FORMATS = {}));
33529
33521
  class NovoTimeFormatDirective extends IMaskDirective {
33530
- constructor(_element, _renderer, _factory,
33531
- // @Optional() @Inject(PLATFORM_ID) _platformId: string,
33532
- _compositionMode, labels, cdr) {
33522
+ constructor(_element, _renderer, _factory, _compositionMode, labels, cdr) {
33533
33523
  super(_element, _renderer, _factory, _compositionMode);
33534
33524
  this._element = _element;
33535
33525
  this.labels = labels;
@@ -35184,7 +35174,7 @@ class NovoChipInput {
35184
35174
  focus(options) {
35185
35175
  this._inputElement.focus(options);
35186
35176
  }
35187
- /** Focuses the input. */
35177
+ /** Clears the input. */
35188
35178
  clearValue() {
35189
35179
  var _a;
35190
35180
  this._inputElement.value = '';
@@ -37295,6 +37285,8 @@ class DataTableState {
37295
37285
  this.isForceRefresh = false;
37296
37286
  this.updates = new EventEmitter();
37297
37287
  this.retainSelected = false;
37288
+ this.savedSearchName = undefined;
37289
+ this.displayedColumns = undefined;
37298
37290
  }
37299
37291
  get userFiltered() {
37300
37292
  return !!(this.filter || this.sort || this.globalSearch || this.outsideFilter || this.where);
@@ -37306,27 +37298,7 @@ class DataTableState {
37306
37298
  return Array.from(this.selectedRows.values());
37307
37299
  }
37308
37300
  reset(fireUpdate = true, persistUserFilters) {
37309
- if (!persistUserFilters) {
37310
- this.sort = undefined;
37311
- this.globalSearch = undefined;
37312
- this.filter = undefined;
37313
- this.where = undefined;
37314
- }
37315
- this.page = 0;
37316
- if (!this.retainSelected) {
37317
- this.selectedRows.clear();
37318
- this.resetSource.next();
37319
- }
37320
- this.onSortFilterChange();
37321
- this.retainSelected = false;
37322
- if (fireUpdate) {
37323
- this.updates.emit({
37324
- sort: this.sort,
37325
- filter: this.filter,
37326
- globalSearch: this.globalSearch,
37327
- where: this.where,
37328
- });
37329
- }
37301
+ this.setState({}, fireUpdate, persistUserFilters);
37330
37302
  }
37331
37303
  clearSort(fireUpdate = true) {
37332
37304
  this.sort = undefined;
@@ -37408,6 +37380,7 @@ class DataTableState {
37408
37380
  filter: this.filter,
37409
37381
  globalSearch: this.globalSearch,
37410
37382
  where: this.where,
37383
+ savedSearchName: this.savedSearchName,
37411
37384
  });
37412
37385
  }
37413
37386
  setInitialSortFilter(preferences) {
@@ -37419,24 +37392,60 @@ class DataTableState {
37419
37392
  this.sort = preferences.sort;
37420
37393
  }
37421
37394
  if (preferences.filter) {
37422
- const filters = Helpers.convertToArray(preferences.filter);
37423
- filters.forEach((filter) => {
37424
- filter.value =
37425
- filter.selectedOption && filter.type
37426
- ? NovoDataTableFilterUtils.constructFilter(filter.selectedOption, filter.type)
37427
- : filter.value;
37428
- });
37429
- this.filter = filters;
37395
+ this.filter = this.transformFilters(preferences.filter);
37430
37396
  }
37431
37397
  if (preferences.globalSearch) {
37432
37398
  this.globalSearch = preferences.globalSearch;
37433
37399
  }
37400
+ if (preferences.savedSearchName) {
37401
+ this.savedSearchName = preferences.savedSearchName;
37402
+ }
37403
+ }
37404
+ }
37405
+ setState(preferences, fireUpdate = true, persistUserFilters = false) {
37406
+ var _a;
37407
+ if (!persistUserFilters) {
37408
+ this.where = preferences.where;
37409
+ this.sort = preferences.sort;
37410
+ this.filter = preferences.filter ? this.transformFilters(preferences.filter) : undefined;
37411
+ this.globalSearch = preferences.globalSearch;
37412
+ this.savedSearchName = preferences.savedSearchName;
37413
+ if ((_a = preferences.displayedColumns) === null || _a === void 0 ? void 0 : _a.length) {
37414
+ this.displayedColumns = preferences.displayedColumns;
37415
+ }
37416
+ }
37417
+ this.page = 0;
37418
+ if (!this.retainSelected) {
37419
+ this.selectedRows.clear();
37420
+ this.resetSource.next();
37421
+ }
37422
+ this.onSortFilterChange();
37423
+ this.retainSelected = false;
37424
+ if (fireUpdate) {
37425
+ this.updates.emit({
37426
+ sort: this.sort,
37427
+ filter: this.filter,
37428
+ globalSearch: this.globalSearch,
37429
+ where: this.where,
37430
+ savedSearchName: this.savedSearchName,
37431
+ displayedColumns: this.displayedColumns,
37432
+ });
37434
37433
  }
37435
37434
  }
37436
37435
  checkRetainment(caller, allMatchingSelected = false) {
37437
37436
  var _a;
37438
37437
  this.retainSelected = ((_a = this.selectionOptions) === null || _a === void 0 ? void 0 : _a.some((option) => option.label === caller)) || this.retainSelected || allMatchingSelected;
37439
37438
  }
37439
+ transformFilters(filters) {
37440
+ const filterArray = Helpers.convertToArray(filters);
37441
+ filterArray.forEach((filter) => {
37442
+ filter.value =
37443
+ filter.selectedOption && filter.type
37444
+ ? NovoDataTableFilterUtils.constructFilter(filter.selectedOption, filter.type)
37445
+ : filter.value;
37446
+ });
37447
+ return filterArray;
37448
+ }
37440
37449
  }
37441
37450
  DataTableState.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: DataTableState, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
37442
37451
  DataTableState.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: DataTableState });
@@ -40878,6 +40887,7 @@ class NovoDataTable {
40878
40887
  filter: event.filter,
40879
40888
  globalSearch: event.globalSearch,
40880
40889
  where: event.where,
40890
+ savedSearchName: event.savedSearchName,
40881
40891
  });
40882
40892
  this.performInteractions('change');
40883
40893
  }
@@ -41010,17 +41020,19 @@ class NovoDataTable {
41010
41020
  }
41011
41021
  modifyCellHeaderMultiSelectFilterOptions(column, newOptions) {
41012
41022
  const header = this.cellHeaders.find((cellHeader) => cellHeader.id === column);
41013
- if (header && header.config && header.config.filterConfig && header.config.filterConfig.options) {
41014
- const filterOptions = header.config.filterConfig.options;
41015
- const optionsToKeep = filterOptions.filter((opt) => header.isSelected(opt, header.multiSelectedOptions) &&
41016
- !newOptions.find((newOpt) => opt.value && newOpt.value && newOpt.value === opt.value));
41017
- header.config.filterConfig.options = [...optionsToKeep, ...newOptions];
41018
- }
41019
- else {
41020
- header.config.filterConfig.options = newOptions;
41023
+ if (header) {
41024
+ if (header.config && header.config.filterConfig && header.config.filterConfig.options) {
41025
+ const filterOptions = header.config.filterConfig.options;
41026
+ const optionsToKeep = filterOptions.filter((opt) => header.isSelected(opt, header.multiSelectedOptions) &&
41027
+ !newOptions.find((newOpt) => opt.value && newOpt.value && newOpt.value === opt.value));
41028
+ header.config.filterConfig.options = [...optionsToKeep, ...newOptions];
41029
+ }
41030
+ else {
41031
+ header.config.filterConfig.options = newOptions;
41032
+ }
41033
+ header.setupFilterOptions();
41034
+ header.changeDetectorRef.markForCheck();
41021
41035
  }
41022
- header.setupFilterOptions();
41023
- header.changeDetectorRef.markForCheck();
41024
41036
  }
41025
41037
  ngOnDestroy() {
41026
41038
  var _a, _b, _c, _d, _e;
@@ -56591,7 +56603,6 @@ class ConditionBuilderComponent {
56591
56603
  const { fields = [] } = this.qbs.config || {};
56592
56604
  fields.length && this.changeFieldOptions(fields[0]);
56593
56605
  this.searches = this.searchTerm.valueChanges.pipe(debounceTime(300), distinctUntilChanged()).subscribe((term) => {
56594
- // this.parentForm.get('field').setValue(null);
56595
56606
  this.results$ = Promise.resolve(this.fieldConfig.options.filter((f) => { var _a; return f.name.toLowerCase().includes(term.toLowerCase()) || ((_a = f.label) === null || _a === void 0 ? void 0 : _a.toLowerCase().includes(term.toLowerCase())); }));
56596
56607
  this.cdr.markForCheck();
56597
56608
  });
@@ -56608,8 +56619,6 @@ class ConditionBuilderComponent {
56608
56619
  [this._operatorOutlet.viewContainer, this._inputOutlet.viewContainer].forEach((def) => {
56609
56620
  def.clear();
56610
56621
  });
56611
- // this._contentFieldTypeDefs = [];
56612
- // this._contentFieldDefs = [];
56613
56622
  this._onDestroy.next();
56614
56623
  this._onDestroy.complete();
56615
56624
  }
@@ -56618,7 +56627,6 @@ class ConditionBuilderComponent {
56618
56627
  * @param fieldConfig
56619
56628
  */
56620
56629
  changeFieldOptions(fieldConfig) {
56621
- // this.fields = entity.filter(term);
56622
56630
  this.fieldConfig = fieldConfig;
56623
56631
  this.searchTerm.setValue('');
56624
56632
  this.results$ = Promise.resolve(this.fieldConfig.options);
@@ -57211,9 +57219,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
57211
57219
  }] });
57212
57220
 
57213
57221
  /**
57214
- * Contruction filters against String fields can be complex. Each "chip" added to the
57215
- * condition can be used to indendantly used to query a database. Not all systems support
57216
- * quering within a text column, ie sql unless LIKE is enabled. This could result in a
57222
+ * Constructing filters against String fields can be complex. Each "chip" added to the
57223
+ * condition can be independently used to query a database. Not all systems support
57224
+ * querying within a text column, ie sql unless LIKE is enabled. This could result in a
57217
57225
  * performance penalty.
57218
57226
  */
57219
57227
  class NovoDefaultStringConditionDef extends AbstractConditionFieldDef {
@@ -57221,7 +57229,6 @@ class NovoDefaultStringConditionDef extends AbstractConditionFieldDef {
57221
57229
  super(...arguments);
57222
57230
  this.separatorKeysCodes = [ENTER, COMMA];
57223
57231
  this.defaultOperator = 'includeAny';
57224
- this.model = '';
57225
57232
  }
57226
57233
  getValue(formGroup) {
57227
57234
  var _a;
@@ -57262,15 +57269,14 @@ NovoDefaultStringConditionDef.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "1
57262
57269
  <novo-option value="excludeAny">{{ labels.exclude }}</novo-option>
57263
57270
  </novo-select>
57264
57271
  </novo-field>
57265
- <novo-field *novoConditionInputDef="let formGroup">
57266
- <novo-chip-list #chipList aria-label="filter value">
57272
+ <novo-field *novoConditionInputDef="let formGroup" [formGroup]="formGroup">
57273
+ <novo-chip-list #chipList aria-label="filter value" formControlName="value">
57267
57274
  <novo-chip *ngFor="let chip of formGroup.value?.value || []" [value]="chip" (removed)="remove(chip, formGroup)">
57268
57275
  {{ chip }}
57269
57276
  <novo-icon novoChipRemove>close</novo-icon>
57270
57277
  </novo-chip>
57271
57278
  <input
57272
57279
  novoChipInput
57273
- [(ngModel)]="model"
57274
57280
  [placeholder]="labels.typeToAddChips"
57275
57281
  autocomplete="off"
57276
57282
  (novoChipInputTokenEnd)="add($event, formGroup)"
@@ -57279,7 +57285,7 @@ NovoDefaultStringConditionDef.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "1
57279
57285
  <novo-autocomplete></novo-autocomplete>
57280
57286
  </novo-field>
57281
57287
  </ng-container>
57282
- `, isInline: true, components: [{ type: NovoFieldElement, selector: "novo-field", inputs: ["layout", "appearance", "width"], outputs: ["valueChanges", "stateChanges"] }, { type: NovoSelectElement, selector: "novo-select", inputs: ["disabled", "required", "tabIndex", "id", "name", "options", "placeholder", "readonly", "headerConfig", "position", "overlayWidth", "overlayHeight", "displayWith", "compareWith", "value", "multiple"], outputs: ["onSelect", "selectionChange", "valueChange", "openedChange", "opened", "closed"] }, { type: NovoOption, selector: "novo-option", inputs: ["selected", "keepOpen", "novoInert", "value", "disabled"], exportAs: ["novoOption"] }, { type: NovoChipList, selector: "novo-chip-list", inputs: ["errorStateMatcher", "multiple", "stacked", "compareWith", "value", "required", "placeholder", "disabled", "aria-orientation", "selectable", "tabIndex"], outputs: ["change", "valueChange"], exportAs: ["novoChipList"] }, { type: NovoChipElement, selector: "novo-chip, [novo-chip]", inputs: ["color", "tabIndex", "size", "type", "selected", "value", "selectable", "disabled", "removable"], outputs: ["selectionChange", "destroyed", "removed"] }, { type: NovoIconComponent, selector: "novo-icon", inputs: ["raised", "theme", "shape", "color", "size", "smaller", "larger", "alt", "name"] }, { type: NovoAutocompleteElement, selector: "novo-autocomplete", inputs: ["tabIndex", "triggerOn", "displayWith", "aria-label", "multiple", "disabled"], outputs: ["optionSelected", "optionActivated"], exportAs: ["novoAutocomplete"] }], directives: [{ type: NovoConditionFieldDef, selector: "[novoConditionFieldDef]" }, { type: NovoConditionOperatorsDef, selector: "[novoConditionOperatorsDef]" }, { type: i5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i5.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i5.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: NovoConditionInputDef, selector: "[novoConditionInputDef]" }, { type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: NovoChipRemove, selector: "[novoChipRemove]" }, { type: NovoChipInput, selector: "input[novoChipInput]", inputs: ["novoChipInputAddOnBlur", "novoChipInputSeparatorKeyCodes", "placeholder", "id", "disabled"], outputs: ["novoChipInputTokenEnd"], exportAs: ["novoChipInput", "novoChipInputFor"] }, { type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], changeDetection: i0.ChangeDetectionStrategy.Default, encapsulation: i0.ViewEncapsulation.None });
57288
+ `, isInline: true, components: [{ type: NovoFieldElement, selector: "novo-field", inputs: ["layout", "appearance", "width"], outputs: ["valueChanges", "stateChanges"] }, { type: NovoSelectElement, selector: "novo-select", inputs: ["disabled", "required", "tabIndex", "id", "name", "options", "placeholder", "readonly", "headerConfig", "position", "overlayWidth", "overlayHeight", "displayWith", "compareWith", "value", "multiple"], outputs: ["onSelect", "selectionChange", "valueChange", "openedChange", "opened", "closed"] }, { type: NovoOption, selector: "novo-option", inputs: ["selected", "keepOpen", "novoInert", "value", "disabled"], exportAs: ["novoOption"] }, { type: NovoChipList, selector: "novo-chip-list", inputs: ["errorStateMatcher", "multiple", "stacked", "compareWith", "value", "required", "placeholder", "disabled", "aria-orientation", "selectable", "tabIndex"], outputs: ["change", "valueChange"], exportAs: ["novoChipList"] }, { type: NovoChipElement, selector: "novo-chip, [novo-chip]", inputs: ["color", "tabIndex", "size", "type", "selected", "value", "selectable", "disabled", "removable"], outputs: ["selectionChange", "destroyed", "removed"] }, { type: NovoIconComponent, selector: "novo-icon", inputs: ["raised", "theme", "shape", "color", "size", "smaller", "larger", "alt", "name"] }, { type: NovoAutocompleteElement, selector: "novo-autocomplete", inputs: ["tabIndex", "triggerOn", "displayWith", "aria-label", "multiple", "disabled"], outputs: ["optionSelected", "optionActivated"], exportAs: ["novoAutocomplete"] }], directives: [{ type: NovoConditionFieldDef, selector: "[novoConditionFieldDef]" }, { type: NovoConditionOperatorsDef, selector: "[novoConditionOperatorsDef]" }, { type: i5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i5.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i5.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: NovoConditionInputDef, selector: "[novoConditionInputDef]" }, { type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: NovoChipRemove, selector: "[novoChipRemove]" }, { type: NovoChipInput, selector: "input[novoChipInput]", inputs: ["novoChipInputAddOnBlur", "novoChipInputSeparatorKeyCodes", "placeholder", "id", "disabled"], outputs: ["novoChipInputTokenEnd"], exportAs: ["novoChipInput", "novoChipInputFor"] }], changeDetection: i0.ChangeDetectionStrategy.Default, encapsulation: i0.ViewEncapsulation.None });
57283
57289
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: NovoDefaultStringConditionDef, decorators: [{
57284
57290
  type: Component,
57285
57291
  args: [{
@@ -57294,15 +57300,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
57294
57300
  <novo-option value="excludeAny">{{ labels.exclude }}</novo-option>
57295
57301
  </novo-select>
57296
57302
  </novo-field>
57297
- <novo-field *novoConditionInputDef="let formGroup">
57298
- <novo-chip-list #chipList aria-label="filter value">
57303
+ <novo-field *novoConditionInputDef="let formGroup" [formGroup]="formGroup">
57304
+ <novo-chip-list #chipList aria-label="filter value" formControlName="value">
57299
57305
  <novo-chip *ngFor="let chip of formGroup.value?.value || []" [value]="chip" (removed)="remove(chip, formGroup)">
57300
57306
  {{ chip }}
57301
57307
  <novo-icon novoChipRemove>close</novo-icon>
57302
57308
  </novo-chip>
57303
57309
  <input
57304
57310
  novoChipInput
57305
- [(ngModel)]="model"
57306
57311
  [placeholder]="labels.typeToAddChips"
57307
57312
  autocomplete="off"
57308
57313
  (novoChipInputTokenEnd)="add($event, formGroup)"
@@ -57377,7 +57382,7 @@ class ConditionGroupComponent {
57377
57382
  return this.formBuilder.group({
57378
57383
  field: [field, Validators.required],
57379
57384
  operator: [operator, Validators.required],
57380
- value: [value, Validators.required],
57385
+ value: [value],
57381
57386
  });
57382
57387
  }
57383
57388
  cantRemoveRow(isFirst) {
@@ -57387,12 +57392,12 @@ class ConditionGroupComponent {
57387
57392
  }
57388
57393
  }
57389
57394
  ConditionGroupComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ConditionGroupComponent, deps: [{ token: QueryBuilderService }, { token: NovoLabelService }, { token: i5.ControlContainer }, { token: i5.FormBuilder }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
57390
- ConditionGroupComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: ConditionGroupComponent, selector: "novo-condition-group", inputs: { controlName: "controlName", groupIndex: "groupIndex" }, host: { classAttribute: "novo-condition-group" }, providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => ConditionGroupComponent), multi: 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\" align=\"end\" gap=\"sm\">\n <novo-dropdown *ngIf=\"!isFirst && qbs.allowedGroupings.length > 1; else labeledGroup\">\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)\">\n {{qbs.getConjunctionLabel(c)}}</novo-option>\n </novo-optgroup>\n </novo-dropdown>\n <ng-template #labeledGroup>\n <novo-label *ngIf=\"!isFirst\" color=\"ash\" size=\"xs\" uppercase padding=\"sm\">\n {{qbs.getConjunctionLabel(controlName)}}</novo-label>\n </ng-template>\n <novo-condition-builder [groupIndex]=\"groupIndex\" [andIndex]=\"andIndex\" [isFirst]=\"isFirst\"></novo-condition-builder>\n <novo-button theme=\"icon\" icon=\"delete-o\" color=\"negative\" (click)=\"removeCondition(andIndex)\"\n [disabled]=\"cantRemoveRow(isFirst)\">\n </novo-button>\n </novo-flex>\n </ng-container>\n </ng-container>\n <button theme=\"dialogue\" data-automation-id=\"add-advanced-search-condition\" icon=\"add-thin\" side=\"left\" size=\"sm\" uppercase padding=\"sm\" (click)=\"addCondition()\">\n {{ labels.addCondition }}</button>\n </novo-stack>\n\n\n <!-- <button class=\"and-or-button\" theme=\"secondary\" size=\"sm\" (click)=\"addRootCondition()\">{{ addCriteriaLabel }}</button> -->\n</div>", 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%}\n"], components: [{ type: NovoStackElement, selector: "novo-stack,novo-column", inputs: ["direction", "align"] }, { type: NovoFlexElement, selector: "novo-flex,novo-row", inputs: ["direction", "align", "justify", "wrap", "gap"] }, { type: NovoDropdownElement, selector: "novo-dropdown", inputs: ["parentScrollSelector", "parentScrollAction", "containerClass", "side", "scrollStrategy", "keepOpen", "height", "width", "appendToBody", "multiple"], outputs: ["toggled"] }, { type: NovoButtonElement, selector: "novo-button,button[theme]", inputs: ["color", "side", "size", "theme", "loading", "icon", "disabled"] }, { type: NovoOptgroup, selector: "novo-optgroup", inputs: ["disabled", "label"], exportAs: ["novoOptgroup"] }, { type: NovoOption, selector: "novo-option", inputs: ["selected", "keepOpen", "novoInert", "value", "disabled"], exportAs: ["novoOption"] }, { type: NovoLabel, selector: "novo-label,[novo-label]" }, { type: ConditionBuilderComponent, selector: "novo-condition-builder", inputs: ["label", "isFirst", "andIndex", "groupIndex"] }], directives: [{ type: i5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i5.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: GapDirective, selector: "[gap]", inputs: ["gap"] }, { type: i5.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i5.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: ThemeColorDirective, selector: "[theme]", inputs: ["theme"] }, { type: 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"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
57395
+ ConditionGroupComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: ConditionGroupComponent, selector: "novo-condition-group", inputs: { controlName: "controlName", groupIndex: "groupIndex" }, host: { classAttribute: "novo-condition-group" }, providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => ConditionGroupComponent), multi: 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\" align=\"end\" gap=\"sm\">\n <novo-dropdown *ngIf=\"!isFirst && qbs.allowedGroupings.length > 1; else labeledGroup\">\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)\">\n {{qbs.getConjunctionLabel(c)}}</novo-option>\n </novo-optgroup>\n </novo-dropdown>\n <ng-template #labeledGroup>\n <novo-label *ngIf=\"!isFirst\" color=\"ash\" size=\"xs\" uppercase padding=\"sm\">\n {{qbs.getConjunctionLabel(controlName)}}</novo-label>\n </ng-template>\n <novo-condition-builder [groupIndex]=\"groupIndex\" [andIndex]=\"andIndex\" [isFirst]=\"isFirst\"></novo-condition-builder>\n <novo-button theme=\"icon\" icon=\"delete-o\" color=\"negative\" (click)=\"removeCondition(andIndex)\"\n [disabled]=\"cantRemoveRow(isFirst)\">\n </novo-button>\n </novo-flex>\n </ng-container>\n </ng-container>\n <button theme=\"dialogue\" data-automation-id=\"add-advanced-search-condition\" icon=\"add-thin\" side=\"left\" size=\"sm\" uppercase padding=\"sm\" (click)=\"addCondition()\">\n {{ labels.addCondition }}</button>\n </novo-stack>\n <!-- <button class=\"and-or-button\" theme=\"secondary\" size=\"sm\" (click)=\"addRootCondition()\">{{ addCriteriaLabel }}</button> -->\n</div>", 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%}\n"], components: [{ type: NovoStackElement, selector: "novo-stack,novo-column", inputs: ["direction", "align"] }, { type: NovoFlexElement, selector: "novo-flex,novo-row", inputs: ["direction", "align", "justify", "wrap", "gap"] }, { type: NovoDropdownElement, selector: "novo-dropdown", inputs: ["parentScrollSelector", "parentScrollAction", "containerClass", "side", "scrollStrategy", "keepOpen", "height", "width", "appendToBody", "multiple"], outputs: ["toggled"] }, { type: NovoButtonElement, selector: "novo-button,button[theme]", inputs: ["color", "side", "size", "theme", "loading", "icon", "disabled"] }, { type: NovoOptgroup, selector: "novo-optgroup", inputs: ["disabled", "label"], exportAs: ["novoOptgroup"] }, { type: NovoOption, selector: "novo-option", inputs: ["selected", "keepOpen", "novoInert", "value", "disabled"], exportAs: ["novoOption"] }, { type: NovoLabel, selector: "novo-label,[novo-label]" }, { type: ConditionBuilderComponent, selector: "novo-condition-builder", inputs: ["label", "isFirst", "andIndex", "groupIndex"] }], directives: [{ type: i5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i5.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: GapDirective, selector: "[gap]", inputs: ["gap"] }, { type: i5.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i5.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: ThemeColorDirective, selector: "[theme]", inputs: ["theme"] }, { type: 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"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
57391
57396
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ConditionGroupComponent, decorators: [{
57392
57397
  type: Component,
57393
57398
  args: [{ selector: 'novo-condition-group', changeDetection: ChangeDetectionStrategy.OnPush, providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => ConditionGroupComponent), multi: true }], host: {
57394
57399
  class: 'novo-condition-group',
57395
- }, 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\" align=\"end\" gap=\"sm\">\n <novo-dropdown *ngIf=\"!isFirst && qbs.allowedGroupings.length > 1; else labeledGroup\">\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)\">\n {{qbs.getConjunctionLabel(c)}}</novo-option>\n </novo-optgroup>\n </novo-dropdown>\n <ng-template #labeledGroup>\n <novo-label *ngIf=\"!isFirst\" color=\"ash\" size=\"xs\" uppercase padding=\"sm\">\n {{qbs.getConjunctionLabel(controlName)}}</novo-label>\n </ng-template>\n <novo-condition-builder [groupIndex]=\"groupIndex\" [andIndex]=\"andIndex\" [isFirst]=\"isFirst\"></novo-condition-builder>\n <novo-button theme=\"icon\" icon=\"delete-o\" color=\"negative\" (click)=\"removeCondition(andIndex)\"\n [disabled]=\"cantRemoveRow(isFirst)\">\n </novo-button>\n </novo-flex>\n </ng-container>\n </ng-container>\n <button theme=\"dialogue\" data-automation-id=\"add-advanced-search-condition\" icon=\"add-thin\" side=\"left\" size=\"sm\" uppercase padding=\"sm\" (click)=\"addCondition()\">\n {{ labels.addCondition }}</button>\n </novo-stack>\n\n\n <!-- <button class=\"and-or-button\" theme=\"secondary\" size=\"sm\" (click)=\"addRootCondition()\">{{ addCriteriaLabel }}</button> -->\n</div>", 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%}\n"] }]
57400
+ }, 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\" align=\"end\" gap=\"sm\">\n <novo-dropdown *ngIf=\"!isFirst && qbs.allowedGroupings.length > 1; else labeledGroup\">\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)\">\n {{qbs.getConjunctionLabel(c)}}</novo-option>\n </novo-optgroup>\n </novo-dropdown>\n <ng-template #labeledGroup>\n <novo-label *ngIf=\"!isFirst\" color=\"ash\" size=\"xs\" uppercase padding=\"sm\">\n {{qbs.getConjunctionLabel(controlName)}}</novo-label>\n </ng-template>\n <novo-condition-builder [groupIndex]=\"groupIndex\" [andIndex]=\"andIndex\" [isFirst]=\"isFirst\"></novo-condition-builder>\n <novo-button theme=\"icon\" icon=\"delete-o\" color=\"negative\" (click)=\"removeCondition(andIndex)\"\n [disabled]=\"cantRemoveRow(isFirst)\">\n </novo-button>\n </novo-flex>\n </ng-container>\n </ng-container>\n <button theme=\"dialogue\" data-automation-id=\"add-advanced-search-condition\" icon=\"add-thin\" side=\"left\" size=\"sm\" uppercase padding=\"sm\" (click)=\"addCondition()\">\n {{ labels.addCondition }}</button>\n </novo-stack>\n <!-- <button class=\"and-or-button\" theme=\"secondary\" size=\"sm\" (click)=\"addRootCondition()\">{{ addCriteriaLabel }}</button> -->\n</div>", 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%}\n"] }]
57396
57401
  }], ctorParameters: function () { return [{ type: QueryBuilderService }, { type: NovoLabelService }, { type: i5.ControlContainer }, { type: i5.FormBuilder }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { controlName: [{
57397
57402
  type: Input
57398
57403
  }], groupIndex: [{
@@ -57480,7 +57485,7 @@ class CriteriaBuilderComponent {
57480
57485
  return this.formBuilder.group({
57481
57486
  field: [field, Validators.required],
57482
57487
  operator: [operator, Validators.required],
57483
- value: [value, Validators.required],
57488
+ value: [value],
57484
57489
  });
57485
57490
  }
57486
57491
  removeConditionGroupAt(index) {