@acorex/platform 21.0.0-next.72 → 21.0.0-next.73
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 +12 -6
- package/fesm2022/acorex-platform-common.mjs.map +1 -1
- package/fesm2022/acorex-platform-contracts.mjs +10 -0
- package/fesm2022/acorex-platform-contracts.mjs.map +1 -0
- package/fesm2022/acorex-platform-core.mjs +15 -12
- package/fesm2022/acorex-platform-core.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-builder.mjs +3 -0
- package/fesm2022/acorex-platform-layout-builder.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-components.mjs +185 -8
- package/fesm2022/acorex-platform-layout-components.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-entity.mjs +64 -44
- package/fesm2022/acorex-platform-layout-entity.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 +279 -108
- 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 -54
- 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 +7 -6
- package/types/acorex-platform-contracts.d.ts +39 -0
- package/types/acorex-platform-core.d.ts +8 -8
- 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 +3 -1
- package/types/acorex-platform-layout-widgets.d.ts +45 -45
|
@@ -23,7 +23,7 @@ import * as i1$1 from '@acorex/components/avatar';
|
|
|
23
23
|
import { AXAvatarModule } from '@acorex/components/avatar';
|
|
24
24
|
import * as i3$1 from '@acorex/components/image';
|
|
25
25
|
import { AXImageModule } from '@acorex/components/image';
|
|
26
|
-
import { isNil, isEmpty, cloneDeep, isEqual, get, unionBy, sortBy, isArray, set, merge, capitalize } from 'lodash-es';
|
|
26
|
+
import { isNil, isEmpty, cloneDeep, isEqual, get, isString, unionBy, sortBy, isArray, set, merge, capitalize } from 'lodash-es';
|
|
27
27
|
import * as i1$3 from '@acorex/components/badge';
|
|
28
28
|
import { AXBadgeComponent, AXBadgeModule } from '@acorex/components/badge';
|
|
29
29
|
import { AXPLayoutThemeService, AXPMenuVerticalMode } from '@acorex/platform/themes/shared';
|
|
@@ -339,11 +339,11 @@ class AXPAvatarComponent {
|
|
|
339
339
|
// ax-accent3-lightest
|
|
340
340
|
}
|
|
341
341
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPAvatarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
342
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXPAvatarComponent, isStandalone: true, selector: "axp-avatar", inputs: { size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, src: { classPropertyName: "src", publicName: "src", isSignal: true, isRequired: false, transformFunction: null }, fullName: { classPropertyName: "fullName", publicName: "fullName", isSignal: true, isRequired: false, transformFunction: null }, fallbackText: { classPropertyName: "fallbackText", publicName: "fallbackText", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<ax-avatar [size]=\"size()\" class=\"ax-cursor-pointer ax-relative\" [title]=\"title()\"\n class=\"ax-{{ avatarColor() }}-lightest ax-border \">\n @if (hasAvatar()) {\n <ng-container>\n <ax-image (onError)=\"onImageError($event)\" (onLoad)=\"onImageLoad($event)\" [src]=\"resolvedSrc()\"\n [class.ax-opacity-0]=\"isLoading()\" class=\"ax-transition-opacity ax-duration-200\" />\n @if (isLoading()) {\n <ax-icon icon=\"fa-solid fa-user fa-2x\" class=\"ax-text-3xl\" />\n }\n </ng-container>\n } @else {\n <ax-text>\n <small class=\"ax-
|
|
342
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXPAvatarComponent, isStandalone: true, selector: "axp-avatar", inputs: { size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, src: { classPropertyName: "src", publicName: "src", isSignal: true, isRequired: false, transformFunction: null }, fullName: { classPropertyName: "fullName", publicName: "fullName", isSignal: true, isRequired: false, transformFunction: null }, fallbackText: { classPropertyName: "fallbackText", publicName: "fallbackText", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<ax-avatar [size]=\"size()\" class=\"ax-cursor-pointer ax-relative\" [title]=\"title()\"\n class=\"ax-{{ avatarColor() }}-lightest ax-border \">\n @if (hasAvatar()) {\n <ng-container>\n <ax-image (onError)=\"onImageError($event)\" (onLoad)=\"onImageLoad($event)\" [src]=\"resolvedSrc()\"\n [class.ax-opacity-0]=\"isLoading()\" class=\"ax-transition-opacity ax-duration-200\" />\n @if (isLoading()) {\n <ax-icon icon=\"fa-solid fa-user fa-2x\" class=\"ax-text-3xl\" />\n }\n </ng-container>\n } @else {\n <ax-text>\n <small class=\"ax-font-semibold\" [style.font-size]=\"size() * 0.35 + 'px'\">{{ avatarText() }}</small>\n </ax-text>\n }\n</ax-avatar>", styles: [":host ax-text{border-style:none;background-color:transparent;color:unset!important}\n"], dependencies: [{ kind: "ngmodule", type: AXAvatarModule }, { kind: "component", type: i1$1.AXAvatarComponent, selector: "ax-avatar", inputs: ["color", "size", "shape", "look"], outputs: ["sizeChange"] }, { 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: AXImageModule }, { kind: "component", type: i3$1.AXImageComponent, selector: "ax-image", inputs: ["width", "height", "overlayMode", "src", "alt", "priority", "lazy"], outputs: ["onLoad", "onError"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
343
343
|
}
|
|
344
344
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPAvatarComponent, decorators: [{
|
|
345
345
|
type: Component,
|
|
346
|
-
args: [{ selector: 'axp-avatar', imports: [AXAvatarModule, AXDecoratorModule, AXImageModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<ax-avatar [size]=\"size()\" class=\"ax-cursor-pointer ax-relative\" [title]=\"title()\"\n class=\"ax-{{ avatarColor() }}-lightest ax-border \">\n @if (hasAvatar()) {\n <ng-container>\n <ax-image (onError)=\"onImageError($event)\" (onLoad)=\"onImageLoad($event)\" [src]=\"resolvedSrc()\"\n [class.ax-opacity-0]=\"isLoading()\" class=\"ax-transition-opacity ax-duration-200\" />\n @if (isLoading()) {\n <ax-icon icon=\"fa-solid fa-user fa-2x\" class=\"ax-text-3xl\" />\n }\n </ng-container>\n } @else {\n <ax-text>\n <small class=\"ax-
|
|
346
|
+
args: [{ selector: 'axp-avatar', imports: [AXAvatarModule, AXDecoratorModule, AXImageModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<ax-avatar [size]=\"size()\" class=\"ax-cursor-pointer ax-relative\" [title]=\"title()\"\n class=\"ax-{{ avatarColor() }}-lightest ax-border \">\n @if (hasAvatar()) {\n <ng-container>\n <ax-image (onError)=\"onImageError($event)\" (onLoad)=\"onImageLoad($event)\" [src]=\"resolvedSrc()\"\n [class.ax-opacity-0]=\"isLoading()\" class=\"ax-transition-opacity ax-duration-200\" />\n @if (isLoading()) {\n <ax-icon icon=\"fa-solid fa-user fa-2x\" class=\"ax-text-3xl\" />\n }\n </ng-container>\n } @else {\n <ax-text>\n <small class=\"ax-font-semibold\" [style.font-size]=\"size() * 0.35 + 'px'\">{{ avatarText() }}</small>\n </ax-text>\n }\n</ax-avatar>", styles: [":host ax-text{border-style:none;background-color:transparent;color:unset!important}\n"] }]
|
|
347
347
|
}], propDecorators: { size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], src: [{ type: i0.Input, args: [{ isSignal: true, alias: "src", required: false }] }], fullName: [{ type: i0.Input, args: [{ isSignal: true, alias: "fullName", required: false }] }], fallbackText: [{ type: i0.Input, args: [{ isSignal: true, alias: "fallbackText", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }] } });
|
|
348
348
|
|
|
349
349
|
const AXP_TASK_BADGE_PROVIDERS = new InjectionToken('AXP_TASK_BADGE_PROVIDERS');
|
|
@@ -2114,7 +2114,7 @@ class AXPDataSelectorComponent extends AXBasePageComponent {
|
|
|
2114
2114
|
}
|
|
2115
2115
|
}
|
|
2116
2116
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPDataSelectorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
2117
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXPDataSelectorComponent, isStandalone: true, selector: "axp-data-selector", viewQueries: [{ propertyName: "grid", first: true, predicate: ["grid"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"axp-data-selector\">\n <!-- Main Content Area -->\n <div class=\"axp-data-selector-content\" [class.with-category-filter]=\"categoryEnabled()\">\n <!-- Category Filter Side Panel -->\n @if (categoryEnabled()) {\n <div class=\"axp-category-filter-panel\" [style.width]=\"config().category?.width || '300px'\">\n <axp-category-tree [dataSource]=\"config().category!.dataSource\" [config]=\"categoryTreeConfig()\"\n [actions]=\"categoryTreeActions()\" (nodeClick)=\"handleCategoryFilterClick($event)\">\n </axp-category-tree>\n </div>\n }\n\n <!-- Main Data Area -->\n <div class=\"axp-main-data-area\">\n @if (hasSearch()) {\n <div class=\"ax-w-full ax-mb-2\">\n <ax-search-box [placeholder]=\"searchPlaceholderText()\" [value]=\"searchTerm\"\n (onValueChanged)=\"handleChangeSearchValue($event)\" [axAutoFocus]=\"true\">\n <ax-clear-button></ax-clear-button>\n </ax-search-box>\n </div>\n }\n <ax-data-table #grid [showFooter]=\"false\" class=\"ax-flex-1 ax-min-h-0\" [paging]=\"true\"\n [loading]=\"{ enabled: true, animation: true }\" [dataSource]=\"config().dataSource\"\n [parentField]=\"config().grid.parentField\" [selectedRows]=\"selectedItems()\"\n (selectedRowsChange)=\"handleSelectedRowsChange($event)\" (onRowClick)=\"handleRowClick($event)\"\n (onRowDbClick)=\"handleRowDbClick($event)\">\n <ax-select-column fixed=\"start\" [width]=\"'50px'\"></ax-select-column>\n\n @for (col of config().grid.columns; track col.name) {\n @if (col.visible) {\n <axp-widget-column-renderer [expandHandler]=\"$index === 0 && config().grid.parentField ? true : false\"\n [caption]=\"col.title | translate | async\" [customWidth]=\"col.width || ''\" [node]=\"{\n path: col.dataPath || col.name,\n type: col.widget.type,\n options: col.widget.options\n }\">\n </axp-widget-column-renderer>\n }\n }\n @if (hasRowActionPrimary()) {\n <ax-command-column fixed=\"end\" [width]=\"primaryRowActionColumnWidth()\" [items]=\"primaryRowActionItems()\"\n (onItemClick)=\"handleRowActionClick($event)\">\n </ax-command-column>\n }\n @if (hasRowActionDropdown()) {\n <ax-dropdown-command-column fixed=\"end\" [width]=\"'60px'\" [items]=\"getDropdownRowActionItems\"\n (onItemClick)=\"handleRowActionClick($event)\">\n </ax-dropdown-command-column>\n }\n </ax-data-table>\n </div>\n </div>\n</div>\n\n<ax-footer>\n <ax-prefix>\n @if ((config().create?.mode === 'full' || config().create?.mode === 'quick') && config().create?.onCreate) {\n <ax-button look=\"twotone\" color=\"primary\" [text]=\"'@general:actions.create.title' | translate | async\"\n (onClick)=\"handleCreateNewClick(config().create?.mode === 'quick' ? 'quick' : 'full')\">\n <ax-prefix>\n <ax-icon icon=\"far fa-plus\"></ax-icon>\n </ax-prefix>\n </ax-button>\n }\n </ax-prefix>\n <ax-suffix>\n <ax-button look=\"solid\" [text]=\"('@general:actions.close.title' | translate | async)!\"\n (onClick)=\"handleCloseClick()\">\n </ax-button>\n <ax-button look=\"solid\" color=\"primary\" [text]=\"('@general:actions.select.title' | translate | async)!\"\n (onClick)=\"handleSelectClick()\" [disabled]=\"allowSelect() === false\">\n <!-- @if (selectionMode() === 'multiple' && selectedCount() > 0) {\n <ax-badge [text]=\"selectedCount().toString()\" color=\"accent1\"\n class=\"ax-absolute ax-end-[2px] ax-top-[2px]\"></ax-badge>\n } -->\n </ax-button>\n </ax-suffix>\n</ax-footer>\n", styles: ["axp-data-selector{display:flex;flex-direction:column;flex:1;min-height:0;height:100%;overflow:hidden}.ax-expand-handler{cursor:pointer;display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;margin-right:8px}.ax-expand-handler:hover{opacity:.8}.ax-expand-handler.ax-invisible{visibility:hidden}.ax-overflow-hidden{overflow:hidden}.ax-flex{display:flex}.ax-flex-col{flex-direction:column}.ax-gap-4{gap:1rem}.ax-p-4{padding:1rem}.ax-w-full{width:100%}.axp-data-selector{display:flex;flex-direction:column;flex:1;min-height:0;overflow:hidden}.axp-data-selector-content{display:flex;flex:1;min-height:0;overflow:hidden}.axp-data-selector-content.with-category-filter .axp-main-data-area{flex:1;min-width:0;min-height:0;overflow:hidden}.axp-data-selector .axp-category-filter-panel{display:flex;flex-direction:column;border-right:1px solid var(--border-color);padding:1rem;background:var(--surface-color);flex-shrink:0;min-height:0;min-width:0;overflow:hidden}.axp-data-selector .axp-category-filter-panel axp-category-tree{display:flex;flex:1;flex-direction:column;min-height:0;min-width:0;overflow:hidden}.axp-data-selector .axp-main-data-area{flex:1;min-width:0;min-height:0;overflow:hidden;padding:1rem;display:flex;flex-direction:column;gap:1rem}.axp-data-selector .axp-main-data-area ax-data-table{flex:1;min-height:0;height:100%;display:flex;flex-direction:column;overflow:hidden}.axp-data-selector .axp-main-data-area .ax-search-box{width:100%;flex-shrink:0}.ax-popup:has(axp-data-selector){display:flex;flex-direction:column;height:90vh;max-height:90vh;overflow:hidden}.ax-popup:has(axp-data-selector) .ax-popup-main-container{display:flex;flex:1 1 auto;flex-direction:column;min-height:0;overflow:hidden}.ax-popup:has(axp-data-selector) .ax-popup-body-container{display:flex;flex:1 1 auto;flex-direction:column;min-height:0;overflow:hidden!important}.ax-popup:has(axp-data-selector) .ax-popup-footer-container{flex-shrink:0}@media(min-width:320px)and (max-width:640px){.ax-popup.ax-popup-sm:has(axp-data-selector),.ax-popup.ax-popup-md:has(axp-data-selector),.ax-popup.ax-popup-lg:has(axp-data-selector){height:90vh!important;max-height:90vh!important}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXCommonModule }, { kind: "directive", type: i1$6.AXAutoFocusDirective, selector: "[axAutoFocus]", inputs: ["axAutoFocus", "axAutoFocusTime"] }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i1$2.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: AXFormModule }, { 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: "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: AXDropdownButtonModule }, { kind: "ngmodule", type: AXDataTableModule }, { kind: "component", type: i4$1.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: i4$1.AXRowSelectColumnComponent, selector: "ax-select-column", inputs: ["width", "caption", "fixed"] }, { kind: "component", type: i4$1.AXRowCommandColumnComponent, selector: "ax-command-column", inputs: ["width", "caption", "fixed", "footerTemplate", "items"], outputs: ["onItemClick"] }, { kind: "component", type: i4$1.AXRowDropdownCommandColumnComponent, selector: "ax-dropdown-command-column", inputs: ["width", "caption", "fixed", "footerTemplate", "emptyStateTemplate", "emptyStateText", "items"], outputs: ["onItemClick"] }, { kind: "ngmodule", type: AXSearchBoxModule }, { kind: "component", type: i5.AXSearchBoxComponent, selector: "ax-search-box", inputs: ["disabled", "readonly", "tabIndex", "placeholder", "value", "state", "name", "id", "look", "class", "delayTime", "type", "autoSearch"], outputs: ["valueChange", "stateChange", "onValueChanged", "onBlur", "onFocus", "readonlyChange", "disabledChange", "onKeyDown", "onKeyUp", "onKeyPress"] }, { kind: "ngmodule", type: AXPWidgetCoreModule }, { kind: "component", type: i3$3.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 }, { kind: "ngmodule", type: AXBadgeModule }, { kind: "component", type: AXPCategoryTreeComponent, selector: "axp-category-tree", inputs: ["dataSource", "config", "actions", "events"], outputs: ["nodeClick", "nodeSelect", "nodeCreate", "nodeUpdate", "nodeDelete", "searchChange", "collapseChange"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
2117
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXPDataSelectorComponent, isStandalone: true, selector: "axp-data-selector", viewQueries: [{ propertyName: "grid", first: true, predicate: ["grid"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"axp-data-selector\">\n <!-- Main Content Area -->\n <div class=\"axp-data-selector-content\" [class.with-category-filter]=\"categoryEnabled()\">\n <!-- Category Filter Side Panel -->\n @if (categoryEnabled()) {\n <div class=\"axp-category-filter-panel\" [style.width]=\"config().category?.width || '300px'\">\n <axp-category-tree [dataSource]=\"config().category!.dataSource\" [config]=\"categoryTreeConfig()\"\n [actions]=\"categoryTreeActions()\" (nodeClick)=\"handleCategoryFilterClick($event)\">\n </axp-category-tree>\n </div>\n }\n\n <!-- Main Data Area -->\n <div class=\"axp-main-data-area\">\n @if (hasSearch()) {\n <div class=\"ax-w-full ax-mb-2\">\n <ax-search-box [placeholder]=\"searchPlaceholderText()\" [value]=\"searchTerm\"\n (onValueChanged)=\"handleChangeSearchValue($event)\" [axAutoFocus]=\"true\">\n <ax-clear-button></ax-clear-button>\n </ax-search-box>\n </div>\n }\n <ax-data-table #grid [showFooter]=\"false\" class=\"ax-flex-1 ax-min-h-0\" [paging]=\"true\"\n [loading]=\"{ enabled: true, animation: true }\" [dataSource]=\"config().dataSource\"\n [parentField]=\"config().grid.parentField\" [selectedRows]=\"selectedItems()\"\n (selectedRowsChange)=\"handleSelectedRowsChange($event)\" (onRowClick)=\"handleRowClick($event)\"\n (onRowDbClick)=\"handleRowDbClick($event)\">\n <ax-select-column fixed=\"start\" [width]=\"'50px'\"></ax-select-column>\n\n @for (col of config().grid.columns; track col.name) {\n @if (col.visible) {\n <axp-widget-column-renderer [expandHandler]=\"$index === 0 && config().grid.parentField ? true : false\"\n [caption]=\"col.title | translate | async\" [customWidth]=\"col.width || ''\" [node]=\"{\n path: col.dataPath || col.name,\n type: col.widget.type,\n options: col.widget.options\n }\">\n </axp-widget-column-renderer>\n }\n }\n @if (hasRowActionPrimary()) {\n <ax-command-column fixed=\"end\" [width]=\"primaryRowActionColumnWidth()\" [items]=\"primaryRowActionItems()\"\n (onItemClick)=\"handleRowActionClick($event)\">\n </ax-command-column>\n }\n @if (hasRowActionDropdown()) {\n <ax-dropdown-command-column fixed=\"end\" [width]=\"'60px'\" [items]=\"getDropdownRowActionItems\"\n (onItemClick)=\"handleRowActionClick($event)\">\n </ax-dropdown-command-column>\n }\n </ax-data-table>\n </div>\n </div>\n</div>\n\n<ax-footer>\n <ax-prefix>\n @if ((config().create?.mode === 'full' || config().create?.mode === 'quick') && config().create?.onCreate) {\n <ax-button look=\"twotone\" color=\"primary\" [text]=\"'@general:actions.create.title' | translate | async\"\n (onClick)=\"handleCreateNewClick(config().create?.mode === 'quick' ? 'quick' : 'full')\">\n <ax-prefix>\n <ax-icon icon=\"far fa-plus\"></ax-icon>\n </ax-prefix>\n </ax-button>\n }\n </ax-prefix>\n <ax-suffix>\n <ax-button look=\"solid\" [text]=\"('@general:actions.close.title' | translate | async)!\"\n (onClick)=\"handleCloseClick()\">\n </ax-button>\n <ax-button look=\"solid\" color=\"primary\" [text]=\"('@general:actions.select.title' | translate | async)!\"\n (onClick)=\"handleSelectClick()\" [disabled]=\"allowSelect() === false\">\n <!-- @if (selectionMode() === 'multiple' && selectedCount() > 0) {\n <ax-badge [text]=\"selectedCount().toString()\" color=\"accent1\"\n class=\"ax-absolute ax-end-[2px] ax-top-[2px]\"></ax-badge>\n } -->\n </ax-button>\n </ax-suffix>\n</ax-footer>\n", styles: ["axp-data-selector{display:flex;flex-direction:column;flex:1;min-height:0;height:100%;overflow:hidden}.ax-expand-handler{cursor:pointer;display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;margin-right:8px}.ax-expand-handler:hover{opacity:.8}.ax-expand-handler.ax-invisible{visibility:hidden}.ax-overflow-hidden{overflow:hidden}.ax-flex{display:flex}.ax-flex-col{flex-direction:column}.ax-gap-4{gap:1rem}.ax-p-4{padding:1rem}.ax-w-full{width:100%}.axp-data-selector{display:flex;flex-direction:column;flex:1;min-height:0;overflow:hidden}.axp-data-selector-content{display:flex;flex:1;min-height:0;overflow:hidden}.axp-data-selector-content.with-category-filter .axp-main-data-area{flex:1;min-width:0;min-height:0;overflow:hidden}.axp-data-selector .axp-category-filter-panel{display:flex;flex-direction:column;border-right:1px solid var(--border-color);padding:1rem;background:var(--surface-color);flex-shrink:0;min-height:0;min-width:0;overflow:hidden}.axp-data-selector .axp-category-filter-panel axp-category-tree{display:flex;flex:1;flex-direction:column;min-height:0;min-width:0;overflow:hidden}.axp-data-selector .axp-main-data-area{flex:1;min-width:0;min-height:0;overflow:hidden;padding:1rem;display:flex;flex-direction:column;gap:1rem}.axp-data-selector .axp-main-data-area ax-data-table{flex:1;min-height:0;height:100%;display:flex;flex-direction:column;overflow:hidden}.axp-data-selector .axp-main-data-area .ax-search-box{width:100%;flex-shrink:0}.ax-popup:has(axp-data-selector){display:flex;flex-direction:column;height:90vh;max-height:90vh;overflow:hidden}.ax-popup:has(axp-data-selector) .ax-popup-main-container{display:flex;flex:1 1 auto;flex-direction:column;min-height:0;overflow:hidden}.ax-popup:has(axp-data-selector) .ax-popup-body-container{display:flex;flex:1 1 auto;flex-direction:column;min-height:0;overflow:hidden!important}.ax-popup:has(axp-data-selector) .ax-popup-footer-container{flex-shrink:0}@media(min-width:320px)and (max-width:640px){.ax-popup.ax-popup-sm:has(axp-data-selector),.ax-popup.ax-popup-md:has(axp-data-selector),.ax-popup.ax-popup-lg:has(axp-data-selector){height:90vh!important;max-height:90vh!important}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXCommonModule }, { kind: "directive", type: i1$6.AXAutoFocusDirective, selector: "[axAutoFocus]", inputs: ["axAutoFocus", "axAutoFocusTime"] }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i1$2.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: AXFormModule }, { 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: "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: AXDropdownButtonModule }, { kind: "ngmodule", type: AXDataTableModule }, { kind: "component", type: i4$1.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: i4$1.AXRowSelectColumnComponent, selector: "ax-select-column", inputs: ["width", "caption", "fixed"] }, { kind: "component", type: i4$1.AXRowCommandColumnComponent, selector: "ax-command-column", inputs: ["width", "caption", "fixed", "footerTemplate", "items"], outputs: ["onItemClick"] }, { kind: "component", type: i4$1.AXRowDropdownCommandColumnComponent, selector: "ax-dropdown-command-column", inputs: ["width", "caption", "fixed", "footerTemplate", "emptyStateTemplate", "emptyStateText", "items"], outputs: ["onItemClick"] }, { kind: "ngmodule", type: AXSearchBoxModule }, { kind: "component", type: i5.AXSearchBoxComponent, selector: "ax-search-box", inputs: ["disabled", "readonly", "tabIndex", "placeholder", "value", "state", "name", "id", "look", "class", "delayTime", "type", "autoSearch"], outputs: ["valueChange", "stateChange", "onValueChanged", "onBlur", "onFocus", "readonlyChange", "disabledChange", "onKeyDown", "onKeyUp", "onKeyPress"] }, { kind: "ngmodule", type: AXPWidgetCoreModule }, { kind: "component", type: i3$3.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 }, { kind: "ngmodule", type: AXBadgeModule }, { kind: "component", type: AXPCategoryTreeComponent, selector: "axp-category-tree", inputs: ["dataSource", "config", "actions", "events"], outputs: ["nodeClick", "nodeSelect", "nodeCreate", "nodeUpdate", "nodeDelete", "searchChange", "collapseChange"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
2118
2118
|
}
|
|
2119
2119
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPDataSelectorComponent, decorators: [{
|
|
2120
2120
|
type: Component,
|
|
@@ -3817,6 +3817,97 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
|
|
|
3817
3817
|
args: [{ providedIn: 'root' }]
|
|
3818
3818
|
}] });
|
|
3819
3819
|
|
|
3820
|
+
//#region ---- Signature editor types ----
|
|
3821
|
+
//#endregion
|
|
3822
|
+
|
|
3823
|
+
//#region ---- Constants ----
|
|
3824
|
+
const SIGNATURE_WIDGET_NAME = 'signature';
|
|
3825
|
+
//#endregion
|
|
3826
|
+
//#region ---- Signature editor service ----
|
|
3827
|
+
/**
|
|
3828
|
+
* Opens the shared signature capture dialog (paint pad, Clear, and Save/Apply).
|
|
3829
|
+
* Clear resets the canvas; the primary action persists the current pad (empty removes the signature).
|
|
3830
|
+
*/
|
|
3831
|
+
class AXPSignatureEditorService {
|
|
3832
|
+
constructor() {
|
|
3833
|
+
//#region ---- Services & Dependencies ----
|
|
3834
|
+
this.layoutBuilder = inject(AXPLayoutBuilderService);
|
|
3835
|
+
}
|
|
3836
|
+
//#endregion
|
|
3837
|
+
//#region ---- Public API ----
|
|
3838
|
+
async open(options = {}) {
|
|
3839
|
+
const initialValue = options.value ?? null;
|
|
3840
|
+
const disabled = options.disabled ?? false;
|
|
3841
|
+
const ref = await this.layoutBuilder
|
|
3842
|
+
.create()
|
|
3843
|
+
.dialog((dialog) => {
|
|
3844
|
+
dialog
|
|
3845
|
+
.setTitle(options.title ?? '@platform-layout-widgets:widgets.signature.title')
|
|
3846
|
+
.setSize('sm')
|
|
3847
|
+
.setCloseButton(true)
|
|
3848
|
+
.setContext({ value: initialValue })
|
|
3849
|
+
.content((content) => {
|
|
3850
|
+
content
|
|
3851
|
+
.setDirection('column')
|
|
3852
|
+
.setGap('16px')
|
|
3853
|
+
.setAlignItems('stretch')
|
|
3854
|
+
.customWidget(SIGNATURE_WIDGET_NAME, {
|
|
3855
|
+
name: SIGNATURE_WIDGET_NAME,
|
|
3856
|
+
path: 'value',
|
|
3857
|
+
disabled,
|
|
3858
|
+
showOverlay: false,
|
|
3859
|
+
editMode: true,
|
|
3860
|
+
});
|
|
3861
|
+
})
|
|
3862
|
+
.setActions((actions) => {
|
|
3863
|
+
actions.cancel('@general:actions.cancel.title');
|
|
3864
|
+
actions.custom({
|
|
3865
|
+
title: '@general:actions.clear.title',
|
|
3866
|
+
icon: 'fa-light fa-eraser',
|
|
3867
|
+
disabled: '{{ !context.value }}',
|
|
3868
|
+
command: { name: 'widget:signature.clear' },
|
|
3869
|
+
position: 'prefix',
|
|
3870
|
+
});
|
|
3871
|
+
actions.submit(options.submitActionKey ?? '@general:actions.apply.title');
|
|
3872
|
+
});
|
|
3873
|
+
})
|
|
3874
|
+
.show();
|
|
3875
|
+
const action = this.resolveAction(ref.action());
|
|
3876
|
+
const context = ref.context() ?? {};
|
|
3877
|
+
if (action === 'apply') {
|
|
3878
|
+
const newValue = context.value;
|
|
3879
|
+
const value = this.resolveAppliedValue(newValue, initialValue);
|
|
3880
|
+
ref.close();
|
|
3881
|
+
return { action: 'apply', value };
|
|
3882
|
+
}
|
|
3883
|
+
ref.close();
|
|
3884
|
+
return { action: 'cancel', value: initialValue };
|
|
3885
|
+
}
|
|
3886
|
+
//#endregion
|
|
3887
|
+
//#region ---- Utility Methods ----
|
|
3888
|
+
resolveAction(action) {
|
|
3889
|
+
if (action === 'submit' || action === 'signature-apply') {
|
|
3890
|
+
return 'apply';
|
|
3891
|
+
}
|
|
3892
|
+
return 'cancel';
|
|
3893
|
+
}
|
|
3894
|
+
resolveAppliedValue(newValue, initialValue) {
|
|
3895
|
+
if (newValue === null || newValue === '') {
|
|
3896
|
+
return null;
|
|
3897
|
+
}
|
|
3898
|
+
if (isString(newValue)) {
|
|
3899
|
+
return newValue;
|
|
3900
|
+
}
|
|
3901
|
+
return initialValue;
|
|
3902
|
+
}
|
|
3903
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPSignatureEditorService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
3904
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPSignatureEditorService, providedIn: 'root' }); }
|
|
3905
|
+
}
|
|
3906
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPSignatureEditorService, decorators: [{
|
|
3907
|
+
type: Injectable,
|
|
3908
|
+
args: [{ providedIn: 'root' }]
|
|
3909
|
+
}] });
|
|
3910
|
+
|
|
3820
3911
|
/**
|
|
3821
3912
|
* Copies {@link AXPWidgetProperty.validations} onto `schema.interface.options` so the property
|
|
3822
3913
|
* viewer binds a stable widget node.
|
|
@@ -8683,10 +8774,14 @@ class AXPUserAvatarComponent {
|
|
|
8683
8774
|
this.size = input(40, ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
8684
8775
|
this.userId = input('', ...(ngDevMode ? [{ debugName: "userId" }] : /* istanbul ignore next */ []));
|
|
8685
8776
|
this.src = signal('', ...(ngDevMode ? [{ debugName: "src" }] : /* istanbul ignore next */ []));
|
|
8777
|
+
/** Username from the user record. */
|
|
8686
8778
|
this.userName = computed(() => this.userInfo()?.username || '', ...(ngDevMode ? [{ debugName: "userName" }] : /* istanbul ignore next */ []));
|
|
8687
|
-
|
|
8688
|
-
this.
|
|
8689
|
-
|
|
8779
|
+
/** Given name segment used for display and templates. */
|
|
8780
|
+
this.firstName = computed(() => this.userInfo()?.firstName?.trim() || '', ...(ngDevMode ? [{ debugName: "firstName" }] : /* istanbul ignore next */ []));
|
|
8781
|
+
/** Family name segment used for display and templates. */
|
|
8782
|
+
this.lastName = computed(() => this.userInfo()?.lastName?.trim() || '', ...(ngDevMode ? [{ debugName: "lastName" }] : /* istanbul ignore next */ []));
|
|
8783
|
+
/** Full display name used for avatar initials and external templates. */
|
|
8784
|
+
this.title = computed(() => this.resolveDisplayName(this.userInfo()), ...(ngDevMode ? [{ debugName: "title" }] : /* istanbul ignore next */ []));
|
|
8690
8785
|
this.isOnline = computed(() => this.userInfo()?.status === 'online', ...(ngDevMode ? [{ debugName: "isOnline" }] : /* istanbul ignore next */ []));
|
|
8691
8786
|
}
|
|
8692
8787
|
ngOnInit() {
|
|
@@ -8723,6 +8818,16 @@ class AXPUserAvatarComponent {
|
|
|
8723
8818
|
}
|
|
8724
8819
|
this.src.set('');
|
|
8725
8820
|
}
|
|
8821
|
+
resolveDisplayName(info) {
|
|
8822
|
+
if (!info) {
|
|
8823
|
+
return '';
|
|
8824
|
+
}
|
|
8825
|
+
const parts = [info.firstName, info.lastName].map((part) => part?.trim()).filter(Boolean);
|
|
8826
|
+
if (parts.length > 0) {
|
|
8827
|
+
return parts.join(' ');
|
|
8828
|
+
}
|
|
8829
|
+
return info.username.trim();
|
|
8830
|
+
}
|
|
8726
8831
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPUserAvatarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
8727
8832
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.9", type: AXPUserAvatarComponent, isStandalone: true, selector: "axp-user-avatar", inputs: { size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, userId: { classPropertyName: "userId", publicName: "userId", isSignal: true, isRequired: false, transformFunction: null } }, providers: [], ngImport: i0, template: "<axp-avatar [size]=\"size()\" [src]=\"src()\" [fullName]=\"title()\" />\n", styles: [""], dependencies: [{ kind: "component", type: AXPAvatarComponent, selector: "axp-avatar", inputs: ["size", "src", "fullName", "fallbackText", "placeholder"] }, { kind: "ngmodule", type: AXBadgeModule }, { kind: "ngmodule", type: AXSkeletonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
8728
8833
|
}
|
|
@@ -8731,6 +8836,78 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
|
|
|
8731
8836
|
args: [{ selector: 'axp-user-avatar', imports: [AXPAvatarComponent, AXBadgeModule, AXSkeletonModule], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [], template: "<axp-avatar [size]=\"size()\" [src]=\"src()\" [fullName]=\"title()\" />\n" }]
|
|
8732
8837
|
}], propDecorators: { size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], userId: [{ type: i0.Input, args: [{ isSignal: true, alias: "userId", required: false }] }] } });
|
|
8733
8838
|
|
|
8839
|
+
//#region ---- Imports ----
|
|
8840
|
+
//#endregion
|
|
8841
|
+
//#region ---- Constants ----
|
|
8842
|
+
const DIGIT_KEYS = [
|
|
8843
|
+
{ digit: '1' },
|
|
8844
|
+
{ digit: '2', letters: 'ABC' },
|
|
8845
|
+
{ digit: '3', letters: 'DEF' },
|
|
8846
|
+
{ digit: '4', letters: 'GHI' },
|
|
8847
|
+
{ digit: '5', letters: 'JKL' },
|
|
8848
|
+
{ digit: '6', letters: 'MNO' },
|
|
8849
|
+
{ digit: '7', letters: 'PQRS' },
|
|
8850
|
+
{ digit: '8', letters: 'TUV' },
|
|
8851
|
+
{ digit: '9', letters: 'WXYZ' },
|
|
8852
|
+
];
|
|
8853
|
+
const ZERO_KEY = { digit: '0' };
|
|
8854
|
+
//#endregion
|
|
8855
|
+
//#region ---- Virtual keypad component ----
|
|
8856
|
+
/**
|
|
8857
|
+
* Touch-friendly numeric keypad for PIN and code entry on mobile layouts.
|
|
8858
|
+
*/
|
|
8859
|
+
class AXPVirtualKeypadComponent {
|
|
8860
|
+
constructor() {
|
|
8861
|
+
//#region ---- Inputs ----
|
|
8862
|
+
/** Disables all keypad buttons. */
|
|
8863
|
+
this.disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
8864
|
+
/** Shows phone-style letter hints under digits 2–9. */
|
|
8865
|
+
this.showLetterHints = input(true, ...(ngDevMode ? [{ debugName: "showLetterHints" }] : /* istanbul ignore next */ []));
|
|
8866
|
+
/** Visual style of keypad keys. */
|
|
8867
|
+
this.look = input('solid', ...(ngDevMode ? [{ debugName: "look" }] : /* istanbul ignore next */ []));
|
|
8868
|
+
//#endregion
|
|
8869
|
+
//#region ---- Outputs ----
|
|
8870
|
+
/** Emitted when a digit key is pressed. */
|
|
8871
|
+
this.digitPress = output();
|
|
8872
|
+
/** Emitted when the backspace key is pressed. */
|
|
8873
|
+
this.backspace = output();
|
|
8874
|
+
/** Emitted for either digit or backspace actions. */
|
|
8875
|
+
this.keyPress = output();
|
|
8876
|
+
//#endregion
|
|
8877
|
+
//#region ---- Template data ----
|
|
8878
|
+
this.digitKeys = DIGIT_KEYS;
|
|
8879
|
+
this.zeroKey = ZERO_KEY;
|
|
8880
|
+
}
|
|
8881
|
+
//#endregion
|
|
8882
|
+
//#region ---- UI handlers ----
|
|
8883
|
+
onDigitPress(digit) {
|
|
8884
|
+
if (this.disabled()) {
|
|
8885
|
+
return;
|
|
8886
|
+
}
|
|
8887
|
+
const value = Number(digit);
|
|
8888
|
+
this.digitPress.emit(value);
|
|
8889
|
+
this.keyPress.emit({ action: 'digit', digit: value });
|
|
8890
|
+
}
|
|
8891
|
+
onBackspace() {
|
|
8892
|
+
if (this.disabled()) {
|
|
8893
|
+
return;
|
|
8894
|
+
}
|
|
8895
|
+
this.backspace.emit();
|
|
8896
|
+
this.keyPress.emit({ action: 'backspace' });
|
|
8897
|
+
}
|
|
8898
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPVirtualKeypadComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
8899
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXPVirtualKeypadComponent, isStandalone: true, selector: "axp-virtual-keypad", inputs: { disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, showLetterHints: { classPropertyName: "showLetterHints", publicName: "showLetterHints", isSignal: true, isRequired: false, transformFunction: null }, look: { classPropertyName: "look", publicName: "look", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { digitPress: "digitPress", backspace: "backspace", keyPress: "keyPress" }, host: { classAttribute: "axp-virtual-keypad-host" }, ngImport: i0, template: "<div\n class=\"axp-virtual-keypad\"\n role=\"group\"\n [attr.data-look]=\"look()\"\n [attr.aria-label]=\"'@general:virtual-keypad.aria-label' | translate | async\"\n>\n <div class=\"__grid\">\n @for (key of digitKeys; track key.digit) {\n <button\n type=\"button\"\n class=\"__key\"\n [disabled]=\"disabled()\"\n [attr.aria-label]=\"key.digit\"\n (click)=\"onDigitPress(key.digit)\"\n >\n <span class=\"__digit\">{{ key.digit }}</span>\n @if (showLetterHints() && key.letters) {\n <span class=\"__letters\" aria-hidden=\"true\">{{ key.letters }}</span>\n }\n </button>\n }\n\n <span class=\"__spacer\" aria-hidden=\"true\"></span>\n\n <button\n type=\"button\"\n class=\"__key\"\n [disabled]=\"disabled()\"\n aria-label=\"0\"\n (click)=\"onDigitPress(zeroKey.digit)\"\n >\n <span class=\"__digit\">{{ zeroKey.digit }}</span>\n </button>\n\n <button\n type=\"button\"\n class=\"__key __key--action\"\n [disabled]=\"disabled()\"\n [attr.aria-label]=\"'@general:virtual-keypad.backspace' | translate | async\"\n (click)=\"onBackspace()\"\n >\n <i class=\"fa-light fa-delete-left\" aria-hidden=\"true\"></i>\n </button>\n </div>\n</div>\n", styles: [".axp-virtual-keypad-host{display:block;width:100%}.axp-virtual-keypad{--axp-keypad-key-size: 4.25rem;--axp-keypad-gap: .75rem;display:flex;width:100%;-webkit-user-select:none;user-select:none;justify-content:center}.axp-virtual-keypad .__grid{margin-left:auto;margin-right:auto;display:grid;width:fit-content;justify-items:center;grid-template-columns:repeat(3,var(--axp-keypad-key-size));gap:var(--axp-keypad-gap)}.axp-virtual-keypad .__spacer{display:block;width:var(--axp-keypad-key-size);height:var(--axp-keypad-key-size)}.axp-virtual-keypad .__key{display:flex;flex-direction:column;align-items:center;justify-content:center;cursor:pointer;border-radius:9999px;border-width:0px;background-color:transparent;--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-on-lightest-surface),var(--tw-text-opacity, 1));transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.1s;animation-duration:.1s;width:var(--axp-keypad-key-size);height:var(--axp-keypad-key-size)}.axp-virtual-keypad .__key:active:not(:disabled){transform:scale(.96)}.axp-virtual-keypad .__key:disabled{cursor:not-allowed;opacity:.5}.axp-virtual-keypad .__key:focus-visible{outline:2px solid rgb(var(--ax-sys-color-primary-600));outline-offset:2px}.axp-virtual-keypad .__digit{font-size:1.875rem;line-height:2.25rem;font-weight:500;--tw-numeric-spacing: tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction);line-height:1}.axp-virtual-keypad .__letters{margin-top:.25rem;font-size:.6875rem;font-weight:600;line-height:1;letter-spacing:.14em;--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-on-lighter-surface),var(--tw-text-opacity, 1));opacity:.6}.axp-virtual-keypad .__key--action{font-size:1.125rem;line-height:1.75rem}.axp-virtual-keypad .__key--action i{font-size:1.5rem;line-height:2rem}.axp-virtual-keypad[data-look=solid] .__key{--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface))}.axp-virtual-keypad[data-look=solid] .__key:active:not(:disabled){background-color:rgb(var(--ax-sys-color-lighter-surface));color:rgb(var(--ax-sys-color-on-lighter-surface));border-color:rgb(var(--ax-sys-color-border-lighter-surface))}.axp-virtual-keypad[data-look=blank] .__key{--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.axp-virtual-keypad[data-look=blank] .__key:active:not(:disabled){background-color:rgb(var(--ax-sys-color-lighter-surface));color:rgb(var(--ax-sys-color-on-lighter-surface));border-color:rgb(var(--ax-sys-color-border-lighter-surface))}\n"], dependencies: [{ kind: "ngmodule", type: AXTranslationModule }, { kind: "pipe", type: i3.AXTranslatorPipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
8900
|
+
}
|
|
8901
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPVirtualKeypadComponent, decorators: [{
|
|
8902
|
+
type: Component,
|
|
8903
|
+
args: [{ selector: 'axp-virtual-keypad', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [AXTranslationModule, AsyncPipe], host: {
|
|
8904
|
+
class: 'axp-virtual-keypad-host',
|
|
8905
|
+
}, template: "<div\n class=\"axp-virtual-keypad\"\n role=\"group\"\n [attr.data-look]=\"look()\"\n [attr.aria-label]=\"'@general:virtual-keypad.aria-label' | translate | async\"\n>\n <div class=\"__grid\">\n @for (key of digitKeys; track key.digit) {\n <button\n type=\"button\"\n class=\"__key\"\n [disabled]=\"disabled()\"\n [attr.aria-label]=\"key.digit\"\n (click)=\"onDigitPress(key.digit)\"\n >\n <span class=\"__digit\">{{ key.digit }}</span>\n @if (showLetterHints() && key.letters) {\n <span class=\"__letters\" aria-hidden=\"true\">{{ key.letters }}</span>\n }\n </button>\n }\n\n <span class=\"__spacer\" aria-hidden=\"true\"></span>\n\n <button\n type=\"button\"\n class=\"__key\"\n [disabled]=\"disabled()\"\n aria-label=\"0\"\n (click)=\"onDigitPress(zeroKey.digit)\"\n >\n <span class=\"__digit\">{{ zeroKey.digit }}</span>\n </button>\n\n <button\n type=\"button\"\n class=\"__key __key--action\"\n [disabled]=\"disabled()\"\n [attr.aria-label]=\"'@general:virtual-keypad.backspace' | translate | async\"\n (click)=\"onBackspace()\"\n >\n <i class=\"fa-light fa-delete-left\" aria-hidden=\"true\"></i>\n </button>\n </div>\n</div>\n", styles: [".axp-virtual-keypad-host{display:block;width:100%}.axp-virtual-keypad{--axp-keypad-key-size: 4.25rem;--axp-keypad-gap: .75rem;display:flex;width:100%;-webkit-user-select:none;user-select:none;justify-content:center}.axp-virtual-keypad .__grid{margin-left:auto;margin-right:auto;display:grid;width:fit-content;justify-items:center;grid-template-columns:repeat(3,var(--axp-keypad-key-size));gap:var(--axp-keypad-gap)}.axp-virtual-keypad .__spacer{display:block;width:var(--axp-keypad-key-size);height:var(--axp-keypad-key-size)}.axp-virtual-keypad .__key{display:flex;flex-direction:column;align-items:center;justify-content:center;cursor:pointer;border-radius:9999px;border-width:0px;background-color:transparent;--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-on-lightest-surface),var(--tw-text-opacity, 1));transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.1s;animation-duration:.1s;width:var(--axp-keypad-key-size);height:var(--axp-keypad-key-size)}.axp-virtual-keypad .__key:active:not(:disabled){transform:scale(.96)}.axp-virtual-keypad .__key:disabled{cursor:not-allowed;opacity:.5}.axp-virtual-keypad .__key:focus-visible{outline:2px solid rgb(var(--ax-sys-color-primary-600));outline-offset:2px}.axp-virtual-keypad .__digit{font-size:1.875rem;line-height:2.25rem;font-weight:500;--tw-numeric-spacing: tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction);line-height:1}.axp-virtual-keypad .__letters{margin-top:.25rem;font-size:.6875rem;font-weight:600;line-height:1;letter-spacing:.14em;--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-on-lighter-surface),var(--tw-text-opacity, 1));opacity:.6}.axp-virtual-keypad .__key--action{font-size:1.125rem;line-height:1.75rem}.axp-virtual-keypad .__key--action i{font-size:1.5rem;line-height:2rem}.axp-virtual-keypad[data-look=solid] .__key{--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface))}.axp-virtual-keypad[data-look=solid] .__key:active:not(:disabled){background-color:rgb(var(--ax-sys-color-lighter-surface));color:rgb(var(--ax-sys-color-on-lighter-surface));border-color:rgb(var(--ax-sys-color-border-lighter-surface))}.axp-virtual-keypad[data-look=blank] .__key{--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.axp-virtual-keypad[data-look=blank] .__key:active:not(:disabled){background-color:rgb(var(--ax-sys-color-lighter-surface));color:rgb(var(--ax-sys-color-on-lighter-surface));border-color:rgb(var(--ax-sys-color-border-lighter-surface))}\n"] }]
|
|
8906
|
+
}], propDecorators: { disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], showLetterHints: [{ type: i0.Input, args: [{ isSignal: true, alias: "showLetterHints", required: false }] }], look: [{ type: i0.Input, args: [{ isSignal: true, alias: "look", required: false }] }], digitPress: [{ type: i0.Output, args: ["digitPress"] }], backspace: [{ type: i0.Output, args: ["backspace"] }], keyPress: [{ type: i0.Output, args: ["keyPress"] }] } });
|
|
8907
|
+
|
|
8908
|
+
//#region ---- Virtual keypad types ----
|
|
8909
|
+
//#endregion
|
|
8910
|
+
|
|
8734
8911
|
class AXPQueryViewsComponent {
|
|
8735
8912
|
constructor() {
|
|
8736
8913
|
this.popupService = inject(AXPopupService);
|
|
@@ -9403,5 +9580,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
|
|
|
9403
9580
|
* Generated bundle index. Do not edit.
|
|
9404
9581
|
*/
|
|
9405
9582
|
|
|
9406
|
-
export { AXPActivityLogComponent, AXPAvatarComponent, AXPCategoryTreeComponent, AXPColorPalettePickerComponent, AXPColumnItemListComponent, AXPCompareViewComponent, AXPConditionBuilderComponent, AXPConditionBuilderConditionComponent, AXPDataSelectorComponent, AXPDataSelectorService, AXPDragDropListComponent, AXPExpressionFieldDefinitions, AXPImageEditorPopupComponent, AXPImageEditorService, AXPItemConfiguratorComponent, AXPLayoutFloatingZoomBarComponent, AXPLayoutSideDetailPanelComponent, AXPLayoutSideDetailPanelSectionDirective, AXPLogoComponent, AXPMarkdownTemplateDirective, AXPMarkdownViewerComponent, AXPMenuBadgeHelper, AXPMenuCustomizerComponent, AXPMenuCustomizerService, AXPOutcomeResultsViewerComponent, AXPPageComponentRegistryService, AXPPreloadFiltersComponent, AXPPropertyViewerComponent, AXPPropertyViewerPopupComponent, AXPPropertyViewerService, AXPQueryColumnsComponent, AXPQueryFiltersComponent, AXPQuerySortsComponent, AXPQueryViewsComponent, AXPRepeaterRowsLayoutComponent, AXPResourceAppointmentBoardProvider, AXPResourceAppointmentComponent, AXPResourceAppointmentService, AXPSectionItemsBuilderComponent, AXPSpreadsheetComponent, AXPStandardSectionItemsBuilderComponent, AXPStateMessageComponent, AXPStopwatchComponent, AXPTableColumnsEditorComponent, AXPTableColumnsEditorPopupComponent, AXPTableColumnsEditorService, AXPTableDataEditorComponent, AXPTableDataEditorPopupComponent, AXPTableDataEditorService, AXPTaskBadgeDirective, AXPTaskBadgeProvider, AXPTaskBadgeService, AXPTemplateViewerComponent, AXPTemplateViewerService, AXPThemeLayoutActionsComponent, AXPThemeLayoutBlockComponent, AXPThemeLayoutContainerComponent, AXPThemeLayoutEndSideComponent, AXPThemeLayoutFooterComponent, AXPThemeLayoutHeaderComponent, AXPThemeLayoutListComponent, AXPThemeLayoutListItemComponent, AXPThemeLayoutListItemsGroupComponent, AXPThemeLayoutPageHeaderComponent, AXPThemeLayoutPagePrimaryActionsComponent, AXPThemeLayoutPageSecondaryActionsComponent, AXPThemeLayoutSectionComponent, AXPThemeLayoutStartSideComponent, AXPThemeLayoutToolbarComponent, AXPUserAvatarComponent, AXPUserAvatarService, AXPWidgetFieldConfiguratorComponent, AXPWidgetItemComponent, AXPWidgetPropertyViewerComponent, AXPWidgetPropertyViewerPopupComponent, AXPWidgetPropertyViewerService, AXP_EXPRESSION_LOGIC_DEFINITIONS, AXP_EXPRESSION_OPERATION_DEFINITIONS, AXP_MENU_CUSTOMIZER_SERVICE, AXP_PAGE_COMPONENT_PROVIDER, AXP_RESOURCE_APPOINTMENT_PROVIDER, AXP_TASK_BADGE_PROVIDERS, AXP_USER_AVATAR_PROVIDER, STANDARD_SECTION_ITEMS_SECTION_TABS, buildPropertyViewerInitialContextFromProperties, buildPropertyViewerTabsFromProperties, buildTableColumnsEditorLayout, getFieldDefinitions, getLogicDefinition, getOperationDefinition, isPropertyBindingExpressionFormValue, preparePropertyForViewer, preparePropertyViewerTabs, registerFieldDefinitions, withValidationsOnEditorNode };
|
|
9583
|
+
export { AXPActivityLogComponent, AXPAvatarComponent, AXPCategoryTreeComponent, AXPColorPalettePickerComponent, AXPColumnItemListComponent, AXPCompareViewComponent, AXPConditionBuilderComponent, AXPConditionBuilderConditionComponent, AXPDataSelectorComponent, AXPDataSelectorService, AXPDragDropListComponent, AXPExpressionFieldDefinitions, AXPImageEditorPopupComponent, AXPImageEditorService, AXPItemConfiguratorComponent, AXPLayoutFloatingZoomBarComponent, AXPLayoutSideDetailPanelComponent, AXPLayoutSideDetailPanelSectionDirective, AXPLogoComponent, AXPMarkdownTemplateDirective, AXPMarkdownViewerComponent, AXPMenuBadgeHelper, AXPMenuCustomizerComponent, AXPMenuCustomizerService, AXPOutcomeResultsViewerComponent, AXPPageComponentRegistryService, AXPPreloadFiltersComponent, AXPPropertyViewerComponent, AXPPropertyViewerPopupComponent, AXPPropertyViewerService, AXPQueryColumnsComponent, AXPQueryFiltersComponent, AXPQuerySortsComponent, AXPQueryViewsComponent, AXPRepeaterRowsLayoutComponent, AXPResourceAppointmentBoardProvider, AXPResourceAppointmentComponent, AXPResourceAppointmentService, AXPSectionItemsBuilderComponent, AXPSignatureEditorService, AXPSpreadsheetComponent, AXPStandardSectionItemsBuilderComponent, AXPStateMessageComponent, AXPStopwatchComponent, AXPTableColumnsEditorComponent, AXPTableColumnsEditorPopupComponent, AXPTableColumnsEditorService, AXPTableDataEditorComponent, AXPTableDataEditorPopupComponent, AXPTableDataEditorService, AXPTaskBadgeDirective, AXPTaskBadgeProvider, AXPTaskBadgeService, AXPTemplateViewerComponent, AXPTemplateViewerService, AXPThemeLayoutActionsComponent, AXPThemeLayoutBlockComponent, AXPThemeLayoutContainerComponent, AXPThemeLayoutEndSideComponent, AXPThemeLayoutFooterComponent, AXPThemeLayoutHeaderComponent, AXPThemeLayoutListComponent, AXPThemeLayoutListItemComponent, AXPThemeLayoutListItemsGroupComponent, AXPThemeLayoutPageHeaderComponent, AXPThemeLayoutPagePrimaryActionsComponent, AXPThemeLayoutPageSecondaryActionsComponent, AXPThemeLayoutSectionComponent, AXPThemeLayoutStartSideComponent, AXPThemeLayoutToolbarComponent, AXPUserAvatarComponent, AXPUserAvatarService, AXPVirtualKeypadComponent, AXPWidgetFieldConfiguratorComponent, AXPWidgetItemComponent, AXPWidgetPropertyViewerComponent, AXPWidgetPropertyViewerPopupComponent, AXPWidgetPropertyViewerService, AXP_EXPRESSION_LOGIC_DEFINITIONS, AXP_EXPRESSION_OPERATION_DEFINITIONS, AXP_MENU_CUSTOMIZER_SERVICE, AXP_PAGE_COMPONENT_PROVIDER, AXP_RESOURCE_APPOINTMENT_PROVIDER, AXP_TASK_BADGE_PROVIDERS, AXP_USER_AVATAR_PROVIDER, STANDARD_SECTION_ITEMS_SECTION_TABS, buildPropertyViewerInitialContextFromProperties, buildPropertyViewerTabsFromProperties, buildTableColumnsEditorLayout, getFieldDefinitions, getLogicDefinition, getOperationDefinition, isPropertyBindingExpressionFormValue, preparePropertyForViewer, preparePropertyViewerTabs, registerFieldDefinitions, withValidationsOnEditorNode };
|
|
9407
9584
|
//# sourceMappingURL=acorex-platform-layout-components.mjs.map
|