@acorex/platform 20.9.27 → 20.9.29

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.
@@ -32,7 +32,7 @@ import { FormsModule } from '@angular/forms';
32
32
  import * as i3 from '@acorex/components/select-box';
33
33
  import { AXSelectBoxComponent, AXSelectBoxModule } from '@acorex/components/select-box';
34
34
  import { setSmart, extractValue, AXPRegionalSetting, shouldUseLocaleMapShape, buildLocaleTextMapValue, isSelectionValueEqual, AXPWidgetsCatalog, AXPDataGenerator, AXP_INTEGRATION_AUTH_METHOD_TYPE, sortByMultiLanguageString, isFormValueEqual, normalizeDefinitionCategories } from '@acorex/platform/contracts';
35
- import { set, get, castArray, isNil, isNull, isEmpty, first, isNumber, defaultTo, has, isEqual, cloneDeep } from 'lodash-es';
35
+ import { set, get, castArray, isNil, isNull, isEmpty, first, isNumber, defaultTo, has, isEqual, cloneDeep, isString } from 'lodash-es';
36
36
  import * as i2$2 from '@acorex/components/loading';
37
37
  import { AXLoadingModule } from '@acorex/components/loading';
38
38
  import { AXPCommandService, AXPQueryService, provideQuerySetups } from '@acorex/platform/runtime';
@@ -24994,67 +24994,196 @@ var timeDurationWidgetColumn_component = /*#__PURE__*/Object.freeze({
24994
24994
  class AXPTimerDurationWidgetEditComponent extends AXPValueWidgetComponent {
24995
24995
  constructor() {
24996
24996
  super(...arguments);
24997
- this.disabled = computed(() => this.options()['disabled'], ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
24998
- this.from = computed(() => this.options()['from'].title, ...(ngDevMode ? [{ debugName: "from" }] : /* istanbul ignore next */ []));
24999
- this.to = computed(() => this.options()['to'].title, ...(ngDevMode ? [{ debugName: "to" }] : /* istanbul ignore next */ []));
24997
+ //#region ---- Services & Dependencies ----
24998
+ this.timeDurationFormatter = inject(AXTimeDurationFormatter);
24999
+ //#endregion
25000
+ //#region ---- Computed Properties ----
25001
+ this.filterMode = computed(() => this.options()['filterMode'] ?? false, ...(ngDevMode ? [{ debugName: "filterMode" }] : /* istanbul ignore next */ []));
25002
+ this.disabled = computed(() => this.filterMode() ? false : this.options()['disabled'], ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
25003
+ this.from = computed(() => this.resolveUnit(this.options()['from'], 'HOUR'), ...(ngDevMode ? [{ debugName: "from" }] : /* istanbul ignore next */ []));
25004
+ this.to = computed(() => this.resolveUnit(this.options()['to'], 'MINUTE'), ...(ngDevMode ? [{ debugName: "to" }] : /* istanbul ignore next */ []));
25000
25005
  this.minValue = computed(() => this.options()['minValue'], ...(ngDevMode ? [{ debugName: "minValue" }] : /* istanbul ignore next */ []));
25001
25006
  this.maxValue = computed(() => this.options()['maxValue'], ...(ngDevMode ? [{ debugName: "maxValue" }] : /* istanbul ignore next */ []));
25002
25007
  this.maskDigits = computed(() => (this.options()['maskDigits'] || '00:00:00:00:00:00:00:000'), ...(ngDevMode ? [{ debugName: "maskDigits" }] : /* istanbul ignore next */ []));
25003
25008
  this.label = computed(() => this.options()['label'] ?? false, ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
25004
- this.eff = effect(() => {
25005
- console.log('getValue: ', this.getValue());
25006
- }, ...(ngDevMode ? [{ debugName: "eff" }] : /* istanbul ignore next */ []));
25009
+ this.operations = computed(() => {
25010
+ const raw = this.options()['operations'];
25011
+ return raw?.length ? raw : undefined;
25012
+ }, ...(ngDevMode ? [{ debugName: "operations" }] : /* istanbul ignore next */ []));
25013
+ /** Align with axp-filter-operations: ellipsis only when more than one operator; no extra gap beside editor otherwise. */
25014
+ this.operationsMenuVisible = computed(() => this.operations()?.length !== 1, ...(ngDevMode ? [{ debugName: "operationsMenuVisible" }] : /* istanbul ignore next */ []));
25015
+ this.operation = computed(() => {
25016
+ const existing = this.getValue()?.operation;
25017
+ if (existing?.type) {
25018
+ return existing;
25019
+ }
25020
+ const ops = this.operations();
25021
+ if (ops?.length === 1) {
25022
+ return { type: ops[0].name };
25023
+ }
25024
+ return { type: 'equal' };
25025
+ }, ...(ngDevMode ? [{ debugName: "operation" }] : /* istanbul ignore next */ []));
25026
+ /** In filterMode the stored value is `{ value, operation, displayText }`; bind the unwrapped duration. */
25027
+ this.filterEditorValue = computed(() => {
25028
+ const raw = this.getValue();
25029
+ if (raw && typeof raw === 'object' && 'value' in raw) {
25030
+ return raw.value;
25031
+ }
25032
+ return raw;
25033
+ }, ...(ngDevMode ? [{ debugName: "filterEditorValue" }] : /* istanbul ignore next */ []));
25034
+ this.isFilterEditorDisabled = computed(() => this.operation().type === 'isEmpty' || this.operation().type === 'isNotEmpty', ...(ngDevMode ? [{ debugName: "isFilterEditorDisabled" }] : /* istanbul ignore next */ []));
25007
25035
  }
25036
+ //#endregion
25037
+ //#region ---- Standard Mode Handlers ----
25008
25038
  handleChangeValue(e) {
25009
- // console.log('handleChangeValue', e);
25010
25039
  this.setValue(e.value);
25011
25040
  }
25041
+ //#endregion
25042
+ //#region ---- Filter Mode Handlers ----
25043
+ async handleFilterValueChange(e) {
25044
+ await this.commitFilterValue(e.value, this.operation().type);
25045
+ }
25046
+ async handleOperationChanged(operationType) {
25047
+ await this.commitFilterValue(this.filterEditorValue(), operationType);
25048
+ }
25049
+ //#endregion
25050
+ //#region ---- Utility Methods ----
25051
+ resolveUnit(raw, fallback) {
25052
+ const title = get(raw, 'title');
25053
+ const id = get(raw, 'id');
25054
+ if (isString(title) && title.length) {
25055
+ return title;
25056
+ }
25057
+ if (isString(id) && id.length) {
25058
+ return id;
25059
+ }
25060
+ if (isString(raw) && raw.length) {
25061
+ return raw;
25062
+ }
25063
+ return fallback;
25064
+ }
25065
+ async commitFilterValue(value, operationType) {
25066
+ const displayText = await this.timeDurationFormatter.millisecondsToMask(value, this.from(), this.to(), false, this.maskDigits(), true);
25067
+ this.setValue({
25068
+ value,
25069
+ operation: { type: operationType },
25070
+ displayText,
25071
+ });
25072
+ }
25012
25073
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPTimerDurationWidgetEditComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
25013
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXPTimerDurationWidgetEditComponent, isStandalone: true, selector: "axp-time-duration-widget-edit", usesInheritance: true, ngImport: i0, template: `<ax-time-duration
25014
- [ngModel]="getValue()"
25015
- (onValueChanged)="handleChangeValue($event)"
25016
- [valueStart]="from()"
25017
- [valueEnd]="to()"
25018
- [label]="label()"
25019
- [minValue]="minValue()"
25020
- [maxValue]="maxValue()"
25021
- [disabled]="disabled()"
25022
- [maskDigits]="maskDigits()"
25023
- >
25024
- @for (validation of validationRules(); track $index) {
25025
- <ax-validation-rule
25026
- [rule]="validation.rule"
25027
- [message]="validation.options?.message"
25028
- [options]="validation.options"
25029
- ></ax-validation-rule>
25074
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXPTimerDurationWidgetEditComponent, isStandalone: true, selector: "axp-time-duration-widget-edit", usesInheritance: true, ngImport: i0, template: `
25075
+ @if (filterMode()) {
25076
+ <div class="ax-flex ax-items-center" [class.ax-gap-2]="operationsMenuVisible()">
25077
+ <div class="ax-flex-1">
25078
+ <ax-time-duration
25079
+ [ngModel]="filterEditorValue()"
25080
+ (onValueChanged)="handleFilterValueChange($event)"
25081
+ [valueStart]="from()"
25082
+ [valueEnd]="to()"
25083
+ [label]="label()"
25084
+ [minValue]="minValue()"
25085
+ [maxValue]="maxValue()"
25086
+ [disabled]="isFilterEditorDisabled()"
25087
+ [maskDigits]="maskDigits()"
25088
+ >
25089
+ @for (validation of validationRules(); track $index) {
25090
+ <ax-validation-rule
25091
+ [rule]="validation.rule"
25092
+ [message]="validation.options?.message"
25093
+ [options]="validation.options"
25094
+ ></ax-validation-rule>
25095
+ }
25096
+ </ax-time-duration>
25097
+ </div>
25098
+ <axp-filter-operations
25099
+ [type]="'number'"
25100
+ [operations]="operations()"
25101
+ [selectedOperation]="operation().type"
25102
+ (selectedOperationChange)="handleOperationChanged($event)"
25103
+ ></axp-filter-operations>
25104
+ </div>
25105
+ } @else {
25106
+ <ax-time-duration
25107
+ [ngModel]="getValue()"
25108
+ (onValueChanged)="handleChangeValue($event)"
25109
+ [valueStart]="from()"
25110
+ [valueEnd]="to()"
25111
+ [label]="label()"
25112
+ [minValue]="minValue()"
25113
+ [maxValue]="maxValue()"
25114
+ [disabled]="disabled()"
25115
+ [maskDigits]="maskDigits()"
25116
+ >
25117
+ @for (validation of validationRules(); track $index) {
25118
+ <ax-validation-rule
25119
+ [rule]="validation.rule"
25120
+ [message]="validation.options?.message"
25121
+ [options]="validation.options"
25122
+ ></ax-validation-rule>
25123
+ }
25124
+ </ax-time-duration>
25030
25125
  }
25031
- </ax-time-duration>`, isInline: true, dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: AXFormModule }, { kind: "directive", type: i4.AXValidationRuleDirective, selector: "ax-validation-rule", inputs: ["rule", "options", "message", "disabled"] }, { kind: "ngmodule", type: AXTimeDurationModule }, { kind: "component", type: i3$5.AXTimeDurationComponent, selector: "ax-time-duration", inputs: ["disabled", "tabIndex", "readonly", "look", "name", "valueStart", "valueEnd", "label", "maskDigits", "minValue", "maxValue"], outputs: ["onValueChanged"] }, { kind: "ngmodule", type: AXValidationModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
25126
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: AXFormModule }, { kind: "directive", type: i4.AXValidationRuleDirective, selector: "ax-validation-rule", inputs: ["rule", "options", "message", "disabled"] }, { kind: "ngmodule", type: AXTimeDurationModule }, { kind: "component", type: i3$5.AXTimeDurationComponent, selector: "ax-time-duration", inputs: ["disabled", "tabIndex", "readonly", "look", "name", "valueStart", "valueEnd", "label", "maskDigits", "minValue", "maxValue"], outputs: ["onValueChanged"] }, { kind: "ngmodule", type: AXValidationModule }, { kind: "component", type: AXPFilterOperationsComponent, selector: "axp-filter-operations", inputs: ["selectedOperation", "type", "operations"], outputs: ["selectedOperationChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
25032
25127
  }
25033
25128
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPTimerDurationWidgetEditComponent, decorators: [{
25034
25129
  type: Component,
25035
25130
  args: [{
25036
25131
  selector: 'axp-time-duration-widget-edit',
25037
- template: `<ax-time-duration
25038
- [ngModel]="getValue()"
25039
- (onValueChanged)="handleChangeValue($event)"
25040
- [valueStart]="from()"
25041
- [valueEnd]="to()"
25042
- [label]="label()"
25043
- [minValue]="minValue()"
25044
- [maxValue]="maxValue()"
25045
- [disabled]="disabled()"
25046
- [maskDigits]="maskDigits()"
25047
- >
25048
- @for (validation of validationRules(); track $index) {
25049
- <ax-validation-rule
25050
- [rule]="validation.rule"
25051
- [message]="validation.options?.message"
25052
- [options]="validation.options"
25053
- ></ax-validation-rule>
25132
+ template: `
25133
+ @if (filterMode()) {
25134
+ <div class="ax-flex ax-items-center" [class.ax-gap-2]="operationsMenuVisible()">
25135
+ <div class="ax-flex-1">
25136
+ <ax-time-duration
25137
+ [ngModel]="filterEditorValue()"
25138
+ (onValueChanged)="handleFilterValueChange($event)"
25139
+ [valueStart]="from()"
25140
+ [valueEnd]="to()"
25141
+ [label]="label()"
25142
+ [minValue]="minValue()"
25143
+ [maxValue]="maxValue()"
25144
+ [disabled]="isFilterEditorDisabled()"
25145
+ [maskDigits]="maskDigits()"
25146
+ >
25147
+ @for (validation of validationRules(); track $index) {
25148
+ <ax-validation-rule
25149
+ [rule]="validation.rule"
25150
+ [message]="validation.options?.message"
25151
+ [options]="validation.options"
25152
+ ></ax-validation-rule>
25153
+ }
25154
+ </ax-time-duration>
25155
+ </div>
25156
+ <axp-filter-operations
25157
+ [type]="'number'"
25158
+ [operations]="operations()"
25159
+ [selectedOperation]="operation().type"
25160
+ (selectedOperationChange)="handleOperationChanged($event)"
25161
+ ></axp-filter-operations>
25162
+ </div>
25163
+ } @else {
25164
+ <ax-time-duration
25165
+ [ngModel]="getValue()"
25166
+ (onValueChanged)="handleChangeValue($event)"
25167
+ [valueStart]="from()"
25168
+ [valueEnd]="to()"
25169
+ [label]="label()"
25170
+ [minValue]="minValue()"
25171
+ [maxValue]="maxValue()"
25172
+ [disabled]="disabled()"
25173
+ [maskDigits]="maskDigits()"
25174
+ >
25175
+ @for (validation of validationRules(); track $index) {
25176
+ <ax-validation-rule
25177
+ [rule]="validation.rule"
25178
+ [message]="validation.options?.message"
25179
+ [options]="validation.options"
25180
+ ></ax-validation-rule>
25181
+ }
25182
+ </ax-time-duration>
25054
25183
  }
25055
- </ax-time-duration>`,
25184
+ `,
25056
25185
  changeDetection: ChangeDetectionStrategy.OnPush,
25057
- imports: [FormsModule, AXFormModule, AXTimeDurationModule, AXValidationModule],
25186
+ imports: [FormsModule, AXFormModule, AXTimeDurationModule, AXValidationModule, AXPFilterOperationsComponent],
25058
25187
  }]
25059
25188
  }] });
25060
25189
 
@@ -25788,130 +25917,6 @@ const AXPStringFilterWidget = {
25788
25917
  },
25789
25918
  };
25790
25919
 
25791
- class AXPTimeDurationFilterComponent extends AXPValueWidgetComponent {
25792
- constructor() {
25793
- super(...arguments);
25794
- this.timeDurationFormatter = inject(AXTimeDurationFormatter);
25795
- this.editorPath = `__${this.path}EditorValue`;
25796
- this.operations = computed(() => {
25797
- const raw = this.options()['operations'];
25798
- return raw?.length ? raw : undefined;
25799
- }, ...(ngDevMode ? [{ debugName: "operations" }] : /* istanbul ignore next */ []));
25800
- /** Align with axp-filter-operations: ellipsis only when more than one operator; no extra gap beside editor otherwise. */
25801
- this.operationsMenuVisible = computed(() => this.operations()?.length !== 1, ...(ngDevMode ? [{ debugName: "operationsMenuVisible" }] : /* istanbul ignore next */ []));
25802
- this.operation = computed(() => {
25803
- const existing = this.getValue()?.operation;
25804
- if (existing?.type) {
25805
- return existing;
25806
- }
25807
- const ops = this.operations();
25808
- if (ops?.length === 1) {
25809
- return { type: ops[0].name };
25810
- }
25811
- return { type: 'equal' };
25812
- }, ...(ngDevMode ? [{ debugName: "operation" }] : /* istanbul ignore next */ []));
25813
- this.value = computed(() => this.getValue()?.value, ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
25814
- this.hasClearButton = computed(() => this.options()['hasClearButton'], ...(ngDevMode ? [{ debugName: "hasClearButton" }] : /* istanbul ignore next */ []));
25815
- this.timeDurationNode = signal({
25816
- type: 'time-duration',
25817
- defaultValue: undefined,
25818
- options: {},
25819
- path: this.editorPath,
25820
- }, ...(ngDevMode ? [{ debugName: "timeDurationNode" }] : /* istanbul ignore next */ []));
25821
- this.#efUpdateTimeDurationNode = effect(() => {
25822
- untracked(async () => {
25823
- const node = {
25824
- type: 'time-duration',
25825
- path: this.editorPath,
25826
- defaultValue: this.value(),
25827
- options: {
25828
- from: { title: 'HOUR' },
25829
- to: { title: 'MINUTE' },
25830
- },
25831
- };
25832
- this.timeDurationNode.set(node);
25833
- });
25834
- }, ...(ngDevMode ? [{ debugName: "#efUpdateTimeDurationNode" }] : /* istanbul ignore next */ []));
25835
- this.displayText = async () => {
25836
- return await this.timeDurationFormatter.millisecondsToMask(this.value(), 'HOUR', 'MINUTE', false, '00:00:00:00:00:00:00:000', true);
25837
- };
25838
- this.#efUpdateValue = effect(async () => {
25839
- const newValue = this.contextService.getValue(this.editorPath);
25840
- if (!newValue)
25841
- return;
25842
- untracked(async () => {
25843
- this.setValue({
25844
- value: newValue,
25845
- operation: this.operation(),
25846
- displayText: await this.displayText(),
25847
- });
25848
- });
25849
- }, ...(ngDevMode ? [{ debugName: "#efUpdateValue" }] : /* istanbul ignore next */ []));
25850
- }
25851
- #efUpdateTimeDurationNode;
25852
- #efUpdateValue;
25853
- handleOperationChanged(e) {
25854
- this.setValue({
25855
- value: this.value(),
25856
- operation: { type: e },
25857
- displayText: this.displayText(),
25858
- });
25859
- }
25860
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPTimeDurationFilterComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
25861
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.9", type: AXPTimeDurationFilterComponent, isStandalone: true, selector: "ng-component", usesInheritance: true, ngImport: i0, template: `
25862
- <div class="ax-flex ax-items-center" [class.ax-gap-2]="operationsMenuVisible()">
25863
- <div class="ax-flex-1">
25864
- <ng-container axp-widget-renderer [node]="timeDurationNode()" mode="edit"></ng-container>
25865
- </div>
25866
- <axp-filter-operations
25867
- [type]="'number'"
25868
- [operations]="operations()"
25869
- [selectedOperation]="operation().type"
25870
- (selectedOperationChange)="handleOperationChanged($event)"
25871
- ></axp-filter-operations>
25872
- </div>
25873
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: AXPWidgetCoreModule }, { kind: "directive", type: i1.AXPWidgetRendererDirective, selector: "[axp-widget-renderer]", inputs: ["parentNode", "index", "mode", "node"], outputs: ["onOptionsChanged", "onValueChanged", "onLoad"], exportAs: ["widgetRenderer"] }, { kind: "component", type: AXPFilterOperationsComponent, selector: "axp-filter-operations", inputs: ["selectedOperation", "type", "operations"], outputs: ["selectedOperationChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
25874
- }
25875
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPTimeDurationFilterComponent, decorators: [{
25876
- type: Component,
25877
- args: [{
25878
- template: `
25879
- <div class="ax-flex ax-items-center" [class.ax-gap-2]="operationsMenuVisible()">
25880
- <div class="ax-flex-1">
25881
- <ng-container axp-widget-renderer [node]="timeDurationNode()" mode="edit"></ng-container>
25882
- </div>
25883
- <axp-filter-operations
25884
- [type]="'number'"
25885
- [operations]="operations()"
25886
- [selectedOperation]="operation().type"
25887
- (selectedOperationChange)="handleOperationChanged($event)"
25888
- ></axp-filter-operations>
25889
- </div>
25890
- `,
25891
- standalone: true,
25892
- changeDetection: ChangeDetectionStrategy.OnPush,
25893
- imports: [AXPWidgetCoreModule, AXPFilterOperationsComponent],
25894
- }]
25895
- }] });
25896
-
25897
- var timeDurationFilter_component = /*#__PURE__*/Object.freeze({
25898
- __proto__: null,
25899
- AXPTimeDurationFilterComponent: AXPTimeDurationFilterComponent
25900
- });
25901
-
25902
- const AXPTimeDurationFilterWidget = {
25903
- name: 'time-duration-filter',
25904
- title: 'Time Duration Filter',
25905
- type: 'filter',
25906
- icon: 'fa-light fa-square',
25907
- properties: [AXP_NAME_PROPERTY, AXP_DATA_PATH_PROPERTY, AXP_DISABLED_PROPERTY],
25908
- components: {
25909
- edit: {
25910
- component: () => Promise.resolve().then(function () { return timeDurationFilter_component; }).then((c) => c.AXPTimeDurationFilterComponent),
25911
- },
25912
- },
25913
- };
25914
-
25915
25920
  const AXPAlertBoxWidget = {
25916
25921
  name: 'alert-box-layout',
25917
25922
  title: '@platform-layout-widgets:widgets.alert-box-layout.title',
@@ -28680,7 +28685,6 @@ const REGISTERED_WIDGETS = [
28680
28685
  AXPBooleanFilterWidget,
28681
28686
  AXPNumberFilterWidget,
28682
28687
  AXPStatusFilterWidget,
28683
- AXPTimeDurationFilterWidget,
28684
28688
  AXPDataSourceOptionsWidget,
28685
28689
  AXPFlexOptionsWidget,
28686
28690
  AXPFlexItemOptionsWidget,
@@ -28736,6 +28740,20 @@ const EXTENDED_WIDGETS = [
28736
28740
  icon: 'fa-light fa-square',
28737
28741
  },
28738
28742
  },
28743
+ {
28744
+ parentName: AXPTimeDurationWidget.name,
28745
+ widget: {
28746
+ name: 'time-duration-filter',
28747
+ title: 'Time Duration Filter',
28748
+ categories: AXP_WIDGETS_EDITOR_CATEGORY,
28749
+ type: 'filter',
28750
+ components: {},
28751
+ options: {
28752
+ filterMode: true,
28753
+ },
28754
+ icon: 'fa-light fa-square',
28755
+ },
28756
+ },
28739
28757
  ];
28740
28758
  //#endregion
28741
28759
  //#region ---- Core Widgets Provider ----