@acorex/platform 21.0.0-next.72 → 21.0.0-next.73

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 (35) hide show
  1. package/contracts/README.md +3 -0
  2. package/fesm2022/acorex-platform-auth.mjs +72 -58
  3. package/fesm2022/acorex-platform-auth.mjs.map +1 -1
  4. package/fesm2022/acorex-platform-common.mjs +12 -6
  5. package/fesm2022/acorex-platform-common.mjs.map +1 -1
  6. package/fesm2022/acorex-platform-contracts.mjs +10 -0
  7. package/fesm2022/acorex-platform-contracts.mjs.map +1 -0
  8. package/fesm2022/acorex-platform-core.mjs +15 -12
  9. package/fesm2022/acorex-platform-core.mjs.map +1 -1
  10. package/fesm2022/acorex-platform-layout-builder.mjs +3 -0
  11. package/fesm2022/acorex-platform-layout-builder.mjs.map +1 -1
  12. package/fesm2022/acorex-platform-layout-components.mjs +185 -8
  13. package/fesm2022/acorex-platform-layout-components.mjs.map +1 -1
  14. package/fesm2022/acorex-platform-layout-entity.mjs +64 -44
  15. package/fesm2022/acorex-platform-layout-entity.mjs.map +1 -1
  16. package/fesm2022/acorex-platform-layout-widget-core.mjs +11 -1
  17. package/fesm2022/acorex-platform-layout-widget-core.mjs.map +1 -1
  18. package/fesm2022/acorex-platform-layout-widgets.mjs +279 -108
  19. package/fesm2022/acorex-platform-layout-widgets.mjs.map +1 -1
  20. package/fesm2022/acorex-platform-themes-default.mjs +4 -4
  21. package/fesm2022/acorex-platform-themes-default.mjs.map +1 -1
  22. package/fesm2022/acorex-platform-themes-shared-settings.provider-BjuzSe0T.mjs.map +1 -1
  23. package/fesm2022/acorex-platform-themes-shared.mjs +3 -0
  24. package/fesm2022/acorex-platform-themes-shared.mjs.map +1 -1
  25. package/fesm2022/acorex-platform-workflow.mjs +57 -54
  26. package/fesm2022/acorex-platform-workflow.mjs.map +1 -1
  27. package/package.json +5 -1
  28. package/types/acorex-platform-auth.d.ts +29 -22
  29. package/types/acorex-platform-common.d.ts +7 -6
  30. package/types/acorex-platform-contracts.d.ts +39 -0
  31. package/types/acorex-platform-core.d.ts +8 -8
  32. package/types/acorex-platform-layout-components.d.ts +77 -7
  33. package/types/acorex-platform-layout-entity.d.ts +185 -175
  34. package/types/acorex-platform-layout-widget-core.d.ts +3 -1
  35. package/types/acorex-platform-layout-widgets.d.ts +45 -45
@@ -31,11 +31,11 @@ import * as i1$5 from '@angular/forms';
31
31
  import { FormsModule } from '@angular/forms';
32
32
  import * as i3$1 from '@acorex/components/select-box';
33
33
  import { AXSelectBoxComponent, AXSelectBoxModule } from '@acorex/components/select-box';
34
- import { set, get, castArray, isNil, isNull, isEmpty, isNumber, isEqual, cloneDeep } from 'lodash-es';
34
+ import { set, get, castArray, isNil, isNull, isEmpty, isNumber, defaultTo, isEqual, cloneDeep } from 'lodash-es';
35
35
  import * as i2$2 from '@acorex/components/loading';
36
36
  import { AXLoadingModule } from '@acorex/components/loading';
37
37
  import { AXPCommandService, provideQuerySetups } from '@acorex/platform/runtime';
38
- import { AXPConditionBuilderComponent, AXPColorPalettePickerComponent, AXPDragDropListComponent, AXPColumnItemListComponent, AXPImageEditorService, AXPStateMessageComponent, AXPOutcomeResultsViewerComponent, AXPStopwatchComponent, AXPWidgetFieldConfiguratorComponent, AXPItemConfiguratorComponent, AXPRepeaterRowsLayoutComponent, AXPQueryFiltersComponent, AXPQuerySortsComponent, AXPQueryColumnsComponent } from '@acorex/platform/layout/components';
38
+ import { AXPConditionBuilderComponent, AXPColorPalettePickerComponent, AXPDragDropListComponent, AXPColumnItemListComponent, AXPImageEditorService, AXPStateMessageComponent, AXPOutcomeResultsViewerComponent, AXPSignatureEditorService, AXPStopwatchComponent, AXPWidgetFieldConfiguratorComponent, AXPItemConfiguratorComponent, AXPRepeaterRowsLayoutComponent, AXPQueryFiltersComponent, AXPQuerySortsComponent, AXPQueryColumnsComponent } from '@acorex/platform/layout/components';
39
39
  import { AXValidationModule, AXValidationService } from '@acorex/core/validation';
40
40
  import { AXColorUtil } from '@acorex/core/utils';
41
41
  import * as i2$3 from '@acorex/components/color-box';
@@ -3152,7 +3152,6 @@ const AXPAddressWidget = {
3152
3152
  },
3153
3153
  };
3154
3154
 
3155
- //#region ---- Address Data Types ----
3156
3155
  //#endregion
3157
3156
 
3158
3157
  //#region ---- Service ----
@@ -4291,7 +4290,7 @@ class AXPDateTimeBoxWidgetEditComponent extends AXPValueWidgetComponent {
4291
4290
  return cls;
4292
4291
  }
4293
4292
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPDateTimeBoxWidgetEditComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
4294
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXPDateTimeBoxWidgetEditComponent, isStandalone: true, selector: "axp-date-time-box-widget-edit", host: { properties: { "class": "this.__class" } }, viewQueries: [{ propertyName: "selectBox", first: true, predicate: ["selectBox"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<!-- Filter mode: grid/list filters with operation metadata and optional preset ranges -->\n@if (filterMode()) {\n <!-- Simple filter UI: operation picker + one or two datetime inputs -->\n @if (filterUi() === 'simple') {\n <div class=\"ax-flex ax-items-center ax-w-full\">\n <!-- Between operation: from / to range inputs -->\n @if (operation().type === 'between') {\n <div class=\"ax-flex-1 ax-flex ax-gap-2\">\n <ax-datetime-box\n #dateTimeBox\n class=\"ax-w-full\"\n [format]=\"calendarFormat()\"\n [picker]=\"format()\"\n [depth]=\"inputDepth()\"\n [minValue]=\"filterFromMinValue()\"\n [maxValue]=\"filterFromMaxValue()\"\n [placeholder]=\"'@general:terms.common.from' | translate | async\"\n [disabled]=\"isValuelessOperation()\"\n [ngModel]=\"filterRangeValue().from\"\n (onValueChanged)=\"handleFilterValueChange($event, 'from')\"\n >\n <ax-clear-button></ax-clear-button>\n @for (validation of validationRules(); track $index) {\n <ax-validation-rule\n [rule]=\"validation.rule\"\n [message]=\"validation.options?.message\"\n [options]=\"validation.options\"\n ></ax-validation-rule>\n }\n </ax-datetime-box>\n <ax-datetime-box\n class=\"ax-w-full\"\n [format]=\"calendarFormat()\"\n [picker]=\"format()\"\n [depth]=\"inputDepth()\"\n [minValue]=\"filterToMinValue()\"\n [maxValue]=\"filterToMaxValue()\"\n [placeholder]=\"'@general:terms.common.to' | translate | async\"\n [disabled]=\"isValuelessOperation()\"\n [ngModel]=\"filterRangeValue().to\"\n (onValueChanged)=\"handleFilterValueChange($event, 'to')\"\n >\n <ax-clear-button></ax-clear-button>\n @for (validation of validationRules(); track $index) {\n <ax-validation-rule\n [rule]=\"validation.rule\"\n [message]=\"validation.options?.message\"\n [options]=\"validation.options\"\n ></ax-validation-rule>\n }\n </ax-datetime-box>\n </div>\n } @else {\n <!-- Single-value operations: equal, greaterThan, lessThan, isEmpty, isNotEmpty, etc. -->\n <ax-datetime-box\n #dateTimeBox\n class=\"ax-flex-1\"\n [format]=\"calendarFormat()\"\n [picker]=\"format()\"\n [depth]=\"inputDepth()\"\n [placeholder]=\"(placeholder() | translate | async) ?? ''\"\n [disabled]=\"isValuelessOperation()\"\n [ngModel]=\"filterValue()\"\n (onValueChanged)=\"handleFilterValueChange($event, 'self')\"\n >\n <ax-clear-button></ax-clear-button>\n @for (validation of validationRules(); track $index) {\n <ax-validation-rule\n [rule]=\"validation.rule\"\n [message]=\"validation.options?.message\"\n [options]=\"validation.options\"\n ></ax-validation-rule>\n }\n </ax-datetime-box>\n }\n\n <!-- Operation selector (equal, between, isEmpty, ...) -->\n <axp-filter-operations\n type=\"datetime\"\n [operations]=\"filterOperations()\"\n [selectedOperation]=\"operation().type\"\n (selectedOperationChange)=\"handleOperationChange($event)\"\n ></axp-filter-operations>\n </div>\n } @else {\n <!-- Presets filter UI: relative ranges (Today, This Week, ...) plus manual inputs -->\n <div class=\"ax-flex ax-flex-col ax-items-center ax-w-full\">\n <!-- Preset dropdown (Today, Yesterday, This Week, Between, Greater Than, ...) -->\n @if (resolvedPresets().length) {\n <ax-select-box\n #selectBox\n class=\"ax-w-full\"\n [dataSource]=\"translatedPresets()\"\n [valueField]=\"'id'\"\n [textField]=\"'title'\"\n [placeholder]=\"('@general:actions.select.title' | translate | async) ?? ''\"\n [ngModel]=\"selectedPresetId()\"\n (onValueChanged)=\"handlePresetChange($event)\"\n >\n <ax-clear-button></ax-clear-button>\n </ax-select-box>\n }\n\n <!-- Manual preset: custom between range -->\n @if (selectedManualPreset()?.operationType === 'between') {\n <div class=\"ax-flex ax-gap-2 ax-mt-2 ax-w-full\">\n <ax-datetime-box\n [format]=\"calendarFormat()\"\n [picker]=\"format()\"\n [depth]=\"inputDepth()\"\n [minValue]=\"filterFromMinValue()\"\n [maxValue]=\"filterFromMaxValue()\"\n [placeholder]=\"'@general:terms.common.from' | translate | async\"\n [ngModel]=\"filterRangeValue().from\"\n (onValueChanged)=\"handleFilterValueChange($event, 'from')\"\n >\n @for (validation of validationRules(); track $index) {\n <ax-validation-rule\n [rule]=\"validation.rule\"\n [message]=\"validation.options?.message\"\n [options]=\"validation.options\"\n ></ax-validation-rule>\n }\n <ax-clear-button></ax-clear-button>\n </ax-datetime-box>\n <ax-datetime-box\n [format]=\"calendarFormat()\"\n [picker]=\"format()\"\n [depth]=\"inputDepth()\"\n [minValue]=\"filterToMinValue()\"\n [maxValue]=\"filterToMaxValue()\"\n [placeholder]=\"'@general:terms.common.to' | translate | async\"\n [ngModel]=\"filterRangeValue().to\"\n (onValueChanged)=\"handleFilterValueChange($event, 'to')\"\n >\n <ax-clear-button></ax-clear-button>\n @for (validation of validationRules(); track $index) {\n <ax-validation-rule\n [rule]=\"validation.rule\"\n [message]=\"validation.options?.message\"\n [options]=\"validation.options\"\n ></ax-validation-rule>\n }\n </ax-datetime-box>\n </div>\n }\n\n <!-- Manual preset: single bound for greaterThan / lessThan -->\n @if (\n selectedManualPreset()?.operationType === 'greaterThan' ||\n selectedManualPreset()?.operationType === 'lessThan'\n ) {\n <div class=\"ax-w-full ax-mt-2\">\n <ax-datetime-box\n [format]=\"calendarFormat()\"\n [picker]=\"format()\"\n [depth]=\"inputDepth()\"\n [ngModel]=\"filterValue()\"\n (onValueChanged)=\"handleFilterValueChange($event, 'self')\"\n >\n @for (validation of validationRules(); track $index) {\n <ax-validation-rule\n [rule]=\"validation.rule\"\n [message]=\"validation.options?.message\"\n [options]=\"validation.options\"\n ></ax-validation-rule>\n }\n <ax-clear-button></ax-clear-button>\n </ax-datetime-box>\n </div>\n }\n </div>\n }\n} @else {\n <!-- Standard form edit: single date/time value bound to entity or form field -->\n <ax-datetime-box\n [ngModel]=\"getValue()\"\n [picker]=\"format()\"\n [depth]=\"inputDepth()\"\n (onValueChanged)=\"handleValueChange($event)\"\n [minValue]=\"minValue()\"\n [maxValue]=\"maxValue()\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly()\"\n [format]=\"calendarFormat()\"\n [placeholder]=\"placeholder()\"\n >\n @for (validation of validationRules(); track $index) {\n <ax-validation-rule\n [rule]=\"validation.rule\"\n [message]=\"validation.options?.message\"\n [options]=\"validation.options\"\n ></ax-validation-rule>\n }\n @if (clearButton()) {\n <ax-clear-button></ax-clear-button>\n }\n </ax-datetime-box>\n}\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { 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: i3.AXValidationRuleDirective, selector: "ax-validation-rule", inputs: ["rule", "options", "message", "disabled"] }, { kind: "ngmodule", type: AXValidationModule }, { kind: "ngmodule", type: AXDateTimeBoxModule }, { kind: "component", type: i3$3.AXDateTimeBoxComponent, selector: "ax-datetime-box", inputs: ["disabled", "readonly", "tabIndex", "placeholder", "minValue", "maxValue", "value", "state", "name", "depth", "id", "type", "look", "holidayDates", "allowTyping", "picker", "calendar", "weekend", "weekdays", "calendarLook", "boxLook", "format"], outputs: ["valueChange", "stateChange", "onValueChanged", "onBlur", "onFocus", "onOpened", "onClosed", "readonlyChange", "disabledChange", "formatChange"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i2$1.AXDecoratorClearButtonComponent, selector: "ax-clear-button", inputs: ["icon"] }, { kind: "ngmodule", type: AXSelectBoxModule }, { kind: "component", type: i3$1.AXSelectBoxComponent, selector: "ax-select-box", inputs: ["disabled", "readonly", "tabIndex", "placeholder", "minValue", "maxValue", "value", "state", "name", "id", "type", "look", "multiple", "valueField", "textField", "disabledField", "textTemplate", "selectedItems", "isItemTruncated", "showItemTooltip", "itemHeight", "maxVisibleItems", "dataSource", "minRecordsForSearch", "caption", "itemTemplate", "selectedTemplate", "emptyTemplate", "loadingTemplate", "dropdownWidth", "searchBoxAutoFocus"], outputs: ["valueChange", "stateChange", "onValueChanged", "onBlur", "onFocus", "readonlyChange", "disabledChange", "onOpened", "onClosed", "onItemSelected", "onItemClick"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "component", type: AXPFilterOperationsComponent, selector: "axp-filter-operations", inputs: ["selectedOperation", "type", "operations"], outputs: ["selectedOperationChange"] }, { kind: "pipe", type: i1$4.AsyncPipe, name: "async" }, { kind: "pipe", type: i6.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
4293
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXPDateTimeBoxWidgetEditComponent, isStandalone: true, selector: "axp-date-time-box-widget-edit", host: { properties: { "class": "this.__class" } }, viewQueries: [{ propertyName: "selectBox", first: true, predicate: ["selectBox"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<!-- Filter mode: grid/list filters with operation metadata and optional preset ranges -->\n@if (filterMode()) {\n <!-- Simple filter UI: operation picker + one or two datetime inputs -->\n @if (filterUi() === 'simple') {\n <div class=\"ax-flex ax-items-center ax-w-full\">\n <!-- Between operation: from / to range inputs -->\n @if (operation().type === 'between') {\n <div class=\"ax-flex-1 ax-flex ax-gap-2\">\n <ax-datetime-box\n #dateTimeBox\n class=\"ax-w-full\"\n [format]=\"calendarFormat()\"\n [picker]=\"format()\"\n [depth]=\"inputDepth()\"\n [minValue]=\"filterFromMinValue()\"\n [maxValue]=\"filterFromMaxValue()\"\n [placeholder]=\"'@general:terms.common.from' | translate | async\"\n [disabled]=\"isValuelessOperation()\"\n [ngModel]=\"filterRangeValue().from\"\n (onValueChanged)=\"handleFilterValueChange($event, 'from')\"\n >\n <ax-clear-button></ax-clear-button>\n @for (validation of validationRules(); track $index) {\n <ax-validation-rule\n [rule]=\"validation.rule\"\n [message]=\"validation.options?.message\"\n [options]=\"validation.options\"\n ></ax-validation-rule>\n }\n </ax-datetime-box>\n <ax-datetime-box\n class=\"ax-w-full\"\n [format]=\"calendarFormat()\"\n [picker]=\"format()\"\n [depth]=\"inputDepth()\"\n [minValue]=\"filterToMinValue()\"\n [maxValue]=\"filterToMaxValue()\"\n [placeholder]=\"'@general:terms.common.to' | translate | async\"\n [disabled]=\"isValuelessOperation()\"\n [ngModel]=\"filterRangeValue().to\"\n (onValueChanged)=\"handleFilterValueChange($event, 'to')\"\n >\n <ax-clear-button></ax-clear-button>\n @for (validation of validationRules(); track $index) {\n <ax-validation-rule\n [rule]=\"validation.rule\"\n [message]=\"validation.options?.message\"\n [options]=\"validation.options\"\n ></ax-validation-rule>\n }\n </ax-datetime-box>\n </div>\n } @else {\n <!-- Single-value operations: equal, greaterThan, lessThan, isEmpty, isNotEmpty, etc. -->\n <ax-datetime-box\n #dateTimeBox\n class=\"ax-flex-1\"\n [format]=\"calendarFormat()\"\n [picker]=\"format()\"\n [depth]=\"inputDepth()\"\n [placeholder]=\"(placeholder() | translate | async) ?? ''\"\n [disabled]=\"isValuelessOperation()\"\n [ngModel]=\"filterValue()\"\n (onValueChanged)=\"handleFilterValueChange($event, 'self')\"\n >\n <ax-clear-button></ax-clear-button>\n @for (validation of validationRules(); track $index) {\n <ax-validation-rule\n [rule]=\"validation.rule\"\n [message]=\"validation.options?.message\"\n [options]=\"validation.options\"\n ></ax-validation-rule>\n }\n </ax-datetime-box>\n }\n\n <!-- Operation selector (equal, between, isEmpty, ...) -->\n <axp-filter-operations\n type=\"datetime\"\n [operations]=\"filterOperations()\"\n [selectedOperation]=\"operation().type\"\n (selectedOperationChange)=\"handleOperationChange($event)\"\n ></axp-filter-operations>\n </div>\n } @else {\n <!-- Presets filter UI: relative ranges (Today, This Week, ...) plus manual inputs -->\n <div class=\"ax-flex ax-flex-col ax-items-center ax-w-full\">\n <!-- Preset dropdown (Today, Yesterday, This Week, Between, Greater Than, ...) -->\n @if (resolvedPresets().length) {\n <ax-select-box\n #selectBox\n class=\"ax-w-full\"\n [dataSource]=\"translatedPresets()\"\n [valueField]=\"'id'\"\n [textField]=\"'title'\"\n [placeholder]=\"('@general:actions.select.title' | translate | async) ?? ''\"\n [ngModel]=\"selectedPresetId()\"\n (onValueChanged)=\"handlePresetChange($event)\"\n >\n <ax-clear-button></ax-clear-button>\n </ax-select-box>\n }\n\n <!-- Manual preset: custom between range -->\n @if (selectedManualPreset()?.operationType === 'between') {\n <div class=\"ax-flex ax-gap-2 ax-mt-2 ax-w-full\">\n <ax-datetime-box\n [format]=\"calendarFormat()\"\n [picker]=\"format()\"\n [depth]=\"inputDepth()\"\n [minValue]=\"filterFromMinValue()\"\n [maxValue]=\"filterFromMaxValue()\"\n [placeholder]=\"'@general:terms.common.from' | translate | async\"\n [ngModel]=\"filterRangeValue().from\"\n (onValueChanged)=\"handleFilterValueChange($event, 'from')\"\n >\n @for (validation of validationRules(); track $index) {\n <ax-validation-rule\n [rule]=\"validation.rule\"\n [message]=\"validation.options?.message\"\n [options]=\"validation.options\"\n ></ax-validation-rule>\n }\n <ax-clear-button></ax-clear-button>\n </ax-datetime-box>\n <ax-datetime-box\n [format]=\"calendarFormat()\"\n [picker]=\"format()\"\n [depth]=\"inputDepth()\"\n [minValue]=\"filterToMinValue()\"\n [maxValue]=\"filterToMaxValue()\"\n [placeholder]=\"'@general:terms.common.to' | translate | async\"\n [ngModel]=\"filterRangeValue().to\"\n (onValueChanged)=\"handleFilterValueChange($event, 'to')\"\n >\n <ax-clear-button></ax-clear-button>\n @for (validation of validationRules(); track $index) {\n <ax-validation-rule\n [rule]=\"validation.rule\"\n [message]=\"validation.options?.message\"\n [options]=\"validation.options\"\n ></ax-validation-rule>\n }\n </ax-datetime-box>\n </div>\n }\n\n <!-- Manual preset: single bound for greaterThan / lessThan -->\n @if (\n selectedManualPreset()?.operationType === 'greaterThan' ||\n selectedManualPreset()?.operationType === 'lessThan'\n ) {\n <div class=\"ax-w-full ax-mt-2\">\n <ax-datetime-box\n [format]=\"calendarFormat()\"\n [picker]=\"format()\"\n [depth]=\"inputDepth()\"\n [ngModel]=\"filterValue()\"\n (onValueChanged)=\"handleFilterValueChange($event, 'self')\"\n >\n @for (validation of validationRules(); track $index) {\n <ax-validation-rule\n [rule]=\"validation.rule\"\n [message]=\"validation.options?.message\"\n [options]=\"validation.options\"\n ></ax-validation-rule>\n }\n <ax-clear-button></ax-clear-button>\n </ax-datetime-box>\n </div>\n }\n </div>\n }\n} @else {\n <!-- Standard form edit: single date/time value bound to entity or form field -->\n <ax-datetime-box\n [ngModel]=\"getValue()\"\n [picker]=\"format()\"\n [depth]=\"inputDepth()\"\n (onValueChanged)=\"handleValueChange($event)\"\n [minValue]=\"minValue()\"\n [maxValue]=\"maxValue()\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly()\"\n [format]=\"calendarFormat()\"\n [placeholder]=\"placeholder()\"\n >\n @for (validation of validationRules(); track $index) {\n <ax-validation-rule\n [rule]=\"validation.rule\"\n [message]=\"validation.options?.message\"\n [options]=\"validation.options\"\n ></ax-validation-rule>\n }\n @if (clearButton()) {\n <ax-clear-button></ax-clear-button>\n }\n </ax-datetime-box>\n}\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { 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: i3.AXValidationRuleDirective, selector: "ax-validation-rule", inputs: ["rule", "options", "message", "disabled"] }, { kind: "ngmodule", type: AXValidationModule }, { kind: "ngmodule", type: AXDateTimeBoxModule }, { kind: "component", type: i3$3.AXDateTimeBoxComponent, selector: "ax-datetime-box", inputs: ["disabled", "readonly", "tabIndex", "placeholder", "minValue", "maxValue", "value", "state", "name", "depth", "id", "type", "look", "holidayDates", "allowTyping", "picker", "calendar", "weekend", "weekdays", "calendarLook", "yearRange", "boxLook", "format"], outputs: ["valueChange", "stateChange", "onValueChanged", "onBlur", "onFocus", "onOpened", "onClosed", "readonlyChange", "disabledChange", "formatChange"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i2$1.AXDecoratorClearButtonComponent, selector: "ax-clear-button", inputs: ["icon"] }, { kind: "ngmodule", type: AXSelectBoxModule }, { kind: "component", type: i3$1.AXSelectBoxComponent, selector: "ax-select-box", inputs: ["disabled", "readonly", "tabIndex", "placeholder", "minValue", "maxValue", "value", "state", "name", "id", "type", "look", "multiple", "valueField", "textField", "disabledField", "textTemplate", "selectedItems", "isItemTruncated", "showItemTooltip", "itemHeight", "maxVisibleItems", "dataSource", "minRecordsForSearch", "caption", "itemTemplate", "selectedTemplate", "emptyTemplate", "loadingTemplate", "dropdownWidth", "searchBoxAutoFocus"], outputs: ["valueChange", "stateChange", "onValueChanged", "onBlur", "onFocus", "readonlyChange", "disabledChange", "onOpened", "onClosed", "onItemSelected", "onItemClick"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "component", type: AXPFilterOperationsComponent, selector: "axp-filter-operations", inputs: ["selectedOperation", "type", "operations"], outputs: ["selectedOperationChange"] }, { kind: "pipe", type: i1$4.AsyncPipe, name: "async" }, { kind: "pipe", type: i6.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
4295
4294
  }
4296
4295
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPDateTimeBoxWidgetEditComponent, decorators: [{
4297
4296
  type: Component,
@@ -5384,18 +5383,40 @@ const AXPNumberBoxWidget = {
5384
5383
  },
5385
5384
  };
5386
5385
 
5386
+ //#region ---- Password Text Direction ----
5387
+ /** Default text direction for password inputs (Latin passwords in RTL locales). */
5388
+ const PASSWORD_DEFAULT_TEXT_DIRECTION = 'ltr';
5389
+ /**
5390
+ * Resolves password field text direction. Defaults to LTR unless explicitly overridden.
5391
+ */
5392
+ function resolvePasswordTextDirection(options) {
5393
+ const direction = options['direction'];
5394
+ if (direction === 'ltr' || direction === 'rtl') {
5395
+ return direction;
5396
+ }
5397
+ return PASSWORD_DEFAULT_TEXT_DIRECTION;
5398
+ }
5399
+ //#endregion
5400
+
5387
5401
  class AXPPasswordBoxWidgetColumnComponent extends AXPColumnWidgetComponent {
5388
5402
  constructor() {
5389
5403
  super(...arguments);
5390
5404
  this.hasEyeIcon = this.options['hasEyeIcon'];
5391
5405
  this.showPassword = this.options['showPassword'];
5406
+ this.textDirection = computed(() => resolvePasswordTextDirection(this.options), ...(ngDevMode ? [{ debugName: "textDirection" }] : /* istanbul ignore next */ []));
5392
5407
  this.show = signal(!!this.rawValue, ...(ngDevMode ? [{ debugName: "show" }] : /* istanbul ignore next */ []));
5393
5408
  }
5409
+ get hostDir() {
5410
+ return this.textDirection();
5411
+ }
5412
+ get hostDirection() {
5413
+ return this.textDirection();
5414
+ }
5394
5415
  toggleEye() {
5395
5416
  this.show.update((prev) => !prev);
5396
5417
  }
5397
5418
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPPasswordBoxWidgetColumnComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
5398
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXPPasswordBoxWidgetColumnComponent, isStandalone: true, selector: "axp-password-box-widget-column", inputs: { rawValue: "rawValue", rowData: "rowData" }, usesInheritance: true, ngImport: i0, template: `<div class="ax-flex ax-flex-1 ax-gap-3 ax-group ax-items-start ax-w-max">
5419
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXPPasswordBoxWidgetColumnComponent, isStandalone: true, selector: "axp-password-box-widget-column", inputs: { rawValue: "rawValue", rowData: "rowData" }, host: { properties: { "attr.dir": "this.hostDir", "style.direction": "this.hostDirection" } }, usesInheritance: true, ngImport: i0, template: `<div class="ax-flex ax-flex-1 ax-gap-3 ax-group ax-items-start ax-w-max">
5399
5420
  <span>{{ show() ? rawValue : '*******' }}</span>
5400
5421
  @if (hasEyeIcon) {
5401
5422
  <span
@@ -5433,7 +5454,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
5433
5454
  changeDetection: ChangeDetectionStrategy.OnPush,
5434
5455
  inputs: ['rawValue', 'rowData'],
5435
5456
  }]
5436
- }] });
5457
+ }], propDecorators: { hostDir: [{
5458
+ type: HostBinding,
5459
+ args: ['attr.dir']
5460
+ }], hostDirection: [{
5461
+ type: HostBinding,
5462
+ args: ['style.direction']
5463
+ }] } });
5437
5464
 
5438
5465
  var passwordBoxWidgetColumn_component = /*#__PURE__*/Object.freeze({
5439
5466
  __proto__: null,
@@ -5445,6 +5472,13 @@ class AXPPasswordBoxWidgetEditComponent extends AXPValueWidgetComponent {
5445
5472
  super(...arguments);
5446
5473
  this.disabled = computed(() => this.options()['disabled'], ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
5447
5474
  this.hasClearButton = computed(() => this.options()['hasClearButton'], ...(ngDevMode ? [{ debugName: "hasClearButton" }] : /* istanbul ignore next */ []));
5475
+ this.textDirection = computed(() => resolvePasswordTextDirection(this.options()), ...(ngDevMode ? [{ debugName: "textDirection" }] : /* istanbul ignore next */ []));
5476
+ }
5477
+ get hostDir() {
5478
+ return this.textDirection();
5479
+ }
5480
+ get hostDirection() {
5481
+ return this.textDirection();
5448
5482
  }
5449
5483
  get __class() {
5450
5484
  const cls = {};
@@ -5453,7 +5487,7 @@ class AXPPasswordBoxWidgetEditComponent extends AXPValueWidgetComponent {
5453
5487
  return cls;
5454
5488
  }
5455
5489
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPPasswordBoxWidgetEditComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
5456
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXPPasswordBoxWidgetEditComponent, isStandalone: true, selector: "axp-password-box-widget-edit", host: { properties: { "class": "this.__class" } }, usesInheritance: true, ngImport: i0, template: `
5490
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXPPasswordBoxWidgetEditComponent, isStandalone: true, selector: "axp-password-box-widget-edit", host: { properties: { "attr.dir": "this.hostDir", "style.direction": "this.hostDirection", "class": "this.__class" } }, usesInheritance: true, ngImport: i0, template: `
5457
5491
  <ax-password-box [ngModel]="getValue()" [disabled]="disabled()" (onValueChanged)="handleValueChanged($event)">
5458
5492
  @for (validation of validationRules(); track $index) {
5459
5493
  <ax-validation-rule
@@ -5489,7 +5523,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
5489
5523
  changeDetection: ChangeDetectionStrategy.OnPush,
5490
5524
  imports: [FormsModule, AXDecoratorModule, AXPasswordBoxModule, AXValidationModule, AXFormModule],
5491
5525
  }]
5492
- }], propDecorators: { __class: [{
5526
+ }], propDecorators: { hostDir: [{
5527
+ type: HostBinding,
5528
+ args: ['attr.dir']
5529
+ }], hostDirection: [{
5530
+ type: HostBinding,
5531
+ args: ['style.direction']
5532
+ }], __class: [{
5493
5533
  type: HostBinding,
5494
5534
  args: ['class']
5495
5535
  }] } });
@@ -5506,6 +5546,7 @@ class AXPPasswordBoxWidgetViewComponent extends AXPValueWidgetComponent {
5506
5546
  this.hasCopyIcon = computed(() => this.options()['hasCopyIcon'], ...(ngDevMode ? [{ debugName: "hasCopyIcon" }] : /* istanbul ignore next */ []));
5507
5547
  this.hasEyeIcon = computed(() => this.options()['hasEyeIcon'], ...(ngDevMode ? [{ debugName: "hasEyeIcon" }] : /* istanbul ignore next */ []));
5508
5548
  this.showPassword = computed(() => this.options()['showPassword'], ...(ngDevMode ? [{ debugName: "showPassword" }] : /* istanbul ignore next */ []));
5549
+ this.textDirection = computed(() => resolvePasswordTextDirection(this.options()), ...(ngDevMode ? [{ debugName: "textDirection" }] : /* istanbul ignore next */ []));
5509
5550
  this.show = signal(false, ...(ngDevMode ? [{ debugName: "show" }] : /* istanbul ignore next */ []));
5510
5551
  this.clipboard = inject(AXPClipBoardService);
5511
5552
  }
@@ -5515,7 +5556,11 @@ class AXPPasswordBoxWidgetViewComponent extends AXPValueWidgetComponent {
5515
5556
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPPasswordBoxWidgetViewComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
5516
5557
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXPPasswordBoxWidgetViewComponent, isStandalone: true, selector: "axp-password-box-widget-view", usesInheritance: true, ngImport: i0, template: `
5517
5558
  <div class="ax-col-start-1 ax-col-end-10 lg:ax-col-end-7">
5518
- <div class="ax-flex ax-flex-1 ax-gap-3 ax-group ax-items-start ax-w-max">
5559
+ <div
5560
+ class="ax-flex ax-flex-1 ax-gap-3 ax-group ax-items-start ax-w-max"
5561
+ [attr.dir]="textDirection()"
5562
+ [style.direction]="textDirection()"
5563
+ >
5519
5564
  <span>{{ show() ? internalValue() : '*******' }}</span>
5520
5565
  @if (hasEyeIcon()) {
5521
5566
  <span
@@ -5547,7 +5592,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
5547
5592
  selector: 'axp-password-box-widget-view',
5548
5593
  template: `
5549
5594
  <div class="ax-col-start-1 ax-col-end-10 lg:ax-col-end-7">
5550
- <div class="ax-flex ax-flex-1 ax-gap-3 ax-group ax-items-start ax-w-max">
5595
+ <div
5596
+ class="ax-flex ax-flex-1 ax-gap-3 ax-group ax-items-start ax-w-max"
5597
+ [attr.dir]="textDirection()"
5598
+ [style.direction]="textDirection()"
5599
+ >
5551
5600
  <span>{{ show() ? internalValue() : '*******' }}</span>
5552
5601
  @if (hasEyeIcon()) {
5553
5602
  <span
@@ -6387,19 +6436,49 @@ var richTextWidgetColumn_component = /*#__PURE__*/Object.freeze({
6387
6436
  class AXPRichTextWidgetEditComponent extends AXPValueWidgetComponent {
6388
6437
  constructor() {
6389
6438
  super(...arguments);
6439
+ //#region ---- Services & Dependencies ----
6440
+ this.popupService = inject(AXPopupService);
6441
+ this.translationService = inject(AXTranslationService);
6442
+ this.wysiwygRef = viewChild('wysiwygRef', ...(ngDevMode ? [{ debugName: "wysiwygRef" }] : /* istanbul ignore next */ []));
6443
+ //#endregion
6444
+ //#region ---- Computed Properties ----
6390
6445
  this.placeholder = computed(() => this.options()['placeholder'], ...(ngDevMode ? [{ debugName: "placeholder" }] : /* istanbul ignore next */ []));
6391
6446
  this.disabled = computed(() => this.options()['disabled'], ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
6392
6447
  this.readonly = computed(() => this.options()['readonly'], ...(ngDevMode ? [{ debugName: "readonly" }] : /* istanbul ignore next */ []));
6393
6448
  this.effectiveMultiLanguage = computed(() => shouldUseLocaleMapShape(!!this.options()['multiLanguage'], this.getValue(), this.fullPath() ? this.contextService.getSavedValue(this.fullPath()) : undefined), ...(ngDevMode ? [{ debugName: "effectiveMultiLanguage" }] : /* istanbul ignore next */ []));
6394
6449
  this.minLineCount = computed(() => this.options()['minLineCount'] ?? this.options()['maxLineCount'] ?? 3, ...(ngDevMode ? [{ debugName: "minLineCount" }] : /* istanbul ignore next */ []));
6395
6450
  this.maxLineCount = computed(() => this.options()['maxLineCount'] ?? this.options()['minLineCount'] ?? 3, ...(ngDevMode ? [{ debugName: "maxLineCount" }] : /* istanbul ignore next */ []));
6396
- this.popupService = inject(AXPopupService);
6397
- this.translationService = inject(AXTranslationService);
6451
+ this.getCurrentText = computed(() => this.translationService.resolve(this.getValue(), this.currentLanguage()), ...(ngDevMode ? [{ debugName: "getCurrentText" }] : /* istanbul ignore next */ []));
6398
6452
  this.currentLanguage = toSignal(this.translationService.langChanges$, {
6399
6453
  initialValue: this.translationService.getActiveLang(),
6400
6454
  });
6401
- this.getCurrentText = computed(() => this.translationService.resolve(this.getValue(), this.currentLanguage()), ...(ngDevMode ? [{ debugName: "getCurrentText" }] : /* istanbul ignore next */ []));
6455
+ //#endregion
6456
+ //#region ---- Effects ----
6457
+ /**
6458
+ * Quill keeps its own DOM state; one-way ngModel does not refresh it on discard/apply.
6459
+ * Re-sync when the context store reverts or replaces data from outside user edits.
6460
+ */
6461
+ this.#syncWysiwygFromContextEffect = effect(() => {
6462
+ const changeState = this.contextService.changeEvent().state;
6463
+ const text = this.getCurrentText();
6464
+ const wysiwyg = this.wysiwygRef();
6465
+ if (!this.shouldSyncWysiwygFromContext(changeState)) {
6466
+ return;
6467
+ }
6468
+ untracked(() => {
6469
+ void this.applyWysiwygContentWhenReady(wysiwyg, text);
6470
+ });
6471
+ }, ...(ngDevMode ? [{ debugName: "#syncWysiwygFromContextEffect" }] : /* istanbul ignore next */ []));
6402
6472
  }
6473
+ //#endregion
6474
+ //#region ---- Effects ----
6475
+ /**
6476
+ * Quill keeps its own DOM state; one-way ngModel does not refresh it on discard/apply.
6477
+ * Re-sync when the context store reverts or replaces data from outside user edits.
6478
+ */
6479
+ #syncWysiwygFromContextEffect;
6480
+ //#endregion
6481
+ //#region ---- UI Handlers ----
6403
6482
  onWysiwygChanged(e) {
6404
6483
  if (!e.isUserInteraction)
6405
6484
  return;
@@ -6436,8 +6515,30 @@ class AXPRichTextWidgetEditComponent extends AXPValueWidgetComponent {
6436
6515
  this.setValue({ ...map });
6437
6516
  }
6438
6517
  }
6518
+ //#endregion
6519
+ //#region ---- Utility Methods ----
6520
+ shouldSyncWysiwygFromContext(state) {
6521
+ return state === 'restored' || state === 'initiated';
6522
+ }
6523
+ async applyWysiwygContentWhenReady(wysiwyg, text) {
6524
+ const content = defaultTo(text, '');
6525
+ for (let attempt = 0; attempt < 30; attempt++) {
6526
+ const editor = wysiwyg ?? this.wysiwygRef();
6527
+ if (!editor) {
6528
+ return;
6529
+ }
6530
+ try {
6531
+ editor.setWysiwygContent(content);
6532
+ return;
6533
+ }
6534
+ catch {
6535
+ await new Promise((resolve) => setTimeout(resolve, 50));
6536
+ }
6537
+ }
6538
+ }
6439
6539
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPRichTextWidgetEditComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
6440
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXPRichTextWidgetEditComponent, isStandalone: true, selector: "axp-rich-text-widget-edit", host: { classAttribute: "ax-block ax-flex-1" }, usesInheritance: true, ngImport: i0, template: `<ax-wysiwyg-container
6540
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXPRichTextWidgetEditComponent, isStandalone: true, selector: "axp-rich-text-widget-edit", host: { classAttribute: "ax-block ax-flex-1" }, viewQueries: [{ propertyName: "wysiwygRef", first: true, predicate: ["wysiwygRef"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: `<ax-wysiwyg-container
6541
+ #wysiwygRef
6441
6542
  [placeHolder]="(placeholder() | translate | async)!"
6442
6543
  [disabled]="disabled()"
6443
6544
  [readonly]="readonly()"
@@ -6479,6 +6580,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
6479
6580
  args: [{
6480
6581
  selector: 'axp-rich-text-widget-edit',
6481
6582
  template: `<ax-wysiwyg-container
6583
+ #wysiwygRef
6482
6584
  [placeHolder]="(placeholder() | translate | async)!"
6483
6585
  [disabled]="disabled()"
6484
6586
  [readonly]="readonly()"
@@ -6530,7 +6632,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
6530
6632
  AsyncPipe,
6531
6633
  ],
6532
6634
  }]
6533
- }] });
6635
+ }], propDecorators: { wysiwygRef: [{ type: i0.ViewChild, args: ['wysiwygRef', { isSignal: true }] }] } });
6534
6636
 
6535
6637
  var richTextWidgetEdit_component = /*#__PURE__*/Object.freeze({
6536
6638
  __proto__: null,
@@ -10099,7 +10201,7 @@ class AXPDataListWidgetViewComponent extends AXPValueWidgetComponent {
10099
10201
  ></ax-dropdown-command-column>
10100
10202
  }
10101
10203
  </ax-data-table>
10102
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: AXDataTableModule }, { kind: "component", type: i1$c.AXDataTableComponent, selector: "ax-data-table", inputs: ["dataSource", "selectedRows", "parentField", "hasChildrenField", "rowDetailsTemplate", "look", "rowTemplate", "emptyTemplate", "noDataTemplate", "alternative", "showHeader", "fixedHeader", "showFooter", "fixedFooter", "itemHeight", "allowReordering", "paging", "fetchDataMode", "loading", "focusedRow"], outputs: ["selectedRowsChange", "focusedRowChange", "onRowClick", "onRowDbClick", "onColumnsOrderChanged", "onColumnSizeChanged", "onPageChanged"] }, { kind: "component", type: i1$c.AXRowIndexColumnComponent, selector: "ax-index-column", inputs: ["width", "caption", "fixed", "footerTemplate", "padZero"] }, { kind: "component", type: i1$c.AXRowSelectColumnComponent, selector: "ax-select-column", inputs: ["width", "caption", "fixed"] }, { kind: "component", type: i1$c.AXRowCommandColumnComponent, selector: "ax-command-column", inputs: ["width", "caption", "fixed", "footerTemplate", "items"], outputs: ["onItemClick"] }, { kind: "component", type: i1$c.AXRowDropdownCommandColumnComponent, selector: "ax-dropdown-command-column", inputs: ["width", "caption", "fixed", "footerTemplate", "emptyStateTemplate", "emptyStateText", "items"], outputs: ["onItemClick"] }, { kind: "ngmodule", type: AXPWidgetCoreModule }, { kind: "component", type: i1.AXPWidgetColumnRendererComponent, selector: "axp-widget-column-renderer", inputs: ["caption", "customExpandIcon", "customCollapseIcon", "customWidth", "node", "footerTemplate", "expandHandler", "sortEnabled", "headerSortDirection", "headerSortPriority", "cellTemplate", "headerTemplate"], outputs: ["sortToggle"] }, { kind: "ngmodule", type: AXTranslationModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
10204
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: AXDataTableModule }, { kind: "component", type: i1$c.AXDataTableComponent, selector: "ax-data-table", inputs: ["dataSource", "selectedRows", "parentField", "hasChildrenField", "rowDetailsTemplate", "look", "rowTemplate", "emptyTemplate", "noDataTemplate", "alternative", "showHeader", "fixedHeader", "showFooter", "fixedFooter", "itemHeight", "allowReordering", "paging", "fetchDataMode", "loading", "focusedRow"], outputs: ["selectedRowsChange", "focusedRowChange", "onRowClick", "onRowDbClick", "onColumnsOrderChanged", "onColumnSizeChanged", "onPageChanged"] }, { kind: "component", type: i1$c.AXRowIndexColumnComponent, selector: "ax-index-column", inputs: ["width", "caption", "fixed", "footerTemplate", "padZero"] }, { kind: "component", type: i1$c.AXRowSelectColumnComponent, selector: "ax-select-column", inputs: ["width", "caption", "fixed"] }, { kind: "component", type: i1$c.AXRowCommandColumnComponent, selector: "ax-command-column", inputs: ["width", "caption", "fixed", "footerTemplate", "items"], outputs: ["onItemClick"] }, { kind: "component", type: i1$c.AXRowDropdownCommandColumnComponent, selector: "ax-dropdown-command-column", inputs: ["width", "caption", "fixed", "footerTemplate", "emptyStateTemplate", "emptyStateText", "items"], outputs: ["onItemClick"] }, { kind: "ngmodule", type: AXPWidgetCoreModule }, { kind: "component", type: i1.AXPWidgetColumnRendererComponent, selector: "axp-widget-column-renderer", inputs: ["caption", "customExpandIcon", "customCollapseIcon", "customWidth", "node", "footerTemplate", "expandHandler", "sortEnabled", "headerSortDirection", "headerSortPriority", "columnFixed", "cellTemplate", "headerTemplate"], outputs: ["sortToggle"] }, { kind: "ngmodule", type: AXTranslationModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
10103
10205
  }
10104
10206
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPDataListWidgetViewComponent, decorators: [{
10105
10207
  type: Component,
@@ -11908,29 +12010,63 @@ var mapWidgetView_component = /*#__PURE__*/Object.freeze({
11908
12010
  AXPMapWidgetViewComponent: AXPMapWidgetViewComponent
11909
12011
  });
11910
12012
 
11911
- //#region ---- Component: QR Code Widget Column ----
11912
- class AXPQrcodeWidgetColumnComponent extends AXPColumnWidgetComponent {
12013
+ //#region ---- QR code print utility ----
12014
+ /**
12015
+ * Opens the system print dialog for the QR code SVG inside the given container.
12016
+ */
12017
+ function printQrcodeFromElement(container, size) {
12018
+ const svg = container.querySelector('svg');
12019
+ if (!svg) {
12020
+ return;
12021
+ }
12022
+ const printWindow = window.open('', '_blank', 'noopener,noreferrer');
12023
+ if (!printWindow) {
12024
+ return;
12025
+ }
12026
+ const svgMarkup = svg.outerHTML;
12027
+ printWindow.document.write(`<!DOCTYPE html>
12028
+ <html>
12029
+ <head>
12030
+ <title>QR Code</title>
12031
+ <style>
12032
+ body {
12033
+ display: flex;
12034
+ align-items: center;
12035
+ justify-content: center;
12036
+ min-height: 100vh;
12037
+ margin: 0;
12038
+ }
12039
+ svg {
12040
+ width: ${size}px;
12041
+ height: ${size}px;
12042
+ }
12043
+ </style>
12044
+ </head>
12045
+ <body>${svgMarkup}</body>
12046
+ </html>`);
12047
+ printWindow.document.close();
12048
+ printWindow.focus();
12049
+ printWindow.print();
12050
+ printWindow.close();
12051
+ }
12052
+ //#endregion
12053
+
12054
+ //#region ---- Types ----
12055
+ const QRCODE_WIDGET_NAME = 'qrcode';
12056
+ //#endregion
12057
+ //#region ---- QR code viewer service ----
12058
+ /**
12059
+ * Opens a read-only QR code preview dialog with print and cancel actions.
12060
+ */
12061
+ class AXPQrcodeViewerService {
11913
12062
  constructor() {
11914
- super(...arguments);
11915
- //#region ---- Services & Dependencies ----
12063
+ //#region ---- Services & Dependencies ----
11916
12064
  this.layoutBuilder = inject(AXPLayoutBuilderService);
11917
- //#endregion
11918
- //#region ---- Computed Properties ----
11919
- this.size = computed(() => this.options?.size ?? 200, ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
11920
- this.level = computed(() => {
11921
- const opt = this.options?.level;
11922
- return typeof opt === 'string' ? opt : (opt?.id ?? 'M');
11923
- }, ...(ngDevMode ? [{ debugName: "level" }] : /* istanbul ignore next */ []));
11924
- this.color = computed(() => {
11925
- const opt = this.options?.color;
11926
- return AXColorUtil.colorStringToHex(opt ?? '#000000');
11927
- }, ...(ngDevMode ? [{ debugName: "color" }] : /* istanbul ignore next */ []));
11928
- this.outputType = computed(() => this.options?.outputType ?? 'svg', ...(ngDevMode ? [{ debugName: "outputType" }] : /* istanbul ignore next */ []));
11929
12065
  }
11930
12066
  //#endregion
11931
- //#region ---- UI Handlers ----
11932
- async showPopup() {
11933
- const contentValue = this.rawValue;
12067
+ //#region ---- Public API ----
12068
+ async open(options) {
12069
+ const contentValue = options.content;
11934
12070
  if (!contentValue) {
11935
12071
  return;
11936
12072
  }
@@ -11938,26 +12074,76 @@ class AXPQrcodeWidgetColumnComponent extends AXPColumnWidgetComponent {
11938
12074
  .create()
11939
12075
  .dialog((dialog) => {
11940
12076
  dialog
11941
- .setTitle('QR Code')
12077
+ .setTitle(options.title ?? '@platform-layout-widgets:widgets.qrcode.title')
11942
12078
  .setSize('md')
12079
+ .setCloseButton(true)
11943
12080
  .setContext({ qr: contentValue })
11944
12081
  .content((content) => {
11945
- content.setDirection('column').setGap('24px').setAlignItems('center').customWidget('qrcode', {
12082
+ content.setDirection('column').setGap('24px').setAlignItems('center').customWidget(QRCODE_WIDGET_NAME, {
12083
+ name: QRCODE_WIDGET_NAME,
11946
12084
  path: 'qr',
11947
- size: this.size(),
11948
- level: this.level(),
11949
- color: this.color(),
12085
+ size: options.size ?? 200,
12086
+ level: options.level ?? 'M',
12087
+ color: options.color ?? '#000000',
11950
12088
  readonly: true,
11951
- outputType: this.outputType(),
12089
+ outputType: options.outputType ?? 'svg',
11952
12090
  });
11953
12091
  })
11954
12092
  .setActions((actions) => {
12093
+ actions.custom({
12094
+ title: '@general:actions.print.title',
12095
+ icon: 'fa-light fa-print',
12096
+ command: { name: `widget:${QRCODE_WIDGET_NAME}.print` },
12097
+ position: 'suffix',
12098
+ });
11955
12099
  actions.cancel('@general:actions.cancel.title');
11956
12100
  });
11957
12101
  })
11958
12102
  .show();
11959
12103
  ref.close();
11960
12104
  }
12105
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPQrcodeViewerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
12106
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPQrcodeViewerService, providedIn: 'root' }); }
12107
+ }
12108
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPQrcodeViewerService, decorators: [{
12109
+ type: Injectable,
12110
+ args: [{ providedIn: 'root' }]
12111
+ }] });
12112
+
12113
+ //#region ---- Component: QR Code Widget Column ----
12114
+ class AXPQrcodeWidgetColumnComponent extends AXPColumnWidgetComponent {
12115
+ constructor() {
12116
+ super(...arguments);
12117
+ //#region ---- Services & Dependencies ----
12118
+ this.qrcodeViewer = inject(AXPQrcodeViewerService);
12119
+ //#endregion
12120
+ //#region ---- Computed Properties ----
12121
+ this.size = computed(() => this.options?.size ?? 200, ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
12122
+ this.level = computed(() => {
12123
+ const opt = this.options?.level;
12124
+ return typeof opt === 'string' ? opt : (opt?.id ?? 'M');
12125
+ }, ...(ngDevMode ? [{ debugName: "level" }] : /* istanbul ignore next */ []));
12126
+ this.color = computed(() => {
12127
+ const opt = this.options?.color;
12128
+ return AXColorUtil.colorStringToHex(opt ?? '#000000');
12129
+ }, ...(ngDevMode ? [{ debugName: "color" }] : /* istanbul ignore next */ []));
12130
+ this.outputType = computed(() => this.options?.outputType ?? 'svg', ...(ngDevMode ? [{ debugName: "outputType" }] : /* istanbul ignore next */ []));
12131
+ }
12132
+ //#endregion
12133
+ //#region ---- UI Handlers ----
12134
+ async showPopup() {
12135
+ const contentValue = this.rawValue;
12136
+ if (!contentValue) {
12137
+ return;
12138
+ }
12139
+ await this.qrcodeViewer.open({
12140
+ content: contentValue,
12141
+ size: this.size(),
12142
+ level: this.level(),
12143
+ color: this.color(),
12144
+ outputType: this.outputType(),
12145
+ });
12146
+ }
11961
12147
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPQrcodeWidgetColumnComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
11962
12148
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXPQrcodeWidgetColumnComponent, isStandalone: true, selector: "axp-qrcode-widget-column", inputs: { rawValue: "rawValue", rowData: "rowData" }, usesInheritance: true, ngImport: i0, template: `
11963
12149
  <div class="ax-flex ax-items-center ax-gap-2">
@@ -12147,22 +12333,49 @@ var qrcodeWidgetEdit_component = /*#__PURE__*/Object.freeze({
12147
12333
  class AXPQrcodeWidgetViewComponent extends AXPValueWidgetComponent {
12148
12334
  constructor() {
12149
12335
  super(...arguments);
12336
+ //#region ---- View Children ----
12337
+ this.qrContainer = viewChild('qrContainer', ...(ngDevMode ? [{ debugName: "qrContainer" }] : /* istanbul ignore next */ []));
12338
+ //#endregion
12339
+ //#region ---- Computed Properties ----
12150
12340
  this.size = computed(() => this.options()['size'] ?? 200, ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
12151
12341
  this.level = computed(() => this.options()['level']?.id ?? 'M', ...(ngDevMode ? [{ debugName: "level" }] : /* istanbul ignore next */ []));
12152
12342
  this.color = computed(() => AXColorUtil.colorStringToHex(this.options()['color'] ?? '#000000'), ...(ngDevMode ? [{ debugName: "color" }] : /* istanbul ignore next */ []));
12153
12343
  this.outputType = computed(() => this.options()['outputType'] ?? 'svg', ...(ngDevMode ? [{ debugName: "outputType" }] : /* istanbul ignore next */ []));
12154
12344
  }
12345
+ //#endregion
12346
+ //#region ---- Host Bindings ----
12155
12347
  get __class() {
12156
12348
  const cls = {};
12157
- cls[`ax-inline-block`] = true;
12158
- return cls;
12349
+ cls['ax-inline-block'] = true;
12350
+ return Object.keys(cls)
12351
+ .filter((key) => cls[key])
12352
+ .join(' ');
12353
+ }
12354
+ //#endregion
12355
+ //#region ---- Widget API ----
12356
+ api() {
12357
+ return {
12358
+ print: () => {
12359
+ const container = this.qrContainer()?.nativeElement;
12360
+ if (container) {
12361
+ printQrcodeFromElement(container, this.size());
12362
+ }
12363
+ },
12364
+ };
12159
12365
  }
12160
12366
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPQrcodeWidgetViewComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
12161
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXPQrcodeWidgetViewComponent, isStandalone: true, selector: "axp-qrcode-widget", host: { properties: { "class": "this.__class" } }, usesInheritance: true, ngImport: i0, template: `
12162
- {{ getValue() }}
12367
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXPQrcodeWidgetViewComponent, isStandalone: true, selector: "axp-qrcode-widget", host: { properties: { "class": "this.__class" } }, viewQueries: [{ propertyName: "qrContainer", first: true, predicate: ["qrContainer"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: `
12163
12368
  @if (getValue()) {
12164
- <ax-qrcode [content]="getValue()" [size]="size()" [color]="color()" [level]="level()" [outputType]="outputType()">
12165
- </ax-qrcode>
12369
+ <div #qrContainer class="ax-inline-block">
12370
+ <ax-qrcode
12371
+ [content]="getValue()"
12372
+ [size]="size()"
12373
+ [color]="color()"
12374
+ [level]="level()"
12375
+ [outputType]="outputType()"
12376
+ >
12377
+ </ax-qrcode>
12378
+ </div>
12166
12379
  }
12167
12380
  `, isInline: true, dependencies: [{ kind: "ngmodule", type: AXQrcodeModule }, { kind: "component", type: i5$3.AXQrcodeComponent, selector: "ax-qrcode", inputs: ["content", "size", "level", "color", "backgroundColor", "outputType"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
12168
12381
  }
@@ -12171,16 +12384,23 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
12171
12384
  args: [{
12172
12385
  selector: 'axp-qrcode-widget',
12173
12386
  template: `
12174
- {{ getValue() }}
12175
12387
  @if (getValue()) {
12176
- <ax-qrcode [content]="getValue()" [size]="size()" [color]="color()" [level]="level()" [outputType]="outputType()">
12177
- </ax-qrcode>
12388
+ <div #qrContainer class="ax-inline-block">
12389
+ <ax-qrcode
12390
+ [content]="getValue()"
12391
+ [size]="size()"
12392
+ [color]="color()"
12393
+ [level]="level()"
12394
+ [outputType]="outputType()"
12395
+ >
12396
+ </ax-qrcode>
12397
+ </div>
12178
12398
  }
12179
12399
  `,
12180
12400
  changeDetection: ChangeDetectionStrategy.OnPush,
12181
12401
  imports: [AXQrcodeModule],
12182
12402
  }]
12183
- }], propDecorators: { __class: [{
12403
+ }], propDecorators: { qrContainer: [{ type: i0.ViewChild, args: ['qrContainer', { isSignal: true }] }], __class: [{
12184
12404
  type: HostBinding,
12185
12405
  args: ['class']
12186
12406
  }] } });
@@ -12652,7 +12872,7 @@ class AXPSignatureWidgetEditComponent extends AXPValueWidgetComponent {
12652
12872
  this.paintView = viewChild('paintView', ...(ngDevMode ? [{ debugName: "paintView" }] : /* istanbul ignore next */ []));
12653
12873
  //#endregion
12654
12874
  //#region ---- Services & Dependencies ----
12655
- this.layoutBuilder = inject(AXPLayoutBuilderService);
12875
+ this.signatureEditorService = inject(AXPSignatureEditorService);
12656
12876
  this.deviceService = inject(AXPDeviceService);
12657
12877
  //#endregion
12658
12878
  //#region ---- Effects ----
@@ -12735,62 +12955,13 @@ class AXPSignatureWidgetEditComponent extends AXPValueWidgetComponent {
12735
12955
  if (this.disabled()) {
12736
12956
  return;
12737
12957
  }
12738
- const ref = await this.layoutBuilder
12739
- .create()
12740
- .dialog((dialog) => {
12741
- dialog
12742
- .setTitle('@platform-layout-widgets:widgets.signature.title')
12743
- .setSize('sm')
12744
- .setCloseButton(true)
12745
- .setContext({ value: this.getValue() })
12746
- .content((content) => {
12747
- content.setDirection('column').setGap('16px').setAlignItems('stretch').customWidget('signature', {
12748
- name: 'signature',
12749
- path: 'value',
12750
- disabled: this.disabled(),
12751
- showOverlay: false,
12752
- editMode: true,
12753
- });
12754
- })
12755
- .setActions((actions) => {
12756
- actions.custom({
12757
- title: '@general:actions.clear.title',
12758
- icon: 'fa-light fa-eraser',
12759
- disabled: '{{ !context.value }}',
12760
- command: { name: 'widget:signature.clear' },
12761
- position: 'prefix',
12762
- });
12763
- actions.custom({
12764
- title: '@general:actions.delete.title',
12765
- icon: 'fa-light fa-trash-can',
12766
- color: 'danger',
12767
- disabled: '{{ !context.value }}',
12768
- command: { name: 'signature-clear' },
12769
- });
12770
- actions.custom({
12771
- title: '@general:actions.apply.title',
12772
- icon: 'fa-light fa-check',
12773
- color: 'primary',
12774
- disabled: false,
12775
- command: { name: 'signature-apply' },
12776
- });
12777
- });
12778
- })
12779
- .show();
12780
- const action = ref.action();
12781
- const context = ref.context() ?? {};
12782
- if (action === 'signature-clear') {
12783
- ref.close();
12784
- this.setValue(null);
12785
- return;
12786
- }
12787
- if (action === 'signature-apply') {
12788
- const newValue = context.value;
12789
- if (typeof newValue === 'string' || newValue === null) {
12790
- this.setValue(newValue);
12791
- }
12958
+ const result = await this.signatureEditorService.open({
12959
+ value: this.getValue(),
12960
+ disabled: this.disabled(),
12961
+ });
12962
+ if (result.action === 'apply') {
12963
+ this.setValue(result.value);
12792
12964
  }
12793
- ref.close();
12794
12965
  }
12795
12966
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPSignatureWidgetEditComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
12796
12967
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXPSignatureWidgetEditComponent, isStandalone: true, selector: "axp-signature-pad-widget-edit", host: { classAttribute: "ax-block ax-w-full" }, viewQueries: [{ propertyName: "paintContainer", first: true, predicate: ["paintContainer"], descendants: true, isSignal: true }, { propertyName: "paintView", first: true, predicate: ["paintView"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"axp-signature-pad-widget-edit ax-block ax-w-full ax-select-none\">\n <div\n class=\"ax-relative ax-w-full ax-min-h-[9rem] ax-overflow-hidden ax-rounded-md\"\n [class.ax-cursor-pointer]=\"showOverlay() && !disabled()\"\n [class.ax-cursor-not-allowed]=\"disabled()\"\n [class.ax-opacity-60]=\"disabled()\"\n (mouseenter)=\"handleMouseEnter()\"\n (mouseleave)=\"handleMouseLeave()\"\n (click)=\"handleSurfaceClick($event)\"\n (pointerdown)=\"handleSurfacePointerDown($event)\"\n >\n @if (showSignaturePreview()) {\n <ax-image [src]=\"getValue()!\" class=\"ax-block ax-w-full ax-min-h-[9rem] ax-object-contain\" />\n } @else if (showPaintSurface()) {\n <ax-paint-container\n look=\"none\"\n [editMode]=\"editMode()\"\n [disabled]=\"disabled()\"\n [ngModel]=\"getValue()\"\n (ngModelChange)=\"setValue($event)\"\n class=\"__paint\"\n #paintContainer\n >\n <ax-paint-view #paintView paintBackgroundColor=\"white\"></ax-paint-view>\n </ax-paint-container>\n }\n\n @if (showEmptyHint()) {\n <div\n class=\"ax-absolute ax-inset-0 ax-z-10 ax-flex ax-flex-col ax-items-center ax-justify-center ax-gap-2 ax-pointer-events-none\"\n >\n <i class=\"fa-light fa-file-signature ax-text-2xl\"></i>\n <span class=\"ax-text-sm\">{{ emptyHint() | translate | async }}</span>\n </div>\n }\n\n @if (showDialogHint()) {\n <div\n class=\"ax-absolute ax-inset-0 ax-z-10 ax-flex ax-items-center ax-justify-center ax-pointer-events-none ax-text-sm ax-opacity-60\"\n >\n {{ signHereHint() | translate | async }}\n </div>\n }\n\n @if (showDesktopHover()) {\n <div\n class=\"ax-absolute ax-inset-0 ax-z-20 ax-flex ax-cursor-pointer ax-items-center ax-justify-center ax-bg-neutral-900/50 ax-text-neutral-100 ax-transition-opacity ax-duration-400\"\n data-signature-action=\"true\"\n [style.opacity]=\"hovering() ? 1 : 0\"\n (click)=\"handleOverlayClick($event)\"\n >\n <i class=\"fa-light fa-pen\"></i>\n </div>\n }\n </div>\n</div>\n", styles: [".axp-signature-pad-widget-edit .__paint{display:block;width:100%;min-height:9rem}.axp-signature-pad-widget-edit ax-paint-container{display:block;width:100%}.axp-signature-pad-widget-edit ax-paint-container .ax-main-toolbar,.axp-signature-pad-widget-edit ax-paint-container .ax-secondary-toolbar{display:none}:host ::ng-deep .axp-signature-pad-widget-edit ax-paint-container,:host ::ng-deep .axp-signature-pad-widget-edit ax-paint-container>.ax-editor-container,:host ::ng-deep .axp-signature-pad-widget-edit ax-paint-view,:host ::ng-deep .axp-signature-pad-widget-edit ax-paint-view .ax-canvas-element{border:none!important;box-shadow:none!important;outline:none!important}\n"], 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: AXPaintModule }, { kind: "component", type: i2$8.AXPaintContainerComponent, selector: "ax-paint-container", inputs: ["look", "disabled", "editMode"] }, { kind: "component", type: i2$8.AXPaintViewComponent, selector: "ax-paint-view", inputs: ["class", "paintBackgroundColor"] }, { kind: "ngmodule", type: AXImageModule }, { kind: "component", type: i1$e.AXImageComponent, selector: "ax-image", inputs: ["width", "height", "overlayMode", "src", "alt", "priority", "lazy"], outputs: ["onLoad", "onError"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "pipe", type: i6.AXTranslatorPipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
@@ -27954,5 +28125,5 @@ var getWidgetsForAi_query = /*#__PURE__*/Object.freeze({
27954
28125
  * Generated bundle index. Do not edit.
27955
28126
  */
27956
28127
 
27957
- export { AXPAddressWidget, AXPAddressWidgetColumnComponent, AXPAddressWidgetEditComponent, AXPAddressWidgetService, AXPAddressWidgetViewComponent, AXPAdvancedGridItemWidget, AXPAdvancedGridItemWidgetDesignerComponent, AXPAdvancedGridItemWidgetViewComponent, AXPAdvancedGridOptionsWidget, AXPAdvancedGridOptionsWidgetEditComponent, AXPAdvancedGridWidget, AXPAdvancedGridWidgetDesignerComponent, AXPAdvancedGridWidgetViewComponent, AXPAvatarWidget, AXPAvatarWidgetColumnComponent, AXPAvatarWidgetDesignerComponent, AXPAvatarWidgetEditComponent, AXPAvatarWidgetViewComponent, AXPBetweenExpressionValidationWidget, AXPBetweenValidationWidgetEditComponent, AXPBlockWidget, AXPBlockWidgetDesignerComponent, AXPBlockWidgetViewComponent, AXPBorderWidget, AXPBorderWidgetEditComponent, AXPButtonWidget, AXPButtonWidgetColumnComponent, AXPButtonWidgetViewComponent, AXPCallbackValidationWidget, AXPCallbackValidationWidgetEditComponent, AXPCheckBoxWidget, AXPCheckBoxWidgetColumnComponent, AXPCheckBoxWidgetDesignerComponent, AXPCheckBoxWidgetEditComponent, AXPCheckBoxWidgetViewComponent, AXPCodeEditorWidget, AXPCodeEditorWidgetColumnComponent, AXPCodeEditorWidgetEditComponent, AXPCodeEditorWidgetViewComponent, AXPColorBoxWidget, AXPColorBoxWidgetColumnComponent, AXPColorBoxWidgetDesignerComponent, AXPColorBoxWidgetEditComponent, AXPColorBoxWidgetViewComponent, AXPColorPaletteWidget, AXPColorPaletteWidgetColumnComponent, AXPColorPaletteWidgetDesignerComponent, AXPColorPaletteWidgetEditComponent, AXPColorPaletteWidgetViewComponent, AXPConditionBuilderWidget, AXPConditionBuilderWidgetEditComponent, AXPConditionBuilderWidgetViewComponent, AXPConnectedDragDropListsWidget, AXPConnectedListsWidgetColumnComponent, AXPConnectedListsWidgetEditComponent, AXPConnectedListsWidgetViewComponent, AXPContactWidget, AXPContactWidgetColumnComponent, AXPContactWidgetEditComponent, AXPContactWidgetViewComponent, AXPDataListWidget, AXPDataListWidgetViewComponent, AXPDataSourceOptionsWidget, AXPDataSourceOptionsWidgetEditComponent, AXPDateTimeBoxWidget, AXPDateTimeBoxWidgetColumnComponent, AXPDateTimeBoxWidgetEditComponent, AXPDateTimeBoxWidgetViewComponent, AXPDirectionWidget, AXPDirectionWidgetEditComponent, AXPDragDropListWidget, AXPEditorJsWidget, AXPEditorJsWidgetColumnComponent, AXPEditorJsWidgetEditComponent, AXPEditorJsWidgetViewComponent, AXPEqualValidationWidget, AXPEqualValidationWidgetEditComponent, AXPFieldsetWidget, AXPFieldsetWidgetDesignerComponent, AXPFieldsetWidgetViewComponent, AXPFlexItemOptionsWidget, AXPFlexItemOptionsWidgetEditComponent, AXPFlexItemWidget, AXPFlexItemWidgetDesignerComponent, AXPFlexItemWidgetViewComponent, AXPFlexOptionsWidget, AXPFlexOptionsWidgetEditComponent, AXPFlexWidget, AXPFlexWidgetDesignerComponent, AXPFlexWidgetViewComponent, AXPGalleryWidget, AXPGalleryWidgetEditComponent, AXPGalleryWidgetViewComponent, AXPGetWidgetsForAIQuery, AXPGreaterThanExpressionValidationWidget, AXPGreaterThanValidationWidgetEditComponent, AXPGridItemOptionsWidget, AXPGridItemOptionsWidgetEditComponent, AXPGridOptionsWidget, AXPGridOptionsWidgetEditComponent, AXPImageMarkerPopupComponent, AXPImageMarkerWidget, AXPImageMarkerWidgetColumnComponent, AXPImageMarkerWidgetEditComponent, AXPImageMarkerWidgetViewComponent, AXPItemConfiguratorWidget, AXPItemConfiguratorWidgetColumnComponent, AXPItemConfiguratorWidgetEditComponent, AXPJsonViewerWidget, AXPJsonViewerWidgetEditComponent, AXPJsonViewerWidgetViewComponent, AXPLargeTextWidget, AXPLargeTextWidgetColumnComponent, AXPLargeTextWidgetEditComponent, AXPLargeTextWidgetViewComponent, AXPLessThanExpressionValidationWidget, AXPLessThanValidationWidgetEditComponent, AXPListWidgetColumnComponent, AXPListWidgetEditComponent, AXPListWidgetViewComponent, AXPMapWidgetEditComponent, AXPMapWidgetViewComponent, AXPMaxLengthExpressionValidationWidget, AXPMaxLengthValidationWidgetEditComponent, AXPMinLengthExpressionValidationWidget, AXPMinLengthValidationWidgetEditComponent, AXPNumberBoxWidget, AXPNumberBoxWidgetColumnComponent, AXPNumberBoxWidgetEditComponent, AXPNumberBoxWidgetViewComponent, AXPOutcomeResultsViewerWidget, AXPOutcomeResultsViewerWidgetViewComponent, AXPPageWidget, AXPPageWidgetViewComponent, AXPPasswordBoxWidget, AXPPasswordBoxWidgetColumnComponent, AXPPasswordBoxWidgetEditComponent, AXPPasswordBoxWidgetViewComponent, AXPProgressBarWidget, AXPProgressBarWidgetColumnComponent, AXPProgressBarWidgetEditComponent, AXPProgressBarWidgetViewComponent, AXPProviderSelectWidgetColumnComponent, AXPProviderSelectWidgetEditBase, AXPProviderSelectWidgetViewComponent, AXPQrcodeWidget, AXPQrcodeWidgetColumnComponent, AXPQrcodeWidgetEditComponent, AXPQrcodeWidgetViewComponent, AXPRatePickerWidget, AXPRatePickerWidgetColumnComponent, AXPRatePickerWidgetEditComponent, AXPRatePickerWidgetViewComponent, AXPRegularExpressionValidationWidget, AXPRegularExpressionValidationWidgetEditComponent, AXPRepeaterWidget, AXPRepeaterWidgetDesignerComponent, AXPRepeaterWidgetEditComponent, AXPRepeaterWidgetViewComponent, AXPRequiredValidationWidget, AXPRequiredValidationWidgetEditComponent, AXPRichTextWidget, AXPRichTextWidgetColumnComponent, AXPRichTextWidgetEditComponent, AXPRichTextWidgetViewComponent, AXPSchedulerPickerWidget, AXPSchedulerPickerWidgetColumnComponent, AXPSchedulerPickerWidgetEditComponent, AXPSchedulerPickerWidgetViewComponent, AXPSelectBoxWidget, AXPSelectBoxWidgetColumnComponent, AXPSelectBoxWidgetEditComponent, AXPSelectBoxWidgetViewComponent, AXPSelectLanguagePopup, AXPSelectionListWidget, AXPSelectionListWidgetColumnComponent, AXPSelectionListWidgetDesignerComponent, AXPSelectionListWidgetEditComponent, AXPSelectionListWidgetViewComponent, AXPSignatureWidget, AXPSignatureWidgetColumnComponent, AXPSignatureWidgetEditComponent, AXPSignatureWidgetViewComponent, AXPSpacingWidget, AXPSpacingWidgetEditComponent, AXPStatusChipComponent, AXPStatusWidget, AXPStatusWidgetColumnComponent, AXPStatusWidgetEditComponent, AXPStatusWidgetViewComponent, AXPStepWizardWidget, AXPStepWizardWidgetViewComponent, AXPStopwatchWidget, AXPStopwatchWidgetViewComponent, AXPTableItemWidget, AXPTableItemWidgetDesignerComponent, AXPTableItemWidgetViewComponent, AXPTableWidget, AXPTableWidgetDesignerComponent, AXPTableWidgetViewComponent, AXPTagEditorWidget, AXPTagEditorWidgetColumnComponent, AXPTagEditorWidgetEditComponent, AXPTagEditorWidgetViewComponent, AXPTemplateBoxWidget, AXPTemplateBoxWidgetColumnComponent, AXPTemplateBoxWidgetEditComponent, AXPTemplateBoxWidgetPrintComponent, AXPTemplateBoxWidgetViewComponent, AXPTextBoxWidget, AXPTextBoxWidgetColumnComponent, AXPTextBoxWidgetEditComponent, AXPTextBoxWidgetViewComponent, AXPToggleWidget, AXPToggleWidgetColumnComponent, AXPToggleWidgetEditComponent, AXPToggleWidgetViewComponent, AXPWidgetFieldConfiguratorWidget, AXPWidgetFieldConfiguratorWidgetColumnComponent, AXPWidgetFieldConfiguratorWidgetEditComponent, AXPWidgetsModule, AXP_ABSOLUTE_UNITS, AXP_BORDER_RADIUS_UNITS, AXP_BORDER_WIDTH_UNITS, AXP_DATA_LIST_CMD_DELETE, AXP_DATA_LIST_CMD_EDIT, AXP_DATA_LIST_PENDING_DELETE_KEY, AXP_Flex_Box_Align_Options, AXP_Flex_Box_Alignments, AXP_Flex_Box_Justify_Options, AXP_Grid_Box_Align_Items_Options, AXP_Grid_Box_Alignments, AXP_Grid_Box_Justify_Items_Options, AXP_RELATIVE_UNITS, AXP_RELATIVE_UNITS_NO_PERCENT, AXP_ROW_EXPR_PREFIX, AXP_SPACING_UNITS, AXP_WIDGET_AI_AGENT_ASSIST_FOLLOW_UP_CHIPS_LAYOUT, AXP_WIDGET_AI_AGENT_CHART_LAYOUT, AXP_WIDGET_AI_AGENT_FORM_LAYOUT, AXP_WIDGET_AI_AGENT_NAMES, AXP_default_Border_Box_Units, AXP_default_Border_Box_Value, AXP_default_Spacing_Box_Units, AXP_default_Spacing_Box_Value, DEFAULT_STRATEGY_CONFIG, STRATEGY_CONFIG_TOKEN, matchesWidgetAiAgent };
28128
+ export { AXPAddressWidget, AXPAddressWidgetColumnComponent, AXPAddressWidgetEditComponent, AXPAddressWidgetService, AXPAddressWidgetViewComponent, AXPAdvancedGridItemWidget, AXPAdvancedGridItemWidgetDesignerComponent, AXPAdvancedGridItemWidgetViewComponent, AXPAdvancedGridOptionsWidget, AXPAdvancedGridOptionsWidgetEditComponent, AXPAdvancedGridWidget, AXPAdvancedGridWidgetDesignerComponent, AXPAdvancedGridWidgetViewComponent, AXPAvatarWidget, AXPAvatarWidgetColumnComponent, AXPAvatarWidgetDesignerComponent, AXPAvatarWidgetEditComponent, AXPAvatarWidgetViewComponent, AXPBetweenExpressionValidationWidget, AXPBetweenValidationWidgetEditComponent, AXPBlockWidget, AXPBlockWidgetDesignerComponent, AXPBlockWidgetViewComponent, AXPBorderWidget, AXPBorderWidgetEditComponent, AXPButtonWidget, AXPButtonWidgetColumnComponent, AXPButtonWidgetViewComponent, AXPCallbackValidationWidget, AXPCallbackValidationWidgetEditComponent, AXPCheckBoxWidget, AXPCheckBoxWidgetColumnComponent, AXPCheckBoxWidgetDesignerComponent, AXPCheckBoxWidgetEditComponent, AXPCheckBoxWidgetViewComponent, AXPCodeEditorWidget, AXPCodeEditorWidgetColumnComponent, AXPCodeEditorWidgetEditComponent, AXPCodeEditorWidgetViewComponent, AXPColorBoxWidget, AXPColorBoxWidgetColumnComponent, AXPColorBoxWidgetDesignerComponent, AXPColorBoxWidgetEditComponent, AXPColorBoxWidgetViewComponent, AXPColorPaletteWidget, AXPColorPaletteWidgetColumnComponent, AXPColorPaletteWidgetDesignerComponent, AXPColorPaletteWidgetEditComponent, AXPColorPaletteWidgetViewComponent, AXPConditionBuilderWidget, AXPConditionBuilderWidgetEditComponent, AXPConditionBuilderWidgetViewComponent, AXPConnectedDragDropListsWidget, AXPConnectedListsWidgetColumnComponent, AXPConnectedListsWidgetEditComponent, AXPConnectedListsWidgetViewComponent, AXPContactWidget, AXPContactWidgetColumnComponent, AXPContactWidgetEditComponent, AXPContactWidgetViewComponent, AXPDataListWidget, AXPDataListWidgetViewComponent, AXPDataSourceOptionsWidget, AXPDataSourceOptionsWidgetEditComponent, AXPDateTimeBoxWidget, AXPDateTimeBoxWidgetColumnComponent, AXPDateTimeBoxWidgetEditComponent, AXPDateTimeBoxWidgetViewComponent, AXPDirectionWidget, AXPDirectionWidgetEditComponent, AXPDragDropListWidget, AXPEditorJsWidget, AXPEditorJsWidgetColumnComponent, AXPEditorJsWidgetEditComponent, AXPEditorJsWidgetViewComponent, AXPEqualValidationWidget, AXPEqualValidationWidgetEditComponent, AXPFieldsetWidget, AXPFieldsetWidgetDesignerComponent, AXPFieldsetWidgetViewComponent, AXPFlexItemOptionsWidget, AXPFlexItemOptionsWidgetEditComponent, AXPFlexItemWidget, AXPFlexItemWidgetDesignerComponent, AXPFlexItemWidgetViewComponent, AXPFlexOptionsWidget, AXPFlexOptionsWidgetEditComponent, AXPFlexWidget, AXPFlexWidgetDesignerComponent, AXPFlexWidgetViewComponent, AXPGalleryWidget, AXPGalleryWidgetEditComponent, AXPGalleryWidgetViewComponent, AXPGetWidgetsForAIQuery, AXPGreaterThanExpressionValidationWidget, AXPGreaterThanValidationWidgetEditComponent, AXPGridItemOptionsWidget, AXPGridItemOptionsWidgetEditComponent, AXPGridOptionsWidget, AXPGridOptionsWidgetEditComponent, AXPImageMarkerPopupComponent, AXPImageMarkerWidget, AXPImageMarkerWidgetColumnComponent, AXPImageMarkerWidgetEditComponent, AXPImageMarkerWidgetViewComponent, AXPItemConfiguratorWidget, AXPItemConfiguratorWidgetColumnComponent, AXPItemConfiguratorWidgetEditComponent, AXPJsonViewerWidget, AXPJsonViewerWidgetEditComponent, AXPJsonViewerWidgetViewComponent, AXPLargeTextWidget, AXPLargeTextWidgetColumnComponent, AXPLargeTextWidgetEditComponent, AXPLargeTextWidgetViewComponent, AXPLessThanExpressionValidationWidget, AXPLessThanValidationWidgetEditComponent, AXPListWidgetColumnComponent, AXPListWidgetEditComponent, AXPListWidgetViewComponent, AXPMapWidgetEditComponent, AXPMapWidgetViewComponent, AXPMaxLengthExpressionValidationWidget, AXPMaxLengthValidationWidgetEditComponent, AXPMinLengthExpressionValidationWidget, AXPMinLengthValidationWidgetEditComponent, AXPNumberBoxWidget, AXPNumberBoxWidgetColumnComponent, AXPNumberBoxWidgetEditComponent, AXPNumberBoxWidgetViewComponent, AXPOutcomeResultsViewerWidget, AXPOutcomeResultsViewerWidgetViewComponent, AXPPageWidget, AXPPageWidgetViewComponent, AXPPasswordBoxWidget, AXPPasswordBoxWidgetColumnComponent, AXPPasswordBoxWidgetEditComponent, AXPPasswordBoxWidgetViewComponent, AXPProgressBarWidget, AXPProgressBarWidgetColumnComponent, AXPProgressBarWidgetEditComponent, AXPProgressBarWidgetViewComponent, AXPProviderSelectWidgetColumnComponent, AXPProviderSelectWidgetEditBase, AXPProviderSelectWidgetViewComponent, AXPQrcodeViewerService, AXPQrcodeWidget, AXPQrcodeWidgetColumnComponent, AXPQrcodeWidgetEditComponent, AXPQrcodeWidgetViewComponent, AXPRatePickerWidget, AXPRatePickerWidgetColumnComponent, AXPRatePickerWidgetEditComponent, AXPRatePickerWidgetViewComponent, AXPRegularExpressionValidationWidget, AXPRegularExpressionValidationWidgetEditComponent, AXPRepeaterWidget, AXPRepeaterWidgetDesignerComponent, AXPRepeaterWidgetEditComponent, AXPRepeaterWidgetViewComponent, AXPRequiredValidationWidget, AXPRequiredValidationWidgetEditComponent, AXPRichTextWidget, AXPRichTextWidgetColumnComponent, AXPRichTextWidgetEditComponent, AXPRichTextWidgetViewComponent, AXPSchedulerPickerWidget, AXPSchedulerPickerWidgetColumnComponent, AXPSchedulerPickerWidgetEditComponent, AXPSchedulerPickerWidgetViewComponent, AXPSelectBoxWidget, AXPSelectBoxWidgetColumnComponent, AXPSelectBoxWidgetEditComponent, AXPSelectBoxWidgetViewComponent, AXPSelectLanguagePopup, AXPSelectionListWidget, AXPSelectionListWidgetColumnComponent, AXPSelectionListWidgetDesignerComponent, AXPSelectionListWidgetEditComponent, AXPSelectionListWidgetViewComponent, AXPSignatureWidget, AXPSignatureWidgetColumnComponent, AXPSignatureWidgetEditComponent, AXPSignatureWidgetViewComponent, AXPSpacingWidget, AXPSpacingWidgetEditComponent, AXPStatusChipComponent, AXPStatusWidget, AXPStatusWidgetColumnComponent, AXPStatusWidgetEditComponent, AXPStatusWidgetViewComponent, AXPStepWizardWidget, AXPStepWizardWidgetViewComponent, AXPStopwatchWidget, AXPStopwatchWidgetViewComponent, AXPTableItemWidget, AXPTableItemWidgetDesignerComponent, AXPTableItemWidgetViewComponent, AXPTableWidget, AXPTableWidgetDesignerComponent, AXPTableWidgetViewComponent, AXPTagEditorWidget, AXPTagEditorWidgetColumnComponent, AXPTagEditorWidgetEditComponent, AXPTagEditorWidgetViewComponent, AXPTemplateBoxWidget, AXPTemplateBoxWidgetColumnComponent, AXPTemplateBoxWidgetEditComponent, AXPTemplateBoxWidgetPrintComponent, AXPTemplateBoxWidgetViewComponent, AXPTextBoxWidget, AXPTextBoxWidgetColumnComponent, AXPTextBoxWidgetEditComponent, AXPTextBoxWidgetViewComponent, AXPToggleWidget, AXPToggleWidgetColumnComponent, AXPToggleWidgetEditComponent, AXPToggleWidgetViewComponent, AXPWidgetFieldConfiguratorWidget, AXPWidgetFieldConfiguratorWidgetColumnComponent, AXPWidgetFieldConfiguratorWidgetEditComponent, AXPWidgetsModule, AXP_ABSOLUTE_UNITS, AXP_BORDER_RADIUS_UNITS, AXP_BORDER_WIDTH_UNITS, AXP_DATA_LIST_CMD_DELETE, AXP_DATA_LIST_CMD_EDIT, AXP_DATA_LIST_PENDING_DELETE_KEY, AXP_Flex_Box_Align_Options, AXP_Flex_Box_Alignments, AXP_Flex_Box_Justify_Options, AXP_Grid_Box_Align_Items_Options, AXP_Grid_Box_Alignments, AXP_Grid_Box_Justify_Items_Options, AXP_RELATIVE_UNITS, AXP_RELATIVE_UNITS_NO_PERCENT, AXP_ROW_EXPR_PREFIX, AXP_SPACING_UNITS, AXP_WIDGET_AI_AGENT_ASSIST_FOLLOW_UP_CHIPS_LAYOUT, AXP_WIDGET_AI_AGENT_CHART_LAYOUT, AXP_WIDGET_AI_AGENT_FORM_LAYOUT, AXP_WIDGET_AI_AGENT_NAMES, AXP_default_Border_Box_Units, AXP_default_Border_Box_Value, AXP_default_Spacing_Box_Units, AXP_default_Spacing_Box_Value, DEFAULT_STRATEGY_CONFIG, STRATEGY_CONFIG_TOKEN, matchesWidgetAiAgent, printQrcodeFromElement };
27958
28129
  //# sourceMappingURL=acorex-platform-layout-widgets.mjs.map