@acorex/platform 21.0.0-next.72 → 21.0.0-next.74
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.
- package/contracts/README.md +3 -0
- package/fesm2022/acorex-platform-auth.mjs +72 -58
- package/fesm2022/acorex-platform-auth.mjs.map +1 -1
- package/fesm2022/acorex-platform-common.mjs +414 -22
- package/fesm2022/acorex-platform-common.mjs.map +1 -1
- package/fesm2022/acorex-platform-contracts.mjs +38 -0
- package/fesm2022/acorex-platform-contracts.mjs.map +1 -0
- package/fesm2022/acorex-platform-core.mjs +23 -14
- package/fesm2022/acorex-platform-core.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-builder.mjs +5 -4
- package/fesm2022/acorex-platform-layout-builder.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-components.mjs +187 -9
- package/fesm2022/acorex-platform-layout-components.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-entity.mjs +81 -114
- package/fesm2022/acorex-platform-layout-entity.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-views.mjs +2 -1
- package/fesm2022/acorex-platform-layout-views.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-widget-core.mjs +11 -1
- package/fesm2022/acorex-platform-layout-widget-core.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-widgets.mjs +418 -239
- package/fesm2022/acorex-platform-layout-widgets.mjs.map +1 -1
- package/fesm2022/acorex-platform-themes-default.mjs +4 -4
- package/fesm2022/acorex-platform-themes-default.mjs.map +1 -1
- package/fesm2022/acorex-platform-themes-shared-settings.provider-BjuzSe0T.mjs.map +1 -1
- package/fesm2022/acorex-platform-themes-shared.mjs +3 -0
- package/fesm2022/acorex-platform-themes-shared.mjs.map +1 -1
- package/fesm2022/acorex-platform-workflow.mjs +57 -68
- package/fesm2022/acorex-platform-workflow.mjs.map +1 -1
- package/package.json +5 -1
- package/types/acorex-platform-auth.d.ts +29 -22
- package/types/acorex-platform-common.d.ts +89 -262
- package/types/acorex-platform-contracts.d.ts +940 -0
- package/types/acorex-platform-core.d.ts +8 -8
- package/types/acorex-platform-layout-builder.d.ts +2 -5
- package/types/acorex-platform-layout-components.d.ts +77 -7
- package/types/acorex-platform-layout-entity.d.ts +185 -175
- package/types/acorex-platform-layout-widget-core.d.ts +4 -26
- package/types/acorex-platform-layout-widgets.d.ts +55 -52
- package/types/acorex-platform-workflow.d.ts +3 -670
|
@@ -21,7 +21,7 @@ import * as i1$6 from '@acorex/components/text-box';
|
|
|
21
21
|
import { AXTextBoxModule } from '@acorex/components/text-box';
|
|
22
22
|
import * as i6 from '@acorex/core/translation';
|
|
23
23
|
import { AXTranslationModule, AXTranslationService, resolveMultiLanguageString } from '@acorex/core/translation';
|
|
24
|
-
import { AXP_LOCALE_MANAGEMENT_PORT, AXPFilterOperatorMiddlewareService, AXPCleanNestedFilters, AXPClipBoardService, AXPSettingsService, AXPRegionalSetting, ALL_DEFAULT_OPERATORS, DATE_OPERATORS, BOOLEAN_OPERATORS, NUMBER_OPERATORS, STRING_OPERATORS, resolveDateFilterPresets, findManualPresetIdByOperation, applyDateFilterPreset, AXPFileStorageService, AXPFileActionsService, AXPStatusDefinitionProviderService, AXPRefreshEvent, AXPCommonSettings } from '@acorex/platform/common';
|
|
24
|
+
import { AXP_LOCALE_MANAGEMENT_PORT, AXPFilterOperatorMiddlewareService, AXPCleanNestedFilters, AXPClipBoardService, AXPSettingsService, AXPRegionalSetting, ALL_DEFAULT_OPERATORS, DATE_OPERATORS, BOOLEAN_OPERATORS, NUMBER_OPERATORS, STRING_OPERATORS, resolveDateFilterPresets, findManualPresetIdByOperation, applyDateFilterPreset, AXPFileStorageService, AXPFileActionsService, normalizePositiveNumberOption, resolveEntityRowDisplayText, resolveEntityRowDisplayTitle, downloadGraphicFromElement, printGraphicFromElement, AXPStatusDefinitionProviderService, AXPRefreshEvent, AXPCommonSettings } from '@acorex/platform/common';
|
|
25
25
|
import { AXPDeviceService, setSmart, AXPColorPaletteService, extractValue, shouldUseLocaleMapShape, buildLocaleTextMapValue, AXPTagService, AXPExpressionEvaluatorService, AXPHookService, AXPDataGenerator, AXPDataSourceDefinitionProviderService, sortByMultiLanguageString, applyQueryArray, chordToKbdItemKeys, objectKeyValueTransforms } from '@acorex/platform/core';
|
|
26
26
|
import * as i1$4 from '@angular/common';
|
|
27
27
|
import { CommonModule, AsyncPipe } from '@angular/common';
|
|
@@ -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: {
|
|
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
|
|
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
|
|
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.
|
|
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
|
-
|
|
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,11 +6515,34 @@ 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()"
|
|
6545
|
+
[initialLine]="3"
|
|
6444
6546
|
[look]="'solid'"
|
|
6445
6547
|
[ngModel]="getCurrentText()"
|
|
6446
6548
|
(onValueChanged)="onWysiwygChanged($event)"
|
|
@@ -6472,16 +6574,18 @@ class AXPRichTextWidgetEditComponent extends AXPValueWidgetComponent {
|
|
|
6472
6574
|
[options]="validation.options"
|
|
6473
6575
|
></ax-validation-rule>
|
|
6474
6576
|
}
|
|
6475
|
-
</ax-wysiwyg-container>`, isInline: true, dependencies: [{ kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i2$1.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i2$1.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXWysiwygModule }, { kind: "component", type: i2$5.AXWysiwygContainerComponent, selector: "ax-wysiwyg-container", inputs: ["look", "readonly", "disabled", "value", "placeHolder"], outputs: ["onValueChanged"] }, { kind: "component", type: i2$5.AXWysiwygViewComponent, selector: "ax-wysiwyg-view" }, { kind: "component", type: i2$5.AXWysiwygAlignmentComponent, selector: "ax-wysiwyg-alignment" }, { kind: "component", type: i2$5.AXWysiwygColorsComponent, selector: "ax-wysiwyg-colors" }, { kind: "component", type: i2$5.AXWysiwygFontStyleComponent, selector: "ax-wysiwyg-font-style" }, { kind: "component", type: i2$5.AXWysiwygHistoryComponent, selector: "ax-wysiwyg-history" }, { kind: "component", type: i2$5.AXWysiwygInsertComponent, selector: "ax-wysiwyg-insert" }, { kind: "component", type: i2$5.AXWysiwygListComponent, selector: "ax-wysiwyg-list" }, { kind: "component", type: i2$5.AXWysiwygToolbarComponent, selector: "ax-wysiwyg-toolbar" }, { kind: "ngmodule", type: AXValidationModule }, { kind: "ngmodule", type: AXFormModule }, { kind: "directive", type: i3.AXValidationRuleDirective, selector: "ax-validation-rule", inputs: ["rule", "options", "message", "disabled"] }, { 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: AXButtonModule }, { kind: "component", type: i1$1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "pipe", type: i6.AXTranslatorPipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
6577
|
+
</ax-wysiwyg-container>`, isInline: true, dependencies: [{ kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i2$1.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i2$1.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXWysiwygModule }, { kind: "component", type: i2$5.AXWysiwygContainerComponent, selector: "ax-wysiwyg-container", inputs: ["look", "readonly", "disabled", "value", "placeHolder", "initialLine"], outputs: ["onValueChanged"] }, { kind: "component", type: i2$5.AXWysiwygViewComponent, selector: "ax-wysiwyg-view" }, { kind: "component", type: i2$5.AXWysiwygAlignmentComponent, selector: "ax-wysiwyg-alignment" }, { kind: "component", type: i2$5.AXWysiwygColorsComponent, selector: "ax-wysiwyg-colors" }, { kind: "component", type: i2$5.AXWysiwygFontStyleComponent, selector: "ax-wysiwyg-font-style" }, { kind: "component", type: i2$5.AXWysiwygHistoryComponent, selector: "ax-wysiwyg-history" }, { kind: "component", type: i2$5.AXWysiwygInsertComponent, selector: "ax-wysiwyg-insert" }, { kind: "component", type: i2$5.AXWysiwygListComponent, selector: "ax-wysiwyg-list" }, { kind: "component", type: i2$5.AXWysiwygToolbarComponent, selector: "ax-wysiwyg-toolbar" }, { kind: "ngmodule", type: AXValidationModule }, { kind: "ngmodule", type: AXFormModule }, { kind: "directive", type: i3.AXValidationRuleDirective, selector: "ax-validation-rule", inputs: ["rule", "options", "message", "disabled"] }, { 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: AXButtonModule }, { kind: "component", type: i1$1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "pipe", type: i6.AXTranslatorPipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
6476
6578
|
}
|
|
6477
6579
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPRichTextWidgetEditComponent, decorators: [{
|
|
6478
6580
|
type: Component,
|
|
6479
6581
|
args: [{
|
|
6480
6582
|
selector: 'axp-rich-text-widget-edit',
|
|
6481
6583
|
template: `<ax-wysiwyg-container
|
|
6584
|
+
#wysiwygRef
|
|
6482
6585
|
[placeHolder]="(placeholder() | translate | async)!"
|
|
6483
6586
|
[disabled]="disabled()"
|
|
6484
6587
|
[readonly]="readonly()"
|
|
6588
|
+
[initialLine]="3"
|
|
6485
6589
|
[look]="'solid'"
|
|
6486
6590
|
[ngModel]="getCurrentText()"
|
|
6487
6591
|
(onValueChanged)="onWysiwygChanged($event)"
|
|
@@ -6530,7 +6634,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
|
|
|
6530
6634
|
AsyncPipe,
|
|
6531
6635
|
],
|
|
6532
6636
|
}]
|
|
6533
|
-
}] });
|
|
6637
|
+
}], propDecorators: { wysiwygRef: [{ type: i0.ViewChild, args: ['wysiwygRef', { isSignal: true }] }] } });
|
|
6534
6638
|
|
|
6535
6639
|
var richTextWidgetEdit_component = /*#__PURE__*/Object.freeze({
|
|
6536
6640
|
__proto__: null,
|
|
@@ -10099,7 +10203,7 @@ class AXPDataListWidgetViewComponent extends AXPValueWidgetComponent {
|
|
|
10099
10203
|
></ax-dropdown-command-column>
|
|
10100
10204
|
}
|
|
10101
10205
|
</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 }); }
|
|
10206
|
+
`, 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
10207
|
}
|
|
10104
10208
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPDataListWidgetViewComponent, decorators: [{
|
|
10105
10209
|
type: Component,
|
|
@@ -11908,29 +12012,77 @@ var mapWidgetView_component = /*#__PURE__*/Object.freeze({
|
|
|
11908
12012
|
AXPMapWidgetViewComponent: AXPMapWidgetViewComponent
|
|
11909
12013
|
});
|
|
11910
12014
|
|
|
11911
|
-
|
|
11912
|
-
|
|
12015
|
+
const DEFAULT_QRCODE_SIZE = 200;
|
|
12016
|
+
const AXPQrcodeWidget = {
|
|
12017
|
+
name: 'qrcode',
|
|
12018
|
+
title: '@platform-layout-widgets:widgets.qrcode.title',
|
|
12019
|
+
categories: [AXP_WIDGETS_ADVANCE_CATEGORY],
|
|
12020
|
+
subCategory: AXP_WIDGETS_ADVANCE_SUB_MEDIA,
|
|
12021
|
+
icon: 'fa-light fa-qrcode',
|
|
12022
|
+
description: '@platform-layout-widgets:widgets.qrcode.description',
|
|
12023
|
+
type: 'view',
|
|
12024
|
+
properties: [
|
|
12025
|
+
AXP_NAME_PROPERTY,
|
|
12026
|
+
AXP_DATA_PATH_PROPERTY,
|
|
12027
|
+
cloneProperty(AXP_COLOR_PROPERTY, { schema: { interface: { defaultValue: '#000000' } } }),
|
|
12028
|
+
cloneProperty(AXP_CONTENT_PROPERTY, { schema: { interface: { defaultValue: 'http://google.com' } } }),
|
|
12029
|
+
createNumberProperty({
|
|
12030
|
+
name: 'size',
|
|
12031
|
+
title: 'Size',
|
|
12032
|
+
path: 'options.size',
|
|
12033
|
+
group: AXP_STYLING_PROPERTY_GROUP,
|
|
12034
|
+
defaultValue: DEFAULT_QRCODE_SIZE,
|
|
12035
|
+
}),
|
|
12036
|
+
createSelectProperty({
|
|
12037
|
+
name: 'level',
|
|
12038
|
+
title: 'Error Correction Level',
|
|
12039
|
+
path: 'options.level',
|
|
12040
|
+
group: AXP_STYLING_PROPERTY_GROUP,
|
|
12041
|
+
dataSource: ['L', 'M', 'Q', 'H'],
|
|
12042
|
+
defaultValue: 'M',
|
|
12043
|
+
}),
|
|
12044
|
+
createSelectProperty({
|
|
12045
|
+
name: 'outputType',
|
|
12046
|
+
title: 'Output Type',
|
|
12047
|
+
path: 'options.outputType',
|
|
12048
|
+
group: AXP_STYLING_PROPERTY_GROUP,
|
|
12049
|
+
dataSource: ['svg', 'canvas'],
|
|
12050
|
+
defaultValue: 'svg',
|
|
12051
|
+
}),
|
|
12052
|
+
],
|
|
12053
|
+
components: {
|
|
12054
|
+
view: {
|
|
12055
|
+
component: () => Promise.resolve().then(function () { return qrcodeWidgetView_component; }).then((c) => c.AXPQrcodeWidgetViewComponent),
|
|
12056
|
+
},
|
|
12057
|
+
edit: {
|
|
12058
|
+
component: () => Promise.resolve().then(function () { return qrcodeWidgetEdit_component; }).then((c) => c.AXPQrcodeWidgetEditComponent),
|
|
12059
|
+
},
|
|
12060
|
+
column: {
|
|
12061
|
+
component: () => Promise.resolve().then(function () { return qrcodeWidgetColumn_component; }).then((c) => c.AXPQrcodeWidgetColumnComponent),
|
|
12062
|
+
},
|
|
12063
|
+
designer: {
|
|
12064
|
+
component: () => Promise.resolve().then(function () { return qrcodeWidgetView_component; }).then((c) => c.AXPQrcodeWidgetViewComponent),
|
|
12065
|
+
},
|
|
12066
|
+
},
|
|
12067
|
+
};
|
|
12068
|
+
|
|
12069
|
+
//#region ---- Types ----
|
|
12070
|
+
const QRCODE_WIDGET_NAME = 'qrcode';
|
|
12071
|
+
//#endregion
|
|
12072
|
+
//#region ---- QR code viewer service ----
|
|
12073
|
+
/**
|
|
12074
|
+
* Opens a read-only QR code preview dialog with print and cancel actions.
|
|
12075
|
+
*/
|
|
12076
|
+
class AXPQrcodeViewerService {
|
|
11913
12077
|
constructor() {
|
|
11914
|
-
|
|
11915
|
-
//#region ---- Services & Dependencies ----
|
|
12078
|
+
//#region ---- Services & Dependencies ----
|
|
11916
12079
|
this.layoutBuilder = inject(AXPLayoutBuilderService);
|
|
11917
|
-
|
|
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 */ []));
|
|
12080
|
+
this.translation = inject(AXTranslationService);
|
|
11929
12081
|
}
|
|
11930
12082
|
//#endregion
|
|
11931
|
-
//#region ----
|
|
11932
|
-
async
|
|
11933
|
-
const contentValue =
|
|
12083
|
+
//#region ---- Public API ----
|
|
12084
|
+
async open(options) {
|
|
12085
|
+
const contentValue = options.content;
|
|
11934
12086
|
if (!contentValue) {
|
|
11935
12087
|
return;
|
|
11936
12088
|
}
|
|
@@ -11938,26 +12090,113 @@ class AXPQrcodeWidgetColumnComponent extends AXPColumnWidgetComponent {
|
|
|
11938
12090
|
.create()
|
|
11939
12091
|
.dialog((dialog) => {
|
|
11940
12092
|
dialog
|
|
11941
|
-
.setTitle(
|
|
12093
|
+
.setTitle(this.resolveDialogTitle(options.title))
|
|
11942
12094
|
.setSize('md')
|
|
12095
|
+
.setCloseButton(true)
|
|
11943
12096
|
.setContext({ qr: contentValue })
|
|
11944
12097
|
.content((content) => {
|
|
11945
|
-
content
|
|
12098
|
+
content
|
|
12099
|
+
.setDirection('column')
|
|
12100
|
+
.setGap('24px')
|
|
12101
|
+
.setAlignItems('center')
|
|
12102
|
+
.mode('view')
|
|
12103
|
+
.customWidget(QRCODE_WIDGET_NAME, {
|
|
12104
|
+
name: QRCODE_WIDGET_NAME,
|
|
11946
12105
|
path: 'qr',
|
|
11947
|
-
size:
|
|
11948
|
-
level:
|
|
11949
|
-
color:
|
|
12106
|
+
size: normalizePositiveNumberOption(options.size, DEFAULT_QRCODE_SIZE),
|
|
12107
|
+
level: options.level ?? 'M',
|
|
12108
|
+
color: options.color ?? '#000000',
|
|
11950
12109
|
readonly: true,
|
|
11951
|
-
outputType:
|
|
12110
|
+
outputType: options.outputType ?? 'svg',
|
|
12111
|
+
showContent: true,
|
|
11952
12112
|
});
|
|
11953
12113
|
})
|
|
11954
12114
|
.setActions((actions) => {
|
|
12115
|
+
actions.custom({
|
|
12116
|
+
title: '@general:actions.print.title',
|
|
12117
|
+
icon: 'fa-light fa-print',
|
|
12118
|
+
command: { name: `widget:${QRCODE_WIDGET_NAME}.print` },
|
|
12119
|
+
position: 'suffix',
|
|
12120
|
+
});
|
|
11955
12121
|
actions.cancel('@general:actions.cancel.title');
|
|
11956
12122
|
});
|
|
11957
12123
|
})
|
|
11958
12124
|
.show();
|
|
11959
12125
|
ref.close();
|
|
11960
12126
|
}
|
|
12127
|
+
//#endregion
|
|
12128
|
+
//#region ---- Utility Methods ----
|
|
12129
|
+
resolveDialogTitle(title) {
|
|
12130
|
+
const resolved = resolveEntityRowDisplayText(title, this.translation.getActiveLang());
|
|
12131
|
+
return resolved || '@platform-layout-widgets:widgets.qrcode.title';
|
|
12132
|
+
}
|
|
12133
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPQrcodeViewerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
12134
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPQrcodeViewerService, providedIn: 'root' }); }
|
|
12135
|
+
}
|
|
12136
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPQrcodeViewerService, decorators: [{
|
|
12137
|
+
type: Injectable,
|
|
12138
|
+
args: [{ providedIn: 'root' }]
|
|
12139
|
+
}] });
|
|
12140
|
+
|
|
12141
|
+
//#region ---- Imports ----
|
|
12142
|
+
//#endregion
|
|
12143
|
+
//#region ---- Viewer open helper ----
|
|
12144
|
+
function buildQrcodeViewerOpenOptions(params) {
|
|
12145
|
+
const title = params.data
|
|
12146
|
+
? resolveEntityRowDisplayTitle({
|
|
12147
|
+
data: params.data,
|
|
12148
|
+
widgetOptions: params.widgetOptions,
|
|
12149
|
+
formatService: params.formatService,
|
|
12150
|
+
activeLang: params.activeLang,
|
|
12151
|
+
entity: params.entity,
|
|
12152
|
+
})
|
|
12153
|
+
: '';
|
|
12154
|
+
const levelOption = params.widgetOptions['level'];
|
|
12155
|
+
const resolvedLevel = (typeof levelOption === 'string'
|
|
12156
|
+
? levelOption
|
|
12157
|
+
: levelOption?.id) ?? 'M';
|
|
12158
|
+
return {
|
|
12159
|
+
content: params.content,
|
|
12160
|
+
title: title || params.fallbackTitleKey,
|
|
12161
|
+
size: normalizePositiveNumberOption(params.widgetOptions['size'], DEFAULT_QRCODE_SIZE),
|
|
12162
|
+
level: resolvedLevel,
|
|
12163
|
+
color: params.widgetOptions['color'] ?? '#000000',
|
|
12164
|
+
outputType: params.widgetOptions['outputType'] ?? 'svg',
|
|
12165
|
+
};
|
|
12166
|
+
}
|
|
12167
|
+
async function openQrcodeViewer(viewer, params) {
|
|
12168
|
+
const content = params.content?.trim();
|
|
12169
|
+
if (!content) {
|
|
12170
|
+
return;
|
|
12171
|
+
}
|
|
12172
|
+
await viewer.open(buildQrcodeViewerOpenOptions({ ...params, content }));
|
|
12173
|
+
}
|
|
12174
|
+
//#endregion
|
|
12175
|
+
|
|
12176
|
+
//#region ---- Component: QR Code Widget Column ----
|
|
12177
|
+
class AXPQrcodeWidgetColumnComponent extends AXPColumnWidgetComponent {
|
|
12178
|
+
constructor() {
|
|
12179
|
+
super(...arguments);
|
|
12180
|
+
//#region ---- Services & Dependencies ----
|
|
12181
|
+
this.qrcodeViewer = inject(AXPQrcodeViewerService);
|
|
12182
|
+
this.formatService = inject(AXFormatService);
|
|
12183
|
+
this.translation = inject(AXTranslationService);
|
|
12184
|
+
}
|
|
12185
|
+
//#endregion
|
|
12186
|
+
//#region ---- UI Handlers ----
|
|
12187
|
+
async showPopup() {
|
|
12188
|
+
const contentValue = this.rawValue;
|
|
12189
|
+
if (!contentValue) {
|
|
12190
|
+
return;
|
|
12191
|
+
}
|
|
12192
|
+
await openQrcodeViewer(this.qrcodeViewer, {
|
|
12193
|
+
content: contentValue,
|
|
12194
|
+
data: this.rowData,
|
|
12195
|
+
widgetOptions: { ...this.options, size: 500 },
|
|
12196
|
+
formatService: this.formatService,
|
|
12197
|
+
activeLang: this.translation.getActiveLang(),
|
|
12198
|
+
});
|
|
12199
|
+
}
|
|
11961
12200
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPQrcodeWidgetColumnComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
11962
12201
|
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
12202
|
<div class="ax-flex ax-items-center ax-gap-2">
|
|
@@ -12004,8 +12243,13 @@ var qrcodeWidgetColumn_component = /*#__PURE__*/Object.freeze({
|
|
|
12004
12243
|
class AXPQrcodeWidgetEditComponent extends AXPValueWidgetComponent {
|
|
12005
12244
|
constructor() {
|
|
12006
12245
|
super(...arguments);
|
|
12246
|
+
//#region ---- Services & Dependencies ----
|
|
12247
|
+
this.qrcodeViewer = inject(AXPQrcodeViewerService);
|
|
12248
|
+
this.formatService = inject(AXFormatService);
|
|
12249
|
+
this.translation = inject(AXTranslationService);
|
|
12250
|
+
//#endregion
|
|
12007
12251
|
this.value = computed(() => this.getValue(), ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
12008
|
-
this.size = computed(() => this.options()['size']
|
|
12252
|
+
this.size = computed(() => normalizePositiveNumberOption(this.options()['size'], DEFAULT_QRCODE_SIZE), ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
12009
12253
|
this.level = computed(() => this.options()['level']?.id ?? 'M', ...(ngDevMode ? [{ debugName: "level" }] : /* istanbul ignore next */ []));
|
|
12010
12254
|
this.color = computed(() => AXColorUtil.colorStringToHex(this.options()['color'] ?? '#000000'), ...(ngDevMode ? [{ debugName: "color" }] : /* istanbul ignore next */ []));
|
|
12011
12255
|
this.format = computed(() => this.options()['format']?.id ?? 'png', ...(ngDevMode ? [{ debugName: "format" }] : /* istanbul ignore next */ []));
|
|
@@ -12035,73 +12279,27 @@ class AXPQrcodeWidgetEditComponent extends AXPValueWidgetComponent {
|
|
|
12035
12279
|
cancelEdit() {
|
|
12036
12280
|
this.draft.set(this.value() ?? '');
|
|
12037
12281
|
}
|
|
12038
|
-
|
|
12039
|
-
const
|
|
12040
|
-
|
|
12041
|
-
|
|
12042
|
-
this.downloadSVGElement(svg, 'qrcode.svg');
|
|
12043
|
-
}
|
|
12044
|
-
else if (fmt === 'png') {
|
|
12045
|
-
this.rasterizeAndDownload(el, 'image/png', 'qrcode.png');
|
|
12046
|
-
}
|
|
12047
|
-
else {
|
|
12048
|
-
this.rasterizeAndDownload(el, 'image/jpeg', 'qrcode.jpg');
|
|
12282
|
+
async openPreview() {
|
|
12283
|
+
const content = this.value();
|
|
12284
|
+
if (!content) {
|
|
12285
|
+
return;
|
|
12049
12286
|
}
|
|
12287
|
+
await openQrcodeViewer(this.qrcodeViewer, {
|
|
12288
|
+
content,
|
|
12289
|
+
data: this.contextService.data(),
|
|
12290
|
+
widgetOptions: this.options(),
|
|
12291
|
+
formatService: this.formatService,
|
|
12292
|
+
activeLang: this.translation.getActiveLang(),
|
|
12293
|
+
});
|
|
12050
12294
|
}
|
|
12051
|
-
|
|
12052
|
-
|
|
12053
|
-
|
|
12054
|
-
|
|
12055
|
-
|
|
12056
|
-
|
|
12057
|
-
|
|
12058
|
-
|
|
12059
|
-
source = '<?xml version="1.0" standalone="no"?>\r\n' + source;
|
|
12060
|
-
}
|
|
12061
|
-
// Create a Blob and trigger download
|
|
12062
|
-
const blob = new Blob([source], { type: 'image/svg+xml;charset=utf-8' });
|
|
12063
|
-
const url = URL.createObjectURL(blob);
|
|
12064
|
-
const a = document.createElement('a');
|
|
12065
|
-
a.href = url;
|
|
12066
|
-
a.download = filename;
|
|
12067
|
-
document.body.appendChild(a);
|
|
12068
|
-
a.click();
|
|
12069
|
-
document.body.removeChild(a);
|
|
12070
|
-
URL.revokeObjectURL(url);
|
|
12071
|
-
}
|
|
12072
|
-
rasterizeAndDownload(el, mime, filename) {
|
|
12073
|
-
const svgEl = el.querySelector('svg');
|
|
12074
|
-
if (!svgEl)
|
|
12075
|
-
return;
|
|
12076
|
-
const serializer = new XMLSerializer();
|
|
12077
|
-
let source = serializer.serializeToString(svgEl);
|
|
12078
|
-
if (!source.match(/^<\?xml/)) {
|
|
12079
|
-
source = '<?xml version="1.0" standalone="no"?>\r\n' + source;
|
|
12080
|
-
}
|
|
12081
|
-
const svgUrl = 'data:image/svg+xml;charset=utf-8,' + encodeURIComponent(source);
|
|
12082
|
-
const img = new Image();
|
|
12083
|
-
const size = this.size();
|
|
12084
|
-
const canvas = document.createElement('canvas');
|
|
12085
|
-
canvas.width = size;
|
|
12086
|
-
canvas.height = size;
|
|
12087
|
-
const ctx = canvas.getContext('2d');
|
|
12088
|
-
if (!ctx)
|
|
12089
|
-
return;
|
|
12090
|
-
if (mime === 'image/jpeg') {
|
|
12091
|
-
ctx.fillStyle = '#ffffff';
|
|
12092
|
-
ctx.fillRect(0, 0, canvas.width, canvas.height);
|
|
12093
|
-
}
|
|
12094
|
-
img.onload = () => {
|
|
12095
|
-
ctx.drawImage(img, 0, 0, canvas.width, canvas.height);
|
|
12096
|
-
const url = canvas.toDataURL(mime);
|
|
12097
|
-
const a = document.createElement('a');
|
|
12098
|
-
a.href = url;
|
|
12099
|
-
a.download = filename;
|
|
12100
|
-
document.body.appendChild(a);
|
|
12101
|
-
a.click();
|
|
12102
|
-
document.body.removeChild(a);
|
|
12103
|
-
};
|
|
12104
|
-
img.src = svgUrl;
|
|
12295
|
+
downloadQr(el) {
|
|
12296
|
+
const fmt = this.format();
|
|
12297
|
+
const format = fmt === 'jpg' ? 'jpeg' : fmt;
|
|
12298
|
+
downloadGraphicFromElement(el, {
|
|
12299
|
+
format,
|
|
12300
|
+
filename: `qrcode.${fmt}`,
|
|
12301
|
+
fallbackSize: this.size(),
|
|
12302
|
+
});
|
|
12105
12303
|
}
|
|
12106
12304
|
clearValue() {
|
|
12107
12305
|
this.setValue('');
|
|
@@ -12123,7 +12321,7 @@ class AXPQrcodeWidgetEditComponent extends AXPValueWidgetComponent {
|
|
|
12123
12321
|
}
|
|
12124
12322
|
}
|
|
12125
12323
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPQrcodeWidgetEditComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
12126
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXPQrcodeWidgetEditComponent, isStandalone: true, selector: "axp-qrcode-widget-edit", host: { classAttribute: "ax-block ax-flex-1" }, usesInheritance: true, ngImport: i0, template: "<!-- Main Container -->\n<div class=\"ax-flex ax-flex-col ax-gap-3 ax-p-3 ax-w-fit\">\n <div class=\"ax-flex ax-justify-center\">\n <!-- QR Code Container -->\n <div class=\"ax-bg-lightest ax-border ax-border-default ax-rounded-md ax-shadow-md ax-p-3\" #qr>\n <!-- QR Code Display or Empty Placeholder -->\n @if (value()) {\n <!-- Display QR Code when value exists -->\n <ax-qrcode [content]=\"value()\" [size]=\"size()\" [color]=\"color()\" [level]=\"level()\" [outputType]=\"'svg'\">\n </ax-qrcode>\n } @else {\n <!-- Empty State: Show placeholder when value is null or empty -->\n <div\n class=\"ax-flex ax-flex-col ax-items-center ax-justify-center ax-text-center\"\n [style.width.px]=\"size()\"\n [style.height.px]=\"size()\"\n >\n <ax-icon icon=\"fa-light fa-qrcode\" class=\"ax-text-4xl ax-text-gray-400 ax-mb-3\"></ax-icon>\n <div class=\"ax-text-sm ax-text-gray-500\">\n {{ '@general:state-message.empty.title' | translate | async }}\n </div>\n </div>\n }\n\n <!-- Action Buttons Section -->\n @if (!readonly()) {\n <div class=\"ax-flex ax-items-center ax-justify-between ax-gap-2 ax-pt-4\">\n <!-- Edit Button: Opens popover to edit QR code content -->\n <ax-button\n #editBtn\n look=\"twotone\"\n [title]=\"('@general:actions.edit.title' | translate | async)!\"\n (onClick)=\"beginEdit()\"\n >\n <!-- Edit Popover: Text input for editing QR code content -->\n <ax-popover #po [target]=\"editBtn\" [openOn]=\"'toggle'\" [closeOn]=\"'clickOut'\" [adaptivityEnabled]=\"true\">\n <div\n class=\"ax-bg-lightest ax-border ax-border-default ax-rounded-md ax-shadow-md ax-p-5 ax-w-full sm:ax-w-96\"\n >\n <!-- Text Input for QR Code Content -->\n <ax-text-box\n [value]=\"draft()\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly()\"\n [placeholder]=\"placeholder() | translate | async\"\n (onValueChanged)=\"onDraftChange($event)\"\n >\n @if (hasClearButton()) {\n <ax-clear-button></ax-clear-button>\n }\n </ax-text-box>\n <!-- Popover Action Buttons -->\n <div class=\"ax-flex ax-justify-end ax-gap-2 ax-mt-3\">\n <ax-button\n look=\"outline\"\n class=\"ax-sm\"\n [text]=\"('@general:actions.cancel.title' | translate | async)!\"\n (onClick)=\"cancelEdit(); po.close()\"\n ></ax-button>\n <ax-button\n look=\"solid\"\n class=\"ax-sm\"\n color=\"primary\"\n [text]=\"('@general:actions.submit.title' | translate | async)!\"\n (onClick)=\"applyDraft(); po.close()\"\n ></ax-button>\n </div>\n </div>\n </ax-popover>\n <ax-icon icon=\"fa-light fa-pen\"></ax-icon>\n </ax-button>\n\n <!-- Upload Button: Upload text file to set QR code content -->\n <!-- <ax-button\n look=\"twotone\"\n [title]=\"('@general:actions.upload.title' | translate | async)!\"\n (onClick)=\"fileInput.click()\"\n >\n <input #fileInput type=\"file\" accept=\"text/plain\" class=\"ax-hidden\" (change)=\"onFileSelected($event)\" />\n <ax-icon icon=\"fa-light fa-upload\"></ax-icon>\n </ax-button> -->\n\n <!-- Export Button: Download QR code as image (only shown when value exists) -->\n @if (value()) {\n <ax-button\n look=\"twotone\"\n [title]=\"('@general:actions.export.title' | translate | async)!\"\n (onClick)=\"downloadQr(qr)\"\n >\n <ax-icon icon=\"fa-light fa-download\"></ax-icon>\n </ax-button>\n }\n\n <!-- Delete Button: Clear QR code value (only shown when not readonly and value exists) -->\n @if (!readonly() && value()) {\n <ax-button\n look=\"twotone\"\n [title]=\"('@general:actions.delete.title' | translate | async)!\"\n (onClick)=\"clearValue()\"\n >\n <ax-icon icon=\"ax-text-danger fa-light fa-trash-can\"></ax-icon>\n </ax-button>\n }\n </div>\n }\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "ngmodule", type: AXTextBoxModule }, { kind: "component", type: i1$6.AXTextBoxComponent, selector: "ax-text-box", inputs: ["disabled", "tabIndex", "readonly", "value", "state", "name", "id", "placeholder", "maxLength", "allowNull", "type", "autoComplete", "look", "maskPattern", "customTokens", "class"], outputs: ["onBlur", "onFocus", "valueChange", "stateChange", "onValueChanged", "readonlyChange", "disabledChange", "onKeyDown", "onKeyUp", "onKeyPress", "onMaskChanged"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i2$1.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i2$1.AXDecoratorClearButtonComponent, selector: "ax-clear-button", inputs: ["icon"] }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i1$1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXPopoverModule }, { kind: "component", type: i3$2.AXPopoverComponent, selector: "ax-popover", inputs: ["width", "disablePanelClass", "disabled", "offsetX", "offsetY", "target", "placement", "content", "openOn", "closeOn", "hasBackdrop", "openAfter", "closeAfter", "closeOnScroll", "backdropClass", "panelClass", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "ngmodule", type: AXQrcodeModule }, { kind: "component", type: i5$3.AXQrcodeComponent, selector: "ax-qrcode", inputs: ["content", "size", "level", "color", "backgroundColor", "outputType"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "ngmodule", type: FormsModule }, { kind: "pipe", type: i6.AXTranslatorPipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
12324
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXPQrcodeWidgetEditComponent, isStandalone: true, selector: "axp-qrcode-widget-edit", host: { classAttribute: "ax-block ax-flex-1" }, usesInheritance: true, ngImport: i0, template: "<!-- Main Container -->\n<div class=\"ax-flex ax-flex-col ax-gap-3 ax-p-3 ax-w-fit\">\n <div class=\"ax-flex ax-justify-center\">\n <!-- QR Code Container -->\n <div class=\"ax-bg-lightest ax-border ax-border-default ax-rounded-md ax-shadow-md ax-p-3\" #qr>\n <!-- QR Code Display or Empty Placeholder -->\n @if (value()) {\n <!-- Display QR Code when value exists -->\n <ax-qrcode [content]=\"value()\" [size]=\"size()\" [color]=\"color()\" [level]=\"level()\" [outputType]=\"'svg'\">\n </ax-qrcode>\n } @else {\n <!-- Empty State: Show placeholder when value is null or empty -->\n <div\n class=\"ax-flex ax-flex-col ax-items-center ax-justify-center ax-text-center\"\n [style.width.px]=\"size()\"\n [style.height.px]=\"size()\"\n >\n <ax-icon icon=\"fa-light fa-qrcode\" class=\"ax-text-4xl ax-text-gray-400 ax-mb-3\"></ax-icon>\n <div class=\"ax-text-sm ax-text-gray-500\">\n {{ '@general:state-message.empty.title' | translate | async }}\n </div>\n </div>\n }\n\n <!-- Action Buttons Section -->\n @if (!readonly()) {\n <div class=\"ax-flex ax-items-center ax-justify-between ax-gap-2 ax-pt-4\">\n <!-- Edit Button: Opens popover to edit QR code content -->\n <ax-button\n #editBtn\n look=\"twotone\"\n [title]=\"('@general:actions.edit.title' | translate | async)!\"\n (onClick)=\"beginEdit()\"\n >\n <!-- Edit Popover: Text input for editing QR code content -->\n <ax-popover #po [target]=\"editBtn\" [openOn]=\"'toggle'\" [closeOn]=\"'clickOut'\" [adaptivityEnabled]=\"true\">\n <div\n class=\"ax-bg-lightest ax-border ax-border-default ax-rounded-md ax-shadow-md ax-p-5 ax-w-full sm:ax-w-96\"\n >\n <!-- Text Input for QR Code Content -->\n <ax-text-box\n [value]=\"draft()\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly()\"\n [placeholder]=\"placeholder() | translate | async\"\n (onValueChanged)=\"onDraftChange($event)\"\n >\n @if (hasClearButton()) {\n <ax-clear-button></ax-clear-button>\n }\n </ax-text-box>\n <!-- Popover Action Buttons -->\n <div class=\"ax-flex ax-justify-end ax-gap-2 ax-mt-3\">\n <ax-button\n look=\"outline\"\n class=\"ax-sm\"\n [text]=\"('@general:actions.cancel.title' | translate | async)!\"\n (onClick)=\"cancelEdit(); po.close()\"\n ></ax-button>\n <ax-button\n look=\"solid\"\n class=\"ax-sm\"\n color=\"primary\"\n [text]=\"('@general:actions.submit.title' | translate | async)!\"\n (onClick)=\"applyDraft(); po.close()\"\n ></ax-button>\n </div>\n </div>\n </ax-popover>\n <ax-icon icon=\"fa-light fa-pen\"></ax-icon>\n </ax-button>\n\n <!-- Upload Button: Upload text file to set QR code content -->\n <!-- <ax-button\n look=\"twotone\"\n [title]=\"('@general:actions.upload.title' | translate | async)!\"\n (onClick)=\"fileInput.click()\"\n >\n <input #fileInput type=\"file\" accept=\"text/plain\" class=\"ax-hidden\" (change)=\"onFileSelected($event)\" />\n <ax-icon icon=\"fa-light fa-upload\"></ax-icon>\n </ax-button> -->\n\n <!-- Export Button: Download QR code as image (only shown when value exists) -->\n @if (value()) {\n <ax-button\n look=\"twotone\"\n [title]=\"('@general:actions.preview.title' | translate | async)!\"\n (onClick)=\"openPreview()\"\n >\n <ax-icon icon=\"fa-light fa-expand\"></ax-icon>\n </ax-button>\n\n <ax-button\n look=\"twotone\"\n [title]=\"('@general:actions.export.title' | translate | async)!\"\n (onClick)=\"downloadQr(qr)\"\n >\n <ax-icon icon=\"fa-light fa-download\"></ax-icon>\n </ax-button>\n }\n\n <!-- Delete Button: Clear QR code value (only shown when not readonly and value exists) -->\n @if (!readonly() && value()) {\n <ax-button\n look=\"twotone\"\n [title]=\"('@general:actions.delete.title' | translate | async)!\"\n (onClick)=\"clearValue()\"\n >\n <ax-icon icon=\"ax-text-danger fa-light fa-trash-can\"></ax-icon>\n </ax-button>\n }\n </div>\n }\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "ngmodule", type: AXTextBoxModule }, { kind: "component", type: i1$6.AXTextBoxComponent, selector: "ax-text-box", inputs: ["disabled", "tabIndex", "readonly", "value", "state", "name", "id", "placeholder", "maxLength", "allowNull", "type", "autoComplete", "look", "maskPattern", "customTokens", "class"], outputs: ["onBlur", "onFocus", "valueChange", "stateChange", "onValueChanged", "readonlyChange", "disabledChange", "onKeyDown", "onKeyUp", "onKeyPress", "onMaskChanged"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i2$1.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i2$1.AXDecoratorClearButtonComponent, selector: "ax-clear-button", inputs: ["icon"] }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i1$1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXPopoverModule }, { kind: "component", type: i3$2.AXPopoverComponent, selector: "ax-popover", inputs: ["width", "disablePanelClass", "disabled", "offsetX", "offsetY", "target", "placement", "content", "openOn", "closeOn", "hasBackdrop", "openAfter", "closeAfter", "closeOnScroll", "backdropClass", "panelClass", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "ngmodule", type: AXQrcodeModule }, { kind: "component", type: i5$3.AXQrcodeComponent, selector: "ax-qrcode", inputs: ["content", "size", "level", "color", "backgroundColor", "outputType"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "ngmodule", type: FormsModule }, { kind: "pipe", type: i6.AXTranslatorPipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
12127
12325
|
}
|
|
12128
12326
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPQrcodeWidgetEditComponent, decorators: [{
|
|
12129
12327
|
type: Component,
|
|
@@ -12136,7 +12334,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
|
|
|
12136
12334
|
AXTranslationModule,
|
|
12137
12335
|
AsyncPipe,
|
|
12138
12336
|
FormsModule,
|
|
12139
|
-
], host: { class: 'ax-block ax-flex-1' }, template: "<!-- Main Container -->\n<div class=\"ax-flex ax-flex-col ax-gap-3 ax-p-3 ax-w-fit\">\n <div class=\"ax-flex ax-justify-center\">\n <!-- QR Code Container -->\n <div class=\"ax-bg-lightest ax-border ax-border-default ax-rounded-md ax-shadow-md ax-p-3\" #qr>\n <!-- QR Code Display or Empty Placeholder -->\n @if (value()) {\n <!-- Display QR Code when value exists -->\n <ax-qrcode [content]=\"value()\" [size]=\"size()\" [color]=\"color()\" [level]=\"level()\" [outputType]=\"'svg'\">\n </ax-qrcode>\n } @else {\n <!-- Empty State: Show placeholder when value is null or empty -->\n <div\n class=\"ax-flex ax-flex-col ax-items-center ax-justify-center ax-text-center\"\n [style.width.px]=\"size()\"\n [style.height.px]=\"size()\"\n >\n <ax-icon icon=\"fa-light fa-qrcode\" class=\"ax-text-4xl ax-text-gray-400 ax-mb-3\"></ax-icon>\n <div class=\"ax-text-sm ax-text-gray-500\">\n {{ '@general:state-message.empty.title' | translate | async }}\n </div>\n </div>\n }\n\n <!-- Action Buttons Section -->\n @if (!readonly()) {\n <div class=\"ax-flex ax-items-center ax-justify-between ax-gap-2 ax-pt-4\">\n <!-- Edit Button: Opens popover to edit QR code content -->\n <ax-button\n #editBtn\n look=\"twotone\"\n [title]=\"('@general:actions.edit.title' | translate | async)!\"\n (onClick)=\"beginEdit()\"\n >\n <!-- Edit Popover: Text input for editing QR code content -->\n <ax-popover #po [target]=\"editBtn\" [openOn]=\"'toggle'\" [closeOn]=\"'clickOut'\" [adaptivityEnabled]=\"true\">\n <div\n class=\"ax-bg-lightest ax-border ax-border-default ax-rounded-md ax-shadow-md ax-p-5 ax-w-full sm:ax-w-96\"\n >\n <!-- Text Input for QR Code Content -->\n <ax-text-box\n [value]=\"draft()\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly()\"\n [placeholder]=\"placeholder() | translate | async\"\n (onValueChanged)=\"onDraftChange($event)\"\n >\n @if (hasClearButton()) {\n <ax-clear-button></ax-clear-button>\n }\n </ax-text-box>\n <!-- Popover Action Buttons -->\n <div class=\"ax-flex ax-justify-end ax-gap-2 ax-mt-3\">\n <ax-button\n look=\"outline\"\n class=\"ax-sm\"\n [text]=\"('@general:actions.cancel.title' | translate | async)!\"\n (onClick)=\"cancelEdit(); po.close()\"\n ></ax-button>\n <ax-button\n look=\"solid\"\n class=\"ax-sm\"\n color=\"primary\"\n [text]=\"('@general:actions.submit.title' | translate | async)!\"\n (onClick)=\"applyDraft(); po.close()\"\n ></ax-button>\n </div>\n </div>\n </ax-popover>\n <ax-icon icon=\"fa-light fa-pen\"></ax-icon>\n </ax-button>\n\n <!-- Upload Button: Upload text file to set QR code content -->\n <!-- <ax-button\n look=\"twotone\"\n [title]=\"('@general:actions.upload.title' | translate | async)!\"\n (onClick)=\"fileInput.click()\"\n >\n <input #fileInput type=\"file\" accept=\"text/plain\" class=\"ax-hidden\" (change)=\"onFileSelected($event)\" />\n <ax-icon icon=\"fa-light fa-upload\"></ax-icon>\n </ax-button> -->\n\n <!-- Export Button: Download QR code as image (only shown when value exists) -->\n @if (value()) {\n <ax-button\n look=\"twotone\"\n [title]=\"('@general:actions.export.title' | translate | async)!\"\n (onClick)=\"downloadQr(qr)\"\n >\n <ax-icon icon=\"fa-light fa-download\"></ax-icon>\n </ax-button>\n }\n\n <!-- Delete Button: Clear QR code value (only shown when not readonly and value exists) -->\n @if (!readonly() && value()) {\n <ax-button\n look=\"twotone\"\n [title]=\"('@general:actions.delete.title' | translate | async)!\"\n (onClick)=\"clearValue()\"\n >\n <ax-icon icon=\"ax-text-danger fa-light fa-trash-can\"></ax-icon>\n </ax-button>\n }\n </div>\n }\n </div>\n </div>\n</div>\n" }]
|
|
12337
|
+
], host: { class: 'ax-block ax-flex-1' }, template: "<!-- Main Container -->\n<div class=\"ax-flex ax-flex-col ax-gap-3 ax-p-3 ax-w-fit\">\n <div class=\"ax-flex ax-justify-center\">\n <!-- QR Code Container -->\n <div class=\"ax-bg-lightest ax-border ax-border-default ax-rounded-md ax-shadow-md ax-p-3\" #qr>\n <!-- QR Code Display or Empty Placeholder -->\n @if (value()) {\n <!-- Display QR Code when value exists -->\n <ax-qrcode [content]=\"value()\" [size]=\"size()\" [color]=\"color()\" [level]=\"level()\" [outputType]=\"'svg'\">\n </ax-qrcode>\n } @else {\n <!-- Empty State: Show placeholder when value is null or empty -->\n <div\n class=\"ax-flex ax-flex-col ax-items-center ax-justify-center ax-text-center\"\n [style.width.px]=\"size()\"\n [style.height.px]=\"size()\"\n >\n <ax-icon icon=\"fa-light fa-qrcode\" class=\"ax-text-4xl ax-text-gray-400 ax-mb-3\"></ax-icon>\n <div class=\"ax-text-sm ax-text-gray-500\">\n {{ '@general:state-message.empty.title' | translate | async }}\n </div>\n </div>\n }\n\n <!-- Action Buttons Section -->\n @if (!readonly()) {\n <div class=\"ax-flex ax-items-center ax-justify-between ax-gap-2 ax-pt-4\">\n <!-- Edit Button: Opens popover to edit QR code content -->\n <ax-button\n #editBtn\n look=\"twotone\"\n [title]=\"('@general:actions.edit.title' | translate | async)!\"\n (onClick)=\"beginEdit()\"\n >\n <!-- Edit Popover: Text input for editing QR code content -->\n <ax-popover #po [target]=\"editBtn\" [openOn]=\"'toggle'\" [closeOn]=\"'clickOut'\" [adaptivityEnabled]=\"true\">\n <div\n class=\"ax-bg-lightest ax-border ax-border-default ax-rounded-md ax-shadow-md ax-p-5 ax-w-full sm:ax-w-96\"\n >\n <!-- Text Input for QR Code Content -->\n <ax-text-box\n [value]=\"draft()\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly()\"\n [placeholder]=\"placeholder() | translate | async\"\n (onValueChanged)=\"onDraftChange($event)\"\n >\n @if (hasClearButton()) {\n <ax-clear-button></ax-clear-button>\n }\n </ax-text-box>\n <!-- Popover Action Buttons -->\n <div class=\"ax-flex ax-justify-end ax-gap-2 ax-mt-3\">\n <ax-button\n look=\"outline\"\n class=\"ax-sm\"\n [text]=\"('@general:actions.cancel.title' | translate | async)!\"\n (onClick)=\"cancelEdit(); po.close()\"\n ></ax-button>\n <ax-button\n look=\"solid\"\n class=\"ax-sm\"\n color=\"primary\"\n [text]=\"('@general:actions.submit.title' | translate | async)!\"\n (onClick)=\"applyDraft(); po.close()\"\n ></ax-button>\n </div>\n </div>\n </ax-popover>\n <ax-icon icon=\"fa-light fa-pen\"></ax-icon>\n </ax-button>\n\n <!-- Upload Button: Upload text file to set QR code content -->\n <!-- <ax-button\n look=\"twotone\"\n [title]=\"('@general:actions.upload.title' | translate | async)!\"\n (onClick)=\"fileInput.click()\"\n >\n <input #fileInput type=\"file\" accept=\"text/plain\" class=\"ax-hidden\" (change)=\"onFileSelected($event)\" />\n <ax-icon icon=\"fa-light fa-upload\"></ax-icon>\n </ax-button> -->\n\n <!-- Export Button: Download QR code as image (only shown when value exists) -->\n @if (value()) {\n <ax-button\n look=\"twotone\"\n [title]=\"('@general:actions.preview.title' | translate | async)!\"\n (onClick)=\"openPreview()\"\n >\n <ax-icon icon=\"fa-light fa-expand\"></ax-icon>\n </ax-button>\n\n <ax-button\n look=\"twotone\"\n [title]=\"('@general:actions.export.title' | translate | async)!\"\n (onClick)=\"downloadQr(qr)\"\n >\n <ax-icon icon=\"fa-light fa-download\"></ax-icon>\n </ax-button>\n }\n\n <!-- Delete Button: Clear QR code value (only shown when not readonly and value exists) -->\n @if (!readonly() && value()) {\n <ax-button\n look=\"twotone\"\n [title]=\"('@general:actions.delete.title' | translate | async)!\"\n (onClick)=\"clearValue()\"\n >\n <ax-icon icon=\"ax-text-danger fa-light fa-trash-can\"></ax-icon>\n </ax-button>\n }\n </div>\n }\n </div>\n </div>\n</div>\n" }]
|
|
12140
12338
|
}] });
|
|
12141
12339
|
|
|
12142
12340
|
var qrcodeWidgetEdit_component = /*#__PURE__*/Object.freeze({
|
|
@@ -12147,102 +12345,132 @@ var qrcodeWidgetEdit_component = /*#__PURE__*/Object.freeze({
|
|
|
12147
12345
|
class AXPQrcodeWidgetViewComponent extends AXPValueWidgetComponent {
|
|
12148
12346
|
constructor() {
|
|
12149
12347
|
super(...arguments);
|
|
12150
|
-
|
|
12348
|
+
//#region ---- Services & Dependencies ----
|
|
12349
|
+
this.qrcodeViewer = inject(AXPQrcodeViewerService);
|
|
12350
|
+
this.formatService = inject(AXFormatService);
|
|
12351
|
+
this.translation = inject(AXTranslationService);
|
|
12352
|
+
//#endregion
|
|
12353
|
+
//#region ---- View Children ----
|
|
12354
|
+
this.qrContainer = viewChild('qrContainer', ...(ngDevMode ? [{ debugName: "qrContainer" }] : /* istanbul ignore next */ []));
|
|
12355
|
+
//#endregion
|
|
12356
|
+
//#region ---- Computed Properties ----
|
|
12357
|
+
this.size = computed(() => normalizePositiveNumberOption(this.options()['size'], DEFAULT_QRCODE_SIZE), ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
12151
12358
|
this.level = computed(() => this.options()['level']?.id ?? 'M', ...(ngDevMode ? [{ debugName: "level" }] : /* istanbul ignore next */ []));
|
|
12152
12359
|
this.color = computed(() => AXColorUtil.colorStringToHex(this.options()['color'] ?? '#000000'), ...(ngDevMode ? [{ debugName: "color" }] : /* istanbul ignore next */ []));
|
|
12153
12360
|
this.outputType = computed(() => this.options()['outputType'] ?? 'svg', ...(ngDevMode ? [{ debugName: "outputType" }] : /* istanbul ignore next */ []));
|
|
12361
|
+
this.showContent = computed(() => !!this.options()['showContent'], ...(ngDevMode ? [{ debugName: "showContent" }] : /* istanbul ignore next */ []));
|
|
12362
|
+
this.contentLabel = computed(() => this.options()['contentLabel'] ?? '@platform-layout-widgets:widgets.qrcode.content', ...(ngDevMode ? [{ debugName: "contentLabel" }] : /* istanbul ignore next */ []));
|
|
12154
12363
|
}
|
|
12155
|
-
|
|
12156
|
-
|
|
12157
|
-
|
|
12158
|
-
|
|
12364
|
+
//#endregion
|
|
12365
|
+
//#region ---- UI Handlers ----
|
|
12366
|
+
async openPreview() {
|
|
12367
|
+
const content = this.getValue();
|
|
12368
|
+
if (!content) {
|
|
12369
|
+
return;
|
|
12370
|
+
}
|
|
12371
|
+
await openQrcodeViewer(this.qrcodeViewer, {
|
|
12372
|
+
content,
|
|
12373
|
+
data: this.contextService.data(),
|
|
12374
|
+
widgetOptions: this.options(),
|
|
12375
|
+
formatService: this.formatService,
|
|
12376
|
+
activeLang: this.translation.getActiveLang(),
|
|
12377
|
+
});
|
|
12378
|
+
}
|
|
12379
|
+
//#endregion
|
|
12380
|
+
//#region ---- Widget API ----
|
|
12381
|
+
api() {
|
|
12382
|
+
return {
|
|
12383
|
+
print: () => {
|
|
12384
|
+
const container = this.qrContainer()?.nativeElement;
|
|
12385
|
+
if (container) {
|
|
12386
|
+
printGraphicFromElement(container, {
|
|
12387
|
+
fallbackSize: this.size(),
|
|
12388
|
+
title: 'QR Code',
|
|
12389
|
+
imageAlt: 'QR Code',
|
|
12390
|
+
});
|
|
12391
|
+
}
|
|
12392
|
+
},
|
|
12393
|
+
};
|
|
12159
12394
|
}
|
|
12160
12395
|
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: {
|
|
12162
|
-
{{ getValue() }}
|
|
12396
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXPQrcodeWidgetViewComponent, isStandalone: true, selector: "axp-qrcode-widget", host: { classAttribute: "ax-block ax-w-full" }, viewQueries: [{ propertyName: "qrContainer", first: true, predicate: ["qrContainer"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: `
|
|
12163
12397
|
@if (getValue()) {
|
|
12164
|
-
<
|
|
12165
|
-
|
|
12398
|
+
<div class="ax-flex ax-w-full ax-flex-col ax-items-center ax-gap-4 ax-text-center">
|
|
12399
|
+
<div #qrContainer class="ax-inline-block">
|
|
12400
|
+
<ax-qrcode
|
|
12401
|
+
[content]="getValue()"
|
|
12402
|
+
[size]="size()"
|
|
12403
|
+
[color]="color()"
|
|
12404
|
+
[level]="level()"
|
|
12405
|
+
[outputType]="outputType()"
|
|
12406
|
+
>
|
|
12407
|
+
</ax-qrcode>
|
|
12408
|
+
</div>
|
|
12409
|
+
@if (showContent()) {
|
|
12410
|
+
<div class="ax-flex ax-max-w-full ax-flex-col ax-items-center ax-gap-1">
|
|
12411
|
+
<span class="ax-text-sm ax-font-medium">{{ contentLabel() | translate | async }}</span>
|
|
12412
|
+
<span class="ax-break-all ax-text-sm">{{ getValue() }}</span>
|
|
12413
|
+
</div>
|
|
12414
|
+
} @else {
|
|
12415
|
+
<ax-button
|
|
12416
|
+
look="twotone"
|
|
12417
|
+
class="ax-sm"
|
|
12418
|
+
[title]="('@general:actions.preview.title' | translate | async)!"
|
|
12419
|
+
(onClick)="openPreview()"
|
|
12420
|
+
>
|
|
12421
|
+
<ax-icon icon="fa-light fa-expand"></ax-icon>
|
|
12422
|
+
</ax-button>
|
|
12423
|
+
}
|
|
12424
|
+
</div>
|
|
12166
12425
|
}
|
|
12167
|
-
`, 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 }); }
|
|
12426
|
+
`, isInline: true, dependencies: [{ kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i1$1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i2$1.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "ngmodule", type: AXQrcodeModule }, { kind: "component", type: i5$3.AXQrcodeComponent, selector: "ax-qrcode", inputs: ["content", "size", "level", "color", "backgroundColor", "outputType"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "pipe", type: i6.AXTranslatorPipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
12168
12427
|
}
|
|
12169
12428
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPQrcodeWidgetViewComponent, decorators: [{
|
|
12170
12429
|
type: Component,
|
|
12171
12430
|
args: [{
|
|
12172
12431
|
selector: 'axp-qrcode-widget',
|
|
12173
12432
|
template: `
|
|
12174
|
-
{{ getValue() }}
|
|
12175
12433
|
@if (getValue()) {
|
|
12176
|
-
<
|
|
12177
|
-
|
|
12434
|
+
<div class="ax-flex ax-w-full ax-flex-col ax-items-center ax-gap-4 ax-text-center">
|
|
12435
|
+
<div #qrContainer class="ax-inline-block">
|
|
12436
|
+
<ax-qrcode
|
|
12437
|
+
[content]="getValue()"
|
|
12438
|
+
[size]="size()"
|
|
12439
|
+
[color]="color()"
|
|
12440
|
+
[level]="level()"
|
|
12441
|
+
[outputType]="outputType()"
|
|
12442
|
+
>
|
|
12443
|
+
</ax-qrcode>
|
|
12444
|
+
</div>
|
|
12445
|
+
@if (showContent()) {
|
|
12446
|
+
<div class="ax-flex ax-max-w-full ax-flex-col ax-items-center ax-gap-1">
|
|
12447
|
+
<span class="ax-text-sm ax-font-medium">{{ contentLabel() | translate | async }}</span>
|
|
12448
|
+
<span class="ax-break-all ax-text-sm">{{ getValue() }}</span>
|
|
12449
|
+
</div>
|
|
12450
|
+
} @else {
|
|
12451
|
+
<ax-button
|
|
12452
|
+
look="twotone"
|
|
12453
|
+
class="ax-sm"
|
|
12454
|
+
[title]="('@general:actions.preview.title' | translate | async)!"
|
|
12455
|
+
(onClick)="openPreview()"
|
|
12456
|
+
>
|
|
12457
|
+
<ax-icon icon="fa-light fa-expand"></ax-icon>
|
|
12458
|
+
</ax-button>
|
|
12459
|
+
}
|
|
12460
|
+
</div>
|
|
12178
12461
|
}
|
|
12179
12462
|
`,
|
|
12180
12463
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
12181
|
-
imports: [AXQrcodeModule],
|
|
12464
|
+
imports: [AXButtonModule, AXDecoratorModule, AXQrcodeModule, AXTranslationModule, AsyncPipe],
|
|
12465
|
+
host: { class: 'ax-block ax-w-full' },
|
|
12182
12466
|
}]
|
|
12183
|
-
}], propDecorators: {
|
|
12184
|
-
type: HostBinding,
|
|
12185
|
-
args: ['class']
|
|
12186
|
-
}] } });
|
|
12467
|
+
}], propDecorators: { qrContainer: [{ type: i0.ViewChild, args: ['qrContainer', { isSignal: true }] }] } });
|
|
12187
12468
|
|
|
12188
12469
|
var qrcodeWidgetView_component = /*#__PURE__*/Object.freeze({
|
|
12189
12470
|
__proto__: null,
|
|
12190
12471
|
AXPQrcodeWidgetViewComponent: AXPQrcodeWidgetViewComponent
|
|
12191
12472
|
});
|
|
12192
12473
|
|
|
12193
|
-
const AXPQrcodeWidget = {
|
|
12194
|
-
name: 'qrcode',
|
|
12195
|
-
title: '@platform-layout-widgets:widgets.qrcode.title',
|
|
12196
|
-
categories: [AXP_WIDGETS_ADVANCE_CATEGORY],
|
|
12197
|
-
subCategory: AXP_WIDGETS_ADVANCE_SUB_MEDIA,
|
|
12198
|
-
icon: 'fa-light fa-qrcode',
|
|
12199
|
-
description: '@platform-layout-widgets:widgets.qrcode.description',
|
|
12200
|
-
type: 'view',
|
|
12201
|
-
properties: [
|
|
12202
|
-
AXP_NAME_PROPERTY,
|
|
12203
|
-
AXP_DATA_PATH_PROPERTY,
|
|
12204
|
-
cloneProperty(AXP_COLOR_PROPERTY, { schema: { interface: { defaultValue: '#000000' } } }),
|
|
12205
|
-
cloneProperty(AXP_CONTENT_PROPERTY, { schema: { interface: { defaultValue: 'http://google.com' } } }),
|
|
12206
|
-
createNumberProperty({
|
|
12207
|
-
name: 'size',
|
|
12208
|
-
title: 'Size',
|
|
12209
|
-
path: 'options.size',
|
|
12210
|
-
group: AXP_STYLING_PROPERTY_GROUP,
|
|
12211
|
-
defaultValue: 200,
|
|
12212
|
-
}),
|
|
12213
|
-
createSelectProperty({
|
|
12214
|
-
name: 'level',
|
|
12215
|
-
title: 'Error Correction Level',
|
|
12216
|
-
path: 'options.level',
|
|
12217
|
-
group: AXP_STYLING_PROPERTY_GROUP,
|
|
12218
|
-
dataSource: ['L', 'M', 'Q', 'H'],
|
|
12219
|
-
defaultValue: 'M',
|
|
12220
|
-
}),
|
|
12221
|
-
createSelectProperty({
|
|
12222
|
-
name: 'outputType',
|
|
12223
|
-
title: 'Output Type',
|
|
12224
|
-
path: 'options.outputType',
|
|
12225
|
-
group: AXP_STYLING_PROPERTY_GROUP,
|
|
12226
|
-
dataSource: ['svg', 'canvas'],
|
|
12227
|
-
defaultValue: 'svg',
|
|
12228
|
-
}),
|
|
12229
|
-
],
|
|
12230
|
-
components: {
|
|
12231
|
-
view: {
|
|
12232
|
-
component: () => Promise.resolve().then(function () { return qrcodeWidgetView_component; }).then((c) => c.AXPQrcodeWidgetViewComponent),
|
|
12233
|
-
},
|
|
12234
|
-
edit: {
|
|
12235
|
-
component: () => Promise.resolve().then(function () { return qrcodeWidgetEdit_component; }).then((c) => c.AXPQrcodeWidgetEditComponent),
|
|
12236
|
-
},
|
|
12237
|
-
column: {
|
|
12238
|
-
component: () => Promise.resolve().then(function () { return qrcodeWidgetColumn_component; }).then((c) => c.AXPQrcodeWidgetColumnComponent),
|
|
12239
|
-
},
|
|
12240
|
-
designer: {
|
|
12241
|
-
component: () => Promise.resolve().then(function () { return qrcodeWidgetView_component; }).then((c) => c.AXPQrcodeWidgetViewComponent),
|
|
12242
|
-
},
|
|
12243
|
-
},
|
|
12244
|
-
};
|
|
12245
|
-
|
|
12246
12474
|
//#region ---- Imports ----
|
|
12247
12475
|
//#endregion
|
|
12248
12476
|
//#region ---- Component ----
|
|
@@ -12652,7 +12880,7 @@ class AXPSignatureWidgetEditComponent extends AXPValueWidgetComponent {
|
|
|
12652
12880
|
this.paintView = viewChild('paintView', ...(ngDevMode ? [{ debugName: "paintView" }] : /* istanbul ignore next */ []));
|
|
12653
12881
|
//#endregion
|
|
12654
12882
|
//#region ---- Services & Dependencies ----
|
|
12655
|
-
this.
|
|
12883
|
+
this.signatureEditorService = inject(AXPSignatureEditorService);
|
|
12656
12884
|
this.deviceService = inject(AXPDeviceService);
|
|
12657
12885
|
//#endregion
|
|
12658
12886
|
//#region ---- Effects ----
|
|
@@ -12735,62 +12963,13 @@ class AXPSignatureWidgetEditComponent extends AXPValueWidgetComponent {
|
|
|
12735
12963
|
if (this.disabled()) {
|
|
12736
12964
|
return;
|
|
12737
12965
|
}
|
|
12738
|
-
const
|
|
12739
|
-
.
|
|
12740
|
-
.
|
|
12741
|
-
|
|
12742
|
-
|
|
12743
|
-
|
|
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
|
-
}
|
|
12966
|
+
const result = await this.signatureEditorService.open({
|
|
12967
|
+
value: this.getValue(),
|
|
12968
|
+
disabled: this.disabled(),
|
|
12969
|
+
});
|
|
12970
|
+
if (result.action === 'apply') {
|
|
12971
|
+
this.setValue(result.value);
|
|
12792
12972
|
}
|
|
12793
|
-
ref.close();
|
|
12794
12973
|
}
|
|
12795
12974
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPSignatureWidgetEditComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
12796
12975
|
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 +28133,5 @@ var getWidgetsForAi_query = /*#__PURE__*/Object.freeze({
|
|
|
27954
28133
|
* Generated bundle index. Do not edit.
|
|
27955
28134
|
*/
|
|
27956
28135
|
|
|
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 };
|
|
28136
|
+
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_QRCODE_SIZE, DEFAULT_STRATEGY_CONFIG, STRATEGY_CONFIG_TOKEN, matchesWidgetAiAgent };
|
|
27958
28137
|
//# sourceMappingURL=acorex-platform-layout-widgets.mjs.map
|