@acorex/platform 21.0.0-next.37 → 21.0.0-next.39
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/fesm2022/acorex-platform-common.mjs +19 -1
- package/fesm2022/acorex-platform-common.mjs.map +1 -1
- package/fesm2022/acorex-platform-core.mjs +11 -172
- package/fesm2022/acorex-platform-core.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-builder.mjs +7 -8
- package/fesm2022/acorex-platform-layout-builder.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-components.mjs +39 -29
- package/fesm2022/acorex-platform-layout-components.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-designer.mjs +8 -9
- package/fesm2022/acorex-platform-layout-designer.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-entity.mjs +468 -255
- package/fesm2022/acorex-platform-layout-entity.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-views.mjs +171 -86
- package/fesm2022/acorex-platform-layout-views.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-widget-core.mjs +36 -13
- package/fesm2022/acorex-platform-layout-widget-core.mjs.map +1 -1
- package/fesm2022/{acorex-platform-layout-widgets-file-list-popup.component-9uCkMxcc.mjs → acorex-platform-layout-widgets-file-list-popup.component-CDYAGBku.mjs} +5 -60
- package/fesm2022/acorex-platform-layout-widgets-file-list-popup.component-CDYAGBku.mjs.map +1 -0
- package/fesm2022/acorex-platform-layout-widgets.mjs +101 -128
- package/fesm2022/acorex-platform-layout-widgets.mjs.map +1 -1
- package/fesm2022/acorex-platform-themes-default.mjs +16 -4
- package/fesm2022/acorex-platform-themes-default.mjs.map +1 -1
- package/fesm2022/acorex-platform-workflow.mjs +25 -5
- package/fesm2022/acorex-platform-workflow.mjs.map +1 -1
- package/package.json +1 -1
- package/types/acorex-platform-common.d.ts +11 -6
- package/types/acorex-platform-core.d.ts +56 -101
- package/types/acorex-platform-layout-builder.d.ts +0 -1
- package/types/acorex-platform-layout-components.d.ts +4 -3
- package/types/acorex-platform-layout-designer.d.ts +1 -1
- package/types/acorex-platform-layout-entity.d.ts +36 -30
- package/types/acorex-platform-layout-views.d.ts +31 -29
- package/types/acorex-platform-layout-widget-core.d.ts +30 -14
- package/types/acorex-platform-layout-widgets.d.ts +17 -11
- package/types/acorex-platform-themes-default.d.ts +1 -0
- package/types/acorex-platform-workflow.d.ts +28 -51
- package/fesm2022/acorex-platform-layout-widgets-file-list-popup.component-9uCkMxcc.mjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acorex-platform-layout-components.mjs","sources":["../../../../libs/platform/layout/components/src/lib/state-message/state-message.component.ts","../../../../libs/platform/layout/components/src/lib/state-message/state-message.component.html","../../../../libs/platform/layout/components/src/lib/activity-log/activity-log.component.ts","../../../../libs/platform/layout/components/src/lib/activity-log/activity-log.component.html","../../../../libs/platform/layout/components/src/lib/badge/task-badge.type.ts","../../../../libs/platform/layout/components/src/lib/badge/task-badge.service.ts","../../../../libs/platform/layout/components/src/lib/badge/badge.directive.ts","../../../../libs/platform/layout/components/src/lib/badge/badge-helper.ts","../../../../libs/platform/layout/components/src/lib/blocks/layout-actions.component.ts","../../../../libs/platform/layout/components/src/lib/blocks/layout-blocks.component.ts","../../../../libs/platform/layout/components/src/lib/blocks/layout-footer.component.ts","../../../../libs/platform/layout/components/src/lib/blocks/layout-header.component.ts","../../../../libs/platform/layout/components/src/lib/blocks/layout-list.component.ts","../../../../libs/platform/layout/components/src/lib/blocks/layout-section.component.ts","../../../../libs/platform/layout/components/src/lib/blocks/layout-side.component.ts","../../../../libs/platform/layout/components/src/lib/blocks/layout-tool-bar.component.ts","../../../../libs/platform/layout/components/src/lib/blocks/layout-container.component.ts","../../../../libs/platform/layout/components/src/lib/category-tree/category-tree.component.ts","../../../../libs/platform/layout/components/src/lib/category-tree/category-tree.component.html","../../../../libs/platform/layout/components/src/lib/category-tree/category-tree.types.ts","../../../../libs/platform/layout/components/src/lib/color-palette-picker/color-palette-picker.component.ts","../../../../libs/platform/layout/components/src/lib/color-palette-picker/color-palette-picker.component.html","../../../../libs/platform/layout/components/src/lib/column-item-list/column-item-list.ts","../../../../libs/platform/layout/components/src/lib/columns/query-columns.component.ts","../../../../libs/platform/layout/components/src/lib/columns/query-columns.component.html","../../../../libs/platform/layout/components/src/lib/compare-view/compare-view.component.ts","../../../../libs/platform/layout/components/src/lib/compare-view/compare-view.component.html","../../../../libs/platform/layout/components/src/lib/data-selector/data-selector.component.ts","../../../../libs/platform/layout/components/src/lib/data-selector/data-selector.component.html","../../../../libs/platform/layout/components/src/lib/data-selector/data-selector.service.ts","../../../../libs/platform/layout/components/src/lib/page-component-registry/page-component-registry.token.ts","../../../../libs/platform/layout/components/src/lib/page-component-registry/page-component-registry.service.ts","../../../../libs/platform/layout/components/src/lib/page-component-registry/page-component-registry.types.ts","../../../../libs/platform/layout/components/src/lib/drag-drop-list/drag-drop-list.component.ts","../../../../libs/platform/layout/components/src/lib/drag-drop-list/drag-drop-list.component.html","../../../../libs/platform/layout/components/src/lib/expression-builders/expression-builder.types.ts","../../../../libs/platform/layout/components/src/lib/expression-builders/field.definitions.ts","../../../../libs/platform/layout/components/src/lib/expression-builders/logic.definitions.ts","../../../../libs/platform/layout/components/src/lib/expression-builders/operation.definitions.ts","../../../../libs/platform/layout/components/src/lib/expression-builders/condition-builder/condition-builder-condition.component.ts","../../../../libs/platform/layout/components/src/lib/expression-builders/condition-builder/condition-builder-condition.component.html","../../../../libs/platform/layout/components/src/lib/expression-builders/condition-builder/condition-builder.component.ts","../../../../libs/platform/layout/components/src/lib/expression-builders/condition-builder/condition-builder.component.html","../../../../libs/platform/layout/components/src/lib/expression-builders/index.ts","../../../../libs/platform/layout/components/src/lib/filters/query-filters.component.ts","../../../../libs/platform/layout/components/src/lib/filters/query-filters.component.html","../../../../libs/platform/layout/components/src/lib/filters/preload/preload-filters.component.ts","../../../../libs/platform/layout/components/src/lib/filters/preload/preload-filters.component.html","../../../../libs/platform/layout/components/src/lib/image-editor/image-editor-popup.component.ts","../../../../libs/platform/layout/components/src/lib/image-editor/image-editor.service.ts","../../../../libs/platform/layout/components/src/lib/logo/logo.component.ts","../../../../libs/platform/layout/components/src/lib/logo/logo.component.html","../../../../libs/platform/layout/components/src/lib/menu-customizer/menu-customizer.types.ts","../../../../libs/platform/layout/components/src/lib/menu-customizer/menu-customizer.component.ts","../../../../libs/platform/layout/components/src/lib/menu-customizer/menu-customizer.component.html","../../../../libs/platform/layout/components/src/lib/property-viewer/property-viewer-tab-pipeline.ts","../../../../libs/platform/layout/components/src/lib/property-viewer/property-viewer-binding.util.ts","../../../../libs/platform/layout/components/src/lib/property-viewer/property-viewer.component.ts","../../../../libs/platform/layout/components/src/lib/property-viewer/property-viewer.component.html","../../../../libs/platform/layout/components/src/lib/property-viewer/property-viewer-popup.component.ts","../../../../libs/platform/layout/components/src/lib/property-viewer/property-viewer.service.ts","../../../../libs/platform/layout/components/src/lib/repeater-rows-layout/repeater-rows-layout.component.ts","../../../../libs/platform/layout/components/src/lib/repeater-rows-layout/repeater-rows-layout.component.html","../../../../libs/platform/layout/components/src/lib/sorts/query-sorts.component.ts","../../../../libs/platform/layout/components/src/lib/sorts/query-sorts.component.html","../../../../libs/platform/layout/components/src/lib/spreadsheet/spreadsheet.component.ts","../../../../libs/platform/layout/components/src/lib/spreadsheet/spreadsheet.component.html","../../../../libs/platform/layout/components/src/lib/spreadsheet/spreadsheet.types.ts","../../../../libs/platform/layout/components/src/lib/stopwatch/stopwatch.component.ts","../../../../libs/platform/layout/components/src/lib/table-columns-editor/table-columns-editor-layout.ts","../../../../libs/platform/layout/components/src/lib/table-columns-editor/table-columns-editor.component.ts","../../../../libs/platform/layout/components/src/lib/table-columns-editor/table-columns-editor-popup.component.ts","../../../../libs/platform/layout/components/src/lib/table-columns-editor/table-columns-editor.service.ts","../../../../libs/platform/layout/components/src/lib/table-data-editor/table-data-editor.component.ts","../../../../libs/platform/layout/components/src/lib/table-data-editor/table-data-editor-popup.component.ts","../../../../libs/platform/layout/components/src/lib/table-data-editor/table-data-editor.service.ts","../../../../libs/platform/layout/components/src/lib/template-viewer/template-viewer.component.ts","../../../../libs/platform/layout/components/src/lib/template-viewer/template-viewer.service.ts","../../../../libs/platform/layout/components/src/lib/avatar/avatar.component.ts","../../../../libs/platform/layout/components/src/lib/avatar/avatar.component.html","../../../../libs/platform/layout/components/src/lib/user-avatar/user-avatar.provider.ts","../../../../libs/platform/layout/components/src/lib/user-avatar/user-avatar.service.ts","../../../../libs/platform/layout/components/src/lib/user-avatar/user-avatar.component.ts","../../../../libs/platform/layout/components/src/lib/user-avatar/user-avatar.component.html","../../../../libs/platform/layout/components/src/lib/views/query-views.component.ts","../../../../libs/platform/layout/components/src/lib/views/query-views.component.html","../../../../libs/platform/layout/components/src/lib/item-configurator/item-configurator.component.ts","../../../../libs/platform/layout/components/src/lib/item-configurator/item-configurator.component.html","../../../../libs/platform/layout/components/src/lib/widget-field-configurator/widget-field-configurator.component.ts","../../../../libs/platform/layout/components/src/lib/widget-item/widget-item.component.ts","../../../../libs/platform/layout/components/src/lib/widget-item/widget-item.component.html","../../../../libs/platform/layout/components/src/lib/widget-property-viewer/widget-property-viewer.component.ts","../../../../libs/platform/layout/components/src/lib/widget-property-viewer/widget-property-viewer.component.html","../../../../libs/platform/layout/components/src/lib/widget-property-viewer/widget-property-viewer-popup.component.ts","../../../../libs/platform/layout/components/src/lib/widget-property-viewer/widget-property-viewer.service.ts","../../../../libs/platform/layout/components/src/lib/resource-appointment/resource-appointment.types.ts","../../../../libs/platform/layout/components/src/lib/resource-appointment/resource-appointment.service.ts","../../../../libs/platform/layout/components/src/lib/resource-appointment/resource-appointment.component.ts","../../../../libs/platform/layout/components/src/lib/resource-appointment/resource-appointment.component.html","../../../../libs/platform/layout/components/src/lib/section-items-builder/section-items-builder.types.ts","../../../../libs/platform/layout/components/src/lib/section-items-builder/section-items-builder.component.ts","../../../../libs/platform/layout/components/src/lib/section-items-builder/section-items-builder.component.html","../../../../libs/platform/layout/components/src/lib/standard-section-items-builder/standard-section-edit.property-tabs.ts","../../../../libs/platform/layout/components/src/lib/standard-section-items-builder/standard-section-items-builder.component.ts","../../../../libs/platform/layout/components/src/lib/standard-section-items-builder/standard-section-items-builder.component.html","../../../../libs/platform/layout/components/src/acorex-platform-layout-components.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, input, ViewEncapsulation } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { AXTranslationModule } from '@acorex/core/translation';\n\n//#region ---- Types ----\n\nexport type StateMode = 'empty' | 'error' | 'loading' | 'warning' | 'info' | 'success';\n\n//#endregion\n\n//#region ---- Component Definition ----\n\n@Component({\n selector: 'axp-state-message',\n standalone: true,\n imports: [CommonModule, AXTranslationModule],\n templateUrl: './state-message.component.html',\n styleUrls: ['./state-message.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\n\n//#endregion\n\n//#region ---- Component Class ----\n\nexport class AXPStateMessageComponent {\n // Core properties\n mode = input<StateMode>('empty');\n icon = input<string>('');\n title = input<string>('');\n description = input<string>('');\n\n // Optional styling\n variant = input<'default' | 'compact' | 'minimal'>('default');\n}\n\n//#endregion\n","<div class=\"axp-state-message\" [attr.data-mode]=\"mode()\" [attr.data-variant]=\"variant()\">\n @if (icon()) {\n <div class=\"__icon\">\n <i [class]=\"icon()\"></i>\n </div>\n }\n <div class=\"__content\">\n @if (title()) {\n <h3 class=\"__title\">{{ title() | translate | async }}</h3>\n }\n @if (description()) {\n <p class=\"__description\">{{ description() | translate | async }}</p>\n }\n <div class=\"__actions\">\n <ng-content select=\"[slot=actions]\"></ng-content>\n </div>\n </div>\n</div>\n","import { AXButtonModule } from '@acorex/components/button';\nimport { AXCommonModule } from '@acorex/cdk/common';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\nimport { AXSkeletonModule } from '@acorex/components/skeleton';\nimport { AXFormatModule } from '@acorex/core/format';\nimport { AXPActivityLog, AXPSystemActionType, getSystemActions } from '@acorex/platform/core';\nimport { AXPWorkflowService } from '@acorex/platform/workflow';\nimport { AXPLayoutRendererComponent } from '@acorex/platform/layout/builder';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, input, inject, ViewEncapsulation, signal, effect } from '@angular/core';\nimport { AXAccordionCdkModule } from '@acorex/cdk/accordion';\nimport { AXTagModule } from '@acorex/components/tag';\nimport { AXPStateMessageComponent } from '../state-message';\n\n//#region ---- Component Definition ----\n\n@Component({\n selector: 'axp-activity-log',\n templateUrl: './activity-log.component.html',\n styleUrls: ['./activity-log.component.scss'],\n standalone: true,\n imports: [\n CommonModule,\n AXButtonModule,\n AXCommonModule,\n AXDecoratorModule,\n AXTranslationModule,\n AXSkeletonModule,\n AXFormatModule,\n AXTagModule,\n AXAccordionCdkModule,\n AXPStateMessageComponent,\n AXPLayoutRendererComponent,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None\n})\nexport class AXPActivityLogComponent {\n\n //#endregion\n\n //#region ---- Services & Dependencies ----\n\n private readonly translateService = inject(AXTranslationService);\n private readonly workflowService = inject(AXPWorkflowService);\n\n //#endregion\n\n //#region ---- Input Properties ----\n\n /**\n * Array of activity logs to display\n */\n activities = input<AXPActivityLog[]>([]);\n\n /**\n * Whether the component is in loading state\n */\n loading = input<boolean>(false);\n\n //#endregion\n\n //#region ---- Component Properties ----\n\n protected readonly i18nScope = 'activity-log';\n protected readonly Object = Object;\n\n /**\n * Set of expanded activity IDs\n */\n private expandedItems = signal<Set<string>>(new Set());\n\n /**\n * Flag to track if component has been initialized\n */\n private isInitialized = signal<boolean>(false);\n\n /**\n * Set of items that have been manually toggled (for animation control)\n */\n private manuallyToggledItems = signal<Set<string>>(new Set());\n\n //#endregion\n\n //#region ---- Constructor & Lifecycle ----\n\n constructor() {\n // Auto-expand top 5 items when activities change\n effect(() => {\n const activities = this.activities();\n const currentExpanded = this.expandedItems();\n const initialized = this.isInitialized();\n\n // Only auto-expand if not initialized and activities exist\n if (!initialized && activities.length > 0 && currentExpanded.size === 0) {\n const top5Ids = activities.slice(0, 5).map((activity: AXPActivityLog) => activity.id);\n this.expandedItems.set(new Set(top5Ids));\n this.isInitialized.set(true);\n }\n });\n }\n\n //#endregion\n\n //#region ---- Utility Methods ----\n\n /**\n * Gets the appropriate CSS class for the change type\n */\n protected getChangeClasses(changeType: AXPSystemActionType): { surface: string, text: string, icon: string } {\n const action = getSystemActions(changeType);\n return {\n surface: action?.color ? `ax-${action.color}-surface` : 'ax-muted-surface',\n text: action?.color ? `ax-text-${action.color}` : 'ax-text-muted',\n icon: action?.icon ? `${action.icon}` : 'fa-light fa-pen'\n };\n }\n\n /**\n * Checks if an activity item is expanded\n */\n protected isExpanded(activityId: string): boolean {\n return this.expandedItems().has(activityId);\n }\n\n /**\n * Toggles the expanded state of an activity item\n */\n protected toggleExpanded(activityId: string): void {\n const currentExpanded = new Set(this.expandedItems());\n const currentManuallyToggled = new Set(this.manuallyToggledItems());\n\n // Mark this item as manually toggled for animation purposes\n currentManuallyToggled.add(activityId);\n this.manuallyToggledItems.set(currentManuallyToggled);\n\n if (currentExpanded.has(activityId)) {\n currentExpanded.delete(activityId);\n } else {\n currentExpanded.add(activityId);\n }\n\n this.expandedItems.set(currentExpanded);\n }\n\n /**\n * Checks if an item should have expand/collapse animation\n */\n protected shouldAnimate(activityId: string): boolean {\n return this.manuallyToggledItems().has(activityId);\n }\n\n /**\n * Checks if an activity has expandable content (changes)\n */\n protected hasExpandableContent(activity: AXPActivityLog): boolean {\n return activity.changes && activity.changes.length > 0;\n }\n\n //#endregion\n\n //#region ---- Compare Methods ----\n\n /**\n * Handles the compare action for an activity\n */\n protected async handleCompare(activity: AXPActivityLog, event: Event): Promise<void> {\n event.stopPropagation(); // Prevent expanding/collapsing when clicking compare\n\n // Get the previous activity for comparison\n const currentIndex = this.activities().findIndex(a => a.id === activity.id);\n if (currentIndex <= 0) return; // No previous activity to compare with\n\n const previousActivity = this.activities()[currentIndex - 1];\n const ids = [\n previousActivity.id,\n activity.id\n ];\n\n // Execute the compare workflow\n await this.workflowService.execute('show-entity-record-versions-compare', {\n entity: activity.reference.type,\n data: {\n refId: activity.reference.id,\n refType: activity.reference.type,\n ids: ids\n }\n });\n }\n\n /**\n * Checks if an activity can be compared (has a previous version)\n */\n protected canCompare(activity: AXPActivityLog): boolean {\n const currentIndex = this.activities().findIndex(a => a.id === activity.id);\n return currentIndex > 0; // Can compare if not the first activity\n }\n\n //#endregion\n} ","<div class=\"axp-activity-log ax-accent2\" *translate=\"let t\">\n <!-- Activity Log Content -->\n <div class=\"__content\">\n <!-- Loading State -->\n @if (loading()) {\n <div class=\"__loading\">\n @for (item of [1, 2, 3, 4]; track $index) {\n <div class=\"__item\">\n <ax-skeleton [animated]=\"true\" class=\"__avatar\"></ax-skeleton>\n <div class=\"__content\">\n <ax-skeleton [animated]=\"true\" class=\"__title\"></ax-skeleton>\n <ax-skeleton [animated]=\"true\" class=\"__subtitle\"></ax-skeleton>\n <ax-skeleton [animated]=\"true\" class=\"__description\"></ax-skeleton>\n <ax-skeleton [animated]=\"true\" class=\"__time\"></ax-skeleton>\n </div>\n </div>\n }\n </div>\n }\n\n <!-- Activity Feed -->\n @if (!loading() && activities().length > 0) {\n <div class=\"__feed\">\n @for (activity of activities(); track activity.id) {\n @let changeClasses = getChangeClasses(activity.changeType);\n @let isItemExpanded = isExpanded(activity.id);\n @let hasExpandableContentItem = hasExpandableContent(activity);\n <div class=\"__item\" [class.__collapsed]=\"!isItemExpanded\" [class.__expandable]=\"hasExpandableContentItem\">\n <div class=\"ax-size-10 ax-rounded-full ax-border ax-flex ax-items-center ax-justify-center ax-lightest-surface\">\n <i class=\"{{ changeClasses.icon }} {{ changeClasses.text }} fa-solid\"></i>\n </div>\n\n <!-- Activity Content -->\n <div class=\"__content\">\n <!-- Main Activity Info -->\n <div class=\"__main-info\">\n <!-- User and Action with Toggle Button -->\n <div class=\"__action-line __header-line\" (click)=\"toggleExpanded(activity.id)\">\n <span class=\"__user-name\">{{ activity.user.title }}</span>\n <span class=\"__action-type\">\n {{ t(`@general:actions.${activity.changeType}.title`) | async }}\n </span>\n <span class=\"__action-text\">\n {{ activity.title | translate | async }}\n </span>\n\n <!-- Compare Button -->\n @if (canCompare(activity)) {\n <button type=\"button\" class=\"__compare-button\" (click)=\"handleCompare(activity, $event)\"\n [attr.aria-label]=\"t('compare.title', { scope: i18nScope }) | async\">\n <i class=\"fa-solid fa-code-compare\"></i>\n </button>\n }\n\n <!-- Toggle Button (only show if there's expandable content) -->\n @if (hasExpandableContentItem) {\n <button type=\"button\" class=\"__toggle-button\" [attr.aria-expanded]=\"isItemExpanded\"\n [attr.aria-label]=\"isItemExpanded ? 'Collapse details' : 'Expand details'\">\n <i class=\"fa-solid\" [class.fa-chevron-down]=\"!isItemExpanded\"\n [class.fa-chevron-up]=\"isItemExpanded\"></i>\n </button>\n }\n </div>\n\n <!-- Expandable Description/Changes -->\n @if (hasExpandableContentItem && isItemExpanded && activity.changes.length > 0) {\n <div class=\"__action-lines __expandable-content\" [class.__animated]=\"shouldAnimate(activity.id)\">\n @for (change of activity.changes; track $index) {\n @let changeClasses = getChangeClasses(change.type);\n <div class=\"__action-line\">\n @if (change.layout) {\n <axp-layout-renderer\n [layout]=\"$any(change.layout)\"\n [context]=\"{ change }\"\n mode=\"view\"\n class=\"__history-layout\"\n />\n } @else {\n <div class=\"ax-rounded-full ax-size-7 ax-grid ax-place-items-center\">\n <i class=\"{{ changeClasses.icon }} {{ changeClasses.text }}\"></i>\n </div>\n @if (change.summary) {\n <span class=\"__action-text\">{{ change.summary }}</span>\n } @else if (change.fieldKey && change.actionKey) {\n <span class=\"__action-text\">\n {{ change.fieldKey | translate:(change.fieldKeyParams ?? {}) | async }}: {{ change.actionKey | translate | async }}\n </span>\n } @else {\n <span class=\"__action-text\">{{ change.description | translate | async }}</span>\n }\n }\n </div>\n }\n </div>\n }\n </div>\n\n <!-- Time -->\n <div class=\"__time\">\n {{ activity.date | format: 'datetime' : 'short' | async }}\n </div>\n </div>\n </div>\n }\n </div>\n }\n\n <!-- Empty State -->\n @if (!loading() && activities().length === 0) {\n <axp-state-message icon=\"fa-light fa-history\" [title]=\"'@activity-log:components.activity-log.empty-states.no-history.title'\"\n [description]=\"'@activity-log:components.activity-log.empty-states.no-history.description'\">\n </axp-state-message>\n }\n </div>\n</div>\n\n<!-- \n\nax-success-surface\nax-primary-surface\nax-danger-surface\nax-warning-surface\nax-info-surface\nax-muted-surface\nax-text-success\n\n -->","import { InjectionToken, Signal } from \"@angular/core\";\n\nexport const AXP_TASK_BADGE_PROVIDERS = new InjectionToken<AXPTaskBadgeProvider[]>('AXP_TASK_BADGE_PROVIDERS');\n\nexport abstract class AXPTaskBadgeProvider {\n abstract key: string;\n abstract count: Signal<number>;\n}","import { computed, inject, Injectable, Signal, signal } from '@angular/core';\nimport { AXP_TASK_BADGE_PROVIDERS, AXPTaskBadgeProvider } from './task-badge.type';\n\n@Injectable({ providedIn: 'root' })\nexport class AXPTaskBadgeService {\n private badgeMap = new Map<string, Signal<number>[]>();\n private providers: AXPTaskBadgeProvider[] = inject(AXP_TASK_BADGE_PROVIDERS, { optional: true }) ?? [];\n private computedCache = new Map<string, Signal<number>>();\n\n constructor() {\n for (const provider of this.providers) {\n if (!this.badgeMap.has(provider.key)) {\n this.badgeMap.set(provider.key, []);\n }\n this.badgeMap.get(provider.key)!.push(provider.count);\n }\n }\n\n getCount(key: string): Signal<number> {\n if (this.computedCache.has(key)) {\n return this.computedCache.get(key)!;\n }\n\n const signals = this.badgeMap.get(key) ?? [];\n const total = signals.length > 0 ? computed(() => signals.reduce((sum, s) => sum + s(), 0)) : signal(0);\n\n this.computedCache.set(key, total);\n return total;\n }\n}\n","import { input, computed, inject, effect, Directive, InputSignal } from \"@angular/core\";\nimport { SIGNAL, signalSetFn } from \"@angular/core/primitives/signals\";\nimport { AXPTaskBadgeService } from \"./task-badge.service\";\nimport { AXBadgeComponent } from \"@acorex/components/badge\";\n\n\n@Directive({\n selector: '[axp-task-badge]',\n standalone: true,\n})\nexport class AXPTaskBadgeDirective {\n private badgeService = inject(AXPTaskBadgeService);\n private host = inject(AXBadgeComponent); // assumes it's applied on <ax-badge>\n private hostElement = this.host.getHostElement();\n\n badgeKey = input<string | undefined>(undefined);\n count = input<number>(0, { alias: 'axp-task-badge' });\n\n private readonly displayCount = computed(() => {\n const value = this.count() || (this.badgeKey() && this.badgeService.getCount(this.badgeKey()!)());\n return value ? value.toString() : '';\n });\n\n #eff = effect(() => {\n this.setValueOfInputSignal(this.host.text, this.displayCount());\n if (!this.displayCount()) {\n this.hostElement.style.display = 'none';\n } else {\n this.hostElement.style.removeProperty('display');\n }\n });\n\n private setValueOfInputSignal<T>(signal: InputSignal<T>, value: T) {\n const node = signal[SIGNAL] as any;\n signalSetFn(node, value);\n }\n}","\nimport { computed, Signal } from \"@angular/core\";\nimport { AXPMenuItem } from \"@acorex/platform/common\";\nimport { AXPTaskBadgeService } from \"./task-badge.service\";\n\nexport class AXPMenuBadgeHelper {\n\n private static cache = new WeakMap<AXPMenuItem, Signal<number>>();\n\n static getTotalCount(item: AXPMenuItem, badgeService: AXPTaskBadgeService): Signal<number> {\n if (this.cache.has(item)) return this.cache.get(item)!;\n\n const own = item.badgeKey ? badgeService.getCount(item.badgeKey) : () => 0;\n const children = item.children?.map(child =>\n this.getTotalCount(child, badgeService)\n ) ?? [];\n\n const total = computed(() =>\n own() + children.reduce((sum, s) => sum + s(), 0)\n );\n\n this.cache.set(item, total);\n return total;\n }\n}\n","\nimport { ChangeDetectionStrategy, Component, computed, contentChild, TemplateRef, viewChild, ViewEncapsulation } from '@angular/core';\n\n\n@Component({\n standalone: true,\n selector: 'axp-layout-actions-primary',\n template: `<ng-content select=\"ax-button,ax-dropdown-button\"></ng-content>`,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AXPThemeLayoutPagePrimaryActionsComponent {\n}\n\n@Component({\n standalone: true,\n selector: 'axp-layout-actions-secondary',\n template: `<ng-content select=\"ax-button-item,ax-divider,ng-container\"></ng-content>`,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AXPThemeLayoutPageSecondaryActionsComponent {\n}\n\n@Component({\n imports: [],\n standalone: true,\n selector: 'axp-layout-actions',\n template: `\n\n <ng-template #primary>\n <ng-content select=\"axp-layout-actions-primary\"></ng-content>\n </ng-template>\n\n <ng-template #secondary>\n <ng-content select=\"axp-layout-actions-secondary\"></ng-content>\n </ng-template>\n\n <ng-content></ng-content>\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\n\nexport class AXPThemeLayoutActionsComponent {\n\n public readonly primaryTemplate = viewChild<TemplateRef<any>>('primary');\n private readonly primaryContent = contentChild(AXPThemeLayoutPagePrimaryActionsComponent);\n public hasPrimary = computed(() => this.primaryContent() != null);\n\n public readonly secondaryTemplate = viewChild<TemplateRef<any>>('secondary');\n private readonly secondaryContent = contentChild(AXPThemeLayoutPageSecondaryActionsComponent);\n public hasSecondary = computed(() => this.secondaryContent() != null);\n\n}\n\n\n","import { ChangeDetectionStrategy, Component, ElementRef, inject, ViewEncapsulation } from '@angular/core';\n\n@Component({\n standalone: true,\n selector: `\n\n axp-page-content, \n axp-page-footer-container,\n axp-page-footer,\n axp-page-header,\n axp-page-header-container,\n axp-page-toolbar,\n\n axp-layout-content, \n axp-layout-page-content, \n\n axp-layout-sections,\n axp-layout-body,\n axp-layout-page-body,\n axp-layout-prefix,\n axp-layout-suffix,\n axp-layout-title-bar,\n axp-layout-title, \n axp-layout-title-actions, \n axp-layout-nav-button, \n axp-layout-description, \n axp-layout-breadcrumbs,\n axp-layout-list-action,\n `,\n template: '<ng-content></ng-content>',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXPThemeLayoutBlockComponent {\n\n\n protected readonly elementRef = inject(ElementRef);\n public readonly hostElement = this.elementRef.nativeElement;\n\n\n}\n","\nimport { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\n\n@Component({\n imports: [],\n standalone: true,\n selector: 'axp-layout-footer, axp-layout-page-footer',\n template: `\n <ng-content select=\"axp-layout-prefix\"></ng-content>\n <ng-content></ng-content>\n <ng-content select=\"axp-layout-suffix\"></ng-content>\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXPThemeLayoutFooterComponent {\n}\n\n\n","\nimport { ChangeDetectionStrategy, Component, input, TemplateRef, viewChild, ViewEncapsulation } from '@angular/core';\n\n@Component({\n imports: [],\n standalone: true,\n selector: 'axp-layout-page-header',\n template: `\n <ng-template #breadcrumbs>\n <ng-content select=\"axp-layout-breadcrumbs\"></ng-content>\n </ng-template>\n\n <ng-template #navbar>\n <ng-content select=\"axp-layout-toolbar\"></ng-content>\n </ng-template>\n\n <ng-template #actions>\n <ng-content select=\"axp-layout-actions\"></ng-content>\n </ng-template>\n\n <ng-template #description>\n <ng-content select=\"axp-layout-description\"></ng-content>\n </ng-template>\n\n <ng-template #title>\n <ng-content select=\"axp-layout-title\"></ng-content>\n </ng-template>\n <ng-template #navButton>\n <ng-content select=\"axp-layout-nav-button\"></ng-content>\n </ng-template>\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXPThemeLayoutPageHeaderComponent {\n\n public readonly title = viewChild<TemplateRef<any>>('title');\n public readonly description = viewChild<TemplateRef<any>>('description');\n public readonly actions = viewChild<TemplateRef<any>>('actions');\n public readonly navbar = viewChild<TemplateRef<any>>('navbar');\n public readonly breadcrumbs = viewChild<TemplateRef<any>>('breadcrumbs');\n public readonly navButton = viewChild<TemplateRef<any>>('navButton');\n}\n\n\n\n@Component({\n imports: [],\n standalone: true,\n selector: 'axp-layout-header',\n template: `\n <ng-content select=\"axp-layout-prefix\"></ng-content>\n <ng-content></ng-content>\n <ng-content select=\"axp-layout-suffix\"></ng-content>\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXPThemeLayoutHeaderComponent {\n\n}\n","import { ChangeDetectionStrategy, Component, contentChild, ViewEncapsulation } from '@angular/core';\n\n\n@Component({\n standalone: true,\n selector: 'axp-layout-list',\n template: `<ng-content select=\"axp-layout-list-item,axp-layout-list-group,ng-container\"></ng-content>`,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AXPThemeLayoutListComponent {\n}\n\n@Component({\n standalone: true,\n selector: 'axp-layout-list-group',\n template: `<ng-content select=\"axp-layout-list-item, axp-layout-title, axp-layout-header ,ng-container\"></ng-content>`,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AXPThemeLayoutListItemsGroupComponent {\n}\n\n@Component({\n standalone: true,\n selector: 'axp-layout-list-item',\n template: `<ng-content select=\"axp-layout-content,axp-layout-prefix,axp-layout-suffix,ng-container\"></ng-content>`,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AXPThemeLayoutListItemComponent {\n\n}","\nimport {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n} from '@angular/core';\n\n@Component({\n imports: [],\n standalone: true,\n selector: 'axp-layout-section',\n template: `\n <ng-content select=\"axp-layout-header\"></ng-content>\n <ng-content select=\"axp-layout-content\"></ng-content>\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXPThemeLayoutSectionComponent {\n}\n","\nimport { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\n\n@Component({\n imports: [],\n standalone: true,\n selector: 'axp-layout-page-start-side, axp-layout-start-side',\n template: `\n <ng-content select=\"axp-layout-header\"></ng-content>\n <ng-content select=\"axp-layout-content\"></ng-content>\n <ng-content select=\"axp-layout-footer\"></ng-content>\n <ng-content></ng-content>\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXPThemeLayoutStartSideComponent {}\n\n@Component({\n imports: [],\n standalone: true,\n selector: 'axp-layout-page-end-side, axp-layout-end-side',\n template: `\n <ng-content select=\"axp-layout-header\"></ng-content>\n <ng-content select=\"axp-layout-content\"></ng-content>\n <ng-content select=\"axp-layout-footer\"></ng-content>\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXPThemeLayoutEndSideComponent {}\n","\nimport { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\n\n@Component({\n imports: [],\n standalone: true,\n selector: 'axp-layout-toolbar',\n template: `\n <ng-content select=\"axp-layout-prefix\"></ng-content>\n <ng-content select=\"axp-layout-suffix\"></ng-content>\n <ng-content></ng-content>\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\n\nexport class AXPThemeLayoutToolbarComponent {\n\n}\n\n\n","import { ChangeDetectionStrategy, Component, computed, ElementRef, inject, signal, Signal, ViewEncapsulation } from '@angular/core';\n\n@Component({\n standalone: true,\n selector: `axp-layout-container`,\n template: '<ng-content></ng-content>',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXPThemeLayoutContainerComponent {\n\n\n protected readonly elementRef: ElementRef<HTMLDivElement> = inject(ElementRef<HTMLDivElement>);\n public readonly hostElement = this.elementRef.nativeElement;\n\n\n private _isEmptySignal = signal(this.hostElement.children.length === 0);\n public readonly isEmpty: Signal<boolean> = this._isEmptySignal.asReadonly();\n\n private mutationObserver?: MutationObserver;\n\n ngOnInit() {\n this.mutationObserver = new MutationObserver(() => {\n this._isEmptySignal.set(this.hostElement.children.length === 0);\n });\n\n this.mutationObserver.observe(this.hostElement, {\n childList: true,\n subtree: true,\n });\n }\n\n ngOnDestroy() {\n this.mutationObserver?.disconnect();\n }\n\n\n\n}\n","import { AXDecoratorModule } from '@acorex/components/decorators';\nimport { CommonModule } from '@angular/common';\nimport { Component, computed, input, output, signal, viewChild, ViewEncapsulation } from '@angular/core';\n\nimport { AXClickEvent, AXValueChangedEvent } from '@acorex/cdk/common';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDropdownModule } from '@acorex/components/dropdown';\nimport { AXSearchBoxModule } from '@acorex/components/search-box';\nimport { AXSkeletonModule } from '@acorex/components/skeleton';\nimport {\n AXTreeItemClickBaseEventLegacy,\n AXTreeViewLegacyComponent,\n AXTreeViewLegacyModule,\n} from '@acorex/components/tree-view-legacy';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPCategoryEntity, AXPResolveMultiLanguageStringPipe } from '@acorex/platform/core';\nimport { AXPThemeLayoutBlockComponent, AXPThemeLayoutHeaderComponent, AXPThemeLayoutToolbarComponent } from '../blocks';\nimport { AXPStateMessageComponent } from '../state-message';\nimport {\n AXPCategoryTreeActions,\n AXPCategoryTreeConfig,\n AXPCategoryTreeDataSource,\n AXPCategoryTreeEvents,\n AXPCategoryTreeNode,\n} from './category-tree.types';\n\n/** Must match the root label key used by AXPCategoryTreeService (not imported here to avoid a components↔entity circular dependency). */\nconst CATEGORY_TREE_ROOT_TITLE_I18N_KEY = '@general:terms.interface.selection.all-items';\n\n@Component({\n selector: 'axp-category-tree',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n imports: [\n CommonModule,\n AXDecoratorModule,\n AXTreeViewLegacyModule,\n AXSkeletonModule,\n AXPThemeLayoutBlockComponent,\n AXSearchBoxModule,\n AXPThemeLayoutHeaderComponent,\n AXPThemeLayoutToolbarComponent,\n AXTranslationModule,\n AXButtonModule,\n AXDropdownModule,\n AXPStateMessageComponent,\n AXPResolveMultiLanguageStringPipe,\n ],\n templateUrl: './category-tree.component.html',\n styleUrl: './category-tree.component.scss',\n})\nexport class AXPCategoryTreeComponent {\n //#region ---- Services & Dependencies ----\n\n /** i18n key for the synthetic root row; resolved in the template with the translate pipe. */\n protected readonly categoryTreeRootTitleI18nKey = CATEGORY_TREE_ROOT_TITLE_I18N_KEY;\n\n //#endregion\n\n //#region ---- Inputs ----\n\n dataSource = input.required<AXPCategoryTreeDataSource>();\n config = input<AXPCategoryTreeConfig>({\n textField: 'title',\n valueField: 'id',\n expandedField: 'expand',\n showCheckbox: false,\n searchable: true,\n searchPlaceholder: '@general:terms.interface.category.search.placeholder',\n emptyStateTitle: '@general:terms.interface.category.search.no-records.title',\n emptyStateDescription: '@general:terms.interface.category.search.no-records.description',\n emptyStateIcon: 'fa-light fa-folder-open',\n });\n actions = input<AXPCategoryTreeActions>({\n canCreate: true,\n canUpdate: true,\n canDelete: true,\n canCreateChild: true,\n createLabel: '@general:actions.add-new.title',\n updateLabel: '@general:actions.edit.title',\n deleteLabel: '@general:actions.delete.title',\n createChildLabel: '@general:actions.add-new-child.title',\n });\n events = input<AXPCategoryTreeEvents>({});\n\n //#endregion\n\n //#region ---- Outputs ----\n\n nodeClick = output<AXPCategoryEntity>();\n nodeSelect = output<AXPCategoryEntity>();\n nodeCreate = output<AXPCategoryEntity | undefined>();\n nodeUpdate = output<AXPCategoryEntity>();\n nodeDelete = output<AXPCategoryEntity>();\n searchChange = output<string>();\n collapseChange = output<AXPCategoryEntity>();\n\n //#endregion\n\n //#region ---- Component State ----\n\n tree = viewChild<AXTreeViewLegacyComponent>('tree');\n isLoading = signal(true);\n searchValue = signal('');\n\n private loadingTimeoutId: any = null;\n private readonly LOADING_DELAY = 300; // Show skeleton only if loading takes more than 300ms\n\n protected treeItems = signal<AXPCategoryTreeNode[]>([\n {\n id: 'root',\n title: CATEGORY_TREE_ROOT_TITLE_I18N_KEY,\n description: '',\n parentId: undefined,\n childrenCount: 0,\n expand: true,\n children: [],\n },\n ]);\n\n //#endregion\n\n //#region ---- Computed Properties ----\n\n protected emptyStateTitle = computed(() => {\n const title = this.config().emptyStateTitle || '';\n return title;\n });\n\n protected emptyStateDescription = computed(() => {\n const description = this.config().emptyStateDescription || '';\n return description;\n });\n\n //#endregion\n\n //#region ---- Lifecycle Methods ----\n\n async ngOnInit(): Promise<void> {\n await this.loadRootNodes();\n }\n\n //#endregion\n\n //#region ---- Data Loading Methods ----\n\n async loadRootNodes(): Promise<void> {\n // Set loading state with delay to avoid flickering\n this.setLoadingWithDelay(true);\n\n try {\n const entities = await this.dataSource().loadRootNodes();\n const nodes = this.convertEntitiesToTreeNodes(entities);\n this.treeItems.update((prev) =>\n prev.map((item) => ({\n ...item,\n children: nodes,\n })),\n );\n } catch (error) {\n console.error('Error loading root nodes:', error);\n } finally {\n this.clearLoadingState();\n }\n }\n\n async loadChildNodes(parentId: string): Promise<void> {\n if (!this.dataSource().loadChildNodes) return;\n\n this.tree()?.setNodeLoading(parentId, true);\n try {\n const entities = await this.dataSource().loadChildNodes!(parentId);\n const children = this.convertEntitiesToTreeNodes(entities);\n this.updateNodeChildren(parentId, children);\n } catch (error) {\n console.error('Error loading child nodes:', error);\n } finally {\n this.tree()?.setNodeLoading(parentId, false);\n }\n }\n\n async searchNodes(searchValue: string): Promise<void> {\n if (!this.dataSource().searchNodes) return;\n\n // Set loading state with delay to avoid flickering\n this.setLoadingWithDelay(true);\n\n try {\n const entities = await this.dataSource().searchNodes!(searchValue);\n const nodes = this.convertEntitiesToTreeNodes(entities);\n this.treeItems.update((prev) =>\n prev.map((item) => ({\n ...item,\n children: nodes,\n })),\n );\n } catch (error) {\n console.error('Error searching nodes:', error);\n } finally {\n this.clearLoadingState();\n }\n }\n\n //#endregion\n\n //#region ---- Event Handlers ----\n\n async handleNodeClick(event: AXTreeItemClickBaseEventLegacy): Promise<void> {\n const node = event.data as AXPCategoryTreeNode;\n // Extract the entity data (without tree-specific properties)\n const entity: AXPCategoryEntity = {\n id: node.id,\n title: node.title,\n description: node.description,\n parentId: node.parentId,\n childrenCount: node.childrenCount,\n };\n this.nodeClick.emit(entity);\n this.events().onNodeClick?.(entity);\n }\n\n async handleCollapseChanged(event: AXTreeItemClickBaseEventLegacy): Promise<void> {\n const node = event.data as AXPCategoryTreeNode;\n\n // Extract the entity data (without tree-specific properties)\n const entity: AXPCategoryEntity = {\n id: node.id,\n title: node.title,\n description: node.description,\n parentId: node.parentId,\n childrenCount: node.childrenCount,\n };\n this.collapseChange.emit(entity);\n this.events().onCollapseChange?.(entity);\n\n // Load children if node is being expanded\n // Check both expand property and active property (active seems to be the actual expansion state)\n if ((node.expand || (node as any).active) && this.dataSource().loadChildNodes) {\n await this.loadChildNodes(node.id);\n }\n }\n\n async handleSearchChange(event: AXValueChangedEvent): Promise<void> {\n const searchValue = event.value;\n this.searchValue.set(searchValue);\n this.searchChange.emit(searchValue);\n this.events().onSearchChange?.(searchValue);\n\n if (searchValue) {\n await this.searchNodes(searchValue);\n } else {\n await this.loadRootNodes();\n }\n }\n\n //#endregion\n\n //#region ---- CRUD Action Handlers ----\n\n async handleCreateRootClick(event: AXClickEvent): Promise<void> {\n event.nativeEvent.preventDefault();\n event.nativeEvent.stopPropagation();\n this.nodeCreate.emit(undefined);\n this.events().onNodeCreate?.(undefined);\n }\n\n async handleCreateChildClick(node: AXPCategoryTreeNode, event: AXClickEvent): Promise<void> {\n event.nativeEvent.preventDefault();\n event.nativeEvent.stopPropagation();\n // Extract the entity data (without tree-specific properties)\n const entity: AXPCategoryEntity = {\n id: node.id,\n title: node.title,\n description: node.description,\n parentId: node.parentId,\n childrenCount: node.childrenCount,\n };\n this.nodeCreate.emit(entity);\n this.events().onNodeCreate?.(entity);\n }\n\n async handleUpdateNodeClick(node: AXPCategoryTreeNode, event: AXClickEvent): Promise<void> {\n event.nativeEvent.preventDefault();\n event.nativeEvent.stopPropagation();\n // Extract the entity data (without tree-specific properties)\n const entity: AXPCategoryEntity = {\n id: node.id,\n title: node.title,\n description: node.description,\n parentId: node.parentId,\n childrenCount: node.childrenCount,\n };\n this.nodeUpdate.emit(entity);\n this.events().onNodeUpdate?.(entity);\n }\n\n async handleDeleteNodeClick(node: AXPCategoryTreeNode, event: AXClickEvent): Promise<void> {\n event.nativeEvent.preventDefault();\n event.nativeEvent.stopPropagation();\n // Extract the entity data (without tree-specific properties)\n const entity: AXPCategoryEntity = {\n id: node.id,\n title: node.title,\n description: node.description,\n parentId: node.parentId,\n childrenCount: node.childrenCount,\n };\n this.nodeDelete.emit(entity);\n this.events().onNodeDelete?.(entity);\n }\n\n //#endregion\n\n //#region ---- Utility Methods ----\n\n private convertEntitiesToTreeNodes(entities: AXPCategoryEntity[]): AXPCategoryTreeNode[] {\n return entities.map((entity) => ({\n ...entity,\n children: entity.childrenCount > 0 ? [] : undefined, // Set children to empty array if has children, undefined if no children\n expand: false,\n hasChild: entity.childrenCount > 0, // Set hasChild based on childrenCount\n }));\n }\n\n private updateNodeChildren(parentId: string, children: AXPCategoryTreeNode[]): void {\n const updateChildrenAtPath = (items: AXPCategoryTreeNode[], id: string): AXPCategoryTreeNode[] => {\n return items.map((item) => {\n if (item.id === id) {\n return { ...item, children };\n }\n if (item.children?.length) {\n return { ...item, children: updateChildrenAtPath(item.children, id) };\n }\n return item;\n });\n };\n\n this.treeItems.update((prev) =>\n prev.map((item) => ({\n ...item,\n children: updateChildrenAtPath(item.children || [], parentId),\n })),\n );\n }\n\n async refreshTree(parentId?: string): Promise<void> {\n if (parentId) {\n await this.loadChildNodes(parentId);\n } else {\n await this.loadRootNodes();\n }\n }\n\n /**\n * Set loading state with delay to avoid flickering for fast responses\n */\n private setLoadingWithDelay(loading: boolean): void {\n if (loading) {\n // Clear any existing timeout\n if (this.loadingTimeoutId) {\n clearTimeout(this.loadingTimeoutId);\n }\n\n // Only show skeleton if loading takes more than LOADING_DELAY ms\n this.loadingTimeoutId = setTimeout(() => {\n this.isLoading.set(true);\n this.loadingTimeoutId = null;\n }, this.LOADING_DELAY);\n }\n }\n\n /**\n * Clear loading state and cancel any pending timeout\n */\n private clearLoadingState(): void {\n // Cancel the delayed loading state if it hasn't been set yet\n if (this.loadingTimeoutId) {\n clearTimeout(this.loadingTimeoutId);\n this.loadingTimeoutId = null;\n }\n\n // Clear the loading state\n this.isLoading.set(false);\n }\n\n //#endregion\n}\n","<axp-layout-header>\n <axp-layout-toolbar>\n @if (config().searchable) {\n <ax-search-box\n (onValueChanged)=\"handleSearchChange($event)\"\n [delayTime]=\"300\"\n [placeholder]=\"config().searchPlaceholder! | translate | async\"\n >\n </ax-search-box>\n }\n </axp-layout-toolbar>\n</axp-layout-header>\n\n<axp-layout-content>\n @if (isLoading()) {\n <div class=\"ax-p-4 ax-flex ax-flex-col ax-gap-3\" [class.ax-pt-2]=\"config().searchable\">\n <ax-skeleton class=\"ax-w-full ax-h-6 ax-rounded-md\"></ax-skeleton>\n <ax-skeleton class=\"ax-w-full ax-h-6 ax-rounded-md\"></ax-skeleton>\n <ax-skeleton class=\"ax-w-full ax-h-6 ax-rounded-md\"></ax-skeleton>\n <ax-skeleton class=\"ax-w-full ax-h-6 ax-rounded-md\"></ax-skeleton>\n <ax-skeleton class=\"ax-w-full ax-h-6 ax-rounded-md\"></ax-skeleton>\n <ax-skeleton class=\"ax-w-full ax-h-6 ax-rounded-md\"></ax-skeleton>\n </div>\n } @else if (treeItems()[0].children?.length) {\n <div class=\"ax-px-4 ax-max-h-[calc(100vh-250px)] ax-overflow-auto\" [class.ax-pt-2]=\"config().searchable\">\n <ax-tree-view-legacy\n (onNodeClick)=\"handleNodeClick($event)\"\n (onCollapsedChanged)=\"handleCollapseChanged($event)\"\n [showCheckbox]=\"config().showCheckbox || false\"\n [itemTemplate]=\"itemTemplate\"\n #treeRef\n [textField]=\"config().textField || 'title'\"\n [valueField]=\"config().valueField || 'id'\"\n [expandedField]=\"config().expandedField || 'expand'\"\n [items]=\"treeItems()\"\n #tree\n >\n </ax-tree-view-legacy>\n </div>\n } @else {\n <axp-state-message\n [icon]=\"config().emptyStateIcon || 'fa-light fa-folder-open'\"\n [title]=\"emptyStateTitle()\"\n [description]=\"emptyStateDescription()\"\n >\n @if (actions().canCreate) {\n <ax-button\n slot=\"actions\"\n (onClick)=\"handleCreateRootClick($event)\"\n look=\"solid\"\n color=\"primary\"\n [text]=\"((actions().createLabel || '@general:actions.add-new.title') | translate | async)!\"\n >\n <ax-icon class=\"fas fa-plus\"></ax-icon>\n </ax-button>\n }\n </axp-state-message>\n }\n\n <ng-template #itemTemplate let-item>\n @let textField = config().textField || 'title';\n @let rawTitle = item[textField] ?? item.title;\n <div class=\"ax-flex ax-items-center ax-justify-between ax-w-full ax-gap-2 ax-overflow-hidden\">\n <div class=\"ax-flex ax-items-center ax-gap-2 ax-min-w-0\">\n <ax-icon class=\"fas ax-text-warning fa-folder\"></ax-icon>\n <span class=\"ax-truncate\">\n @if (item.id === 'root') {\n {{ categoryTreeRootTitleI18nKey | translate | async }}\n } @else {\n {{ rawTitle | axpResolveMultiLanguageString }}\n }\n </span>\n </div>\n @if (item.id && item.id !== 'root') {\n @if (actions().canCreateChild || actions().canUpdate || actions().canDelete) {\n <div class=\"ax-flex ax-items-center ax-gap-1\">\n <ax-button class=\"ax-xs\" color=\"default\" look=\"blank\" (onClick)=\"$event.nativeEvent.stopPropagation()\">\n <ax-icon class=\"fas fa-ellipsis-v\"></ax-icon>\n <ax-dropdown-panel>\n <ax-button-item-list>\n @if (actions().canCreateChild) {\n <ax-button-item\n (onClick)=\"handleCreateChildClick(item, $event)\"\n look=\"blank\"\n color=\"default\"\n [text]=\"((actions().createChildLabel || '@general:actions.add-new-child.title') | translate | async)!\"\n >\n <ax-icon class=\"fas fa-plus\"></ax-icon>\n </ax-button-item>\n }\n @if (actions().canUpdate) {\n <ax-button-item\n (onClick)=\"handleUpdateNodeClick(item, $event)\"\n look=\"blank\"\n [text]=\"((actions().updateLabel || '@general:actions.edit.title') | translate | async)!\"\n >\n <ax-icon class=\"fas fa-pen\"></ax-icon>\n </ax-button-item>\n }\n @if (actions().canDelete) {\n <ax-button-item\n (onClick)=\"handleDeleteNodeClick(item, $event)\"\n color=\"danger\"\n look=\"blank\"\n [text]=\"((actions().deleteLabel || '@general:actions.delete.title') | translate | async)!\"\n >\n <ax-icon class=\"fas fa-trash\"></ax-icon>\n </ax-button-item>\n }\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n </div>\n }\n } @else if (item.id === 'root' && actions().canCreate) {\n <div class=\"ax-flex ax-items-center ax-gap-1\">\n <ax-button class=\"ax-xs\" (onClick)=\"handleCreateRootClick($event)\" look=\"blank\" color=\"default\">\n <ax-icon class=\"fas fa-plus\"></ax-icon>\n </ax-button>\n </div>\n }\n </div>\n </ng-template>\n</axp-layout-content>\n","//#region ---- Tree Node Interface ----\n\nimport { AXPCategoryEntity } from \"@acorex/platform/core\";\n\nexport interface AXPCategoryTreeNode extends AXPCategoryEntity {\n children?: AXPCategoryTreeNode[];\n expand?: boolean;\n hasChild?: boolean;\n [key: string]: any;\n}\n\n//#endregion\n\n//#region ---- Tree Configuration Interface ----\n\nexport interface AXPCategoryTreeConfig {\n textField?: string;\n valueField?: string;\n expandedField?: string;\n showCheckbox?: boolean;\n searchable?: boolean;\n searchPlaceholder?: string;\n emptyStateTitle?: string;\n emptyStateDescription?: string;\n emptyStateIcon?: string;\n}\n\n//#endregion\n\n//#region ---- Tree Events Interface ----\n\nexport interface AXPCategoryTreeEvents {\n onNodeClick?: (node: AXPCategoryEntity) => void;\n onNodeSelect?: (node: AXPCategoryEntity) => void;\n onNodeCreate?: (parentNode?: AXPCategoryEntity) => void;\n onNodeUpdate?: (node: AXPCategoryEntity) => void;\n onNodeDelete?: (node: AXPCategoryEntity) => void;\n onSearchChange?: (searchValue: string) => void;\n onCollapseChange?: (node: AXPCategoryEntity) => void;\n}\n\n//#endregion\n\n//#region ---- Tree Actions Interface ----\n\nexport interface AXPCategoryTreeActions {\n canCreate?: boolean;\n canUpdate?: boolean;\n canDelete?: boolean;\n canCreateChild?: boolean;\n createLabel?: string;\n updateLabel?: string;\n deleteLabel?: string;\n createChildLabel?: string;\n}\n\n//#endregion\n\n//#region ---- Tree Data Source Interface ----\n\nexport interface AXPCategoryTreeDataSource {\n loadRootNodes: () => Promise<AXPCategoryEntity[]>;\n loadChildNodes?: (parentId: string) => Promise<AXPCategoryEntity[]>;\n searchNodes?: (searchValue: string) => Promise<AXPCategoryEntity[]>;\n}\n\n//#endregion\n","\nimport { ChangeDetectionStrategy, Component, input, output } from '@angular/core';\n\n//#region ---- Component ----\n\n/**\n * Color Palette Picker Component\n * Displays a grid of color swatches for selection\n */\n@Component({\n selector: 'axp-color-palette-picker',\n templateUrl: './color-palette-picker.component.html',\n styleUrl: './color-palette-picker.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [],\n})\nexport class AXPColorPalettePickerComponent {\n //#region ---- Inputs ----\n\n /**\n * Array of color codes to display\n */\n colors = input<string[]>([]);\n\n /**\n * Currently selected color\n */\n selectedColor = input<string | null | undefined>();\n\n /**\n * Disable the entire palette\n */\n disabled = input<boolean>(false);\n\n /**\n * Make the palette readonly\n */\n readonly = input<boolean>(false);\n\n /**\n * Show empty/null option to clear selection\n */\n allowClear = input<boolean>(true);\n\n //#endregion\n\n //#region ---- Outputs ----\n\n /**\n * Emits when a color is selected or cleared (null/undefined)\n */\n colorSelected = output<string | null | undefined>();\n\n //#endregion\n\n //#region ---- Event Handlers ----\n\n /**\n * Handle color selection\n */\n protected handleColorSelect(color: string | null | undefined): void {\n if (this.disabled() || this.readonly()) {\n return;\n }\n this.colorSelected.emit(color);\n }\n\n //#endregion\n}\n\n//#endregion\n\n","<div class=\"axp-color-palette-picker\">\n <div class=\"__swatches\">\n @if (allowClear()) {\n <button type=\"button\" class=\"__swatch __empty\"\n [class.__selected]=\"selectedColor() === null || selectedColor() === undefined\"\n [class.__disabled]=\"disabled() || readonly()\" [disabled]=\"disabled() || readonly()\"\n (click)=\"handleColorSelect(null)\">\n @if (selectedColor() === null || selectedColor() === undefined) {\n <i class=\"fa-solid fa-check __checkmark\"></i>\n } @else {\n <i class=\"fa-solid fa-xmark __clear-icon\"></i>\n }\n </button>\n }\n @for (color of colors(); track color) {\n <button type=\"button\" class=\"__swatch\" [class.__selected]=\"selectedColor() === color\"\n [class.__disabled]=\"disabled() || readonly()\" [style.background-color]=\"color\"\n [disabled]=\"disabled() || readonly()\" (click)=\"handleColorSelect(color)\">\n @if (selectedColor() === color) {\n <i class=\"fa-solid fa-check __checkmark\"></i>\n }\n </button>\n }\n </div>\n</div>","import { AXBadgeModule } from '@acorex/components/badge';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXPopoverComponent, AXPopoverModule } from '@acorex/components/popover';\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n effect,\n ElementRef,\n input,\n OnDestroy,\n output,\n signal,\n TemplateRef,\n viewChild,\n} from '@angular/core';\n\nexport interface AXPColumnItemListItem {\n id: string;\n content: string;\n}\n\n@Component({\n selector: 'axp-column-item-list',\n template: `\n <div class=\"ax-flex ax-gap-1 ax-items-center\" #itemsContainer>\n @if (items().length === 0) {\n <span class=\"ax-text-muted\">---</span>\n } @else {\n <div class=\"ax-flex ax-gap-1 ax-items-center ax-flex-1 ax-min-w-0\">\n @for (item of items(); track item.id) {\n @if (itemTemplate()) {\n <ng-container\n [ngTemplateOutlet]=\"itemTemplate()\"\n [ngTemplateOutletContext]=\"{ $implicit: item }\"\n ></ng-container>\n } @else {\n <ax-badge class=\"ax-p-0.5 ax-text-sm\" [text]=\"item.content\"></ax-badge>\n }\n }\n </div>\n }\n @if (hasOverflow() && items().length > 1) {\n <span\n class=\"ax-absolute ax-flex ax-items-center ax-end-0 ax-px-1 ax-cursor-pointer ax-h-full ax-light-surface hover:ax-primary-surface\"\n (click)=\"showMoreItems()\"\n #moreButton\n >\n <i class=\"fa-light fa-ellipsis-vertical\"></i>\n </span>\n }\n </div>\n\n <!-- More Items Popover -->\n <ax-popover [openOn]=\"'manual'\" #morePopover (openChange)=\"onMorePopoverOpenChange($event)\">\n <div class=\"ax-lightest-surface ax-border ax-rounded-lg ax-shadow-lg ax-p-4 ax-min-w-[280px]\">\n <div class=\"ax-mb-4 ax-border-b ax-pb-2\">\n <h3 class=\"ax-text-base ax-font-semibold\">All {{ items().length }} Items</h3>\n </div>\n <div class=\"ax-max-h-64 ax-flex ax-flex-col ax-gap-3 ax-overflow-auto\" style=\"max-height: max(30dvh,10rem)\">\n @for (item of items(); track item.id) {\n <!-- <ax-button class=\"ax-sm\" (onClick)=\"submitClick(item)\" [text]=\"item.content\"></ax-button> -->\n\n @if (itemTemplate()) {\n <ng-container\n [ngTemplateOutlet]=\"itemTemplate()\"\n [ngTemplateOutletContext]=\"{ $implicit: item }\"\n ></ng-container>\n } @else {\n <ax-button class=\"ax-sm\" (onClick)=\"submitClick(item)\" [text]=\"item.content\"></ax-button>\n }\n }\n </div>\n </div>\n </ax-popover>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AXBadgeModule, AXPopoverModule, AXButtonModule, NgTemplateOutlet],\n})\nexport class AXPColumnItemListComponent implements OnDestroy {\n items = input<AXPColumnItemListItem[]>([]);\n itemTemplate = input<TemplateRef<{ $implicit: AXPColumnItemListItem }> | null>(null);\n itemClick = output<AXPColumnItemListItem>();\n\n protected itemsContainer = viewChild<ElementRef<HTMLDivElement>>('itemsContainer');\n protected moreButton = viewChild<ElementRef>('moreButton');\n protected morePopover = viewChild<AXPopoverComponent>('morePopover');\n protected isMorePopoverOpen = signal(false);\n protected hasOverflow = signal(false);\n\n private resizeObserver?: ResizeObserver;\n\n constructor() {\n afterNextRender(() => {\n this.checkOverflow();\n this.setupResizeObserver();\n });\n\n // Re-check overflow when items change\n effect(() => {\n this.items(); // Track items signal\n // Use setTimeout to ensure DOM is updated\n setTimeout(() => {\n this.checkOverflow();\n }, 0);\n });\n }\n\n ngOnDestroy(): void {\n if (this.resizeObserver) {\n this.resizeObserver.disconnect();\n this.resizeObserver = undefined;\n }\n }\n\n protected showMoreItems(): void {\n this.openMorePopover();\n }\n\n protected onMorePopoverOpenChange(event: any): void {\n this.isMorePopoverOpen.set(event);\n }\n\n private openMorePopover(): void {\n if (this.morePopover() && this.moreButton()) {\n this.morePopover()!.target = this.moreButton()!.nativeElement;\n this.morePopover()!.open();\n this.isMorePopoverOpen.set(true);\n }\n }\n\n protected submitClick(event: AXPColumnItemListItem): void {\n this.itemClick.emit(event);\n this.morePopover()?.close();\n }\n\n private checkOverflow(): void {\n const container = this.itemsContainer()?.nativeElement;\n if (!container) {\n return;\n }\n\n // Check if content overflows horizontally\n const hasOverflow = container.scrollWidth > container.clientWidth + 20;\n this.hasOverflow.set(hasOverflow);\n }\n\n private setupResizeObserver(): void {\n const container = this.itemsContainer()?.nativeElement;\n if (!container) {\n return;\n }\n\n // Clean up existing observer\n if (this.resizeObserver) {\n this.resizeObserver.disconnect();\n }\n\n // Create new observer to watch for size changes\n this.resizeObserver = new ResizeObserver(() => {\n this.checkOverflow();\n });\n\n this.resizeObserver.observe(container);\n\n // Also observe parent container if available\n const parent = container.parentElement;\n if (parent) {\n this.resizeObserver.observe(parent);\n }\n }\n}\n","import { AXValueChangedEvent } from '@acorex/cdk/common';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXSwitchModule } from '@acorex/components/switch';\nimport { AXTranslationModule } from '@acorex/core/translation';\n\nimport { AXPColumnQuery } from '@acorex/platform/core';\nimport { CdkDrag, CdkDragDrop, CdkDragHandle, CdkDropList, moveItemInArray } from '@angular/cdk/drag-drop';\nimport { CommonModule } from '@angular/common';\nimport { Component, model } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { cloneDeep } from 'lodash-es';\n\n@Component({\n selector: 'axp-query-columns',\n templateUrl: './query-columns.component.html',\n imports: [\n CommonModule,\n FormsModule,\n CdkDropList,\n CdkDrag,\n CdkDragHandle,\n AXButtonModule,\n AXDecoratorModule,\n AXSwitchModule,\n AXTranslationModule,\n ],\n})\nexport class AXPQueryColumnsComponent {\n columns = model<AXPColumnQuery[]>([]);\n\n handleVisibilityChange(e: AXValueChangedEvent<boolean>, name: string) {\n if (e.isUserInteraction) {\n this.columns.update((prev) => {\n return prev.map((c: any) => {\n return c.name === name ? { ...c, visible: e.value ?? true } : c;\n });\n });\n }\n }\n\n protected drop(event: CdkDragDrop<unknown[]>) {\n const columns = cloneDeep(this.columns());\n moveItemInArray(columns, event.previousIndex, event.currentIndex);\n this.columns.set(columns);\n }\n}\n","<div class=\"ax-flex ax-flex-col ax-gap-4 ax-select-none\" cdkDropList (cdkDropListDropped)=\"drop($event)\">\n <div class=\"ax-flex ax-flex-col ax-gap-3 ax-w-full ax-sorted-list ax-max-h-[calc(100vh-280px)] ax-overflow-auto\">\n @for (item of columns(); track item.name) {\n <div class=\"ax-flex ax-py-1 ax-items-center ax-justify-between\" cdkDrag cdkDragBoundary=\".ax-sorted-list\">\n <div class=\"ax-flex ax-items-center ax-gap-3\" cdkDragHandle>\n <ax-icon class=\"fa-solid fa-grip-dots-vertical ax-cursor-move\"></ax-icon>\n <p class=\"ax-font-medium ax-text-sm\">{{ item.title | translate | async }}</p>\n </div>\n <ax-switch\n class=\"ax-sm\"\n [ngModel]=\"item.visible\"\n (onValueChanged)=\"handleVisibilityChange($event, item.name)\"\n ></ax-switch>\n </div>\n }\n </div>\n</div>\n","import { Component, OnDestroy, OnInit, ViewEncapsulation, input, computed, signal } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { AXFormModule } from '@acorex/components/form';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXTextBoxModule } from '@acorex/components/text-box';\nimport { AXCheckBoxModule } from '@acorex/components/check-box';\nimport { AXLabelModule } from '@acorex/components/label';\nimport { AXTranslationModule } from '@acorex/core/translation';\n\nimport { AXPWidgetCoreModule, AXPWidgetNode } from '@acorex/platform/layout/widget-core';\nimport { AXPContextData } from '@acorex/platform/core';\n\nexport interface AXPCompareViewField {\n path: string;\n title: string;\n description?: string;\n widget: AXPWidgetNode;\n}\n\nexport interface AXPCompareViewObject {\n id: string;\n title: string;\n description?: string;\n context: AXPContextData;\n}\n\nexport interface AXPCompareViewInputs {\n fields: AXPCompareViewField[];\n objects: AXPCompareViewObject[];\n}\n\nexport type AXPCompareViewMode = 'compare' | 'changes';\n\n@Component({\n selector: 'axp-compare-view',\n templateUrl: './compare-view.component.html',\n styleUrl: './compare-view.component.scss',\n imports: [\n // Angular\n CommonModule,\n // ACoreX\n AXFormModule,\n AXTextBoxModule,\n AXButtonModule,\n AXLabelModule,\n AXCheckBoxModule,\n AXTranslationModule,\n // Platform\n AXPWidgetCoreModule\n ],\n encapsulation: ViewEncapsulation.None,\n providers: [\n\n ],\n})\nexport class AXPCompareViewComponent implements OnInit, OnDestroy {\n\n //#region ---- Component Properties ----\n\n inputs = input<AXPCompareViewInputs>();\n showOnlyChanges = signal(false);\n mode = input<AXPCompareViewMode>('compare');\n\n private removedObjects = signal<string[]>([]);\n\n protected isChangesMode = computed(() => this.mode() === 'changes');\n\n //#endregion\n\n //#region ---- Computed Properties ----\n\n /**\n * Filtered fields based on showOnlyChanges toggle\n */\n filteredFields = computed(() => {\n const fields = this.inputs()?.fields ?? [];\n // Set readOnly to true for all fields\n fields.forEach(field => {\n field.widget.options = {\n ...field.widget.options,\n allowEdit: false,\n readOnly: true,\n };\n });\n\n if (!this.showOnlyChanges()) {\n return fields;\n }\n\n // Filter to show only fields where values differ across objects\n return fields.filter(field => this.hasUnequalValues(field.path));\n });\n\n remainingObjects = computed(() => {\n const objects = this.inputs()?.objects ?? [];\n return objects.filter(obj => !this.removedObjects().includes(obj.id));\n });\n\n //#endregion\n\n //#region ---- Utility Methods ----\n\n /**\n * Check if a field value will change in the next object (to show arrow in current cell)\n */\n protected hasValueChangingToNext(fieldPath: string, currentObjectIndex: number): boolean {\n const objects = this.remainingObjects();\n if (currentObjectIndex >= objects.length - 1) return false;\n\n const currentValue = objects[currentObjectIndex]?.context[fieldPath];\n const nextValue = objects[currentObjectIndex + 1]?.context[fieldPath];\n\n return !this.areValuesEqual(currentValue, nextValue);\n }\n\n /**\n * Check if a field value has changed compared to the previous object\n */\n hasValueChangedFromPrevious(fieldPath: string, currentObjectIndex: number): boolean {\n const objects = this.remainingObjects();\n if (currentObjectIndex === 0 || objects.length <= 1) return false;\n\n const currentValue = objects[currentObjectIndex]?.context[fieldPath];\n const previousValue = objects[currentObjectIndex - 1]?.context[fieldPath];\n\n return !this.areValuesEqual(currentValue, previousValue);\n }\n\n /**\n * Check if a field has unequal values across objects\n */\n hasUnequalValues(fieldPath: string): boolean {\n const objects = this.remainingObjects();\n if (objects.length <= 1) return false;\n\n const values = objects.map(obj => obj.context[fieldPath]);\n const firstValue = values[0];\n\n return values.some(value => !this.areValuesEqual(value, firstValue));\n }\n\n /**\n * Check if a field has equal values across objects\n */\n hasEqualValues(fieldPath: string): boolean {\n const objects = this.remainingObjects();\n if (objects.length <= 1) return false;\n\n const values = objects.map(obj => obj.context[fieldPath]);\n const firstValue = values[0];\n\n return values.every(value => this.areValuesEqual(value, firstValue));\n }\n\n\n\n\n /**\n * Compare two values for equality (deep comparison for objects/arrays)\n */\n private areValuesEqual(value1: any, value2: any): boolean {\n if (value1 === value2) return true;\n\n if (value1 == null || value2 == null) return value1 === value2;\n\n if (typeof value1 !== typeof value2) return false;\n\n if (typeof value1 === 'object') {\n return JSON.stringify(value1) === JSON.stringify(value2);\n }\n\n return false;\n }\n\n /**\n * Toggle the show only changes filter\n */\n toggleShowOnlyChanges(): void {\n this.showOnlyChanges.update(value => !value);\n }\n\n /**\n * Remove an object from the comparison\n */\n removeObject(objectId: string): void {\n this.removedObjects.update(objects => [...objects, objectId]);\n }\n\n //#endregion\n\n //#region ---- Lifecycle Methods ----\n\n ngOnInit(): void {\n }\n\n ngOnDestroy(): void {\n\n }\n\n //#endregion\n}\n","<!--\n #region ---- Compare View Table Layout ----\n-->\n<div class=\"axp-compare-view\">\n <div class=\"__table-container\">\n <table class=\"__table\">\n <thead class=\"__thead\">\n <tr class=\"__header-row\">\n <th class=\"__field-header\">\n <ax-check-box\n [value]=\"showOnlyChanges()\"\n (valueChange)=\"toggleShowOnlyChanges()\"\n class=\"__show-changes-toggle\"\n >\n <ax-label>\n {{ '@activity-log:components.compare-view.show-only-differences' | translate | async }}\n </ax-label>\n </ax-check-box>\n </th>\n @for (obj of remainingObjects(); track obj.id) {\n <th class=\"__object-header\" [attr.data-id]=\"obj.id\">\n <div class=\"__object-title\" [title]=\"obj.description\">\n <span>{{ obj.title | translate | async }}</span>\n @if (remainingObjects().length > 2) {\n <span class=\"__remove-object-button\" (click)=\"removeObject(obj.id)\">\n <i class=\"fa-light fa-times\"></i>\n </span>\n }\n </div>\n </th>\n }\n </tr>\n </thead>\n <tbody class=\"__tbody\">\n @for (field of filteredFields(); track field.path; let i = $index) {\n <tr\n class=\"__row\"\n [class.__row--odd]=\"i % 2 === 1\"\n [class.__row--has-differences]=\"hasUnequalValues(field.path)\"\n [class.__row--has-equal-values]=\"hasEqualValues(field.path)\"\n >\n <td class=\"__field-cell\">\n <div class=\"__field-content\">\n <div class=\"__field-title\">\n {{ field.title | translate | async }}\n </div>\n @if (field.description) {\n <div class=\"__field-description\">{{ field.description }}</div>\n }\n </div>\n </td>\n @for (obj of remainingObjects(); track obj.id; let objIndex = $index) {\n <td\n class=\"__object-cell\"\n [attr.data-id]=\"obj.id\"\n [class.__cell--changed]=\"hasValueChangedFromPrevious(field.path, objIndex) && isChangesMode()\"\n >\n @if (obj.context[field.path] !== undefined) {\n <div class=\"__object-content\">\n <axp-widgets-container [context]=\"obj.context\">\n <ng-container axp-widget-renderer [node]=\"field.widget\" [mode]=\"'view'\"></ng-container>\n </axp-widgets-container>\n </div>\n } @else {\n <div class=\"__object-placeholder\">---</div>\n }\n @if (hasValueChangingToNext(field.path, objIndex) && isChangesMode()) {\n <div class=\"__change-indicator\">\n <i class=\"fa-light fa-arrow-right\"></i>\n </div>\n }\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n</div>\n<!--\n #endregion\n-->\n","import { AXCommonModule, AXDataSource, AXDataSourceFilterOption, AXValueChangedEvent } from '@acorex/cdk/common';\nimport {\n AXDataTableComponent,\n AXDataTableModule,\n AXDataTableRowClick,\n AXDataTableRowDbClick,\n} from '@acorex/components/data-table';\nimport { AXPWidgetCoreModule } from '@acorex/platform/layout/widget-core';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, signal, viewChild } from '@angular/core';\n\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDropdownButtonModule } from '@acorex/components/dropdown-button';\nimport { AXFormModule } from '@acorex/components/form';\nimport { AXBasePageComponent } from '@acorex/components/page';\nimport { AXSearchBoxModule } from '@acorex/components/search-box';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\nimport { AXBadgeModule } from '@acorex/components/badge';\n\n// Import category tree types and component\nimport { AXPCategoryEntity } from \"@acorex/platform/core\";\nimport { AXPCategoryTreeDataSource, AXPCategoryTreeComponent } from '../category-tree';\nimport { isEmpty, isNil } from 'lodash-es';\n\n//#region ---- Types ----\n\nexport type AXPDataSelectorAllowCreate = 'none' | 'full' | 'quick';\n\nexport interface AXPDataSelectorColumn {\n name: string;\n title: string;\n visible: boolean;\n dataPath?: string;\n width?: string;\n widget: {\n type: string;\n options: any;\n };\n}\n\nexport interface AXPDataSelectorConfig {\n title: string;\n dataSource: AXDataSource<any>;\n columns: AXPDataSelectorColumn[];\n selectionMode: 'single' | 'multiple';\n searchFields?: { name: string; title: string }[];\n initialSearchTerm?: string;\n parentField?: string;\n allowCreate?: AXPDataSelectorAllowCreate;\n onCreate?: (mode: 'full' | 'quick') => Promise<any | null>;\n filters?: AXDataSourceFilterOption;\n selectedItemIds?: string[] | number[]; // IDs of items to select initially\n\n // Category Filter Configuration\n categoryFilter?: {\n enabled: boolean;\n title: string;\n dataSource: AXPCategoryTreeDataSource;\n filterField: string; // Required field in main dataSource to filter on\n filterOperator?: 'equal' | 'contains' | 'in'; // How to apply the filter\n width?: string; // Side panel width (default: '300px')\n };\n}\n\n//#endregion\n\n@Component({\n selector: 'axp-data-selector',\n templateUrl: './data-selector.component.html',\n styleUrl: './data-selector.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n AXCommonModule,\n AXButtonModule,\n AXFormModule,\n AXDecoratorModule,\n AXDropdownButtonModule,\n AXDataTableModule,\n AXSearchBoxModule,\n AXPWidgetCoreModule,\n AXTranslationModule,\n AXBadgeModule,\n AXPCategoryTreeComponent,\n ],\n inputs: [],\n})\nexport class AXPDataSelectorComponent extends AXBasePageComponent {\n\n //#region ---- Properties ----\n\n protected config = signal<AXPDataSelectorConfig>({\n title: '',\n dataSource: null!,\n columns: [],\n selectionMode: 'single',\n searchFields: [],\n initialSearchTerm: undefined,\n parentField: undefined,\n allowCreate: 'none',\n filters: undefined,\n selectedItemIds: undefined\n });\n\n protected searchTerm: string = '';\n protected searchPlaceholderText = signal<string>('');\n protected filter: AXDataSourceFilterOption;\n\n protected grid = viewChild<AXDataTableComponent>('grid');\n\n protected selectedItems = signal<any[]>([]);\n private initialSelectionApplied = false;\n private userHasInteracted = false;\n private isApplyingInitialSelection = false;\n private initialSelectedItems: any[] = []; // Track initial selection to calculate difference\n\n // Category Filter State\n protected activeCategoryFilter = signal<{\n node: AXPCategoryEntity;\n filterValue: any;\n } | null>(null);\n private placeholderUpdateToken = 0;\n private initialSearchApplied = false;\n\n //#endregion\n\n //#region ---- Services & Dependencies ----\n\n private readonly translationService = inject(AXTranslationService);\n\n //#endregion\n\n constructor() {\n super();\n effect(() => {\n const searchFields = this.config().searchFields;\n void this.updateSearchPlaceholder(searchFields);\n });\n\n effect(() => {\n const initialTerm = this.config().initialSearchTerm ?? '';\n if (!this.initialSearchApplied && initialTerm && initialTerm.trim().length > 0) {\n this.initialSearchApplied = true;\n this.searchTerm = initialTerm;\n queueMicrotask(() => this.applySearchFilter(initialTerm));\n }\n });\n }\n\n //#region ---- Computed Properties ----\n\n protected allowSelect = computed(() => this.selectedItems().length > 0);\n\n protected selectedCount = computed(() => this.selectedItems().length);\n\n protected hasSearch = computed(() => {\n const searchFields = this.config().searchFields;\n return searchFields && searchFields.length > 0;\n });\n\n // Category Tree Configuration\n protected categoryTreeConfig = computed(() => ({\n textField: 'title',\n valueField: 'id',\n showCheckbox: false,\n searchable: true,\n searchPlaceholder: '@general:terms.interface.category.search.placeholder',\n emptyStateTitle: '@general:terms.interface.category.search.no-records.title',\n emptyStateDescription: '@general:terms.interface.category.search.no-records.description',\n emptyStateIcon: 'fa-light fa-folder-open',\n }));\n\n // Category Tree Actions (no CRUD in filter mode)\n protected categoryTreeActions = computed(() => ({\n canCreate: false,\n canUpdate: false,\n canDelete: false,\n canCreateChild: false,\n }));\n\n //#endregion\n\n //#region ---- Lifecycle Methods ----\n\n protected override ngOnInit() {\n // Set config from data passed by popup service\n // The config will be automatically set by AXBasePageComponent\n }\n\n protected async ngAfterViewInit() {\n if (this.searchTerm) {\n this.applySearchFilter(this.searchTerm);\n } else {\n this.applyFilterAndSort();\n }\n\n // Wait for data to load, then apply initial selection using grid.selectRows()\n setTimeout(() => this.applyInitialSelection(), 300);\n }\n\n //#endregion\n\n //#region ---- Event Handlers ----\n\n protected handleRowDbClick(e: AXDataTableRowDbClick) {\n this.close({ items: [e.data] });\n }\n\n protected handleRowClick(e: AXDataTableRowClick) {\n // Mark user interaction\n this.userHasInteracted = true;\n\n // In single selection mode, update selectedItems directly since grid doesn't fire selectedRowsChange\n if (this.config().selectionMode === 'single') {\n this.selectedItems.set([e.data]);\n }\n // In multiple mode, selection is handled by the grid via checkboxes\n // The grid will fire handleSelectedRowsChange which updates our signal\n }\n\n protected async handleSelectedRowsChange(rows: unknown[]) {\n const newSelection = (rows as any[]) || [];\n\n // If we're applying initial selection, just update the signal\n // Otherwise, mark as user interaction and update\n if (!this.isApplyingInitialSelection) {\n this.userHasInteracted = true;\n }\n // Always update selectedItems from data table selection\n this.selectedItems.set(newSelection);\n }\n\n protected handleChangeSearchValue(e: AXValueChangedEvent) {\n if (e.isUserInteraction) {\n const value = e.value ?? '';\n this.searchTerm = value;\n this.applySearchFilter(value);\n }\n }\n\n protected async handleCreateNewClick(mode: 'full' | 'quick') {\n const onCreate = this.config().onCreate;\n if (!onCreate) return;\n\n const createdItem = await onCreate(mode);\n if (createdItem) {\n if (this.config().selectionMode === 'multiple') {\n const currentSelection = this.selectedItems();\n const newSelection = [...currentSelection, createdItem];\n this.selectedItems.set(newSelection);\n this.config().dataSource.refresh();\n // Close selector and return selection so the new item is added to the structure\n this.close({ items: newSelection });\n } else {\n this.close({ items: [createdItem] });\n }\n }\n }\n\n protected handleCloseClick() {\n this.close();\n }\n\n protected handleSelectClick() {\n const currentSelection = this.selectedItems();\n // Return the final selection (all currently selected items)\n // When selectedItemIds was provided, the caller will replace the initial selection\n // When selectedItemIds was not provided, the caller will merge as needed\n this.close({ items: currentSelection });\n }\n\n protected async handleExpandRow(row: any) {\n if (this.grid()) {\n await this.grid()!.expandRow(row);\n }\n }\n\n // Category Filter Event Handlers\n protected handleCategoryFilterClick(node: AXPCategoryEntity) {\n const categoryConfig = this.config().categoryFilter!;\n\n // Get the filter value from the node\n const filterValue = node.id;\n\n // Store active filter state\n this.activeCategoryFilter.set({\n node,\n filterValue\n });\n\n // Apply filter to main data source\n this.applyCategoryFilter(filterValue, categoryConfig);\n }\n\n protected clearCategoryFilter() {\n this.activeCategoryFilter.set(null);\n\n // Apply only base filters (without category filter)\n const baseFilters = this.config().filters;\n\n if (baseFilters) {\n this.config().dataSource.filter(baseFilters);\n } else {\n this.config().dataSource.clearFilter();\n }\n\n this.config().dataSource.refresh();\n }\n\n //#endregion\n\n //#region ---- Private Methods ----\n\n private applySearchFilter(searchTerm: string) {\n const searchFields = this.config().searchFields;\n if (!searchFields || searchFields.length === 0) {\n return;\n }\n\n const normalizedTerm = isNil(searchTerm) ? '' : `${searchTerm}`.trim();\n\n if (isEmpty(normalizedTerm)) {\n // Apply only base filters when search is cleared\n const baseFilters = this.config().filters;\n\n if (baseFilters) {\n this.config().dataSource.filter(baseFilters);\n } else {\n this.config().dataSource.clearFilter();\n }\n\n this.config().dataSource.refresh();\n return;\n }\n\n // Get base filters from config\n const baseFilters = this.config().filters;\n\n // Create search filters for all configured fields\n const searchFilters = searchFields.map((field) => ({\n field: field.name,\n value: normalizedTerm,\n operator: { type: 'contains' as const }\n }));\n\n const orFilter: AXDataSourceFilterOption = {\n field: null as any,\n logic: 'or',\n operator: null as any,\n filters: searchFilters\n };\n\n // Merge base filters with search filter\n const allFilters = baseFilters ? [baseFilters, orFilter] : [orFilter];\n\n const filter = {\n field: null as any,\n logic: 'and' as const,\n operator: null as any,\n filters: allFilters\n } as AXDataSourceFilterOption;\n\n // Apply filter to data source\n this.config().dataSource.filter(filter);\n this.config().dataSource.refresh();\n }\n\n private applyFilterAndSort() {\n // Apply base filters from config\n const baseFilters = this.config().filters;\n\n if (baseFilters) {\n this.config().dataSource.filter(baseFilters);\n this.config().dataSource.refresh();\n }\n }\n\n private applyCategoryFilter(filterValue: any, categoryConfig: any) {\n\n if (isNil(filterValue) || filterValue === 'root') {\n this.config().dataSource.clearFilter();\n this.config().dataSource.refresh();\n return;\n }\n\n // Get base filters from config\n const baseFilters = this.config().filters;\n\n // Create category filter\n const categoryFilter = {\n field: categoryConfig.filterField,\n value: filterValue,\n operator: { type: categoryConfig.filterOperator || 'contains' }\n };\n\n // Merge base filters with category filter\n const allFilters = baseFilters ? [baseFilters, categoryFilter] : [categoryFilter];\n\n const filter = {\n field: null as any,\n logic: 'and' as const,\n operator: null as any,\n filters: allFilters\n } as AXDataSourceFilterOption;\n\n // Apply filter to data source (adds to existing filters)\n this.config().dataSource.filter(filter);\n this.config().dataSource.refresh();\n }\n\n private async updateSearchPlaceholder(searchFields: { name: string; title: string }[] | undefined) {\n const updateToken = ++this.placeholderUpdateToken;\n\n if (!searchFields || searchFields.length === 0) {\n const fallback = await this.translationService.translateAsync('@general:actions.search.title');\n\n if (updateToken !== this.placeholderUpdateToken) {\n return;\n }\n\n const placeholder = fallback ? `${fallback}...` : '';\n this.searchPlaceholderText.set(placeholder);\n return;\n }\n\n const translatedFields = await Promise.all(\n searchFields.map(async (field) => {\n const translated = await this.translationService.translateAsync(field.title || field.name);\n return translated ?? field.title ?? field.name;\n })\n );\n\n //TODO: needs to extract base on columns\n const fieldsText = translatedFields\n .filter((value): value is string => Boolean(value && value.trim().length > 0))\n .join(', ') || searchFields.map((field) => field.title || field.name).join(', ');\n\n const placeholder = await this.translationService.translateAsync('@general:widgets.lookup.search.placeholder', {\n params: {\n fields: fieldsText\n }\n });\n\n if (updateToken !== this.placeholderUpdateToken) {\n return;\n }\n\n this.searchPlaceholderText.set(placeholder ?? `Search in ${fieldsText}...`);\n }\n\n /**\n * Apply initial selection based on selectedItemIds from config\n * Loads items by IDs using the data source's byKey method, then selects them in the grid\n */\n private async applyInitialSelection() {\n if (this.initialSelectionApplied || this.userHasInteracted) {\n return;\n }\n\n const selectedIds = this.config().selectedItemIds;\n if (!selectedIds || selectedIds.length === 0) {\n // No initial selection, so initialSelectedItems should be empty\n this.initialSelectedItems = [];\n this.initialSelectionApplied = true;\n return;\n }\n\n const grid = this.grid();\n if (!grid) {\n setTimeout(() => this.applyInitialSelection(), 100);\n return;\n }\n\n try {\n // Get the key field from data source\n const dataSource = this.config().dataSource;\n const dataSourceAny = dataSource as any;\n const keyField = dataSourceAny.config?.key || 'id';\n const byKeyMethod = dataSourceAny.config?.byKey;\n\n // First, try to find items in already loaded grid data\n const itemsToSelect: any[] = [];\n const maxAttempts = 10; // Try for up to 1 second (10 * 100ms)\n let attempts = 0;\n const missingIds: (string | number)[] = [];\n\n // Wait a bit for grid to initialize\n await new Promise(resolve => setTimeout(resolve, 200));\n\n while (attempts < maxAttempts) {\n if (this.userHasInteracted) {\n this.initialSelectionApplied = true;\n return;\n }\n\n // Get all rows from the grid (try different property names)\n const gridAny = grid as any;\n const allRows =\n gridAny.dataItems ||\n gridAny.items ||\n gridAny._dataItems ||\n gridAny.view?.dataItems ||\n gridAny.view?.items ||\n gridAny.dataSource?.data ||\n gridAny.dataSource?.items ||\n [];\n\n // If we have rows, try to find the items we need\n if (allRows.length > 0) {\n // Find rows that match the selected IDs\n selectedIds.forEach((id) => {\n const foundItem = allRows.find((row: any) => {\n const rowId = row[keyField];\n return String(id) === String(rowId);\n });\n\n if (foundItem) {\n // Check if we haven't already added this item\n if (!itemsToSelect.some(item => String(item[keyField]) === String(id))) {\n itemsToSelect.push(foundItem);\n }\n } else {\n // Track missing IDs\n if (!missingIds.includes(id) && !itemsToSelect.some(item => String(item[keyField]) === String(id))) {\n missingIds.push(id);\n }\n }\n });\n\n // If we found all items, break out of the loop\n if (itemsToSelect.length >= selectedIds.length) {\n break;\n }\n }\n\n await new Promise(resolve => setTimeout(resolve, 100));\n attempts++;\n }\n\n // If we have missing IDs and byKey method is available, load them from API\n if (missingIds.length > 0 && byKeyMethod && typeof byKeyMethod === 'function') {\n for (const id of missingIds) {\n try {\n const item = await byKeyMethod(id);\n if (item && !itemsToSelect.some(existing => String(existing[keyField]) === String(id))) {\n itemsToSelect.push(item);\n }\n } catch (error) {\n console.warn(`[DataSelector] Failed to load item with ID ${id}:`, error);\n }\n }\n }\n\n // Only mark as applied if we found items to select\n if (itemsToSelect.length > 0) {\n // Store initial selected items for later comparison\n this.initialSelectedItems = [...itemsToSelect];\n\n // Set flag to indicate we're applying initial selection\n this.isApplyingInitialSelection = true;\n\n try {\n // Update selectedItems signal first\n this.selectedItems.set(itemsToSelect);\n\n // Select the rows using the grid's selectRows method\n if (this.grid()?.selectRows) {\n if (itemsToSelect.length === 1) {\n this.grid()!.selectRows(itemsToSelect[0]);\n } else {\n this.grid()!.selectRows(...itemsToSelect);\n }\n }\n\n this.initialSelectionApplied = true;\n } finally {\n // Reset flag after a short delay to allow the event to process\n setTimeout(() => {\n this.isApplyingInitialSelection = false;\n }, 50);\n }\n } else {\n // No items found, mark as applied anyway to prevent infinite retries\n this.initialSelectionApplied = true;\n }\n } catch (error) {\n console.error('[DataSelector] Error applying initial selection:', error);\n this.isApplyingInitialSelection = false;\n this.initialSelectionApplied = true;\n }\n }\n\n //#endregion\n}\n","<div class=\"axp-data-selector\">\n <!-- Main Content Area -->\n <div class=\"axp-data-selector-content\" [class.with-category-filter]=\"config().categoryFilter?.enabled\">\n <!-- Category Filter Side Panel -->\n @if (config().categoryFilter?.enabled) {\n <div class=\"axp-category-filter-panel\" [style.width]=\"config().categoryFilter?.width || '300px'\">\n <axp-category-tree [dataSource]=\"config().categoryFilter!.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 <!-- TODO: needs to show checkbox for single selection mode too -->\n <ax-data-table #grid [showFooter]=\"false\" class=\"ax-h-[50vh]\" [paging]=\"true\"\n [loading]=\"{ enabled: true, animation: true }\" [dataSource]=\"config().dataSource\"\n [parentField]=\"config().parentField\" (selectedRowsChange)=\"handleSelectedRowsChange($event)\"\n (onRowClick)=\"handleRowClick($event)\" (onRowDbClick)=\"handleRowDbClick($event)\">\n @if (config().selectionMode === 'multiple') {\n <ax-select-column fixed=\"start\" [width]=\"'50px'\"></ax-select-column>\n }\n\n @for (col of config().columns; track col.name) {\n @if (col.visible) {\n <axp-widget-column-renderer [expandHandler]=\"$index === 0 && config().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 </ax-data-table>\n </div>\n </div>\n</div>\n\n<ax-footer>\n <ax-prefix>\n @if ((config().allowCreate === 'full' || config().allowCreate === 'quick') && config().onCreate) {\n <ax-button look=\"twotone\" color=\"primary\" [text]=\"'@general:actions.create.title' | translate | async\"\n (onClick)=\"handleCreateNewClick(config().allowCreate === '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 (config().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>","import { Injectable, inject, signal } from '@angular/core';\nimport { AXPopupService } from '@acorex/components/popup';\nimport { AXPDataSelectorConfig, AXPDataSelectorColumn } from './data-selector.component';\nimport { AXPCategoryTreeDataSource } from '../category-tree';\nimport { AXPExpressionEvaluatorService, AXPColumnWidthService, IColumnWithWidth } from '@acorex/platform/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AXPDataSelectorService {\n\n //#region ---- Services & Dependencies ----\n\n private readonly popupService = inject(AXPopupService);\n private readonly expressionService = inject(AXPExpressionEvaluatorService);\n private readonly columnWidthService = inject(AXPColumnWidthService);\n\n //#endregion\n\n //#region ---- Public Methods ----\n\n /**\n * Open data selector popup\n */\n async open(config: AXPDataSelectorConfig): Promise<{ items: any[] } | null> {\n const component = await import('./data-selector.component').then(c => c.AXPDataSelectorComponent);\n\n // Create a copy of config to avoid mutating the original\n const processedConfig = { ...config };\n\n // Evaluate filters if they exist\n if (processedConfig.filters) {\n processedConfig.filters = await this.expressionService.evaluate(processedConfig.filters);\n }\n\n // Apply column width resolution to all columns\n processedConfig.columns = this.applyColumnWidths(processedConfig.columns);\n\n const result = await this.popupService.open(component, {\n title: processedConfig.title,\n size: processedConfig.categoryFilter?.enabled ?\n 'lg'\n : (processedConfig.columns.length > 3 ? 'lg' : 'md'),\n data: {\n config: signal(processedConfig)\n }\n });\n\n return result.data || null;\n }\n\n\n /**\n * Open data selector with category filter\n */\n async openWithCategoryFilter(\n config: Omit<AXPDataSelectorConfig, 'categoryFilter'>,\n categoryFilterConfig: {\n title: string;\n dataSource: AXPCategoryTreeDataSource;\n filterField: string;\n filterOperator?: 'equal' | 'contains' | 'in';\n width?: string;\n }\n ): Promise<{ items: any[] } | null> {\n const enhancedConfig: AXPDataSelectorConfig = {\n ...config,\n categoryFilter: {\n enabled: true,\n ...categoryFilterConfig\n }\n };\n\n return this.open(enhancedConfig);\n }\n\n //#endregion\n\n //#region ---- Private Methods ----\n\n /**\n * Apply column width resolution to all columns using the column width service\n */\n private applyColumnWidths(columns: AXPDataSelectorColumn[]): AXPDataSelectorColumn[] {\n return columns.map((column) => {\n // Skip if column already has a width\n if (column.width) {\n return column;\n }\n\n // Convert to IColumnWithWidth interface for width resolution\n const columnWithWidth: IColumnWithWidth = {\n name: column.name,\n width: column.width,\n widget: {\n type: column.widget.type,\n },\n };\n\n // Resolve width using column width service\n const resolvedWidth = this.columnWidthService.resolveWidth(columnWithWidth);\n if (resolvedWidth) {\n return {\n ...column,\n width: resolvedWidth,\n };\n }\n\n return column;\n });\n }\n\n //#endregion\n}\n","import { InjectionToken } from '@angular/core';\nimport { AXPPageComponentProvider } from './page-component-registry.types';\n\n//#region ---- Injection Token ----\n\n/**\n * Injection token for page component providers\n * Use with multi: true to register multiple providers\n *\n * @example\n * ```typescript\n * providers: [\n * {\n * provide: AXP_PAGE_COMPONENT_PROVIDER,\n * useClass: MyPageComponentProvider,\n * multi: true,\n * }\n * ]\n * ```\n */\nexport const AXP_PAGE_COMPONENT_PROVIDER = new InjectionToken<AXPPageComponentProvider[]>(\n 'AXP_PAGE_COMPONENT_PROVIDER',\n);\n\n//#endregion\n\n","import { inject, Injectable, Type } from '@angular/core';\nimport { set } from 'lodash-es';\nimport { AXP_PAGE_COMPONENT_PROVIDER } from './page-component-registry.token';\nimport { AXPPageComponentDefinition } from './page-component-registry.types';\n\n//#region ---- Registry Service ----\n\n/**\n * Service for managing page components from multiple providers\n * Similar to AXPDataSourceDefinitionProviderService pattern\n *\n * @example\n * ```typescript\n * // In a module providers array:\n * {\n * provide: AXP_PAGE_COMPONENT_PROVIDER,\n * useClass: MyPageComponentProvider,\n * multi: true,\n * }\n *\n * // Example provider implementation:\n * export class MyPageComponentProvider implements AXPPageComponentProvider {\n * async components(): Promise<AXPPageComponentDefinition[]> {\n * return [\n * {\n * key: 'my-custom-page',\n * loader: () => import('./my-page.component').then(m => m.MyPageComponent),\n * },\n * ];\n * }\n * }\n *\n * // Later, get the component loader:\n * const loader = await pageComponentService.find('my-custom-page');\n * if (loader) {\n * const ComponentType = await loader();\n * // Use ComponentType\n * }\n * ```\n */\n@Injectable({ providedIn: 'root' })\nexport class AXPPageComponentRegistryService {\n private providers = inject(AXP_PAGE_COMPONENT_PROVIDER, { optional: true });\n\n /**\n * Get all component definitions from all providers\n */\n async components(): Promise<AXPPageComponentDefinition[]> {\n const components: AXPPageComponentDefinition[] = [];\n\n // Load from DI tokens; resolve lazy providers (provideLazyProvider uses useFactory that returns Promise<T>)\n if (Array.isArray(this.providers)) {\n for (const raw of this.providers) {\n const provider = await Promise.resolve(raw);\n if (provider && typeof provider.components === 'function') {\n set(provider, '__parent__', this);\n components.push(...(await provider.components()));\n }\n }\n }\n\n return components;\n }\n\n /**\n * Find a component loader by key\n */\n async find(key: string): Promise<(() => Type<any> | Promise<Type<any>>) | undefined> {\n const components = await this.components();\n const definition = components.find((c) => c.key === key);\n return definition?.loader;\n }\n\n /**\n * Check if a component exists by key\n */\n async exists(key: string): Promise<boolean> {\n const components = await this.components();\n return components.some((c) => c.key === key);\n }\n\n /**\n * Get all registered component keys\n */\n async getAll(): Promise<string[]> {\n const components = await this.components();\n return components.map((c) => c.key);\n }\n}\n\n//#endregion\n","import { Type } from '@angular/core';\n\n//#region ---- Component Definition ----\n\n/**\n * Definition for a page component that can be registered and loaded dynamically\n */\nexport interface AXPPageComponentDefinition {\n /**\n * Unique key to identify the component\n */\n key: string;\n\n /**\n * Loader function that returns the component type (supports lazy loading)\n */\n loader: () => Type<any> | Promise<Type<any>>;\n}\n\n//#endregion\n\n//#region ---- Provider Interface ----\n\n/**\n * Provider interface for registering page components\n * Similar to AXPDataSourceDefinitionProvider pattern\n */\nexport interface AXPPageComponentProvider {\n /**\n * Returns all component definitions provided by this provider\n */\n components(): Promise<AXPPageComponentDefinition[]>;\n}\n\n//#endregion\n","import {\n AXDragDirective,\n AXDragHandleDirective,\n AXDropListDirective,\n AXDropListDroppedEvent,\n moveItemInArray,\n} from '@acorex/cdk/drag-drop';\n\nimport { ChangeDetectionStrategy, Component, ViewEncapsulation, input, model, output } from '@angular/core';\nimport { AXPDragDropListItem } from './drag-drop-list.type';\n\n@Component({\n selector: 'axp-drag-drop-list',\n standalone: true,\n imports: [AXDragDirective, AXDragHandleDirective, AXDropListDirective],\n templateUrl: './drag-drop-list.component.html',\n styleUrls: ['./drag-drop-list.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'axp-drag-drop-list',\n },\n})\nexport class AXPDragDropListComponent {\n // Inputs\n items = model<AXPDragDropListItem[]>([]);\n listId = input<string>('');\n dropListGroup = input<string>('');\n orientation = input<'vertical' | 'horizontal'>('vertical');\n emptyMessage = input<string>('No items');\n disable = input<boolean>(false);\n\n // Outputs\n itemClick = output<AXPDragDropListItem>();\n dropListDropped = output<AXDropListDroppedEvent>();\n\n // Drag and drop handler - handles both reorder and transfer\n onDrop(event: AXDropListDroppedEvent): void {\n // Emit event for parent component\n this.dropListDropped.emit(event);\n\n // Handle reorder within same list automatically\n if (event.previousContainer === event.container) {\n const itemsCopy = [...this.items()];\n moveItemInArray(itemsCopy, event.previousIndex, event.currentIndex);\n this.items.set(itemsCopy);\n }\n // Transfers between lists are handled by parent component via the event\n }\n\n onItemClick(item: AXPDragDropListItem): void {\n if (!item.disabled) {\n this.itemClick.emit(item);\n }\n }\n}\n","<div\n class=\"axp-drag-drop-list-container ax-divide-y\"\n [attr.id]=\"listId()\"\n [attr.data-orientation]=\"orientation()\"\n axDropList\n [dropListGroup]=\"dropListGroup()\"\n [dropListOrientation]=\"orientation()\"\n (dropListDropped)=\"onDrop($event)\"\n [sortingDisabled]=\"disable()\"\n>\n @if (items().length === 0) {\n <div class=\"axp-drag-drop-list-empty\">\n <span class=\"axp-drag-drop-list-empty-message\">{{ emptyMessage() }}</span>\n </div>\n }\n\n @for (item of items(); track item.id; let i = $index) {\n <div\n class=\"axp-drag-drop-list-item\"\n [class.axp-drag-drop-list-item-disabled]=\"item.disabled\"\n [class]=\"item.cssClass\"\n axDrag\n [dragDisabled]=\"item.disabled || false\"\n (click)=\"onItemClick(item)\"\n >\n <div class=\"axp-drag-drop-list-item-handle\" axDragHandle>\n <i class=\"fa-solid fa-bars\"></i>\n </div>\n\n <div class=\"axp-drag-drop-list-item-content\">\n {{ item.content }}\n </div>\n </div>\n }\n</div>\n","/**\n * Shared types for expression builders (expression-builder, sort-builder, group-builder, etc.)\n */\n\n/** Unique identifier for expression nodes */\nexport type AXPExpressionNodeId = string;\n\n/** Logical operator type (AND, OR, etc.) */\nexport type AXPExpressionLogicType = 'and' | 'or' | 'not';\n\n/** Operation type (add, multiply, equal, etc.) */\nexport type AXPExpressionOperationType = string;\n\n/** Value source type (literal, field, parameter, etc.) */\nexport type AXPExpressionValueSourceType = 'literal' | 'field' | 'parameter';\n\n/** Field definition for value selectors */\nexport interface AXPExpressionFieldDefinition {\n id: string;\n title: string;\n dataType?: string;\n path?: string;\n /** Optional: for nested/related fields */\n children?: AXPExpressionFieldDefinition[];\n}\n\n/** Value operand in an expression */\nexport interface AXPExpressionValueOperand {\n sourceType: AXPExpressionValueSourceType;\n /** For field: field id; for literal: the value; for parameter: param key */\n value?: unknown;\n fieldId?: string;\n}\n\n/** Single operation node (leftOperand operator rightOperand) */\nexport interface AXPExpressionOperationNode {\n id: AXPExpressionNodeId;\n type: 'operation';\n operator: AXPExpressionOperationType;\n leftOperand: AXPExpressionValueOperand;\n rightOperand: AXPExpressionValueOperand;\n order?: number;\n}\n\n/** Group of operations with logical connective */\nexport interface AXPExpressionGroupNode {\n id: AXPExpressionNodeId;\n type: 'group';\n logic: AXPExpressionLogicType;\n children: AXPExpressionNode[];\n order?: number;\n}\n\n/** Union of expression node types */\nexport type AXPExpressionNode = AXPExpressionOperationNode | AXPExpressionGroupNode;\n\n/** Root expression tree */\nexport interface AXPExpressionTree {\n id: AXPExpressionNodeId;\n logic: AXPExpressionLogicType;\n children: AXPExpressionNode[];\n}\n","/**\n * Field definitions for expression builders.\n * Used by expression-builder, sort-builder, group-builder for value/field selection.\n */\n\nimport type { AXPExpressionFieldDefinition } from './expression-builder.types';\n\n/** Registry of available field definitions per context */\nexport const AXPExpressionFieldDefinitions: Record<string, AXPExpressionFieldDefinition[]> = {};\n\n/** Add field definitions for a given context */\nexport function registerFieldDefinitions(\n context: string,\n fields: AXPExpressionFieldDefinition[]\n): void {\n AXPExpressionFieldDefinitions[context] = fields;\n}\n\n/** Get field definitions for a context */\nexport function getFieldDefinitions(context: string): AXPExpressionFieldDefinition[] {\n return AXPExpressionFieldDefinitions[context] ?? [];\n}\n","/**\n * Logic operator definitions (AND, OR, NOT) for expression groups.\n */\n\nimport type { AXPExpressionLogicType } from './expression-builder.types';\n\nexport interface AXPExpressionLogicDefinition {\n value: AXPExpressionLogicType;\n text: string;\n /** Optional icon/key for UI */\n icon?: string;\n}\n\nexport const AXP_EXPRESSION_LOGIC_DEFINITIONS: AXPExpressionLogicDefinition[] = [\n { value: 'and', text: 'And' },\n { value: 'or', text: 'Or' },\n { value: 'not', text: 'Not' },\n];\n\nexport function getLogicDefinition(logic: AXPExpressionLogicType): AXPExpressionLogicDefinition | undefined {\n return AXP_EXPRESSION_LOGIC_DEFINITIONS.find((d) => d.value === logic);\n}\n","/**\n * Operation definitions (arithmetic, comparison, logical) for expression builder.\n */\n\nimport type { AXPExpressionOperationType } from './expression-builder.types';\n\nexport interface AXPExpressionOperationDefinition {\n value: AXPExpressionOperationType;\n text: string;\n /** Optional icon/symbol for UI */\n symbol?: string;\n /** Category for grouping in UI */\n category?: 'arithmetic' | 'comparison' | 'logical' | 'string';\n}\n\n/** Arithmetic operations */\nconst ARITHMETIC: AXPExpressionOperationDefinition[] = [\n { value: 'add', text: 'Add', symbol: '+', category: 'arithmetic' },\n { value: 'subtract', text: 'Subtract', symbol: '−', category: 'arithmetic' },\n { value: 'multiply', text: 'Multiply', symbol: '×', category: 'arithmetic' },\n { value: 'divide', text: 'Divide', symbol: '÷', category: 'arithmetic' },\n];\n\n/** Comparison operations */\nconst COMPARISON: AXPExpressionOperationDefinition[] = [\n { value: 'equal', text: 'Equal', symbol: '=', category: 'comparison' },\n { value: 'notEqual', text: 'Not equal', symbol: '≠', category: 'comparison' },\n { value: 'greaterThan', text: 'Greater than', symbol: '>', category: 'comparison' },\n { value: 'lessThan', text: 'Less than', symbol: '<', category: 'comparison' },\n { value: 'greaterOrEqual', text: 'Greater or equal', symbol: '≥', category: 'comparison' },\n { value: 'lessOrEqual', text: 'Less or equal', symbol: '≤', category: 'comparison' },\n];\n\nexport const AXP_EXPRESSION_OPERATION_DEFINITIONS: AXPExpressionOperationDefinition[] = [\n ...ARITHMETIC,\n ...COMPARISON,\n];\n\nexport function getOperationDefinition(\n operation: AXPExpressionOperationType\n): AXPExpressionOperationDefinition | undefined {\n return AXP_EXPRESSION_OPERATION_DEFINITIONS.find((d) => d.value === operation);\n}\n","//#region ---- Imports ----\n\nimport { AXDataSourceOperator, AXValueChangedEvent } from '@acorex/cdk/common';\nimport { AXCheckBoxModule } from '@acorex/components/check-box';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXLabelModule } from '@acorex/components/label';\nimport { AXSelectBoxModule } from '@acorex/components/select-box';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPFilterClause, AXPFilterDefinition } from '@acorex/platform/core';\nimport { AXPWidgetCoreModule, AXPWidgetNode } from '@acorex/platform/layout/widget-core';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n input,\n OnInit,\n output,\n signal,\n untracked,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\n//#endregion\n\n//#region ---- Interfaces ----\n\n/**\n * Selected field data emitted when condition changes\n */\nexport type ConditionBuilderSelectedField = {\n id: string;\n field: string;\n operator: AXDataSourceOperator['type'];\n value: unknown;\n isParametric?: boolean;\n};\n\n//#endregion\n\n//#region ---- Component ----\n\n@Component({\n selector: 'axp-condition-builder-condition',\n templateUrl: './condition-builder-condition.component.html',\n styleUrl: './condition-builder-condition.component.scss',\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n AXSelectBoxModule,\n AXDecoratorModule,\n AXCheckBoxModule,\n AXLabelModule,\n AXPWidgetCoreModule,\n AXTranslationModule,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXPConditionBuilderConditionComponent implements OnInit {\n //#region ---- Inputs / Outputs ----\n\n item = input.required<AXPFilterClause>();\n filterDefinitions = input<AXPFilterDefinition[]>([]);\n onResolveWidget = input<(fieldId: string) => string>();\n showFillByUser = input<boolean>(false);\n\n itemChange = output<ConditionBuilderSelectedField>();\n removeItem = output<string>();\n\n //#endregion\n\n //#region ---- Signals ----\n\n protected selectedField = signal<ConditionBuilderSelectedField | null>(null);\n\n protected filterNode = signal<AXPWidgetNode>({\n name: 'filter',\n path: 'filter',\n type: 'string-filter',\n mode: 'edit',\n options: {},\n });\n\n protected context = signal<Record<string, unknown>>({\n filter: {\n value: undefined,\n operation: { type: 'equal' },\n },\n });\n\n protected readonly availableFields = computed(() => {\n return this.filterDefinitions().map((def) => ({\n value: def.field,\n text: def.title,\n definition: def,\n }));\n });\n\n protected readonly currentFilterDefinition = computed(() => {\n const fieldId = this.selectedField()?.field;\n if (!fieldId) return undefined;\n return this.filterDefinitions().find((def) => def.field === fieldId);\n });\n\n protected readonly selectedFieldValue = computed(() => this.selectedField()?.field ?? '');\n\n //#endregion\n\n //#region ---- Lifecycle Methods ----\n\n ngOnInit(): void {\n const it = this.item();\n console.debug('[AXPConditionBuilderCondition] ngOnInit', {\n item: it,\n field: it?.field,\n value: it?.value,\n });\n this.selectedField.set({\n id: it?.id ?? '',\n field: it?.field ?? '',\n operator: it?.operator?.type ?? 'equal',\n value: it?.value ?? undefined,\n isParametric: (it as { isParametric?: boolean })?.isParametric ?? false,\n });\n this.updateFilterWidgetNode();\n this.updateContext();\n }\n\n constructor() {\n effect(() => {\n const it = this.item();\n const prev = untracked(() => this.selectedField());\n console.debug('[AXPConditionBuilderCondition] effect item changed', {\n item: it,\n prevField: prev?.field,\n prevValue: prev?.value,\n });\n if (it && (it.field !== prev?.field || it.value !== prev?.value)) {\n this.selectedField.set({\n id: it?.id ?? '',\n field: it?.field ?? '',\n operator: it?.operator?.type ?? 'equal',\n value: it?.value ?? undefined,\n isParametric: (it as { isParametric?: boolean })?.isParametric ?? false,\n });\n this.updateFilterWidgetNode();\n }\n });\n }\n\n //#endregion\n\n //#region ---- Private Methods ----\n\n private updateFilterWidgetNode(): void {\n const fieldId = this.selectedField()?.field;\n if (!fieldId) {\n this.filterNode.set({\n name: 'filter',\n path: 'filter',\n type: 'string-filter',\n mode: 'edit',\n options: {},\n });\n return;\n }\n\n const filterDef = this.currentFilterDefinition();\n if (!filterDef) return;\n\n const resolver = this.onResolveWidget();\n let widgetType = 'string-filter';\n if (resolver) {\n widgetType = resolver(fieldId);\n } else if (filterDef.widget?.type) {\n widgetType = filterDef.widget.type;\n }\n\n this.filterNode.set({\n name: 'filter',\n path: 'filter',\n type: widgetType,\n mode: 'edit',\n options: {\n ...filterDef.widget?.options,\n clearButton: true,\n hasClearButton: true,\n },\n });\n }\n\n private updateContext(): void {\n const selected = this.selectedField();\n this.context.set({\n filter: {\n value: selected?.value,\n operation: { type: selected?.operator ?? 'equal' },\n },\n });\n }\n\n //#endregion\n\n //#region ---- Event Handlers ----\n\n onFieldChange(event: AXValueChangedEvent): void {\n const fieldId = event.value as string;\n const filterDef = this.filterDefinitions().find((def) => def.field === fieldId);\n\n this.selectedField.update(\n (prev) =>\n ({\n ...prev,\n field: fieldId,\n operator: filterDef?.operator?.type ?? 'equal',\n value: undefined,\n isParametric: prev?.isParametric ?? false,\n }) as ConditionBuilderSelectedField,\n );\n\n this.updateFilterWidgetNode();\n // this.updateContext();\n // this.itemChange.emit(this.selectedField()!);\n }\n\n onContextChange(event: { data?: { filter?: { value?: unknown; operation?: { type?: string } } } }): void {\n console.log({ event });\n const filterData = event.data?.filter;\n if (!filterData) return;\n\n this.selectedField.update(\n (prev) =>\n ({\n ...prev,\n operator: filterData.operation?.type ?? prev?.operator ?? 'equal',\n value: filterData.value,\n }) as ConditionBuilderSelectedField,\n );\n\n this.updateContext();\n this.itemChange.emit(this.selectedField()!);\n }\n\n onFillByUserChange(checked: boolean): void {\n this.selectedField.update(\n (prev) =>\n ({\n ...prev,\n isParametric: checked,\n }) as ConditionBuilderSelectedField,\n );\n this.itemChange.emit(this.selectedField()!);\n }\n\n onRemoveClick(): void {\n this.removeItem.emit(this.item().id ?? '');\n }\n\n //#endregion\n}\n\n//#endregion\n","<div class=\"__condition-row\">\n <div class=\"__item-content\">\n <!-- Field Selector -->\n <div class=\"__field-selector\">\n <ax-select-box\n class=\"ax-sm\"\n [dataSource]=\"availableFields()\"\n [ngModel]=\"selectedFieldValue()\"\n (onValueChanged)=\"onFieldChange($event)\"\n valueField=\"value\"\n textField=\"text\"\n [placeholder]=\"('@data-management:metadata-definitions.components.query-builder.condition.select-field' | translate | async) || 'Select a field'\"\n [look]=\"'outline'\">\n </ax-select-box>\n </div>\n\n <!-- Filter Widget (Operator + Value) -->\n <div class=\"__operator-selector\">\n @if (selectedField()?.field && filterNode().type) {\n <axp-widgets-container\n class=\"__filter-widget-container\"\n [context]=\"context()\"\n (onContextChanged)=\"onContextChange($event)\">\n <ng-container axp-widget-renderer [node]=\"filterNode()\" [mode]=\"'edit'\">\n </ng-container>\n </axp-widgets-container>\n } @else {\n <div class=\"__filter-placeholder\">\n <span class=\"__placeholder-text\">{{\n ('@data-management:metadata-definitions.components.query-builder.condition.select-field-first' | translate | async) || 'Select a field first'\n }}</span>\n </div>\n }\n </div>\n\n <!-- Fill By User (optional) -->\n @if (showFillByUser()) {\n <div class=\"__fill-by-user\">\n <ax-check-box\n class=\"ax-text-xs\"\n [ngModel]=\"selectedField()?.isParametric\"\n (ngModelChange)=\"onFillByUserChange($event)\">\n <ax-label>\n {{ '@data-management:metadata-definitions.components.query-builder.condition.fill-by-user' | translate | async }}\n </ax-label>\n </ax-check-box>\n </div>\n }\n </div>\n</div>\n","//#region ---- Imports ----\n\nimport { AXPFilterClause, AXPFilterDefinition } from '@acorex/platform/core';\nimport { AXFilterLogic } from '@acorex/cdk/common';\nimport {\n AXDragDirective,\n AXDragHandleDirective,\n AXDropListDirective,\n AXDropListDroppedEvent,\n moveItemInArray,\n} from '@acorex/cdk/drag-drop';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDropdownButtonModule } from '@acorex/components/dropdown-button';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPWidgetRegistryService } from '@acorex/platform/layout/widget-core';\nimport {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n ElementRef,\n effect,\n inject,\n input,\n output,\n PLATFORM_ID,\n signal,\n untracked,\n} from '@angular/core';\nimport { CommonModule, isPlatformBrowser } from '@angular/common';\nimport {\n AXPConditionBuilderConditionComponent,\n ConditionBuilderSelectedField,\n} from './condition-builder-condition.component';\n\n//#endregion\n\n//#region ---- Component ----\n\n/**\n * Generic condition builder component.\n * Builds AXPFilterClause (logic/filters, field/operator/value) for use in outcome rules,\n * outcome actions, query builders, etc.\n *\n * Same structure as axp-where-builder: groups, AND/OR logic, add condition/group, drag-drop, move/remove.\n */\n@Component({\n selector: 'axp-condition-builder',\n templateUrl: './condition-builder.component.html',\n styleUrl: './condition-builder.component.scss',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n AXButtonModule,\n AXDropdownButtonModule,\n AXDecoratorModule,\n AXDragDirective,\n AXDragHandleDirective,\n AXDropListDirective,\n AXPConditionBuilderConditionComponent,\n AXTranslationModule,\n ],\n})\nexport class AXPConditionBuilderComponent {\n //#region ---- Services & Dependencies ----\n\n private readonly widgetRegistry = inject(AXPWidgetRegistryService);\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly destroyRef = inject(DestroyRef);\n private readonly platformId = inject(PLATFORM_ID);\n private readonly isBrowser = isPlatformBrowser(this.platformId);\n\n //#endregion\n\n //#region ---- Inputs / Outputs ----\n\n value = input<AXPFilterClause>({\n id: 'root',\n logic: 'and',\n filters: [],\n });\n\n filterDefinitions = input<AXPFilterDefinition[]>([]);\n\n /** When true, show \"Fill by user\" checkbox on each condition (e.g. for query parameters) */\n showFillByUser = input<boolean>(false);\n\n valueChange = output<AXPFilterClause>();\n\n //#endregion\n\n //#region ---- Signals ----\n\n protected queryData = signal<AXPFilterClause>({\n id: 'root',\n logic: 'and',\n filters: [],\n });\n\n protected readonly logicalOperatorsItems = [\n { value: 'and' as AXFilterLogic, text: 'And' },\n { value: 'or' as AXFilterLogic, text: 'Or' },\n ];\n\n protected getLogicDisplayText(logic: AXFilterLogic | undefined): string {\n return this.logicalOperatorsItems.find((o) => o.value === logic)?.text ?? 'And';\n }\n\n //#endregion\n\n //#region ---- Connector Layout ----\n\n private connectorLayoutRafId: number | null = null;\n private connectorResizeObserver: ResizeObserver | null = null;\n\n private initConnectorAutoLayout(): void {\n if (!this.isBrowser) return;\n const RO = (globalThis as { ResizeObserver?: typeof ResizeObserver }).ResizeObserver;\n if (!RO) {\n this.scheduleConnectorLayoutUpdate();\n return;\n }\n this.connectorResizeObserver = new RO(() => this.scheduleConnectorLayoutUpdate());\n this.connectorResizeObserver.observe(this.elementRef.nativeElement);\n this.destroyRef.onDestroy(() => {\n this.connectorResizeObserver?.disconnect();\n this.connectorResizeObserver = null;\n if (this.connectorLayoutRafId !== null) {\n cancelAnimationFrame(this.connectorLayoutRafId);\n this.connectorLayoutRafId = null;\n }\n });\n this.scheduleConnectorLayoutUpdate();\n }\n\n private scheduleConnectorLayoutUpdate(): void {\n if (!this.isBrowser) return;\n if (this.connectorLayoutRafId !== null) return;\n this.connectorLayoutRafId = requestAnimationFrame(() => {\n this.connectorLayoutRafId = null;\n this.updateConnectorCssVars();\n });\n }\n\n private updateConnectorCssVars(): void {\n const root = this.elementRef.nativeElement;\n const groups = Array.from(root.querySelectorAll<HTMLElement>('.__group'));\n for (const groupEl of groups) {\n const connectorEl = groupEl.querySelector<HTMLElement>('.__group-wrapper > .__group-connector');\n const conditionsEl = groupEl.querySelector<HTMLElement>('.__group-wrapper > .__conditions-container');\n if (!connectorEl || !conditionsEl) continue;\n const rows = Array.from(\n conditionsEl.querySelectorAll<HTMLElement>(\n ':scope > .__condition-item:not(.ax-drag-placeholder), :scope > .__group-empty'\n )\n );\n if (rows.length < 2) {\n groupEl.style.removeProperty('--qb-connector-top');\n groupEl.style.removeProperty('--qb-connector-bottom');\n continue;\n }\n const connectorRect = connectorEl.getBoundingClientRect();\n const firstRect = rows[0].getBoundingClientRect();\n const lastRect = rows[rows.length - 1].getBoundingClientRect();\n const firstCenterY = firstRect.top + firstRect.height / 2;\n const lastCenterY = lastRect.top + lastRect.height / 2;\n const topInset = Math.max(0, firstCenterY - connectorRect.top);\n const bottomInset = Math.max(0, connectorRect.bottom - lastCenterY);\n groupEl.style.setProperty('--qb-connector-top', `${topInset}px`);\n groupEl.style.setProperty('--qb-connector-bottom', `${bottomInset}px`);\n }\n }\n\n //#endregion\n\n //#region ---- Lifecycle ----\n\n constructor() {\n const initialValue = this.value();\n const normalized = this.normalizeOrder(initialValue ?? { id: 'root', logic: 'and', filters: [] });\n this.queryData.set(normalized);\n console.debug('[AXPConditionBuilder] constructor', {\n initialValue,\n normalizedFiltersCount: normalized?.filters?.length ?? 0,\n normalized,\n });\n\n let lastEmittedValue: AXPFilterClause | null = null;\n\n effect(() => {\n const val = this.value();\n const currentData = untracked(() => this.queryData());\n const incomingStr = val ? JSON.stringify(val) : null;\n const currentStr = JSON.stringify(currentData);\n const lastStr = lastEmittedValue ? JSON.stringify(lastEmittedValue) : null;\n const shouldUpdate = val && incomingStr !== currentStr && incomingStr !== lastStr;\n console.debug('[AXPConditionBuilder] effect value sync', {\n hasVal: !!val,\n filtersCount: val?.filters?.length ?? 0,\n shouldUpdate,\n });\n if (shouldUpdate) {\n this.queryData.set(this.normalizeOrder(val));\n }\n });\n\n effect(() => {\n this.queryData();\n this.scheduleConnectorLayoutUpdate();\n });\n\n afterNextRender(() => this.initConnectorAutoLayout());\n }\n\n //#endregion\n\n //#region ---- Private Helpers ----\n\n private generateId(): string {\n return Math.random().toString(36).substring(2, 11);\n }\n\n private updateValue(): void {\n const data = this.queryData();\n this.valueChange.emit(data);\n }\n\n private normalizeOrder(data: AXPFilterClause): AXPFilterClause {\n const normalizeFilters = (filters: AXPFilterClause[]): AXPFilterClause[] => {\n const withOrder = filters.map((filter, index) => {\n const normalized = {\n ...filter,\n id: filter.id ?? this.generateId(),\n order: filter.order ?? index,\n };\n if (normalized.filters && normalized.filters.length) {\n return { ...normalized, filters: normalizeFilters(normalized.filters) };\n }\n return normalized;\n });\n return withOrder.sort((a, b) => (a.order ?? 0) - (b.order ?? 0));\n };\n return {\n ...data,\n id: data.id ?? 'root',\n order: data.order ?? 0,\n filters: normalizeFilters(data.filters ?? []),\n };\n }\n\n protected getSortedFilters(filters: AXPFilterClause[]): AXPFilterClause[] {\n return [...filters].sort((a, b) => (a.order ?? 0) - (b.order ?? 0));\n }\n\n private findGroupById(id: string, node: AXPFilterClause = this.queryData()): AXPFilterClause | null {\n if (node.id === id && Array.isArray(node.filters)) return node;\n if (node.filters) {\n for (const child of node.filters) {\n const found = this.findGroupById(id, child);\n if (found) return found;\n }\n }\n return null;\n }\n\n protected getFilterDefinition(fieldId: string): AXPFilterDefinition | undefined {\n return this.filterDefinitions().find((def) => def.field === fieldId);\n }\n\n resolveDefaultFilterWidget(fieldId: string): string {\n const filterDef = this.getFilterDefinition(fieldId);\n if (!filterDef) return 'string-filter';\n try {\n const widgetConfig = this.widgetRegistry.resolve(filterDef.widget.type);\n return widgetConfig?.defaultFilterWidgetName || filterDef.widget.type || 'string-filter';\n } catch {\n return filterDef.widget.type || 'string-filter';\n }\n }\n\n //#endregion\n\n //#region ---- Public Methods ----\n\n addConditionToGroup(groupId: string): void {\n this.queryData.update((data) => {\n const findGroup = (node: AXPFilterClause): AXPFilterClause | null => {\n if (node.id === groupId && Array.isArray(node.filters)) return node;\n if (node.filters) {\n for (const child of node.filters) {\n const found = findGroup(child);\n if (found) return found;\n }\n }\n return null;\n };\n\n const targetGroup = data.id === groupId ? data : findGroup(data);\n const currentOrder = targetGroup?.filters?.length ?? 0;\n\n const newCondition: AXPFilterClause = {\n id: this.generateId(),\n field: '',\n value: undefined,\n operator: { type: 'equal' },\n order: currentOrder,\n };\n\n if (data.id === groupId) {\n return { ...data, filters: [...(data.filters ?? []), newCondition] };\n }\n\n const updateNode = (node: AXPFilterClause): AXPFilterClause => {\n if (node.id === groupId && Array.isArray(node.filters)) {\n return { ...node, filters: [...node.filters, newCondition] };\n }\n if (node.filters) return { ...node, filters: node.filters.map(updateNode) };\n return node;\n };\n\n return { ...data, filters: updateNode(data).filters ?? [] };\n });\n this.updateValue();\n }\n\n addGroupToGroup(parentGroupId: string): void {\n this.queryData.update((data) => {\n const findGroup = (node: AXPFilterClause): AXPFilterClause | null => {\n if (node.id === parentGroupId && Array.isArray(node.filters)) return node;\n if (node.filters) {\n for (const child of node.filters) {\n const found = findGroup(child);\n if (found) return found;\n }\n }\n return null;\n };\n\n const targetGroup = data.id === parentGroupId ? data : findGroup(data);\n const currentOrder = targetGroup?.filters?.length ?? 0;\n\n const newGroup: AXPFilterClause = {\n id: this.generateId(),\n logic: 'and',\n filters: [],\n order: currentOrder,\n };\n\n if (data.id === parentGroupId) {\n return { ...data, filters: [...(data.filters ?? []), newGroup] };\n }\n\n const updateNode = (node: AXPFilterClause): AXPFilterClause => {\n if (node.id === parentGroupId && Array.isArray(node.filters)) {\n return { ...node, filters: [...node.filters, newGroup] };\n }\n if (node.filters) return { ...node, filters: node.filters.map(updateNode) };\n return node;\n };\n\n return { ...data, filters: updateNode(data).filters ?? [] };\n });\n this.updateValue();\n }\n\n removeItem(id: string): void {\n this.queryData.update((data) => {\n const removeFromFilters = (filters: AXPFilterClause[]): AXPFilterClause[] =>\n filters\n .filter((f) => f.id !== id)\n .map((f) => ({ ...f, filters: f.filters ? removeFromFilters(f.filters) : f.filters }));\n return { ...data, filters: removeFromFilters(data.filters ?? []) };\n });\n this.updateValue();\n }\n\n updateCondition(condition: ConditionBuilderSelectedField): void {\n this.queryData.update((data) => {\n const updateFilters = (filters: AXPFilterClause[]): AXPFilterClause[] =>\n filters.map((f) => {\n if (f.id === condition.id) {\n return {\n ...f,\n field: condition.field,\n operator: { type: condition.operator },\n value: condition.value,\n isParametric: condition.isParametric,\n };\n }\n if (f.filters) return { ...f, filters: updateFilters(f.filters) };\n return f;\n });\n return { ...data, filters: updateFilters(data.filters ?? []) };\n });\n this.updateValue();\n }\n\n updateGroupLogicalOperator(groupId: string, operator: AXFilterLogic): void {\n this.queryData.update((data) => {\n if (data.id === groupId) return { ...data, logic: operator };\n const updateFilters = (filters: AXPFilterClause[]): AXPFilterClause[] =>\n filters.map((f) => {\n if (f.id === groupId && f.filters) return { ...f, logic: operator };\n if (f.filters) return { ...f, filters: updateFilters(f.filters) };\n return f;\n });\n return { ...data, filters: updateFilters(data.filters ?? []) };\n });\n this.updateValue();\n }\n\n reorderGroupItemsEvent(groupId: string, event: AXDropListDroppedEvent): void {\n this.reorderGroupItems(groupId, event.previousIndex, event.currentIndex);\n }\n\n reorderGroupItems(groupId: string, previousIndex: number, currentIndex: number): void {\n this.queryData.update((data) => {\n if (data.id === groupId) {\n const filters = [...(data.filters ?? [])];\n moveItemInArray(filters, previousIndex, currentIndex);\n return {\n ...data,\n filters: filters.map((f, i) => ({ ...f, order: i })),\n };\n }\n const updateFilters = (filters: AXPFilterClause[]): AXPFilterClause[] =>\n filters.map((f) => {\n if (f.id === groupId && f.filters) {\n const groupFilters = [...f.filters];\n moveItemInArray(groupFilters, previousIndex, currentIndex);\n return { ...f, filters: groupFilters.map((item, i) => ({ ...item, order: i })) };\n }\n if (f.filters) return { ...f, filters: updateFilters(f.filters) };\n return f;\n });\n return { ...data, filters: updateFilters(data.filters ?? []) };\n });\n this.updateValue();\n }\n\n //#endregion\n}\n\n//#endregion\n","<div class=\"axp-condition-builder\">\n <div class=\"__content\">\n <ng-container [ngTemplateOutlet]=\"groupTemplate\"\n [ngTemplateOutletContext]=\"{ group: queryData(), isRoot: true }\"></ng-container>\n </div>\n</div>\n\n<ng-template #groupTemplate let-group=\"group\" let-isRoot=\"isRoot\">\n <div class=\"__group\" [class.__root-group]=\"isRoot\" [class.__connectors-enabled]=\"(group.filters?.length ?? 0) > 1\">\n <div class=\"__group-wrapper\">\n @if ((group.filters?.length ?? 0) > 1) {\n <div class=\"__group-connector\">\n <div class=\"__operator-selector\">\n <ax-dropdown-button class=\"ax-xs __operator-chip\" [text]=\"getLogicDisplayText(group.logic)\"\n [mode]=\"'dropdown'\" [look]=\"'solid'\" [color]=\"'primary'\">\n <ax-button-item-list>\n @for (op of logicalOperatorsItems; track op.value) {\n <ax-button-item [text]=\"op.text\" [selected]=\"group.logic === op.value\"\n (onClick)=\"updateGroupLogicalOperator(group.id!, op.value)\">\n </ax-button-item>\n }\n </ax-button-item-list>\n </ax-dropdown-button>\n </div>\n </div>\n }\n\n <div class=\"__conditions-container\" axDropList (dropListDropped)=\"reorderGroupItemsEvent(group.id!, $event)\">\n @if ((group.filters?.length ?? 0) === 0) {\n <div class=\"__group-empty\">\n <ax-button class=\"ax-sm __add-rule-btn\" [look]=\"'twotone'\" [color]=\"'primary'\"\n [text]=\"'@data-management:metadata-definitions.components.query-builder.actions.add-rule.title' | translate | async\"\n (onClick)=\"addConditionToGroup(group.id!)\">\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-plus\"></ax-icon>\n </ax-prefix>\n </ax-button>\n <ax-button class=\"ax-sm __add-inner-group-btn\" [look]=\"'outline'\" [color]=\"'primary'\"\n [text]=\"'@data-management:metadata-definitions.components.query-builder.actions.add-inner-group.title' | translate | async\"\n (onClick)=\"addGroupToGroup(group.id!)\">\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-layer-group\"></ax-icon>\n </ax-prefix>\n </ax-button>\n </div>\n } @else {\n @for (item of getSortedFilters(group.filters || []); track item.id; let first = $first; let last = $last) {\n <div class=\"__condition-item\" axDrag [class.__is-first]=\"first && (group.filters?.length ?? 0) > 1\"\n [class.__is-last]=\"last && (group.filters?.length ?? 0) > 1\">\n <div class=\"__drag-handle\" axDragHandle>\n <ax-icon icon=\"fa-solid fa-grip-vertical\"></ax-icon>\n </div>\n\n <div class=\"__item-content\">\n @if (item.filters === undefined) {\n <axp-condition-builder-condition [item]=\"item\" [filterDefinitions]=\"filterDefinitions()\"\n [onResolveWidget]=\"resolveDefaultFilterWidget.bind(this)\" [showFillByUser]=\"showFillByUser()\"\n (itemChange)=\"updateCondition($event)\" (removeItem)=\"removeItem($event)\">\n </axp-condition-builder-condition>\n } @else {\n <ng-container [ngTemplateOutlet]=\"groupTemplate\" [ngTemplateOutletContext]=\"{ group: item }\">\n </ng-container>\n }\n </div>\n\n <div class=\"__item-controls\">\n <ax-button class=\"ax-sm __icon-btn\" [look]=\"'blank'\" [color]=\"'danger'\"\n [title]=\"'@data-management:metadata-definitions.components.query-builder.actions.remove.title' | translate | async\"\n (onClick)=\"removeItem(item.id!)\">\n <ax-icon icon=\"fa-light fa-trash-can\"></ax-icon>\n </ax-button>\n </div>\n </div>\n }\n\n }\n </div>\n </div>\n <!-- <div class=\"__add-condition-link ax-ps-16\">\n <ax-button class=\"ax-sm __add-condition-btn\" [look]=\"'link'\" [color]=\"'primary'\"\n [text]=\"'@data-management:metadata-definitions.components.query-builder.actions.add-condition.title' | translate | async\"\n (onClick)=\"addConditionToGroup(group.id!)\">\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-plus\"></ax-icon>\n </ax-prefix>\n </ax-button>\n </div> -->\n\n @if ((group.filters?.length ?? 0) > 0) {\n <div class=\"__group-actions\">\n <ax-button class=\"ax-sm __add-rule-btn\" [look]=\"'twotone'\" [color]=\"'primary'\"\n [text]=\"'@data-management:metadata-definitions.components.query-builder.actions.add-rule.title' | translate | async\"\n (onClick)=\"addConditionToGroup(group.id!)\">\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-plus\"></ax-icon>\n </ax-prefix>\n </ax-button>\n <ax-button class=\"ax-sm __add-inner-group-btn\" [look]=\"'outline'\" [color]=\"'primary'\"\n [text]=\"'@data-management:metadata-definitions.components.query-builder.actions.add-inner-group.title' | translate | async\"\n (onClick)=\"addGroupToGroup(group.id!)\">\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-layer-group\"></ax-icon>\n </ax-prefix>\n </ax-button>\n </div>\n }\n </div>\n</ng-template>","// Shared types and definitions for all expression builders\nexport * from './expression-builder.types';\nexport * from './field.definitions';\nexport * from './logic.definitions';\nexport * from './operation.definitions';\n\n// Builder components\nexport * from './condition-builder';\n","import { AXDataSource, AXEvent, AXHtmlEvent, AXValueChangedEvent } from '@acorex/cdk/common';\nimport { AXListNavigationModule } from '@acorex/cdk/list-navigation';\nimport { AXBadgeModule } from '@acorex/components/badge';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXPopoverComponent, AXPopoverModule } from '@acorex/components/popover';\nimport { AXSelectionListModule } from '@acorex/components/selection-list';\nimport { AXTagBoxComponent, AXTagBoxModule } from '@acorex/components/tag-box';\nimport { AXCalendarService } from '@acorex/core/date-time';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\nimport { ALL_DEFAULT_OPERATORS, AXPFilterOperatorMiddlewareService, AXPSettingsService } from '@acorex/platform/common';\nimport type { AXPContextChangeEvent, AXPExpressionEvaluatorScope } from '@acorex/platform/core';\nimport { AXPExpressionEvaluatorService, AXPFilterDefinition, AXPFilterQuery } from '@acorex/platform/core';\nimport {\n AXPWidgetCoreModule,\n AXPWidgetRendererDirective,\n} from '@acorex/platform/layout/widget-core';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n effect,\n HostListener,\n inject,\n input,\n linkedSignal,\n output,\n QueryList,\n signal,\n untracked,\n viewChild,\n ViewChildren,\n ViewEncapsulation,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { cloneDeep, get, isEqual } from 'lodash-es';\nimport type { Observable, Subscription } from 'rxjs';\nimport { Subject, filter as rxFilter } from 'rxjs';\n@Component({\n selector: 'axp-query-filters',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './query-filters.component.html',\n styleUrls: ['./query-filters.component.scss'],\n encapsulation: ViewEncapsulation.None,\n imports: [\n CommonModule,\n FormsModule,\n AXButtonModule,\n AXDecoratorModule,\n AXTranslationModule,\n AXPopoverModule,\n AXSelectionListModule,\n AXTagBoxModule,\n AXPWidgetCoreModule,\n AXListNavigationModule,\n AXBadgeModule,\n ],\n})\nexport class AXPQueryFiltersComponent {\n protected translate = inject(AXTranslationService);\n protected calendarService = inject(AXCalendarService);\n private filterOperatorMiddleware = inject(AXPFilterOperatorMiddlewareService);\n private settingsService = inject(AXPSettingsService);\n private readonly expressionEvaluator = inject(AXPExpressionEvaluatorService);\n\n filtersDefinitions = input<AXPFilterDefinition[]>([]);\n initialFilters = input<AXPFilterQuery[]>([]);\n onFiltersChanged = output<AXPFilterQuery[]>();\n\n protected dateFormat = signal<string>('YYYY/MM/DD');\n\n protected tagBox = viewChild<AXTagBoxComponent>('tagBox');\n protected widgetRenderer = viewChild<AXPWidgetRendererDirective>('widgetRenderer');\n tagBoxInput!: any;\n\n @ViewChildren('caseItem') listItems!: QueryList<any>;\n\n protected selectedField = signal<string | null>(null);\n protected selectedFilters = linkedSignal<AXPFilterDefinition[]>(\n () => this.convertQueriesToDefinitions(this.initialFilters()),\n {\n equal: isEqual,\n },\n );\n\n context = linkedSignal<any>(() => this.convertQueriesToContext(this.initialFilters()));\n\n protected activeFilter = signal<AXPFilterDefinition | null>(null);\n\n protected asyncTags = signal<any[]>([]);\n\n protected popover = viewChild<AXPopoverComponent>('popover');\n\n inputValue = signal<string>('');\n\n protected readonly disabledByField = signal<Record<string, boolean>>({});\n\n /** Emits when a filter context entry changes (aligned with `widget-renderer` `events.context`). */\n private readonly filterContextPath$ = new Subject<{ path: string }>();\n\n private filterContextPathSnapshotReady = false;\n\n private previousFilterContextSnapshot: Record<string, unknown> = {};\n\n inlineFilters = () => {\n return this.filtersDefinitions().filter(\n (f) =>\n f.filterType.inline &&\n !this.filterOperatorMiddleware\n .transformFilters(this.selectedFilters())\n .some(\n (sf) =>\n sf.field === f.field &&\n sf.operator?.type === (this.context()[sf.field!]?.operation?.type || f.operator?.type),\n ),\n );\n };\n\n protected getDisplayValue = async (filter: AXPFilterDefinition, val: any) => {\n if (filter.widget?.type === 'document-file-type-filter') {\n const dataSource = filter.widget.options?.['dataSource'];\n const valueField = filter.widget.options?.['valueField'] ?? 'name';\n const textField = filter.widget.options?.['textField'] ?? 'title';\n if (Array.isArray(dataSource)) {\n if (Array.isArray(val)) {\n return (dataSource as Record<string, unknown>[])\n .filter((d) => val.includes(d[valueField]))\n .map((d) => d[textField])\n .join(', ');\n }\n const record = (dataSource as Record<string, unknown>[]).find((d) => d[valueField] === val);\n return record ? String(record[textField] ?? val) : String(val ?? '');\n }\n }\n if (filter.widget?.type === 'select-editor' || filter.widget?.type === 'select-filter') {\n const dataSource: AXDataSource = filter.widget.options?.['dataSource'];\n const textField = filter.widget.options?.['textField'];\n const valueField = filter.widget.options?.['valueField'];\n if (dataSource?.config?.byKey) {\n if (Array.isArray(val)) {\n const results: unknown[] = await Promise.all(val.map((v) => dataSource.config.byKey!(v)));\n return results.map((data) => (data as Record<string, any>)[textField]).join(', ');\n } else {\n const data = (await dataSource.config.byKey(val)) as Record<string, any>;\n return data?.[textField] || val;\n }\n } else if (Array.isArray(dataSource)) {\n if (Array.isArray(val)) {\n return dataSource.map((data) => (data as Record<string, any>)[textField]).join(', ');\n } else {\n const record: any = dataSource.find((d: any) => d[valueField] === val);\n return record ? record[textField] : '';\n }\n }\n }\n return typeof val === 'object' && !Array.isArray(val)\n ? `${this.convertIfISOStringDate(val.from)} and ${this.convertIfISOStringDate(val.to)}`\n : this.convertIfISOStringDate(val);\n };\n\n protected convertIfISOStringDate = (val: string) => {\n const isISOStringDate = /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$/.test(val);\n if (isISOStringDate) {\n const dateResult = this.calendarService.convert(val);\n return dateResult.format(this.dateFormat());\n }\n return val;\n };\n\n convertQueriesToDefinitions(queries: AXPFilterQuery[]): AXPFilterDefinition[] {\n const definitions = this.filtersDefinitions();\n\n return queries.map((q) => {\n const definition = definitions.find((p) => p.field === q.field);\n return {\n field: q.field,\n operator: q.operator,\n value: q.value,\n title: definition?.title ?? q.displayText ?? '',\n widget: definition?.widget!,\n filterType: definition?.filterType!,\n hidden: q.hidden,\n };\n });\n }\n\n convertQueriesToContext(queries: AXPFilterQuery[]): any {\n return queries.reduce((acc, q) => {\n acc[q.field!] = { value: q.value, operation: q.operator, displayText: q.displayText };\n return acc;\n }, {} as any);\n }\n\n filterFields = () => {\n return this.filtersDefinitions().filter((f) => {\n return (\n f.filterType.advance &&\n !this.selectedFilters().some((sf) => {\n return sf.field === f.field;\n })\n );\n });\n };\n\n #dateFormatEffect = effect(async () => {\n const format = await this.settingsService.get('regional:short-date');\n this.dateFormat.set(format || 'YYYY/MM/DD');\n });\n\n ngOnInit(): void {\n this.tagBoxInput = this.tagBox()?.getHostElement().querySelector('input');\n }\n\n handleSelectField(field: AXPFilterDefinition) {\n if (this.isFilterDisabled(field)) {\n return;\n }\n this.activeFilter.set(field);\n this.tagBox()?.inputValue.set('');\n }\n handleFieldKeyDown(e: KeyboardEvent, field: AXPFilterDefinition) {\n if (this.isFilterDisabled(field)) {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n }\n return;\n }\n if (e.key === 'Enter') {\n this.handleSelectField(field);\n\n if (this.tagBoxInput && (field.widget.type === 'string-filter' || field.widget.type === 'number-filter')) {\n this.context.update((prev) => {\n return {\n ...prev,\n [field.field!]: {\n value: this.tagBoxInput?.value,\n operation: { type: 'contains' },\n },\n };\n });\n }\n }\n }\n\n onContextChanged(e: AXPContextChangeEvent) {\n this.context.set(e.data);\n }\n\n handleApplyFilter() {\n const reservedFitler = this.activeFilter();\n\n if (reservedFitler) {\n const { field } = reservedFitler;\n const selectedFiltersFields = this.selectedFilters().map((f) => f.field);\n const context = this.context();\n\n if (selectedFiltersFields.includes(field)) {\n this.selectedFilters.update((prev) =>\n prev.map((f) => (f.field === field ? { ...f, value: context[field!] } : f)),\n );\n } else {\n this.selectedFilters.update((prev) => [...prev, reservedFitler]);\n }\n this.activeFilter.set(null);\n this.popover()?.close();\n }\n }\n\n handleButtonKeyDown(e: Event) {\n if (this.popover()?.isOpen && !this.activeFilter()) {\n // Find first list item and focus it\n const firstItem = document.querySelector('[axListNavigationItem]') as HTMLElement;\n if (firstItem) {\n firstItem.focus();\n e?.preventDefault();\n }\n }\n }\n\n handleKeyDown(e: AXHtmlEvent<KeyboardEvent>) {\n if (e.nativeEvent?.key === 'ArrowDown') {\n if (this.popover()?.isOpen && !this.activeFilter()) {\n // Find first list item and focus it\n const firstItem = document.querySelector('[axListNavigationItem]') as HTMLElement;\n if (firstItem) {\n firstItem.focus();\n e.nativeEvent?.preventDefault();\n }\n } else {\n this.popover()?.open();\n }\n } else if (e.nativeEvent?.key === 'Enter' && this.tagBox()?.inputValue()?.trim()) {\n e.nativeEvent?.preventDefault();\n e.nativeEvent?.stopPropagation();\n this.handleAddAllInlineFilters();\n this.popover()?.close();\n }\n }\n\n onEnterKeyPressed(e: Event) {\n e.preventDefault();\n e.stopPropagation();\n this.handleApplyFilter();\n }\n\n handleTagClick(item: any) {\n if (item.field === 'all') {\n return;\n }\n this.activeFilter.set(item);\n this.popover()?.open();\n }\n\n handleRemoveTag(e: Event, index: number) {\n e.preventDefault();\n e.stopPropagation();\n this.tagBox()?.removeItem(index);\n }\n\n #emitFiltersEffect = effect(() => {\n // Prevent emitting while a filter is actively being edited\n const isEditing = this.activeFilter();\n if (isEditing) {\n return;\n }\n\n const selectedFilters = this.selectedFilters();\n const context = untracked(() => this.context());\n\n untracked(() => {\n // 1. Separate \"all\" filter from others\n const allFilter = selectedFilters.find((f) => f.field === 'all');\n const otherFilters = selectedFilters.filter((f) => f.field !== 'all');\n\n let convertedFilters: AXPFilterQuery[] = [];\n\n // 2. Convert regular filters\n otherFilters.forEach((f) => {\n convertedFilters.push({\n field: f.field,\n value: context[f.field!]?.value ?? f.value, // Prefer context, fallback to filter value\n hidden: f.hidden,\n operator: context[f.field!]?.operation ?? f.operator,\n displayText: context[f.field!]?.displayText,\n });\n });\n\n // 3. If \"all\" filter exists, create a nested filter with OR logic\n if (allFilter) {\n const allValue = allFilter.value; // Get value from filter definition\n const inlineFieldsFilters = this.filtersDefinitions()\n .filter((f) => f.filterType.inline)\n .map(\n (f) =>\n ({\n field: f.field,\n operator: { type: 'contains' },\n value: allValue,\n }) as AXPFilterQuery,\n );\n\n // Create a single filter with nested OR logic\n if (inlineFieldsFilters.length > 0) {\n convertedFilters.push({\n field: 'all',\n operator: { type: 'contains' },\n value: allValue,\n logic: 'or',\n filters: inlineFieldsFilters,\n hidden: false,\n displayText: 'All',\n });\n }\n }\n\n // 4. Build new context from selectedFilters (source of truth)\n const newContext: any = {};\n\n // Add context for regular filters\n otherFilters.forEach((f) => {\n newContext[f.field!] = {\n value: context[f.field!]?.value ?? f.value ?? context[f.field!]?.value, // Prefer context, fallback to filter value\n operation: context[f.field!]?.operation || f.operator,\n displayText: context[f.field!]?.displayText ?? context[f.field!]?.displayText,\n };\n });\n\n // Add context for \"all\" filter\n if (allFilter) {\n newContext['all'] = {\n value: allFilter.value,\n operation: { type: 'contains' },\n };\n }\n\n this.context.set(newContext);\n this.deactivateAllListItems();\n this.onFiltersChanged.emit(convertedFilters);\n });\n });\n\n /**\n * When filter context entries change, notify `events.context` subscribers (same semantics as `widget-renderer`).\n */\n #emitFilterContextPathEffect = effect(() => {\n const ctx = this.context();\n untracked(() => {\n if (!this.filterContextPathSnapshotReady) {\n this.previousFilterContextSnapshot = cloneDeep(ctx) as Record<string, unknown>;\n this.filterContextPathSnapshotReady = true;\n return;\n }\n const prev = this.previousFilterContextSnapshot;\n const keys = new Set([...Object.keys(prev), ...Object.keys(ctx ?? {})]);\n for (const path of keys) {\n if (path === 'all') {\n continue;\n }\n if (!isEqual(prev[path], (ctx as Record<string, unknown>)?.[path])) {\n this.filterContextPath$.next({ path });\n }\n }\n this.previousFilterContextSnapshot = cloneDeep(ctx) as Record<string, unknown>;\n });\n });\n\n handleSelectFilters(e: AXValueChangedEvent) {\n if (e.value?.length < this.selectedFilters().length) {\n const hiddenFilters = this.selectedFilters().filter((f) => f.hidden);\n this.selectedFilters.update((prev) => {\n return hiddenFilters.concat(e.value);\n });\n }\n }\n\n handleAddAllInlineFilters() {\n const inputValue = this.tagBox()?.inputValue();\n\n // Check if input is empty\n if (!inputValue?.trim() || !this.filtersDefinitions().some((f) => f.filterType.inline)) {\n return;\n }\n\n // Remove existing \"all\" filter (if exists) and add new one with updated value\n // This creates a new reference and triggers the effect\n\n this.selectedFilters.update((prev) => {\n const withoutAll = prev.filter((f) => f.field !== 'all');\n return [\n ...withoutAll,\n {\n title: 'All',\n field: 'all',\n operator: { type: 'contains' },\n value: inputValue, // Store value in filter definition\n widget: { type: 'text-box' },\n filterType: { inline: true, advance: false },\n },\n ];\n });\n\n this.tagBox()?.inputValue.set('');\n }\n\n protected getActiveOperator(filter: AXPFilterDefinition | null) {\n if (!filter) {\n return undefined;\n }\n\n const contextOperation = this.context()?.[filter.field!]?.operation?.type;\n const operatorType = contextOperation || filter.operator?.type;\n\n return ALL_DEFAULT_OPERATORS.find((o) => o.name === operatorType)?.title;\n }\n\n handleSelectInlineFilter(filter: AXPFilterDefinition) {\n if (this.isFilterDisabled(filter)) {\n return;\n }\n const inputValue = this.tagBox()?.inputValue();\n\n // Add filter with value stored in the filter definition\n this.selectedFilters.update((prev) => [\n ...prev,\n {\n ...filter,\n value: inputValue, // Store value in filter\n },\n ]);\n\n this.tagBox()?.inputValue.set('');\n this.popover()?.close();\n }\n\n handleInlineFilterKeyDown(e: KeyboardEvent, filter: AXPFilterDefinition) {\n if (e.key === 'Enter') {\n this.handleSelectInlineFilter(filter);\n }\n }\n\n handlePopoverClosed(e: AXEvent) {\n this.activeFilter.set(null);\n }\n\n protected onPopoverOpened(e: AXEvent) {\n if (this.filtersDefinitions().length === 0) {\n this.popover()?.close();\n }\n }\n\n protected deactivateAllListItems(): void {\n if (this.listItems) {\n this.listItems.forEach((item) => {\n if (item.isActive()) {\n item.isActive.set(false);\n }\n });\n }\n }\n\n #updateTagsEffect = effect(() => {\n const filters = this.selectedFilters();\n const context = this.context();\n\n Promise.all(\n filters.map(async (filter) => {\n const val = context[filter.field!]?.value;\n const displayText = context[filter.field!]?.displayText;\n\n const displayValue = displayText ? displayText : await this.getDisplayValue(filter, val);\n return {\n ...filter,\n query: `${this.translate.translateSync(filter.title)} ${this.translate.translateSync(this.getActiveOperator(filter)!) || ''} '${displayValue}'`,\n };\n }),\n ).then((results) => {\n this.asyncTags.set(results.filter((r) => !r.hidden));\n });\n });\n\n #disabledEvaluationEffect = effect(() => {\n const definitions = this.filtersDefinitions();\n const filtersContext = this.context();\n\n void (async () => {\n const entries = await Promise.all(\n definitions.map(async (def): Promise<[string, boolean] | null> => {\n const field = def.field;\n if (!field) {\n return null;\n }\n\n if (typeof def.disabled === 'boolean') {\n return [field, def.disabled];\n }\n\n if (typeof def.disabled === 'string' && this.expressionEvaluator.isExpression(def.disabled)) {\n const scope = this.createExpressionScope(filtersContext) as unknown as AXPExpressionEvaluatorScope;\n const result = await this.expressionEvaluator.evaluate(def.disabled, scope);\n return [field, Boolean(result)];\n }\n\n return [field, false];\n }),\n );\n\n const nextMap: Record<string, boolean> = {};\n for (const e of entries) {\n if (!e) continue;\n const [field, isDisabled] = e;\n nextMap[field] = isDisabled;\n }\n\n this.disabledByField.set(nextMap);\n })();\n });\n\n protected isFilterDisabled(definition: AXPFilterDefinition): boolean {\n if (typeof definition.disabled === 'boolean') {\n return definition.disabled;\n }\n\n const field = definition.field;\n if (!field) {\n return false;\n }\n\n return Boolean(this.disabledByField()[field]);\n }\n\n private createExpressionScope(filtersContext: unknown): Record<string, unknown> {\n const base = (filtersContext ?? {}) as Record<string, unknown>;\n\n return {\n ...base,\n filters: base,\n context: {\n eval: (path: string) => {\n const entry = get(base, path) as { value?: unknown } | undefined;\n return entry?.value;\n },\n },\n };\n }\n\n /**\n * Subscribes to each filter definition `triggers` like `AXPWidgetRendererDirective.assignTriggers`:\n * event expression must evaluate to an Observable (e.g. `{{ events.context('countryId') }}`).\n */\n #filterTriggersFromDefinitionsEffect = effect((onCleanup) => {\n const definitions = this.filtersDefinitions();\n const subs: Subscription[] = [];\n let cancelled = false;\n\n onCleanup(() => {\n cancelled = true;\n subs.forEach((s) => s.unsubscribe());\n });\n\n void (async () => {\n for (const def of definitions) {\n if (cancelled) {\n return;\n }\n if (!def.field) {\n continue;\n }\n if (!def.triggers?.length) {\n continue;\n }\n for (const trigger of def.triggers) {\n if (cancelled) {\n return;\n }\n if (trigger.disabled) {\n continue;\n }\n try {\n const scope = this.buildFilterTriggerScope(def);\n const eventResult = await this.expressionEvaluator.evaluate(trigger.event, scope);\n if (cancelled) {\n return;\n }\n if (this.isObservableLike(eventResult)) {\n const sub = eventResult.subscribe(() => {\n void this.expressionEvaluator.evaluate(trigger.action, this.buildFilterTriggerScope(def));\n });\n subs.push(sub);\n }\n } catch {\n // ignore\n }\n }\n }\n })();\n });\n\n private isObservableLike(value: unknown): value is Observable<unknown> {\n return Boolean(value) && typeof (value as Observable<unknown>).subscribe === 'function';\n }\n\n private buildFilterTriggerScope(def: AXPFilterDefinition): AXPExpressionEvaluatorScope {\n const filtersContext = this.context();\n const base = (filtersContext ?? {}) as Record<string, unknown>;\n\n return {\n context: {\n eval: (path: string) => {\n const entry = get(base, path) as { value?: unknown } | undefined;\n return entry?.value;\n },\n set: (path: string, value: unknown) => {\n this.context.update((prev) => ({\n ...prev,\n [path]: { ...(prev[path] as object), value },\n }));\n },\n data: () => () => filtersContext,\n isDirty: () => false,\n },\n events: this.getFilterEventScope(),\n widget: this.getFilterWidgetScopeForDefinition(def),\n methods: {},\n vars: {},\n } as unknown as AXPExpressionEvaluatorScope;\n }\n\n private getFilterEventScope(): { [name: string]: (...args: unknown[]) => Observable<unknown> } {\n return {\n context: (...args: unknown[]) => {\n const path = args[0] as string | undefined;\n return this.filterContextPath$.pipe(\n rxFilter((e) => {\n if (path == null || path === '') {\n return true;\n }\n if (!e.path) {\n return false;\n }\n if (path.endsWith('*')) {\n const prefix = path.substring(0, path.length - 1);\n return e.path.startsWith(prefix);\n }\n if (path.startsWith('*')) {\n const suffix = path.substring(1);\n return e.path.endsWith(suffix);\n }\n return e.path === path;\n }),\n ) as Observable<unknown>;\n },\n };\n }\n\n private getFilterWidgetScopeForDefinition(def: AXPFilterDefinition): { [name: string]: (...args: unknown[]) => unknown } {\n const field = def.field!;\n return {\n call: () => undefined,\n setValue: (...args: unknown[]) => {\n const value = args[0];\n this.context.update((prev) => ({\n ...prev,\n [field]: { ...(prev[field] as object), value },\n }));\n },\n clear: () => {\n this.removeFilterFieldByName(field);\n },\n refresh: () => {\n this.context.update((c) => ({ ...c }));\n },\n output: () => undefined,\n find: (...args: unknown[]) => {\n const id = String(args[0] ?? '');\n return {\n clear: () => this.removeFilterFieldByName(id),\n };\n },\n };\n }\n\n private removeFilterFieldByName(fieldName: string): void {\n this.selectedFilters.update((prev) => prev.filter((f) => f.field !== fieldName));\n }\n\n //#region ---- Widget Focus Effect ----\n\n /**\n * Auto-focus widget when component ref is ready and filter is active\n * This reactive approach eliminates the need for setTimeout\n */\n #focusEffect = effect(() => {\n const renderer = this.widgetRenderer();\n const activeFilter = this.activeFilter();\n\n // Early return if no renderer or no active filter\n if (!renderer || !activeFilter) {\n return;\n }\n\n // Listen to componentRefSignal reactively\n const componentRef = renderer.componentRefSignal();\n\n // When componentRef is set (not null), focus the widget\n if (componentRef) {\n const componentInstance = componentRef.instance;\n\n // Try to use the component's native focus method\n if (componentInstance && typeof componentInstance.focus === 'function') {\n try {\n componentInstance.focus();\n } catch (error) {\n // console.error('Error focusing widget component:', error);\n }\n }\n }\n });\n\n @HostListener('document:keydown', ['$event'])\n protected async handleKeyboardEvent(event: KeyboardEvent) {\n if (event.ctrlKey) {\n switch (event.code) {\n case 'KeyF':\n event.preventDefault();\n event.stopPropagation();\n this.tagBox()?.focus();\n break;\n }\n }\n }\n\n //#endregion\n}\n","<div class=\"ax-flex ax-items-center ax-gap-2 ax-p-2\">\n <ax-button (keydown)=\"handleButtonKeyDown($event)\" (onClick)=\"popover.open()\" #filterButton [look]=\"'blank'\">\n <ax-icon class=\"far fa-bars-filter ax-cursor-pointer\"> </ax-icon>\n </ax-button>\n <ax-tag-box\n #tagBoxComponent\n [ngModel]=\"asyncTags()\"\n (onValueChanged)=\"handleSelectFilters($event)\"\n [textField]=\"'query'\"\n [valueField]=\"'id'\"\n [readonly]=\"filtersDefinitions().length === 0\"\n [look]=\"'none'\"\n [readonlyField]=\"'readOnly'\"\n [tagTemplate]=\"tagTemplate\"\n (onKeyDown)=\"handleKeyDown($event)\"\n [addOnEnter]=\"false\"\n [placeholder]=\"\n (filtersDefinitions().length === 0\n ? '@general:terms.interface.filter.no-filter-definitions'\n : '@general:terms.interface.filter.placeholder'\n )\n | translate\n | async\n \"\n #tagBox\n >\n <ax-suffix class=\"ax-hidden md:ax-block\"><span class=\"ax-text-gray-500\">Ctrl+F</span></ax-suffix>\n </ax-tag-box>\n\n <ng-template #tagTemplate let-item let-index=\"index\">\n <div\n class=\"ax-inline-flex ax-items-center ax-gap-1.5 hover:ax-bg-darkest ax-cursor-pointer ax-rounded-md ax-px-3 ax-py-1 ax-text-sm ax-surface\"\n [class.!ax-bg-primary]=\"item.field === 'all'\"\n [class.!ax-text-white]=\"item.field === 'all'\"\n (click)=\"handleTagClick(item)\"\n >\n <span>{{ item.query }}</span>\n @if (!item.readOnly) {\n <button (click)=\"handleRemoveTag($event, index)\" type=\"button\">\n <ax-icon class=\"ax-icon ax-icon-close\"></ax-icon>\n </button>\n }\n </div>\n </ng-template>\n</div>\n\n<ax-popover\n [offsetY]=\"activeFilter() ? -30 : 0\"\n [target]=\"tagBoxInput\"\n [openOn]=\"'toggle'\"\n (onOpened)=\"onPopoverOpened($event)\"\n [closeOn]=\"'clickOut'\"\n (onClosed)=\"handlePopoverClosed($event)\"\n [adaptivityEnabled]=\"true\"\n #popover\n>\n <div class=\"md:ax-min-w-72 ax-w-full ax-rounded-md md:ax-max-h-96 ax-max-w-80 md:ax-overflow-auto\">\n <axp-widgets-container [context]=\"context()\" (onContextChanged)=\"onContextChanged($event)\">\n @if (activeFilter()) {\n <div class=\"ax-flex ax-flex-col ax-lightest-surface ax-shadow-md\" (keydown.enter)=\"onEnterKeyPressed($event)\">\n <ax-header class=\"ax-border-b ax-border-light ax-px-4 ax-py-2\">{{\n activeFilter()?.title! | translate | async\n }}</ax-header>\n <ax-content class=\"ax-p-4\">\n <div class=\"ax-mb-2\">\n <ax-badge [text]=\"(getActiveOperator(activeFilter())! | translate | async) || ''\"></ax-badge>\n </div>\n <ng-container\n #widgetRenderer=\"widgetRenderer\"\n axp-widget-renderer\n [node]=\"{\n type: activeFilter()?.widget?.type || 'text-editor',\n path: activeFilter()?.field,\n options: activeFilter()?.widget?.options,\n }\"\n [mode]=\"'edit'\"\n >\n </ng-container>\n </ax-content>\n <ax-footer class=\"ax-border-t ax-flex ax-justify-end ax-border-light ax-w-full ax-px-4 ax-py-2\">\n <ax-button\n class=\"ax-xs\"\n [text]=\"'@general:actions.apply.title' | translate | async\"\n (onClick)=\"handleApplyFilter()\"\n ></ax-button>\n </ax-footer>\n </div>\n } @else {\n <div axListNavigation #list=\"axListNavigation\" class=\"axp-list-items\">\n <!-- @if (tagBox.inputValue()) {\n @for (inlineFilter of inlineFilters(); track inlineFilter.field) {\n <div\n axListNavigationItem\n #caseItem=\"axListNavigationItem\"\n [class.axp-state-focused]=\"caseItem.isActive()\"\n tabindex=\"0\"\n (click)=\"handleSelectInlineFilter(inlineFilter)\"\n (keydown)=\"handleInlineFilterKeyDown($event, inlineFilter)\"\n >\n {{ inlineFilter.title | translate | async }} {{ getActiveOperator(inlineFilter) }} '{{\n tagBox.inputValue()\n }}'\n </div>\n }\n <span class=\"ax-w-full ax-border-t ax-border-light ax-my-1\"></span>\n } -->\n @for (field of filterFields(); track field.field) {\n <div\n axListNavigationItem\n #caseItem=\"axListNavigationItem\"\n [class.axp-state-focused]=\"caseItem.isActive() && !isFilterDisabled(field)\"\n [class.axp-query-filters__advance-item--disabled]=\"isFilterDisabled(field)\"\n [attr.aria-disabled]=\"isFilterDisabled(field) ? 'true' : null\"\n [attr.tabindex]=\"isFilterDisabled(field) ? -1 : 0\"\n (click)=\"handleSelectField(field)\"\n (keydown)=\"handleFieldKeyDown($event, field)\"\n >\n <div class=\"ax-flex ax-items-end ax-gap-2\">\n <ax-icon class=\"ax-w-5\" [class]=\"'fa-light ' + field.icon\"> </ax-icon>\n {{ field.title | translate | async }}\n </div>\n </div>\n }\n </div>\n }\n </axp-widgets-container>\n </div>\n</ax-popover>\n","import { AXClickEvent } from '@acorex/cdk/common';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXFormComponent, AXFormModule } from '@acorex/components/form';\nimport { AXLabelModule } from '@acorex/components/label';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPContextChangeEvent, AXPFilterDefinition } from '@acorex/platform/core';\nimport { AXPWidgetCoreModule } from '@acorex/platform/layout/widget-core';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, input, output, signal } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\n//#region ---- Types ----\n\nexport interface AXPPreloadFiltersApplyEvent {\n filterValues: Record<string, any>;\n}\n\n//#endregion\n\n@Component({\n selector: 'axp-preload-filters',\n templateUrl: './preload-filters.component.html',\n styleUrls: ['./preload-filters.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n AXPWidgetCoreModule,\n AXFormModule,\n FormsModule,\n AXLabelModule,\n AXTranslationModule,\n AXButtonModule,\n ],\n})\nexport class AXPPreloadFiltersComponent {\n //#region ---- Inputs ----\n\n /**\n * Filter definitions to display\n */\n filterDefinitions = input.required<AXPFilterDefinition[]>();\n\n /**\n * Whether to show the \"Show All\" button\n */\n showAllButton = input<boolean>(true);\n\n //#endregion\n\n //#region ---- Outputs ----\n\n /**\n * Emitted when user applies filters\n */\n apply = output<AXPPreloadFiltersApplyEvent>();\n\n /**\n * Emitted when user clicks \"Show All\"\n */\n showAll = output<void>();\n\n //#endregion\n\n //#region ---- Properties ----\n\n /**\n * Context for widgets container\n */\n context = signal<any>({});\n\n //#endregion\n\n //#region ---- Event Handlers ----\n\n /**\n * On context changed\n */\n onContextChanged(event: AXPContextChangeEvent): void {\n this.context.set(event.data);\n }\n\n /**\n * Handle apply filters\n */\n async handleApply(form: AXFormComponent): Promise<void> {\n // Validate form\n const validationResult = await form.validate();\n\n if (!validationResult.result) {\n return;\n }\n\n const filterValues = this.context();\n\n this.apply.emit({ filterValues });\n }\n\n /**\n * Handle form keydown events\n */\n onFormKeyDown(event: KeyboardEvent, form: AXFormComponent): void {\n // Submit form on Enter key press\n if (event.key === 'Enter') {\n event.preventDefault();\n this.handleApply(form);\n }\n }\n\n /**\n * Handle show all (skip filters and go to list).\n * Prevents implicit form submit when the control renders as a submit button inside ax-form.\n */\n handleShowAll(event?: AXClickEvent): void {\n event?.nativeEvent?.preventDefault?.();\n this.showAll.emit();\n }\n\n //#endregion\n\n //#region ---- Utility Methods ----\n\n /**\n * Check if field is required\n */\n isFieldRequired(filterDef: AXPFilterDefinition): boolean {\n const validations = filterDef?.widget?.options?.['validations'];\n return Array.isArray(validations) && validations.some((v: any) => v['rule'] === 'required');\n }\n\n //#endregion\n}\n","<div class=\"ax-flex ax-flex-col ax-gap-4 ax-items-center ax-justify-center ax-h-full\">\n <div class=\"ax-card ax-min-w-96 ax-flex ax-flex-col ax-items-center ax-gap-2 ax-p-6\">\n <div class=\"ax-header\">\n <img\n width=\"180\"\n src=\"/assets/images/general/filter.svg\"\n [attr.alt]=\"('@general:messages.preload-filters.filter-icon-alt' | translate | async) ?? ''\"\n />\n </div>\n <div class=\"ax-py-6\">\n <div class=\"ax-mb-6\">\n <h4 class=\"ax-text-lg ax-font-medium\">\n {{ '@general:messages.preload-filters.title' | translate | async }}\n </h4>\n <span class=\"ax-text-sm ax-text-gray-400\">\n {{ '@general:messages.preload-filters.description' | translate | async }}\n </span>\n </div>\n <axp-widgets-container [context]=\"context\" (onContextChanged)=\"onContextChanged($event)\">\n <ax-form #form (keydown)=\"onFormKeyDown($event, form)\">\n @for (filterDef of filterDefinitions(); track $index) {\n <ax-form-field class=\"ax-mt-2\">\n <ax-label [required]=\"isFieldRequired(filterDef)\">\n {{ filterDef?.title ?? '' | translate | async }}\n </ax-label>\n <ng-container\n #widgetRenderer=\"widgetRenderer\"\n axp-widget-renderer\n [node]=\"{\n type: filterDef?.widget?.type || 'text-editor',\n path: filterDef?.field,\n options: filterDef?.widget?.options,\n }\"\n [mode]=\"'edit'\"\n >\n </ng-container>\n </ax-form-field>\n }\n <div class=\"ax-mt-6\">\n <ax-button\n [text]=\"'@general:actions.apply.title' | translate | async\"\n (onClick)=\"handleApply(form)\"\n [color]=\"'primary'\"\n class=\"ax-w-full\"\n ></ax-button>\n @if (showAllButton()) {\n <ax-button\n class=\"ax-w-full ax-mt-4 ax-text-primary\"\n [look]=\"'blank'\"\n [text]=\"'@general:actions.show.all.title' | translate | async\"\n (onClick)=\"handleShowAll($event)\"\n ></ax-button>\n }\n </div>\n </ax-form>\n </axp-widgets-container>\n </div>\n </div>\n</div>\n","import { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXFormModule } from '@acorex/components/form';\nimport { AXImageEditorContainerComponent, AXImageEditorModule } from '@acorex/components/image-editor';\nimport { AXBasePageComponent } from '@acorex/components/page';\nimport { AXToolBarModule } from '@acorex/components/toolbar';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPFileStorageService } from '@acorex/platform/common';\nimport { CommonModule } from '@angular/common';\nimport { Component, inject, input, linkedSignal, signal, viewChild } from '@angular/core';\n\n@Component({\n standalone: true,\n selector: 'axp-image-editor-popup',\n imports: [\n CommonModule,\n AXImageEditorModule,\n AXFormModule,\n AXToolBarModule,\n AXDecoratorModule,\n AXButtonModule,\n AXTranslationModule,\n ],\n template: `\n <ax-form class=\"ax-flex ax-justify-center\">\n <ax-form-field class=\"ax-p-2\">\n <ax-image-editor-container\n [aspectRatio]=\"[aspectRatio() ?? '16/9']\"\n #container\n [look]=\"look()\"\n (onValueChanged)=\"handleValueChanged($event)\"\n >\n <ax-header>\n <ax-toolbar>\n <ax-prefix>\n @if (showHistory()) {\n <ax-image-editor-history></ax-image-editor-history>\n }\n </ax-prefix>\n </ax-toolbar>\n </ax-header>\n <ax-image-editor-view [src]=\"url() || ''\"></ax-image-editor-view>\n </ax-image-editor-container>\n </ax-form-field>\n </ax-form>\n <ax-footer class=\"ax-flex ax-justify-end ax-gap-2\">\n <ax-suffix>\n <ax-button look=\"solid\" (onClick)=\"handleCancel()\" [text]=\"'@general:actions.cancel.title' | translate | async\">\n </ax-button>\n <ax-button\n color=\"primary\"\n look=\"solid\"\n (onClick)=\"handleSave()\"\n [text]=\"'@general:actions.save.title' | translate | async\"\n >\n </ax-button>\n </ax-suffix>\n </ax-footer>\n `,\n styles: `\n ::ng-deep ax-image-editor-view > canvas {\n height: 65vh;\n }\n `,\n})\nexport class AXPImageEditorPopupComponent extends AXBasePageComponent {\n private readonly fileStorage = inject(AXPFileStorageService);\n\n image = input.required<Blob>();\n showHistory = input<boolean>(true);\n look = input<'solid' | 'outline' | 'blank'>('blank');\n aspectRatio = input<string | undefined>(undefined);\n\n private container = viewChild(AXImageEditorContainerComponent);\n private blobUrl = signal<string | null>(null);\n protected url = signal<string | null>(null);\n\n protected context = linkedSignal<{ image: Blob | null }>(() => ({ image: this.image() }));\n\n override async ngOnInit(): Promise<void> {\n const value = this.image();\n //for safety\n if (!value) {\n this.url.set(null);\n return;\n }\n const prev = this.blobUrl();\n if (prev) {\n URL.revokeObjectURL(prev);\n }\n const blob = value as Blob;\n const next = URL.createObjectURL(blob);\n this.blobUrl.set(next);\n this.url.set(next);\n }\n\n handleValueChanged(e: any) {\n const value = e?.value as Blob[] | undefined;\n const webP = value?.find((item) => item.type.startsWith('image/webp'));\n if (webP) {\n this.context.set({ image: webP });\n }\n }\n\n handleSave() {\n this.close({ data: this.context() });\n }\n\n handleCancel() {\n this.close({ data: { image: null } });\n }\n\n override ngOnDestroy(): void {\n const prev = this.blobUrl();\n if (prev) {\n URL.revokeObjectURL(prev);\n }\n }\n}\n","import { AXPopupService } from '@acorex/components/popup';\nimport { AXTranslationService } from '@acorex/core/translation';\n// no file list types here; service deals with raw Blob\nimport { inject, Injectable, signal } from '@angular/core';\n\nexport interface AXPImageEditorOpenOptions {\n title?: string;\n image: Blob;\n showHistory?: boolean;\n look?: 'solid' | 'outline' | 'blank';\n aspectRatio?: string;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class AXPImageEditorService {\n private readonly popupService = inject(AXPopupService);\n private readonly translate = inject(AXTranslationService);\n\n async open(options?: AXPImageEditorOpenOptions): Promise<Blob | null> {\n const component = await import('./image-editor-popup.component').then((m) => m.AXPImageEditorPopupComponent);\n const result = await this.popupService.open(component, {\n title: options?.title ?? (await this.translate.translateAsync('@general:image.title')),\n data: {\n image: signal(options?.image),\n showHistory: signal(options?.showHistory ?? true),\n look: signal(options?.look ?? 'solid'),\n aspectRatio: signal(options?.aspectRatio),\n },\n });\n return (result?.data?.data?.image as Blob | null) ?? null;\n }\n}\n","import { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXImageModule } from '@acorex/components/image';\nimport { AXPlatform } from '@acorex/core/platform';\n\nimport { AXPComponentLogoConfig, AXPImageUrlLogoConfig, AXPIconLogoConfig } from '@acorex/platform/core';\nimport { CommonModule } from '@angular/common';\nimport { Component, inject, Input, OnInit, OnChanges, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n selector: 'axp-logo',\n templateUrl: './logo.component.html',\n imports: [CommonModule, AXImageModule, AXDecoratorModule],\n host: { class: 'ax-flex ax-justify-center' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXPLogoComponent implements OnInit, OnChanges {\n @Input()\n source!: any;\n\n protected logoType!: string;\n\n private platform = inject(AXPlatform);\n\n ngOnInit(): void {\n this.setLogoType();\n this.platform.themeMode$.subscribe(() => {\n this.setLogoTheme();\n });\n }\n\n ngOnChanges(): void {\n this.setLogoTheme();\n this.setLogoType();\n }\n\n protected setLogoType() {\n switch (true) {\n case this.source instanceof AXPImageUrlLogoConfig:\n this.logoType = 'url';\n break;\n\n case this.source instanceof AXPComponentLogoConfig:\n this.logoType = 'component';\n break;\n\n case this.source instanceof AXPIconLogoConfig:\n this.logoType = 'icon';\n break;\n\n default:\n break;\n }\n }\n\n protected setLogoTheme() {\n if (this.source && (this.source as any).dark && (this.source as any).light) {\n this.source = this.platform.isDark() ? (this.source as any).dark : (this.source as any).light;\n }\n }\n}\n\n","@switch (logoType) { \n @case ('url') {\n <ax-image [width]=\"source.width\" [height]=\"source.height\" [src]=\"source.url\"></ax-image>\n } \n @case ('component') {\n <ng-container *ngComponentOutlet=\"source.component\"></ng-container>\n } \n @case ('icon') {\n <i [class]=\"source.icon\" [style.color]=\"source.color\"></i>\n } \n}\n\n","//#region ---- Imports ----\n\nimport { AXTreeViewNode } from '@acorex/components/tree-view';\nimport { InjectionToken } from '@angular/core';\n\n//#endregion\n\n//#region ---- Types ----\n\n/**\n * Menu item type definitions.\n * - 'menu': Standard navigable menu item\n * - 'group': Menu group/category header\n * - 'break': Visual separator/divider\n */\nexport type AXPMenuCustomizerItemType = 'menu' | 'group' | 'break';\n\n/**\n * Menu item interface for customizer.\n * Represents a single menu item with its properties.\n */\nexport interface AXPMenuCustomizerItem {\n /** Unique identifier/key for the menu item */\n name?: string;\n\n /** Display text (can be an i18n key) */\n text?: string;\n\n /** Icon class (e.g., 'fa-light fa-home') */\n icon?: string;\n\n /** Navigation path/route */\n path?: string;\n\n /** Type of menu item */\n type?: AXPMenuCustomizerItemType;\n\n /** Priority for ordering (lower = higher priority) */\n priority?: number;\n\n /** Description/tooltip text */\n description?: string;\n\n /** Child menu items */\n children?: AXPMenuCustomizerItem[];\n}\n\n/**\n * Metadata for menu tree nodes.\n * Contains flags and original values for tracking customizations.\n */\nexport interface AXPMenuCustomizerNodeMetadata {\n /** Whether this is a built-in (system) menu item */\n isBuiltIn: boolean;\n\n /** Whether this is a custom (user-created) menu item */\n isCustom: boolean;\n\n /** Whether this menu item is currently hidden */\n isHidden: boolean;\n\n /** Original priority before any customizations */\n originalPriority?: number;\n\n /** Original parent name before any move operations */\n originalParentName?: string;\n}\n\n/**\n * Data structure for tree node combining menu item with metadata.\n * This is stored in the tree node's 'data' field.\n */\nexport interface AXPMenuCustomizerNodeData {\n /** The menu item properties */\n menuItem: AXPMenuCustomizerItem;\n\n /** Metadata about the menu item's state */\n metadata: AXPMenuCustomizerNodeMetadata;\n}\n\n/**\n * Available actions that can be performed on menu items.\n */\nexport type AXPMenuCustomizerAction = 'show' | 'hide' | 'edit' | 'delete' | 'add-child' | 'move';\n\n/**\n * Component state for loading/error handling.\n */\nexport type AXPMenuCustomizerState =\n | { status: 'idle' }\n | { status: 'loading' }\n | { status: 'success' }\n | { status: 'error'; message: string };\n\n//#endregion\n\n//#region ---- Service Interface ----\n\n/**\n * Abstract service interface for menu customization operations.\n * Implement this interface and provide it via AXP_MENU_CUSTOMIZER_SERVICE token.\n */\nexport abstract class AXPMenuCustomizerService {\n /**\n * Get menu tree nodes for the given scope key\n */\n abstract getMenuTree(scopeKey: string): Promise<AXTreeViewNode[]>;\n\n /**\n * Sync tree changes (reorder, move) to storage\n */\n abstract syncTreeChanges(scopeKey: string, treeNodes: AXTreeViewNode[]): Promise<void>;\n\n /**\n * Show a hidden menu item\n */\n abstract showMenuItem(scopeKey: string, menuName: string): Promise<void>;\n\n /**\n * Hide a menu item\n */\n abstract hideMenuItem(scopeKey: string, menuName: string): Promise<void>;\n\n /**\n * Add a custom menu item\n */\n abstract addCustomMenuItem(scopeKey: string, menuItem: AXPMenuCustomizerItem, parentName: string | null): Promise<void>;\n\n /**\n * Update a custom menu item\n */\n abstract updateCustomMenuItem(scopeKey: string, menuName: string, menuItem: AXPMenuCustomizerItem): Promise<void>;\n\n /**\n * Update menu item properties (for built-in items)\n */\n abstract updateMenuProperties(scopeKey: string, menuName: string, properties: Partial<AXPMenuCustomizerItem>): Promise<void>;\n\n /**\n * Delete a custom menu item\n */\n abstract deleteCustomMenuItem(scopeKey: string, menuName: string): Promise<void>;\n\n /**\n * Reset all customizations for the scope\n */\n abstract resetCustomizations(scopeKey: string): Promise<void>;\n}\n\n/**\n * Injection token for menu customizer service\n */\nexport const AXP_MENU_CUSTOMIZER_SERVICE = new InjectionToken<AXPMenuCustomizerService>('AXP_MENU_CUSTOMIZER_SERVICE');\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXBadgeModule } from '@acorex/components/badge';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDialogService } from '@acorex/components/dialog';\nimport { AXDropdownModule } from '@acorex/components/dropdown';\nimport { AXDropdownButtonModule } from '@acorex/components/dropdown-button';\nimport { AXToastService } from '@acorex/components/toast';\nimport { AsyncPipe } from '@angular/common';\n\nimport {\n AXTreeViewBeforeDropEvent,\n AXTreeViewComponent,\n AXTreeViewDragArea,\n AXTreeViewDragBehavior,\n AXTreeViewDropEvent,\n AXTreeViewNode,\n} from '@acorex/components/tree-view';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\nimport { AXPLayoutBuilderService } from '@acorex/platform/layout/builder';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n effect,\n inject,\n input,\n OnInit,\n output,\n signal,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { AXPStateMessageComponent } from '../state-message';\nimport {\n AXP_MENU_CUSTOMIZER_SERVICE,\n AXPMenuCustomizerAction,\n AXPMenuCustomizerItem,\n AXPMenuCustomizerNodeData,\n AXPMenuCustomizerState,\n} from './menu-customizer.types';\n\n//#endregion\n\n//#region ---- Menu Customizer Component ----\n\n/**\n * Reusable menu customizer component that allows users to reorder, show/hide,\n * and manage menu items using a tree-like interface.\n * Can be used standalone or within popups/dialogs.\n *\n * @description\n * This component provides a visual interface for customizing menu structures.\n * It supports:\n * - Drag and drop reordering of menu items\n * - Showing/hiding menu items\n * - Adding custom menu items\n * - Editing menu item properties\n * - Resetting customizations to defaults\n *\n * @example\n * ```html\n * <axp-menu-customizer\n * [scopeKey]=\"'edition:my-edition'\"\n * [showToolbar]=\"true\"\n * [allowAddItems]=\"true\"\n * (saved)=\"onSaved()\"\n * />\n * ```\n *\n * @requires AXP_MENU_CUSTOMIZER_SERVICE - Must provide an implementation of AXPMenuCustomizerService\n */\n@Component({\n selector: 'axp-menu-customizer',\n imports: [\n AXButtonModule,\n AXDecoratorModule,\n AXDropdownButtonModule,\n AXDropdownModule,\n AXTranslationModule,\n AXTreeViewComponent,\n AXPStateMessageComponent,\n AXBadgeModule,\n AsyncPipe,\n ],\n templateUrl: './menu-customizer.component.html',\n styleUrls: ['./menu-customizer.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: { class: 'axp-menu-customizer' },\n})\nexport class AXPMenuCustomizerComponent implements OnInit {\n //#region ---- Dependencies ----\n\n private readonly menuCustomizerService = inject(AXP_MENU_CUSTOMIZER_SERVICE);\n private readonly layoutBuilder = inject(AXPLayoutBuilderService);\n private readonly dialogService = inject(AXDialogService);\n private readonly toastService = inject(AXToastService);\n private readonly translationService = inject(AXTranslationService);\n private readonly destroyRef = inject(DestroyRef);\n\n //#endregion\n\n //#region ---- Inputs & Outputs ----\n\n /** The scope key for loading/saving menu customizations (e.g., 'edition:{id}', 'tenant:{id}') */\n scopeKey = input.required<string>();\n\n /** Whether to show the toolbar with collapse/expand/reset actions */\n showToolbar = input<boolean>(true);\n\n /** Whether to allow adding custom menu items */\n allowAddItems = input<boolean>(true);\n\n /** Drag behavior for the tree view: 'none' | 'order-only' | 'move' | 'both' */\n dragBehavior = input<AXTreeViewDragBehavior>('both');\n\n /** Drag area for the tree view: 'handler' | 'item' */\n dragArea = input<AXTreeViewDragArea>('handler');\n\n /** Emitted when changes are saved */\n saved = output<void>();\n\n /** Emitted when the customizer is closed/cancelled */\n cancelled = output<void>();\n\n //#endregion\n\n //#region ---- Component State ----\n\n /** Reference to the tree view component */\n protected readonly tree = viewChild(AXTreeViewComponent);\n\n /** Tree nodes data source */\n protected readonly treeNodes = signal<AXTreeViewNode[]>([]);\n\n /** Current loading/error state */\n protected readonly state = signal<AXPMenuCustomizerState>({ status: 'idle' });\n\n /** Flag to prevent concurrent sync operations */\n private isSyncing = false;\n\n //#endregion\n\n //#region ---- Computed Properties ----\n\n /** Whether the component is currently loading */\n protected readonly isLoading = computed(() => this.state().status === 'loading');\n\n /** Whether there is an error state */\n protected readonly hasError = computed(() => this.state().status === 'error');\n\n /** The current error message, if any */\n protected readonly errorMessage = computed(() => {\n const currentState = this.state();\n return currentState.status === 'error' ? currentState.message : '';\n });\n\n /** Whether the tree has nodes to display */\n protected readonly hasNodes = computed(() => this.treeNodes().length > 0);\n\n /** Whether to show the content (tree view) */\n protected readonly showContent = computed(() => !this.isLoading() && !this.hasError() && this.hasNodes());\n\n /** Whether to show the empty state */\n protected readonly showEmptyState = computed(() => !this.isLoading() && !this.hasError() && !this.hasNodes());\n\n //#endregion\n\n //#region ---- Lifecycle ----\n\n async ngOnInit(): Promise<void> {\n await this.loadMenuItems();\n }\n\n //#endregion\n\n //#region ---- Event Handlers ----\n\n /**\n * Handle before drop validation.\n * Prevents dropping into items with paths (leaf nodes that can't have children).\n *\n * @param event - The before drop event from tree view\n */\n protected handleBeforeDrop(event: AXTreeViewBeforeDropEvent): void {\n const targetParent = event.currentParent?.['data'] as AXPMenuCustomizerNodeData | undefined;\n\n // Prevent dropping into items with paths (leaf nodes)\n if (targetParent?.menuItem?.path) {\n event.canceled = true;\n this.showWarningMessage('@platform-management:menu-management.messages.error.move');\n }\n }\n\n /**\n * Handle order change event (reordering within the same parent).\n *\n * @param event - The drop event from tree view\n */\n protected async handleOrderChange(event: AXTreeViewDropEvent): Promise<void> {\n console.log('Order changed:', {\n node: event.node?.['id'],\n previousIndex: event.previousIndex,\n currentIndex: event.currentIndex,\n parent: event.currentParent?.['id'] ?? 'root',\n });\n\n // Use setTimeout to ensure tree view has finished updating the datasource\n setTimeout(() => this.syncTreeChanges(), 0);\n }\n\n /**\n * Handle move change event (moving to a different parent).\n *\n * @param event - The drop event from tree view\n */\n protected async handleMoveChange(event: AXTreeViewDropEvent): Promise<void> {\n console.log('Move changed:', {\n node: event.node?.['id'],\n previousParent: event.previousParent?.['id'] ?? 'root',\n currentParent: event.currentParent?.['id'] ?? 'root',\n currentIndex: event.currentIndex,\n });\n\n // Use setTimeout to ensure tree view has finished updating the datasource\n setTimeout(() => this.syncTreeChanges(), 0);\n }\n\n //#endregion\n\n //#region ---- Data Loading ----\n\n /**\n * Load menu tree for current scope.\n * Updates the component state to loading, then success or error.\n * Creates new array reference to ensure UI updates.\n */\n async loadMenuItems(): Promise<void> {\n try {\n this.state.set({ status: 'loading' });\n\n const treeNodes = await this.menuCustomizerService.getMenuTree(this.scopeKey());\n\n // Create new array reference to ensure tree view detects the change\n this.treeNodes.set([...treeNodes]);\n this.state.set({ status: 'success' });\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Failed to load menu items';\n this.state.set({ status: 'error', message });\n this.showErrorMessage('@platform-management:menu-management.messages.error.load');\n }\n }\n\n /**\n * Sync tree changes to backend.\n * Prevents concurrent sync operations using the isSyncing flag.\n * Reloads data with new reference after successful sync.\n */\n private async syncTreeChanges(): Promise<void> {\n if (this.isSyncing) {\n return;\n }\n\n // Get nodes from the tree component's datasource directly\n // This ensures we get the most up-to-date structure after drag-drop\n const treeComponent = this.tree();\n const nodes = treeComponent?.getRootNodes() ?? this.treeNodes();\n\n if (!nodes || nodes.length === 0) {\n return;\n }\n\n try {\n this.isSyncing = true;\n await this.menuCustomizerService.syncTreeChanges(this.scopeKey(), nodes);\n this.showSuccessMessage('@platform-management:menu-management.messages.success.reorder');\n\n // Reload with new array reference to ensure UI is in sync\n await this.loadMenuItems();\n } catch (error) {\n console.error('Failed to sync tree changes:', error);\n this.showErrorMessage('@platform-management:menu-management.messages.error.sync');\n } finally {\n this.isSyncing = false;\n }\n }\n\n //#endregion\n\n //#region ---- Public Methods ----\n\n /**\n * Collapse all tree nodes.\n */\n collapseAll(): void {\n this.tree()?.collapseAll();\n }\n\n /**\n * Expand all tree nodes.\n */\n async expandAll(): Promise<void> {\n await this.tree()?.expandAll();\n }\n\n /**\n * Reset all customizations to defaults.\n * Shows a confirmation dialog before resetting.\n */\n async resetCustomizations(): Promise<void> {\n const confirmed = await this.confirmAction(\n '@platform-management:menu-management.actions.reset.confirm.title',\n '@platform-management:menu-management.actions.reset.confirm.message',\n );\n\n if (!confirmed) return;\n\n try {\n await this.menuCustomizerService.resetCustomizations(this.scopeKey());\n this.showSuccessMessage('@platform-management:menu-management.messages.success.reset');\n } catch (error) {\n console.error('Failed to reset customizations:', error);\n this.showErrorMessage('@platform-management:menu-management.messages.error.reset');\n } finally {\n await this.loadMenuItems();\n }\n }\n\n /**\n * Add new root menu item.\n * Opens the menu item dialog without a parent.\n */\n async addRootMenuItem(): Promise<void> {\n await this.showMenuItemDialog(null, null);\n }\n\n /**\n * Reload the menu items from the service.\n * Useful for external refresh triggers.\n */\n async refresh(): Promise<void> {\n await this.loadMenuItems();\n }\n\n //#endregion\n\n //#region ---- Action Handlers ----\n\n /**\n * Handle menu item action dispatched from the template.\n *\n * @param action - The action to perform\n * @param nodeData - The node data to perform the action on\n */\n protected async onAction(action: AXPMenuCustomizerAction, nodeData: AXPMenuCustomizerNodeData): Promise<void> {\n const actionHandlers: Record<AXPMenuCustomizerAction, () => Promise<void>> = {\n show: () => this.showMenuItem(nodeData),\n hide: () => this.hideMenuItem(nodeData),\n edit: () => this.editMenuItem(nodeData),\n delete: () => this.deleteMenuItem(nodeData),\n 'add-child': () => this.addChildMenuItem(nodeData),\n move: () => Promise.resolve(), // Move is handled by drag-drop\n };\n\n const handler = actionHandlers[action];\n if (handler) {\n await handler();\n }\n }\n\n /**\n * Add new child menu item to a parent.\n *\n * @param parentNodeData - The parent node data\n */\n private async addChildMenuItem(parentNodeData: AXPMenuCustomizerNodeData): Promise<void> {\n await this.showMenuItemDialog(null, parentNodeData.menuItem.name ?? null);\n }\n\n //#endregion\n\n //#region ---- Menu Item Actions ----\n\n /**\n * Show a hidden menu item.\n *\n * @param nodeData - The node data containing the menu item to show\n */\n private async showMenuItem(nodeData: AXPMenuCustomizerNodeData): Promise<void> {\n const menuName = nodeData.menuItem.name;\n if (!menuName) return;\n\n await this.executeMenuAction(\n () => this.menuCustomizerService.showMenuItem(this.scopeKey(), menuName),\n '@platform-management:menu-management.messages.success.show',\n '@platform-management:menu-management.messages.error.show',\n );\n }\n\n /**\n * Hide a menu item.\n *\n * @param nodeData - The node data containing the menu item to hide\n */\n private async hideMenuItem(nodeData: AXPMenuCustomizerNodeData): Promise<void> {\n const menuName = nodeData.menuItem.name;\n if (!menuName) return;\n\n await this.executeMenuAction(\n () => this.menuCustomizerService.hideMenuItem(this.scopeKey(), menuName),\n '@platform-management:menu-management.messages.success.hide',\n '@platform-management:menu-management.messages.error.hide',\n );\n }\n\n /**\n * Edit a menu item.\n *\n * @param nodeData - The node data containing the menu item to edit\n */\n private async editMenuItem(nodeData: AXPMenuCustomizerNodeData): Promise<void> {\n await this.showMenuItemDialog(nodeData);\n }\n\n /**\n * Delete a custom menu item.\n * Shows a confirmation dialog before deleting.\n *\n * @param nodeData - The node data containing the menu item to delete\n */\n private async deleteMenuItem(nodeData: AXPMenuCustomizerNodeData): Promise<void> {\n const item = nodeData.menuItem;\n if (!item.name) return;\n\n const confirmed = await this.confirmAction(\n '@general:actions.delete.title',\n '@platform-management:menu-management.actions.delete.confirm.message',\n );\n\n if (!confirmed) return;\n\n await this.executeMenuAction(\n () => this.menuCustomizerService.deleteCustomMenuItem(this.scopeKey(), item.name!),\n '@platform-management:menu-management.messages.success.delete',\n '@platform-management:menu-management.messages.error.delete',\n );\n }\n\n //#endregion\n\n //#region ---- Dialog Helpers ----\n\n /**\n * Show menu item dialog (add/edit).\n *\n * @param nodeData - The node data for editing, or null for adding\n * @param parentName - The parent menu name for adding child items\n */\n private async showMenuItemDialog(\n nodeData: AXPMenuCustomizerNodeData | null,\n parentName: string | null = null,\n ): Promise<void> {\n const item = nodeData?.menuItem;\n const isEdit = !!item;\n const isBuiltIn = nodeData?.metadata?.isBuiltIn ?? false;\n\n const title = isEdit\n ? '@platform-management:menu-management.components.edit-dialog.title'\n : '@platform-management:menu-management.components.add-dialog.title';\n\n const context = this.buildDialogContext(item);\n\n const dialogRef = await this.layoutBuilder\n .create()\n .dialog((dialog) => {\n dialog\n .setTitle(title)\n .setContext(context)\n .content((flex) => {\n this.buildDialogFields(flex, isEdit, isBuiltIn);\n })\n .setActions((actions) => {\n actions.cancel('@general:actions.cancel.title').submit('@general:actions.save.title');\n });\n })\n .show();\n\n const action = dialogRef.action();\n if (action === 'cancel') {\n dialogRef.close();\n return;\n }\n\n const formData = dialogRef.context() as Partial<AXPMenuCustomizerItem>;\n\n try {\n await this.saveMenuItem(formData, nodeData, parentName, isEdit);\n this.showSuccessMessage('@platform-management:menu-management.messages.success.save');\n await this.loadMenuItems();\n dialogRef.close();\n } catch (error) {\n console.error('Failed to save menu item:', error);\n this.showErrorMessage('@platform-management:menu-management.messages.error.save');\n }\n }\n\n /**\n * Build the dialog context for add/edit dialog.\n *\n * @param item - The menu item to build context for, or undefined for new items\n */\n private buildDialogContext(item?: AXPMenuCustomizerItem): Record<string, unknown> {\n return {\n name: item?.name ?? '',\n text: item?.text ?? '',\n type: item?.type ?? 'menu',\n icon: item?.icon ?? '',\n path: item?.path ?? '',\n description: item?.description ?? '',\n };\n }\n\n /**\n * Build the dialog form fields.\n * Note: Priority is not included as item order is controlled by drag-drop.\n *\n * @param flex - The flex layout builder\n * @param isEdit - Whether this is an edit operation\n * @param isBuiltIn - Whether the item is built-in\n */\n private buildDialogFields(flex: any, isEdit: boolean, isBuiltIn: boolean): void {\n const I18N_PREFIX = '@platform-management:menu-management.fields';\n\n flex\n .setDirection('column')\n .formField(`${I18N_PREFIX}.name`, (field: any) => {\n field.path('name');\n field.textBox({\n placeholder: `${I18N_PREFIX}.name`,\n validations: [{ rule: 'required' }],\n disabled: isEdit && isBuiltIn,\n });\n })\n .formField(`${I18N_PREFIX}.text`, (field: any) => {\n field.path('text');\n field.textBox({\n placeholder: `${I18N_PREFIX}.text`,\n validations: [{ rule: 'required' }],\n });\n })\n .formField(`${I18N_PREFIX}.icon`, (field: any) => {\n field.path('icon');\n field.customWidget('icon-chooser', {});\n })\n .formField(`${I18N_PREFIX}.path`, (field: any) => {\n field.path('path');\n field.textBox({\n placeholder: `${I18N_PREFIX}.path`,\n disabled: isEdit && isBuiltIn,\n });\n })\n .formField(`${I18N_PREFIX}.description`, (field: any) => {\n field.path('description');\n field.largeTextBox({\n placeholder: `${I18N_PREFIX}.description`,\n rows: 3,\n });\n });\n }\n\n /**\n * Save menu item (create or update).\n *\n * @param formData - The form data from the dialog\n * @param nodeData - The original node data (for edit) or null (for add)\n * @param parentName - The parent menu name (for add child)\n * @param isEdit - Whether this is an edit operation\n */\n private async saveMenuItem(\n formData: Partial<AXPMenuCustomizerItem>,\n nodeData: AXPMenuCustomizerNodeData | null,\n parentName: string | null,\n isEdit: boolean,\n ): Promise<void> {\n const scopeKey = this.scopeKey();\n\n if (isEdit && nodeData?.menuItem?.name) {\n const menuName = nodeData.menuItem.name;\n\n if (nodeData.metadata?.isCustom) {\n // For custom items, update the entire item (preserving priority from current position)\n const updatedItem: AXPMenuCustomizerItem = {\n ...nodeData.menuItem,\n text: formData.text,\n icon: formData.icon,\n path: formData.path,\n description: formData.description,\n };\n await this.menuCustomizerService.updateCustomMenuItem(scopeKey, menuName, updatedItem);\n } else {\n // For built-in items, only update allowed properties (text, icon, description)\n const properties: Partial<AXPMenuCustomizerItem> = {\n text: formData.text,\n icon: formData.icon,\n description: formData.description,\n };\n await this.menuCustomizerService.updateMenuProperties(scopeKey, menuName, properties);\n }\n } else {\n // Add new custom item\n const newItem: AXPMenuCustomizerItem = {\n name: formData.name!,\n text: formData.text!,\n icon: formData.icon,\n path: formData.path,\n description: formData.description,\n };\n\n await this.menuCustomizerService.addCustomMenuItem(scopeKey, newItem, parentName);\n }\n }\n\n //#endregion\n\n //#region ---- Utility Methods ----\n\n /**\n * Execute a menu action with common error handling and reload.\n *\n * @param action - The action to execute\n * @param successMessageKey - The i18n key for success message\n * @param errorMessageKey - The i18n key for error message\n */\n private async executeMenuAction(\n action: () => Promise<void>,\n successMessageKey: string,\n errorMessageKey: string,\n ): Promise<void> {\n try {\n await action();\n this.showSuccessMessage(successMessageKey);\n await this.loadMenuItems();\n } catch (error) {\n console.error('Menu action failed:', error);\n this.showErrorMessage(errorMessageKey);\n }\n }\n\n /**\n * Show a confirmation dialog.\n *\n * @param titleKey - The i18n key for the dialog title\n * @param messageKey - The i18n key for the dialog message\n * @returns True if confirmed, false otherwise\n */\n private async confirmAction(titleKey: string, messageKey: string): Promise<boolean> {\n const [title, message] = await Promise.all([\n this.translationService.translateAsync(titleKey),\n this.translationService.translateAsync(messageKey),\n ]);\n return (await this.dialogService.confirm(title, message)).result;\n }\n\n /**\n * Show a success toast message.\n *\n * @param messageKey - The i18n key for the message\n */\n private async showSuccessMessage(messageKey: string): Promise<void> {\n const message = await this.translationService.translateAsync(messageKey);\n this.toastService.success(message);\n }\n\n /**\n * Show an error toast message.\n *\n * @param messageKey - The i18n key for the message\n */\n private async showErrorMessage(messageKey: string): Promise<void> {\n const message = await this.translationService.translateAsync(messageKey);\n this.toastService.danger(message);\n }\n\n /**\n * Show a warning toast message.\n *\n * @param messageKey - The i18n key for the message\n */\n private async showWarningMessage(messageKey: string): Promise<void> {\n const message = await this.translationService.translateAsync(messageKey);\n this.toastService.warning(message);\n }\n\n private readonly eff = effect(() => {\n console.log('treeNodes', this.treeNodes());\n });\n private readonly eff2 = effect(() => {\n console.log('datasource', this.tree()?.datasource());\n });\n\n //#endregion\n}\n\n//#endregion\n","<!-- i18n path constants -->\n@let i18nBase = '@platform-management:menu-management';\n@let i18nEmptyStates = i18nBase + '.components.menu-list.empty-states';\n@let i18nActions = i18nBase + '.actions';\n\n<!-- Loading State -->\n@if (isLoading()) {\n <axp-state-message\n mode=\"loading\"\n icon=\"fa-light fa-spinner-third fa-spin\"\n [title]=\"(i18nEmptyStates + '.loading.title' | translate | async)!\"\n [description]=\"(i18nEmptyStates + '.loading.description' | translate | async)!\"\n />\n}\n\n<!-- Error State -->\n@else if (hasError()) {\n <axp-state-message\n mode=\"error\"\n icon=\"fa-light fa-circle-exclamation\"\n [title]=\"(i18nEmptyStates + '.error.title' | translate | async)!\"\n [description]=\"(i18nEmptyStates + '.error.description' | translate | async)!\"\n >\n <ax-button\n slot=\"actions\"\n [text]=\"'@general:actions.retry.title' | translate | async\"\n look=\"outline\"\n color=\"primary\"\n (onClick)=\"loadMenuItems()\"\n >\n <i class=\"fa-light fa-rotate-left\"></i>\n </ax-button>\n </axp-state-message>\n}\n\n<!-- Empty State -->\n@else if (showEmptyState()) {\n <axp-state-message\n mode=\"empty\"\n icon=\"fa-light fa-bars\"\n [title]=\"(i18nEmptyStates + '.no-data.title' | translate | async)!\"\n [description]=\"(i18nEmptyStates + '.no-data.description' | translate | async)!\"\n >\n @if (allowAddItems()) {\n <ax-button\n slot=\"actions\"\n [text]=\"i18nActions + '.add-root.title' | translate | async\"\n look=\"solid\"\n color=\"primary\"\n (onClick)=\"addRootMenuItem()\"\n >\n <i class=\"fa-light fa-plus\"></i>\n </ax-button>\n }\n </axp-state-message>\n}\n\n<!-- Main Content -->\n@else if (showContent()) {\n <!-- Toolbar -->\n @if (showToolbar()) {\n <div class=\"axp-menu-customizer__toolbar\">\n @if (allowAddItems()) {\n <ax-button\n [text]=\"i18nActions + '.add-root.title' | translate | async\"\n look=\"solid\"\n color=\"primary\"\n (onClick)=\"addRootMenuItem()\"\n >\n <ax-prefix>\n <i class=\"fa-light fa-plus\"></i>\n </ax-prefix>\n </ax-button>\n }\n\n <div class=\"axp-menu-customizer__toolbar-spacer\"></div>\n <!-- \n <ax-button\n [text]=\"i18nActions + '.collapse.title' | translate | async\"\n look=\"outline\"\n (onClick)=\"collapseAll()\"\n >\n <ax-prefix>\n <i class=\"fa-light fa-minus-square\"></i>\n </ax-prefix>\n </ax-button>\n\n <ax-button\n [text]=\"i18nActions + '.expand.title' | translate | async\"\n look=\"outline\"\n (onClick)=\"expandAll()\"\n >\n <ax-prefix>\n <i class=\"fa-light fa-plus-square\"></i>\n </ax-prefix>\n </ax-button> -->\n\n <ax-button\n [text]=\"i18nActions + '.reset.title' | translate | async\"\n look=\"outline\"\n color=\"danger\"\n (onClick)=\"resetCustomizations()\"\n >\n <ax-prefix>\n <i class=\"fa-light fa-rotate-left\"></i>\n </ax-prefix>\n </ax-button>\n </div>\n }\n\n <!-- Menu Tree -->\n <div class=\"axp-menu-customizer__container\">\n <div class=\"axp-menu-customizer__tree\">\n <ax-tree-view\n [(datasource)]=\"treeNodes\"\n look=\"default\"\n [nodeTemplate]=\"itemTemplate\"\n selectMode=\"none\"\n [showIcons]=\"false\"\n [showChildrenBadge]=\"false\"\n [dragBehavior]=\"dragBehavior()\"\n [dragArea]=\"dragArea()\"\n (onBeforeDrop)=\"handleBeforeDrop($event)\"\n (onOrderChange)=\"handleOrderChange($event)\"\n (onMoveChange)=\"handleMoveChange($event)\"\n />\n </div>\n </div>\n}\n\n<!-- Custom Item Template -->\n<ng-template #itemTemplate let-node=\"node\" let-level=\"level\">\n @let nodeData = node['data'];\n @let item = nodeData.menuItem;\n @let metadata = nodeData.metadata;\n @let isGroup = item.type === 'group';\n @let isBreak = item.type === 'break';\n @let isMenu = item.type === 'menu' || !item.type;\n @let canAddChild = !item.path && isMenu && allowAddItems();\n @let canToggleVisibility = item.name && metadata.isBuiltIn;\n @let canDelete = item.name && metadata.isCustom;\n @let i18nStates = '@platform-management:menu-management.states';\n\n <div\n class=\"axp-menu-customizer__item\"\n [class.axp-menu-customizer__item--hidden]=\"metadata.isHidden\"\n [class.axp-menu-customizer__item--custom]=\"metadata.isCustom\"\n [class.axp-menu-customizer__item--group]=\"isGroup\"\n >\n <!-- Icon (hidden for groups) -->\n @if (item.icon && !isGroup) {\n <i class=\"axp-menu-customizer__item-icon\" [class]=\"item.icon\"></i>\n }\n\n <!-- Content based on item type -->\n @if (isGroup) {\n <span class=\"axp-menu-customizer__item-group\">\n <i class=\"fa-light fa-layer-group\"></i>\n {{ item.text | translate | async }}\n </span>\n } @else if (isBreak) {\n <span class=\"axp-menu-customizer__item-divider\">\n <i class=\"fa-light fa-minus\"></i>\n {{ i18nStates + '.divider' | translate | async }}\n </span>\n } @else if (item.text) {\n <span class=\"axp-menu-customizer__item-text\">\n {{ item.text | translate | async }}\n </span>\n } @else if (item.path) {\n <span class=\"axp-menu-customizer__item-path\">\n <i class=\"fa-light fa-link\"></i>\n {{ item.path }}\n </span>\n }\n\n <!-- Menu Name/Key -->\n @if (item.name) {\n <code class=\"axp-menu-customizer__item-name\">{{ item.name }}</code>\n }\n\n <!-- Status Badges -->\n @if (metadata.isHidden) {\n <ax-badge [text]=\"(i18nStates + '.hidden' | translate | async)!\" color=\"danger\" />\n } @else if (metadata.isCustom) {\n <ax-badge [text]=\"(i18nStates + '.custom' | translate | async)!\" color=\"success\" />\n } @else if (metadata.isBuiltIn) {\n <ax-badge [text]=\"(i18nStates + '.built-in' | translate | async)!\" color=\"primary\" />\n }\n\n <!-- Actions Dropdown -->\n <ax-button class=\"axp-menu-customizer__item-actions\" look=\"blank\" size=\"sm\" [iconOnly]=\"true\">\n <ax-prefix>\n <i class=\"fa-light fa-ellipsis-vertical\"></i>\n </ax-prefix>\n\n <ax-dropdown-panel #panel>\n <ax-button-item-list>\n <!-- Edit (only for items with names) -->\n @if (item.name) {\n <ax-button-item\n [text]=\"('@general:actions.edit.title' | translate | async)!\"\n (onClick)=\"onAction('edit', nodeData); panel.close()\"\n >\n <ax-prefix>\n <i class=\"fa-light fa-edit\"></i>\n </ax-prefix>\n </ax-button-item>\n }\n\n <!-- Show/Hide (only for built-in items with names) -->\n @if (canToggleVisibility) {\n @if (metadata.isHidden) {\n <ax-button-item\n [text]=\"(i18nActions + '.show.title' | translate | async)!\"\n (onClick)=\"onAction('show', nodeData); panel.close()\"\n >\n <ax-prefix>\n <i class=\"fa-light fa-eye\"></i>\n </ax-prefix>\n </ax-button-item>\n } @else {\n <ax-button-item\n [text]=\"(i18nActions + '.hide.title' | translate | async)!\"\n (onClick)=\"onAction('hide', nodeData); panel.close()\"\n >\n <ax-prefix>\n <i class=\"fa-light fa-eye-slash\"></i>\n </ax-prefix>\n </ax-button-item>\n }\n }\n\n <!-- Add Child -->\n @if (canAddChild) {\n <ax-button-item\n [text]=\"(i18nActions + '.add-child.title' | translate | async)!\"\n (onClick)=\"onAction('add-child', nodeData); panel.close()\"\n >\n <ax-prefix>\n <i class=\"fa-light fa-plus\"></i>\n </ax-prefix>\n </ax-button-item>\n }\n\n <!-- Delete (only for custom items with names) -->\n @if (canDelete) {\n <ax-divider />\n <ax-button-item\n color=\"danger\"\n [text]=\"('@general:actions.delete.title' | translate | async)!\"\n (onClick)=\"onAction('delete', nodeData); panel.close()\"\n >\n <ax-prefix>\n <i class=\"fa-light fa-trash\"></i>\n </ax-prefix>\n </ax-button-item>\n }\n\n <!-- Info message for items without names -->\n @if (!item.name) {\n <ax-divider />\n <div class=\"ax-p-2 ax-text-xs ax-text-neutral-500 ax-italic\">\n {{ i18nBase + '.messages.info.no-name' | translate | async }}\n </div>\n }\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n </div>\n</ng-template>\n","import { withDefaultMultiLanguageOnWidgetProperty } from '@acorex/platform/common';\nimport { AXPWidgetNode, AXPWidgetProperty } from '@acorex/platform/layout/widget-core';\nimport { cloneDeep, isArray, isEmpty, isNil, merge, set, sortBy, unionBy } from 'lodash-es';\n\nimport { AXPPropertyViewerGroup, AXPPropertyViewerTab } from './property-viewer.types';\n\n/**\n * Copies {@link AXPWidgetProperty.validations} onto `schema.interface.options` so the property\n * viewer binds a stable widget node.\n */\nexport function withValidationsOnEditorNode(prop: AXPWidgetProperty): AXPWidgetProperty {\n if (!prop.validations?.length || !prop.schema?.interface) {\n return prop;\n }\n const iface = prop.schema.interface as AXPWidgetNode;\n const withOptions: AXPWidgetNode = {\n ...iface,\n options: {\n ...(iface.options ?? {}),\n validations: prop.validations,\n },\n };\n return {\n ...prop,\n schema: {\n ...prop.schema,\n interface: withOptions as NonNullable<AXPWidgetProperty['schema']>['interface'],\n },\n };\n}\n\nexport function preparePropertyForViewer(\n prop: AXPWidgetProperty,\n applyDefaultMultiLanguage: boolean,\n): AXPWidgetProperty {\n const withMl = withDefaultMultiLanguageOnWidgetProperty(prop, applyDefaultMultiLanguage);\n return withValidationsOnEditorNode(withMl);\n}\n\n/**\n * Deep-clone-safe: mutates cloned tab trees only when caller passes a fresh clone.\n * Applies the same widget-property pipeline as {@link AXPPropertyViewerComponent}.\n */\nexport function preparePropertyViewerTabs(\n tabs: AXPPropertyViewerTab[],\n applyDefaultMultiLanguage: boolean,\n): AXPPropertyViewerTab[] {\n return tabs\n .map((tab) => ({\n ...tab,\n groups: (tab.groups ?? [])\n .map<AXPPropertyViewerGroup>((group) => ({\n ...group,\n isCollapsed: group.isCollapsed ?? false,\n props: (group.props ?? [])\n .filter((prop) => prop.visible !== false)\n .map((prop) => preparePropertyForViewer(prop, applyDefaultMultiLanguage)),\n }))\n .filter((group) => group.props.length > 0),\n }))\n .filter((tab) => tab.groups.length > 0);\n}\n\n/**\n * Builds a single \"General\" tab for {@link AXPPropertyViewerService} from {@link AXPWidgetProperty} rows\n * (schema shape is shared with widget metadata; the edited payload is arbitrary context, not an {@link AXPWidgetNode}).\n */\nexport function buildPropertyViewerTabsFromProperties(properties: AXPWidgetProperty[]): AXPPropertyViewerTab[] {\n const visibleProps = (properties ?? []).filter((prop) => prop.visible !== false);\n if (visibleProps.length === 0) {\n return [];\n }\n const groups = unionBy(\n sortBy(\n visibleProps.map((prop) => ({\n name: prop.group.name,\n title: prop.group.title,\n isCollapsed: false,\n props: sortBy(\n visibleProps.filter((p) => p.group.name === prop.group.name && p.visible !== false),\n ['order', 'title'],\n ),\n })),\n ['order', 'title'],\n ),\n 'name',\n ).filter((group) => group.props.length > 0);\n\n return [\n {\n name: 'general',\n title: 'General',\n groups,\n },\n ];\n}\n\n/**\n * Initial {@link AXPPropertyViewerService#setContext} value: property default paths merged with the current saved values.\n */\nexport function buildPropertyViewerInitialContextFromProperties(\n properties: AXPWidgetProperty[],\n existing: Record<string, unknown>,\n): Record<string, unknown> {\n const allProperties = (properties ?? []).filter((p) => p.visible !== false);\n const defaults = allProperties\n .filter((prop) => {\n const defaultValue = prop.schema.defaultValue;\n if (isArray(defaultValue)) {\n return !isEmpty(defaultValue);\n }\n return !isNil(defaultValue);\n })\n .reduce((acc, prop) => {\n if (prop.schema?.interface?.path) {\n set(acc, prop.schema.interface.path, prop.schema.defaultValue);\n }\n return acc;\n }, {} as Record<string, unknown>);\n return merge(cloneDeep(defaults), cloneDeep(existing));\n}\n","import type { AXPWidgetProperty } from '@acorex/platform/layout/widget-core';\n\n/**\n * Heuristic: non-`{{ }}` strings that are clearly scripts (e.g. questionnaire / layout conditions).\n * Avoids treating normal short labels as expressions.\n */\nfunction isLikelyBareBindingScript(s: string): boolean {\n return (\n /\\banswer\\./.test(s) ||\n /\\bfn\\./.test(s) ||\n /===|!==|&&|\\|\\|/.test(s) ||\n /\\b(?:eval|get|set)\\s*\\(/.test(s)\n );\n}\n\n/**\n * Whether a binding-enabled property should show expression UI (toggle to code + open editor)\n * instead of the literal widget.\n *\n * - Values already wrapped in `{{ ... }}` are expressions (see `AXPExpressionEvaluatorService.isExpression`).\n * - Persisted domain data often stores **bare** scripts; for `dataType: 'boolean'` (typical toggle + binding),\n * any non-empty string that is not a boolean literal is treated as an expression.\n * - For `number`, strings that are not plain numeric literals are treated as expressions.\n * - For other types, `isLikelyBareBindingScript` reduces false positives for plain text.\n */\nexport function isPropertyBindingExpressionFormValue(\n property: AXPWidgetProperty,\n value: unknown,\n isTemplateExpression: (s: string) => boolean,\n): boolean {\n if (!property.binding?.enabled) {\n return false;\n }\n if (typeof value === 'boolean' || value === null || value === undefined) {\n return false;\n }\n if (typeof value !== 'string') {\n return false;\n }\n const t = value.trim();\n if (!t) {\n return false;\n }\n if (isTemplateExpression(t)) {\n return true;\n }\n const dataType = property.schema?.dataType ?? 'string';\n if (dataType === 'boolean') {\n const tl = t.toLowerCase();\n if (tl === 'true' || tl === 'false' || tl === '1' || tl === '0') {\n return false;\n }\n return true;\n }\n if (dataType === 'number') {\n if (/^-?\\d+(\\.\\d+)?$/.test(t)) {\n return false;\n }\n return true;\n }\n return isLikelyBareBindingScript(t);\n}\n","import { AXAccordionModule } from '@acorex/components/accordion';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXButtonGroupModule } from '@acorex/components/button-group';\nimport { AXCodeEditorModule } from '@acorex/components/code-editor';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXFormComponent, AXFormModule } from '@acorex/components/form';\nimport { AXPopupService } from '@acorex/components/popup';\nimport { AXTabsModule, AXTabStripChangedEvent } from '@acorex/components/tabs';\nimport { AXValidationSummary } from '@acorex/core/validation';\nimport { AXPDefaultMultiLanguageConfigService } from '@acorex/platform/common';\nimport {\n AXPWidgetCoreModule,\n AXPWidgetNode,\n AXPWidgetProperty,\n} from '@acorex/platform/layout/widget-core';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport {\n AXPContextChangeEvent,\n AXPContextData,\n AXPExpressionEvaluatorScope,\n AXPExpressionEvaluatorService,\n} from '@acorex/platform/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n EventEmitter,\n inject,\n input,\n Output,\n signal,\n untracked,\n viewChild,\n ViewEncapsulation,\n WritableSignal,\n} from '@angular/core';\nimport { cloneDeep, get, merge, set } from 'lodash-es';\n\nimport {\n AXPPropertyViewerChangedEvent,\n AXPPropertyViewerGroup,\n AXPPropertyViewerTab,\n} from './property-viewer.types';\nimport { preparePropertyViewerTabs } from './property-viewer-tab-pipeline';\nimport { isPropertyBindingExpressionFormValue } from './property-viewer-binding.util';\n\n@Component({\n selector: 'axp-property-viewer',\n templateUrl: './property-viewer.component.html',\n styleUrls: ['./property-viewer.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n CommonModule,\n AXAccordionModule,\n AXButtonModule,\n AXButtonGroupModule,\n AXCodeEditorModule,\n AXDecoratorModule,\n AXFormModule,\n FormsModule,\n AXTabsModule,\n AXPWidgetCoreModule,\n AXTranslationModule,\n ],\n})\nexport class AXPPropertyViewerComponent {\n private readonly defaultMultiLanguageConfig = inject(AXPDefaultMultiLanguageConfigService);\n\n //#region ---- Inputs ----\n\n /**\n * List of tabs that should be rendered inside the property viewer.\n */\n tabsInput = input<AXPPropertyViewerTab[]>([]);\n\n /**\n * Determines rendering mode.\n */\n mode = input<'simple' | 'advanced'>('simple');\n\n /**\n * When a property uses binding expressions, controls how the expression is edited:\n * `inline` — code editor in the panel (default); `popup` — button that opens the dialog editor.\n */\n bindingExpressionEditorMode = input<'inline' | 'popup'>('inline');\n\n //#endregion\n\n //#region ---- Outputs ----\n\n /**\n * Emits when property context changes.\n */\n @Output()\n onChanged = new EventEmitter<AXPPropertyViewerChangedEvent>();\n\n //#endregion\n\n //#region ---- Signals ----\n\n protected currentTabIndex: WritableSignal<number> = signal(0);\n\n protected tabs = computed<AXPPropertyViewerTab[]>(() => {\n const incomingTabs = this.tabsInput() ?? [];\n const applyMl = this.defaultMultiLanguageConfig.getApplyDefaultMultiLanguage();\n return preparePropertyViewerTabs(incomingTabs, applyMl);\n });\n\n protected groups = computed<AXPPropertyViewerGroup[]>(() => {\n const preparedTabs = this.tabs();\n if (!preparedTabs.length) {\n return [];\n }\n const index = Math.min(this.currentTabIndex(), preparedTabs.length - 1);\n if (index !== this.currentTabIndex()) {\n this.currentTabIndex.set(index);\n }\n return preparedTabs[index].groups.map((group) => ({\n ...group,\n isCollapsed: this.groupCollapsedStates.get(group.name) ?? !!group.isCollapsed,\n }));\n });\n\n protected context = signal<any>({});\n\n /**\n * Per-expression-path override for \"use expression\" vs \"use value\" when binding.enabled.\n * Updated when user toggles the ax-switch; otherwise derived from isExpression(valueAtPath).\n */\n protected expressionModeState = signal<Record<string, boolean>>({});\n\n /**\n * Evaluated visibility for properties whose {@link AXPWidgetProperty.visible} is a `{{ }}` expression.\n * Keys match {@link AXPPropertyViewerComponent.propertyVisibilityKey}.\n */\n private propertyVisibility = signal<Record<string, boolean>>({});\n\n //#endregion\n\n //#region ---- Properties ----\n\n protected groupCollapsedStates: Map<string, boolean> = new Map();\n\n private readonly expressionEvaluator = inject(AXPExpressionEvaluatorService);\n private readonly popupService = inject(AXPopupService);\n\n private readonly form = viewChild(AXFormComponent);\n\n //#endregion\n\n constructor() {\n effect(() => {\n const availableTabs = this.tabs();\n const availableGroups = availableTabs.flatMap((tab) => tab.groups);\n availableGroups.forEach((group) => {\n if (!this.groupCollapsedStates.has(group.name) && group.isCollapsed !== undefined) {\n this.groupCollapsedStates.set(group.name, !!group.isCollapsed);\n }\n });\n if (!availableTabs.length) {\n this.currentTabIndex.set(0);\n } else if (this.currentTabIndex() >= availableTabs.length) {\n this.currentTabIndex.set(0);\n }\n });\n\n effect(() => {\n const ctx = this.context();\n const tabList = this.tabs();\n untracked(() => void this.recomputePropertyVisibility(ctx, tabList));\n });\n }\n\n //#region ---- Public Methods ----\n\n /**\n * Replaces the current context with the provided value and emits an init event.\n */\n public initializeContext(value: any): void {\n untracked(() => {\n this.context.set(cloneDeep(value ?? {}));\n this.onChanged.emit({ values: this.context(), mode: 'init' });\n });\n }\n\n /**\n * Merges the provided value into the current context and emits an update event.\n */\n public update(value: any): void {\n untracked(() => {\n this.context.set(merge(cloneDeep(this.context()), value ?? {}));\n this.onChanged.emit({ values: this.context(), mode: 'update' });\n });\n }\n\n /**\n * Runs registered validation rules on fields inside this viewer (requires {@link AXFormModule} host).\n */\n public async validate(): Promise<AXValidationSummary> {\n const form = this.form();\n if (!form) {\n return { result: true, messages: [], rules: [] } as AXValidationSummary;\n }\n return form.validate();\n }\n\n //#endregion\n\n //#region ---- Visibility (expression `visible` on widget properties) ----\n\n /**\n * Stable key for visibility map entries (avoids collisions when the same `name` appears twice).\n */\n protected propertyVisibilityKey(prop: AXPWidgetProperty): string {\n return prop.schema?.interface?.path ?? prop.name;\n }\n\n /**\n * Whether a property row should render. Booleans are static; `{{ }}` strings are evaluated against\n * {@link context} with `context.eval(path)` like {@link AXPWidgetRendererDirective.updateVisibility}.\n */\n protected isPropertyVisible(prop: AXPWidgetProperty): boolean {\n this.propertyVisibility();\n const vis = prop.visible;\n if (typeof vis === 'boolean') {\n return vis;\n }\n if (typeof vis === 'string' && this.expressionEvaluator.isExpression(vis)) {\n return this.propertyVisibility()[this.propertyVisibilityKey(prop)] ?? false;\n }\n return true;\n }\n\n private async recomputePropertyVisibility(ctx: AXPContextData, tabList: AXPPropertyViewerTab[]): Promise<void> {\n const props = tabList.flatMap((t) => t.groups.flatMap((g) => g.props));\n const scope: AXPExpressionEvaluatorScope = {\n context: {\n eval: (path: string) => get(ctx as object, path),\n },\n };\n const entries = await Promise.all(\n props.map(async (prop) => {\n const key = this.propertyVisibilityKey(prop);\n const vis = prop.visible;\n if (typeof vis === 'boolean') {\n return [key, vis] as const;\n }\n if (typeof vis === 'string' && this.expressionEvaluator.isExpression(vis)) {\n try {\n const result = await this.expressionEvaluator.evaluate(vis, scope);\n return [key, Boolean(result)] as const;\n } catch {\n return [key, true] as const;\n }\n }\n return [key, true] as const;\n }),\n );\n this.propertyVisibility.set(Object.fromEntries(entries));\n }\n\n //#endregion\n\n //#region ---- Event Handlers ----\n\n /**\n * Handles context changes produced by rendered widgets.\n */\n protected handleContextChange(event: AXPContextChangeEvent): void {\n untracked(() => {\n this.context.set(event.data);\n this.onChanged.emit({ values: this.context(), mode: event.state === 'initiated' ? 'init' : 'update' });\n });\n }\n\n /**\n * Handles tab selection changes.\n */\n protected handleTabChange(event: AXTabStripChangedEvent): void {\n const index = event.index;\n if (this.currentTabIndex() !== index) {\n this.currentTabIndex.set(index);\n }\n }\n\n /**\n * Stores collapsed state for a group.\n */\n protected handleCollapsedChange(groupName: string, isCollapsed: boolean): void {\n this.groupCollapsedStates.set(groupName, isCollapsed);\n }\n\n /**\n * Returns the config path used for the binding value (and expression) for a property with binding.enabled.\n */\n protected getExpressionPath(prop: AXPWidgetProperty): string {\n const basePath = prop.schema?.interface?.path ?? prop.name;\n return prop.binding?.optionKey ? `${basePath}.${prop.binding.optionKey}` : basePath;\n }\n\n /**\n * True when the property is in \"expression\" mode: show only the expression editor button, not the widget.\n * Uses expressionModeState when set; otherwise derives from template `{{ }}` expressions and, when\n * {@link AXPWidgetProperty.binding} is enabled, bare scripts persisted without wrappers.\n */\n protected isExpressionMode(prop: AXPWidgetProperty): boolean {\n this.expressionModeState(); // dependency for change detection\n const path = this.getExpressionPath(prop);\n const stored = this.expressionModeState()[path];\n if (stored !== undefined) {\n return stored;\n }\n const v = get(this.context(), path);\n return isPropertyBindingExpressionFormValue(prop, v, (s) => this.expressionEvaluator.isExpression(s));\n }\n\n /**\n * Returns the default value when switching from expression to value mode.\n * Source of truth is prop.schema.defaultValue (widget.types): plain value, or function (context) => value.\n * A minimal dataType fallback is used only when the schema provides no default.\n */\n private getDefaultValueForProperty(prop: AXPWidgetProperty): any {\n const def = prop.schema?.defaultValue;\n if (typeof def === 'function') {\n return def(this.context());\n }\n if (def !== undefined && def !== null) {\n return def;\n }\n const dataType = prop.schema?.dataType ?? 'string';\n switch (dataType) {\n case 'boolean':\n return false;\n case 'number':\n return 0;\n case 'object':\n return {};\n case 'array':\n return [];\n default:\n return '';\n }\n }\n\n /**\n * Updates the expression/value toggle state for a binding-enabled property.\n * When switching to value: resets the value at path to a type-appropriate default so the\n * widget renderer does not receive the expression string (e.g. checkbox gets false, not a string).\n * When switching to expression: sets the value at path to an empty string so the editor starts\n * blank instead of keeping the previous literal (e.g. true/false).\n */\n protected setExpressionMode(prop: AXPWidgetProperty, useExpression: boolean): void {\n const path = this.getExpressionPath(prop);\n const currentVal = get(this.context(), path);\n const currentIsExpression = isPropertyBindingExpressionFormValue(prop, currentVal, (s) =>\n this.expressionEvaluator.isExpression(s),\n );\n\n this.expressionModeState.update((s) => ({ ...s, [path]: useExpression }));\n\n if (!useExpression && currentIsExpression) {\n const next = cloneDeep(this.context());\n set(next, path, this.getDefaultValueForProperty(prop));\n untracked(() => {\n this.context.set(next);\n this.onChanged.emit({ values: this.context(), mode: 'update' });\n });\n } else if (useExpression && !currentIsExpression) {\n const next = cloneDeep(this.context());\n set(next, path, '');\n untracked(() => {\n this.context.set(next);\n this.onChanged.emit({ values: this.context(), mode: 'update' });\n });\n }\n }\n\n /**\n * Current binding expression string at the property path (for inline editor ngModel).\n */\n protected getBindingExpressionValue(prop: AXPWidgetProperty): string {\n const expressionPath = this.getExpressionPath(prop);\n const raw = get(this.context(), expressionPath);\n return typeof raw === 'string' ? raw : '';\n }\n\n /**\n * Persists inline code editor changes into context.\n */\n protected setBindingExpressionValue(prop: AXPWidgetProperty, value: string): void {\n const expressionPath = this.getExpressionPath(prop);\n const next = cloneDeep(this.context());\n set(next, expressionPath, value);\n untracked(() => {\n this.context.set(next);\n this.onChanged.emit({ values: this.context(), mode: 'update' });\n });\n }\n\n /**\n * Opens the binding/expression code editor for a property with binding.enabled.\n * Ensures the value passed to the popup is always a string to avoid code-editor crashes.\n */\n protected async openBindingEditor(prop: AXPWidgetProperty): Promise<void> {\n const expressionPath = this.getExpressionPath(prop);\n const raw = get(this.context(), expressionPath);\n const currentValue = typeof raw === 'string' ? raw : '';\n\n const { AXPBindingExpressionEditorPopupComponent } = await import(\n './binding-expression-editor-popup.component'\n );\n\n const result = await this.popupService.open(AXPBindingExpressionEditorPopupComponent, {\n title: '@general:widgets.triggers.edit-binding-expression',\n size: 'lg',\n data: { initialValue: signal(currentValue) },\n });\n\n if (result?.data?.value !== undefined) {\n const next = cloneDeep(this.context());\n set(next, expressionPath, result.data.value);\n untracked(() => {\n this.context.set(next);\n this.onChanged.emit({ values: this.context(), mode: 'update' });\n });\n }\n }\n\n //#endregion\n}\n\n","<ax-form>\n <axp-widgets-container [context]=\"context()\" (onContextChanged)=\"handleContextChange($event)\">\n <!-- #region Shared property row template (used in both advanced and simple modes) -->\n <ng-template #propertyRow let-prop=\"prop\" let-translateTitle=\"translateTitle\">\n <div class=\"ax-flex ax-flex-col ax-gap-2 ax-py-2\">\n <!-- Property header: title + value/expression toggle (when binding.enabled) -->\n <div class=\"ax-flex ax-items-center ax-gap-2 ax-w-full\">\n @if (prop.showLabel !== false) {\n @if (translateTitle) {\n <span class=\"ax-font-semibold ax-flex-1 ax-min-w-0\">{{ prop.title | translate | async }}</span>\n } @else {\n <span class=\"ax-font-semibold ax-flex-1 ax-min-w-0\">{{ prop.title }}</span>\n }\n }\n @if (prop.binding?.enabled) {\n <div class=\"ax-flex ax-gap-1 ax-shrink-0 ax-xs\">\n <ax-button [toggleable]=\"true\" [selected]=\"isExpressionMode(prop)\" look=\"twotone\"\n [color]=\"isExpressionMode(prop) ? 'primary' : 'default'\" class=\"ax-shrink-0\"\n [title]=\"(isExpressionMode(prop) ? '@general:terms.common.expression' : '@general:terms.common.value') | translate | async\"\n (selectedChange)=\"setExpressionMode(prop, $event)\">\n @if (isExpressionMode(prop)) {\n <ax-icon icon=\"fa-light fa-code\"></ax-icon>\n } @else {\n <ax-icon icon=\"fa-light fa-keyboard\"></ax-icon>\n }\n </ax-button>\n </div>\n }\n </div>\n <!-- Property content: expression editor (inline or popup) or widget renderer (value mode) -->\n @if (prop.binding?.enabled && isExpressionMode(prop)) {\n @if (bindingExpressionEditorMode() === 'inline') {\n <div class=\"ax-w-full ax-overflow-hidden\" style=\"direction: ltr;\">\n <ax-code-editor [ngModel]=\"getBindingExpressionValue(prop)\"\n (ngModelChange)=\"setBindingExpressionValue(prop, $event)\" language=\"javascript\"\n [lineNumbers]=\"true\" class=\"ax-w-full\">\n </ax-code-editor>\n </div>\n } @else {\n <ax-button look=\"twotone\" color=\"primary\" size=\"sm\" class=\"ax-w-full\"\n [text]=\"'@general:widgets.triggers.open-editor' | translate | async\"\n (onClick)=\"openBindingEditor(prop)\"\n [title]=\"'@general:widgets.triggers.edit-binding-expression' | translate | async\">\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-code\"></ax-icon>\n </ax-prefix>\n </ax-button>\n }\n } @else if (prop.schema.interface) {\n <ng-container axp-widget-renderer [node]=\"prop.schema.interface\" [mode]=\"'edit'\">\n </ng-container>\n }\n </div>\n </ng-template>\n <!-- #endregion -->\n\n <!-- #region Advanced mode: tabs + accordion groups -->\n @if (mode() === 'advanced') {\n <div class=\"ax-flex ax-flex-col\">\n @if (tabs().length > 1) {\n <div class=\"ax-pb-2\">\n <ax-tabs look=\"default\" (onActiveTabChanged)=\"handleTabChange($event)\" [look]=\"'with-line'\">\n @for (tab of tabs(); track $index) {\n <ax-tab-item [text]=\"(tab.title | translate | async) ?? ''\" [key]=\"$index.toString()\"\n [active]=\"currentTabIndex() === $index\">\n </ax-tab-item>\n }\n </ax-tabs>\n </div>\n }\n <div class=\"ax-flex-1 ax-overflow-auto\">\n <ax-accordion-group [accordion]=\"false\" [look]=\"'flat'\">\n @for (group of groups(); track $index) {\n <ax-accordion-item class=\"!ax-mb-0\" [caption]=\"(group.title | translate | async) ?? ''\"\n [isCollapsed]=\"group.isCollapsed\"\n (isCollapsedChange)=\"handleCollapsedChange(group.name, $event)\">\n <div class=\"ax-flex ax-flex-col\">\n @for (p of group.props; track $index) {\n @if (isPropertyVisible(p)) {\n <ng-container *ngTemplateOutlet=\"propertyRow; context: { prop: p, translateTitle: true }\">\n </ng-container>\n }\n }\n </div>\n </ax-accordion-item>\n }\n </ax-accordion-group>\n </div>\n </div>\n }\n <!-- #endregion -->\n\n <!-- #region Simple mode: flat list of properties with padding -->\n @else {\n <div class=\"ax-flex ax-flex-col ax-p-4 ax-gap-4\">\n @for (group of groups(); track $index) {\n @for (p of group.props; track $index) {\n @if (isPropertyVisible(p)) {\n <ng-container *ngTemplateOutlet=\"propertyRow; context: { prop: p, translateTitle: true }\">\n </ng-container>\n }\n }\n }\n </div>\n }\n <!-- #endregion -->\n </axp-widgets-container>\n</ax-form>","import { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXBasePageComponent } from '@acorex/components/page';\nimport { AXToastService } from '@acorex/components/toast';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\nimport { AXValidationSummary } from '@acorex/core/validation';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n effect,\n inject,\n input,\n signal,\n viewChild,\n} from '@angular/core';\n\nimport { AXPPropertyViewerComponent } from './property-viewer.component';\nimport {\n AXPPropertyViewerChangedEvent,\n AXPPropertyViewerResult,\n AXPPropertyViewerTab,\n} from './property-viewer.types';\n\n@Component({\n selector: 'axp-property-viewer-popup',\n template: `\n <div class=\"ax-flex ax-flex-col ax-h-full ax-overflow-hidden\">\n <axp-property-viewer\n [tabsInput]=\"tabs()\"\n [mode]=\"mode()\"\n (onChanged)=\"handlePropertyChanged($event)\"\n ></axp-property-viewer>\n </div>\n\n <ax-footer>\n <ax-suffix>\n <ax-button\n look=\"solid\"\n [disabled]=\"isApplying()\"\n [text]=\"('@general:actions.cancel.title' | translate | async) ?? ''\"\n (onClick)=\"handleCloseClick()\"\n ></ax-button>\n <ax-button\n look=\"solid\"\n color=\"primary\"\n [disabled]=\"isApplying()\"\n [text]=\"('@general:actions.save.title' | translate | async) ?? ''\"\n (onClick)=\"handleApplyClick()\"\n ></ax-button>\n </ax-suffix>\n </ax-footer>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n AXButtonModule,\n AXDecoratorModule,\n AXTranslationModule,\n AXPPropertyViewerComponent,\n ],\n})\nexport class AXPPropertyViewerPopupComponent extends AXBasePageComponent {\n //#region ---- Services ----\n\n private readonly toastService = inject(AXToastService);\n private readonly translationService = inject(AXTranslationService);\n\n //#endregion\n\n //#region ---- Inputs ----\n\n tabs = input.required<AXPPropertyViewerTab[]>();\n mode = input<'simple' | 'advanced'>('simple');\n context = input<any>({});\n\n //#endregion\n\n //#region ---- Popup data (assigned by AXPopupService; not `input()` — avoids host overwriting signal inputs) ----\n\n /**\n * Optional hook from `data.onApply`. Throw or reject to keep the popup open.\n * Return a value (not `undefined`) to use as the `close()` payload; otherwise `{ values, mode }` is used.\n */\n onApply?: (result: AXPPropertyViewerResult) => void | Promise<unknown>;\n\n //#endregion\n\n //#region ---- Properties ----\n\n protected readonly propertyViewer = viewChild(AXPPropertyViewerComponent);\n protected readonly currentValues = signal<Record<string, unknown>>({});\n protected readonly isApplying = signal(false);\n protected currentMode: 'init' | 'update' = 'init';\n\n //#endregion\n\n constructor() {\n super();\n\n effect(() => {\n const viewer = this.propertyViewer();\n if (!viewer) {\n return;\n }\n viewer.initializeContext(this.context() ?? {});\n });\n }\n\n //#region ---- Event Handlers ----\n\n protected handlePropertyChanged(event: AXPPropertyViewerChangedEvent): void {\n this.currentValues.set(event.values ?? {});\n this.currentMode = event.mode;\n }\n\n protected handleCloseClick(): void {\n this.close();\n }\n\n protected async handleApplyClick(): Promise<void> {\n const viewer = this.propertyViewer();\n if (viewer) {\n const summary = await viewer.validate();\n if (!summary.result) {\n await this.showValidationErrorToast(summary);\n return;\n }\n }\n\n const payload: AXPPropertyViewerResult = {\n values: this.currentValues(),\n mode: this.currentMode,\n };\n const defaultClose: AXPPropertyViewerResult = { values: payload.values, mode: payload.mode };\n const hook = this.onApply;\n if (hook) {\n this.isApplying.set(true);\n try {\n const out = await Promise.resolve(hook(payload));\n this.close(out === undefined ? defaultClose : out);\n } catch {\n return;\n } finally {\n this.isApplying.set(false);\n }\n return;\n }\n this.close(defaultClose);\n }\n\n private async showValidationErrorToast(summary: AXValidationSummary): Promise<void> {\n const withMessages = summary as AXValidationSummary & { messages?: string[] };\n const parts = (withMessages.messages ?? []).map((m) => (m != null ? String(m).trim() : '')).filter(Boolean);\n const detail = parts.length > 0 ? parts.join(' ') : '';\n const fallback =\n (await this.translationService.translateAsync('@general:messages.form.invalid.error.description')) ??\n 'Please fix the highlighted fields.';\n this.toastService.danger(detail || fallback);\n }\n\n //#endregion\n}\n","import { Injectable, inject, signal } from '@angular/core';\nimport { AXPopupService, AXPopupSizeType } from '@acorex/components/popup';\nimport { AXPDefaultMultiLanguageConfigService } from '@acorex/platform/common';\nimport { cloneDeep } from 'lodash-es';\n\nimport { AXPPropertyViewerPopupComponent } from './property-viewer-popup.component';\nimport { preparePropertyViewerTabs } from './property-viewer-tab-pipeline';\nimport {\n AXPPropertyViewerActionRef,\n AXPPropertyViewerResult,\n AXPPropertyViewerTab,\n} from './property-viewer.types';\n\n//#region ---- Fluent dialog API (mirrors layoutBuilder.create().dialog(...).show()) ----\n\nexport interface IAXPPropertyViewerRoot {\n dialog<T = unknown>(\n delegate: (container: IAXPPropertyViewerDialogBuilder<T>) => void,\n ): IAXPPropertyViewerDialogBuilder<T>;\n}\n\nexport interface IAXPPropertyViewerDialogBuilder<T = unknown> {\n setTitle(title: string): IAXPPropertyViewerDialogBuilder<T>;\n setSize(size: AXPopupSizeType): IAXPPropertyViewerDialogBuilder<T>;\n setCloseButton(closeButton: boolean): IAXPPropertyViewerDialogBuilder<T>;\n setContext(context: any): IAXPPropertyViewerDialogBuilder<T>;\n setTabs(tabs: AXPPropertyViewerTab[]): IAXPPropertyViewerDialogBuilder<T>;\n setMode(mode: 'simple' | 'advanced'): IAXPPropertyViewerDialogBuilder<T>;\n /**\n * Runs on Save. Throw or reject to keep the popup open (same idea as layout dialog `onAction`).\n * Return a value to resolve `show()`; omit return (or return void) to resolve with `{ values, mode }`.\n */\n onAction(\n handler: (dialogRef: AXPPropertyViewerActionRef) => T | Promise<T> | void | Promise<void>,\n ): IAXPPropertyViewerDialogBuilder<T>;\n show(): Promise<T | AXPPropertyViewerResult | null>;\n}\n\nclass PropertyViewerDialogBuilder<T = unknown> implements IAXPPropertyViewerDialogBuilder<T> {\n private titleValue = '';\n private sizeValue: AXPopupSizeType = 'md';\n private closeButtonValue = false;\n private contextValue: any = {};\n private tabsValue: AXPPropertyViewerTab[] | undefined;\n private modeValue: 'simple' | 'advanced' = 'simple';\n private onActionHandler?: (\n dialogRef: AXPPropertyViewerActionRef,\n ) => T | Promise<T> | void | Promise<void>;\n\n constructor(\n private readonly popupService: AXPopupService,\n private readonly getApplyDefaultMultiLanguage: () => boolean,\n ) {}\n\n setTitle(title: string): IAXPPropertyViewerDialogBuilder<T> {\n this.titleValue = title;\n return this;\n }\n\n setSize(size: AXPopupSizeType): IAXPPropertyViewerDialogBuilder<T> {\n this.sizeValue = size;\n return this;\n }\n\n setCloseButton(closeButton: boolean): IAXPPropertyViewerDialogBuilder<T> {\n this.closeButtonValue = closeButton;\n return this;\n }\n\n setContext(context: any): IAXPPropertyViewerDialogBuilder<T> {\n this.contextValue = context;\n return this;\n }\n\n setTabs(tabs: AXPPropertyViewerTab[]): IAXPPropertyViewerDialogBuilder<T> {\n this.tabsValue = tabs;\n return this;\n }\n\n setMode(mode: 'simple' | 'advanced'): IAXPPropertyViewerDialogBuilder<T> {\n this.modeValue = mode;\n return this;\n }\n\n onAction(\n handler: (dialogRef: AXPPropertyViewerActionRef) => T | Promise<T> | void | Promise<void>,\n ): IAXPPropertyViewerDialogBuilder<T> {\n this.onActionHandler = handler;\n return this;\n }\n\n async show(): Promise<T | AXPPropertyViewerResult | null> {\n if (!this.tabsValue?.length) {\n throw new Error('Property viewer dialog: call setTabs([...]) before show().');\n }\n\n const onApply = async (payload: AXPPropertyViewerResult): Promise<unknown> => {\n const fallback: AXPPropertyViewerResult = { values: payload.values, mode: payload.mode };\n if (!this.onActionHandler) {\n return fallback;\n }\n const dialogRef: AXPPropertyViewerActionRef = {\n close: () => {},\n context: () => payload.values,\n action: () => 'submit',\n setLoading: () => {},\n };\n const out = await this.onActionHandler(dialogRef);\n return out === undefined ? fallback : out;\n };\n\n const tabSource = this.tabsValue ?? [];\n const preparedTabs = preparePropertyViewerTabs(cloneDeep(tabSource), this.getApplyDefaultMultiLanguage());\n\n const result = await this.popupService.open(AXPPropertyViewerPopupComponent, {\n title: this.titleValue,\n size: this.sizeValue,\n closeButton: this.closeButtonValue,\n data: {\n tabs: signal(preparedTabs),\n mode: signal(this.modeValue),\n context: signal(this.contextValue ?? {}),\n onApply,\n },\n });\n\n return (result?.data as T | AXPPropertyViewerResult) ?? null;\n }\n}\n\n//#endregion\n\n//#region ---- Legacy single-call config ----\n\nexport interface AXPPropertyViewerConfig {\n title: string;\n tabs: AXPPropertyViewerTab[];\n context?: any;\n mode?: 'simple' | 'advanced';\n size?: AXPopupSizeType;\n /**\n * When set, runs before close on Save. Throw or reject to keep the popup open.\n */\n onApply?: (result: AXPPropertyViewerResult) => void | Promise<void>;\n}\n\n//#endregion\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPPropertyViewerService {\n //#region ---- Services & Dependencies ----\n\n private readonly popupService = inject(AXPopupService);\n private readonly defaultMultiLanguageConfig = inject(AXPDefaultMultiLanguageConfigService);\n\n //#endregion\n\n //#region ---- Public Methods ----\n\n /**\n * Same entry shape as `layoutBuilder.create()` — use `.dialog((d) => { ... }).show()`.\n */\n create(): IAXPPropertyViewerRoot {\n const popupService = this.popupService;\n const getApplyMl = () => this.defaultMultiLanguageConfig.getApplyDefaultMultiLanguage();\n return {\n dialog: <T>(delegate: (container: IAXPPropertyViewerDialogBuilder<T>) => void) => {\n const b = new PropertyViewerDialogBuilder<T>(popupService, getApplyMl);\n delegate(b);\n return b;\n },\n };\n }\n\n /**\n * Opens the property viewer popup in one call (delegates to {@link #create} `.dialog().show()`).\n */\n async open(config: AXPPropertyViewerConfig): Promise<AXPPropertyViewerResult | null> {\n const result = await this.create().dialog((d) => {\n d.setTitle(config.title)\n .setSize(config.size ?? 'md')\n .setCloseButton(false)\n .setMode(config.mode ?? 'simple')\n .setTabs(config.tabs)\n .setContext(config.context ?? {});\n if (config.onApply) {\n d.onAction(async (ref) => {\n await config.onApply!({ values: ref.context(), mode: 'update' });\n });\n }\n }).show();\n return (result as AXPPropertyViewerResult) ?? null;\n }\n\n //#endregion\n}\n","import {\n AXDragDirective,\n AXDragHandleDirective,\n AXDropListDirective,\n AXDropListDroppedEvent,\n} from '@acorex/cdk/drag-drop';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AsyncPipe, NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, input, output, TemplateRef } from '@angular/core';\nimport { AXPStateMessageComponent } from '../state-message';\n\n//#region ---- Repeater rows layout ----\n\n/**\n * Presentational layout for indexed rows: optional drag-and-drop, remove controls,\n * empty state, and add action. Row body is provided via {@link rowTemplate}.\n */\n@Component({\n selector: 'axp-repeater-rows-layout',\n templateUrl: './repeater-rows-layout.component.html',\n styleUrl: './repeater-rows-layout.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n AsyncPipe,\n NgTemplateOutlet,\n AXButtonModule,\n AXDecoratorModule,\n AXTranslationModule,\n AXPStateMessageComponent,\n AXDragHandleDirective,\n AXDropListDirective,\n AXDragDirective,\n ],\n})\nexport class AXPRepeaterRowsLayoutComponent {\n count = input.required<number>();\n\n disabled = input(false);\n hasControls = input(true);\n allowReorder = input(false);\n\n rowTemplate = input.required<TemplateRef<{ index: number }>>();\n\n /** i18n keys (e.g. `@general:...`) for labels; override per usage. */\n addItemLabelKey = input<string>('@general:state-message.repeater-empty.add-item');\n emptyTitleKey = input<string>('@general:state-message.repeater-empty.title');\n emptyDescriptionKey = input<string>('@general:state-message.repeater-empty.description');\n addFirstItemLabelKey = input<string>('@general:state-message.repeater-empty.add-first-item');\n\n addClick = output<void>();\n removeClick = output<number>();\n drop = output<AXDropListDroppedEvent>();\n\n protected readonly rowIndices = computed(() => Array.from({ length: this.count() }, (_, i) => i));\n\n protected readonly rowRowClass = computed(\n () =>\n `ax-grid ax-gap-4 ax-items-center ax-pb-2 ${\n this.allowReorder() ? 'ax-grid-cols-[auto_1fr_auto]' : 'ax-grid-cols-[1fr_auto]'\n }`,\n );\n\n protected onDrop(e: AXDropListDroppedEvent): void {\n this.drop.emit(e);\n }\n\n protected onAddClick(): void {\n this.addClick.emit();\n }\n\n protected onRemoveClick(index: number): void {\n this.removeClick.emit(index);\n }\n}\n\n//#endregion\n","<div axDropList dropListOrientation=\"vertical\" (dropListDropped)=\"onDrop($event)\">\n @for (i of rowIndices(); track i) {\n <div axDrag [dragDisabled]=\"!allowReorder()\" [class]=\"rowRowClass()\">\n @if (allowReorder()) {\n <div>\n <ax-icon class=\"fa-solid fa-grip-vertical\" axDragHandle></ax-icon>\n </div>\n }\n\n <div class=\"ax-min-w-0\">\n <ng-container [ngTemplateOutlet]=\"rowTemplate()\" [ngTemplateOutletContext]=\"{ index: i }\"></ng-container>\n </div>\n\n @if (hasControls()) {\n <div class=\"ax-justify-self-end ax-self-start\">\n <ax-button [disabled]=\"disabled()\" look=\"twotone\" color=\"danger\" (onClick)=\"onRemoveClick(i)\">\n <ax-icon icon=\"fa-regular fa-xmark\"></ax-icon>\n </ax-button>\n </div>\n }\n </div>\n } @empty {\n <axp-state-message mode=\"empty\" variant=\"compact\" icon=\"fa-light fa-list\" [title]=\"emptyTitleKey()\"\n [description]=\"emptyDescriptionKey()\">\n <div slot=\"actions\">\n <ax-button [text]=\"(addFirstItemLabelKey() | translate | async)!\" look=\"twotone\" color=\"primary\"\n [disabled]=\"disabled()\" (onClick)=\"onAddClick()\">\n <ax-prefix>\n <ax-icon class=\"fa-light fa-add\"></ax-icon>\n </ax-prefix>\n </ax-button>\n </div>\n </axp-state-message>\n }\n\n @if (count() > 0) {\n <div class=\"ax-flex ax-justify-end\">\n <ax-button [text]=\"(addItemLabelKey() | translate | async)!\" look=\"twotone\" [disabled]=\"disabled()\"\n (onClick)=\"onAddClick()\">\n <ax-prefix>\n <ax-icon class=\"fa-solid fa-add\"></ax-icon>\n </ax-prefix>\n </ax-button>\n </div>\n }\n</div>","import { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXTabsModule } from '@acorex/components/tabs';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPSortDefinition, AXPSortQuery } from '@acorex/platform/core';\nimport { CdkDrag, CdkDragDrop, CdkDragHandle, CdkDropList, moveItemInArray } from '@angular/cdk/drag-drop';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n effect,\n input,\n model,\n output,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport { isEqual } from 'lodash-es';\n\n@Component({\n selector: 'axp-query-sorts',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './query-sorts.component.html',\n encapsulation: ViewEncapsulation.None,\n imports: [\n CdkDropList,\n CdkDrag,\n CdkDragHandle,\n AXTabsModule,\n AXTranslationModule,\n CommonModule,\n AXDecoratorModule,\n AXButtonModule,\n ],\n})\nexport class AXPQuerySortsComponent {\n sortDefinitions = model<AXPSortDefinition[]>([]);\n sortQueries = signal<AXPSortQuery[]>([], {\n equal: isEqual,\n });\n\n initialSortQueries = input<AXPSortQuery[]>([]);\n sortQueriesChange = output<AXPSortQuery[]>();\n\n constructor() {\n // Recompute merged sort queries whenever inputs change\n effect(() => {\n const initialQueries = this.initialSortQueries();\n const definitions = this.sortDefinitions();\n\n const existingQueriesMap = new Map(initialQueries.map((q) => [q.name, q]));\n\n const mergedQueries = definitions.map((def) => {\n const existingQuery = existingQueriesMap.get(def.name);\n return existingQuery ? { ...def, dir: existingQuery.dir } : { ...def };\n });\n this.sortQueries.set(mergedQueries);\n });\n\n effect(() => {\n this.sortQueriesChange.emit(this.sortQueries().filter((q) => q.dir !== undefined));\n });\n }\n\n protected drop(event: CdkDragDrop<unknown[]>) {\n const sd = this.sortDefinitions();\n moveItemInArray(sd, event.previousIndex, event.currentIndex);\n this.sortDefinitions.set([...sd]);\n\n // Reorder sortQueries based on new sortDefinitions order\n const sq = this.sortQueries();\n moveItemInArray(sq, event.previousIndex, event.currentIndex);\n this.sortQueries.set([...sq]);\n }\n\n getSortDirection(item: AXPSortDefinition) {\n return this.sortQueries().find((i) => i.name === item.name)?.dir;\n }\n\n protected changeItemSort(item: AXPSortDefinition) {\n const itemDirection = this.getSortDirection(item);\n const newDirection = itemDirection === 'asc' ? 'desc' : itemDirection === 'desc' ? undefined : 'asc';\n\n this.sortQueries.update((prev) => {\n return prev.map((field) => {\n if (field.name === item.name) {\n return { ...field, dir: newDirection };\n }\n return field;\n });\n });\n }\n}\n","<div class=\"ax-flex ax-flex-col ax-justify-center ax-gap-4 ax-select-none\">\n <div class=\"ax-flex ax-flex-col ax-gap-4 ax-select-none\" cdkDropList (cdkDropListDropped)=\"drop($event)\">\n <div class=\"ax-flex ax-flex-col ax-gap-3 ax-w-full ax-sorted-list ax-max-h-[calc(100vh-280px)] ax-overflow-auto\">\n @for (item of sortDefinitions(); track item.name) {\n <div class=\"ax-flex ax-py-1 ax-items-center ax-justify-between\" cdkDrag cdkDragBoundary=\".ax-sorted-list\">\n <div class=\"ax-flex ax-items-center ax-gap-3\" cdkDragHandle>\n <ax-icon class=\"fa-solid fa-grip-dots-vertical ax-cursor-move\"></ax-icon>\n <p class=\"ax-font-medium ax-text-sm\">{{ item.title | translate | async }}</p>\n </div>\n <ax-button [color]=\"'blank'\" class=\"ax-sm\" (click)=\"changeItemSort(item)\">\n <ax-icon\n [class.ax-text-primary]=\"getSortDirection(item) === 'asc'\"\n class=\"fa-solid fa-arrow-up-long ax-text-neutral-400\"\n ></ax-icon>\n <ax-icon\n [class.ax-text-primary]=\"getSortDirection(item) === 'desc'\"\n class=\"fa-solid fa-arrow-down-long ax-text-neutral-400\"\n ></ax-icon>\n </ax-button>\n </div>\n }\n </div>\n </div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n HostListener,\n inject,\n input,\n model,\n output,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { set, get } from 'lodash-es';\n\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\nimport { AXClickEvent } from '@acorex/cdk/common';\nimport {\n AXPWidgetCoreModule,\n AXPWidgetNode,\n} from '@acorex/platform/layout/widget-core';\nimport { AXPContextChangeEvent, AXPDataGenerator } from '@acorex/platform/core';\n\nimport {\n AXPSpreadsheetColumn,\n AXPSpreadsheetRowMode,\n AXPSpreadsheetCellChangeEvent,\n AXPSpreadsheetRowChangeEvent,\n} from './spreadsheet.types';\n\n//#region ---- Component Definition ----\n\n@Component({\n selector: 'axp-spreadsheet',\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n AXTranslationModule,\n AXButtonModule,\n AXDecoratorModule,\n AXPWidgetCoreModule,\n ],\n templateUrl: './spreadsheet.component.html',\n styleUrl: './spreadsheet.component.scss',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'axp-spreadsheet',\n },\n})\nexport class AXPSpreadsheetComponent {\n //#endregion\n\n //#region ---- Services & Dependencies ----\n\n protected readonly translationService = inject(AXTranslationService);\n\n //#endregion\n\n //#region ---- Computed Properties for Translations ----\n\n /**\n * Translated column titles\n */\n protected translatedColumnTitles = signal<Map<string, string>>(new Map());\n\n //#endregion\n\n //#region ---- Inputs ----\n\n /**\n * Title for the spreadsheet (displayed in corner cell)\n */\n title = input<string>('');\n\n /**\n * Column definitions\n */\n columns = input.required<AXPSpreadsheetColumn[]>();\n\n /**\n * Row mode: 'fixed' or 'dynamic'\n */\n rowMode = input<AXPSpreadsheetRowMode>('fixed');\n\n /**\n * Rows data (for fixed mode - input only)\n * Each row must have a 'name' property for identification\n */\n rowsInput = input<Record<string, any>[]>([]);\n\n /**\n * Rows data (for dynamic mode - two-way binding)\n */\n rowsModel = model<Record<string, any>[]>([]);\n\n /**\n * Whether the spreadsheet is in readonly mode\n */\n readonly = input<boolean>(false);\n\n /**\n * Placeholder text for empty cells (default: \"–\")\n */\n emptyCellPlaceholder = input<string>('–');\n\n /**\n * Path to property in row object to display as row header title\n * Example: 'name', 'title', 'user.name'\n */\n rowTitlePath = input<string | null>(null);\n\n /**\n * Path to property in row object to display as row header description\n * Example: 'description', 'details', 'user.description'\n */\n rowDescriptionPath = input<string | null>(null);\n\n /**\n * Whether to allow adding rows (dynamic mode only, default: true)\n */\n allowAddRows = input<boolean>(true);\n\n /**\n * Whether to allow removing rows (default: true for dynamic mode, false for fixed mode)\n * Can be enabled for fixed mode if needed\n */\n allowRemoveRows = input<boolean>(true);\n\n //#endregion\n\n //#region ---- Outputs ----\n\n /**\n * Emitted when a single cell value changes\n */\n cellChange = output<AXPSpreadsheetCellChangeEvent>();\n\n /**\n * Emitted when rows are added or removed (dynamic mode only)\n */\n rowChange = output<AXPSpreadsheetRowChangeEvent>();\n\n /**\n * Emitted when the entire spreadsheet data changes\n */\n spreadsheetChange = output<Record<string, any>[]>();\n\n //#endregion\n\n //#region ---- Class Properties ----\n\n /**\n * Currently editing cell: { rowId, columnName } | null\n */\n protected editingCell = signal<{ rowId: string; columnName: string } | null>(null);\n\n /**\n * Original value when entering edit mode (for cancel functionality)\n */\n private originalCellValue = signal<any>(null);\n\n /**\n * Internal rows state (for fixed mode)\n */\n private internalRows = signal<Record<string, any>[]>([]);\n\n /**\n * Row ID mapping: rowId -> row index (for tracking)\n */\n private rowIdMap = new Map<string, number>();\n\n /**\n * Cache for widget nodes to prevent re-rendering\n * Key: `${rowIndex}_${columnName}`, Value: AXPWidgetNode\n */\n private widgetNodeCache = new Map<string, AXPWidgetNode>();\n\n /**\n * Cache for cell values to detect actual changes\n * Key: `${rowIndex}_${columnName}`, Value: any\n */\n private cellValueCache = new Map<string, any>();\n\n //#endregion\n\n //#region ---- Computed Properties ----\n\n /**\n * Get current rows based on mode\n */\n protected currentRows = computed<Record<string, any>[]>(() => {\n if (this.rowMode() === 'dynamic') {\n return this.rowsModel();\n } else {\n return this.internalRows();\n }\n });\n\n /**\n * Context for widgets-container (all rows as an object with rows array)\n * This allows widgets to access their cell via path like: rows[index].column.path\n */\n protected spreadsheetContext = computed<{ rows: Record<string, any>[] }>(() => {\n return {\n rows: this.currentRows(),\n };\n });\n\n /**\n * Get rows with IDs (ensure all rows have identifiers)\n */\n protected rowsWithIds = computed<Array<{ rowId: string; row: Record<string, any> }>>(() => {\n const rows = this.currentRows();\n const mode = this.rowMode();\n const result: Array<{ rowId: string; row: Record<string, any> }> = [];\n\n rows.forEach((row, index) => {\n let rowId: string;\n\n if (mode === 'fixed') {\n // Fixed mode: use 'name' property\n rowId = row['name'] || `row_${index}`;\n } else {\n // Dynamic mode: generate ID if not exists\n if (!row['_id']) {\n row['_id'] = this.generateRowId();\n }\n rowId = row['_id'];\n }\n\n // Update row ID map\n this.rowIdMap.set(rowId, index);\n\n result.push({ rowId, row });\n });\n\n return result;\n });\n\n /**\n * Check if spreadsheet is completely empty (both columns and rows)\n */\n protected isEmpty = computed<boolean>(() => {\n const columns = this.columns();\n const rows = this.currentRows();\n return (!columns || columns.length === 0) && (!rows || rows.length === 0);\n });\n\n /**\n * Check if columns are empty (regardless of rows)\n * When columns are empty, we should show a message about missing columns, not rows\n */\n protected isColumnsEmpty = computed<boolean>(() => {\n const columns = this.columns();\n return !columns || columns.length === 0;\n });\n\n /**\n * Check if only rows are empty (columns exist but no rows)\n */\n protected isRowsEmpty = computed<boolean>(() => {\n const columns = this.columns();\n const rows = this.currentRows();\n return (columns && columns.length > 0) && (!rows || rows.length === 0);\n });\n\n //#endregion\n\n //#region ---- Lifecycle Methods ----\n\n constructor() {\n // Initialize rows from input (fixed mode)\n this.internalRows.set(this.rowsInput());\n\n // Watch for rowsInput changes and update internalRows (fixed mode only)\n effect(() => {\n const rowsInput = this.rowsInput();\n const rowMode = this.rowMode();\n\n // Only update internalRows in fixed mode\n if (rowMode === 'fixed') {\n this.internalRows.set(rowsInput);\n }\n });\n }\n\n //#endregion\n\n //#region ---- Cell Value Methods ----\n\n /**\n * Get the value for a specific cell by row index\n */\n protected getCellValue(rowIndex: number, columnName: string): any {\n const rows = this.currentRows();\n const row = rows[rowIndex];\n if (!row) {\n return null;\n }\n\n const column = this.columns().find((col) => col.name === columnName);\n if (!column) {\n return null;\n }\n\n return get(row, column.path, null);\n }\n\n /**\n * Get row title from row object using rowTitlePath\n */\n protected getRowTitle(row: Record<string, any>, path: string): string {\n if (!row || !path) {\n return '';\n }\n return get(row, path, '') || '';\n }\n\n /**\n * Get row description from row object using rowDescriptionPath\n */\n protected getRowDescription(row: Record<string, any>, path: string): string {\n if (!row || !path) {\n return '';\n }\n return get(row, path, '') || '';\n }\n\n /**\n * Get row by ID\n */\n protected getRowById(rowId: string): Record<string, any> | null {\n const rowsWithIds = this.rowsWithIds();\n const found = rowsWithIds.find((item) => item.rowId === rowId);\n return found ? found.row : null;\n }\n\n /**\n * Check if a cell is currently being edited\n */\n protected isCellEditing(rowId: string, columnName: string): boolean {\n const editing = this.editingCell();\n return editing?.rowId === rowId && editing?.columnName === columnName;\n }\n\n /**\n * Check if a column is readonly\n */\n protected isColumnReadonly(column: AXPSpreadsheetColumn): boolean {\n return this.readonly() || column.readonly === true;\n }\n\n /**\n * Get widget node for a cell with dynamic path based on row index\n * Path format: rows[rowIndex].column.path\n * Uses caching to prevent unnecessary re-renders\n */\n protected getCellWidgetNode(column: AXPSpreadsheetColumn, rowIndex: number): AXPWidgetNode {\n const cacheKey = `${rowIndex}_${column.name}`;\n const rows = this.currentRows();\n const row = rows[rowIndex];\n const currentValue = row ? get(row, column.path, null) : null;\n const cachedValue = this.cellValueCache.get(cacheKey);\n\n // Get or create widget node\n let widgetNode = this.widgetNodeCache.get(cacheKey);\n\n if (!widgetNode) {\n // Create path: rows[index].column.path\n const dynamicPath = `rows.${rowIndex}.${column.path}`;\n\n // Create new widget node\n widgetNode = {\n ...column.widget,\n path: dynamicPath,\n defaultValue: currentValue !== null && currentValue !== undefined ? currentValue : column.widget.defaultValue,\n };\n\n // Cache the widget node\n this.widgetNodeCache.set(cacheKey, widgetNode);\n this.cellValueCache.set(cacheKey, currentValue);\n } else {\n // Update path in case row index changed (shouldn't happen, but be safe)\n widgetNode.path = `rows.${rowIndex}.${column.path}`;\n\n // Only update defaultValue if value actually changed (to prevent re-renders)\n if (cachedValue !== currentValue) {\n widgetNode.defaultValue = currentValue !== null && currentValue !== undefined ? currentValue : column.widget.defaultValue;\n this.cellValueCache.set(cacheKey, currentValue);\n }\n }\n\n return widgetNode;\n }\n\n //#endregion\n\n //#region ---- Event Handlers ----\n\n /**\n * Handle cell click to start editing\n */\n protected handleCellClick(rowId: string, columnName: string, event?: MouseEvent): void {\n if (this.readonly()) {\n return;\n }\n\n // Don't open editor if clicking on toolbar or buttons\n if (event) {\n const target = event.target as HTMLElement;\n if (target.closest('.__cell-toolbar') || target.closest('ax-button')) {\n return;\n }\n }\n\n const column = this.columns().find((col) => col.name === columnName);\n if (!column || this.isColumnReadonly(column)) {\n return;\n }\n\n // Don't open if already editing this cell\n const currentEditing = this.editingCell();\n if (currentEditing?.rowId === rowId && currentEditing?.columnName === columnName) {\n return;\n }\n\n // Store original value for cancel functionality\n const row = this.getRowById(rowId);\n if (row) {\n const originalValue = get(row, column.path, null);\n this.originalCellValue.set(originalValue);\n }\n\n this.editingCell.set({ rowId, columnName });\n }\n\n /**\n * Handle cell value change from widget\n * The widget sets the value at path like rows[index].column.path\n */\n protected handleCellValueChange(\n rowIndex: number,\n columnName: string,\n event: AXPContextChangeEvent\n ): void {\n // Only process if context has changed (not just initiated)\n if (event.state !== 'changed') {\n return;\n }\n\n const rows = this.currentRows();\n const row = rows[rowIndex];\n if (!row) {\n return;\n }\n\n const column = this.columns().find((col) => col.name === columnName);\n if (!column) {\n return;\n }\n\n // Get the new value from the context (widget sets it at rows[index].column.path)\n const dynamicPath = `rows.${rowIndex}.${column.path}`;\n const newValue = get(event.data, dynamicPath);\n\n // Update the row object directly\n set(row, column.path, newValue);\n\n // Update rows array\n this.updateRows();\n\n // Get rowId for events\n const rowId = this.rowMode() === 'fixed' ? row['name'] : row['_id'];\n\n // Emit events\n this.cellChange.emit({\n rowId: rowId || `row_${rowIndex}`,\n columnName,\n value: newValue,\n row: { ...row },\n });\n\n this.spreadsheetChange.emit([...this.currentRows()]);\n\n // Don't close edit mode automatically - let user finish editing\n // Edit mode will close on blur or click outside\n }\n\n /**\n * Handle spreadsheet context change from widgets-container\n * This is called when any widget in the spreadsheet changes\n */\n protected handleSpreadsheetContextChange(event: AXPContextChangeEvent): void {\n if (event.state !== 'changed') {\n return;\n }\n\n // Extract row index and column from the path (format: rows[index].column.path)\n const path = event.path || '';\n const pathMatch = path.match(/^rows\\.(\\d+)\\.(.+)$/);\n\n if (!pathMatch) {\n return;\n }\n\n const rowIndex = parseInt(pathMatch[1], 10);\n const columnPath = pathMatch[2];\n\n // Find the column by path\n const column = this.columns().find((col) => col.path === columnPath);\n if (!column) {\n return;\n }\n\n // Get the new value from event.data\n const newValue = get(event.data, path);\n\n // Update the row object (sync with context)\n const rows = this.currentRows();\n const row = rows[rowIndex];\n if (row) {\n // The context should already have the updated value, but sync row object to be sure\n set(row, columnPath, newValue);\n\n // Update cache (widget node will update defaultValue on next getCellWidgetNode call)\n const cacheKey = `${rowIndex}_${column.name}`;\n this.cellValueCache.set(cacheKey, newValue);\n // Don't delete widget node cache - just update defaultValue on next access\n // This prevents re-rendering while still reflecting the new value\n\n this.updateRows();\n\n // Get rowId for events\n const rowId = this.rowMode() === 'fixed' ? row['name'] : row['_id'];\n\n // Emit events\n this.cellChange.emit({\n rowId: rowId || `row_${rowIndex}`,\n columnName: column.name,\n value: newValue,\n row: { ...row },\n });\n\n this.spreadsheetChange.emit([...this.currentRows()]);\n }\n }\n\n /**\n * Handle blur event to stop editing (when user clicks away from cell)\n */\n protected handleCellBlur(rowId: string, columnName: string): void {\n // Small delay to allow click events to process first\n setTimeout(() => {\n const editing = this.editingCell();\n if (editing?.rowId === rowId && editing?.columnName === columnName) {\n // Don't close if clicking on the toolbar or buttons\n const activeElement = document.activeElement;\n const toolbarElement = activeElement?.closest('.__cell-toolbar');\n const buttonElement = activeElement?.closest('ax-button');\n\n // Only auto-commit if not clicking on toolbar or buttons\n if (!toolbarElement && !buttonElement) {\n this.commitCellEdit();\n }\n }\n }, 150);\n }\n\n /**\n * Handle Escape key to cancel editing\n */\n @HostListener('document:keydown', ['$event'])\n protected handleKeyDown(event: KeyboardEvent): void {\n if (event.key === 'Escape' && this.editingCell()) {\n event.preventDefault();\n event.stopPropagation();\n this.cancelCellEdit();\n }\n }\n\n /**\n * Commit cell edit (save changes and close editing mode)\n */\n protected commitCellEdit(): void {\n const editing = this.editingCell();\n if (!editing) {\n return;\n }\n\n // Changes are already saved via handleSpreadsheetContextChange\n // Close the editor (same as escape, but keeps changes)\n this.editingCell.set(null);\n this.originalCellValue.set(null);\n }\n\n /**\n * Cancel cell edit (discard changes and close editing mode - same as escape)\n */\n protected cancelCellEdit(): void {\n const editing = this.editingCell();\n if (!editing) {\n return;\n }\n\n const row = this.getRowById(editing.rowId);\n const column = this.columns().find((col) => col.name === editing.columnName);\n const originalValue = this.originalCellValue();\n\n if (row && column) {\n // Restore original value in row\n set(row, column.path, originalValue);\n\n // Clear cache for this cell so widget re-renders with original value\n const rowsWithIds = this.rowsWithIds();\n const rowIndex = rowsWithIds.findIndex((item) => item.rowId === editing.rowId);\n if (rowIndex !== -1) {\n const cacheKey = `${rowIndex}_${editing.columnName}`;\n this.cellValueCache.set(cacheKey, originalValue);\n this.widgetNodeCache.delete(cacheKey);\n }\n\n this.updateRows();\n }\n\n // Close the editor (same as escape)\n this.editingCell.set(null);\n this.originalCellValue.set(null);\n }\n\n\n /**\n * Handle click outside to stop editing\n */\n protected handleClickOutside(event: MouseEvent): void {\n const target = event.target as HTMLElement;\n\n // Don't close if clicking inside a widget or its elements\n if (\n target.closest('[axp-widget-renderer]') ||\n target.closest('.ax-dropdown') ||\n target.closest('.ax-popup') ||\n target.closest('.__cell-editor')\n ) {\n return;\n }\n\n this.editingCell.set(null);\n }\n\n /**\n * Handle add row (dynamic mode only)\n */\n protected handleAddRow(): void {\n if (this.rowMode() !== 'dynamic' || !this.allowAddRows() || this.readonly()) {\n return;\n }\n\n const columns = this.columns();\n const newRow: Record<string, any> = {\n _id: this.generateRowId(),\n };\n\n // Initialize with default values from widgets\n columns.forEach((column) => {\n if (column.widget.defaultValue !== undefined && column.widget.defaultValue !== null) {\n set(newRow, column.path, column.widget.defaultValue);\n }\n });\n\n const currentRows = this.rowsModel();\n const updatedRows = [...currentRows, newRow];\n this.rowsModel.set(updatedRows);\n\n this.rowChange.emit({\n type: 'add',\n rowId: newRow['_id'],\n row: { ...newRow },\n rows: updatedRows,\n });\n\n this.spreadsheetChange.emit(updatedRows);\n }\n\n /**\n * Handle remove row (works for both fixed and dynamic modes)\n */\n protected handleRemoveRow(rowId: string, _event: AXClickEvent): void {\n if (!this.allowRemoveRows() || this.readonly()) {\n return;\n }\n\n const currentRows = this.currentRows();\n let rowIndex = -1;\n let removedRow: Record<string, any> | undefined;\n\n if (this.rowMode() === 'fixed') {\n // Fixed mode: find by 'name' property\n rowIndex = currentRows.findIndex((row) => row['name'] === rowId);\n } else {\n // Dynamic mode: find by '_id' property\n rowIndex = currentRows.findIndex((row) => row['_id'] === rowId);\n }\n\n if (rowIndex === -1) {\n return;\n }\n\n removedRow = currentRows[rowIndex];\n\n if (this.rowMode() === 'dynamic') {\n // Dynamic mode: update rowsModel\n const updatedRows = currentRows.filter((_, index) => index !== rowIndex);\n this.rowsModel.set(updatedRows);\n\n this.rowChange.emit({\n type: 'remove',\n rowId,\n row: { ...removedRow },\n rows: updatedRows,\n });\n\n this.spreadsheetChange.emit(updatedRows);\n } else {\n // Fixed mode: update internalRows and emit events\n const updatedRows = currentRows.filter((_, index) => index !== rowIndex);\n this.internalRows.set(updatedRows);\n\n this.rowChange.emit({\n type: 'remove',\n rowId,\n row: { ...removedRow },\n rows: updatedRows,\n });\n\n this.spreadsheetChange.emit(updatedRows);\n }\n }\n\n //#endregion\n\n //#region ---- Utility Methods ----\n\n /**\n * Generate unique row ID for dynamic mode\n */\n private generateRowId(): string {\n return `row_${AXPDataGenerator.uuid()}`;\n }\n\n /**\n * Update rows array (sync internal state)\n */\n private updateRows(): void {\n if (this.rowMode() === 'dynamic') {\n // For dynamic mode, rowsModel is already updated (two-way binding)\n // Just trigger change detection\n this.rowsModel.set([...this.rowsModel()]);\n } else {\n // For fixed mode, update internal state\n this.internalRows.set([...this.internalRows()]);\n }\n }\n\n //#endregion\n}\n\n//#endregion\n\n","<!--\n #region ---- Spreadsheet Component Template ----\n-->\n<div class=\"__spreadsheet-container\" (click)=\"handleClickOutside($event)\">\n @if (isColumnsEmpty()) {\n <!-- Empty State: Columns are empty (regardless of rows) -->\n <div class=\"__empty-state\">\n <div class=\"__empty-icon\">\n <i class=\"fa-light fa-table-columns\"></i>\n </div>\n <div class=\"__empty-title\">{{ '@general:state-message.empty-columns.title' | translate | async }}</div>\n <div class=\"__empty-description\">{{ '@general:state-message.empty-columns.description' | translate | async }}\n </div>\n </div>\n } @else if (isEmpty()) {\n <!-- Empty State: Both columns and rows are empty -->\n <div class=\"__empty-state\">\n <div class=\"__empty-icon\">\n <i class=\"fa-light fa-table\"></i>\n </div>\n <div class=\"__empty-title\">{{ '@general:state-message.empty.title' | translate | async }}</div>\n <div class=\"__empty-description\">{{ '@general:state-message.empty.description' | translate | async }}</div>\n </div>\n } @else if (isRowsEmpty()) {\n <!-- Empty State: Only rows are empty - Show columns -->\n <div class=\"__table-wrapper\">\n <table class=\"__table\">\n <!-- Header Row -->\n <thead class=\"__thead\">\n <tr class=\"__header-row\">\n <!-- Corner cell (title) -->\n <th class=\"__corner-cell\">\n @if (title()) {\n <div class=\"__corner-title\">{{ title() | translate | async }}</div>\n }\n @if (rowMode() === 'dynamic' && allowAddRows() && !readonly()) {\n <div class=\"__corner-actions\">\n <ax-button look=\"blank\" color=\"primary\" (onClick)=\"handleAddRow()\"\n [attr.aria-label]=\"'Add Row'\">\n <ax-icon icon=\"far fa-plus\"></ax-icon>\n </ax-button>\n </div>\n }\n </th>\n\n <!-- Column headers -->\n @for (column of columns(); track column.name) {\n <th class=\"__column-header\" [style.width]=\"column.width\">\n <div class=\"__header-content\">\n <div class=\"__header-title\">{{ column.title | translate | async }}</div>\n </div>\n </th>\n }\n </tr>\n </thead>\n\n <!-- Empty State Row -->\n <tbody class=\"__tbody\">\n <tr class=\"__row __row--empty\">\n <td class=\"__row-header\" [attr.colspan]=\"columns().length + 1\">\n <div class=\"__empty-state-inline\">\n <div class=\"__empty-icon\">\n <i class=\"fa-light fa-list\"></i>\n </div>\n <div class=\"__empty-title\">{{ '@general:state-message.empty-rows.title' | translate | async\n }}\n </div>\n <div class=\"__empty-description\">{{ '@general:state-message.empty-rows.description' |\n translate |\n async }}</div>\n </div>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n } @else {\n <!-- Full Spreadsheet: Both columns and rows are available -->\n <div class=\"__table-wrapper\">\n <table class=\"__table\">\n <!-- Header Row -->\n <thead class=\"__thead\">\n <tr class=\"__header-row\">\n <!-- Corner cell (title) -->\n <th class=\"__corner-cell\">\n @if (title()) {\n <div class=\"__corner-title\">{{ title() | translate | async }}</div>\n }\n @if (rowMode() === 'dynamic' && allowAddRows() && !readonly()) {\n <div class=\"__corner-actions\">\n <ax-button look=\"blank\" color=\"primary\" (onClick)=\"handleAddRow()\"\n [attr.aria-label]=\"'Add Row'\">\n <ax-icon icon=\"far fa-plus\"></ax-icon>\n </ax-button>\n </div>\n }\n </th>\n\n <!-- Column headers -->\n @for (column of columns(); track column.name) {\n <th class=\"__column-header\" [style.width]=\"column.width\">\n <div class=\"__header-content\">\n <div class=\"__header-title\">{{ column.title | translate | async }}</div>\n </div>\n </th>\n }\n </tr>\n </thead>\n\n <!-- Body Rows -->\n <tbody class=\"__tbody\">\n <axp-widgets-container [context]=\"spreadsheetContext()\"\n (onContextChanged)=\"handleSpreadsheetContextChange($event)\">\n @for (rowItem of rowsWithIds(); track rowItem.rowId; let rowIndex = $index) {\n <tr class=\"__row\" [class.__row--odd]=\"rowIndex % 2 === 1\">\n <!-- Row header -->\n <td class=\"__row-header\">\n <div class=\"__header-content\">\n @if (rowTitlePath()) {\n <div class=\"__header-title\">{{ getRowTitle(rowItem.row, rowTitlePath()!) }}</div>\n }\n @if (rowDescriptionPath()) {\n <div class=\"__header-description\">{{ getRowDescription(rowItem.row,\n rowDescriptionPath()!) }}</div>\n }\n </div>\n @if (allowRemoveRows() && !readonly()) {\n <div class=\"__header-actions ax-xs ax-opacity-30 hover:ax-opacity-100\">\n <ax-button look=\"blank\" color=\"danger\"\n (onClick)=\"handleRemoveRow(rowItem.rowId, $event)\" [attr.aria-label]=\"'Remove Row'\">\n <ax-icon icon=\"far fa-times\"></ax-icon>\n </ax-button>\n </div>\n }\n </td>\n\n <!-- Spreadsheet cells -->\n @for (column of columns(); track column.name) {\n <td class=\"__cell\" [class.__cell--editing]=\"isCellEditing(rowItem.rowId, column.name)\"\n [class.__cell--readonly]=\"isColumnReadonly(column)\"\n (click)=\"$event.stopPropagation(); handleCellClick(rowItem.rowId, column.name, $event)\">\n @if (isCellEditing(rowItem.rowId, column.name) && !isColumnReadonly(column)) {\n <!-- Edit mode: Show widget in edit mode -->\n <div class=\"__cell-editor\" (blur)=\"handleCellBlur(rowItem.rowId, column.name)\"\n tabindex=\"-1\">\n <ng-container axp-widget-renderer [node]=\"getCellWidgetNode(column, rowIndex)\"\n [mode]=\"'edit'\"></ng-container>\n </div>\n <!-- Floating toolbar for commit/cancel -->\n <div class=\"__cell-toolbar ax-xs\" (click)=\"$event.stopPropagation()\"\n (mousedown)=\"$event.preventDefault(); $event.stopPropagation()\"\n (mouseup)=\"$event.stopPropagation()\" (focusin)=\"$event.stopPropagation()\">\n <ax-button look=\"blank\" color=\"success\" (onClick)=\"commitCellEdit()\"\n [attr.aria-label]=\"'Commit'\">\n <ax-icon icon=\"far fa-check\"></ax-icon>\n </ax-button>\n <ax-button look=\"blank\" color=\"danger\" (onClick)=\"cancelCellEdit()\"\n [attr.aria-label]=\"'Cancel'\">\n <ax-icon icon=\"far fa-times\"></ax-icon>\n </ax-button>\n </div>\n } @else {\n <!-- View mode: Show widget in view mode or placeholder -->\n <div class=\"__cell-value\">\n @if (getCellValue(rowIndex, column.name) !== null &&\n getCellValue(rowIndex, column.name) !== undefined) {\n <ng-container axp-widget-renderer [node]=\"getCellWidgetNode(column, rowIndex)\"\n [mode]=\"'view'\"></ng-container>\n } @else {\n <span class=\"__cell-placeholder\">{{ emptyCellPlaceholder() }}</span>\n }\n </div>\n }\n </td>\n }\n </tr>\n }\n </axp-widgets-container>\n </tbody>\n </table>\n </div>\n }\n</div>\n<!--\n #endregion\n-->","import { AXPWidgetNode } from '@acorex/platform/layout/widget-core';\n\n//#region ---- Spreadsheet Item Interface ----\n\n/**\n * Represents a spreadsheet item (row or column header) with id, text, and optional description\n */\nexport interface AXPSpreadsheetItem {\n id: string;\n title: string;\n description?: string;\n /**\n * Optional CSS class for cell styling (e.g., 'ax-bg-success-lightest ax-text-success' for green)\n * Used when this item is used as a cell value to color-code the cell\n * Allows proper control of both background and text colors\n */\n cssClass?: string;\n}\n\n//#endregion\n\n//#region ---- Spreadsheet Column Interface ----\n\n/**\n * Represents the value structure for spreadsheet cells\n * Stores only the ID reference to the item in cellOptions\n */\nexport type AXPSpreadsheetCellValue = string | null;\n\n//#endregion\n\n//#region ---- Matrix Data Structure ----\n\n/**\n * Matrix data structure: { [rowId]: { [columnId]: cellValueId } }\n * cellValueId is the ID of an item from cellOptions\n */\nexport type AXPSpreadsheetData = Record<string, Record<string, AXPSpreadsheetCellValue>>;\n\n/**\n * Represents a column definition in the spreadsheet\n */\nexport interface AXPSpreadsheetColumn {\n /**\n * Column identifier (unique name)\n */\n name: string;\n\n /**\n * Display title for column header\n */\n title: string;\n\n /**\n * Optional description for column header\n */\n description?: string;\n\n /**\n * Path to access row property (e.g., 'user.name', 'age')\n * Used to get/set values in row objects\n */\n path: string;\n\n /**\n * Widget configuration for this column\n * All cells in this column will use this widget\n */\n widget: AXPWidgetNode;\n\n /**\n * Optional column width\n */\n width?: string;\n\n /**\n * Column-level readonly override\n */\n readonly?: boolean;\n}\n\n//#endregion\n\n//#region ---- Spreadsheet Row Mode ----\n\n/**\n * Spreadsheet row mode\n * - 'fixed': Rows are provided as input, cannot add/remove (like matrix)\n * - 'dynamic': Users can add/remove rows dynamically (like Excel)\n */\nexport type AXPSpreadsheetRowMode = 'fixed' | 'dynamic';\n\n//#endregion\n\n//#region ---- Spreadsheet Cell Change Event ----\n\n/**\n * Event emitted when a single cell value changes\n */\nexport interface AXPSpreadsheetCellChangeEvent {\n /**\n * Row identifier (name for fixed mode, generated ID for dynamic mode)\n */\n rowId: string;\n\n /**\n * Column name\n */\n columnName: string;\n\n /**\n * New cell value (whatever the widget returns)\n */\n value: any;\n\n /**\n * Full row object after update\n */\n row: Record<string, any>;\n}\n\n//#endregion\n\n//#region ---- Spreadsheet Row Change Event ----\n\n/**\n * Event emitted when a row is added or removed (dynamic mode only)\n */\nexport interface AXPSpreadsheetRowChangeEvent {\n /**\n * Type of change: 'add' or 'remove'\n */\n type: 'add' | 'remove';\n\n /**\n * Row identifier\n */\n rowId: string;\n\n /**\n * Full row object (for 'add' events)\n */\n row?: Record<string, any>;\n\n /**\n * All rows after the change\n */\n rows: Record<string, any>[];\n}\n\n//#endregion\n\n//#region ---- Spreadsheet Configuration ----\n\n/**\n * Configuration for the spreadsheet component\n */\nexport interface AXPSpreadsheetConfig {\n /**\n * Widget configuration for cell editing (SelectBox)\n */\n cellWidget?: AXPWidgetNode;\n\n /**\n * Whether the spreadsheet is in readonly mode\n */\n readonly?: boolean;\n\n /**\n * Placeholder text for empty cells\n */\n emptyCellPlaceholder?: string;\n}\n\n//#endregion\n\n","//#region ---- Imports ----\n\nimport { AXButtonModule } from '@acorex/components/button';\nimport { ChangeDetectionStrategy, Component, computed, effect, input, OnDestroy, output, signal } from '@angular/core';\n\n\n//#endregion\n\n//#region ---- Component ----\n\n@Component({\n selector: 'axp-stopwatch',\n standalone: true,\n template: `\n <div class=\"axp-stopwatch ax-flex ax-items-center ax-gap-3 ax-px-3 ax-py-1.5\">\n <div class=\"ax-flex ax-items-center ax-gap-2\">\n <i class=\"fa-light fa-stopwatch ax-text-primary-600\"></i>\n <span class=\"ax-text-sm ax-font-mono ax-font-semibold ax-tabular-nums\" [class.ax-text-danger]=\"isTimeUp()\">\n {{ displayTime() }}\n </span>\n </div>\n @if (showControls()) {\n <div class=\"ax-flex ax-items-center ax-gap-2\">\n @if (isRunning()) {\n <ax-button\n look=\"solid\"\n size=\"sm\"\n color=\"primary\"\n (onClick)=\"pause()\"\n >\n <i class=\"fa-light fa-pause\"></i>\n </ax-button>\n <ax-button\n look=\"solid\"\n size=\"sm\"\n color=\"danger\"\n (onClick)=\"reset()\"\n >\n <i class=\"fa-light fa-stop\"></i>\n </ax-button>\n } @else {\n <ax-button\n look=\"solid\"\n size=\"sm\"\n color=\"primary\"\n (onClick)=\"start()\"\n >\n <i class=\"fa-light fa-play\"></i>\n </ax-button>\n }\n </div>\n }\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AXButtonModule],\n host: {\n class: 'ax-inline-flex',\n },\n styles: [\n `\n :host {\n display: inline-flex;\n }\n `,\n ],\n})\nexport class AXPStopwatchComponent implements OnDestroy {\n //#region ---- Inputs ----\n\n mode = input<'count-up' | 'count-down'>('count-up');\n timeLimit = input<number | undefined>(undefined); // seconds\n format = input<'hh:mm:ss' | 'mm:ss' | 'ss'>('mm:ss');\n autoStart = input<boolean>(false);\n showControls = input<boolean>(true);\n value = input<number>(0); // current elapsed time in seconds\n\n //#endregion\n\n //#region ---- Outputs ----\n\n valueChange = output<number>();\n timeUp = output<void>();\n\n //#endregion\n\n //#region ---- State ----\n\n private readonly currentTime = signal<number>(0);\n protected readonly isRunning = signal<boolean>(false);\n private intervalId: any = null;\n\n //#endregion\n\n //#region ---- Computed Properties ----\n\n protected readonly isTimeUp = computed<boolean>(() => {\n const mode = this.mode();\n const timeLimit = this.timeLimit();\n const current = this.currentTime();\n\n if (mode === 'count-down' && timeLimit !== undefined) {\n return current >= timeLimit;\n }\n return false;\n });\n\n protected readonly displayTime = computed<string>(() => {\n const current = this.currentTime();\n const format = this.format();\n const mode = this.mode();\n const timeLimit = this.timeLimit();\n\n let seconds = current;\n if (mode === 'count-down' && timeLimit !== undefined) {\n seconds = Math.max(0, timeLimit - current);\n }\n\n return this.formatTime(seconds, format);\n });\n\n //#endregion\n\n //#region ---- Lifecycle ----\n\n constructor() {\n // Initialize from value input if available\n effect(() => {\n const value = this.value();\n if (value !== null && value !== undefined) {\n this.currentTime.set(value);\n }\n });\n\n // Auto-start if enabled\n effect(() => {\n if (this.autoStart() && !this.isRunning()) {\n this.start();\n }\n });\n }\n\n ngOnDestroy(): void {\n this.stop();\n }\n\n //#endregion\n\n //#region ---- Methods ----\n\n start(): void {\n if (this.isRunning()) return;\n\n this.isRunning.set(true);\n this.intervalId = setInterval(() => {\n const current = this.currentTime();\n const mode = this.mode();\n const timeLimit = this.timeLimit();\n\n if (mode === 'count-down' && timeLimit !== undefined) {\n if (current >= timeLimit) {\n this.stop();\n this.onTimeUp();\n return;\n }\n }\n\n const newTime = current + 1;\n this.currentTime.set(newTime);\n this.valueChange.emit(newTime);\n }, 1000);\n }\n\n pause(): void {\n this.stop();\n }\n\n reset(): void {\n this.stop();\n this.currentTime.set(0);\n this.valueChange.emit(0);\n }\n\n private stop(): void {\n if (this.intervalId) {\n clearInterval(this.intervalId);\n this.intervalId = null;\n }\n this.isRunning.set(false);\n }\n\n private onTimeUp(): void {\n this.timeUp.emit();\n }\n\n private formatTime(seconds: number, format: 'hh:mm:ss' | 'mm:ss' | 'ss'): string {\n const hours = Math.floor(seconds / 3600);\n const minutes = Math.floor((seconds % 3600) / 60);\n const secs = seconds % 60;\n\n if (format === 'ss') {\n return `${secs.toString().padStart(2, '0')}s`;\n }\n\n if (format === 'mm:ss') {\n return `${minutes.toString().padStart(2, '0')}:${secs.toString().padStart(2, '0')}`;\n }\n\n // hh:mm:ss\n return `${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}:${secs.toString().padStart(2, '0')}`;\n }\n\n //#endregion\n}\n\n//#endregion\n\n","import type { AXPWidgetNode } from '@acorex/platform/layout/widget-core';\n\n/**\n * Builds the AXPWidgetNode tree for the table-columns-editor when using AXPLayoutRendererComponent.\n * Root: repeater-layout (path: 'columns') with add/remove controls.\n * Each row: form-field for name (text-editor), form-field for title (text-editor), form-field for widget (widget-field-configurator).\n */\nexport function buildTableColumnsEditorLayout(): AXPWidgetNode {\n return {\n type: 'repeater-layout',\n name: 'columns',\n path: 'columns',\n options: {\n hasControls: true,\n },\n children: [\n {\n type: 'form-field',\n name: 'name',\n options: {\n label: '@general:widgets.table-columns-editor.column-name',\n showLabel: true,\n },\n children: [\n {\n type: 'text-editor',\n path: 'name',\n name: 'name',\n options: { placeholder: 'name' },\n },\n ],\n },\n {\n type: 'form-field',\n name: 'title',\n options: {\n label: '@general:widgets.table-columns-editor.column-title',\n showLabel: true,\n },\n children: [\n {\n type: 'text-editor',\n path: 'title',\n name: 'title',\n options: { placeholder: 'Title' },\n },\n ],\n },\n {\n type: 'form-field',\n name: 'widget',\n options: {\n label: '@general:terms.widget',\n showLabel: true,\n },\n children: [\n {\n type: 'widget-field-configurator',\n path: 'widget',\n name: 'widget',\n options: {},\n },\n ],\n },\n ],\n };\n}\n","import { AXPLayoutRendererComponent } from '@acorex/platform/layout/builder';\nimport { afterNextRender, ChangeDetectionStrategy, Component, effect, model, signal } from '@angular/core';\nimport { isEqual } from 'lodash-es';\nimport { buildTableColumnsEditorLayout } from './table-columns-editor-layout';\nimport type { AXPTableColumnDefinition } from './table-columns-editor.types';\n\nconst DEFAULT_WIDGET: AXPTableColumnDefinition['widget'] = { type: 'text-box', options: {} };\n\nfunction normalizeColumn(row: Record<string, unknown>, index: number): AXPTableColumnDefinition {\n return {\n name: typeof row['name'] === 'string' ? row['name'] : (row['name'] != null ? String(row['name']) : `column_${index}`),\n title: typeof row['title'] === 'string' ? row['title'] : (row['title'] != null ? String(row['title']) : `Column ${index + 1}`),\n widget: row['widget'] != null && typeof row['widget'] === 'object' && 'type' in (row['widget'] as object)\n ? (row['widget'] as AXPTableColumnDefinition['widget'])\n : { ...DEFAULT_WIDGET },\n };\n}\n\nfunction normalizeColumns(rows: unknown[]): AXPTableColumnDefinition[] {\n if (!Array.isArray(rows)) return [];\n return rows.map((row, i) => normalizeColumn(typeof row === 'object' && row != null ? (row as Record<string, unknown>) : {}, i));\n}\n\n@Component({\n selector: 'axp-table-columns-editor',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AXPLayoutRendererComponent],\n template: `\n <div class=\"ax-flex ax-flex-col ax-flex-1 ax-min-h-0 ax-overflow-hidden\">\n <div class=\"ax-flex-1 ax-min-h-0 ax-overflow-auto ax-p-2\">\n <axp-layout-renderer\n [layout]=\"columnsEditorLayout()\"\n [(context)]=\"editorContext\"\n mode=\"edit\"\n />\n </div>\n </div>\n `,\n})\nexport class AXPTableColumnsEditorComponent {\n /** Layout tree: repeater (path: columns) with form-fields for name, title, widget. */\n protected readonly columnsEditorLayout = signal(buildTableColumnsEditorLayout());\n\n /** Two-way: list of column definitions (synced with editorContext.columns). */\n columns = model<AXPTableColumnDefinition[]>([]);\n\n /** Context for the layout renderer; must hold { columns: AXPTableColumnDefinition[] }. */\n protected readonly editorContext = model<{ columns: AXPTableColumnDefinition[] }>({ columns: [] });\n\n constructor() {\n afterNextRender(() => {\n const initial = this.columns();\n this.editorContext.set({ columns: initial?.length ? [...initial] : [] });\n });\n\n // Sync from parent columns into editor context (e.g. popup opened with initial columns).\n effect(() => {\n const cols = this.columns();\n const ctx = this.editorContext();\n if (!isEqual(ctx.columns, cols)) {\n this.editorContext.set({ columns: cols?.length ? [...cols] : [] });\n }\n });\n\n // Sync from layout renderer back to columns (user edited or repeater add/remove); normalize rows.\n effect(() => {\n const ctx = this.editorContext();\n const raw = ctx?.columns;\n const normalized = normalizeColumns(Array.isArray(raw) ? raw : []);\n const current = this.columns();\n if (!isEqual(current, normalized)) {\n this.columns.set(normalized);\n }\n });\n }\n}\n","import { AXBasePageComponent } from '@acorex/components/page';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AsyncPipe } from '@angular/common';\nimport { afterNextRender, ChangeDetectionStrategy, Component, input, model } from '@angular/core';\nimport { cloneDeep } from 'lodash-es';\nimport { AXPTableColumnsEditorComponent } from './table-columns-editor.component';\nimport type { AXPTableColumnDefinition } from './table-columns-editor.types';\n\nconst I18N = {\n title: '@general:widgets.table-columns-editor.popup-title',\n cancel: '@general:actions.cancel.title',\n save: '@general:actions.save.title',\n} as const;\n\n@Component({\n selector: 'axp-table-columns-editor-popup',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AsyncPipe, AXButtonModule, AXDecoratorModule, AXTranslationModule, AXPTableColumnsEditorComponent],\n template: `\n <div class=\"ax-flex ax-flex-col ax-flex-1 ax-min-h-0 ax-overflow-hidden\">\n <div class=\"ax-flex-1 ax-min-h-0 ax-overflow-auto\">\n <axp-table-columns-editor [(columns)]=\"localColumns\" />\n </div>\n </div>\n <ax-footer>\n <ax-suffix>\n <ax-button\n look=\"solid\"\n [text]=\"(I18N.cancel | translate | async) ?? ''\"\n (onClick)=\"handleCancel()\"\n ></ax-button>\n <ax-button\n look=\"solid\"\n color=\"primary\"\n [text]=\"(I18N.save | translate | async) ?? ''\"\n (onClick)=\"handleSave()\"\n ></ax-button>\n </ax-suffix>\n </ax-footer>\n `,\n})\nexport class AXPTableColumnsEditorPopupComponent extends AXBasePageComponent {\n protected readonly I18N = I18N;\n\n columns = input<AXPTableColumnDefinition[]>([]);\n localColumns = model<AXPTableColumnDefinition[]>([]);\n\n constructor() {\n super();\n afterNextRender(() => {\n const initial = this.columns();\n this.localColumns.set(cloneDeep(initial?.length ? initial : []));\n });\n }\n\n protected handleCancel(): void {\n this.close();\n }\n\n protected handleSave(): void {\n this.close({ columns: this.localColumns() });\n }\n}\n","import { AXPopupService } from '@acorex/components/popup';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { inject, Injectable } from '@angular/core';\nimport type { AXPTableColumnDefinition } from './table-columns-editor.types';\n\nexport interface AXPTableColumnsEditorOpenOptions {\n title?: string;\n columns?: AXPTableColumnDefinition[];\n}\n\n@Injectable({ providedIn: 'root' })\nexport class AXPTableColumnsEditorService {\n private readonly popupService = inject(AXPopupService);\n private readonly translationService = inject(AXTranslationService);\n\n async open(options?: AXPTableColumnsEditorOpenOptions): Promise<AXPTableColumnDefinition[] | null> {\n const component = await import('./table-columns-editor-popup.component').then(\n (m) => m.AXPTableColumnsEditorPopupComponent\n );\n const title =\n options?.title ??\n (await this.translationService.translateAsync('@general:widgets.table-columns-editor.popup-title'));\n const result = await this.popupService.open(component, {\n title,\n size: 'lg',\n data: {\n columns: options?.columns ?? [],\n },\n });\n const columns = result?.data?.columns;\n return Array.isArray(columns) ? columns : null;\n }\n}\n","import { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPSpreadsheetComponent } from '../spreadsheet';\nimport type { AXPSpreadsheetColumn } from '../spreadsheet/spreadsheet.types';\nimport { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, input, model } from '@angular/core';\nimport { cloneDeep } from 'lodash-es';\nimport type { AXPTableColumnDefinition } from '../table-columns-editor/table-columns-editor.types';\n\n/**\n * Builds spreadsheet column definitions from table column definitions.\n */\nfunction toSpreadsheetColumns(defs: AXPTableColumnDefinition[]): AXPSpreadsheetColumn[] {\n return defs.map((col) => ({\n name: col.name,\n title: col.title,\n path: col.name,\n widget: cloneDeep(col.widget),\n }));\n}\n\n@Component({\n selector: 'axp-table-data-editor',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AsyncPipe, AXDecoratorModule, AXTranslationModule, AXPSpreadsheetComponent],\n template: `\n <div class=\"ax-flex ax-flex-col ax-flex-1 ax-min-h-0 ax-overflow-hidden\">\n <div class=\"ax-flex-1 ax-min-h-0 ax-overflow-auto ax-p-2\">\n @if (spreadsheetColumns().length > 0) {\n <axp-spreadsheet\n [title]=\"''\"\n [columns]=\"spreadsheetColumns()\"\n [(rowsModel)]=\"rowsModel\"\n [rowMode]=\"'dynamic'\"\n [readonly]=\"false\"\n [allowAddRows]=\"true\"\n [allowRemoveRows]=\"true\"\n [emptyCellPlaceholder]=\"'–'\"\n />\n } @else {\n <p class=\"ax-text-sm ax-text-neutral-500 ax-py-4\">\n {{ ('@general:widgets.table-data-editor.define-columns-first' | translate | async) ?? 'Define columns first.' }}\n </p>\n }\n </div>\n </div>\n `,\n})\nexport class AXPTableDataEditorComponent {\n columns = input.required<AXPTableColumnDefinition[]>();\n rowsModel = model<Record<string, unknown>[]>([]);\n\n protected readonly spreadsheetColumns = computed(() => toSpreadsheetColumns(this.columns()));\n}\n","import { AXBasePageComponent } from '@acorex/components/page';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AsyncPipe } from '@angular/common';\nimport { afterNextRender, ChangeDetectionStrategy, Component, input, model } from '@angular/core';\nimport { cloneDeep } from 'lodash-es';\nimport { AXPTableDataEditorComponent } from './table-data-editor.component';\nimport type { AXPTableColumnDefinition } from '../table-columns-editor/table-columns-editor.types';\n\nconst I18N = {\n title: '@general:widgets.table-data-editor.popup-title',\n cancel: '@general:actions.cancel.title',\n save: '@general:actions.save.title',\n} as const;\n\n@Component({\n selector: 'axp-table-data-editor-popup',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AsyncPipe, AXButtonModule, AXDecoratorModule, AXTranslationModule, AXPTableDataEditorComponent],\n template: `\n <div class=\"ax-flex ax-flex-col ax-flex-1 ax-min-h-0 ax-overflow-hidden\">\n <div class=\"ax-flex-1 ax-min-h-0 ax-overflow-auto\">\n <axp-table-data-editor\n [columns]=\"columns()\"\n [(rowsModel)]=\"localRows\"\n />\n </div>\n </div>\n <ax-footer>\n <ax-suffix>\n <ax-button\n look=\"solid\"\n [text]=\"(I18N.cancel | translate | async) ?? ''\"\n (onClick)=\"handleCancel()\"\n ></ax-button>\n <ax-button\n look=\"solid\"\n color=\"primary\"\n [text]=\"(I18N.save | translate | async) ?? ''\"\n (onClick)=\"handleSave()\"\n ></ax-button>\n </ax-suffix>\n </ax-footer>\n `,\n})\nexport class AXPTableDataEditorPopupComponent extends AXBasePageComponent {\n protected readonly I18N = I18N;\n\n columns = input.required<AXPTableColumnDefinition[]>();\n rows = input<Record<string, unknown>[]>([]);\n localRows = model<Record<string, unknown>[]>([]);\n\n constructor() {\n super();\n afterNextRender(() => {\n const initial = this.rows();\n this.localRows.set(Array.isArray(initial) ? cloneDeep(initial) : []);\n });\n }\n\n protected handleCancel(): void {\n this.close();\n }\n\n protected handleSave(): void {\n const rows = this.localRows().map((row) => {\n const { _id, ...rest } = row;\n return rest as Record<string, unknown>;\n });\n this.close({ rows });\n }\n}\n","import { AXPopupService } from '@acorex/components/popup';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { inject, Injectable } from '@angular/core';\nimport type { AXPTableColumnDefinition } from '../table-columns-editor/table-columns-editor.types';\n\nexport interface AXPTableDataEditorOpenOptions {\n title?: string;\n columns: AXPTableColumnDefinition[];\n rows?: Record<string, unknown>[];\n}\n\n@Injectable({ providedIn: 'root' })\nexport class AXPTableDataEditorService {\n private readonly popupService = inject(AXPopupService);\n private readonly translationService = inject(AXTranslationService);\n\n async open(options: AXPTableDataEditorOpenOptions): Promise<Record<string, unknown>[] | null> {\n const component = await import('./table-data-editor-popup.component').then(\n (m) => m.AXPTableDataEditorPopupComponent\n );\n const title =\n options?.title ??\n (await this.translationService.translateAsync('@general:widgets.table-data-editor.popup-title'));\n const result = await this.popupService.open(component, {\n title,\n size: 'lg',\n data: {\n columns: options.columns ?? [],\n rows: options.rows ?? [],\n },\n });\n const rows = result?.data?.rows;\n return Array.isArray(rows) ? rows : null;\n }\n}\n","import { AXPWidgetCoreModule, AXPWidgetNode, AXPWidgetsCatalog } from '@acorex/platform/layout/widget-core';\nimport { CommonModule } from '@angular/common';\nimport { Component, computed, inject, signal, ViewEncapsulation, Input } from '@angular/core';\nimport { AXBasePageComponent } from '@acorex/components/page';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXFormComponent, AXFormModule } from '@acorex/components/form';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPTemplateViewerConfig } from './template-viewer.types';\nimport { AXPContextChangeEvent } from '@acorex/platform/core';\n\n@Component({\n selector: 'axp-template-viewer',\n template: `\n <div class=\"ax-p-4 ax-min-h-64\">\n <ax-form #form>\n <axp-widgets-container [context]=\"context\" (onContextChanged)=\"handleContextChanged($event)\" >\n <ng-container axp-widget-renderer [node]=\"currentPage()\" [mode]=\"config?.readOnly ? 'view' : 'edit'\"></ng-container>\n </axp-widgets-container>\n </ax-form>\n </div>\n \n @if (config?.showActions !== false) {\n <ax-footer>\n <ax-suffix>\n <ax-button [text]=\"'@general:actions.cancel.title' | translate | async\" (onClick)=\"handleCancel()\"></ax-button>\n @if (!config?.readOnly) {\n <ax-button color=\"primary\" [text]=\"'@general:actions.submit.title' | translate | async\" (onClick)=\"handleSubmit(form)\"></ax-button>\n }\n </ax-suffix>\n </ax-footer>\n }\n `,\n encapsulation: ViewEncapsulation.None,\n imports: [CommonModule, AXPWidgetCoreModule, AXDecoratorModule, AXButtonModule, AXFormModule, AXTranslationModule]\n})\nexport class AXPTemplateViewerComponent extends AXBasePageComponent {\n\n //#region ---- Input Properties ----\n\n @Input() set config(value: AXPTemplateViewerConfig | undefined) {\n this._config.set(value);\n }\n get config() {\n return this._config();\n }\n\n //#endregion\n\n //#region ---- Component State ----\n\n protected context: any = {};\n protected readonly document = signal({ type: AXPWidgetsCatalog.document } as AXPWidgetNode);\n protected readonly currentPageIndex = signal(0);\n protected readonly _config = signal<AXPTemplateViewerConfig | undefined>(undefined);\n\n protected readonly currentPage = computed(() => {\n return (\n this.document().children?.[this.currentPageIndex()] ?? ({ type: AXPWidgetsCatalog.pageLayout } as AXPWidgetNode)\n );\n });\n\n //#endregion\n\n //#region ---- Lifecycle Methods ----\n\n protected override async ngOnInit() {\n super.ngOnInit();\n await this.loadTemplate();\n }\n\n //#endregion\n\n //#region ---- Template Loading ----\n\n private async loadTemplate() {\n const config = this.config;\n if (!config) return;\n\n let templateData: AXPWidgetNode;\n\n if (typeof config.template === 'string') {\n try {\n templateData = JSON.parse(config.template);\n } catch (error) {\n console.error('Failed to parse template JSON:', error);\n return;\n }\n } else {\n templateData = config.template;\n }\n\n this.document.set(templateData);\n\n // Set initial context if provided\n if (config.context) {\n this.context = { ...config.context };\n }\n }\n\n //#endregion\n\n //#region ---- Event Handlers ----\n\n protected handleContextChanged(e: AXPContextChangeEvent) {\n this.context = e.data;\n }\n\n protected async handleSubmit(form: AXFormComponent) {\n const formResult = await form.validate();\n if (formResult.result) {\n this.close({\n context: this.context,\n cancelled: false,\n metadata: this.config?.metadata\n });\n }\n }\n\n protected handleCancel() {\n this.close({\n context: this.context,\n cancelled: true,\n metadata: this.config?.metadata\n });\n }\n\n //#endregion\n}\n","import { inject, Injectable } from '@angular/core';\nimport { AXPopupService } from '@acorex/components/popup';\nimport { AXPTemplateViewerConfig, AXPTemplateViewerResult } from './template-viewer.types';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AXPTemplateViewerService {\n private readonly popupService = inject(AXPopupService);\n\n /**\n * Show a template viewer dialog with the given configuration\n * @param config Template viewer configuration including template, title, and UI options\n * @returns Promise resolving to viewer result with form values and cancellation status\n */\n async showTemplate(config: AXPTemplateViewerConfig): Promise<AXPTemplateViewerResult> {\n const component = await import('./template-viewer.component').then(c => c.AXPTemplateViewerComponent);\n const result = await this.popupService.open(component, {\n title: config.title || 'Template Viewer',\n size: config.size || 'lg',\n closeButton: false,\n closeOnBackdropClick: false,\n draggable: false,\n data: { config }\n });\n\n return result?.data || { context: config.context, cancelled: true, metadata: config.metadata };\n }\n\n /**\n * Show a template viewer in read-only mode\n * @param config Template viewer configuration\n * @returns Promise resolving to viewer result\n */\n async showTemplateReadOnly(config: Omit<AXPTemplateViewerConfig, 'readOnly' | 'showActions'>): Promise<AXPTemplateViewerResult> {\n return this.showTemplate({\n ...config,\n readOnly: true,\n showActions: false\n });\n }\n}\n","//#region ---- Imports ----\n\nimport { ChangeDetectionStrategy, Component, computed, input, signal } from '@angular/core';\nimport { AXHtmlEvent } from '@acorex/cdk/common';\nimport { AXAvatarModule } from '@acorex/components/avatar';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXImageModule } from '@acorex/components/image';\nimport { isEmpty, isNil } from 'lodash-es';\n\n//#endregion\n\n//#region ---- Avatar Component ----\n\n/**\n * Generic avatar renderer with image and initials fallback.\n */\n@Component({\n selector: 'axp-avatar',\n templateUrl: './avatar.component.html',\n imports: [AXAvatarModule, AXDecoratorModule, AXImageModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXPAvatarComponent {\n /** Avatar size in pixels. */\n readonly size = input(40);\n\n /** Optional image source for the avatar. */\n readonly src = input<string | undefined>('');\n\n /** Display name used for title and initials fallback. */\n readonly fullName = input<string | undefined>('');\n\n /** Optional override for fallback text shown when image is not available. */\n readonly fallbackText = input<string | undefined>(undefined);\n\n /** Forces placeholder mode and '?' fallback. */\n readonly placeholder = input(false);\n\n protected readonly isAvatarLoaded = signal(false);\n\n protected readonly normalizedName = computed(() => (this.fullName() ?? '').trim());\n protected readonly resolvedSrc = computed(() => (this.src() ?? '').trim());\n protected readonly hasAvatar = computed(() => !isNil(this.resolvedSrc()) && !isEmpty(this.resolvedSrc()) && !this.placeholder());\n protected readonly isLoading = computed(() => this.hasAvatar() && !this.isAvatarLoaded());\n protected readonly avatarText = computed(() => {\n if (this.placeholder()) {\n return '?';\n }\n\n const customFallback = (this.fallbackText() ?? '').trim();\n if (customFallback) {\n return customFallback.toUpperCase();\n }\n\n return this.computeInitials(this.normalizedName());\n });\n protected readonly avatarColor = computed(() => this.pickColor(this.avatarText()));\n protected readonly title = computed(() => this.normalizedName());\n\n protected onImageError(event: AXHtmlEvent<ErrorEvent>): void {\n this.isAvatarLoaded.set(false);\n }\n\n protected onImageLoad(event: AXHtmlEvent<Event>): void {\n this.isAvatarLoaded.set(true);\n }\n\n private computeInitials(name: string): string {\n if (!name) {\n return '?';\n }\n\n const parts = name\n .split(/\\s+/)\n .filter(Boolean);\n\n if (parts.length === 1) {\n return parts[0].slice(0, 2).toUpperCase();\n }\n\n return (parts[0][0] + parts[parts.length - 1][0]).toUpperCase();\n }\n\n private hashString(value: string): number {\n let hash = 0;\n for (let i = 0; i < value.length; i++) {\n hash = (hash << 5) - hash + value.charCodeAt(i);\n hash |= 0;\n }\n\n return Math.abs(hash);\n }\n\n private pickColor(text: string): string {\n const colors = ['primary', 'secondary', 'danger', 'warning', 'success', 'accent1', 'accent2', 'accent3'];\n const index = this.hashString(text) % colors.length;\n return colors[index];\n }\n}\n\n//#endregion\n","<ax-avatar [size]=\"size()\" class=\"ax-cursor-pointer ax-relative\" [title]=\"title()\">\n @if (hasAvatar()) {\n <ng-container>\n <ax-image\n (onError)=\"onImageError($event)\"\n (onLoad)=\"onImageLoad($event)\"\n [src]=\"resolvedSrc()\"\n [class.ax-opacity-0]=\"isLoading()\"\n class=\"ax-transition-opacity ax-duration-200\"\n />\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 class=\"ax-{{ avatarColor() }}-lightest\">\n <small class=\"ax-text-xs ax-font-semibold\">{{ avatarText() }}</small>\n </ax-text>\n }\n</ax-avatar>\n","import { InjectionToken } from \"@angular/core\";\nimport { AXPUserAvatarData, AXPUserAvatarProvider } from \"./user-avatar.types\";\n\nexport const AXP_USER_AVATAR_PROVIDER = new InjectionToken<AXPUserAvatarProvider>(\n 'AXP_USER_AVATAR_PROVIDER'\n);\n\n\n","import { inject, Injectable } from \"@angular/core\";\nimport { AXPUserAvatarData } from \"./user-avatar.types\";\nimport { AXP_USER_AVATAR_PROVIDER } from \"./user-avatar.provider\";\nimport { BehaviorSubject, Observable, timer } from 'rxjs';\nimport { map, shareReplay, switchMap, tap } from 'rxjs/operators';\n\ninterface CacheEntry {\n data: AXPUserAvatarData;\n timestamp: number;\n subject: BehaviorSubject<AXPUserAvatarData>;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPUserAvatarService {\n private provider = inject(AXP_USER_AVATAR_PROVIDER, { optional: true });\n\n // Cache configuration\n private readonly cacheExpiryTime = 5 * 60 * 1000; // 5 minutes in milliseconds\n private readonly refreshInterval = 3 * 60 * 1000; // 3 minutes in milliseconds\n\n // Cache storage\n private cache = new Map<string, CacheEntry>();\n\n /**\n * Gets user information with caching and auto-refresh\n * @param userId The username to fetch information for\n * @returns Observable that emits user avatar data\n */\n getUserInfo$(userId: string): Observable<AXPUserAvatarData> {\n // Check if we have a cached entry\n if (!this.cache.has(userId) || this.isExpired(userId)) {\n // Create a new cache entry with default values\n const defaultData: AXPUserAvatarData = {\n id: userId,\n status: 'offline',\n username: '',\n firstName: '',\n lastName: ''\n };\n const subject = new BehaviorSubject<AXPUserAvatarData>(defaultData);\n this.cache.set(userId, {\n data: defaultData,\n timestamp: Date.now(),\n subject\n });\n\n // Fetch fresh data immediately\n this.fetchAndUpdateCache(userId);\n\n // Set up auto refresh\n timer(this.refreshInterval, this.refreshInterval)\n .pipe(\n tap(() => this.fetchAndUpdateCache(userId))\n )\n .subscribe();\n }\n\n return this.cache.get(userId)!.subject.asObservable();\n }\n\n /**\n * Gets user information (Promise-based for backward compatibility)\n * @param userId The username to fetch information for\n * @returns Promise that resolves to user avatar data\n */\n async getUserInfo(userId: string): Promise<AXPUserAvatarData> {\n // Check if we have an unexpired cached entry\n if (this.cache.has(userId) && !this.isExpired(userId)) {\n return this.cache.get(userId)!.data;\n }\n\n // Fetch fresh data and cache it\n return this.fetchAndUpdateCache(userId);\n }\n\n /**\n * Clears the entire cache or a specific user's cache\n * @param userId Optional username to clear specific cache\n */\n clearCache(userId?: string): void {\n if (userId) {\n this.cache.delete(userId);\n } else {\n this.cache.clear();\n }\n }\n\n /**\n * Force refresh data for a specific username\n * @param userId The username to refresh\n * @returns Promise that resolves to the refreshed data\n */\n async refreshUserInfo(userId: string): Promise<AXPUserAvatarData> {\n return this.fetchAndUpdateCache(userId);\n }\n\n /**\n * Checks if a cache entry is expired\n */\n private isExpired(userId: string): boolean {\n const entry = this.cache.get(userId);\n if (!entry) return true;\n\n return (Date.now() - entry.timestamp) > this.cacheExpiryTime;\n }\n\n /**\n * Fetches data from provider and updates the cache\n */\n private async fetchAndUpdateCache(userId: string): Promise<AXPUserAvatarData> {\n try {\n const data = await this.provider?.provide(userId);\n if (!data) {\n throw new Error(`User info not found for ${userId}`);\n }\n const entry = this.cache.get(userId);\n\n // Update the cache entry\n if (entry) {\n entry.data = data;\n entry.timestamp = Date.now();\n entry.subject.next(data);\n } else {\n // Create a new cache entry if needed\n const subject = new BehaviorSubject<AXPUserAvatarData>(data);\n this.cache.set(userId, {\n data,\n timestamp: Date.now(),\n subject\n });\n }\n\n return data;\n } catch (error) {\n console.error(`Error fetching user info for ${userId}:`, error);\n throw error;\n }\n }\n}","import { ChangeDetectionStrategy, Component, OnDestroy, OnInit, ViewEncapsulation, computed, inject, input, signal } from '@angular/core';\n\nimport { AXBadgeModule } from '@acorex/components/badge';\nimport { AXSkeletonModule } from '@acorex/components/skeleton';\nimport { Subject, takeUntil } from 'rxjs';\nimport { AXPUserAvatarService } from './user-avatar.service';\nimport { AXPUserAvatarData } from './user-avatar.types';\nimport { AXPAvatarComponent } from '../avatar';\n\n@Component({\n selector: 'axp-user-avatar',\n templateUrl: './user-avatar.component.html',\n styleUrl: './user-avatar.component.scss',\n imports: [AXPAvatarComponent, AXBadgeModule, AXSkeletonModule],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [],\n})\nexport class AXPUserAvatarComponent implements OnInit, OnDestroy {\n private readonly userAvatarService = inject(AXPUserAvatarService);\n private readonly destroy$ = new Subject<void>();\n\n protected userInfo = signal<AXPUserAvatarData | null>(null);\n\n size = input<number>(40);\n userId = input<string>('');\n\n src = signal<string>('');\n userName = computed(() => this.userInfo()?.username || '');\n firstName = computed(() => this.userInfo()?.firstName || 'Root');\n lastName = computed(() => this.userInfo()?.lastName || 'User');\n title = computed(() => `${this.firstName()} ${this.lastName()}`);\n isOnline = computed(() => this.userInfo()?.status === 'online');\n\n ngOnInit(): void {\n this.loadUserData();\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n private loadUserData(): void {\n // Skip if no username provided\n if (!this.userId()) {\n return;\n }\n\n // Subscribe to the user info observable to get real-time updates\n this.userAvatarService\n .getUserInfo$(this.userId())\n .pipe(takeUntil(this.destroy$))\n .subscribe((userData) => {\n this.userInfo.set(userData);\n // This is a placeholder - replace with your actual avatar URL logic\n this.generateAvatarSrc();\n });\n }\n\n /**\n * Generate avatar image source\n * This is a placeholder - implement based on your actual requirements\n */\n private generateAvatarSrc(): void {\n // Example: Check if the user has a custom avatar URL\n // If not, generate a placeholder using initials\n if (this.userInfo()?.avatarUrl) {\n this.src.set(this.userInfo()?.avatarUrl!);\n return;\n }\n this.src.set('');\n }\n}\n","<axp-avatar [size]=\"size()\" [src]=\"src()\" [fullName]=\"title()\" />","import { AXPopupService } from '@acorex/components/popup';\nimport { AXTabsComponent, AXTabsModule } from '@acorex/components/tabs';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\nimport { AXPViewQuery } from '@acorex/platform/core';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n effect,\n inject,\n model,\n signal,\n untracked,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\n\n@Component({\n selector: 'axp-query-views',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './query-views.component.html',\n encapsulation: ViewEncapsulation.None,\n imports: [AXTabsModule, AXTranslationModule, CommonModule],\n})\nexport class AXPQueryViewsComponent {\n protected popupService = inject(AXPopupService);\n protected translate = inject(AXTranslationService);\n protected tabs = viewChild<AXTabsComponent>('tabs');\n\n views = model<AXPViewQuery[]>([]);\n selectedView = model.required<AXPViewQuery>();\n\n protected isMounted = signal(false);\n\n ngAfterViewInit(): void {\n this.isMounted.set(true);\n }\n\n #effect = effect(() => {\n if (!this.isMounted()) return;\n const views = untracked(() => this.views());\n if (!views) return;\n const selectedTab = views.findIndex((v) => v.name == this.selectedView().name);\n untracked(() => {\n if (selectedTab != -1) {\n this.tabs()?.select(selectedTab);\n }\n });\n });\n\n setView(view: AXPViewQuery) {\n this.selectedView.set(view);\n }\n\n handleActiveChange(e: any) {\n console.log(e);\n }\n}\n","<ax-tabs #tabs [look]=\"'with-line'\" class=\"ax-font-semibold\">\n @for (item of views(); track item.name) {\n <ax-tab-item (onClick)=\"setView(item)\" [key]=\"item.name\" [text]=\"(item.title | translate | async) || 'item.title'\">\n </ax-tab-item>\n }\n <!-- <ax-tab-item\n (onClick)=\"createNew()\"\n [key]=\"'create-new'\"\n [text]=\"('@general:actions.create.title' | translate | async) || 'Create New'\"\n >\n </ax-tab-item> -->\n</ax-tabs>\n","import { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXFormModule } from '@acorex/components/form';\nimport { AXSearchBoxModule } from '@acorex/components/search-box';\nimport { AXSelectBoxComponent, AXSelectBoxModule } from '@acorex/components/select-box';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\nimport type { AXPActionMenuItem, AXPMultiLanguageString } from '@acorex/platform/core';\nimport {\n AXPMultiLanguageStringResolverService,\n AXPResolveMultiLanguageStringPipe,\n compareMultiLanguageStrings,\n} from '@acorex/platform/core';\nimport { AXPCommandExecutor } from '@acorex/platform/runtime';\nimport type { AXPWidgetProperty } from '@acorex/platform/layout/widget-core';\nimport { AXPWorkflowService } from '@acorex/platform/workflow';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n input,\n model,\n signal,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { cloneDeep, merge } from 'lodash-es';\nimport {\n AXPPropertyViewerResult,\n AXPPropertyViewerService,\n buildPropertyViewerInitialContextFromProperties,\n buildPropertyViewerTabsFromProperties,\n} from '../property-viewer';\nimport { AXPStateMessageComponent } from '../state-message/state-message.component';\n\n//#region ---- Types ----\n\n/**\n * One selectable entry for {@link AXPItemConfiguratorComponent}.\n * Parents map external data into this shape. {@link propertyDefinitions} drive {@link AXPPropertyViewerService} tabs.\n */\nexport interface ItemConfiguratorListItem {\n id: string;\n /** Shown in the list and in the configure dialog title; plain string, i18n key, or locale map. */\n title: AXPMultiLanguageString;\n icon?: string;\n description?: AXPMultiLanguageString;\n propertyDefinitions?: AXPWidgetProperty[];\n}\n\ninterface ItemConfiguratorSelectRow {\n value: string;\n text: string;\n icon?: string;\n description?: string;\n}\n\n//#endregion\n\n//#region ---- Component ----\n\n/**\n * Select an item from a list and edit its settings via {@link AXPPropertyViewerService}.\n * Bound state: {@link selectedItemId} and {@link values} (context returned from the viewer). Not tied to {@link AXPWidgetNode}.\n */\n@Component({\n selector: 'axp-item-configurator',\n templateUrl: './item-configurator.component.html',\n styleUrl: './item-configurator.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n CommonModule,\n FormsModule,\n AXFormModule,\n AXButtonModule,\n AXSelectBoxModule,\n AXDecoratorModule,\n AXTranslationModule,\n AXSearchBoxModule,\n AXPResolveMultiLanguageStringPipe,\n ],\n})\nexport class AXPItemConfiguratorComponent {\n //#region ---- Services & Dependencies ----\n\n private readonly mlResolver = inject(AXPMultiLanguageStringResolverService);\n\n //#endregion\n\n //#region ---- Inputs ----\n\n //#region ---- Inputs ----\n\n /** Selected list entry id ({@link ItemConfiguratorListItem.id}). */\n selectedItemId = model<string>('');\n\n /** Values edited in the property viewer (merged from dialog result). */\n values = model<Record<string, unknown>>({});\n\n label = input<string>('@general:terms.widget');\n\n readonly = input<boolean>(false);\n\n items = input<ItemConfiguratorListItem[]>([]);\n\n headerActions = input<AXPActionMenuItem[]>([]);\n\n //#endregion\n\n //#region ---- Services & Dependencies ----\n\n private readonly propertyViewerService = inject(AXPPropertyViewerService);\n private readonly translationService = inject(AXTranslationService);\n private readonly workflow = inject(AXPWorkflowService);\n private readonly commandExecutor = inject(AXPCommandExecutor);\n\n //#endregion\n\n //#region ---- Class Properties ----\n\n protected isEditMode = signal<boolean>(false);\n\n protected availableItems = computed<ItemConfiguratorSelectRow[]>(() => {\n const list: ItemConfiguratorSelectRow[] = [];\n for (const row of this.items()) {\n const id = row.id?.trim() ?? '';\n if (!id) {\n continue;\n }\n const title = this.mlResolver.resolve(row.title).trim() || id;\n list.push({\n value: id,\n text: title,\n icon: row.icon,\n description: row.description != null ? this.mlResolver.resolve(row.description) : undefined,\n });\n }\n const locale = this.translationService.getActiveLang();\n return list.sort((a, b) => compareMultiLanguageStrings(a.text, b.text, locale));\n });\n\n protected selectedListItem = computed<ItemConfiguratorListItem | null>(() => {\n const id = this.selectedItemId();\n if (!id) {\n return null;\n }\n return this.items().find((r) => r.id === id) ?? null;\n });\n\n protected resolvedPropertyDefinitions = computed<AXPWidgetProperty[]>(() => {\n const defs = this.selectedListItem()?.propertyDefinitions;\n if (isPropertyDefinitionArray(defs)) {\n return defs;\n }\n return [];\n });\n\n protected currentItemConfig = computed(() => {\n const itemId = this.selectedItemId();\n if (!itemId) {\n return null;\n }\n\n const listItem = this.selectedListItem();\n const hasProperties = this.resolvedPropertyDefinitions().length > 0;\n\n if (listItem != null) {\n return {\n title: this.mlResolver.resolve(listItem.title).trim() || itemId,\n description: listItem.description,\n icon: listItem.icon,\n hasProperties,\n };\n }\n\n return {\n title: itemId,\n description: undefined as AXPMultiLanguageString | undefined,\n icon: undefined as string | undefined,\n hasProperties,\n };\n });\n\n protected canConfigure = computed(() => {\n return !!this.selectedItemId() && !!this.currentItemConfig()?.hasProperties;\n });\n\n protected isConfigured = computed(() => {\n const v = this.values();\n if (!v || typeof v !== 'object') {\n return false;\n }\n return Object.keys(v).length > 0;\n });\n\n protected visibleHeaderActions = computed(() =>\n (this.headerActions() ?? []).filter(\n (a) => a != null && a.visible !== false && !a.items?.length,\n ),\n );\n\n protected itemSelectBox = viewChild<AXSelectBoxComponent>('itemSelectBox');\n\n protected enterEditMode(): void {\n if (this.readonly()) {\n return;\n }\n this.isEditMode.set(true);\n }\n\n protected exitEditMode(): void {\n this.isEditMode.set(false);\n }\n\n //#endregion\n\n //#region ---- Lifecycle ----\n\n constructor() {\n effect(() => {\n if (!this.isEditMode()) {\n return;\n }\n const scheduleFocus = (): void => {\n setTimeout(() => {\n this.itemSelectBox()?.focus();\n this.itemSelectBox()?.open();\n }, 0);\n };\n scheduleFocus();\n });\n }\n\n //#endregion\n\n //#region ---- Event Handlers ----\n\n protected async onSelectionChange(event: { value?: string | null }): Promise<void> {\n if (this.readonly()) {\n return;\n }\n\n const newType = event?.value ?? null;\n const itemId = typeof newType === 'string' ? newType : '';\n\n if (this.selectedItemId() === itemId) {\n return;\n }\n\n if (!itemId) {\n this.selectedItemId.set('');\n this.values.set({});\n this.isEditMode.set(true);\n return;\n }\n\n this.selectedItemId.set(itemId);\n this.values.set({});\n this.isEditMode.set(false);\n // Open only on user selection from the select box — not when the model reverts (e.g. discard).\n if (this.canConfigure()) {\n void this.openConfigureDialog();\n }\n }\n\n protected async openConfigureDialog(): Promise<void> {\n if (!this.canConfigure() || this.readonly()) {\n return;\n }\n\n const defs = this.resolvedPropertyDefinitions();\n if (defs.length === 0) {\n return;\n }\n\n const tabs = buildPropertyViewerTabsFromProperties(defs);\n if (tabs.length === 0) {\n return;\n }\n\n // Property definitions use paths like `options` / `options.*`; viewer context must nest the\n // widget options bag under `options`, not at the root (same as widget-property-viewer).\n const context = buildPropertyViewerInitialContextFromProperties(defs, {\n options: cloneDeep(this.values()) as Record<string, unknown>,\n });\n const rawTitle = this.currentItemConfig()?.title?.trim() || this.selectedItemId().trim();\n const resolvedTitle =\n rawTitle.startsWith('@') ? (await this.translationService.translateAsync(rawTitle)) || rawTitle : rawTitle;\n const nameForDialog = resolvedTitle.trim();\n const title =\n (await this.translationService.translateAsync('@general:actions.configure.named-title', {\n params: { name: nameForDialog || '—' },\n })) || `Configure ${nameForDialog || '—'}`;\n\n const result = (await this.propertyViewerService\n .create()\n .dialog((d) => {\n d.setTitle(title)\n .setSize('md')\n .setCloseButton(true)\n .setMode('advanced')\n .setTabs(tabs)\n .setContext(cloneDeep(context));\n })\n .show()) as AXPPropertyViewerResult | null;\n\n if (result?.values && typeof result.values === 'object') {\n const rv = result.values as Record<string, unknown>;\n const optsPatch =\n rv['options'] !== undefined &&\n typeof rv['options'] === 'object' &&\n !Array.isArray(rv['options'])\n ? (rv['options'] as Record<string, unknown>)\n : rv;\n this.values.set(merge({}, cloneDeep(this.values()), cloneDeep(optsPatch)));\n }\n }\n\n protected onHeaderActionClick(action: AXPActionMenuItem): void {\n if (this.readonly() || this.isHeaderActionDisabled(action)) {\n return;\n }\n const command = action.command;\n if (!command?.name?.trim()) {\n return;\n }\n const name = command.name.trim();\n const cmdOptions = command.options ?? command.metadata;\n if (this.workflow.exists(name)) {\n void this.workflow.execute(name, cmdOptions ?? null);\n } else {\n void this.commandExecutor.execute(name, cmdOptions);\n }\n }\n\n protected isHeaderActionDisabled(action: AXPActionMenuItem): boolean {\n return action.disabled === true;\n }\n\n //#endregion\n}\n\n//#region ---- Helpers ----\n\nfunction isPropertyDefinitionArray(value: unknown): value is AXPWidgetProperty[] {\n if (!Array.isArray(value) || value.length === 0) {\n return false;\n }\n return value.every(\n (entry) =>\n entry != null &&\n typeof entry === 'object' &&\n 'name' in entry &&\n typeof (entry as AXPWidgetProperty).name === 'string' &&\n 'schema' in entry &&\n 'group' in entry,\n );\n}\n\n//#endregion\n","<!-- Item selector & info container -->\n<div class=\"__item-container\">\n @if (isEditMode()) {\n <div class=\"__item-selector\">\n <ax-select-box #itemSelectBox [ngModel]=\"selectedItemId()\" [dataSource]=\"availableItems()\"\n [placeholder]=\"('@general:actions.select.title' | translate | async) ?? ''\" [readonly]=\"readonly()\"\n (onValueChanged)=\"onSelectionChange($event)\" valueField=\"value\" textField=\"text\" [itemTemplate]=\"itemTemplate\"\n [selectedTemplate]=\"selectedTemplate\" (onClosed)=\"exitEditMode()\">\n <ax-search-box></ax-search-box>\n <ax-clear-button></ax-clear-button>\n </ax-select-box>\n </div>\n }\n\n @if (!isEditMode()) {\n @if (selectedItemId() && currentItemConfig(); as config) {\n <div class=\"__item-info\">\n <div class=\"__item-header\" [class.__editable]=\"!readonly()\" (click)=\"enterEditMode()\">\n <div>\n @if (config.icon) {\n <i [class]=\"config.icon\"></i>\n }\n <div>\n <span>\n {{ config.title }}\n </span>\n @if (config.description) {\n <p>\n {{ (config.description | axpResolveMultiLanguageString | translate | async) ?? '' }}\n </p>\n }\n </div>\n </div>\n\n <div class=\"__action-buttons\" (click)=\"$event.stopPropagation()\">\n @if (config.hasProperties) {\n <ax-button [disabled]=\"!canConfigure() || readonly()\"\n [title]=\"('@general:actions.configure.title' | translate | async) ?? ''\" look=\"blank\"\n [color]=\"isConfigured() ? 'primary' : 'default'\" size=\"sm\" (onClick)=\"openConfigureDialog()\">\n <ax-icon icon=\"fa-solid fa-cog\"></ax-icon>\n </ax-button>\n }\n @for (action of visibleHeaderActions(); track action.name ?? $index) {\n <ax-button look=\"blank\" size=\"sm\" [color]=\"action.color ?? 'default'\"\n [disabled]=\"readonly() || isHeaderActionDisabled(action)\" [title]=\"(action.title | translate | async) ?? ''\"\n [class.ax-icon-only]=\"action.iconOnly === true\" (onClick)=\"onHeaderActionClick(action)\">\n @if (action.icon) {\n <ax-icon [icon]=\"action.icon\"></ax-icon>\n }\n @if (action.iconOnly !== true) {\n <span>{{ (action.title | translate | async) ?? '' }}</span>\n }\n </ax-button>\n }\n </div>\n </div>\n\n <!-- @if (!config.hasProperties) {\n <axp-state-message mode=\"info\" icon=\"fa-solid fa-info-circle\"\n [description]=\"'@general:widgets.widget-configurator.no-configuration-needed'\" variant=\"compact\">\n </axp-state-message>\n } -->\n </div>\n } @else {\n <div class=\"__item-empty\" [class.__editable]=\"!readonly()\" (click)=\"enterEditMode()\">\n <i class=\"fa-solid fa-puzzle-piece\"></i>\n <span>\n {{ ('@general:widgets.widget-configurator.select-widget-type' | translate | async) ?? 'Select an item type' }}\n </span>\n </div>\n }\n }\n\n <ng-template #itemTemplate let-context>\n @let item = context.data;\n <div class=\"__item-template ax-flex ax-w-full ax-items-center ax-gap-3 ax-p-2\">\n @if (item.icon) {\n <i [class]=\"item.icon + ' ax-text-base ax-w-5 ax-text-center'\"></i>\n }\n <div class=\"ax-flex ax-items-center ax-gap-2 ax-flex-1 ax-min-w-0\">\n <div class=\"ax-text-sm ax-font-medium\">\n {{ item.text }}\n </div>\n @if (item.description) {\n <div class=\"ax-text-xs ax-text-neutral-600\">\n {{ item.description }}\n </div>\n }\n </div>\n </div>\n </ng-template>\n\n <ng-template #selectedTemplate let-item>\n <div class=\"__selected-template\">\n @if (item?.data?.icon) {\n <i [class]=\"item.data.icon\"></i>\n }\n <span>\n {{ item?.data?.text }}\n </span>\n </div>\n </ng-template>\n</div>","import { AXTranslationService } from '@acorex/core/translation';\nimport type { AXPActionMenuItem, AXPOptionsData, AXPMultiLanguageString } from '@acorex/platform/core';\nimport { compareMultiLanguageStrings } from '@acorex/platform/core';\nimport { AXP_PREVIEW_WIDGET_FIELD_COMMAND_KEY } from '@acorex/platform/layout/builder';\nimport { AXPWidgetGroupEnum, AXPWidgetNode, AXPWidgetRegistryService } from '@acorex/platform/layout/widget-core';\n\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n input,\n model,\n untracked,\n ViewEncapsulation,\n} from '@angular/core';\nimport { cloneDeep, isEqual } from 'lodash-es';\n\nimport { AXPItemConfiguratorComponent, ItemConfiguratorListItem } from '../item-configurator';\n\n//#region ---- Component ----\n\n/**\n * Widget field configurator for entity forms: composes {@link AXPItemConfiguratorComponent} with\n * {@link AXPWidgetRegistryService} list items and widget preview.\n */\n@Component({\n selector: 'axp-widget-field-configurator',\n template: `\n <axp-item-configurator\n [(selectedItemId)]=\"selectedItemIdModel\"\n [(values)]=\"valuesModel\"\n [label]=\"label()\"\n [readonly]=\"readonly()\"\n [items]=\"configuratorItems()\"\n [headerActions]=\"previewHeaderActions()\"\n />\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'ax-flex ax-flex-col',\n '[attr.readonly]': 'readonly() ? \"\" : null',\n },\n styles: [\n `\n :host([readonly]) {\n pointer-events: none;\n opacity: 0.7;\n }\n `,\n ],\n imports: [AXPItemConfiguratorComponent],\n})\nexport class AXPWidgetFieldConfiguratorComponent {\n\n //#region ---- Inputs ----\n\n widget = model<AXPWidgetNode>({ type: '' });\n\n label = input<string>('@general:terms.widget');\n\n fieldName = input<string>('Field');\n\n fieldTitle = input<AXPMultiLanguageString>('');\n\n readonly = input<boolean>(false);\n\n //#endregion\n\n //#region ---- Services & Dependencies ----\n\n private readonly widgetRegistry = inject(AXPWidgetRegistryService);\n private readonly translation = inject(AXTranslationService);\n\n //#endregion\n\n //#region ---- Class Properties ----\n\n protected selectedItemIdModel = model<string>('');\n\n protected valuesModel = model<Record<string, unknown>>({});\n\n /**\n * List entries from {@link AXPWidgetRegistryService} (form editors), with\n * {@link ItemConfiguratorListItem.propertyDefinitions} from each registered config.\n */\n protected configuratorItems = computed<ItemConfiguratorListItem[]>(() => {\n const list: ItemConfiguratorListItem[] = [];\n for (const w of this.widgetRegistry.all()) {\n if (!w.groups?.includes(AXPWidgetGroupEnum.FormElement) || w.type !== 'editor') {\n continue;\n }\n const props = w.properties?.filter((p) => p.visible !== false) ?? [];\n list.push({\n id: w.name,\n title: w.title,\n icon: w.icon,\n description: w.description,\n propertyDefinitions: props.length > 0 ? props : undefined,\n });\n }\n const locale = this.translation.getActiveLang();\n return list.sort((a, b) => compareMultiLanguageStrings(a.title, b.title, locale));\n });\n\n protected previewHeaderActions = computed<AXPActionMenuItem[]>(() => {\n const w = this.widget();\n const hasType = !!w?.type;\n return [\n {\n name: 'preview-widget-field',\n title: '@general:actions.preview.title',\n icon: 'fa-solid fa-eye',\n iconOnly: true,\n disabled: this.readonly() || !hasType,\n command: {\n name: AXP_PREVIEW_WIDGET_FIELD_COMMAND_KEY,\n options: {\n widget: cloneDeep(w),\n fieldName: this.fieldName(),\n fieldTitle: this.fieldTitle(),\n },\n },\n },\n ];\n });\n\n //#endregion\n\n //#region ---- Lifecycle ----\n\n constructor() {\n effect(() => {\n const w = this.widget();\n const sid = w?.type ?? '';\n const opts = (w?.options ?? {}) as Record<string, unknown>;\n const curSid = untracked(() => this.selectedItemIdModel());\n const curVals = untracked(() => this.valuesModel());\n if (sid !== curSid || !isEqual(opts, curVals)) {\n untracked(() => {\n this.selectedItemIdModel.set(sid);\n this.valuesModel.set(opts);\n });\n }\n });\n\n effect(() => {\n const sid = this.selectedItemIdModel();\n const vals = this.valuesModel();\n const current = untracked(() => this.widget());\n const empty: AXPWidgetNode = { type: '', options: {} };\n\n if (!sid) {\n if (!isEqual(current ?? empty, empty)) {\n untracked(() => this.widget.set(empty));\n }\n return;\n }\n\n const next: AXPWidgetNode = {\n ...(current && typeof current === 'object' ? current : {}),\n type: sid,\n options: vals as AXPOptionsData,\n };\n\n if (!isEqual(next, current)) {\n untracked(() => this.widget.set(next));\n }\n });\n }\n\n //#endregion\n}\n\n//#endregion\n","import { CommonModule } from '@angular/common';\nimport { Component, input, output, ViewEncapsulation } from '@angular/core';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPWidgetItemData, AXPWidgetItemClickEvent } from './widget-item.types';\nimport { AXPResolveMultiLanguageStringPipe } from '@acorex/platform/core';\n\nconst WIDGET_ITEM_I18N = {\n pin: '@general:widgets.widget-item.pin',\n unpin: '@general:widgets.widget-item.unpin',\n} as const;\n\n/**\n * Generic widget item component for displaying selectable widgets with icons, titles, and descriptions.\n * Can be used across different modules for consistent widget display and interaction.\n */\n@Component({\n selector: 'axp-widget-item',\n imports: [CommonModule, AXTranslationModule, AXPResolveMultiLanguageStringPipe],\n templateUrl: './widget-item.component.html',\n encapsulation: ViewEncapsulation.None,\n})\nexport class AXPWidgetItemComponent {\n protected readonly i18n = WIDGET_ITEM_I18N;\n\n // Inputs\n /** The widget data to display */\n widget = input.required<AXPWidgetItemData>();\n\n /** Whether this widget is currently selected */\n isSelected = input<boolean>(false);\n\n /** Whether to show the pin button */\n showPinButton = input<boolean>(true);\n\n /** Custom CSS classes to apply to the widget item */\n customClasses = input<string>('');\n\n // Outputs\n /** Emitted when the widget item is clicked */\n onWidgetClick = output<AXPWidgetItemClickEvent>();\n\n /** Emitted when the pin button is clicked */\n onPinClick = output<AXPWidgetItemClickEvent>();\n\n /**\n * Handle widget item click event\n */\n handleClick(event: MouseEvent): void {\n this.onWidgetClick.emit({\n event,\n widget: this.widget()\n });\n }\n\n /**\n * Handle pin button click event\n */\n handlePinClick(event: MouseEvent): void {\n event.stopPropagation(); // Prevent widget click event\n this.onPinClick.emit({\n event,\n widget: this.widget()\n });\n }\n\n /**\n * Get the effective icon to display\n */\n getIconClass(): string {\n return this.widget().icon || 'fa-light fa-document';\n }\n}","<div (click)=\"handleClick($event)\"\n class=\"ax-py-2 ax-px-3 ax-rounded-md ax-flex ax-gap-3 ax-items-center ax-group hover:ax-bg-primary-lightest/65 hover:ax-text-primary-on-lightest ax-cursor-pointer ax-w-full\"\n [class.ax-bg-primary-lightest]=\"isSelected()\" [class.ax-text-primary-on-lightest]=\"isSelected()\"\n [class.ax-border-primary-lightest]=\"isSelected()\" [class]=\"customClasses()\">\n\n <!-- Widget Icon -->\n <div class=\"ax-min-w-10 ax-h-10 ax-flex ax-items-center ax-justify-center ax-rounded-md ax-border group-hover:ax-bg-primary-lighter group-hover:ax-text-primary-on-lighter group-hover:ax-border-primary-lighter\"\n [class.ax-bg-primary-light]=\"isSelected()\" [class.ax-text-primary-on-light]=\"isSelected()\"\n [class.ax-border-primary-light]=\"isSelected()\" [class.ax-surface]=\"!isSelected()\">\n <i [ngClass]=\"getIconClass()\" class=\"ax-text-lg\"></i>\n </div>\n\n <!-- Widget Content -->\n <div class=\"ax-flex ax-flex-col ax-gap-1 ax-flex-1 ax-w-[70%]\">\n <div class=\"ax-flex ax-items-center ax-justify-between ax-gap-2\">\n <!-- Widget Title -->\n <div class=\"ax-font-semibold ax-text-sm ax-truncate\"\n [title]=\"(widget().title | axpResolveMultiLanguageString | translate | async) ?? ''\">\n {{ (widget().title | axpResolveMultiLanguageString | translate | async) ?? '' }}\n </div>\n\n <!-- Pin Button -->\n @if (showPinButton()) {\n <div (click)=\"handlePinClick($event)\" class=\"ax-cursor-pointer\">\n @if (widget().isPinned) {\n <i class=\"fa-solid fa-thumbtack ax-text-sm ax-rotate-45\"\n [title]=\"(i18n.unpin | translate | async) ?? ''\"></i>\n } @else {\n <i class=\"fa-light fa-thumbtack ax-text-sm ax-rotate-45 ax-invisible group-hover:ax-visible\"\n [title]=\"(i18n.pin | translate | async) ?? ''\"></i>\n }\n </div>\n }\n </div>\n\n <!-- Widget Description -->\n @if (widget().description; as desc) {\n <span class=\"ax-text-xs ax-truncate\"\n [title]=\"(desc | axpResolveMultiLanguageString | translate | async) ?? ''\">\n {{ (desc | axpResolveMultiLanguageString | translate | async) ?? '' }}\n </span>\n }\n </div>\n</div>","import {\n AXPWidgetConfig,\n AXPWidgetNode,\n AXPWidgetProperty,\n AXPWidgetRegistryService,\n} from '@acorex/platform/layout/widget-core';\n\nimport {\n ChangeDetectionStrategy,\n Component,\n effect,\n EventEmitter,\n inject,\n input,\n Output,\n signal,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { capitalize, cloneDeep, isArray, isEmpty, isNil, merge, set, sortBy, unionBy } from 'lodash-es';\n\nimport {\n AXPPropertyViewerChangedEvent,\n AXPPropertyViewerTab,\n} from '../property-viewer/property-viewer.types';\nimport { AXPPropertyViewerComponent } from '../property-viewer/property-viewer.component';\n\nexport interface AXPWidgetPropertiesChangedEvent {\n values: any;\n mode: 'init' | 'update';\n}\n\n@Component({\n selector: 'axp-widget-property-viewer',\n templateUrl: './widget-property-viewer.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [AXPPropertyViewerComponent],\n})\nexport class AXPWidgetPropertyViewerComponent {\n //#region ---- Inputs ----\n\n widget = input.required<AXPWidgetNode>();\n mode = input<'simple' | 'advanced'>('simple');\n\n //#endregion\n\n //#region ---- Outputs ----\n\n @Output()\n onChanged = new EventEmitter<AXPWidgetPropertiesChangedEvent>();\n\n //#endregion\n\n //#region ---- View refs ----\n\n protected readonly propertyViewerRef = viewChild(AXPPropertyViewerComponent);\n\n //#endregion\n\n //#region ---- State ----\n\n protected readonly config = signal<AXPWidgetConfig | null>(null);\n protected readonly tabs = signal<AXPPropertyViewerTab[]>([]);\n protected initialContext: Record<string, unknown> = {};\n protected groupCollapsedStates = new Map<string, boolean>();\n\n /** When true, the next onChanged from the inner viewer was caused by our update(); do not forward to avoid loop. */\n private suppressNextEmit = false;\n\n //#endregion\n\n //#region ---- Dependencies ----\n\n private readonly widgetRegistryService = inject(AXPWidgetRegistryService);\n\n //#endregion\n\n constructor() {\n effect(() => {\n const w = this.widget();\n if (!w) return;\n const cfg = this.widgetRegistryService.resolve(w?.type);\n if (cfg) {\n this.initialContext = {};\n this.config.set(cfg);\n this.fillTabs();\n } else {\n console.error(`Invalid widget name: ${w}`);\n }\n });\n\n effect(() => {\n const viewer = this.propertyViewerRef();\n const w = this.widget();\n if (!viewer || w == null) return;\n viewer.initializeContext(merge(cloneDeep(this.initialContext), w));\n });\n }\n\n //#region ---- Public API ----\n\n /**\n * Merges the given values into the property viewer context. Called by the designer when applying changes (e.g. undo/redo).\n * The inner viewer will emit onChanged; we ignore that emission to avoid designer -> update -> emit -> designer loop.\n */\n public update(values: any): void {\n this.suppressNextEmit = true;\n try {\n this.propertyViewerRef()?.update(values);\n } finally {\n this.suppressNextEmit = false;\n }\n }\n\n //#endregion\n\n //#region ---- Internal ----\n\n private fillTabs(): void {\n const cfg = this.config();\n const tabDefs: AXPPropertyViewerTab[] = [\n { name: 'general', title: 'General', groups: [] },\n ];\n Object.entries(cfg?.components ?? {}).forEach(([key, c]) => {\n if (c?.component != null && c?.properties?.length) {\n tabDefs.push({ name: key, title: capitalize(key), groups: [] });\n }\n });\n\n tabDefs.forEach((tab) => {\n const props =\n tab.name === 'general'\n ? (cfg?.properties ?? [])\n : ((cfg?.components as Record<string, { properties?: AXPWidgetProperty[] }>)?.[tab.name]?.properties ?? []);\n const visibleProps = props.filter((p) => p.visible !== false);\n tab.groups = unionBy(\n sortBy(\n visibleProps.map((pg) => ({\n isCollapsed: !!this.groupCollapsedStates.get(pg.group.name),\n name: pg.group.name,\n title: pg.group.title,\n props: sortBy(\n visibleProps.filter((p) => p.group.name === pg.group.name),\n ['order', 'title'],\n ),\n })),\n ['order', 'title'],\n ),\n 'name',\n ).filter((g) => g.props.length);\n });\n\n this.tabs.set(tabDefs.filter((t) => t.groups.length));\n\n const allProps = tabDefs.flatMap((tab) =>\n tab.name === 'general'\n ? (cfg?.properties ?? [])\n : ((cfg?.components as Record<string, { properties?: AXPWidgetProperty[] }>)?.[tab.name]?.properties ?? []),\n );\n this.initialContext = allProps\n .filter(\n (c) =>\n (!isArray(c.schema.defaultValue) && !isNil(c.schema.defaultValue)) ||\n (isArray(c.schema.defaultValue) && !isEmpty(c.schema.defaultValue)),\n )\n .reduce<Record<string, unknown>>((acc, c) => {\n set(acc, c.schema.interface.path, c.schema.defaultValue);\n return acc;\n }, {});\n }\n\n protected handlePropertyViewerChanged(ev: AXPPropertyViewerChangedEvent): void {\n if (this.suppressNextEmit) return;\n this.onChanged.emit({ values: ev.values, mode: ev.mode });\n }\n\n //#endregion\n}\n","<axp-property-viewer\n [tabsInput]=\"tabs()\"\n [mode]=\"mode()\"\n (onChanged)=\"handlePropertyViewerChanged($event)\"\n></axp-property-viewer>\n","import { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXBasePageComponent } from '@acorex/components/page';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPWidgetNode } from '@acorex/platform/layout/widget-core';\nimport { ChangeDetectionStrategy, Component, input, signal } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { AXPWidgetPropertyViewerComponent } from './widget-property-viewer.component';\n\n@Component({\n selector: 'axp-widget-property-viewer-popup',\n template: `\n <div class=\"ax-flex ax-flex-col ax-h-full ax-overflow-hidden\">\n <axp-widget-property-viewer \n [widget]=\"widget()\" \n [mode]=\"mode()\"\n (onChanged)=\"handlePropertyChanged($event)\">\n </axp-widget-property-viewer>\n </div>\n\n <ax-footer>\n <ax-suffix>\n <ax-button \n look=\"solid\" \n [text]=\"'@general:actions.close.title' | translate | async\"\n (onClick)=\"handleCloseClick()\">\n </ax-button>\n <ax-button \n look=\"solid\" \n color=\"primary\" \n [text]=\"'@general:actions.apply.title' | translate | async\"\n (onClick)=\"handleApplyClick()\">\n </ax-button>\n </ax-suffix>\n </ax-footer>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n AXButtonModule,\n AXDecoratorModule,\n AXTranslationModule,\n AXPWidgetPropertyViewerComponent\n ],\n})\nexport class AXPWidgetPropertyViewerPopupComponent extends AXBasePageComponent {\n\n //#region ---- Inputs ----\n\n widget = input.required<AXPWidgetNode>();\n mode = input<'simple' | 'advanced'>('simple');\n\n //#endregion\n\n //#region ---- Properties ----\n\n protected currentValues = signal<any>({});\n\n //#endregion\n\n //#region ---- Event Handlers ----\n\n protected handlePropertyChanged(event: { values: any; mode: 'init' | 'update' }) {\n this.currentValues.set(event.values);\n }\n\n protected handleCloseClick() {\n this.close();\n }\n\n protected handleApplyClick() {\n this.close({\n values: this.currentValues(),\n mode: 'update'\n });\n }\n\n //#endregion\n}\n","import { Injectable, inject } from '@angular/core';\nimport {\n AXPWidgetConfig,\n AXPWidgetNode,\n AXPWidgetProperty,\n AXPWidgetRegistryService,\n} from '@acorex/platform/layout/widget-core';\nimport { cloneDeep, isArray, isEmpty, isNil, merge, set, sortBy, unionBy } from 'lodash-es';\n\nimport {\n AXPPropertyViewerActionRef,\n AXPPropertyViewerService,\n AXPPropertyViewerTab,\n} from '../property-viewer';\n\n//#region ---- Types ----\n\nexport interface AXPWidgetPropertyInjection {\n property: AXPWidgetProperty;\n tab?: {\n name?: string;\n title?: string;\n };\n group?: {\n name?: string;\n title?: string;\n };\n}\n\nexport interface AXPWidgetPropertyViewerConfig {\n title: string;\n widget: AXPWidgetNode;\n mode?: 'simple' | 'advanced';\n onApply?: (result: AXPWidgetPropertyViewerResult) => void | Promise<void>;\n /**\n * Property names to exclude from the viewer.\n */\n exclude?: string[];\n /**\n * Custom property injection configuration.\n */\n custom?: {\n /**\n * Custom property injection entries.\n */\n properties: AXPWidgetPropertyInjection[];\n /**\n * Default tab fallback if property injection doesn't specify one.\n * When omitted, falls back to the first tab or \"general\".\n */\n defaultTab?: {\n name?: string;\n title?: string;\n };\n /**\n * Default group fallback when injection doesn't specify a group.\n * When omitted, falls back to the tab's first group or property defined group.\n */\n defaultGroup?: {\n name?: string;\n title?: string;\n };\n };\n}\n\n/** Emitted when the dialog applies; `values` is the updated viewer context (merge into {@link AXPWidgetNode} as needed). */\nexport interface AXPWidgetPropertyViewerResult {\n values: any;\n mode: 'init' | 'update';\n}\n\nexport interface IAXPWidgetPropertyViewerRoot {\n dialog(\n delegate: (container: IAXPWidgetPropertyViewerDialogBuilder) => void,\n ): IAXPWidgetPropertyViewerDialogBuilder;\n}\n\nexport interface IAXPWidgetPropertyViewerDialogBuilder {\n setTitle(title: string): IAXPWidgetPropertyViewerDialogBuilder;\n /**\n * Initial widget state shown in the viewer (type, options, name/path, …). Call before {@link show}.\n */\n setWidget(widget: AXPWidgetNode): IAXPWidgetPropertyViewerDialogBuilder;\n setMode(mode: 'simple' | 'advanced'): IAXPWidgetPropertyViewerDialogBuilder;\n setExclude(exclude: string[]): IAXPWidgetPropertyViewerDialogBuilder;\n setCustom(custom: AXPWidgetPropertyViewerConfig['custom']): IAXPWidgetPropertyViewerDialogBuilder;\n /**\n * When set to a non-empty array, builds tabs from these properties and skips registry lookup for {@link setWidget}'s type.\n * Omit or clear to resolve widget config from {@link AXPWidgetRegistryService} as usual.\n */\n setPropertyDefinitions(properties: AXPWidgetProperty[] | null): IAXPWidgetPropertyViewerDialogBuilder;\n onAction(\n handler: (\n dialogRef: AXPPropertyViewerActionRef,\n ) => void | Promise<void> | unknown | Promise<unknown>,\n ): IAXPWidgetPropertyViewerDialogBuilder;\n /**\n * Applies edits and returns updated context; merge {@link AXPWidgetPropertyViewerResult.values} into your widget node\n * (typically `options` and any top-level fields the viewer exposes).\n */\n show(): Promise<AXPWidgetPropertyViewerResult | null>;\n}\n\n//#endregion\n\n//#region ---- Tab / context builders ----\n\nfunction buildWidgetPropertyViewerTabs(\n config: AXPWidgetConfig,\n custom: AXPWidgetPropertyViewerConfig['custom'] | undefined,\n exclude: string[],\n): AXPPropertyViewerTab[] {\n const isExcluded = (property: AXPWidgetProperty): boolean => {\n return exclude.includes(property.name);\n };\n\n const tabs: Array<{ name: string; title: string; properties: AXPWidgetProperty[] }> = [\n {\n name: 'general',\n title: 'General',\n properties: (config.properties ?? []).filter((prop) => !isExcluded(prop)),\n },\n ];\n\n Object.entries(config.components ?? {}).forEach(([name, component]) => {\n if (component?.component && component.properties?.length) {\n tabs.push({\n name,\n title: component.title ?? name,\n properties: (component.properties ?? []).filter((prop: AXPWidgetProperty) => !isExcluded(prop)),\n });\n }\n });\n\n if (custom?.properties?.length) {\n custom.properties.forEach((entry) => {\n if (isExcluded(entry.property)) {\n return;\n }\n\n const defaultTabName = custom.defaultTab?.name ?? tabs[0]?.name ?? 'general';\n const defaultTabTitle =\n custom.defaultTab?.title ?? tabs.find((tab) => tab.name === defaultTabName)?.title ?? 'Custom';\n\n const targetTabName = entry.tab?.name ?? defaultTabName;\n const targetTabTitle = entry.tab?.title ?? (targetTabName === defaultTabName ? defaultTabTitle : 'Custom');\n\n let targetTab = tabs.find((tab) => tab.name === targetTabName);\n if (!targetTab) {\n targetTab = {\n name: targetTabName,\n title: targetTabTitle,\n properties: [],\n };\n tabs.push(targetTab);\n }\n\n const baseGroup = targetTab.properties[0]?.group;\n const defaultGroupName = custom.defaultGroup?.name ?? baseGroup?.name ?? entry.property.group?.name ?? 'custom';\n const defaultGroupTitle =\n custom.defaultGroup?.title ?? baseGroup?.title ?? entry.property.group?.title ?? 'Custom';\n\n const groupName = entry.group?.name ?? defaultGroupName;\n const groupTitle = entry.group?.title ?? defaultGroupTitle;\n\n targetTab.properties.push({\n ...entry.property,\n group: {\n ...entry.property.group,\n name: groupName,\n title: groupTitle,\n order: entry.property.group?.order ?? baseGroup?.order ?? 0,\n },\n });\n });\n }\n\n return tabs\n .map<AXPPropertyViewerTab>((tab) => {\n const visibleProps = (tab.properties ?? []).filter((prop) => prop.visible !== false);\n return {\n name: tab.name,\n title: tab.title,\n groups: unionBy(\n sortBy(\n visibleProps.map((prop) => ({\n name: prop.group.name,\n title: prop.group.title,\n isCollapsed: false,\n props: sortBy(\n visibleProps.filter((p) => p.group.name === prop.group.name && prop.visible !== false),\n ['order', 'title'],\n ),\n })),\n ['order', 'title'],\n ),\n 'name',\n ).filter((group) => group.props.length),\n };\n })\n .filter((tab) => tab.groups.length);\n}\n\nfunction buildWidgetPropertyViewerInitialContext(\n config: AXPWidgetConfig,\n widget: AXPWidgetNode,\n custom: AXPWidgetPropertyViewerConfig['custom'] | undefined,\n exclude: string[],\n): any {\n const isExcluded = (property: AXPWidgetProperty): boolean => {\n return exclude.includes(property.name);\n };\n\n const allProperties: AXPWidgetProperty[] = [\n ...(config.properties ?? []).filter((prop) => !isExcluded(prop)),\n ...Object.values(config.components ?? {})\n .flatMap((component) => component?.properties ?? [])\n .filter((prop) => !isExcluded(prop)),\n ...(custom?.properties?.map((item) => item.property).filter((prop) => !isExcluded(prop)) ?? []),\n ];\n\n const defaults = allProperties\n .filter((prop) => {\n const defaultValue = prop.schema.defaultValue;\n if (isArray(defaultValue)) {\n return !isEmpty(defaultValue);\n }\n return !isNil(defaultValue);\n })\n .reduce((acc, prop) => {\n if (prop.schema?.interface?.path) {\n set(acc, prop.schema.interface.path, prop.schema.defaultValue);\n }\n return acc;\n }, {} as Record<string, unknown>);\n\n return merge(cloneDeep(defaults), cloneDeep(widget));\n}\n\n//#endregion\n\n//#region ---- Synthetic config (dynamic property definitions) ----\n\n/**\n * Minimal widget config for {@link buildWidgetPropertyViewerTabs} when properties are supplied at runtime.\n */\nfunction createSyntheticWidgetConfigFromProperties(properties: AXPWidgetProperty[]): AXPWidgetConfig {\n return {\n name: 'dynamic-property-definitions',\n title: 'Dynamic',\n type: 'editor',\n properties,\n components: {},\n } as AXPWidgetConfig;\n}\n\n//#endregion\n\n//#region ---- Dialog builder ----\n\nclass WidgetPropertyViewerDialogBuilder implements IAXPWidgetPropertyViewerDialogBuilder {\n private titleValue = '';\n private widgetValue!: AXPWidgetNode;\n private modeValue: 'simple' | 'advanced' = 'simple';\n private excludeValue: string[] = [];\n private customValue: AXPWidgetPropertyViewerConfig['custom'] | undefined;\n private propertyDefinitionsValue: AXPWidgetProperty[] | null = null;\n private onActionHandler?: (\n dialogRef: AXPPropertyViewerActionRef,\n ) => void | Promise<void> | unknown | Promise<unknown>;\n\n constructor(\n private readonly widgetRegistryService: AXPWidgetRegistryService,\n private readonly propertyViewerService: AXPPropertyViewerService,\n ) {}\n\n setTitle(title: string): IAXPWidgetPropertyViewerDialogBuilder {\n this.titleValue = title;\n return this;\n }\n\n setWidget(widget: AXPWidgetNode): IAXPWidgetPropertyViewerDialogBuilder {\n this.widgetValue = widget;\n return this;\n }\n\n setMode(mode: 'simple' | 'advanced'): IAXPWidgetPropertyViewerDialogBuilder {\n this.modeValue = mode;\n return this;\n }\n\n setExclude(exclude: string[]): IAXPWidgetPropertyViewerDialogBuilder {\n this.excludeValue = exclude;\n return this;\n }\n\n setCustom(custom: AXPWidgetPropertyViewerConfig['custom']): IAXPWidgetPropertyViewerDialogBuilder {\n this.customValue = custom;\n return this;\n }\n\n setPropertyDefinitions(properties: AXPWidgetProperty[] | null): IAXPWidgetPropertyViewerDialogBuilder {\n this.propertyDefinitionsValue = properties;\n return this;\n }\n\n onAction(\n handler: (\n dialogRef: AXPPropertyViewerActionRef,\n ) => void | Promise<void> | unknown | Promise<unknown>,\n ): IAXPWidgetPropertyViewerDialogBuilder {\n this.onActionHandler = handler;\n return this;\n }\n\n async show(): Promise<AXPWidgetPropertyViewerResult | null> {\n if (!this.widgetValue) {\n throw new Error('Widget property viewer dialog: call setWidget(...) before show().');\n }\n\n const overrideProps = this.propertyDefinitionsValue;\n let widgetConfig: AXPWidgetConfig | null = null;\n\n if (overrideProps && overrideProps.length > 0) {\n widgetConfig = createSyntheticWidgetConfigFromProperties(overrideProps);\n } else {\n widgetConfig = this.widgetRegistryService.resolve(this.widgetValue.type);\n if (!widgetConfig) {\n console.error(\n `AXPWidgetPropertyViewerService: Unable to resolve widget config for type \"${this.widgetValue?.type}\"`,\n );\n return null;\n }\n }\n\n const exclude = this.excludeValue ?? [];\n const tabs = buildWidgetPropertyViewerTabs(widgetConfig, this.customValue, exclude);\n const context = buildWidgetPropertyViewerInitialContext(\n widgetConfig,\n this.widgetValue,\n this.customValue,\n exclude,\n );\n\n return (await this.propertyViewerService\n .create()\n .dialog((d) => {\n d.setTitle(this.titleValue)\n .setMode(this.modeValue)\n .setTabs(tabs)\n .setContext(context);\n if (this.onActionHandler) {\n d.onAction(this.onActionHandler);\n }\n })\n .show()) as AXPWidgetPropertyViewerResult | null;\n }\n}\n\n//#endregion\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPWidgetPropertyViewerService {\n //#region ---- Services & Dependencies ----\n\n private readonly widgetRegistryService = inject(AXPWidgetRegistryService);\n private readonly propertyViewerService = inject(AXPPropertyViewerService);\n\n //#endregion\n\n //#region ---- Public Methods ----\n\n /**\n * Same shape as `AXPPropertyViewerService.create()` — use `.dialog((d) => { ... }).show()`.\n */\n create(): IAXPWidgetPropertyViewerRoot {\n const widgetRegistryService = this.widgetRegistryService;\n const propertyViewerService = this.propertyViewerService;\n return {\n dialog: (delegate: (container: IAXPWidgetPropertyViewerDialogBuilder) => void) => {\n const b = new WidgetPropertyViewerDialogBuilder(widgetRegistryService, propertyViewerService);\n delegate(b);\n return b;\n },\n };\n }\n\n /**\n * One-shot open (delegates to {@link #create} `.dialog().show()`).\n */\n async open(config: AXPWidgetPropertyViewerConfig): Promise<AXPWidgetPropertyViewerResult | null> {\n return this.create()\n .dialog((d) => {\n d.setTitle(config.title).setWidget(config.widget).setMode(config.mode ?? 'simple');\n if (config.exclude?.length) {\n d.setExclude(config.exclude);\n }\n if (config.custom) {\n d.setCustom(config.custom);\n }\n if (config.onApply) {\n d.onAction(async (ref) => {\n await config.onApply!({ values: ref.context(), mode: 'update' });\n });\n }\n })\n .show();\n }\n\n //#endregion\n}\n","//#region ---- Imports ----\n\nimport { AXRange } from '@acorex/cdk/common';\nimport { AXPActionMenuItem, AXPExecuteCommand, AXPExecuteCommandResult } from '@acorex/platform/core';\nimport { InjectionToken } from '@angular/core';\n\n//#endregion\n\n//#region ---- Resource Appointment Item ----\n\n/**\n * Minimal appointment data for resource appointment board.\n * Providers return this; the component converts to scheduler/task shape as needed.\n */\nexport interface AXPResourceAppointmentItem {\n readonly id: string | number;\n title: string;\n startDate: Date;\n endDate: Date;\n resourceId?: string | number;\n description?: string;\n allDay?: boolean;\n}\n\n//#endregion\n\n//#region ---- Resource Appointment Status ----\n\n/**\n * Represents a status option for the resource appointment board (e.g. column or filter).\n * Aligned with task board status shape for provider compatibility.\n */\nexport interface AXPResourceAppointmentStatus {\n key: string;\n index: number;\n title: string;\n color?: string;\n}\n\n//#endregion\n\n//#region ---- Reservation Board Action ----\n\n/**\n * Action menu item for resource appointment board with optional priority.\n * Primary actions are shown as icon-only buttons, secondary in a dropdown.\n */\nexport type AXPResourceAppointmentActionMenuItem = AXPActionMenuItem & {\n priority?: 'primary' | 'secondary';\n};\n\n//#endregion\n\n//#region ---- Reservation Resource ----\n\nexport interface AXPResourceAppointmentResource {\n readonly id: string | number;\n title: string;\n description?: string;\n icon?: string;\n appointments: AXPResourceAppointmentItem[];\n}\n\n//#endregion\n\n//#region ---- Reservation Board Filter ----\n\nexport interface AXPResourceAppointmentBoardFilter {\n range?: AXRange<Date>;\n statuses?: (string | number)[];\n resourceIds?: (string | number)[];\n /** When set, only these providers are queried. */\n providerNames?: string[];\n}\n\n//#endregion\n\n//#region ---- Reservation Board Provider ----\n\nexport abstract class AXPResourceAppointmentBoardProvider<T = Record<string, unknown>> {\n abstract get name(): string;\n abstract get title(): string;\n abstract get icon(): string;\n abstract getList(filter?: AXPResourceAppointmentBoardFilter): Promise<AXPResourceAppointmentResource[]>;\n abstract getStatuses(): Promise<AXPResourceAppointmentStatus[]>;\n abstract getActions(context?: AXPResourceAppointmentItem): Promise<AXPResourceAppointmentActionMenuItem[]>;\n abstract executeCommand(command: AXPExecuteCommand): Promise<AXPExecuteCommandResult>;\n}\n\n//#endregion\n\n//#region ---- Injection Token ----\n\nexport const AXP_RESOURCE_APPOINTMENT_PROVIDER = new InjectionToken<\n AXPResourceAppointmentBoardProvider[] | Promise<AXPResourceAppointmentBoardProvider>[]\n>('AXP_RESOURCE_APPOINTMENT_PROVIDER');\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXRange } from '@acorex/cdk/common';\nimport { AXCalendarService } from '@acorex/core/date-time';\nimport { AXPExecuteCommand, AXPExecuteCommandResult } from '@acorex/platform/core';\nimport { inject, Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport {\n AXP_RESOURCE_APPOINTMENT_PROVIDER,\n AXPResourceAppointmentActionMenuItem,\n AXPResourceAppointmentBoardFilter,\n AXPResourceAppointmentBoardProvider,\n AXPResourceAppointmentItem,\n AXPResourceAppointmentResource,\n AXPResourceAppointmentStatus,\n} from './resource-appointment.types';\n\n//#endregion\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPResourceAppointmentService {\n //#region ---- Services & Dependencies ----\n\n private readonly calendarService = inject(AXCalendarService);\n private readonly providers = inject(AXP_RESOURCE_APPOINTMENT_PROVIDER, { optional: true });\n\n //#endregion\n\n //#region ---- State ----\n\n private resolvedProviders: AXPResourceAppointmentBoardProvider[] | null = null;\n refresh$ = new Subject<void>();\n\n //#endregion\n\n //#region ---- Provider Resolution ----\n\n /**\n * Resolves providers from injected AXP_RESOURCE_APPOINTMENT_PROVIDER.\n * The service must be provided in an injector that has access to the token (e.g. component providers).\n */\n async resolveProviders(): Promise<AXPResourceAppointmentBoardProvider[]> {\n if (this.resolvedProviders !== null) {\n return this.resolvedProviders;\n }\n\n const raw = this.providers ?? [];\n const resolved = await Promise.all(raw.map((p) => Promise.resolve(p)));\n const flattened = resolved.flatMap((entry) => (Array.isArray(entry) ? entry : [entry]));\n\n this.resolvedProviders = flattened.filter(\n (p): p is AXPResourceAppointmentBoardProvider =>\n p != null && typeof (p as AXPResourceAppointmentBoardProvider).getList === 'function',\n );\n\n return this.resolvedProviders;\n }\n\n //#endregion\n\n //#region ---- Provider Access ----\n\n async getProviderTypes(): Promise<AXPResourceAppointmentBoardProvider[]> {\n return this.resolveProviders();\n }\n\n getProvider(name: string | undefined): AXPResourceAppointmentBoardProvider | null {\n if (!name) return null;\n return this.resolvedProviders?.find((p) => p.name === name) ?? null;\n }\n\n //#endregion\n\n //#region ---- Data Fetching ----\n\n async getList(filter?: AXPResourceAppointmentBoardFilter): Promise<AXPResourceAppointmentResource[]> {\n const allProviders = await this.resolveProviders();\n\n const providers =\n filter?.providerNames?.length && filter.providerNames.length > 0\n ? allProviders.filter((p) => filter.providerNames!.includes(p.name))\n : allProviders;\n\n if (providers.length === 0) {\n return [];\n }\n\n const promises = providers.map((provider) =>\n provider.getList(filter).then((resources) =>\n resources.map((r) => ({\n ...r,\n appointments: r.appointments.map((a) => ({ ...a, provider: provider.name })),\n })),\n ),\n );\n\n const results = await Promise.all(promises);\n return results.flat();\n }\n\n async getStatuses(providerName: string): Promise<AXPResourceAppointmentStatus[]> {\n const provider = await this.findProvider(providerName);\n return provider.getStatuses();\n }\n\n async getActions(\n context: AXPResourceAppointmentItem | undefined,\n providerName: string,\n ): Promise<AXPResourceAppointmentActionMenuItem[]> {\n const provider = await this.findProvider(providerName);\n return provider.getActions(context);\n }\n\n async executeCommand(command: AXPExecuteCommand, providerName: string): Promise<AXPExecuteCommandResult> {\n const provider = await this.findProvider(providerName);\n return provider.executeCommand(command);\n }\n\n //#endregion\n\n //#region ---- Date Utilities ----\n\n rangeCalculator(type: string): AXRange<Date> | undefined {\n switch (type) {\n case 'today':\n return {\n from: this.calendarService.create(new Date()).startOf('day').date,\n end: this.calendarService.create(new Date()).endOf('day').date,\n };\n case 'this-week':\n return {\n from: this.calendarService.create(new Date()).startOf('week').date,\n end: this.calendarService.create(new Date()).endOf('week').date,\n };\n case 'this-month':\n return {\n from: this.calendarService.create(new Date()).startOf('month').date,\n end: this.calendarService.create(new Date()).endOf('month').date,\n };\n default:\n return undefined;\n }\n }\n\n //#endregion\n\n //#region ---- Utility Methods ----\n\n private async findProvider(providerName: string): Promise<AXPResourceAppointmentBoardProvider> {\n const providers = await this.resolveProviders();\n const provider = providers.find((p) => p.name === providerName) ?? null;\n if (!provider) {\n throw new Error(`Reservation board provider '${providerName}' not found`);\n }\n return provider;\n }\n\n //#endregion\n}\n","//#region ---- Imports ----\n\nimport { AXCommonModule, AXStyleColorType } from '@acorex/cdk/common';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport {\n AXContextMenuComponent,\n AXContextMenuItemsClickEvent,\n AXContextMenuOpeningEvent,\n AXMenuModule,\n} from '@acorex/components/menu';\nimport {\n AXSchedulerAppointment,\n AXSchedulerComponent,\n AXSchedulerDateRange,\n AXSchedulerResource,\n AXSchedulerView,\n} from '@acorex/components/scheduler';\nimport { AXFormatService } from '@acorex/core/format';\n\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n input,\n OnInit,\n signal,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { AXPResourceAppointmentService } from './resource-appointment.service';\nimport {\n AXPResourceAppointmentBoardFilter,\n AXPResourceAppointmentItem,\n AXPResourceAppointmentResource,\n} from './resource-appointment.types';\n\n//#endregion\n\n/** Scheduler appointment with optional provider tag for context menu routing. */\ntype AppointmentWithProvider = AXSchedulerAppointment & { provider?: string };\n\n@Component({\n selector: 'axp-resource-appointment',\n templateUrl: './resource-appointment.component.html',\n styleUrls: ['./resource-appointment.component.scss'],\n imports: [AXCommonModule, AXMenuModule, AXLoadingModule, AXSchedulerComponent, AXButtonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [AXPResourceAppointmentService],\n})\nexport class AXPResourceAppointmentComponent implements OnInit {\n //#region ---- Inputs ----\n\n /** Show resource headers in the timeline views. */\n showResourceHeaders = input<boolean>(true);\n\n /** Show appointments that have no resourceId. */\n showUnassignedAppointments = input<boolean>(true);\n\n /** Optional provider name to filter the board (e.g. from route param). */\n providerName = input<string | undefined>(undefined);\n\n //#endregion\n\n //#region ---- Services & Dependencies ----\n\n private readonly resourceAppointmentService = inject(AXPResourceAppointmentService);\n private readonly formatService = inject(AXFormatService);\n\n //#endregion\n\n //#region ---- Component References ----\n\n private readonly contextMenu = viewChild<AXContextMenuComponent>('contextMenu');\n protected readonly schedulerRef = viewChild<AXSchedulerComponent>('scheduler');\n\n //#endregion\n\n //#region ---- State ----\n\n protected readonly isReady = signal(false);\n protected readonly currentDate = signal<Date>(new Date());\n protected readonly currentView = signal<AXSchedulerView>('timeline-month');\n private readonly currentAppointment = signal<AppointmentWithProvider | null>(null);\n\n /** Raw resources returned by providers. */\n private readonly rawResources = signal<AXPResourceAppointmentResource[]>([]);\n\n //#endregion\n\n //#region ---- Computed Properties ----\n\n /** Scheduler resources derived from provider data. */\n protected readonly schedulerResources = computed<AXSchedulerResource[]>(() =>\n this.rawResources().map((r) => ({\n id: r.id,\n title: r.title,\n })),\n );\n\n /** Flat list of scheduler appointments derived from provider data. */\n protected readonly schedulerAppointments = computed<AppointmentWithProvider[]>(() =>\n this.rawResources().flatMap((resource) =>\n resource.appointments.map((a: AXPResourceAppointmentItem & { provider?: string }) => ({\n id: a.id,\n title: a.title,\n startDate: a.startDate,\n endDate: a.endDate,\n allDay: a.allDay,\n description: a.description,\n resourceId: a.resourceId ?? resource.id,\n provider: a.provider,\n })),\n ),\n );\n\n /** Formatted date range text for the toolbar. */\n protected readonly timeText = computed(() => {\n const scheduler = this.schedulerRef();\n return scheduler?.currentDateText() ?? this.formatCurrentDateRange();\n });\n\n //#endregion\n\n //#region ---- Lifecycle ----\n\n constructor() {\n effect(() => {\n this.providerName();\n if (this.isReady()) {\n this.loadData();\n }\n });\n }\n\n async ngOnInit(): Promise<void> {\n await this.resolveProvidersAndReady();\n }\n\n //#endregion\n\n //#region ---- Provider Resolution ----\n\n private async resolveProvidersAndReady(): Promise<void> {\n await this.resourceAppointmentService.resolveProviders();\n // this.resourceAppointmentService.refresh$.subscribe(() => this.loadData());\n\n await this.loadData();\n this.isReady.set(true);\n }\n\n //#endregion\n\n //#region ---- Data Loading ----\n\n /** Fetches resource + appointment data from providers and updates signals. */\n private async loadData(range?: AXSchedulerDateRange): Promise<void> {\n const providerName = this.providerName();\n const filter: AXPResourceAppointmentBoardFilter = {\n ...(range && { range: { from: range.from, end: range.end } }),\n ...(providerName && { providerNames: [providerName] }),\n };\n\n const resourceList = await this.resourceAppointmentService.getList(filter);\n this.rawResources.set(resourceList);\n }\n\n //#endregion\n\n //#region ---- Event Handlers ----\n\n /** Re-load data when the scheduler view range changes and sync toolbar date. */\n protected handleRangeChanged(range: AXSchedulerDateRange): void {\n //TODO FIX LATER\n // this.currentDate.set(range.from);\n // this.loadData(range);\n }\n\n /** Navigate to previous/next period based on current view. */\n protected changeDate(forward: boolean): void {\n const date = new Date(this.currentDate().getTime());\n const view = this.currentView();\n\n switch (view) {\n case 'timeline-day':\n date.setDate(date.getDate() + (forward ? 1 : -1));\n break;\n case 'timeline-weekly':\n date.setDate(date.getDate() + (forward ? 7 : -7));\n break;\n case 'timeline-month':\n date.setMonth(date.getMonth() + (forward ? 1 : -1));\n break;\n default:\n date.setDate(date.getDate() + (forward ? 1 : -1));\n }\n\n this.currentDate.set(date);\n }\n\n /** Fallback formatted date range when scheduler ref is not yet available. */\n private formatCurrentDateRange(): string {\n const d = this.currentDate();\n return d ? this.formatService.format(d, 'datetime', { format: 'long' }) : '';\n }\n\n protected handleAppointmentClick(event: { appointment: AXSchedulerAppointment; nativeEvent: MouseEvent }): void {\n const appointment = event.appointment as AppointmentWithProvider;\n if (!appointment) return;\n\n this.currentAppointment.set(appointment);\n\n const { clientX: x, clientY: y, target } = event.nativeEvent;\n this.contextMenu()?.showAt({ x, y }, target as HTMLElement);\n }\n\n protected async handleContextMenuOpening(event: AXContextMenuOpeningEvent): Promise<void> {\n const appointment = this.currentAppointment();\n if (!appointment) return;\n\n const providerName = appointment.provider;\n if (!providerName) return;\n\n const item: AXPResourceAppointmentItem = {\n id: appointment.id,\n title: appointment.title ?? '',\n startDate: appointment.startDate,\n endDate: appointment.endDate,\n resourceId: appointment.resourceId,\n description: appointment.description,\n allDay: appointment.allDay,\n };\n const actions = await this.resourceAppointmentService.getActions(item, providerName);\n for (const actionItem of actions) {\n event.items.push({\n text: actionItem.title,\n icon: actionItem.icon,\n color: actionItem.color as AXStyleColorType,\n break: actionItem.break,\n data: { command: actionItem.command },\n });\n }\n }\n\n protected handleContextMenuItemClick(event: AXContextMenuItemsClickEvent): void {\n const providerName = this.currentAppointment()?.provider ?? '';\n this.resourceAppointmentService.executeCommand(event.item.data?.command, providerName);\n }\n\n //#endregion\n}\n","<div class=\"axp-resource-appointment__container ax-flex ax-flex-col ax-min-h-0 ax-h-full\">\n @if (isReady()) {\n <!-- TODO: Add weekly view 'timeline-weekly' -->\n <ax-scheduler\n #scheduler\n [views]=\"['timeline-day', 'timeline-month']\"\n [dataSource]=\"schedulerAppointments()\"\n [resources]=\"schedulerResources()\"\n [startingDate]=\"currentDate()\"\n [selectedView]=\"currentView()\"\n [draggable]=\"false\"\n (onRangeChanged)=\"handleRangeChanged($event)\"\n class=\"axp-resource-appointment__scheduler ax-bg-lightest dark:ax-bg-darkest ax-flex-1\"\n ></ax-scheduler>\n\n <ax-context-menu\n #contextMenu\n [closeOn]=\"'leave'\"\n [orientation]=\"'vertical'\"\n (onOpening)=\"handleContextMenuOpening($event)\"\n (onItemClick)=\"handleContextMenuItemClick($event)\"\n ></ax-context-menu>\n } @else {\n <div class=\"axp-resource-appointment__loading ax-flex ax-items-center ax-justify-center ax-w-full ax-h-full\">\n <ax-loading></ax-loading>\n </div>\n }\n</div>\n","//#region ---- Core value model (Sections / Items) ----\n\n/**\n * Host-owned item row. Required keys are stable; additional keys are persisted by the host mapper.\n */\nexport interface AXPBuilderItem {\n id: string;\n order: number;\n [key: string]: unknown;\n}\n\n/**\n * Host-owned section. Items live under `items` (not nested host-specific names).\n */\nexport interface AXPBuilderSection {\n id: string;\n order: number;\n items: AXPBuilderItem[];\n [key: string]: unknown;\n}\n\nexport interface AXPBuilderValue {\n sections: AXPBuilderSection[];\n}\n\n//#endregion\n\n//#region ---- Presentation + definition ----\n\nexport type AXPBuilderBadgeVariant = 'neutral' | 'accent' | 'warning' | 'danger' | 'success';\n\nexport interface AXPBuilderBadge {\n /** Translation key (e.g. `@general:...`) or plain text. */\n text: string;\n variant?: AXPBuilderBadgeVariant;\n}\n\nexport type AXPBuilderItemIconTone = 'default' | 'easy' | 'medium' | 'hard';\n\n/**\n * View model for one item row (icons, labels, badges). Built by {@link AXPBuilderDefinition.mapItemToView}.\n */\nexport interface AXPBuilderItemViewModel {\n icon: string;\n iconTone?: AXPBuilderItemIconTone;\n title: string;\n name?: string;\n description?: string;\n badges: AXPBuilderBadge[];\n}\n\nexport interface AXPBuilderTexts {\n addSection: string;\n addItem: string;\n emptySectionsTitle: string;\n emptySectionsDescription: string;\n emptyItemsTitle: string;\n emptyItemsDescription: string;\n /** Shown when {@link AXPBuilderDefinition.isDefaultSection} is true */\n defaultSectionBadge?: string;\n}\n\n/**\n * Declarative configuration for {@link AXPSectionItemsBuilderComponent}.\n * Prompts return domain slices; the builder assigns `id` / `order` / `items` where needed.\n */\nexport interface AXPBuilderDefinition {\n texts: AXPBuilderTexts;\n mapItemToView: (item: AXPBuilderItem, section: AXPBuilderSection) => AXPBuilderItemViewModel;\n /** When true, renders section technical `name` next to the title (parentheses). */\n showSectionTechnicalName?: boolean;\n isDefaultSection?(section: AXPBuilderSection): boolean;\n /** Minimum number of sections (default 1). */\n minSectionCount?: number;\n\n promptAddSection?(value: AXPBuilderValue): Promise<Record<string, unknown> | null>;\n promptEditSection?(\n section: AXPBuilderSection,\n value: AXPBuilderValue,\n ): Promise<Record<string, unknown> | null>;\n promptAddItems?(sectionId: string, value: AXPBuilderValue): Promise<AXPBuilderItem[] | null>;\n promptEditItem?(\n item: AXPBuilderItem,\n sectionId: string,\n value: AXPBuilderValue,\n ): Promise<AXPBuilderItem | null>;\n\n confirmRemoveSection?(section: AXPBuilderSection): Promise<boolean>;\n confirmRemoveItem?(item: AXPBuilderItem, sectionId: string): Promise<boolean>;\n}\n\n//#endregion\n","import { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPStateMessageComponent } from '../state-message/state-message.component';\nimport { CdkDrag, CdkDragDrop, CdkDragHandle, CdkDropList, moveItemInArray, transferArrayItem } from '@angular/cdk/drag-drop';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n computed,\n effect,\n input,\n output,\n signal,\n untracked,\n} from '@angular/core';\nimport { cloneDeep } from 'lodash-es';\nimport {\n AXPBuilderDefinition,\n AXPBuilderItem,\n AXPBuilderSection,\n AXPBuilderValue,\n} from './section-items-builder.types';\nimport { AXSafePipe } from '@acorex/core/pipes';\nimport {\n AXPDataGenerator,\n containsHtmlMarkup,\n extractTextFromHtml,\n type AXPMultiLanguageString,\n AXPResolveMultiLanguageStringPipe,\n} from '@acorex/platform/core';\n\n@Component({\n selector: 'axp-section-items-builder',\n standalone: true,\n templateUrl: './section-items-builder.component.html',\n styleUrl: './section-items-builder.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'axp-section-items-builder-host',\n },\n imports: [\n CommonModule,\n AXButtonModule,\n AXDecoratorModule,\n AXTranslationModule,\n AXPStateMessageComponent,\n CdkDropList,\n CdkDrag,\n CdkDragHandle,\n AXPResolveMultiLanguageStringPipe,\n AXSafePipe,\n ],\n})\nexport class AXPSectionItemsBuilderComponent {\n /** Used in template to branch between escaped text and sanitized HTML. */\n protected readonly containsHtmlMarkup = containsHtmlMarkup;\n\n readonly value = input.required<AXPBuilderValue>();\n readonly definition = input.required<AXPBuilderDefinition>();\n readonly readonlyMode = input(false, { alias: 'readonly' });\n\n readonly valueChange = output<AXPBuilderValue>();\n\n private readonly vm = signal<AXPBuilderValue>({ sections: [] });\n\n protected readonly sectionsModel = computed(() => this.normalizeValue(this.vm()));\n\n protected readonly sectionRows = computed(() => {\n const def = this.definition();\n return this.sectionsModel().sections.map((section) => ({\n section,\n itemRows: [...section.items]\n .sort((a, b) => a.order - b.order)\n .map((item) => ({\n item,\n view: def.mapItemToView(item, section),\n })),\n }));\n });\n\n protected readonly itemDropListIds = computed(() =>\n this.sectionsModel().sections.map((s) => this.sectionItemsListId(s.id)),\n );\n\n protected readonly canRemoveSection = computed(() => {\n const min = this.definition().minSectionCount ?? 1;\n return this.sectionsModel().sections.length > min;\n });\n\n constructor() {\n effect(() => {\n const next = cloneDeep(this.value());\n untracked(() => this.vm.set(this.normalizeValue(next)));\n });\n }\n\n /**\n * Opens add-section flow (same as primary \"Add section\" control). For page commands / ViewChild.\n */\n async addSection(): Promise<void> {\n await this.onAddSectionClick();\n }\n\n protected async onAddSectionClick(): Promise<void> {\n if (this.readonlyMode()) return;\n const def = this.definition();\n if (!def.promptAddSection) return;\n const partial = await def.promptAddSection(this.sectionsModel());\n if (!partial) return;\n const sections = [...this.sectionsModel().sections];\n const p = partial as Record<string, unknown>;\n const fromPartial =\n (typeof p['name'] === 'string' && p['name'].trim()) ||\n (typeof p['id'] === 'string' && p['id'].trim()) ||\n '';\n const id = fromPartial || AXPDataGenerator.uuid();\n const section: AXPBuilderSection = {\n ...partial,\n id,\n order: sections.length,\n items: [],\n } as AXPBuilderSection;\n sections.push(section);\n this.commit({ sections: this.reindexSections(sections) });\n }\n\n protected async onEditSection(section: AXPBuilderSection): Promise<void> {\n if (this.readonlyMode()) return;\n const def = this.definition();\n if (!def.promptEditSection) return;\n const partial = await def.promptEditSection(section, this.sectionsModel());\n if (!partial) return;\n const sections = this.sectionsModel().sections.map((s) => {\n if (s.id !== section.id) return s;\n const merged = { ...s, ...partial } as AXPBuilderSection;\n return { ...merged, items: s.items };\n });\n this.commit({ sections: this.reindexSections(sections) });\n }\n\n protected async onRemoveSection(section: AXPBuilderSection): Promise<void> {\n if (this.readonlyMode()) return;\n const min = this.definition().minSectionCount ?? 1;\n if (this.sectionsModel().sections.length <= min) return;\n const def = this.definition();\n if (def.confirmRemoveSection) {\n const ok = await def.confirmRemoveSection(section);\n if (!ok) return;\n }\n const remaining = this.sectionsModel().sections.filter((s) => s.id !== section.id);\n this.commit({ sections: this.reindexSections(remaining) });\n }\n\n protected async onAddItems(section: AXPBuilderSection): Promise<void> {\n if (this.readonlyMode()) return;\n const def = this.definition();\n if (!def.promptAddItems) return;\n const created = await def.promptAddItems(section.id, this.sectionsModel());\n if (!created?.length) return;\n const sections = this.sectionsModel().sections.map((s) => {\n if (s.id !== section.id) return s;\n const nextItems = [...s.items];\n const baseOrder = nextItems.length;\n created.forEach((item, i) => {\n nextItems.push({\n ...item,\n order: item.order ?? baseOrder + i,\n });\n });\n return { ...s, items: this.reindexItems(nextItems) };\n });\n this.commit({ sections });\n }\n\n protected async onEditItem(item: AXPBuilderItem, sectionId: string): Promise<void> {\n if (this.readonlyMode()) return;\n const def = this.definition();\n if (!def.promptEditItem) return;\n const updated = await def.promptEditItem(item, sectionId, this.sectionsModel());\n if (!updated) return;\n const sections = this.sectionsModel().sections.map((s) => {\n if (s.id !== sectionId) return s;\n return {\n ...s,\n items: s.items.map((it) => {\n if (it.id !== item.id) return it;\n const merged = { ...it, ...updated } as AXPBuilderItem;\n const nextId = updated.id !== undefined && String(updated.id).length > 0 ? String(updated.id) : it.id;\n return { ...merged, id: nextId };\n }),\n };\n });\n this.commit({ sections });\n }\n\n protected async onRemoveItem(item: AXPBuilderItem, sectionId: string): Promise<void> {\n if (this.readonlyMode()) return;\n const def = this.definition();\n if (def.confirmRemoveItem) {\n const ok = await def.confirmRemoveItem(item, sectionId);\n if (!ok) return;\n }\n const sections = this.sectionsModel().sections.map((s) => {\n if (s.id !== sectionId) return s;\n return { ...s, items: this.reindexItems(s.items.filter((it) => it.id !== item.id)) };\n });\n this.commit({ sections });\n }\n\n protected onSectionDrop(event: CdkDragDrop<AXPBuilderSection[]>): void {\n if (this.readonlyMode()) return;\n const list = [...this.sectionsModel().sections];\n moveItemInArray(list, event.previousIndex, event.currentIndex);\n this.commit({ sections: this.reindexSections(list) });\n }\n\n protected onItemDrop(event: CdkDragDrop<AXPBuilderItem[]>, targetSectionId: string): void {\n if (this.readonlyMode()) return;\n const sourceListId = event.previousContainer.id;\n const sourceSectionId = this.parseSectionIdFromDropListId(sourceListId);\n if (!sourceSectionId) return;\n const sections = [...this.sectionsModel().sections];\n const sourceIdx = sections.findIndex((s) => s.id === sourceSectionId);\n const targetIdx = sections.findIndex((s) => s.id === targetSectionId);\n if (sourceIdx < 0 || targetIdx < 0) return;\n const source = sections[sourceIdx];\n const target = sections[targetIdx];\n if (event.previousContainer === event.container) {\n const items = [...source.items];\n moveItemInArray(items, event.previousIndex, event.currentIndex);\n sections[sourceIdx] = { ...source, items: this.reindexItems(items) };\n this.commit({ sections });\n return;\n }\n const sourceItems = [...source.items];\n const targetItems = [...target.items];\n transferArrayItem(sourceItems, targetItems, event.previousIndex, event.currentIndex);\n sections[sourceIdx] = { ...source, items: this.reindexItems(sourceItems) };\n sections[targetIdx] = { ...target, items: this.reindexItems(targetItems) };\n this.commit({ sections });\n }\n\n protected sectionItemsListId(sectionId: string): string {\n return `section-${sectionId}-items`;\n }\n\n protected parseSectionIdFromDropListId(listId: string): string | null {\n const prefix = 'section-';\n const suffix = '-items';\n if (!listId.startsWith(prefix) || !listId.endsWith(suffix)) return null;\n return listId.slice(prefix.length, -suffix.length);\n }\n\n protected isDefaultSection(section: AXPBuilderSection): boolean {\n return this.definition().isDefaultSection?.(section) === true;\n }\n\n protected isTranslationKey(text: string): boolean {\n return typeof text === 'string' && text.startsWith('@');\n }\n\n /** Tooltip for rich HTML rows: plain text, no tags. */\n protected tooltipPlainTextForHtml(html: string): string {\n return extractTextFromHtml(html.trim());\n }\n\n /**\n * Prefer raw section fields for display so {@link AXPMultiLanguageString} maps are not\n * lost when {@link AXPBuilderDefinition#mapItemToView} stringifies them on items.\n */\n protected sectionTitleValue(section: AXPBuilderSection): AXPMultiLanguageString | string {\n const t = section['title'];\n if (t != null && typeof t === 'object' && !Array.isArray(t)) {\n return t as AXPMultiLanguageString;\n }\n if (typeof t === 'string' && t.trim()) return t;\n const n = section['name'];\n if (n != null && typeof n === 'object' && !Array.isArray(n)) {\n return n as AXPMultiLanguageString;\n }\n return typeof n === 'string' ? n : '';\n }\n\n protected sectionNameValue(section: AXPBuilderSection): AXPMultiLanguageString | string | undefined {\n const n = section['name'];\n if (n != null && typeof n === 'object' && !Array.isArray(n)) {\n return n as AXPMultiLanguageString;\n }\n return typeof n === 'string' ? n : undefined;\n }\n\n protected sectionDescriptionValue(section: AXPBuilderSection): AXPMultiLanguageString | string | undefined {\n const d = section['description'];\n if (d != null && typeof d === 'object' && !Array.isArray(d)) {\n return d as AXPMultiLanguageString;\n }\n return typeof d === 'string' ? d : undefined;\n }\n\n /**\n * Resolves item title/name/description for display: use raw item values when present\n * (including ML maps); fall back to {@link AXPBuilderItemViewModel} only when needed.\n */\n protected itemMultilingualField(\n item: AXPBuilderItem,\n field: 'title' | 'name' | 'description',\n viewFallback?: string | null,\n ): AXPMultiLanguageString | string {\n const raw = item[field];\n if (raw != null && typeof raw === 'object' && !Array.isArray(raw)) {\n return raw as AXPMultiLanguageString;\n }\n if (typeof raw === 'string') {\n return raw;\n }\n if (typeof raw === 'number' || typeof raw === 'boolean') {\n return String(raw);\n }\n if (viewFallback != null && viewFallback !== '' && viewFallback !== '[object Object]') {\n return viewFallback;\n }\n return '';\n }\n\n private commit(next: AXPBuilderValue): void {\n const normalized = this.normalizeValue(next);\n this.vm.set(normalized);\n this.valueChange.emit(normalized);\n }\n\n private normalizeValue(v: AXPBuilderValue): AXPBuilderValue {\n const sections = (v.sections ?? []).map((s) => ({\n ...s,\n items: [...(s.items ?? [])],\n }));\n return { sections: this.reindexSections(sections) };\n }\n\n private reindexSections(sections: AXPBuilderSection[]): AXPBuilderSection[] {\n return sections.map((s, i) => ({\n ...s,\n order: i,\n items: this.reindexItems(s.items),\n }));\n }\n\n private reindexItems(items: AXPBuilderItem[]): AXPBuilderItem[] {\n return items.map((it, i) => ({ ...it, order: i }));\n }\n\n}\n","<div class=\"axp-section-items-builder\" *translate=\"let t\">\n <div class=\"__content\">\n @if (sectionsModel().sections.length === 0) {\n <axp-state-message icon=\"fa-light fa-layer-group\" [title]=\"definition().texts.emptySectionsTitle\"\n [description]=\"definition().texts.emptySectionsDescription\">\n </axp-state-message>\n } @else {\n <div class=\"__sections-container\" cdkDropList [cdkDropListData]=\"sectionsModel().sections\"\n (cdkDropListDropped)=\"onSectionDrop($event)\">\n @for (row of sectionRows(); track row.section.id) {\n <div class=\"__section\" cdkDrag cdkDragPreviewClass=\"axp-section-items-builder-drag-preview\">\n <div class=\"__section-header\">\n @if (!readonlyMode()) {\n <div class=\"__section-drag-handle\" cdkDragHandle>\n <ax-icon icon=\"fa-solid fa-grip-vertical\"></ax-icon>\n </div>\n }\n <div class=\"__section-info\">\n @let secTitle = sectionTitleValue(row.section) | axpResolveMultiLanguageString;\n <h3 class=\"__section-title\" [title]=\"secTitle\">\n {{ secTitle }}\n @if (definition().showSectionTechnicalName) {\n @let secTechName = sectionNameValue(row.section) | axpResolveMultiLanguageString;\n @if (secTechName.trim()) {\n <span class=\"__section-name-prefix\">({{ secTechName }})</span>\n }\n }\n @if (isDefaultSection(row.section)) {\n @if (definition().texts.defaultSectionBadge; as defaultBadge) {\n <span class=\"__default-section-badge\">{{ defaultBadge | translate | async }}</span>\n }\n }\n </h3>\n @let secDesc = sectionDescriptionValue(row.section) | axpResolveMultiLanguageString;\n @let secDescTrimmed = secDesc.trim();\n @if (secDescTrimmed) {\n @if (containsHtmlMarkup(secDescTrimmed)) {\n <div\n class=\"__section-description __section-description--rich\"\n [title]=\"tooltipPlainTextForHtml(secDesc)\"\n [innerHTML]=\"secDesc | safe: 'html'\"\n ></div>\n } @else {\n <p class=\"__section-description\" [title]=\"secDescTrimmed\">{{ secDescTrimmed }}</p>\n }\n }\n </div>\n @if (!readonlyMode()) {\n <div class=\"__section-actions\">\n @if (definition().promptAddItems) {\n <ax-button class=\"ax-sm\" [text]=\"definition().texts.addItem | translate | async\" [color]=\"'accent2'\"\n (onClick)=\"onAddItems(row.section)\">\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-plus\"></ax-icon>\n </ax-prefix>\n </ax-button>\n }\n @if (definition().promptEditSection || canRemoveSection()) {\n <div class=\"__section-inline-actions\">\n @if (definition().promptEditSection) {\n <ax-button class=\"ax-sm\" [look]=\"'blank'\" color=\"accent3\" (onClick)=\"onEditSection(row.section)\">\n <ax-icon class=\"fa-light fa-pencil\"></ax-icon>\n </ax-button>\n }\n @if (canRemoveSection()) {\n <ax-button class=\"ax-sm\" [look]=\"'blank'\" color=\"danger\" (onClick)=\"onRemoveSection(row.section)\">\n <ax-icon class=\"fa-light fa-trash-can\"></ax-icon>\n </ax-button>\n }\n </div>\n }\n </div>\n }\n </div>\n\n <div class=\"__items-container\">\n <div class=\"__items-list\" cdkDropList [id]=\"sectionItemsListId(row.section.id)\"\n [cdkDropListData]=\"row.section.items\" [cdkDropListConnectedTo]=\"itemDropListIds()\"\n (cdkDropListDropped)=\"onItemDrop($event, row.section.id)\">\n @if (row.itemRows.length === 0) {\n <axp-state-message icon=\"fa-light fa-inbox\" [title]=\"definition().texts.emptyItemsTitle\"\n [description]=\"definition().texts.emptyItemsDescription\">\n </axp-state-message>\n } @else {\n @for (ir of row.itemRows; track ir.item.id) {\n <div class=\"__item\" cdkDrag cdkDragPreviewClass=\"axp-section-items-builder-drag-preview\">\n @if (!readonlyMode()) {\n <div class=\"__drag-handle\" cdkDragHandle>\n <ax-icon icon=\"fa-solid fa-grip-vertical\"></ax-icon>\n </div>\n }\n <div class=\"__item-content\">\n <div class=\"__item-leading\"\n [title]=\"itemMultilingualField(ir.item, 'title', ir.view.title) | axpResolveMultiLanguageString\">\n <div class=\"__item-icon\" [class.__tone-easy]=\"ir.view.iconTone === 'easy'\"\n [class.__tone-medium]=\"ir.view.iconTone === 'medium'\" [class.__tone-hard]=\"ir.view.iconTone === 'hard'\">\n <ax-icon [icon]=\"ir.view.icon\"></ax-icon>\n </div>\n </div>\n <div class=\"__item-info\">\n <div class=\"__item-info-body\">\n <div class=\"__title-row\">\n @let itemTitle = itemMultilingualField(ir.item, 'title', ir.view.title) | axpResolveMultiLanguageString;\n @let itemName = itemMultilingualField(ir.item, 'name', ir.view.name) | axpResolveMultiLanguageString;\n <h4 class=\"__item-title\" [title]=\"itemTitle + (itemName.trim() ? ' (' + itemName + ')' : '')\">\n {{ itemTitle }}\n @if (itemName.trim()) {\n <span class=\"__item-name-prefix\">({{ itemName }})</span>\n }\n </h4>\n </div>\n @let itemDesc = itemMultilingualField(ir.item, 'description', ir.view.description) | axpResolveMultiLanguageString;\n @let itemDescTrimmed = itemDesc.trim();\n @if (itemDescTrimmed) {\n @if (containsHtmlMarkup(itemDescTrimmed)) {\n <div\n class=\"__item-description __item-description--rich\"\n [title]=\"tooltipPlainTextForHtml(itemDesc)\"\n [innerHTML]=\"itemDesc | safe: 'html'\"\n ></div>\n } @else {\n <p class=\"__item-description\" [title]=\"itemDescTrimmed\">{{ itemDescTrimmed }}</p>\n }\n }\n </div>\n <div class=\"__title-actions\">\n @for (b of ir.view.badges; track $index) {\n <span class=\"__item-badge\" [class.__badge-neutral]=\"!b.variant || b.variant === 'neutral'\"\n [class.__badge-accent]=\"b.variant === 'accent'\" [class.__badge-warning]=\"b.variant === 'warning'\"\n [class.__badge-danger]=\"b.variant === 'danger'\" [class.__badge-success]=\"b.variant === 'success'\">\n @if (isTranslationKey(b.text)) {\n {{ b.text | translate | async }}\n } @else {\n {{ b.text }}\n }\n </span>\n }\n @if (!readonlyMode()) {\n <div class=\"__item-actions\">\n @if (definition().promptEditItem) {\n <ax-button class=\"ax-sm\" [look]=\"'blank'\" color=\"accent3\"\n (onClick)=\"onEditItem(ir.item, row.section.id)\">\n <ax-icon class=\"fa-light fa-pencil\"></ax-icon>\n </ax-button>\n }\n <ax-button [look]=\"'blank'\" class=\"ax-sm\" color=\"danger\"\n (onClick)=\"onRemoveItem(ir.item, row.section.id)\">\n <ax-icon class=\"fa-light fa-trash-can\"></ax-icon>\n </ax-button>\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n }\n }\n </div>\n </div>\n </div>\n }\n </div>\n }\n </div>\n</div>\n","import type { AXPPropertyViewerTab } from '../property-viewer';\nimport {\n AXPWidgetsCatalog,\n createBooleanProperty,\n type AXPWidgetProperty,\n type AXPWidgetPropertyGroup,\n} from '@acorex/platform/layout/widget-core';\n\nconst GROUP_IDENTITY: AXPWidgetPropertyGroup = {\n name: 'identity',\n title: 'Identity',\n order: 0,\n};\n\nconst GROUP_CONTENT: AXPWidgetPropertyGroup = {\n name: 'content',\n title: 'Content',\n order: 1,\n};\n\nconst GROUP_VISIBILITY: AXPWidgetPropertyGroup = {\n name: 'visibility',\n title: 'Visibility',\n order: 2,\n};\n\nconst IDENTITY_PROPS: AXPWidgetProperty[] = [\n {\n name: 'name',\n title: '@general:terms.common.name',\n group: GROUP_IDENTITY,\n order: 10,\n schema: {\n dataType: 'string',\n defaultValue: '',\n interface: {\n name: 'name',\n path: 'name',\n type: AXPWidgetsCatalog.text,\n options: {\n placeholder: 'section-name',\n },\n },\n },\n validations: [{ rule: 'required' }, { rule: 'variable-name' }],\n visible: true,\n },\n {\n name: 'tags',\n title: '@general:terms.common.tags',\n group: GROUP_IDENTITY,\n order: 20,\n schema: {\n dataType: 'array',\n defaultValue: [],\n interface: {\n name: 'tags',\n path: 'tags',\n type: 'tag-editor',\n options: {\n placeholder: 'Add tags',\n allowDuplicate: false,\n },\n },\n },\n visible: true,\n },\n];\n\nconst CONTENT_PROPS: AXPWidgetProperty[] = [\n {\n name: 'title',\n title: '@general:terms.common.title',\n group: GROUP_CONTENT,\n order: 10,\n schema: {\n dataType: 'string',\n defaultValue: '',\n interface: {\n name: 'title',\n path: 'title',\n type: AXPWidgetsCatalog.text,\n options: {\n placeholder: 'Enter section title',\n },\n },\n },\n validations: [{ rule: 'required' }],\n visible: true,\n },\n {\n name: 'description',\n title: '@general:terms.common.description',\n group: GROUP_CONTENT,\n order: 20,\n schema: {\n dataType: 'string',\n defaultValue: '',\n interface: {\n name: 'description',\n path: 'description',\n type: AXPWidgetsCatalog.largeText,\n options: {\n rows: 3,\n placeholder: 'Enter section description (optional)',\n },\n },\n },\n visible: true,\n },\n];\n\nconst VISIBILITY_PROPS: AXPWidgetProperty[] = [\n {\n ...createBooleanProperty({\n name: 'isVisible',\n path: 'isVisible',\n title: 'Visible',\n group: GROUP_VISIBILITY,\n defaultValue: true,\n }),\n order: 10,\n },\n];\n\n/**\n * Default section editor: Identity (name, tags), Content (title, description), Visibility.\n */\nexport const STANDARD_SECTION_ITEMS_SECTION_TABS: AXPPropertyViewerTab[] = [\n {\n name: 'general',\n title: '@general:terms.common.information',\n groups: [\n {\n name: GROUP_IDENTITY.name,\n title: GROUP_IDENTITY.title,\n isCollapsed: false,\n props: IDENTITY_PROPS,\n },\n {\n name: GROUP_CONTENT.name,\n title: GROUP_CONTENT.title,\n isCollapsed: false,\n props: CONTENT_PROPS,\n },\n {\n name: GROUP_VISIBILITY.name,\n title: GROUP_VISIBILITY.title,\n isCollapsed: false,\n props: VISIBILITY_PROPS,\n },\n ],\n },\n];\n","import { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\n\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n output,\n viewChild,\n} from '@angular/core';\nimport { AXDialogService } from '@acorex/components/dialog';\nimport {\n AXPPropertyViewerService,\n type AXPPropertyViewerActionRef,\n type AXPPropertyViewerResult,\n type AXPPropertyViewerTab,\n type IAXPPropertyViewerDialogBuilder,\n} from '../property-viewer';\nimport {\n type AXPBuilderDefinition,\n type AXPBuilderItem,\n type AXPBuilderSection,\n type AXPBuilderTexts,\n type AXPBuilderValue,\n AXPSectionItemsBuilderComponent,\n} from '../section-items-builder';\nimport type { AXPMultiLanguageString } from '@acorex/platform/core';\nimport type { AXPStandardSectionFormContext, AXPStandardSectionItemsBuilderConfig } from './standard-section-items-builder.types';\nimport { STANDARD_SECTION_ITEMS_SECTION_TABS } from './standard-section-edit.property-tabs';\n\nconst DEFAULT_TEXTS: AXPBuilderTexts = {\n addSection: '@data-management:metadata-definitions.actions.add-group.title',\n addItem: '@general:actions.add-item.title',\n emptySectionsTitle:\n '@data-management:metadata-definitions.components.meta-data-selector.empty-states.no-groups.title',\n emptySectionsDescription:\n '@data-management:metadata-definitions.components.meta-data-selector.empty-states.no-groups.description',\n emptyItemsTitle:\n '@data-management:metadata-definitions.components.meta-data-selector.empty-states.empty-group.title',\n emptyItemsDescription:\n '@data-management:metadata-definitions.components.meta-data-selector.empty-states.empty-group.description',\n defaultSectionBadge:\n '@data-management:metadata-definitions.components.meta-data-selector.default-section-badge',\n};\n\n@Component({\n selector: 'axp-standard-section-items-builder',\n standalone: true,\n imports: [AXTranslationModule, AXDecoratorModule, AXPSectionItemsBuilderComponent],\n templateUrl: './standard-section-items-builder.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXPStandardSectionItemsBuilderComponent {\n readonly value = input.required<AXPBuilderValue>();\n readonly config = input.required<AXPStandardSectionItemsBuilderConfig>();\n readonly readonlyMode = input(false, { alias: 'readonly' });\n\n readonly valueChange = output<AXPBuilderValue>();\n\n private readonly inner = viewChild(AXPSectionItemsBuilderComponent);\n private readonly dialogService = inject(AXDialogService);\n private readonly translationService = inject(AXTranslationService);\n private readonly propertyViewerService = inject(AXPPropertyViewerService);\n\n protected readonly mergedDefinition = computed<AXPBuilderDefinition>(() => {\n const c = this.config();\n const tabs = c.sectionEditTabs ?? STANDARD_SECTION_ITEMS_SECTION_TABS;\n return {\n texts: { ...DEFAULT_TEXTS, ...c.texts },\n mapItemToView: c.mapItemToView,\n showSectionTechnicalName: c.showSectionTechnicalName ?? true,\n isDefaultSection: c.isDefaultSection,\n minSectionCount: c.minSectionCount ?? 1,\n promptAddSection:\n c.promptAddSection ?? ((v) => this.openSectionDialog(v, 'add', undefined, tabs)),\n promptEditSection:\n c.promptEditSection ?? ((section, v) => this.openSectionDialog(v, 'edit', section, tabs)),\n promptAddItems: c.promptAddItems,\n promptEditItem: c.promptEditItem,\n confirmRemoveSection: c.confirmRemoveSection ?? ((s) => this.defaultConfirmRemoveSection(s)),\n confirmRemoveItem: c.confirmRemoveItem ?? ((item, sid) => this.defaultConfirmRemoveItem(item, sid)),\n };\n });\n\n /** Same entry as page commands / toolbar: open standardized add-section dialog. */\n async addSection(): Promise<void> {\n await this.inner()?.addSection();\n }\n\n private isDuplicateSectionName(value: AXPBuilderValue, key: string, excludeSectionId?: string): boolean {\n const n = key.trim().toLowerCase();\n if (!n) return false;\n return value.sections.some((s) => {\n if (excludeSectionId != null && s.id === excludeSectionId) return false;\n const sk = String(s['name'] ?? '').trim().toLowerCase();\n return sk === n;\n });\n }\n\n /**\n * `AXPBuilderSection` uses `[key: string]: unknown`; cast to form-bound type without resolving ML.\n */\n private sectionFieldForForm(value: unknown): string | AXPMultiLanguageString {\n if (value === undefined || value === null) return '';\n return value as string | AXPMultiLanguageString;\n }\n\n private buildSectionContext(section: AXPBuilderSection | undefined): AXPStandardSectionFormContext {\n if (!section) {\n return {\n name: `section-${Date.now()}`,\n tags: [],\n title: '',\n description: '',\n isVisible: true,\n };\n }\n const rawName = section['name'];\n const fromName = typeof rawName === 'string' ? rawName.trim() : '';\n const fromId = typeof section['id'] === 'string' ? section['id'].trim() : '';\n return {\n name: fromName || fromId,\n tags: (section['tags'] as unknown) ?? [],\n title: this.sectionFieldForForm(section['title']),\n description: this.sectionFieldForForm(section['description']),\n isVisible: section['isVisible'] !== false,\n };\n }\n\n private async openSectionDialog(\n value: AXPBuilderValue,\n mode: 'add' | 'edit',\n section: AXPBuilderSection | undefined,\n tabs: AXPPropertyViewerTab[],\n ): Promise<Record<string, unknown> | null> {\n const addTitle =\n (await this.translationService.translateAsync('@general:actions.create.title')) || 'Add section';\n const editTitle = (await this.translationService.translateAsync('@general:actions.edit.title')) || 'Edit section';\n const dupTitle =\n (await this.translationService.translateAsync(\n '@data-management:metadata-definitions.components.meta-data-selector.dialogs.group-name-duplicate.title',\n )) || 'Duplicate key';\n const dupMessage =\n (await this.translationService.translateAsync(\n '@data-management:metadata-definitions.components.meta-data-selector.dialogs.group-name-duplicate.message',\n )) || 'Another section already uses this key.';\n\n const initial = this.buildSectionContext(section);\n const excludeId = mode === 'edit' ? section?.id : undefined;\n\n const result = await this.propertyViewerService\n .create()\n .dialog((d: IAXPPropertyViewerDialogBuilder) => {\n d.setTitle(mode === 'add' ? addTitle : editTitle)\n .setSize('md')\n .setCloseButton(true)\n .setMode('advanced')\n .setTabs(tabs)\n .setContext({\n name: initial.name ?? '',\n tags: initial.tags ?? [],\n title: initial.title ?? '',\n description: initial.description ?? '',\n isVisible: initial.isVisible !== false,\n })\n .onAction(async (ref: AXPPropertyViewerActionRef) => {\n const ctx = ref.context() as AXPStandardSectionFormContext;\n const key = (ctx.name ?? '').trim();\n if (!key) {\n throw new Error('StandardSectionValidation');\n }\n if (this.isDuplicateSectionName(value, key, excludeId)) {\n await this.dialogService.alert(dupTitle, dupMessage, 'danger');\n throw new Error('StandardSectionDuplicateKey');\n }\n });\n })\n .show();\n\n if (!result) return null;\n const ctx = (result as AXPPropertyViewerResult).values as AXPStandardSectionFormContext;\n const key = (ctx.name ?? '').trim();\n if (!key) return null;\n\n return {\n id: key,\n name: key,\n title: ctx.title ?? '',\n description: ctx.description ?? '',\n tags: ctx.tags ?? [],\n isVisible: ctx.isVisible !== false,\n };\n }\n\n private async defaultConfirmRemoveSection(_section: AXPBuilderSection): Promise<boolean> {\n const res = await this.dialogService.confirm(\n (await this.translationService.translateAsync('@data-management:metadata-definitions.actions.delete-group.title')) ||\n 'Delete section',\n (await this.translationService.translateAsync(\n '@data-management:metadata-definitions.components.meta-data-selector.dialogs.delete-group.message',\n )) || 'Remove this section and its items?',\n 'danger',\n 'horizontal',\n false,\n );\n return typeof res === 'boolean' ? res : res.result;\n }\n\n private async defaultConfirmRemoveItem(_item: AXPBuilderItem, _sectionId: string): Promise<boolean> {\n const res = await this.dialogService.confirm(\n (await this.translationService.translateAsync('@general:actions.delete.title')) || 'Delete',\n (await this.translationService.translateAsync('@general:workflow.confirm-delete')) ||\n 'Remove this item?',\n 'danger',\n 'horizontal',\n false,\n );\n return typeof res === 'boolean' ? res : res.result;\n }\n}\n","<axp-section-items-builder\n #inner\n [value]=\"value()\"\n [definition]=\"mergedDefinition()\"\n [readonly]=\"readonlyMode()\"\n (valueChange)=\"valueChange.emit($event)\"\n/>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i2","i1","i3","i4","i5","i7","i8","i6","moveItemInArray","rxFilter","i9","i10","I18N"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"acorex-platform-layout-components.mjs","sources":["../../../../libs/platform/layout/components/src/lib/state-message/state-message.component.ts","../../../../libs/platform/layout/components/src/lib/state-message/state-message.component.html","../../../../libs/platform/layout/components/src/lib/activity-log/activity-log.component.ts","../../../../libs/platform/layout/components/src/lib/activity-log/activity-log.component.html","../../../../libs/platform/layout/components/src/lib/badge/task-badge.type.ts","../../../../libs/platform/layout/components/src/lib/badge/task-badge.service.ts","../../../../libs/platform/layout/components/src/lib/badge/badge.directive.ts","../../../../libs/platform/layout/components/src/lib/badge/badge-helper.ts","../../../../libs/platform/layout/components/src/lib/blocks/layout-actions.component.ts","../../../../libs/platform/layout/components/src/lib/blocks/layout-blocks.component.ts","../../../../libs/platform/layout/components/src/lib/blocks/layout-footer.component.ts","../../../../libs/platform/layout/components/src/lib/blocks/layout-header.component.ts","../../../../libs/platform/layout/components/src/lib/blocks/layout-list.component.ts","../../../../libs/platform/layout/components/src/lib/blocks/layout-section.component.ts","../../../../libs/platform/layout/components/src/lib/blocks/layout-side.component.ts","../../../../libs/platform/layout/components/src/lib/blocks/layout-tool-bar.component.ts","../../../../libs/platform/layout/components/src/lib/blocks/layout-container.component.ts","../../../../libs/platform/layout/components/src/lib/category-tree/category-tree.component.ts","../../../../libs/platform/layout/components/src/lib/category-tree/category-tree.component.html","../../../../libs/platform/layout/components/src/lib/category-tree/category-tree.types.ts","../../../../libs/platform/layout/components/src/lib/color-palette-picker/color-palette-picker.component.ts","../../../../libs/platform/layout/components/src/lib/color-palette-picker/color-palette-picker.component.html","../../../../libs/platform/layout/components/src/lib/column-item-list/column-item-list.ts","../../../../libs/platform/layout/components/src/lib/columns/query-columns.component.ts","../../../../libs/platform/layout/components/src/lib/columns/query-columns.component.html","../../../../libs/platform/layout/components/src/lib/compare-view/compare-view.component.ts","../../../../libs/platform/layout/components/src/lib/compare-view/compare-view.component.html","../../../../libs/platform/layout/components/src/lib/data-selector/data-selector.component.ts","../../../../libs/platform/layout/components/src/lib/data-selector/data-selector.component.html","../../../../libs/platform/layout/components/src/lib/data-selector/data-selector.service.ts","../../../../libs/platform/layout/components/src/lib/page-component-registry/page-component-registry.token.ts","../../../../libs/platform/layout/components/src/lib/page-component-registry/page-component-registry.service.ts","../../../../libs/platform/layout/components/src/lib/page-component-registry/page-component-registry.types.ts","../../../../libs/platform/layout/components/src/lib/drag-drop-list/drag-drop-list.component.ts","../../../../libs/platform/layout/components/src/lib/drag-drop-list/drag-drop-list.component.html","../../../../libs/platform/layout/components/src/lib/expression-builders/expression-builder.types.ts","../../../../libs/platform/layout/components/src/lib/expression-builders/field.definitions.ts","../../../../libs/platform/layout/components/src/lib/expression-builders/logic.definitions.ts","../../../../libs/platform/layout/components/src/lib/expression-builders/operation.definitions.ts","../../../../libs/platform/layout/components/src/lib/expression-builders/condition-builder/condition-builder-condition.component.ts","../../../../libs/platform/layout/components/src/lib/expression-builders/condition-builder/condition-builder-condition.component.html","../../../../libs/platform/layout/components/src/lib/expression-builders/condition-builder/condition-builder.component.ts","../../../../libs/platform/layout/components/src/lib/expression-builders/condition-builder/condition-builder.component.html","../../../../libs/platform/layout/components/src/lib/expression-builders/index.ts","../../../../libs/platform/layout/components/src/lib/filters/query-filters.component.ts","../../../../libs/platform/layout/components/src/lib/filters/query-filters.component.html","../../../../libs/platform/layout/components/src/lib/filters/preload/preload-filters.component.ts","../../../../libs/platform/layout/components/src/lib/filters/preload/preload-filters.component.html","../../../../libs/platform/layout/components/src/lib/image-editor/image-editor-popup.component.ts","../../../../libs/platform/layout/components/src/lib/image-editor/image-editor.service.ts","../../../../libs/platform/layout/components/src/lib/logo/logo.component.ts","../../../../libs/platform/layout/components/src/lib/logo/logo.component.html","../../../../libs/platform/layout/components/src/lib/menu-customizer/menu-customizer.types.ts","../../../../libs/platform/layout/components/src/lib/menu-customizer/menu-customizer.component.ts","../../../../libs/platform/layout/components/src/lib/menu-customizer/menu-customizer.component.html","../../../../libs/platform/layout/components/src/lib/property-viewer/property-viewer-tab-pipeline.ts","../../../../libs/platform/layout/components/src/lib/property-viewer/property-viewer-binding.util.ts","../../../../libs/platform/layout/components/src/lib/property-viewer/property-viewer.component.ts","../../../../libs/platform/layout/components/src/lib/property-viewer/property-viewer.component.html","../../../../libs/platform/layout/components/src/lib/property-viewer/property-viewer-popup.component.ts","../../../../libs/platform/layout/components/src/lib/property-viewer/property-viewer.service.ts","../../../../libs/platform/layout/components/src/lib/repeater-rows-layout/repeater-rows-layout.component.ts","../../../../libs/platform/layout/components/src/lib/repeater-rows-layout/repeater-rows-layout.component.html","../../../../libs/platform/layout/components/src/lib/sorts/query-sorts.component.ts","../../../../libs/platform/layout/components/src/lib/sorts/query-sorts.component.html","../../../../libs/platform/layout/components/src/lib/spreadsheet/spreadsheet.component.ts","../../../../libs/platform/layout/components/src/lib/spreadsheet/spreadsheet.component.html","../../../../libs/platform/layout/components/src/lib/spreadsheet/spreadsheet.types.ts","../../../../libs/platform/layout/components/src/lib/stopwatch/stopwatch.component.ts","../../../../libs/platform/layout/components/src/lib/table-columns-editor/table-columns-editor-layout.ts","../../../../libs/platform/layout/components/src/lib/table-columns-editor/table-columns-editor.component.ts","../../../../libs/platform/layout/components/src/lib/table-columns-editor/table-columns-editor-popup.component.ts","../../../../libs/platform/layout/components/src/lib/table-columns-editor/table-columns-editor.service.ts","../../../../libs/platform/layout/components/src/lib/table-data-editor/table-data-editor.component.ts","../../../../libs/platform/layout/components/src/lib/table-data-editor/table-data-editor-popup.component.ts","../../../../libs/platform/layout/components/src/lib/table-data-editor/table-data-editor.service.ts","../../../../libs/platform/layout/components/src/lib/template-viewer/template-viewer.component.ts","../../../../libs/platform/layout/components/src/lib/template-viewer/template-viewer.service.ts","../../../../libs/platform/layout/components/src/lib/avatar/avatar.component.ts","../../../../libs/platform/layout/components/src/lib/avatar/avatar.component.html","../../../../libs/platform/layout/components/src/lib/user-avatar/user-avatar.provider.ts","../../../../libs/platform/layout/components/src/lib/user-avatar/user-avatar.service.ts","../../../../libs/platform/layout/components/src/lib/user-avatar/user-avatar.component.ts","../../../../libs/platform/layout/components/src/lib/user-avatar/user-avatar.component.html","../../../../libs/platform/layout/components/src/lib/views/query-views.component.ts","../../../../libs/platform/layout/components/src/lib/views/query-views.component.html","../../../../libs/platform/layout/components/src/lib/item-configurator/item-configurator.component.ts","../../../../libs/platform/layout/components/src/lib/item-configurator/item-configurator.component.html","../../../../libs/platform/layout/components/src/lib/widget-field-configurator/widget-field-configurator.component.ts","../../../../libs/platform/layout/components/src/lib/widget-item/widget-item.component.ts","../../../../libs/platform/layout/components/src/lib/widget-item/widget-item.component.html","../../../../libs/platform/layout/components/src/lib/widget-property-viewer/widget-property-viewer.component.ts","../../../../libs/platform/layout/components/src/lib/widget-property-viewer/widget-property-viewer.component.html","../../../../libs/platform/layout/components/src/lib/widget-property-viewer/widget-property-viewer-popup.component.ts","../../../../libs/platform/layout/components/src/lib/widget-property-viewer/widget-property-viewer.service.ts","../../../../libs/platform/layout/components/src/lib/resource-appointment/resource-appointment.types.ts","../../../../libs/platform/layout/components/src/lib/resource-appointment/resource-appointment.service.ts","../../../../libs/platform/layout/components/src/lib/resource-appointment/resource-appointment.component.ts","../../../../libs/platform/layout/components/src/lib/resource-appointment/resource-appointment.component.html","../../../../libs/platform/layout/components/src/lib/section-items-builder/section-items-builder.types.ts","../../../../libs/platform/layout/components/src/lib/section-items-builder/section-items-builder.component.ts","../../../../libs/platform/layout/components/src/lib/section-items-builder/section-items-builder.component.html","../../../../libs/platform/layout/components/src/lib/standard-section-items-builder/standard-section-edit.property-tabs.ts","../../../../libs/platform/layout/components/src/lib/standard-section-items-builder/standard-section-items-builder.component.ts","../../../../libs/platform/layout/components/src/lib/standard-section-items-builder/standard-section-items-builder.component.html","../../../../libs/platform/layout/components/src/acorex-platform-layout-components.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, input, ViewEncapsulation } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { AXTranslationModule } from '@acorex/core/translation';\n\n//#region ---- Types ----\n\nexport type StateMode = 'empty' | 'error' | 'loading' | 'warning' | 'info' | 'success';\n\n//#endregion\n\n//#region ---- Component Definition ----\n\n@Component({\n selector: 'axp-state-message',\n standalone: true,\n imports: [CommonModule, AXTranslationModule],\n templateUrl: './state-message.component.html',\n styleUrls: ['./state-message.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\n\n//#endregion\n\n//#region ---- Component Class ----\n\nexport class AXPStateMessageComponent {\n // Core properties\n mode = input<StateMode>('empty');\n icon = input<string>('');\n title = input<string>('');\n description = input<string>('');\n\n // Optional styling\n variant = input<'default' | 'compact' | 'minimal'>('default');\n}\n\n//#endregion\n","<div class=\"axp-state-message\" [attr.data-mode]=\"mode()\" [attr.data-variant]=\"variant()\">\n @if (icon()) {\n <div class=\"__icon\">\n <i [class]=\"icon()\"></i>\n </div>\n }\n <div class=\"__content\">\n @if (title()) {\n <h3 class=\"__title\">{{ title() | translate | async }}</h3>\n }\n @if (description()) {\n <p class=\"__description\">{{ description() | translate | async }}</p>\n }\n <div class=\"__actions\">\n <ng-content select=\"[slot=actions]\"></ng-content>\n </div>\n </div>\n</div>\n","import { AXButtonModule } from '@acorex/components/button';\nimport { AXCommonModule } from '@acorex/cdk/common';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\nimport { AXSkeletonModule } from '@acorex/components/skeleton';\nimport { AXFormatModule } from '@acorex/core/format';\nimport { AXPActivityLog, AXPSystemActionType, getSystemActions } from '@acorex/platform/core';\nimport { AXPWorkflowService } from '@acorex/platform/workflow';\nimport { AXPLayoutRendererComponent } from '@acorex/platform/layout/builder';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, input, inject, ViewEncapsulation, signal, effect } from '@angular/core';\nimport { AXAccordionCdkModule } from '@acorex/cdk/accordion';\nimport { AXTagModule } from '@acorex/components/tag';\nimport { AXPStateMessageComponent } from '../state-message';\n\n//#region ---- Component Definition ----\n\n@Component({\n selector: 'axp-activity-log',\n templateUrl: './activity-log.component.html',\n styleUrls: ['./activity-log.component.scss'],\n standalone: true,\n imports: [\n CommonModule,\n AXButtonModule,\n AXCommonModule,\n AXDecoratorModule,\n AXTranslationModule,\n AXSkeletonModule,\n AXFormatModule,\n AXTagModule,\n AXAccordionCdkModule,\n AXPStateMessageComponent,\n AXPLayoutRendererComponent,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None\n})\nexport class AXPActivityLogComponent {\n\n //#endregion\n\n //#region ---- Services & Dependencies ----\n\n private readonly translateService = inject(AXTranslationService);\n private readonly workflowService = inject(AXPWorkflowService);\n\n //#endregion\n\n //#region ---- Input Properties ----\n\n /**\n * Array of activity logs to display\n */\n activities = input<AXPActivityLog[]>([]);\n\n /**\n * Whether the component is in loading state\n */\n loading = input<boolean>(false);\n\n //#endregion\n\n //#region ---- Component Properties ----\n\n protected readonly i18nScope = 'activity-log';\n protected readonly Object = Object;\n\n /**\n * Set of expanded activity IDs\n */\n private expandedItems = signal<Set<string>>(new Set());\n\n /**\n * Flag to track if component has been initialized\n */\n private isInitialized = signal<boolean>(false);\n\n /**\n * Set of items that have been manually toggled (for animation control)\n */\n private manuallyToggledItems = signal<Set<string>>(new Set());\n\n //#endregion\n\n //#region ---- Constructor & Lifecycle ----\n\n constructor() {\n // Auto-expand top 5 items when activities change\n effect(() => {\n const activities = this.activities();\n const currentExpanded = this.expandedItems();\n const initialized = this.isInitialized();\n\n // Only auto-expand if not initialized and activities exist\n if (!initialized && activities.length > 0 && currentExpanded.size === 0) {\n const top5Ids = activities.slice(0, 5).map((activity: AXPActivityLog) => activity.id);\n this.expandedItems.set(new Set(top5Ids));\n this.isInitialized.set(true);\n }\n });\n }\n\n //#endregion\n\n //#region ---- Utility Methods ----\n\n /**\n * Gets the appropriate CSS class for the change type\n */\n protected getChangeClasses(changeType: AXPSystemActionType): { surface: string, text: string, icon: string } {\n const action = getSystemActions(changeType);\n return {\n surface: action?.color ? `ax-${action.color}-surface` : 'ax-muted-surface',\n text: action?.color ? `ax-text-${action.color}` : 'ax-text-muted',\n icon: action?.icon ? `${action.icon}` : 'fa-light fa-pen'\n };\n }\n\n /**\n * Checks if an activity item is expanded\n */\n protected isExpanded(activityId: string): boolean {\n return this.expandedItems().has(activityId);\n }\n\n /**\n * Toggles the expanded state of an activity item\n */\n protected toggleExpanded(activityId: string): void {\n const currentExpanded = new Set(this.expandedItems());\n const currentManuallyToggled = new Set(this.manuallyToggledItems());\n\n // Mark this item as manually toggled for animation purposes\n currentManuallyToggled.add(activityId);\n this.manuallyToggledItems.set(currentManuallyToggled);\n\n if (currentExpanded.has(activityId)) {\n currentExpanded.delete(activityId);\n } else {\n currentExpanded.add(activityId);\n }\n\n this.expandedItems.set(currentExpanded);\n }\n\n /**\n * Checks if an item should have expand/collapse animation\n */\n protected shouldAnimate(activityId: string): boolean {\n return this.manuallyToggledItems().has(activityId);\n }\n\n /**\n * Checks if an activity has expandable content (changes)\n */\n protected hasExpandableContent(activity: AXPActivityLog): boolean {\n return activity.changes && activity.changes.length > 0;\n }\n\n //#endregion\n\n //#region ---- Compare Methods ----\n\n /**\n * Handles the compare action for an activity\n */\n protected async handleCompare(activity: AXPActivityLog, event: Event): Promise<void> {\n event.stopPropagation(); // Prevent expanding/collapsing when clicking compare\n\n // Get the previous activity for comparison\n const currentIndex = this.activities().findIndex(a => a.id === activity.id);\n if (currentIndex <= 0) return; // No previous activity to compare with\n\n const previousActivity = this.activities()[currentIndex - 1];\n const ids = [\n previousActivity.id,\n activity.id\n ];\n\n // Execute the compare workflow\n await this.workflowService.execute('show-entity-record-versions-compare', {\n entity: activity.reference.type,\n data: {\n refId: activity.reference.id,\n refType: activity.reference.type,\n ids: ids\n }\n });\n }\n\n /**\n * Checks if an activity can be compared (has a previous version)\n */\n protected canCompare(activity: AXPActivityLog): boolean {\n const currentIndex = this.activities().findIndex(a => a.id === activity.id);\n return currentIndex > 0; // Can compare if not the first activity\n }\n\n //#endregion\n} ","<div class=\"axp-activity-log ax-accent2\" *translate=\"let t\">\n <!-- Activity Log Content -->\n <div class=\"__content\">\n <!-- Loading State -->\n @if (loading()) {\n <div class=\"__loading\">\n @for (item of [1, 2, 3, 4]; track $index) {\n <div class=\"__item\">\n <ax-skeleton [animated]=\"true\" class=\"__avatar\"></ax-skeleton>\n <div class=\"__content\">\n <ax-skeleton [animated]=\"true\" class=\"__title\"></ax-skeleton>\n <ax-skeleton [animated]=\"true\" class=\"__subtitle\"></ax-skeleton>\n <ax-skeleton [animated]=\"true\" class=\"__description\"></ax-skeleton>\n <ax-skeleton [animated]=\"true\" class=\"__time\"></ax-skeleton>\n </div>\n </div>\n }\n </div>\n }\n\n <!-- Activity Feed -->\n @if (!loading() && activities().length > 0) {\n <div class=\"__feed\">\n @for (activity of activities(); track activity.id) {\n @let changeClasses = getChangeClasses(activity.changeType);\n @let isItemExpanded = isExpanded(activity.id);\n @let hasExpandableContentItem = hasExpandableContent(activity);\n <div class=\"__item\" [class.__collapsed]=\"!isItemExpanded\" [class.__expandable]=\"hasExpandableContentItem\">\n <div class=\"ax-size-10 ax-rounded-full ax-border ax-flex ax-items-center ax-justify-center ax-lightest-surface\">\n <i class=\"{{ changeClasses.icon }} {{ changeClasses.text }} fa-solid\"></i>\n </div>\n\n <!-- Activity Content -->\n <div class=\"__content\">\n <!-- Main Activity Info -->\n <div class=\"__main-info\">\n <!-- User and Action with Toggle Button -->\n <div class=\"__action-line __header-line\" (click)=\"toggleExpanded(activity.id)\">\n <span class=\"__user-name\">{{ activity.user.title }}</span>\n <span class=\"__action-type\">\n {{ t(`@general:actions.${activity.changeType}.title`) | async }}\n </span>\n <span class=\"__action-text\">\n {{ activity.title | translate | async }}\n </span>\n\n <!-- Compare Button -->\n @if (canCompare(activity)) {\n <button type=\"button\" class=\"__compare-button\" (click)=\"handleCompare(activity, $event)\"\n [attr.aria-label]=\"t('compare.title', { scope: i18nScope }) | async\">\n <i class=\"fa-solid fa-code-compare\"></i>\n </button>\n }\n\n <!-- Toggle Button (only show if there's expandable content) -->\n @if (hasExpandableContentItem) {\n <button type=\"button\" class=\"__toggle-button\" [attr.aria-expanded]=\"isItemExpanded\"\n [attr.aria-label]=\"isItemExpanded ? 'Collapse details' : 'Expand details'\">\n <i class=\"fa-solid\" [class.fa-chevron-down]=\"!isItemExpanded\"\n [class.fa-chevron-up]=\"isItemExpanded\"></i>\n </button>\n }\n </div>\n\n <!-- Expandable Description/Changes -->\n @if (hasExpandableContentItem && isItemExpanded && activity.changes.length > 0) {\n <div class=\"__action-lines __expandable-content\" [class.__animated]=\"shouldAnimate(activity.id)\">\n @for (change of activity.changes; track $index) {\n @let changeClasses = getChangeClasses(change.type);\n <div class=\"__action-line\">\n @if (change.layout) {\n <axp-layout-renderer\n [layout]=\"$any(change.layout)\"\n [context]=\"{ change }\"\n mode=\"view\"\n class=\"__history-layout\"\n />\n } @else {\n <div class=\"ax-rounded-full ax-size-7 ax-grid ax-place-items-center\">\n <i class=\"{{ changeClasses.icon }} {{ changeClasses.text }}\"></i>\n </div>\n @if (change.summary) {\n <span class=\"__action-text\">{{ change.summary }}</span>\n } @else if (change.fieldKey && change.actionKey) {\n <span class=\"__action-text\">\n {{ change.fieldKey | translate:(change.fieldKeyParams ?? {}) | async }}: {{ change.actionKey | translate | async }}\n </span>\n } @else {\n <span class=\"__action-text\">{{ change.description | translate | async }}</span>\n }\n }\n </div>\n }\n </div>\n }\n </div>\n\n <!-- Time -->\n <div class=\"__time\">\n {{ activity.date | format: 'datetime' : 'short' | async }}\n </div>\n </div>\n </div>\n }\n </div>\n }\n\n <!-- Empty State -->\n @if (!loading() && activities().length === 0) {\n <axp-state-message icon=\"fa-light fa-history\" [title]=\"'@activity-log:components.activity-log.empty-states.no-history.title'\"\n [description]=\"'@activity-log:components.activity-log.empty-states.no-history.description'\">\n </axp-state-message>\n }\n </div>\n</div>\n\n<!-- \n\nax-success-surface\nax-primary-surface\nax-danger-surface\nax-warning-surface\nax-info-surface\nax-muted-surface\nax-text-success\n\n -->","import { InjectionToken, Signal } from \"@angular/core\";\n\nexport const AXP_TASK_BADGE_PROVIDERS = new InjectionToken<AXPTaskBadgeProvider[]>('AXP_TASK_BADGE_PROVIDERS');\n\nexport abstract class AXPTaskBadgeProvider {\n abstract key: string;\n abstract count: Signal<number>;\n}","import { computed, inject, Injectable, Signal, signal } from '@angular/core';\nimport { AXP_TASK_BADGE_PROVIDERS, AXPTaskBadgeProvider } from './task-badge.type';\n\n@Injectable({ providedIn: 'root' })\nexport class AXPTaskBadgeService {\n private badgeMap = new Map<string, Signal<number>[]>();\n private providers: AXPTaskBadgeProvider[] = inject(AXP_TASK_BADGE_PROVIDERS, { optional: true }) ?? [];\n private computedCache = new Map<string, Signal<number>>();\n\n constructor() {\n for (const provider of this.providers) {\n if (!this.badgeMap.has(provider.key)) {\n this.badgeMap.set(provider.key, []);\n }\n this.badgeMap.get(provider.key)!.push(provider.count);\n }\n }\n\n getCount(key: string): Signal<number> {\n if (this.computedCache.has(key)) {\n return this.computedCache.get(key)!;\n }\n\n const signals = this.badgeMap.get(key) ?? [];\n const total = signals.length > 0 ? computed(() => signals.reduce((sum, s) => sum + s(), 0)) : signal(0);\n\n this.computedCache.set(key, total);\n return total;\n }\n}\n","import { input, computed, inject, effect, Directive, InputSignal } from \"@angular/core\";\nimport { SIGNAL, signalSetFn } from \"@angular/core/primitives/signals\";\nimport { AXPTaskBadgeService } from \"./task-badge.service\";\nimport { AXBadgeComponent } from \"@acorex/components/badge\";\n\n\n@Directive({\n selector: '[axp-task-badge]',\n standalone: true,\n})\nexport class AXPTaskBadgeDirective {\n private badgeService = inject(AXPTaskBadgeService);\n private host = inject(AXBadgeComponent); // assumes it's applied on <ax-badge>\n private hostElement = this.host.getHostElement();\n\n badgeKey = input<string | undefined>(undefined);\n count = input<number>(0, { alias: 'axp-task-badge' });\n\n private readonly displayCount = computed(() => {\n const value = this.count() || (this.badgeKey() && this.badgeService.getCount(this.badgeKey()!)());\n return value ? value.toString() : '';\n });\n\n #eff = effect(() => {\n this.setValueOfInputSignal(this.host.text, this.displayCount());\n if (!this.displayCount()) {\n this.hostElement.style.display = 'none';\n } else {\n this.hostElement.style.removeProperty('display');\n }\n });\n\n private setValueOfInputSignal<T>(signal: InputSignal<T>, value: T) {\n const node = signal[SIGNAL] as any;\n signalSetFn(node, value);\n }\n}","\nimport { computed, Signal } from \"@angular/core\";\nimport { AXPMenuItem } from \"@acorex/platform/common\";\nimport { AXPTaskBadgeService } from \"./task-badge.service\";\n\nexport class AXPMenuBadgeHelper {\n\n private static cache = new WeakMap<AXPMenuItem, Signal<number>>();\n\n static getTotalCount(item: AXPMenuItem, badgeService: AXPTaskBadgeService): Signal<number> {\n if (this.cache.has(item)) return this.cache.get(item)!;\n\n const own = item.badgeKey ? badgeService.getCount(item.badgeKey) : () => 0;\n const children = item.children?.map(child =>\n this.getTotalCount(child, badgeService)\n ) ?? [];\n\n const total = computed(() =>\n own() + children.reduce((sum, s) => sum + s(), 0)\n );\n\n this.cache.set(item, total);\n return total;\n }\n}\n","\nimport { ChangeDetectionStrategy, Component, computed, contentChild, TemplateRef, viewChild, ViewEncapsulation } from '@angular/core';\n\n\n@Component({\n standalone: true,\n selector: 'axp-layout-actions-primary',\n template: `<ng-content select=\"ax-button,ax-dropdown-button\"></ng-content>`,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AXPThemeLayoutPagePrimaryActionsComponent {\n}\n\n@Component({\n standalone: true,\n selector: 'axp-layout-actions-secondary',\n template: `<ng-content select=\"ax-button-item,ax-divider,ng-container\"></ng-content>`,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AXPThemeLayoutPageSecondaryActionsComponent {\n}\n\n@Component({\n imports: [],\n standalone: true,\n selector: 'axp-layout-actions',\n template: `\n\n <ng-template #primary>\n <ng-content select=\"axp-layout-actions-primary\"></ng-content>\n </ng-template>\n\n <ng-template #secondary>\n <ng-content select=\"axp-layout-actions-secondary\"></ng-content>\n </ng-template>\n\n <ng-content></ng-content>\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\n\nexport class AXPThemeLayoutActionsComponent {\n\n public readonly primaryTemplate = viewChild<TemplateRef<any>>('primary');\n private readonly primaryContent = contentChild(AXPThemeLayoutPagePrimaryActionsComponent);\n public hasPrimary = computed(() => this.primaryContent() != null);\n\n public readonly secondaryTemplate = viewChild<TemplateRef<any>>('secondary');\n private readonly secondaryContent = contentChild(AXPThemeLayoutPageSecondaryActionsComponent);\n public hasSecondary = computed(() => this.secondaryContent() != null);\n\n}\n\n\n","import { ChangeDetectionStrategy, Component, ElementRef, inject, ViewEncapsulation } from '@angular/core';\n\n@Component({\n standalone: true,\n selector: `\n\n axp-page-content, \n axp-page-footer-container,\n axp-page-footer,\n axp-page-header,\n axp-page-header-container,\n axp-page-toolbar,\n\n axp-layout-content, \n axp-layout-page-content, \n\n axp-layout-sections,\n axp-layout-body,\n axp-layout-page-body,\n axp-layout-prefix,\n axp-layout-suffix,\n axp-layout-title-bar,\n axp-layout-title, \n axp-layout-title-actions, \n axp-layout-nav-button, \n axp-layout-description, \n axp-layout-breadcrumbs,\n axp-layout-list-action,\n `,\n template: '<ng-content></ng-content>',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXPThemeLayoutBlockComponent {\n\n\n protected readonly elementRef = inject(ElementRef);\n public readonly hostElement = this.elementRef.nativeElement;\n\n\n}\n","\nimport { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\n\n@Component({\n imports: [],\n standalone: true,\n selector: 'axp-layout-footer, axp-layout-page-footer',\n template: `\n <ng-content select=\"axp-layout-prefix\"></ng-content>\n <ng-content></ng-content>\n <ng-content select=\"axp-layout-suffix\"></ng-content>\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXPThemeLayoutFooterComponent {\n}\n\n\n","\nimport { ChangeDetectionStrategy, Component, input, TemplateRef, viewChild, ViewEncapsulation } from '@angular/core';\n\n@Component({\n imports: [],\n standalone: true,\n selector: 'axp-layout-page-header',\n template: `\n <ng-template #breadcrumbs>\n <ng-content select=\"axp-layout-breadcrumbs\"></ng-content>\n </ng-template>\n\n <ng-template #navbar>\n <ng-content select=\"axp-layout-toolbar\"></ng-content>\n </ng-template>\n\n <ng-template #actions>\n <ng-content select=\"axp-layout-actions\"></ng-content>\n </ng-template>\n\n <ng-template #description>\n <ng-content select=\"axp-layout-description\"></ng-content>\n </ng-template>\n\n <ng-template #title>\n <ng-content select=\"axp-layout-title\"></ng-content>\n </ng-template>\n <ng-template #navButton>\n <ng-content select=\"axp-layout-nav-button\"></ng-content>\n </ng-template>\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXPThemeLayoutPageHeaderComponent {\n\n public readonly title = viewChild<TemplateRef<any>>('title');\n public readonly description = viewChild<TemplateRef<any>>('description');\n public readonly actions = viewChild<TemplateRef<any>>('actions');\n public readonly navbar = viewChild<TemplateRef<any>>('navbar');\n public readonly breadcrumbs = viewChild<TemplateRef<any>>('breadcrumbs');\n public readonly navButton = viewChild<TemplateRef<any>>('navButton');\n}\n\n\n\n@Component({\n imports: [],\n standalone: true,\n selector: 'axp-layout-header',\n template: `\n <ng-content select=\"axp-layout-prefix\"></ng-content>\n <ng-content></ng-content>\n <ng-content select=\"axp-layout-suffix\"></ng-content>\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXPThemeLayoutHeaderComponent {\n\n}\n","import { ChangeDetectionStrategy, Component, contentChild, ViewEncapsulation } from '@angular/core';\n\n\n@Component({\n standalone: true,\n selector: 'axp-layout-list',\n template: `<ng-content select=\"axp-layout-list-item,axp-layout-list-group,ng-container\"></ng-content>`,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AXPThemeLayoutListComponent {\n}\n\n@Component({\n standalone: true,\n selector: 'axp-layout-list-group',\n template: `<ng-content select=\"axp-layout-list-item, axp-layout-title, axp-layout-header ,ng-container\"></ng-content>`,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AXPThemeLayoutListItemsGroupComponent {\n}\n\n@Component({\n standalone: true,\n selector: 'axp-layout-list-item',\n template: `<ng-content select=\"axp-layout-content,axp-layout-prefix,axp-layout-suffix,ng-container\"></ng-content>`,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AXPThemeLayoutListItemComponent {\n\n}","\nimport {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n} from '@angular/core';\n\n@Component({\n imports: [],\n standalone: true,\n selector: 'axp-layout-section',\n template: `\n <ng-content select=\"axp-layout-header\"></ng-content>\n <ng-content select=\"axp-layout-content\"></ng-content>\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXPThemeLayoutSectionComponent {\n}\n","\nimport { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\n\n@Component({\n imports: [],\n standalone: true,\n selector: 'axp-layout-page-start-side, axp-layout-start-side',\n template: `\n <ng-content select=\"axp-layout-header\"></ng-content>\n <ng-content select=\"axp-layout-content\"></ng-content>\n <ng-content select=\"axp-layout-footer\"></ng-content>\n <ng-content></ng-content>\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXPThemeLayoutStartSideComponent {}\n\n@Component({\n imports: [],\n standalone: true,\n selector: 'axp-layout-page-end-side, axp-layout-end-side',\n template: `\n <ng-content select=\"axp-layout-header\"></ng-content>\n <ng-content select=\"axp-layout-content\"></ng-content>\n <ng-content select=\"axp-layout-footer\"></ng-content>\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXPThemeLayoutEndSideComponent {}\n","\nimport { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\n\n@Component({\n imports: [],\n standalone: true,\n selector: 'axp-layout-toolbar',\n template: `\n <ng-content select=\"axp-layout-prefix\"></ng-content>\n <ng-content select=\"axp-layout-suffix\"></ng-content>\n <ng-content></ng-content>\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\n\nexport class AXPThemeLayoutToolbarComponent {\n\n}\n\n\n","import { ChangeDetectionStrategy, Component, computed, ElementRef, inject, signal, Signal, ViewEncapsulation } from '@angular/core';\n\n@Component({\n standalone: true,\n selector: `axp-layout-container`,\n template: '<ng-content></ng-content>',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXPThemeLayoutContainerComponent {\n\n\n protected readonly elementRef: ElementRef<HTMLDivElement> = inject(ElementRef<HTMLDivElement>);\n public readonly hostElement = this.elementRef.nativeElement;\n\n\n private _isEmptySignal = signal(this.hostElement.children.length === 0);\n public readonly isEmpty: Signal<boolean> = this._isEmptySignal.asReadonly();\n\n private mutationObserver?: MutationObserver;\n\n ngOnInit() {\n this.mutationObserver = new MutationObserver(() => {\n this._isEmptySignal.set(this.hostElement.children.length === 0);\n });\n\n this.mutationObserver.observe(this.hostElement, {\n childList: true,\n subtree: true,\n });\n }\n\n ngOnDestroy() {\n this.mutationObserver?.disconnect();\n }\n\n\n\n}\n","import { AXDecoratorModule } from '@acorex/components/decorators';\nimport { CommonModule } from '@angular/common';\nimport { Component, computed, input, output, signal, viewChild, ViewEncapsulation } from '@angular/core';\n\nimport { AXClickEvent, AXValueChangedEvent } from '@acorex/cdk/common';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDropdownModule } from '@acorex/components/dropdown';\nimport { AXSearchBoxModule } from '@acorex/components/search-box';\nimport { AXSkeletonModule } from '@acorex/components/skeleton';\nimport {\n AXTreeItemClickBaseEventLegacy,\n AXTreeViewLegacyComponent,\n AXTreeViewLegacyModule,\n} from '@acorex/components/tree-view-legacy';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPCategoryEntity } from '@acorex/platform/core';\nimport { AXPThemeLayoutBlockComponent, AXPThemeLayoutHeaderComponent, AXPThemeLayoutToolbarComponent } from '../blocks';\nimport { AXPStateMessageComponent } from '../state-message';\nimport {\n AXPCategoryTreeActions,\n AXPCategoryTreeConfig,\n AXPCategoryTreeDataSource,\n AXPCategoryTreeEvents,\n AXPCategoryTreeNode,\n} from './category-tree.types';\n\n/** Must match the root label key used by AXPCategoryTreeService (not imported here to avoid a components↔entity circular dependency). */\nconst CATEGORY_TREE_ROOT_TITLE_I18N_KEY = '@general:terms.interface.selection.all-items';\n\n@Component({\n selector: 'axp-category-tree',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n imports: [\n CommonModule,\n AXDecoratorModule,\n AXTreeViewLegacyModule,\n AXSkeletonModule,\n AXPThemeLayoutBlockComponent,\n AXSearchBoxModule,\n AXPThemeLayoutHeaderComponent,\n AXPThemeLayoutToolbarComponent,\n AXTranslationModule,\n AXButtonModule,\n AXDropdownModule,\n AXPStateMessageComponent,\n ],\n templateUrl: './category-tree.component.html',\n styleUrl: './category-tree.component.scss',\n})\nexport class AXPCategoryTreeComponent {\n //#region ---- Services & Dependencies ----\n\n /** i18n key for the synthetic root row; resolved in the template with the translate pipe. */\n protected readonly categoryTreeRootTitleI18nKey = CATEGORY_TREE_ROOT_TITLE_I18N_KEY;\n\n //#endregion\n\n //#region ---- Inputs ----\n\n dataSource = input.required<AXPCategoryTreeDataSource>();\n config = input<AXPCategoryTreeConfig>({\n textField: 'title',\n valueField: 'id',\n expandedField: 'expand',\n showCheckbox: false,\n searchable: true,\n searchPlaceholder: '@general:terms.interface.category.search.placeholder',\n emptyStateTitle: '@general:terms.interface.category.search.no-records.title',\n emptyStateDescription: '@general:terms.interface.category.search.no-records.description',\n emptyStateIcon: 'fa-light fa-folder-open',\n });\n actions = input<AXPCategoryTreeActions>({\n canCreate: true,\n canUpdate: true,\n canDelete: true,\n canCreateChild: true,\n createLabel: '@general:actions.add-new.title',\n updateLabel: '@general:actions.edit.title',\n deleteLabel: '@general:actions.delete.title',\n createChildLabel: '@general:actions.add-new-child.title',\n });\n events = input<AXPCategoryTreeEvents>({});\n\n //#endregion\n\n //#region ---- Outputs ----\n\n nodeClick = output<AXPCategoryEntity>();\n nodeSelect = output<AXPCategoryEntity>();\n nodeCreate = output<AXPCategoryEntity | undefined>();\n nodeUpdate = output<AXPCategoryEntity>();\n nodeDelete = output<AXPCategoryEntity>();\n searchChange = output<string>();\n collapseChange = output<AXPCategoryEntity>();\n\n //#endregion\n\n //#region ---- Component State ----\n\n tree = viewChild<AXTreeViewLegacyComponent>('tree');\n isLoading = signal(true);\n searchValue = signal('');\n\n private loadingTimeoutId: any = null;\n private readonly LOADING_DELAY = 300; // Show skeleton only if loading takes more than 300ms\n\n protected treeItems = signal<AXPCategoryTreeNode[]>([\n {\n id: 'root',\n title: CATEGORY_TREE_ROOT_TITLE_I18N_KEY,\n description: '',\n parentId: undefined,\n childrenCount: 0,\n expand: true,\n children: [],\n },\n ]);\n\n //#endregion\n\n //#region ---- Computed Properties ----\n\n protected emptyStateTitle = computed(() => {\n const title = this.config().emptyStateTitle || '';\n return title;\n });\n\n protected emptyStateDescription = computed(() => {\n const description = this.config().emptyStateDescription || '';\n return description;\n });\n\n //#endregion\n\n //#region ---- Lifecycle Methods ----\n\n async ngOnInit(): Promise<void> {\n await this.loadRootNodes();\n }\n\n //#endregion\n\n //#region ---- Data Loading Methods ----\n\n async loadRootNodes(): Promise<void> {\n // Set loading state with delay to avoid flickering\n this.setLoadingWithDelay(true);\n\n try {\n const entities = await this.dataSource().loadRootNodes();\n const nodes = this.convertEntitiesToTreeNodes(entities);\n this.treeItems.update((prev) =>\n prev.map((item) => ({\n ...item,\n children: nodes,\n })),\n );\n } catch (error) {\n console.error('Error loading root nodes:', error);\n } finally {\n this.clearLoadingState();\n }\n }\n\n async loadChildNodes(parentId: string): Promise<void> {\n if (!this.dataSource().loadChildNodes) return;\n\n this.tree()?.setNodeLoading(parentId, true);\n try {\n const entities = await this.dataSource().loadChildNodes!(parentId);\n const children = this.convertEntitiesToTreeNodes(entities);\n this.updateNodeChildren(parentId, children);\n } catch (error) {\n console.error('Error loading child nodes:', error);\n } finally {\n this.tree()?.setNodeLoading(parentId, false);\n }\n }\n\n async searchNodes(searchValue: string): Promise<void> {\n if (!this.dataSource().searchNodes) return;\n\n // Set loading state with delay to avoid flickering\n this.setLoadingWithDelay(true);\n\n try {\n const entities = await this.dataSource().searchNodes!(searchValue);\n const nodes = this.convertEntitiesToTreeNodes(entities);\n this.treeItems.update((prev) =>\n prev.map((item) => ({\n ...item,\n children: nodes,\n })),\n );\n } catch (error) {\n console.error('Error searching nodes:', error);\n } finally {\n this.clearLoadingState();\n }\n }\n\n //#endregion\n\n //#region ---- Event Handlers ----\n\n async handleNodeClick(event: AXTreeItemClickBaseEventLegacy): Promise<void> {\n const node = event.data as AXPCategoryTreeNode;\n // Extract the entity data (without tree-specific properties)\n const entity: AXPCategoryEntity = {\n id: node.id,\n title: node.title,\n description: node.description,\n parentId: node.parentId,\n childrenCount: node.childrenCount,\n };\n this.nodeClick.emit(entity);\n this.events().onNodeClick?.(entity);\n }\n\n async handleCollapseChanged(event: AXTreeItemClickBaseEventLegacy): Promise<void> {\n const node = event.data as AXPCategoryTreeNode;\n\n // Extract the entity data (without tree-specific properties)\n const entity: AXPCategoryEntity = {\n id: node.id,\n title: node.title,\n description: node.description,\n parentId: node.parentId,\n childrenCount: node.childrenCount,\n };\n this.collapseChange.emit(entity);\n this.events().onCollapseChange?.(entity);\n\n // Load children if node is being expanded\n // Check both expand property and active property (active seems to be the actual expansion state)\n if ((node.expand || (node as any).active) && this.dataSource().loadChildNodes) {\n await this.loadChildNodes(node.id);\n }\n }\n\n async handleSearchChange(event: AXValueChangedEvent): Promise<void> {\n const searchValue = event.value;\n this.searchValue.set(searchValue);\n this.searchChange.emit(searchValue);\n this.events().onSearchChange?.(searchValue);\n\n if (searchValue) {\n await this.searchNodes(searchValue);\n } else {\n await this.loadRootNodes();\n }\n }\n\n //#endregion\n\n //#region ---- CRUD Action Handlers ----\n\n async handleCreateRootClick(event: AXClickEvent): Promise<void> {\n event.nativeEvent.preventDefault();\n event.nativeEvent.stopPropagation();\n this.nodeCreate.emit(undefined);\n this.events().onNodeCreate?.(undefined);\n }\n\n async handleCreateChildClick(node: AXPCategoryTreeNode, event: AXClickEvent): Promise<void> {\n event.nativeEvent.preventDefault();\n event.nativeEvent.stopPropagation();\n // Extract the entity data (without tree-specific properties)\n const entity: AXPCategoryEntity = {\n id: node.id,\n title: node.title,\n description: node.description,\n parentId: node.parentId,\n childrenCount: node.childrenCount,\n };\n this.nodeCreate.emit(entity);\n this.events().onNodeCreate?.(entity);\n }\n\n async handleUpdateNodeClick(node: AXPCategoryTreeNode, event: AXClickEvent): Promise<void> {\n event.nativeEvent.preventDefault();\n event.nativeEvent.stopPropagation();\n // Extract the entity data (without tree-specific properties)\n const entity: AXPCategoryEntity = {\n id: node.id,\n title: node.title,\n description: node.description,\n parentId: node.parentId,\n childrenCount: node.childrenCount,\n };\n this.nodeUpdate.emit(entity);\n this.events().onNodeUpdate?.(entity);\n }\n\n async handleDeleteNodeClick(node: AXPCategoryTreeNode, event: AXClickEvent): Promise<void> {\n event.nativeEvent.preventDefault();\n event.nativeEvent.stopPropagation();\n // Extract the entity data (without tree-specific properties)\n const entity: AXPCategoryEntity = {\n id: node.id,\n title: node.title,\n description: node.description,\n parentId: node.parentId,\n childrenCount: node.childrenCount,\n };\n this.nodeDelete.emit(entity);\n this.events().onNodeDelete?.(entity);\n }\n\n //#endregion\n\n //#region ---- Utility Methods ----\n\n private convertEntitiesToTreeNodes(entities: AXPCategoryEntity[]): AXPCategoryTreeNode[] {\n return entities.map((entity) => ({\n ...entity,\n children: entity.childrenCount > 0 ? [] : undefined, // Set children to empty array if has children, undefined if no children\n expand: false,\n hasChild: entity.childrenCount > 0, // Set hasChild based on childrenCount\n }));\n }\n\n private updateNodeChildren(parentId: string, children: AXPCategoryTreeNode[]): void {\n const updateChildrenAtPath = (items: AXPCategoryTreeNode[], id: string): AXPCategoryTreeNode[] => {\n return items.map((item) => {\n if (item.id === id) {\n return { ...item, children };\n }\n if (item.children?.length) {\n return { ...item, children: updateChildrenAtPath(item.children, id) };\n }\n return item;\n });\n };\n\n this.treeItems.update((prev) =>\n prev.map((item) => ({\n ...item,\n children: updateChildrenAtPath(item.children || [], parentId),\n })),\n );\n }\n\n async refreshTree(parentId?: string): Promise<void> {\n if (parentId) {\n await this.loadChildNodes(parentId);\n } else {\n await this.loadRootNodes();\n }\n }\n\n /**\n * Set loading state with delay to avoid flickering for fast responses\n */\n private setLoadingWithDelay(loading: boolean): void {\n if (loading) {\n // Clear any existing timeout\n if (this.loadingTimeoutId) {\n clearTimeout(this.loadingTimeoutId);\n }\n\n // Only show skeleton if loading takes more than LOADING_DELAY ms\n this.loadingTimeoutId = setTimeout(() => {\n this.isLoading.set(true);\n this.loadingTimeoutId = null;\n }, this.LOADING_DELAY);\n }\n }\n\n /**\n * Clear loading state and cancel any pending timeout\n */\n private clearLoadingState(): void {\n // Cancel the delayed loading state if it hasn't been set yet\n if (this.loadingTimeoutId) {\n clearTimeout(this.loadingTimeoutId);\n this.loadingTimeoutId = null;\n }\n\n // Clear the loading state\n this.isLoading.set(false);\n }\n\n //#endregion\n}\n","<axp-layout-header>\n <axp-layout-toolbar>\n @if (config().searchable) {\n <ax-search-box\n (onValueChanged)=\"handleSearchChange($event)\"\n [delayTime]=\"300\"\n [placeholder]=\"config().searchPlaceholder! | translate | async\"\n >\n </ax-search-box>\n }\n </axp-layout-toolbar>\n</axp-layout-header>\n\n<axp-layout-content>\n @if (isLoading()) {\n <div class=\"ax-p-4 ax-flex ax-flex-col ax-gap-3\" [class.ax-pt-2]=\"config().searchable\">\n <ax-skeleton class=\"ax-w-full ax-h-6 ax-rounded-md\"></ax-skeleton>\n <ax-skeleton class=\"ax-w-full ax-h-6 ax-rounded-md\"></ax-skeleton>\n <ax-skeleton class=\"ax-w-full ax-h-6 ax-rounded-md\"></ax-skeleton>\n <ax-skeleton class=\"ax-w-full ax-h-6 ax-rounded-md\"></ax-skeleton>\n <ax-skeleton class=\"ax-w-full ax-h-6 ax-rounded-md\"></ax-skeleton>\n <ax-skeleton class=\"ax-w-full ax-h-6 ax-rounded-md\"></ax-skeleton>\n </div>\n } @else if (treeItems()[0].children?.length) {\n <div class=\"ax-px-4 ax-max-h-[calc(100vh-250px)] ax-overflow-auto\" [class.ax-pt-2]=\"config().searchable\">\n <ax-tree-view-legacy\n (onNodeClick)=\"handleNodeClick($event)\"\n (onCollapsedChanged)=\"handleCollapseChanged($event)\"\n [showCheckbox]=\"config().showCheckbox || false\"\n [itemTemplate]=\"itemTemplate\"\n #treeRef\n [textField]=\"config().textField || 'title'\"\n [valueField]=\"config().valueField || 'id'\"\n [expandedField]=\"config().expandedField || 'expand'\"\n [items]=\"treeItems()\"\n #tree\n >\n </ax-tree-view-legacy>\n </div>\n } @else {\n <axp-state-message\n [icon]=\"config().emptyStateIcon || 'fa-light fa-folder-open'\"\n [title]=\"emptyStateTitle()\"\n [description]=\"emptyStateDescription()\"\n >\n @if (actions().canCreate) {\n <ax-button\n slot=\"actions\"\n (onClick)=\"handleCreateRootClick($event)\"\n look=\"solid\"\n color=\"primary\"\n [text]=\"(actions().createLabel || '@general:actions.add-new.title' | translate | async)!\"\n >\n <ax-icon class=\"fas fa-plus\"></ax-icon>\n </ax-button>\n }\n </axp-state-message>\n }\n\n <ng-template #itemTemplate let-item>\n @let textField = config().textField || 'title';\n @let rawTitle = item[textField] ?? item.title;\n <div class=\"ax-flex ax-items-center ax-justify-between ax-w-full ax-gap-2 ax-overflow-hidden\">\n <div class=\"ax-flex ax-items-center ax-gap-2 ax-min-w-0\">\n <ax-icon class=\"fas ax-text-warning fa-folder\"></ax-icon>\n <span class=\"ax-truncate\">\n @if (item.id === 'root') {\n {{ categoryTreeRootTitleI18nKey | translate | async }}\n } @else {\n {{ rawTitle | translate | async }}\n }\n </span>\n </div>\n @if (item.id && item.id !== 'root') {\n @if (actions().canCreateChild || actions().canUpdate || actions().canDelete) {\n <div class=\"ax-flex ax-items-center ax-gap-1\">\n <ax-button class=\"ax-xs\" color=\"default\" look=\"blank\" (onClick)=\"$event.nativeEvent.stopPropagation()\">\n <ax-icon class=\"fas fa-ellipsis-v\"></ax-icon>\n <ax-dropdown-panel>\n <ax-button-item-list>\n @if (actions().canCreateChild) {\n <ax-button-item\n (onClick)=\"handleCreateChildClick(item, $event)\"\n look=\"blank\"\n color=\"default\"\n [text]=\"\n (actions().createChildLabel || '@general:actions.add-new-child.title' | translate | async)!\n \"\n >\n <ax-icon class=\"fas fa-plus\"></ax-icon>\n </ax-button-item>\n }\n @if (actions().canUpdate) {\n <ax-button-item\n (onClick)=\"handleUpdateNodeClick(item, $event)\"\n look=\"blank\"\n [text]=\"(actions().updateLabel || '@general:actions.edit.title' | translate | async)!\"\n >\n <ax-icon class=\"fas fa-pen\"></ax-icon>\n </ax-button-item>\n }\n @if (actions().canDelete) {\n <ax-button-item\n (onClick)=\"handleDeleteNodeClick(item, $event)\"\n color=\"danger\"\n look=\"blank\"\n [text]=\"(actions().deleteLabel || '@general:actions.delete.title' | translate | async)!\"\n >\n <ax-icon class=\"fas fa-trash\"></ax-icon>\n </ax-button-item>\n }\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n </div>\n }\n } @else if (item.id === 'root' && actions().canCreate) {\n <div class=\"ax-flex ax-items-center ax-gap-1\">\n <ax-button class=\"ax-xs\" (onClick)=\"handleCreateRootClick($event)\" look=\"blank\" color=\"default\">\n <ax-icon class=\"fas fa-plus\"></ax-icon>\n </ax-button>\n </div>\n }\n </div>\n </ng-template>\n</axp-layout-content>\n","//#region ---- Tree Node Interface ----\n\nimport { AXPCategoryEntity } from \"@acorex/platform/core\";\n\nexport interface AXPCategoryTreeNode extends AXPCategoryEntity {\n children?: AXPCategoryTreeNode[];\n expand?: boolean;\n hasChild?: boolean;\n [key: string]: any;\n}\n\n//#endregion\n\n//#region ---- Tree Configuration Interface ----\n\nexport interface AXPCategoryTreeConfig {\n textField?: string;\n valueField?: string;\n expandedField?: string;\n showCheckbox?: boolean;\n searchable?: boolean;\n searchPlaceholder?: string;\n emptyStateTitle?: string;\n emptyStateDescription?: string;\n emptyStateIcon?: string;\n}\n\n//#endregion\n\n//#region ---- Tree Events Interface ----\n\nexport interface AXPCategoryTreeEvents {\n onNodeClick?: (node: AXPCategoryEntity) => void;\n onNodeSelect?: (node: AXPCategoryEntity) => void;\n onNodeCreate?: (parentNode?: AXPCategoryEntity) => void;\n onNodeUpdate?: (node: AXPCategoryEntity) => void;\n onNodeDelete?: (node: AXPCategoryEntity) => void;\n onSearchChange?: (searchValue: string) => void;\n onCollapseChange?: (node: AXPCategoryEntity) => void;\n}\n\n//#endregion\n\n//#region ---- Tree Actions Interface ----\n\nexport interface AXPCategoryTreeActions {\n canCreate?: boolean;\n canUpdate?: boolean;\n canDelete?: boolean;\n canCreateChild?: boolean;\n createLabel?: string;\n updateLabel?: string;\n deleteLabel?: string;\n createChildLabel?: string;\n}\n\n//#endregion\n\n//#region ---- Tree Data Source Interface ----\n\nexport interface AXPCategoryTreeDataSource {\n loadRootNodes: () => Promise<AXPCategoryEntity[]>;\n loadChildNodes?: (parentId: string) => Promise<AXPCategoryEntity[]>;\n searchNodes?: (searchValue: string) => Promise<AXPCategoryEntity[]>;\n}\n\n//#endregion\n","\nimport { ChangeDetectionStrategy, Component, input, output } from '@angular/core';\n\n//#region ---- Component ----\n\n/**\n * Color Palette Picker Component\n * Displays a grid of color swatches for selection\n */\n@Component({\n selector: 'axp-color-palette-picker',\n templateUrl: './color-palette-picker.component.html',\n styleUrl: './color-palette-picker.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [],\n})\nexport class AXPColorPalettePickerComponent {\n //#region ---- Inputs ----\n\n /**\n * Array of color codes to display\n */\n colors = input<string[]>([]);\n\n /**\n * Currently selected color\n */\n selectedColor = input<string | null | undefined>();\n\n /**\n * Disable the entire palette\n */\n disabled = input<boolean>(false);\n\n /**\n * Make the palette readonly\n */\n readonly = input<boolean>(false);\n\n /**\n * Show empty/null option to clear selection\n */\n allowClear = input<boolean>(true);\n\n //#endregion\n\n //#region ---- Outputs ----\n\n /**\n * Emits when a color is selected or cleared (null/undefined)\n */\n colorSelected = output<string | null | undefined>();\n\n //#endregion\n\n //#region ---- Event Handlers ----\n\n /**\n * Handle color selection\n */\n protected handleColorSelect(color: string | null | undefined): void {\n if (this.disabled() || this.readonly()) {\n return;\n }\n this.colorSelected.emit(color);\n }\n\n //#endregion\n}\n\n//#endregion\n\n","<div class=\"axp-color-palette-picker\">\n <div class=\"__swatches\">\n @if (allowClear()) {\n <button type=\"button\" class=\"__swatch __empty\"\n [class.__selected]=\"selectedColor() === null || selectedColor() === undefined\"\n [class.__disabled]=\"disabled() || readonly()\" [disabled]=\"disabled() || readonly()\"\n (click)=\"handleColorSelect(null)\">\n @if (selectedColor() === null || selectedColor() === undefined) {\n <i class=\"fa-solid fa-check __checkmark\"></i>\n } @else {\n <i class=\"fa-solid fa-xmark __clear-icon\"></i>\n }\n </button>\n }\n @for (color of colors(); track color) {\n <button type=\"button\" class=\"__swatch\" [class.__selected]=\"selectedColor() === color\"\n [class.__disabled]=\"disabled() || readonly()\" [style.background-color]=\"color\"\n [disabled]=\"disabled() || readonly()\" (click)=\"handleColorSelect(color)\">\n @if (selectedColor() === color) {\n <i class=\"fa-solid fa-check __checkmark\"></i>\n }\n </button>\n }\n </div>\n</div>","import { AXBadgeModule } from '@acorex/components/badge';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXPopoverComponent, AXPopoverModule } from '@acorex/components/popover';\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n effect,\n ElementRef,\n input,\n OnDestroy,\n output,\n signal,\n TemplateRef,\n viewChild,\n} from '@angular/core';\n\nexport interface AXPColumnItemListItem {\n id: string;\n content: string;\n}\n\n@Component({\n selector: 'axp-column-item-list',\n template: `\n <div class=\"ax-flex ax-gap-1 ax-items-center\" #itemsContainer>\n @if (items().length === 0) {\n <span class=\"ax-text-muted\">---</span>\n } @else {\n <div class=\"ax-flex ax-gap-1 ax-items-center ax-flex-1 ax-min-w-0\">\n @for (item of items(); track item.id) {\n @if (itemTemplate()) {\n <ng-container\n [ngTemplateOutlet]=\"itemTemplate()\"\n [ngTemplateOutletContext]=\"{ $implicit: item }\"\n ></ng-container>\n } @else {\n <ax-badge class=\"ax-p-0.5 ax-text-sm\" [text]=\"item.content\"></ax-badge>\n }\n }\n </div>\n }\n @if (hasOverflow() && items().length > 1) {\n <span\n class=\"ax-absolute ax-flex ax-items-center ax-end-0 ax-px-1 ax-cursor-pointer ax-h-full ax-light-surface hover:ax-primary-surface\"\n (click)=\"showMoreItems()\"\n #moreButton\n >\n <i class=\"fa-light fa-ellipsis-vertical\"></i>\n </span>\n }\n </div>\n\n <!-- More Items Popover -->\n <ax-popover [openOn]=\"'manual'\" #morePopover (openChange)=\"onMorePopoverOpenChange($event)\">\n <div class=\"ax-lightest-surface ax-border ax-rounded-lg ax-shadow-lg ax-p-4 ax-min-w-[280px]\">\n <div class=\"ax-mb-4 ax-border-b ax-pb-2\">\n <h3 class=\"ax-text-base ax-font-semibold\">All {{ items().length }} Items</h3>\n </div>\n <div class=\"ax-max-h-64 ax-flex ax-flex-col ax-gap-3 ax-overflow-auto\" style=\"max-height: max(30dvh,10rem)\">\n @for (item of items(); track item.id) {\n <!-- <ax-button class=\"ax-sm\" (onClick)=\"submitClick(item)\" [text]=\"item.content\"></ax-button> -->\n\n @if (itemTemplate()) {\n <ng-container\n [ngTemplateOutlet]=\"itemTemplate()\"\n [ngTemplateOutletContext]=\"{ $implicit: item }\"\n ></ng-container>\n } @else {\n <ax-button class=\"ax-sm\" (onClick)=\"submitClick(item)\" [text]=\"item.content\"></ax-button>\n }\n }\n </div>\n </div>\n </ax-popover>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AXBadgeModule, AXPopoverModule, AXButtonModule, NgTemplateOutlet],\n})\nexport class AXPColumnItemListComponent implements OnDestroy {\n items = input<AXPColumnItemListItem[]>([]);\n itemTemplate = input<TemplateRef<{ $implicit: AXPColumnItemListItem }> | null>(null);\n itemClick = output<AXPColumnItemListItem>();\n\n protected itemsContainer = viewChild<ElementRef<HTMLDivElement>>('itemsContainer');\n protected moreButton = viewChild<ElementRef>('moreButton');\n protected morePopover = viewChild<AXPopoverComponent>('morePopover');\n protected isMorePopoverOpen = signal(false);\n protected hasOverflow = signal(false);\n\n private resizeObserver?: ResizeObserver;\n\n constructor() {\n afterNextRender(() => {\n this.checkOverflow();\n this.setupResizeObserver();\n });\n\n // Re-check overflow when items change\n effect(() => {\n this.items(); // Track items signal\n // Use setTimeout to ensure DOM is updated\n setTimeout(() => {\n this.checkOverflow();\n }, 0);\n });\n }\n\n ngOnDestroy(): void {\n if (this.resizeObserver) {\n this.resizeObserver.disconnect();\n this.resizeObserver = undefined;\n }\n }\n\n protected showMoreItems(): void {\n this.openMorePopover();\n }\n\n protected onMorePopoverOpenChange(event: any): void {\n this.isMorePopoverOpen.set(event);\n }\n\n private openMorePopover(): void {\n if (this.morePopover() && this.moreButton()) {\n this.morePopover()!.target = this.moreButton()!.nativeElement;\n this.morePopover()!.open();\n this.isMorePopoverOpen.set(true);\n }\n }\n\n protected submitClick(event: AXPColumnItemListItem): void {\n this.itemClick.emit(event);\n this.morePopover()?.close();\n }\n\n private checkOverflow(): void {\n const container = this.itemsContainer()?.nativeElement;\n if (!container) {\n return;\n }\n\n // Check if content overflows horizontally\n const hasOverflow = container.scrollWidth > container.clientWidth + 20;\n this.hasOverflow.set(hasOverflow);\n }\n\n private setupResizeObserver(): void {\n const container = this.itemsContainer()?.nativeElement;\n if (!container) {\n return;\n }\n\n // Clean up existing observer\n if (this.resizeObserver) {\n this.resizeObserver.disconnect();\n }\n\n // Create new observer to watch for size changes\n this.resizeObserver = new ResizeObserver(() => {\n this.checkOverflow();\n });\n\n this.resizeObserver.observe(container);\n\n // Also observe parent container if available\n const parent = container.parentElement;\n if (parent) {\n this.resizeObserver.observe(parent);\n }\n }\n}\n","import { AXValueChangedEvent } from '@acorex/cdk/common';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXSwitchModule } from '@acorex/components/switch';\nimport { AXTranslationModule } from '@acorex/core/translation';\n\nimport { AXPColumnQuery } from '@acorex/platform/core';\nimport { CdkDrag, CdkDragDrop, CdkDragHandle, CdkDropList, moveItemInArray } from '@angular/cdk/drag-drop';\nimport { CommonModule } from '@angular/common';\nimport { Component, model } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { cloneDeep } from 'lodash-es';\n\n@Component({\n selector: 'axp-query-columns',\n templateUrl: './query-columns.component.html',\n imports: [\n CommonModule,\n FormsModule,\n CdkDropList,\n CdkDrag,\n CdkDragHandle,\n AXButtonModule,\n AXDecoratorModule,\n AXSwitchModule,\n AXTranslationModule,\n ],\n})\nexport class AXPQueryColumnsComponent {\n columns = model<AXPColumnQuery[]>([]);\n\n handleVisibilityChange(e: AXValueChangedEvent<boolean>, name: string) {\n if (e.isUserInteraction) {\n this.columns.update((prev) => {\n return prev.map((c: any) => {\n return c.name === name ? { ...c, visible: e.value ?? true } : c;\n });\n });\n }\n }\n\n protected drop(event: CdkDragDrop<unknown[]>) {\n const columns = cloneDeep(this.columns());\n moveItemInArray(columns, event.previousIndex, event.currentIndex);\n this.columns.set(columns);\n }\n}\n","<div class=\"ax-flex ax-flex-col ax-gap-4 ax-select-none\" cdkDropList (cdkDropListDropped)=\"drop($event)\">\n <div class=\"ax-flex ax-flex-col ax-gap-3 ax-w-full ax-sorted-list ax-max-h-[calc(100vh-280px)] ax-overflow-auto\">\n @for (item of columns(); track item.name) {\n <div class=\"ax-flex ax-py-1 ax-items-center ax-justify-between\" cdkDrag cdkDragBoundary=\".ax-sorted-list\">\n <div class=\"ax-flex ax-items-center ax-gap-3\" cdkDragHandle>\n <ax-icon class=\"fa-solid fa-grip-dots-vertical ax-cursor-move\"></ax-icon>\n <p class=\"ax-font-medium ax-text-sm\">{{ item.title | translate | async }}</p>\n </div>\n <ax-switch\n class=\"ax-sm\"\n [ngModel]=\"item.visible\"\n (onValueChanged)=\"handleVisibilityChange($event, item.name)\"\n ></ax-switch>\n </div>\n }\n </div>\n</div>\n","import { Component, OnDestroy, OnInit, ViewEncapsulation, input, computed, signal } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { AXFormModule } from '@acorex/components/form';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXTextBoxModule } from '@acorex/components/text-box';\nimport { AXCheckBoxModule } from '@acorex/components/check-box';\nimport { AXLabelModule } from '@acorex/components/label';\nimport { AXTranslationModule } from '@acorex/core/translation';\n\nimport { AXPWidgetCoreModule, AXPWidgetNode } from '@acorex/platform/layout/widget-core';\nimport { AXPContextData } from '@acorex/platform/core';\n\nexport interface AXPCompareViewField {\n path: string;\n title: string;\n description?: string;\n widget: AXPWidgetNode;\n}\n\nexport interface AXPCompareViewObject {\n id: string;\n title: string;\n description?: string;\n context: AXPContextData;\n}\n\nexport interface AXPCompareViewInputs {\n fields: AXPCompareViewField[];\n objects: AXPCompareViewObject[];\n}\n\nexport type AXPCompareViewMode = 'compare' | 'changes';\n\n@Component({\n selector: 'axp-compare-view',\n templateUrl: './compare-view.component.html',\n styleUrl: './compare-view.component.scss',\n imports: [\n // Angular\n CommonModule,\n // ACoreX\n AXFormModule,\n AXTextBoxModule,\n AXButtonModule,\n AXLabelModule,\n AXCheckBoxModule,\n AXTranslationModule,\n // Platform\n AXPWidgetCoreModule\n ],\n encapsulation: ViewEncapsulation.None,\n providers: [\n\n ],\n})\nexport class AXPCompareViewComponent implements OnInit, OnDestroy {\n\n //#region ---- Component Properties ----\n\n inputs = input<AXPCompareViewInputs>();\n showOnlyChanges = signal(false);\n mode = input<AXPCompareViewMode>('compare');\n\n private removedObjects = signal<string[]>([]);\n\n protected isChangesMode = computed(() => this.mode() === 'changes');\n\n //#endregion\n\n //#region ---- Computed Properties ----\n\n /**\n * Filtered fields based on showOnlyChanges toggle\n */\n filteredFields = computed(() => {\n const fields = this.inputs()?.fields ?? [];\n // Set readOnly to true for all fields\n fields.forEach(field => {\n field.widget.options = {\n ...field.widget.options,\n allowEdit: false,\n readOnly: true,\n };\n });\n\n if (!this.showOnlyChanges()) {\n return fields;\n }\n\n // Filter to show only fields where values differ across objects\n return fields.filter(field => this.hasUnequalValues(field.path));\n });\n\n remainingObjects = computed(() => {\n const objects = this.inputs()?.objects ?? [];\n return objects.filter(obj => !this.removedObjects().includes(obj.id));\n });\n\n //#endregion\n\n //#region ---- Utility Methods ----\n\n /**\n * Check if a field value will change in the next object (to show arrow in current cell)\n */\n protected hasValueChangingToNext(fieldPath: string, currentObjectIndex: number): boolean {\n const objects = this.remainingObjects();\n if (currentObjectIndex >= objects.length - 1) return false;\n\n const currentValue = objects[currentObjectIndex]?.context[fieldPath];\n const nextValue = objects[currentObjectIndex + 1]?.context[fieldPath];\n\n return !this.areValuesEqual(currentValue, nextValue);\n }\n\n /**\n * Check if a field value has changed compared to the previous object\n */\n hasValueChangedFromPrevious(fieldPath: string, currentObjectIndex: number): boolean {\n const objects = this.remainingObjects();\n if (currentObjectIndex === 0 || objects.length <= 1) return false;\n\n const currentValue = objects[currentObjectIndex]?.context[fieldPath];\n const previousValue = objects[currentObjectIndex - 1]?.context[fieldPath];\n\n return !this.areValuesEqual(currentValue, previousValue);\n }\n\n /**\n * Check if a field has unequal values across objects\n */\n hasUnequalValues(fieldPath: string): boolean {\n const objects = this.remainingObjects();\n if (objects.length <= 1) return false;\n\n const values = objects.map(obj => obj.context[fieldPath]);\n const firstValue = values[0];\n\n return values.some(value => !this.areValuesEqual(value, firstValue));\n }\n\n /**\n * Check if a field has equal values across objects\n */\n hasEqualValues(fieldPath: string): boolean {\n const objects = this.remainingObjects();\n if (objects.length <= 1) return false;\n\n const values = objects.map(obj => obj.context[fieldPath]);\n const firstValue = values[0];\n\n return values.every(value => this.areValuesEqual(value, firstValue));\n }\n\n\n\n\n /**\n * Compare two values for equality (deep comparison for objects/arrays)\n */\n private areValuesEqual(value1: any, value2: any): boolean {\n if (value1 === value2) return true;\n\n if (value1 == null || value2 == null) return value1 === value2;\n\n if (typeof value1 !== typeof value2) return false;\n\n if (typeof value1 === 'object') {\n return JSON.stringify(value1) === JSON.stringify(value2);\n }\n\n return false;\n }\n\n /**\n * Toggle the show only changes filter\n */\n toggleShowOnlyChanges(): void {\n this.showOnlyChanges.update(value => !value);\n }\n\n /**\n * Remove an object from the comparison\n */\n removeObject(objectId: string): void {\n this.removedObjects.update(objects => [...objects, objectId]);\n }\n\n //#endregion\n\n //#region ---- Lifecycle Methods ----\n\n ngOnInit(): void {\n }\n\n ngOnDestroy(): void {\n\n }\n\n //#endregion\n}\n","<!--\n #region ---- Compare View Table Layout ----\n-->\n<div class=\"axp-compare-view\">\n <div class=\"__table-container\">\n <table class=\"__table\">\n <thead class=\"__thead\">\n <tr class=\"__header-row\">\n <th class=\"__field-header\">\n <ax-check-box\n [value]=\"showOnlyChanges()\"\n (valueChange)=\"toggleShowOnlyChanges()\"\n class=\"__show-changes-toggle\"\n >\n <ax-label>\n {{ '@activity-log:components.compare-view.show-only-differences' | translate | async }}\n </ax-label>\n </ax-check-box>\n </th>\n @for (obj of remainingObjects(); track obj.id) {\n <th class=\"__object-header\" [attr.data-id]=\"obj.id\">\n <div class=\"__object-title\" [title]=\"obj.description\">\n <span>{{ obj.title | translate | async }}</span>\n @if (remainingObjects().length > 2) {\n <span class=\"__remove-object-button\" (click)=\"removeObject(obj.id)\">\n <i class=\"fa-light fa-times\"></i>\n </span>\n }\n </div>\n </th>\n }\n </tr>\n </thead>\n <tbody class=\"__tbody\">\n @for (field of filteredFields(); track field.path; let i = $index) {\n <tr\n class=\"__row\"\n [class.__row--odd]=\"i % 2 === 1\"\n [class.__row--has-differences]=\"hasUnequalValues(field.path)\"\n [class.__row--has-equal-values]=\"hasEqualValues(field.path)\"\n >\n <td class=\"__field-cell\">\n <div class=\"__field-content\">\n <div class=\"__field-title\">\n {{ field.title | translate | async }}\n </div>\n @if (field.description) {\n <div class=\"__field-description\">{{ field.description }}</div>\n }\n </div>\n </td>\n @for (obj of remainingObjects(); track obj.id; let objIndex = $index) {\n <td\n class=\"__object-cell\"\n [attr.data-id]=\"obj.id\"\n [class.__cell--changed]=\"hasValueChangedFromPrevious(field.path, objIndex) && isChangesMode()\"\n >\n @if (obj.context[field.path] !== undefined) {\n <div class=\"__object-content\">\n <axp-widgets-container [context]=\"obj.context\">\n <ng-container axp-widget-renderer [node]=\"field.widget\" [mode]=\"'view'\"></ng-container>\n </axp-widgets-container>\n </div>\n } @else {\n <div class=\"__object-placeholder\">---</div>\n }\n @if (hasValueChangingToNext(field.path, objIndex) && isChangesMode()) {\n <div class=\"__change-indicator\">\n <i class=\"fa-light fa-arrow-right\"></i>\n </div>\n }\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n</div>\n<!--\n #endregion\n-->\n","import { AXCommonModule, AXDataSource, AXDataSourceFilterOption, AXValueChangedEvent } from '@acorex/cdk/common';\nimport {\n AXDataTableComponent,\n AXDataTableModule,\n AXDataTableRowClick,\n AXDataTableRowDbClick,\n} from '@acorex/components/data-table';\nimport { AXPWidgetCoreModule } from '@acorex/platform/layout/widget-core';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, signal, viewChild } from '@angular/core';\n\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDropdownButtonModule } from '@acorex/components/dropdown-button';\nimport { AXFormModule } from '@acorex/components/form';\nimport { AXBasePageComponent } from '@acorex/components/page';\nimport { AXSearchBoxModule } from '@acorex/components/search-box';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\nimport { AXBadgeModule } from '@acorex/components/badge';\n\n// Import category tree types and component\nimport { AXPCategoryEntity } from \"@acorex/platform/core\";\nimport { AXPCategoryTreeDataSource, AXPCategoryTreeComponent } from '../category-tree';\nimport { isEmpty, isNil } from 'lodash-es';\n\n//#region ---- Types ----\n\nexport type AXPDataSelectorAllowCreate = 'none' | 'full' | 'quick';\n\nexport interface AXPDataSelectorColumn {\n name: string;\n title: string;\n visible: boolean;\n dataPath?: string;\n width?: string;\n widget: {\n type: string;\n options: any;\n };\n}\n\nexport interface AXPDataSelectorConfig {\n title: string;\n dataSource: AXDataSource<any>;\n columns: AXPDataSelectorColumn[];\n selectionMode: 'single' | 'multiple';\n searchFields?: { name: string; title: string }[];\n initialSearchTerm?: string;\n parentField?: string;\n allowCreate?: AXPDataSelectorAllowCreate;\n onCreate?: (mode: 'full' | 'quick') => Promise<any | null>;\n filters?: AXDataSourceFilterOption;\n selectedItemIds?: string[] | number[]; // IDs of items to select initially\n\n // Category Filter Configuration\n categoryFilter?: {\n enabled: boolean;\n title: string;\n dataSource: AXPCategoryTreeDataSource;\n filterField: string; // Required field in main dataSource to filter on\n filterOperator?: 'equal' | 'contains' | 'in'; // How to apply the filter\n width?: string; // Side panel width (default: '300px')\n };\n}\n\n//#endregion\n\n@Component({\n selector: 'axp-data-selector',\n templateUrl: './data-selector.component.html',\n styleUrl: './data-selector.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n AXCommonModule,\n AXButtonModule,\n AXFormModule,\n AXDecoratorModule,\n AXDropdownButtonModule,\n AXDataTableModule,\n AXSearchBoxModule,\n AXPWidgetCoreModule,\n AXTranslationModule,\n AXBadgeModule,\n AXPCategoryTreeComponent,\n ],\n inputs: [],\n})\nexport class AXPDataSelectorComponent extends AXBasePageComponent {\n\n //#region ---- Properties ----\n\n protected config = signal<AXPDataSelectorConfig>({\n title: '',\n dataSource: null!,\n columns: [],\n selectionMode: 'single',\n searchFields: [],\n initialSearchTerm: undefined,\n parentField: undefined,\n allowCreate: 'none',\n filters: undefined,\n selectedItemIds: undefined\n });\n\n protected searchTerm: string = '';\n protected searchPlaceholderText = signal<string>('');\n protected filter: AXDataSourceFilterOption;\n\n protected grid = viewChild<AXDataTableComponent>('grid');\n\n protected selectedItems = signal<any[]>([]);\n private initialSelectionApplied = false;\n private userHasInteracted = false;\n private isApplyingInitialSelection = false;\n private initialSelectedItems: any[] = []; // Track initial selection to calculate difference\n\n // Category Filter State\n protected activeCategoryFilter = signal<{\n node: AXPCategoryEntity;\n filterValue: any;\n } | null>(null);\n private placeholderUpdateToken = 0;\n private initialSearchApplied = false;\n\n //#endregion\n\n //#region ---- Services & Dependencies ----\n\n private readonly translationService = inject(AXTranslationService);\n\n //#endregion\n\n constructor() {\n super();\n effect(() => {\n const searchFields = this.config().searchFields;\n void this.updateSearchPlaceholder(searchFields);\n });\n\n effect(() => {\n const initialTerm = this.config().initialSearchTerm ?? '';\n if (!this.initialSearchApplied && initialTerm && initialTerm.trim().length > 0) {\n this.initialSearchApplied = true;\n this.searchTerm = initialTerm;\n queueMicrotask(() => this.applySearchFilter(initialTerm));\n }\n });\n }\n\n //#region ---- Computed Properties ----\n\n protected allowSelect = computed(() => this.selectedItems().length > 0);\n\n protected selectedCount = computed(() => this.selectedItems().length);\n\n protected hasSearch = computed(() => {\n const searchFields = this.config().searchFields;\n return searchFields && searchFields.length > 0;\n });\n\n // Category Tree Configuration\n protected categoryTreeConfig = computed(() => ({\n textField: 'title',\n valueField: 'id',\n showCheckbox: false,\n searchable: true,\n searchPlaceholder: '@general:terms.interface.category.search.placeholder',\n emptyStateTitle: '@general:terms.interface.category.search.no-records.title',\n emptyStateDescription: '@general:terms.interface.category.search.no-records.description',\n emptyStateIcon: 'fa-light fa-folder-open',\n }));\n\n // Category Tree Actions (no CRUD in filter mode)\n protected categoryTreeActions = computed(() => ({\n canCreate: false,\n canUpdate: false,\n canDelete: false,\n canCreateChild: false,\n }));\n\n //#endregion\n\n //#region ---- Lifecycle Methods ----\n\n protected override ngOnInit() {\n // Set config from data passed by popup service\n // The config will be automatically set by AXBasePageComponent\n }\n\n protected async ngAfterViewInit() {\n if (this.searchTerm) {\n this.applySearchFilter(this.searchTerm);\n } else {\n this.applyFilterAndSort();\n }\n\n // Wait for data to load, then apply initial selection using grid.selectRows()\n setTimeout(() => this.applyInitialSelection(), 300);\n }\n\n //#endregion\n\n //#region ---- Event Handlers ----\n\n protected handleRowDbClick(e: AXDataTableRowDbClick) {\n this.close({ items: [e.data] });\n }\n\n protected handleRowClick(e: AXDataTableRowClick) {\n // Mark user interaction\n this.userHasInteracted = true;\n\n // In single selection mode, update selectedItems directly since grid doesn't fire selectedRowsChange\n if (this.config().selectionMode === 'single') {\n this.selectedItems.set([e.data]);\n }\n // In multiple mode, selection is handled by the grid via checkboxes\n // The grid will fire handleSelectedRowsChange which updates our signal\n }\n\n protected async handleSelectedRowsChange(rows: unknown[]) {\n const newSelection = (rows as any[]) || [];\n\n // If we're applying initial selection, just update the signal\n // Otherwise, mark as user interaction and update\n if (!this.isApplyingInitialSelection) {\n this.userHasInteracted = true;\n }\n // Always update selectedItems from data table selection\n this.selectedItems.set(newSelection);\n }\n\n protected handleChangeSearchValue(e: AXValueChangedEvent) {\n if (e.isUserInteraction) {\n const value = e.value ?? '';\n this.searchTerm = value;\n this.applySearchFilter(value);\n }\n }\n\n protected async handleCreateNewClick(mode: 'full' | 'quick') {\n const onCreate = this.config().onCreate;\n if (!onCreate) return;\n\n const createdItem = await onCreate(mode);\n if (createdItem) {\n if (this.config().selectionMode === 'multiple') {\n const currentSelection = this.selectedItems();\n const newSelection = [...currentSelection, createdItem];\n this.selectedItems.set(newSelection);\n this.config().dataSource.refresh();\n // Close selector and return selection so the new item is added to the structure\n this.close({ items: newSelection });\n } else {\n this.close({ items: [createdItem] });\n }\n }\n }\n\n protected handleCloseClick() {\n this.close();\n }\n\n protected handleSelectClick() {\n const currentSelection = this.selectedItems();\n // Return the final selection (all currently selected items)\n // When selectedItemIds was provided, the caller will replace the initial selection\n // When selectedItemIds was not provided, the caller will merge as needed\n this.close({ items: currentSelection });\n }\n\n protected async handleExpandRow(row: any) {\n if (this.grid()) {\n await this.grid()!.expandRow(row);\n }\n }\n\n // Category Filter Event Handlers\n protected handleCategoryFilterClick(node: AXPCategoryEntity) {\n const categoryConfig = this.config().categoryFilter!;\n\n // Get the filter value from the node\n const filterValue = node.id;\n\n // Store active filter state\n this.activeCategoryFilter.set({\n node,\n filterValue\n });\n\n // Apply filter to main data source\n this.applyCategoryFilter(filterValue, categoryConfig);\n }\n\n protected clearCategoryFilter() {\n this.activeCategoryFilter.set(null);\n\n // Apply only base filters (without category filter)\n const baseFilters = this.config().filters;\n\n if (baseFilters) {\n this.config().dataSource.filter(baseFilters);\n } else {\n this.config().dataSource.clearFilter();\n }\n\n this.config().dataSource.refresh();\n }\n\n //#endregion\n\n //#region ---- Private Methods ----\n\n private applySearchFilter(searchTerm: string) {\n const searchFields = this.config().searchFields;\n if (!searchFields || searchFields.length === 0) {\n return;\n }\n\n const normalizedTerm = isNil(searchTerm) ? '' : `${searchTerm}`.trim();\n\n if (isEmpty(normalizedTerm)) {\n // Apply only base filters when search is cleared\n const baseFilters = this.config().filters;\n\n if (baseFilters) {\n this.config().dataSource.filter(baseFilters);\n } else {\n this.config().dataSource.clearFilter();\n }\n\n this.config().dataSource.refresh();\n return;\n }\n\n // Get base filters from config\n const baseFilters = this.config().filters;\n\n // Create search filters for all configured fields\n const searchFilters = searchFields.map((field) => ({\n field: field.name,\n value: normalizedTerm,\n operator: { type: 'contains' as const }\n }));\n\n const orFilter: AXDataSourceFilterOption = {\n field: null as any,\n logic: 'or',\n operator: null as any,\n filters: searchFilters\n };\n\n // Merge base filters with search filter\n const allFilters = baseFilters ? [baseFilters, orFilter] : [orFilter];\n\n const filter = {\n field: null as any,\n logic: 'and' as const,\n operator: null as any,\n filters: allFilters\n } as AXDataSourceFilterOption;\n\n // Apply filter to data source\n this.config().dataSource.filter(filter);\n this.config().dataSource.refresh();\n }\n\n private applyFilterAndSort() {\n // Apply base filters from config\n const baseFilters = this.config().filters;\n\n if (baseFilters) {\n this.config().dataSource.filter(baseFilters);\n this.config().dataSource.refresh();\n }\n }\n\n private applyCategoryFilter(filterValue: any, categoryConfig: any) {\n\n if (isNil(filterValue) || filterValue === 'root') {\n this.config().dataSource.clearFilter();\n this.config().dataSource.refresh();\n return;\n }\n\n // Get base filters from config\n const baseFilters = this.config().filters;\n\n // Create category filter\n const categoryFilter = {\n field: categoryConfig.filterField,\n value: filterValue,\n operator: { type: categoryConfig.filterOperator || 'contains' }\n };\n\n // Merge base filters with category filter\n const allFilters = baseFilters ? [baseFilters, categoryFilter] : [categoryFilter];\n\n const filter = {\n field: null as any,\n logic: 'and' as const,\n operator: null as any,\n filters: allFilters\n } as AXDataSourceFilterOption;\n\n // Apply filter to data source (adds to existing filters)\n this.config().dataSource.filter(filter);\n this.config().dataSource.refresh();\n }\n\n private async updateSearchPlaceholder(searchFields: { name: string; title: string }[] | undefined) {\n const updateToken = ++this.placeholderUpdateToken;\n\n if (!searchFields || searchFields.length === 0) {\n const fallback = await this.translationService.translateAsync('@general:actions.search.title');\n\n if (updateToken !== this.placeholderUpdateToken) {\n return;\n }\n\n const placeholder = fallback ? `${fallback}...` : '';\n this.searchPlaceholderText.set(placeholder);\n return;\n }\n\n const translatedFields = await Promise.all(\n searchFields.map(async (field) => {\n const translated = await this.translationService.translateAsync(field.title || field.name);\n return translated ?? field.title ?? field.name;\n })\n );\n\n //TODO: needs to extract base on columns\n const fieldsText = translatedFields\n .filter((value): value is string => Boolean(value && value.trim().length > 0))\n .join(', ') || searchFields.map((field) => field.title || field.name).join(', ');\n\n const placeholder = await this.translationService.translateAsync('@general:widgets.lookup.search.placeholder', {\n params: {\n fields: fieldsText\n }\n });\n\n if (updateToken !== this.placeholderUpdateToken) {\n return;\n }\n\n this.searchPlaceholderText.set(placeholder ?? `Search in ${fieldsText}...`);\n }\n\n /**\n * Apply initial selection based on selectedItemIds from config\n * Loads items by IDs using the data source's byKey method, then selects them in the grid\n */\n private async applyInitialSelection() {\n if (this.initialSelectionApplied || this.userHasInteracted) {\n return;\n }\n\n const selectedIds = this.config().selectedItemIds;\n if (!selectedIds || selectedIds.length === 0) {\n // No initial selection, so initialSelectedItems should be empty\n this.initialSelectedItems = [];\n this.initialSelectionApplied = true;\n return;\n }\n\n const grid = this.grid();\n if (!grid) {\n setTimeout(() => this.applyInitialSelection(), 100);\n return;\n }\n\n try {\n // Get the key field from data source\n const dataSource = this.config().dataSource;\n const dataSourceAny = dataSource as any;\n const keyField = dataSourceAny.config?.key || 'id';\n const byKeyMethod = dataSourceAny.config?.byKey;\n\n // First, try to find items in already loaded grid data\n const itemsToSelect: any[] = [];\n const maxAttempts = 10; // Try for up to 1 second (10 * 100ms)\n let attempts = 0;\n const missingIds: (string | number)[] = [];\n\n // Wait a bit for grid to initialize\n await new Promise(resolve => setTimeout(resolve, 200));\n\n while (attempts < maxAttempts) {\n if (this.userHasInteracted) {\n this.initialSelectionApplied = true;\n return;\n }\n\n // Get all rows from the grid (try different property names)\n const gridAny = grid as any;\n const allRows =\n gridAny.dataItems ||\n gridAny.items ||\n gridAny._dataItems ||\n gridAny.view?.dataItems ||\n gridAny.view?.items ||\n gridAny.dataSource?.data ||\n gridAny.dataSource?.items ||\n [];\n\n // If we have rows, try to find the items we need\n if (allRows.length > 0) {\n // Find rows that match the selected IDs\n selectedIds.forEach((id) => {\n const foundItem = allRows.find((row: any) => {\n const rowId = row[keyField];\n return String(id) === String(rowId);\n });\n\n if (foundItem) {\n // Check if we haven't already added this item\n if (!itemsToSelect.some(item => String(item[keyField]) === String(id))) {\n itemsToSelect.push(foundItem);\n }\n } else {\n // Track missing IDs\n if (!missingIds.includes(id) && !itemsToSelect.some(item => String(item[keyField]) === String(id))) {\n missingIds.push(id);\n }\n }\n });\n\n // If we found all items, break out of the loop\n if (itemsToSelect.length >= selectedIds.length) {\n break;\n }\n }\n\n await new Promise(resolve => setTimeout(resolve, 100));\n attempts++;\n }\n\n // If we have missing IDs and byKey method is available, load them from API\n if (missingIds.length > 0 && byKeyMethod && typeof byKeyMethod === 'function') {\n for (const id of missingIds) {\n try {\n const item = await byKeyMethod(id);\n if (item && !itemsToSelect.some(existing => String(existing[keyField]) === String(id))) {\n itemsToSelect.push(item);\n }\n } catch (error) {\n console.warn(`[DataSelector] Failed to load item with ID ${id}:`, error);\n }\n }\n }\n\n // Only mark as applied if we found items to select\n if (itemsToSelect.length > 0) {\n // Store initial selected items for later comparison\n this.initialSelectedItems = [...itemsToSelect];\n\n // Set flag to indicate we're applying initial selection\n this.isApplyingInitialSelection = true;\n\n try {\n // Update selectedItems signal first\n this.selectedItems.set(itemsToSelect);\n\n // Select the rows using the grid's selectRows method\n if (this.grid()?.selectRows) {\n if (itemsToSelect.length === 1) {\n this.grid()!.selectRows(itemsToSelect[0]);\n } else {\n this.grid()!.selectRows(...itemsToSelect);\n }\n }\n\n this.initialSelectionApplied = true;\n } finally {\n // Reset flag after a short delay to allow the event to process\n setTimeout(() => {\n this.isApplyingInitialSelection = false;\n }, 50);\n }\n } else {\n // No items found, mark as applied anyway to prevent infinite retries\n this.initialSelectionApplied = true;\n }\n } catch (error) {\n console.error('[DataSelector] Error applying initial selection:', error);\n this.isApplyingInitialSelection = false;\n this.initialSelectionApplied = true;\n }\n }\n\n //#endregion\n}\n","<div class=\"axp-data-selector\">\n <!-- Main Content Area -->\n <div class=\"axp-data-selector-content\" [class.with-category-filter]=\"config().categoryFilter?.enabled\">\n <!-- Category Filter Side Panel -->\n @if (config().categoryFilter?.enabled) {\n <div class=\"axp-category-filter-panel\" [style.width]=\"config().categoryFilter?.width || '300px'\">\n <axp-category-tree [dataSource]=\"config().categoryFilter!.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 <!-- TODO: needs to show checkbox for single selection mode too -->\n <ax-data-table #grid [showFooter]=\"false\" class=\"ax-h-[50vh]\" [paging]=\"true\"\n [loading]=\"{ enabled: true, animation: true }\" [dataSource]=\"config().dataSource\"\n [parentField]=\"config().parentField\" (selectedRowsChange)=\"handleSelectedRowsChange($event)\"\n (onRowClick)=\"handleRowClick($event)\" (onRowDbClick)=\"handleRowDbClick($event)\">\n @if (config().selectionMode === 'multiple') {\n <ax-select-column fixed=\"start\" [width]=\"'50px'\"></ax-select-column>\n }\n\n @for (col of config().columns; track col.name) {\n @if (col.visible) {\n <axp-widget-column-renderer [expandHandler]=\"$index === 0 && config().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 </ax-data-table>\n </div>\n </div>\n</div>\n\n<ax-footer>\n <ax-prefix>\n @if ((config().allowCreate === 'full' || config().allowCreate === 'quick') && config().onCreate) {\n <ax-button look=\"twotone\" color=\"primary\" [text]=\"'@general:actions.create.title' | translate | async\"\n (onClick)=\"handleCreateNewClick(config().allowCreate === '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 (config().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>","import { Injectable, inject, signal } from '@angular/core';\nimport { AXPopupService } from '@acorex/components/popup';\nimport { AXPDataSelectorConfig, AXPDataSelectorColumn } from './data-selector.component';\nimport { AXPCategoryTreeDataSource } from '../category-tree';\nimport { AXPExpressionEvaluatorService, AXPColumnWidthService, IColumnWithWidth } from '@acorex/platform/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AXPDataSelectorService {\n\n //#region ---- Services & Dependencies ----\n\n private readonly popupService = inject(AXPopupService);\n private readonly expressionService = inject(AXPExpressionEvaluatorService);\n private readonly columnWidthService = inject(AXPColumnWidthService);\n\n //#endregion\n\n //#region ---- Public Methods ----\n\n /**\n * Open data selector popup\n */\n async open(config: AXPDataSelectorConfig): Promise<{ items: any[] } | null> {\n const component = await import('./data-selector.component').then(c => c.AXPDataSelectorComponent);\n\n // Create a copy of config to avoid mutating the original\n const processedConfig = { ...config };\n\n // Evaluate filters if they exist\n if (processedConfig.filters) {\n processedConfig.filters = await this.expressionService.evaluate(processedConfig.filters);\n }\n\n // Apply column width resolution to all columns\n processedConfig.columns = this.applyColumnWidths(processedConfig.columns);\n\n const result = await this.popupService.open(component, {\n title: processedConfig.title,\n size: processedConfig.categoryFilter?.enabled ?\n 'lg'\n : (processedConfig.columns.length > 3 ? 'lg' : 'md'),\n data: {\n config: signal(processedConfig)\n }\n });\n\n return result.data || null;\n }\n\n\n /**\n * Open data selector with category filter\n */\n async openWithCategoryFilter(\n config: Omit<AXPDataSelectorConfig, 'categoryFilter'>,\n categoryFilterConfig: {\n title: string;\n dataSource: AXPCategoryTreeDataSource;\n filterField: string;\n filterOperator?: 'equal' | 'contains' | 'in';\n width?: string;\n }\n ): Promise<{ items: any[] } | null> {\n const enhancedConfig: AXPDataSelectorConfig = {\n ...config,\n categoryFilter: {\n enabled: true,\n ...categoryFilterConfig\n }\n };\n\n return this.open(enhancedConfig);\n }\n\n //#endregion\n\n //#region ---- Private Methods ----\n\n /**\n * Apply column width resolution to all columns using the column width service\n */\n private applyColumnWidths(columns: AXPDataSelectorColumn[]): AXPDataSelectorColumn[] {\n return columns.map((column) => {\n // Skip if column already has a width\n if (column.width) {\n return column;\n }\n\n // Convert to IColumnWithWidth interface for width resolution\n const columnWithWidth: IColumnWithWidth = {\n name: column.name,\n width: column.width,\n widget: {\n type: column.widget.type,\n },\n };\n\n // Resolve width using column width service\n const resolvedWidth = this.columnWidthService.resolveWidth(columnWithWidth);\n if (resolvedWidth) {\n return {\n ...column,\n width: resolvedWidth,\n };\n }\n\n return column;\n });\n }\n\n //#endregion\n}\n","import { InjectionToken } from '@angular/core';\nimport { AXPPageComponentProvider } from './page-component-registry.types';\n\n//#region ---- Injection Token ----\n\n/**\n * Injection token for page component providers\n * Use with multi: true to register multiple providers\n *\n * @example\n * ```typescript\n * providers: [\n * {\n * provide: AXP_PAGE_COMPONENT_PROVIDER,\n * useClass: MyPageComponentProvider,\n * multi: true,\n * }\n * ]\n * ```\n */\nexport const AXP_PAGE_COMPONENT_PROVIDER = new InjectionToken<AXPPageComponentProvider[]>(\n 'AXP_PAGE_COMPONENT_PROVIDER',\n);\n\n//#endregion\n\n","import { inject, Injectable, Type } from '@angular/core';\nimport { set } from 'lodash-es';\nimport { AXP_PAGE_COMPONENT_PROVIDER } from './page-component-registry.token';\nimport { AXPPageComponentDefinition } from './page-component-registry.types';\n\n//#region ---- Registry Service ----\n\n/**\n * Service for managing page components from multiple providers\n * Similar to AXPDataSourceDefinitionProviderService pattern\n *\n * @example\n * ```typescript\n * // In a module providers array:\n * {\n * provide: AXP_PAGE_COMPONENT_PROVIDER,\n * useClass: MyPageComponentProvider,\n * multi: true,\n * }\n *\n * // Example provider implementation:\n * export class MyPageComponentProvider implements AXPPageComponentProvider {\n * async components(): Promise<AXPPageComponentDefinition[]> {\n * return [\n * {\n * key: 'my-custom-page',\n * loader: () => import('./my-page.component').then(m => m.MyPageComponent),\n * },\n * ];\n * }\n * }\n *\n * // Later, get the component loader:\n * const loader = await pageComponentService.find('my-custom-page');\n * if (loader) {\n * const ComponentType = await loader();\n * // Use ComponentType\n * }\n * ```\n */\n@Injectable({ providedIn: 'root' })\nexport class AXPPageComponentRegistryService {\n private providers = inject(AXP_PAGE_COMPONENT_PROVIDER, { optional: true });\n\n /**\n * Get all component definitions from all providers\n */\n async components(): Promise<AXPPageComponentDefinition[]> {\n const components: AXPPageComponentDefinition[] = [];\n\n // Load from DI tokens; resolve lazy providers (provideLazyProvider uses useFactory that returns Promise<T>)\n if (Array.isArray(this.providers)) {\n for (const raw of this.providers) {\n const provider = await Promise.resolve(raw);\n if (provider && typeof provider.components === 'function') {\n set(provider, '__parent__', this);\n components.push(...(await provider.components()));\n }\n }\n }\n\n return components;\n }\n\n /**\n * Find a component loader by key\n */\n async find(key: string): Promise<(() => Type<any> | Promise<Type<any>>) | undefined> {\n const components = await this.components();\n const definition = components.find((c) => c.key === key);\n return definition?.loader;\n }\n\n /**\n * Check if a component exists by key\n */\n async exists(key: string): Promise<boolean> {\n const components = await this.components();\n return components.some((c) => c.key === key);\n }\n\n /**\n * Get all registered component keys\n */\n async getAll(): Promise<string[]> {\n const components = await this.components();\n return components.map((c) => c.key);\n }\n}\n\n//#endregion\n","import { Type } from '@angular/core';\n\n//#region ---- Component Definition ----\n\n/**\n * Definition for a page component that can be registered and loaded dynamically\n */\nexport interface AXPPageComponentDefinition {\n /**\n * Unique key to identify the component\n */\n key: string;\n\n /**\n * Loader function that returns the component type (supports lazy loading)\n */\n loader: () => Type<any> | Promise<Type<any>>;\n}\n\n//#endregion\n\n//#region ---- Provider Interface ----\n\n/**\n * Provider interface for registering page components\n * Similar to AXPDataSourceDefinitionProvider pattern\n */\nexport interface AXPPageComponentProvider {\n /**\n * Returns all component definitions provided by this provider\n */\n components(): Promise<AXPPageComponentDefinition[]>;\n}\n\n//#endregion\n","import {\n AXDragDirective,\n AXDragHandleDirective,\n AXDropListDirective,\n AXDropListDroppedEvent,\n moveItemInArray,\n} from '@acorex/cdk/drag-drop';\n\nimport { ChangeDetectionStrategy, Component, ViewEncapsulation, input, model, output } from '@angular/core';\nimport { AXPDragDropListItem } from './drag-drop-list.type';\n\n@Component({\n selector: 'axp-drag-drop-list',\n standalone: true,\n imports: [AXDragDirective, AXDragHandleDirective, AXDropListDirective],\n templateUrl: './drag-drop-list.component.html',\n styleUrls: ['./drag-drop-list.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'axp-drag-drop-list',\n },\n})\nexport class AXPDragDropListComponent {\n // Inputs\n items = model<AXPDragDropListItem[]>([]);\n listId = input<string>('');\n dropListGroup = input<string>('');\n orientation = input<'vertical' | 'horizontal'>('vertical');\n emptyMessage = input<string>('No items');\n disable = input<boolean>(false);\n\n // Outputs\n itemClick = output<AXPDragDropListItem>();\n dropListDropped = output<AXDropListDroppedEvent>();\n\n // Drag and drop handler - handles both reorder and transfer\n onDrop(event: AXDropListDroppedEvent): void {\n // Emit event for parent component\n this.dropListDropped.emit(event);\n\n // Handle reorder within same list automatically\n if (event.previousContainer === event.container) {\n const itemsCopy = [...this.items()];\n moveItemInArray(itemsCopy, event.previousIndex, event.currentIndex);\n this.items.set(itemsCopy);\n }\n // Transfers between lists are handled by parent component via the event\n }\n\n onItemClick(item: AXPDragDropListItem): void {\n if (!item.disabled) {\n this.itemClick.emit(item);\n }\n }\n}\n","<div\n class=\"axp-drag-drop-list-container ax-divide-y\"\n [attr.id]=\"listId()\"\n [attr.data-orientation]=\"orientation()\"\n axDropList\n [dropListGroup]=\"dropListGroup()\"\n [dropListOrientation]=\"orientation()\"\n (dropListDropped)=\"onDrop($event)\"\n [sortingDisabled]=\"disable()\"\n>\n @if (items().length === 0) {\n <div class=\"axp-drag-drop-list-empty\">\n <span class=\"axp-drag-drop-list-empty-message\">{{ emptyMessage() }}</span>\n </div>\n }\n\n @for (item of items(); track item.id; let i = $index) {\n <div\n class=\"axp-drag-drop-list-item\"\n [class.axp-drag-drop-list-item-disabled]=\"item.disabled\"\n [class]=\"item.cssClass\"\n axDrag\n [dragDisabled]=\"item.disabled || false\"\n (click)=\"onItemClick(item)\"\n >\n <div class=\"axp-drag-drop-list-item-handle\" axDragHandle>\n <i class=\"fa-solid fa-bars\"></i>\n </div>\n\n <div class=\"axp-drag-drop-list-item-content\">\n {{ item.content }}\n </div>\n </div>\n }\n</div>\n","/**\n * Shared types for expression builders (expression-builder, sort-builder, group-builder, etc.)\n */\n\n/** Unique identifier for expression nodes */\nexport type AXPExpressionNodeId = string;\n\n/** Logical operator type (AND, OR, etc.) */\nexport type AXPExpressionLogicType = 'and' | 'or' | 'not';\n\n/** Operation type (add, multiply, equal, etc.) */\nexport type AXPExpressionOperationType = string;\n\n/** Value source type (literal, field, parameter, etc.) */\nexport type AXPExpressionValueSourceType = 'literal' | 'field' | 'parameter';\n\n/** Field definition for value selectors */\nexport interface AXPExpressionFieldDefinition {\n id: string;\n title: string;\n dataType?: string;\n path?: string;\n /** Optional: for nested/related fields */\n children?: AXPExpressionFieldDefinition[];\n}\n\n/** Value operand in an expression */\nexport interface AXPExpressionValueOperand {\n sourceType: AXPExpressionValueSourceType;\n /** For field: field id; for literal: the value; for parameter: param key */\n value?: unknown;\n fieldId?: string;\n}\n\n/** Single operation node (leftOperand operator rightOperand) */\nexport interface AXPExpressionOperationNode {\n id: AXPExpressionNodeId;\n type: 'operation';\n operator: AXPExpressionOperationType;\n leftOperand: AXPExpressionValueOperand;\n rightOperand: AXPExpressionValueOperand;\n order?: number;\n}\n\n/** Group of operations with logical connective */\nexport interface AXPExpressionGroupNode {\n id: AXPExpressionNodeId;\n type: 'group';\n logic: AXPExpressionLogicType;\n children: AXPExpressionNode[];\n order?: number;\n}\n\n/** Union of expression node types */\nexport type AXPExpressionNode = AXPExpressionOperationNode | AXPExpressionGroupNode;\n\n/** Root expression tree */\nexport interface AXPExpressionTree {\n id: AXPExpressionNodeId;\n logic: AXPExpressionLogicType;\n children: AXPExpressionNode[];\n}\n","/**\n * Field definitions for expression builders.\n * Used by expression-builder, sort-builder, group-builder for value/field selection.\n */\n\nimport type { AXPExpressionFieldDefinition } from './expression-builder.types';\n\n/** Registry of available field definitions per context */\nexport const AXPExpressionFieldDefinitions: Record<string, AXPExpressionFieldDefinition[]> = {};\n\n/** Add field definitions for a given context */\nexport function registerFieldDefinitions(\n context: string,\n fields: AXPExpressionFieldDefinition[]\n): void {\n AXPExpressionFieldDefinitions[context] = fields;\n}\n\n/** Get field definitions for a context */\nexport function getFieldDefinitions(context: string): AXPExpressionFieldDefinition[] {\n return AXPExpressionFieldDefinitions[context] ?? [];\n}\n","/**\n * Logic operator definitions (AND, OR, NOT) for expression groups.\n */\n\nimport type { AXPExpressionLogicType } from './expression-builder.types';\n\nexport interface AXPExpressionLogicDefinition {\n value: AXPExpressionLogicType;\n text: string;\n /** Optional icon/key for UI */\n icon?: string;\n}\n\nexport const AXP_EXPRESSION_LOGIC_DEFINITIONS: AXPExpressionLogicDefinition[] = [\n { value: 'and', text: 'And' },\n { value: 'or', text: 'Or' },\n { value: 'not', text: 'Not' },\n];\n\nexport function getLogicDefinition(logic: AXPExpressionLogicType): AXPExpressionLogicDefinition | undefined {\n return AXP_EXPRESSION_LOGIC_DEFINITIONS.find((d) => d.value === logic);\n}\n","/**\n * Operation definitions (arithmetic, comparison, logical) for expression builder.\n */\n\nimport type { AXPExpressionOperationType } from './expression-builder.types';\n\nexport interface AXPExpressionOperationDefinition {\n value: AXPExpressionOperationType;\n text: string;\n /** Optional icon/symbol for UI */\n symbol?: string;\n /** Category for grouping in UI */\n category?: 'arithmetic' | 'comparison' | 'logical' | 'string';\n}\n\n/** Arithmetic operations */\nconst ARITHMETIC: AXPExpressionOperationDefinition[] = [\n { value: 'add', text: 'Add', symbol: '+', category: 'arithmetic' },\n { value: 'subtract', text: 'Subtract', symbol: '−', category: 'arithmetic' },\n { value: 'multiply', text: 'Multiply', symbol: '×', category: 'arithmetic' },\n { value: 'divide', text: 'Divide', symbol: '÷', category: 'arithmetic' },\n];\n\n/** Comparison operations */\nconst COMPARISON: AXPExpressionOperationDefinition[] = [\n { value: 'equal', text: 'Equal', symbol: '=', category: 'comparison' },\n { value: 'notEqual', text: 'Not equal', symbol: '≠', category: 'comparison' },\n { value: 'greaterThan', text: 'Greater than', symbol: '>', category: 'comparison' },\n { value: 'lessThan', text: 'Less than', symbol: '<', category: 'comparison' },\n { value: 'greaterOrEqual', text: 'Greater or equal', symbol: '≥', category: 'comparison' },\n { value: 'lessOrEqual', text: 'Less or equal', symbol: '≤', category: 'comparison' },\n];\n\nexport const AXP_EXPRESSION_OPERATION_DEFINITIONS: AXPExpressionOperationDefinition[] = [\n ...ARITHMETIC,\n ...COMPARISON,\n];\n\nexport function getOperationDefinition(\n operation: AXPExpressionOperationType\n): AXPExpressionOperationDefinition | undefined {\n return AXP_EXPRESSION_OPERATION_DEFINITIONS.find((d) => d.value === operation);\n}\n","//#region ---- Imports ----\n\nimport { AXDataSourceOperator, AXValueChangedEvent } from '@acorex/cdk/common';\nimport { AXCheckBoxModule } from '@acorex/components/check-box';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXLabelModule } from '@acorex/components/label';\nimport { AXSelectBoxModule } from '@acorex/components/select-box';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPFilterClause, AXPFilterDefinition } from '@acorex/platform/core';\nimport { AXPWidgetCoreModule, AXPWidgetNode } from '@acorex/platform/layout/widget-core';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n input,\n OnInit,\n output,\n signal,\n untracked,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\n//#endregion\n\n//#region ---- Interfaces ----\n\n/**\n * Selected field data emitted when condition changes\n */\nexport type ConditionBuilderSelectedField = {\n id: string;\n field: string;\n operator: AXDataSourceOperator['type'];\n value: unknown;\n isParametric?: boolean;\n};\n\n//#endregion\n\n//#region ---- Component ----\n\n@Component({\n selector: 'axp-condition-builder-condition',\n templateUrl: './condition-builder-condition.component.html',\n styleUrl: './condition-builder-condition.component.scss',\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n AXSelectBoxModule,\n AXDecoratorModule,\n AXCheckBoxModule,\n AXLabelModule,\n AXPWidgetCoreModule,\n AXTranslationModule,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXPConditionBuilderConditionComponent implements OnInit {\n //#region ---- Inputs / Outputs ----\n\n item = input.required<AXPFilterClause>();\n filterDefinitions = input<AXPFilterDefinition[]>([]);\n onResolveWidget = input<(fieldId: string) => string>();\n showFillByUser = input<boolean>(false);\n\n itemChange = output<ConditionBuilderSelectedField>();\n removeItem = output<string>();\n\n //#endregion\n\n //#region ---- Signals ----\n\n protected selectedField = signal<ConditionBuilderSelectedField | null>(null);\n\n protected filterNode = signal<AXPWidgetNode>({\n name: 'filter',\n path: 'filter',\n type: 'string-filter',\n mode: 'edit',\n options: {},\n });\n\n protected context = signal<Record<string, unknown>>({\n filter: {\n value: undefined,\n operation: { type: 'equal' },\n },\n });\n\n protected readonly availableFields = computed(() => {\n return this.filterDefinitions().map((def) => ({\n value: def.field,\n text: def.title,\n definition: def,\n }));\n });\n\n protected readonly currentFilterDefinition = computed(() => {\n const fieldId = this.selectedField()?.field;\n if (!fieldId) return undefined;\n return this.filterDefinitions().find((def) => def.field === fieldId);\n });\n\n protected readonly selectedFieldValue = computed(() => this.selectedField()?.field ?? '');\n\n //#endregion\n\n //#region ---- Lifecycle Methods ----\n\n ngOnInit(): void {\n const it = this.item();\n console.debug('[AXPConditionBuilderCondition] ngOnInit', {\n item: it,\n field: it?.field,\n value: it?.value,\n });\n this.selectedField.set({\n id: it?.id ?? '',\n field: it?.field ?? '',\n operator: it?.operator?.type ?? 'equal',\n value: it?.value ?? undefined,\n isParametric: (it as { isParametric?: boolean })?.isParametric ?? false,\n });\n this.updateFilterWidgetNode();\n this.updateContext();\n }\n\n constructor() {\n effect(() => {\n const it = this.item();\n const prev = untracked(() => this.selectedField());\n console.debug('[AXPConditionBuilderCondition] effect item changed', {\n item: it,\n prevField: prev?.field,\n prevValue: prev?.value,\n });\n if (it && (it.field !== prev?.field || it.value !== prev?.value)) {\n this.selectedField.set({\n id: it?.id ?? '',\n field: it?.field ?? '',\n operator: it?.operator?.type ?? 'equal',\n value: it?.value ?? undefined,\n isParametric: (it as { isParametric?: boolean })?.isParametric ?? false,\n });\n this.updateFilterWidgetNode();\n }\n });\n }\n\n //#endregion\n\n //#region ---- Private Methods ----\n\n private updateFilterWidgetNode(): void {\n const fieldId = this.selectedField()?.field;\n if (!fieldId) {\n this.filterNode.set({\n name: 'filter',\n path: 'filter',\n type: 'string-filter',\n mode: 'edit',\n options: {},\n });\n return;\n }\n\n const filterDef = this.currentFilterDefinition();\n if (!filterDef) return;\n\n const resolver = this.onResolveWidget();\n let widgetType = 'string-filter';\n if (resolver) {\n widgetType = resolver(fieldId);\n } else if (filterDef.widget?.type) {\n widgetType = filterDef.widget.type;\n }\n\n this.filterNode.set({\n name: 'filter',\n path: 'filter',\n type: widgetType,\n mode: 'edit',\n options: {\n ...filterDef.widget?.options,\n clearButton: true,\n hasClearButton: true,\n },\n });\n }\n\n private updateContext(): void {\n const selected = this.selectedField();\n this.context.set({\n filter: {\n value: selected?.value,\n operation: { type: selected?.operator ?? 'equal' },\n },\n });\n }\n\n //#endregion\n\n //#region ---- Event Handlers ----\n\n onFieldChange(event: AXValueChangedEvent): void {\n const fieldId = event.value as string;\n const filterDef = this.filterDefinitions().find((def) => def.field === fieldId);\n\n this.selectedField.update(\n (prev) =>\n ({\n ...prev,\n field: fieldId,\n operator: filterDef?.operator?.type ?? 'equal',\n value: undefined,\n isParametric: prev?.isParametric ?? false,\n }) as ConditionBuilderSelectedField,\n );\n\n this.updateFilterWidgetNode();\n // this.updateContext();\n // this.itemChange.emit(this.selectedField()!);\n }\n\n onContextChange(event: { data?: { filter?: { value?: unknown; operation?: { type?: string } } } }): void {\n console.log({ event });\n const filterData = event.data?.filter;\n if (!filterData) return;\n\n this.selectedField.update(\n (prev) =>\n ({\n ...prev,\n operator: filterData.operation?.type ?? prev?.operator ?? 'equal',\n value: filterData.value,\n }) as ConditionBuilderSelectedField,\n );\n\n this.updateContext();\n this.itemChange.emit(this.selectedField()!);\n }\n\n onFillByUserChange(checked: boolean): void {\n this.selectedField.update(\n (prev) =>\n ({\n ...prev,\n isParametric: checked,\n }) as ConditionBuilderSelectedField,\n );\n this.itemChange.emit(this.selectedField()!);\n }\n\n onRemoveClick(): void {\n this.removeItem.emit(this.item().id ?? '');\n }\n\n //#endregion\n}\n\n//#endregion\n","<div class=\"__condition-row\">\n <div class=\"__item-content\">\n <!-- Field Selector -->\n <div class=\"__field-selector\">\n <ax-select-box\n class=\"ax-sm\"\n [dataSource]=\"availableFields()\"\n [ngModel]=\"selectedFieldValue()\"\n (onValueChanged)=\"onFieldChange($event)\"\n valueField=\"value\"\n textField=\"text\"\n [placeholder]=\"('@data-management:metadata-definitions.components.query-builder.condition.select-field' | translate | async) || 'Select a field'\"\n [look]=\"'outline'\">\n </ax-select-box>\n </div>\n\n <!-- Filter Widget (Operator + Value) -->\n <div class=\"__operator-selector\">\n @if (selectedField()?.field && filterNode().type) {\n <axp-widgets-container\n class=\"__filter-widget-container\"\n [context]=\"context()\"\n (onContextChanged)=\"onContextChange($event)\">\n <ng-container axp-widget-renderer [node]=\"filterNode()\" [mode]=\"'edit'\">\n </ng-container>\n </axp-widgets-container>\n } @else {\n <div class=\"__filter-placeholder\">\n <span class=\"__placeholder-text\">{{\n ('@data-management:metadata-definitions.components.query-builder.condition.select-field-first' | translate | async) || 'Select a field first'\n }}</span>\n </div>\n }\n </div>\n\n <!-- Fill By User (optional) -->\n @if (showFillByUser()) {\n <div class=\"__fill-by-user\">\n <ax-check-box\n class=\"ax-text-xs\"\n [ngModel]=\"selectedField()?.isParametric\"\n (ngModelChange)=\"onFillByUserChange($event)\">\n <ax-label>\n {{ '@data-management:metadata-definitions.components.query-builder.condition.fill-by-user' | translate | async }}\n </ax-label>\n </ax-check-box>\n </div>\n }\n </div>\n</div>\n","//#region ---- Imports ----\n\nimport { AXPFilterClause, AXPFilterDefinition } from '@acorex/platform/core';\nimport { AXFilterLogic } from '@acorex/cdk/common';\nimport {\n AXDragDirective,\n AXDragHandleDirective,\n AXDropListDirective,\n AXDropListDroppedEvent,\n moveItemInArray,\n} from '@acorex/cdk/drag-drop';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDropdownButtonModule } from '@acorex/components/dropdown-button';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPWidgetRegistryService } from '@acorex/platform/layout/widget-core';\nimport {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n ElementRef,\n effect,\n inject,\n input,\n output,\n PLATFORM_ID,\n signal,\n untracked,\n} from '@angular/core';\nimport { CommonModule, isPlatformBrowser } from '@angular/common';\nimport {\n AXPConditionBuilderConditionComponent,\n ConditionBuilderSelectedField,\n} from './condition-builder-condition.component';\n\n//#endregion\n\n//#region ---- Component ----\n\n/**\n * Generic condition builder component.\n * Builds AXPFilterClause (logic/filters, field/operator/value) for use in outcome rules,\n * outcome actions, query builders, etc.\n *\n * Same structure as axp-where-builder: groups, AND/OR logic, add condition/group, drag-drop, move/remove.\n */\n@Component({\n selector: 'axp-condition-builder',\n templateUrl: './condition-builder.component.html',\n styleUrl: './condition-builder.component.scss',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n AXButtonModule,\n AXDropdownButtonModule,\n AXDecoratorModule,\n AXDragDirective,\n AXDragHandleDirective,\n AXDropListDirective,\n AXPConditionBuilderConditionComponent,\n AXTranslationModule,\n ],\n})\nexport class AXPConditionBuilderComponent {\n //#region ---- Services & Dependencies ----\n\n private readonly widgetRegistry = inject(AXPWidgetRegistryService);\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly destroyRef = inject(DestroyRef);\n private readonly platformId = inject(PLATFORM_ID);\n private readonly isBrowser = isPlatformBrowser(this.platformId);\n\n //#endregion\n\n //#region ---- Inputs / Outputs ----\n\n value = input<AXPFilterClause>({\n id: 'root',\n logic: 'and',\n filters: [],\n });\n\n filterDefinitions = input<AXPFilterDefinition[]>([]);\n\n /** When true, show \"Fill by user\" checkbox on each condition (e.g. for query parameters) */\n showFillByUser = input<boolean>(false);\n\n valueChange = output<AXPFilterClause>();\n\n //#endregion\n\n //#region ---- Signals ----\n\n protected queryData = signal<AXPFilterClause>({\n id: 'root',\n logic: 'and',\n filters: [],\n });\n\n protected readonly logicalOperatorsItems = [\n { value: 'and' as AXFilterLogic, text: 'And' },\n { value: 'or' as AXFilterLogic, text: 'Or' },\n ];\n\n protected getLogicDisplayText(logic: AXFilterLogic | undefined): string {\n return this.logicalOperatorsItems.find((o) => o.value === logic)?.text ?? 'And';\n }\n\n //#endregion\n\n //#region ---- Connector Layout ----\n\n private connectorLayoutRafId: number | null = null;\n private connectorResizeObserver: ResizeObserver | null = null;\n\n private initConnectorAutoLayout(): void {\n if (!this.isBrowser) return;\n const RO = (globalThis as { ResizeObserver?: typeof ResizeObserver }).ResizeObserver;\n if (!RO) {\n this.scheduleConnectorLayoutUpdate();\n return;\n }\n this.connectorResizeObserver = new RO(() => this.scheduleConnectorLayoutUpdate());\n this.connectorResizeObserver.observe(this.elementRef.nativeElement);\n this.destroyRef.onDestroy(() => {\n this.connectorResizeObserver?.disconnect();\n this.connectorResizeObserver = null;\n if (this.connectorLayoutRafId !== null) {\n cancelAnimationFrame(this.connectorLayoutRafId);\n this.connectorLayoutRafId = null;\n }\n });\n this.scheduleConnectorLayoutUpdate();\n }\n\n private scheduleConnectorLayoutUpdate(): void {\n if (!this.isBrowser) return;\n if (this.connectorLayoutRafId !== null) return;\n this.connectorLayoutRafId = requestAnimationFrame(() => {\n this.connectorLayoutRafId = null;\n this.updateConnectorCssVars();\n });\n }\n\n private updateConnectorCssVars(): void {\n const root = this.elementRef.nativeElement;\n const groups = Array.from(root.querySelectorAll<HTMLElement>('.__group'));\n for (const groupEl of groups) {\n const connectorEl = groupEl.querySelector<HTMLElement>('.__group-wrapper > .__group-connector');\n const conditionsEl = groupEl.querySelector<HTMLElement>('.__group-wrapper > .__conditions-container');\n if (!connectorEl || !conditionsEl) continue;\n const rows = Array.from(\n conditionsEl.querySelectorAll<HTMLElement>(\n ':scope > .__condition-item:not(.ax-drag-placeholder), :scope > .__group-empty'\n )\n );\n if (rows.length < 2) {\n groupEl.style.removeProperty('--qb-connector-top');\n groupEl.style.removeProperty('--qb-connector-bottom');\n continue;\n }\n const connectorRect = connectorEl.getBoundingClientRect();\n const firstRect = rows[0].getBoundingClientRect();\n const lastRect = rows[rows.length - 1].getBoundingClientRect();\n const firstCenterY = firstRect.top + firstRect.height / 2;\n const lastCenterY = lastRect.top + lastRect.height / 2;\n const topInset = Math.max(0, firstCenterY - connectorRect.top);\n const bottomInset = Math.max(0, connectorRect.bottom - lastCenterY);\n groupEl.style.setProperty('--qb-connector-top', `${topInset}px`);\n groupEl.style.setProperty('--qb-connector-bottom', `${bottomInset}px`);\n }\n }\n\n //#endregion\n\n //#region ---- Lifecycle ----\n\n constructor() {\n const initialValue = this.value();\n const normalized = this.normalizeOrder(initialValue ?? { id: 'root', logic: 'and', filters: [] });\n this.queryData.set(normalized);\n console.debug('[AXPConditionBuilder] constructor', {\n initialValue,\n normalizedFiltersCount: normalized?.filters?.length ?? 0,\n normalized,\n });\n\n let lastEmittedValue: AXPFilterClause | null = null;\n\n effect(() => {\n const val = this.value();\n const currentData = untracked(() => this.queryData());\n const incomingStr = val ? JSON.stringify(val) : null;\n const currentStr = JSON.stringify(currentData);\n const lastStr = lastEmittedValue ? JSON.stringify(lastEmittedValue) : null;\n const shouldUpdate = val && incomingStr !== currentStr && incomingStr !== lastStr;\n console.debug('[AXPConditionBuilder] effect value sync', {\n hasVal: !!val,\n filtersCount: val?.filters?.length ?? 0,\n shouldUpdate,\n });\n if (shouldUpdate) {\n this.queryData.set(this.normalizeOrder(val));\n }\n });\n\n effect(() => {\n this.queryData();\n this.scheduleConnectorLayoutUpdate();\n });\n\n afterNextRender(() => this.initConnectorAutoLayout());\n }\n\n //#endregion\n\n //#region ---- Private Helpers ----\n\n private generateId(): string {\n return Math.random().toString(36).substring(2, 11);\n }\n\n private updateValue(): void {\n const data = this.queryData();\n this.valueChange.emit(data);\n }\n\n private normalizeOrder(data: AXPFilterClause): AXPFilterClause {\n const normalizeFilters = (filters: AXPFilterClause[]): AXPFilterClause[] => {\n const withOrder = filters.map((filter, index) => {\n const normalized = {\n ...filter,\n id: filter.id ?? this.generateId(),\n order: filter.order ?? index,\n };\n if (normalized.filters && normalized.filters.length) {\n return { ...normalized, filters: normalizeFilters(normalized.filters) };\n }\n return normalized;\n });\n return withOrder.sort((a, b) => (a.order ?? 0) - (b.order ?? 0));\n };\n return {\n ...data,\n id: data.id ?? 'root',\n order: data.order ?? 0,\n filters: normalizeFilters(data.filters ?? []),\n };\n }\n\n protected getSortedFilters(filters: AXPFilterClause[]): AXPFilterClause[] {\n return [...filters].sort((a, b) => (a.order ?? 0) - (b.order ?? 0));\n }\n\n private findGroupById(id: string, node: AXPFilterClause = this.queryData()): AXPFilterClause | null {\n if (node.id === id && Array.isArray(node.filters)) return node;\n if (node.filters) {\n for (const child of node.filters) {\n const found = this.findGroupById(id, child);\n if (found) return found;\n }\n }\n return null;\n }\n\n protected getFilterDefinition(fieldId: string): AXPFilterDefinition | undefined {\n return this.filterDefinitions().find((def) => def.field === fieldId);\n }\n\n resolveDefaultFilterWidget(fieldId: string): string {\n const filterDef = this.getFilterDefinition(fieldId);\n if (!filterDef) return 'string-filter';\n try {\n const widgetConfig = this.widgetRegistry.resolve(filterDef.widget.type);\n return widgetConfig?.defaultFilterWidgetName || filterDef.widget.type || 'string-filter';\n } catch {\n return filterDef.widget.type || 'string-filter';\n }\n }\n\n //#endregion\n\n //#region ---- Public Methods ----\n\n addConditionToGroup(groupId: string): void {\n this.queryData.update((data) => {\n const findGroup = (node: AXPFilterClause): AXPFilterClause | null => {\n if (node.id === groupId && Array.isArray(node.filters)) return node;\n if (node.filters) {\n for (const child of node.filters) {\n const found = findGroup(child);\n if (found) return found;\n }\n }\n return null;\n };\n\n const targetGroup = data.id === groupId ? data : findGroup(data);\n const currentOrder = targetGroup?.filters?.length ?? 0;\n\n const newCondition: AXPFilterClause = {\n id: this.generateId(),\n field: '',\n value: undefined,\n operator: { type: 'equal' },\n order: currentOrder,\n };\n\n if (data.id === groupId) {\n return { ...data, filters: [...(data.filters ?? []), newCondition] };\n }\n\n const updateNode = (node: AXPFilterClause): AXPFilterClause => {\n if (node.id === groupId && Array.isArray(node.filters)) {\n return { ...node, filters: [...node.filters, newCondition] };\n }\n if (node.filters) return { ...node, filters: node.filters.map(updateNode) };\n return node;\n };\n\n return { ...data, filters: updateNode(data).filters ?? [] };\n });\n this.updateValue();\n }\n\n addGroupToGroup(parentGroupId: string): void {\n this.queryData.update((data) => {\n const findGroup = (node: AXPFilterClause): AXPFilterClause | null => {\n if (node.id === parentGroupId && Array.isArray(node.filters)) return node;\n if (node.filters) {\n for (const child of node.filters) {\n const found = findGroup(child);\n if (found) return found;\n }\n }\n return null;\n };\n\n const targetGroup = data.id === parentGroupId ? data : findGroup(data);\n const currentOrder = targetGroup?.filters?.length ?? 0;\n\n const newGroup: AXPFilterClause = {\n id: this.generateId(),\n logic: 'and',\n filters: [],\n order: currentOrder,\n };\n\n if (data.id === parentGroupId) {\n return { ...data, filters: [...(data.filters ?? []), newGroup] };\n }\n\n const updateNode = (node: AXPFilterClause): AXPFilterClause => {\n if (node.id === parentGroupId && Array.isArray(node.filters)) {\n return { ...node, filters: [...node.filters, newGroup] };\n }\n if (node.filters) return { ...node, filters: node.filters.map(updateNode) };\n return node;\n };\n\n return { ...data, filters: updateNode(data).filters ?? [] };\n });\n this.updateValue();\n }\n\n removeItem(id: string): void {\n this.queryData.update((data) => {\n const removeFromFilters = (filters: AXPFilterClause[]): AXPFilterClause[] =>\n filters\n .filter((f) => f.id !== id)\n .map((f) => ({ ...f, filters: f.filters ? removeFromFilters(f.filters) : f.filters }));\n return { ...data, filters: removeFromFilters(data.filters ?? []) };\n });\n this.updateValue();\n }\n\n updateCondition(condition: ConditionBuilderSelectedField): void {\n this.queryData.update((data) => {\n const updateFilters = (filters: AXPFilterClause[]): AXPFilterClause[] =>\n filters.map((f) => {\n if (f.id === condition.id) {\n return {\n ...f,\n field: condition.field,\n operator: { type: condition.operator },\n value: condition.value,\n isParametric: condition.isParametric,\n };\n }\n if (f.filters) return { ...f, filters: updateFilters(f.filters) };\n return f;\n });\n return { ...data, filters: updateFilters(data.filters ?? []) };\n });\n this.updateValue();\n }\n\n updateGroupLogicalOperator(groupId: string, operator: AXFilterLogic): void {\n this.queryData.update((data) => {\n if (data.id === groupId) return { ...data, logic: operator };\n const updateFilters = (filters: AXPFilterClause[]): AXPFilterClause[] =>\n filters.map((f) => {\n if (f.id === groupId && f.filters) return { ...f, logic: operator };\n if (f.filters) return { ...f, filters: updateFilters(f.filters) };\n return f;\n });\n return { ...data, filters: updateFilters(data.filters ?? []) };\n });\n this.updateValue();\n }\n\n reorderGroupItemsEvent(groupId: string, event: AXDropListDroppedEvent): void {\n this.reorderGroupItems(groupId, event.previousIndex, event.currentIndex);\n }\n\n reorderGroupItems(groupId: string, previousIndex: number, currentIndex: number): void {\n this.queryData.update((data) => {\n if (data.id === groupId) {\n const filters = [...(data.filters ?? [])];\n moveItemInArray(filters, previousIndex, currentIndex);\n return {\n ...data,\n filters: filters.map((f, i) => ({ ...f, order: i })),\n };\n }\n const updateFilters = (filters: AXPFilterClause[]): AXPFilterClause[] =>\n filters.map((f) => {\n if (f.id === groupId && f.filters) {\n const groupFilters = [...f.filters];\n moveItemInArray(groupFilters, previousIndex, currentIndex);\n return { ...f, filters: groupFilters.map((item, i) => ({ ...item, order: i })) };\n }\n if (f.filters) return { ...f, filters: updateFilters(f.filters) };\n return f;\n });\n return { ...data, filters: updateFilters(data.filters ?? []) };\n });\n this.updateValue();\n }\n\n //#endregion\n}\n\n//#endregion\n","<div class=\"axp-condition-builder\">\n <div class=\"__content\">\n <ng-container [ngTemplateOutlet]=\"groupTemplate\"\n [ngTemplateOutletContext]=\"{ group: queryData(), isRoot: true }\"></ng-container>\n </div>\n</div>\n\n<ng-template #groupTemplate let-group=\"group\" let-isRoot=\"isRoot\">\n <div class=\"__group\" [class.__root-group]=\"isRoot\" [class.__connectors-enabled]=\"(group.filters?.length ?? 0) > 1\">\n <div class=\"__group-wrapper\">\n @if ((group.filters?.length ?? 0) > 1) {\n <div class=\"__group-connector\">\n <div class=\"__operator-selector\">\n <ax-dropdown-button class=\"ax-xs __operator-chip\" [text]=\"getLogicDisplayText(group.logic)\"\n [mode]=\"'dropdown'\" [look]=\"'solid'\" [color]=\"'primary'\">\n <ax-button-item-list>\n @for (op of logicalOperatorsItems; track op.value) {\n <ax-button-item [text]=\"op.text\" [selected]=\"group.logic === op.value\"\n (onClick)=\"updateGroupLogicalOperator(group.id!, op.value)\">\n </ax-button-item>\n }\n </ax-button-item-list>\n </ax-dropdown-button>\n </div>\n </div>\n }\n\n <div class=\"__conditions-container\" axDropList (dropListDropped)=\"reorderGroupItemsEvent(group.id!, $event)\">\n @if ((group.filters?.length ?? 0) === 0) {\n <div class=\"__group-empty\">\n <ax-button class=\"ax-sm __add-rule-btn\" [look]=\"'twotone'\" [color]=\"'primary'\"\n [text]=\"'@data-management:metadata-definitions.components.query-builder.actions.add-rule.title' | translate | async\"\n (onClick)=\"addConditionToGroup(group.id!)\">\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-plus\"></ax-icon>\n </ax-prefix>\n </ax-button>\n <ax-button class=\"ax-sm __add-inner-group-btn\" [look]=\"'outline'\" [color]=\"'primary'\"\n [text]=\"'@data-management:metadata-definitions.components.query-builder.actions.add-inner-group.title' | translate | async\"\n (onClick)=\"addGroupToGroup(group.id!)\">\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-layer-group\"></ax-icon>\n </ax-prefix>\n </ax-button>\n </div>\n } @else {\n @for (item of getSortedFilters(group.filters || []); track item.id; let first = $first; let last = $last) {\n <div class=\"__condition-item\" axDrag [class.__is-first]=\"first && (group.filters?.length ?? 0) > 1\"\n [class.__is-last]=\"last && (group.filters?.length ?? 0) > 1\">\n <div class=\"__drag-handle\" axDragHandle>\n <ax-icon icon=\"fa-solid fa-grip-vertical\"></ax-icon>\n </div>\n\n <div class=\"__item-content\">\n @if (item.filters === undefined) {\n <axp-condition-builder-condition [item]=\"item\" [filterDefinitions]=\"filterDefinitions()\"\n [onResolveWidget]=\"resolveDefaultFilterWidget.bind(this)\" [showFillByUser]=\"showFillByUser()\"\n (itemChange)=\"updateCondition($event)\" (removeItem)=\"removeItem($event)\">\n </axp-condition-builder-condition>\n } @else {\n <ng-container [ngTemplateOutlet]=\"groupTemplate\" [ngTemplateOutletContext]=\"{ group: item }\">\n </ng-container>\n }\n </div>\n\n <div class=\"__item-controls\">\n <ax-button class=\"ax-sm __icon-btn\" [look]=\"'blank'\" [color]=\"'danger'\"\n [title]=\"'@data-management:metadata-definitions.components.query-builder.actions.remove.title' | translate | async\"\n (onClick)=\"removeItem(item.id!)\">\n <ax-icon icon=\"fa-light fa-trash-can\"></ax-icon>\n </ax-button>\n </div>\n </div>\n }\n\n }\n </div>\n </div>\n <!-- <div class=\"__add-condition-link ax-ps-16\">\n <ax-button class=\"ax-sm __add-condition-btn\" [look]=\"'link'\" [color]=\"'primary'\"\n [text]=\"'@data-management:metadata-definitions.components.query-builder.actions.add-condition.title' | translate | async\"\n (onClick)=\"addConditionToGroup(group.id!)\">\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-plus\"></ax-icon>\n </ax-prefix>\n </ax-button>\n </div> -->\n\n @if ((group.filters?.length ?? 0) > 0) {\n <div class=\"__group-actions\">\n <ax-button class=\"ax-sm __add-rule-btn\" [look]=\"'twotone'\" [color]=\"'primary'\"\n [text]=\"'@data-management:metadata-definitions.components.query-builder.actions.add-rule.title' | translate | async\"\n (onClick)=\"addConditionToGroup(group.id!)\">\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-plus\"></ax-icon>\n </ax-prefix>\n </ax-button>\n <ax-button class=\"ax-sm __add-inner-group-btn\" [look]=\"'outline'\" [color]=\"'primary'\"\n [text]=\"'@data-management:metadata-definitions.components.query-builder.actions.add-inner-group.title' | translate | async\"\n (onClick)=\"addGroupToGroup(group.id!)\">\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-layer-group\"></ax-icon>\n </ax-prefix>\n </ax-button>\n </div>\n }\n </div>\n</ng-template>","// Shared types and definitions for all expression builders\nexport * from './expression-builder.types';\nexport * from './field.definitions';\nexport * from './logic.definitions';\nexport * from './operation.definitions';\n\n// Builder components\nexport * from './condition-builder';\n","import { AXDataSource, AXEvent, AXHtmlEvent, AXValueChangedEvent } from '@acorex/cdk/common';\nimport { AXListNavigationModule } from '@acorex/cdk/list-navigation';\nimport { AXBadgeModule } from '@acorex/components/badge';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXPopoverComponent, AXPopoverModule } from '@acorex/components/popover';\nimport { AXSelectionListModule } from '@acorex/components/selection-list';\nimport { AXTagBoxComponent, AXTagBoxModule } from '@acorex/components/tag-box';\nimport { AXCalendarService } from '@acorex/core/date-time';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\nimport { ALL_DEFAULT_OPERATORS, AXPFilterOperatorMiddlewareService, AXPSettingsService } from '@acorex/platform/common';\nimport type { AXPContextChangeEvent, AXPExpressionEvaluatorScope } from '@acorex/platform/core';\nimport { AXPExpressionEvaluatorService, AXPFilterDefinition, AXPFilterQuery } from '@acorex/platform/core';\nimport {\n AXPWidgetCoreModule,\n AXPWidgetRendererDirective,\n} from '@acorex/platform/layout/widget-core';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n effect,\n HostListener,\n inject,\n input,\n linkedSignal,\n output,\n QueryList,\n signal,\n untracked,\n viewChild,\n ViewChildren,\n ViewEncapsulation,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { cloneDeep, get, isEqual } from 'lodash-es';\nimport type { Observable, Subscription } from 'rxjs';\nimport { Subject, filter as rxFilter } from 'rxjs';\n@Component({\n selector: 'axp-query-filters',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './query-filters.component.html',\n styleUrls: ['./query-filters.component.scss'],\n encapsulation: ViewEncapsulation.None,\n imports: [\n CommonModule,\n FormsModule,\n AXButtonModule,\n AXDecoratorModule,\n AXTranslationModule,\n AXPopoverModule,\n AXSelectionListModule,\n AXTagBoxModule,\n AXPWidgetCoreModule,\n AXListNavigationModule,\n AXBadgeModule,\n ],\n})\nexport class AXPQueryFiltersComponent {\n protected translate = inject(AXTranslationService);\n protected calendarService = inject(AXCalendarService);\n private filterOperatorMiddleware = inject(AXPFilterOperatorMiddlewareService);\n private settingsService = inject(AXPSettingsService);\n private readonly expressionEvaluator = inject(AXPExpressionEvaluatorService);\n\n filtersDefinitions = input<AXPFilterDefinition[]>([]);\n initialFilters = input<AXPFilterQuery[]>([]);\n onFiltersChanged = output<AXPFilterQuery[]>();\n\n protected dateFormat = signal<string>('YYYY/MM/DD');\n\n protected tagBox = viewChild<AXTagBoxComponent>('tagBox');\n protected widgetRenderer = viewChild<AXPWidgetRendererDirective>('widgetRenderer');\n tagBoxInput!: any;\n\n @ViewChildren('caseItem') listItems!: QueryList<any>;\n\n protected selectedField = signal<string | null>(null);\n protected selectedFilters = linkedSignal<AXPFilterDefinition[]>(\n () => this.convertQueriesToDefinitions(this.initialFilters()),\n {\n equal: isEqual,\n },\n );\n\n context = linkedSignal<any>(() => this.convertQueriesToContext(this.initialFilters()));\n\n protected activeFilter = signal<AXPFilterDefinition | null>(null);\n\n protected asyncTags = signal<any[]>([]);\n\n protected popover = viewChild<AXPopoverComponent>('popover');\n\n inputValue = signal<string>('');\n\n protected readonly disabledByField = signal<Record<string, boolean>>({});\n\n /** Emits when a filter context entry changes (aligned with `widget-renderer` `events.context`). */\n private readonly filterContextPath$ = new Subject<{ path: string }>();\n\n private filterContextPathSnapshotReady = false;\n\n private previousFilterContextSnapshot: Record<string, unknown> = {};\n\n inlineFilters = () => {\n return this.filtersDefinitions().filter(\n (f) =>\n f.filterType.inline &&\n !this.filterOperatorMiddleware\n .transformFilters(this.selectedFilters())\n .some(\n (sf) =>\n sf.field === f.field &&\n sf.operator?.type === (this.context()[sf.field!]?.operation?.type || f.operator?.type),\n ),\n );\n };\n\n protected getDisplayValue = async (filter: AXPFilterDefinition, val: any) => {\n if (filter.widget?.type === 'document-file-type-filter') {\n const dataSource = filter.widget.options?.['dataSource'];\n const valueField = filter.widget.options?.['valueField'] ?? 'name';\n const textField = filter.widget.options?.['textField'] ?? 'title';\n if (Array.isArray(dataSource)) {\n if (Array.isArray(val)) {\n return (dataSource as Record<string, unknown>[])\n .filter((d) => val.includes(d[valueField]))\n .map((d) => d[textField])\n .join(', ');\n }\n const record = (dataSource as Record<string, unknown>[]).find((d) => d[valueField] === val);\n return record ? String(record[textField] ?? val) : String(val ?? '');\n }\n }\n if (filter.widget?.type === 'select-editor' || filter.widget?.type === 'select-filter') {\n const dataSource: AXDataSource = filter.widget.options?.['dataSource'];\n const textField = filter.widget.options?.['textField'];\n const valueField = filter.widget.options?.['valueField'];\n if (dataSource?.config?.byKey) {\n if (Array.isArray(val)) {\n const results: unknown[] = await Promise.all(val.map((v) => dataSource.config.byKey!(v)));\n return results.map((data) => (data as Record<string, any>)[textField]).join(', ');\n } else {\n const data = (await dataSource.config.byKey(val)) as Record<string, any>;\n return data?.[textField] || val;\n }\n } else if (Array.isArray(dataSource)) {\n if (Array.isArray(val)) {\n return dataSource.map((data) => (data as Record<string, any>)[textField]).join(', ');\n } else {\n const record: any = dataSource.find((d: any) => d[valueField] === val);\n return record ? record[textField] : '';\n }\n }\n }\n return typeof val === 'object' && !Array.isArray(val)\n ? `${this.convertIfISOStringDate(val.from)} and ${this.convertIfISOStringDate(val.to)}`\n : this.convertIfISOStringDate(val);\n };\n\n protected convertIfISOStringDate = (val: string) => {\n const isISOStringDate = /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$/.test(val);\n if (isISOStringDate) {\n const dateResult = this.calendarService.convert(val);\n return dateResult.format(this.dateFormat());\n }\n return val;\n };\n\n convertQueriesToDefinitions(queries: AXPFilterQuery[]): AXPFilterDefinition[] {\n const definitions = this.filtersDefinitions();\n\n return queries.map((q) => {\n const definition = definitions.find((p) => p.field === q.field);\n return {\n field: q.field,\n operator: q.operator,\n value: q.value,\n title: definition?.title ?? q.displayText ?? '',\n widget: definition?.widget!,\n filterType: definition?.filterType!,\n hidden: q.hidden,\n };\n });\n }\n\n convertQueriesToContext(queries: AXPFilterQuery[]): any {\n return queries.reduce((acc, q) => {\n acc[q.field!] = { value: q.value, operation: q.operator, displayText: q.displayText };\n return acc;\n }, {} as any);\n }\n\n filterFields = () => {\n return this.filtersDefinitions().filter((f) => {\n return (\n f.filterType.advance &&\n !this.selectedFilters().some((sf) => {\n return sf.field === f.field;\n })\n );\n });\n };\n\n #dateFormatEffect = effect(async () => {\n const format = await this.settingsService.get('regional:short-date');\n this.dateFormat.set(format || 'YYYY/MM/DD');\n });\n\n ngOnInit(): void {\n this.tagBoxInput = this.tagBox()?.getHostElement().querySelector('input');\n }\n\n handleSelectField(field: AXPFilterDefinition) {\n if (this.isFilterDisabled(field)) {\n return;\n }\n this.activeFilter.set(field);\n this.tagBox()?.inputValue.set('');\n }\n handleFieldKeyDown(e: KeyboardEvent, field: AXPFilterDefinition) {\n if (this.isFilterDisabled(field)) {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n }\n return;\n }\n if (e.key === 'Enter') {\n this.handleSelectField(field);\n\n if (this.tagBoxInput && (field.widget.type === 'string-filter' || field.widget.type === 'number-filter')) {\n this.context.update((prev) => {\n return {\n ...prev,\n [field.field!]: {\n value: this.tagBoxInput?.value,\n operation: { type: 'contains' },\n },\n };\n });\n }\n }\n }\n\n onContextChanged(e: AXPContextChangeEvent) {\n this.context.set(e.data);\n }\n\n handleApplyFilter() {\n const reservedFitler = this.activeFilter();\n\n if (reservedFitler) {\n const { field } = reservedFitler;\n const selectedFiltersFields = this.selectedFilters().map((f) => f.field);\n const context = this.context();\n\n if (selectedFiltersFields.includes(field)) {\n this.selectedFilters.update((prev) =>\n prev.map((f) => (f.field === field ? { ...f, value: context[field!] } : f)),\n );\n } else {\n this.selectedFilters.update((prev) => [...prev, reservedFitler]);\n }\n this.activeFilter.set(null);\n this.popover()?.close();\n }\n }\n\n handleButtonKeyDown(e: Event) {\n if (this.popover()?.isOpen && !this.activeFilter()) {\n // Find first list item and focus it\n const firstItem = document.querySelector('[axListNavigationItem]') as HTMLElement;\n if (firstItem) {\n firstItem.focus();\n e?.preventDefault();\n }\n }\n }\n\n handleKeyDown(e: AXHtmlEvent<KeyboardEvent>) {\n if (e.nativeEvent?.key === 'ArrowDown') {\n if (this.popover()?.isOpen && !this.activeFilter()) {\n // Find first list item and focus it\n const firstItem = document.querySelector('[axListNavigationItem]') as HTMLElement;\n if (firstItem) {\n firstItem.focus();\n e.nativeEvent?.preventDefault();\n }\n } else {\n this.popover()?.open();\n }\n } else if (e.nativeEvent?.key === 'Enter' && this.tagBox()?.inputValue()?.trim()) {\n e.nativeEvent?.preventDefault();\n e.nativeEvent?.stopPropagation();\n this.handleAddAllInlineFilters();\n this.popover()?.close();\n }\n }\n\n onEnterKeyPressed(e: Event) {\n e.preventDefault();\n e.stopPropagation();\n this.handleApplyFilter();\n }\n\n handleTagClick(item: any) {\n if (item.field === 'all') {\n return;\n }\n this.activeFilter.set(item);\n this.popover()?.open();\n }\n\n handleRemoveTag(e: Event, index: number) {\n e.preventDefault();\n e.stopPropagation();\n this.tagBox()?.removeItem(index);\n }\n\n #emitFiltersEffect = effect(() => {\n // Prevent emitting while a filter is actively being edited\n const isEditing = this.activeFilter();\n if (isEditing) {\n return;\n }\n\n const selectedFilters = this.selectedFilters();\n const context = untracked(() => this.context());\n\n untracked(() => {\n // 1. Separate \"all\" filter from others\n const allFilter = selectedFilters.find((f) => f.field === 'all');\n const otherFilters = selectedFilters.filter((f) => f.field !== 'all');\n\n let convertedFilters: AXPFilterQuery[] = [];\n\n // 2. Convert regular filters\n otherFilters.forEach((f) => {\n convertedFilters.push({\n field: f.field,\n value: context[f.field!]?.value ?? f.value, // Prefer context, fallback to filter value\n hidden: f.hidden,\n operator: context[f.field!]?.operation ?? f.operator,\n displayText: context[f.field!]?.displayText,\n });\n });\n\n // 3. If \"all\" filter exists, create a nested filter with OR logic\n if (allFilter) {\n const allValue = allFilter.value; // Get value from filter definition\n const inlineFieldsFilters = this.filtersDefinitions()\n .filter((f) => f.filterType.inline)\n .map(\n (f) =>\n ({\n field: f.field,\n operator: { type: 'contains' },\n value: allValue,\n }) as AXPFilterQuery,\n );\n\n // Create a single filter with nested OR logic\n if (inlineFieldsFilters.length > 0) {\n convertedFilters.push({\n field: 'all',\n operator: { type: 'contains' },\n value: allValue,\n logic: 'or',\n filters: inlineFieldsFilters,\n hidden: false,\n displayText: 'All',\n });\n }\n }\n\n // 4. Build new context from selectedFilters (source of truth)\n const newContext: any = {};\n\n // Add context for regular filters\n otherFilters.forEach((f) => {\n newContext[f.field!] = {\n value: context[f.field!]?.value ?? f.value ?? context[f.field!]?.value, // Prefer context, fallback to filter value\n operation: context[f.field!]?.operation || f.operator,\n displayText: context[f.field!]?.displayText ?? context[f.field!]?.displayText,\n };\n });\n\n // Add context for \"all\" filter\n if (allFilter) {\n newContext['all'] = {\n value: allFilter.value,\n operation: { type: 'contains' },\n };\n }\n\n this.context.set(newContext);\n this.deactivateAllListItems();\n this.onFiltersChanged.emit(convertedFilters);\n });\n });\n\n /**\n * When filter context entries change, notify `events.context` subscribers (same semantics as `widget-renderer`).\n */\n #emitFilterContextPathEffect = effect(() => {\n const ctx = this.context();\n untracked(() => {\n if (!this.filterContextPathSnapshotReady) {\n this.previousFilterContextSnapshot = cloneDeep(ctx) as Record<string, unknown>;\n this.filterContextPathSnapshotReady = true;\n return;\n }\n const prev = this.previousFilterContextSnapshot;\n const keys = new Set([...Object.keys(prev), ...Object.keys(ctx ?? {})]);\n for (const path of keys) {\n if (path === 'all') {\n continue;\n }\n if (!isEqual(prev[path], (ctx as Record<string, unknown>)?.[path])) {\n this.filterContextPath$.next({ path });\n }\n }\n this.previousFilterContextSnapshot = cloneDeep(ctx) as Record<string, unknown>;\n });\n });\n\n handleSelectFilters(e: AXValueChangedEvent) {\n if (e.value?.length < this.selectedFilters().length) {\n const hiddenFilters = this.selectedFilters().filter((f) => f.hidden);\n this.selectedFilters.update((prev) => {\n return hiddenFilters.concat(e.value);\n });\n }\n }\n\n handleAddAllInlineFilters() {\n const inputValue = this.tagBox()?.inputValue();\n\n // Check if input is empty\n if (!inputValue?.trim() || !this.filtersDefinitions().some((f) => f.filterType.inline)) {\n return;\n }\n\n // Remove existing \"all\" filter (if exists) and add new one with updated value\n // This creates a new reference and triggers the effect\n\n this.selectedFilters.update((prev) => {\n const withoutAll = prev.filter((f) => f.field !== 'all');\n return [\n ...withoutAll,\n {\n title: 'All',\n field: 'all',\n operator: { type: 'contains' },\n value: inputValue, // Store value in filter definition\n widget: { type: 'text-box' },\n filterType: { inline: true, advance: false },\n },\n ];\n });\n\n this.tagBox()?.inputValue.set('');\n }\n\n protected getActiveOperator(filter: AXPFilterDefinition | null) {\n if (!filter) {\n return undefined;\n }\n\n const contextOperation = this.context()?.[filter.field!]?.operation?.type;\n const operatorType = contextOperation || filter.operator?.type;\n\n return ALL_DEFAULT_OPERATORS.find((o) => o.name === operatorType)?.title;\n }\n\n handleSelectInlineFilter(filter: AXPFilterDefinition) {\n if (this.isFilterDisabled(filter)) {\n return;\n }\n const inputValue = this.tagBox()?.inputValue();\n\n // Add filter with value stored in the filter definition\n this.selectedFilters.update((prev) => [\n ...prev,\n {\n ...filter,\n value: inputValue, // Store value in filter\n },\n ]);\n\n this.tagBox()?.inputValue.set('');\n this.popover()?.close();\n }\n\n handleInlineFilterKeyDown(e: KeyboardEvent, filter: AXPFilterDefinition) {\n if (e.key === 'Enter') {\n this.handleSelectInlineFilter(filter);\n }\n }\n\n handlePopoverClosed(e: AXEvent) {\n this.activeFilter.set(null);\n }\n\n protected onPopoverOpened(e: AXEvent) {\n if (this.filtersDefinitions().length === 0) {\n this.popover()?.close();\n }\n }\n\n protected deactivateAllListItems(): void {\n if (this.listItems) {\n this.listItems.forEach((item) => {\n if (item.isActive()) {\n item.isActive.set(false);\n }\n });\n }\n }\n\n #updateTagsEffect = effect(() => {\n const filters = this.selectedFilters();\n const context = this.context();\n\n Promise.all(\n filters.map(async (filter) => {\n const val = context[filter.field!]?.value;\n const displayText = context[filter.field!]?.displayText;\n\n const displayValue = displayText ? displayText : await this.getDisplayValue(filter, val);\n return {\n ...filter,\n query: `${this.translate.translateSync(filter.title)} ${this.translate.translateSync(this.getActiveOperator(filter)!) || ''} '${displayValue}'`,\n };\n }),\n ).then((results) => {\n this.asyncTags.set(results.filter((r) => !r.hidden));\n });\n });\n\n #disabledEvaluationEffect = effect(() => {\n const definitions = this.filtersDefinitions();\n const filtersContext = this.context();\n\n void (async () => {\n const entries = await Promise.all(\n definitions.map(async (def): Promise<[string, boolean] | null> => {\n const field = def.field;\n if (!field) {\n return null;\n }\n\n if (typeof def.disabled === 'boolean') {\n return [field, def.disabled];\n }\n\n if (typeof def.disabled === 'string' && this.expressionEvaluator.isExpression(def.disabled)) {\n const scope = this.createExpressionScope(filtersContext) as unknown as AXPExpressionEvaluatorScope;\n const result = await this.expressionEvaluator.evaluate(def.disabled, scope);\n return [field, Boolean(result)];\n }\n\n return [field, false];\n }),\n );\n\n const nextMap: Record<string, boolean> = {};\n for (const e of entries) {\n if (!e) continue;\n const [field, isDisabled] = e;\n nextMap[field] = isDisabled;\n }\n\n this.disabledByField.set(nextMap);\n })();\n });\n\n protected isFilterDisabled(definition: AXPFilterDefinition): boolean {\n if (typeof definition.disabled === 'boolean') {\n return definition.disabled;\n }\n\n const field = definition.field;\n if (!field) {\n return false;\n }\n\n return Boolean(this.disabledByField()[field]);\n }\n\n private createExpressionScope(filtersContext: unknown): Record<string, unknown> {\n const base = (filtersContext ?? {}) as Record<string, unknown>;\n\n return {\n ...base,\n filters: base,\n context: {\n eval: (path: string) => {\n const entry = get(base, path) as { value?: unknown } | undefined;\n return entry?.value;\n },\n },\n };\n }\n\n /**\n * Subscribes to each filter definition `triggers` like `AXPWidgetRendererDirective.assignTriggers`:\n * event expression must evaluate to an Observable (e.g. `{{ events.context('countryId') }}`).\n */\n #filterTriggersFromDefinitionsEffect = effect((onCleanup) => {\n const definitions = this.filtersDefinitions();\n const subs: Subscription[] = [];\n let cancelled = false;\n\n onCleanup(() => {\n cancelled = true;\n subs.forEach((s) => s.unsubscribe());\n });\n\n void (async () => {\n for (const def of definitions) {\n if (cancelled) {\n return;\n }\n if (!def.field) {\n continue;\n }\n if (!def.triggers?.length) {\n continue;\n }\n for (const trigger of def.triggers) {\n if (cancelled) {\n return;\n }\n if (trigger.disabled) {\n continue;\n }\n try {\n const scope = this.buildFilterTriggerScope(def);\n const eventResult = await this.expressionEvaluator.evaluate(trigger.event, scope);\n if (cancelled) {\n return;\n }\n if (this.isObservableLike(eventResult)) {\n const sub = eventResult.subscribe(() => {\n void this.expressionEvaluator.evaluate(trigger.action, this.buildFilterTriggerScope(def));\n });\n subs.push(sub);\n }\n } catch {\n // ignore\n }\n }\n }\n })();\n });\n\n private isObservableLike(value: unknown): value is Observable<unknown> {\n return Boolean(value) && typeof (value as Observable<unknown>).subscribe === 'function';\n }\n\n private buildFilterTriggerScope(def: AXPFilterDefinition): AXPExpressionEvaluatorScope {\n const filtersContext = this.context();\n const base = (filtersContext ?? {}) as Record<string, unknown>;\n\n return {\n context: {\n eval: (path: string) => {\n const entry = get(base, path) as { value?: unknown } | undefined;\n return entry?.value;\n },\n set: (path: string, value: unknown) => {\n this.context.update((prev) => ({\n ...prev,\n [path]: { ...(prev[path] as object), value },\n }));\n },\n data: () => () => filtersContext,\n isDirty: () => false,\n },\n events: this.getFilterEventScope(),\n widget: this.getFilterWidgetScopeForDefinition(def),\n methods: {},\n vars: {},\n } as unknown as AXPExpressionEvaluatorScope;\n }\n\n private getFilterEventScope(): { [name: string]: (...args: unknown[]) => Observable<unknown> } {\n return {\n context: (...args: unknown[]) => {\n const path = args[0] as string | undefined;\n return this.filterContextPath$.pipe(\n rxFilter((e) => {\n if (path == null || path === '') {\n return true;\n }\n if (!e.path) {\n return false;\n }\n if (path.endsWith('*')) {\n const prefix = path.substring(0, path.length - 1);\n return e.path.startsWith(prefix);\n }\n if (path.startsWith('*')) {\n const suffix = path.substring(1);\n return e.path.endsWith(suffix);\n }\n return e.path === path;\n }),\n ) as Observable<unknown>;\n },\n };\n }\n\n private getFilterWidgetScopeForDefinition(def: AXPFilterDefinition): { [name: string]: (...args: unknown[]) => unknown } {\n const field = def.field!;\n return {\n call: () => undefined,\n setValue: (...args: unknown[]) => {\n const value = args[0];\n this.context.update((prev) => ({\n ...prev,\n [field]: { ...(prev[field] as object), value },\n }));\n },\n clear: () => {\n this.removeFilterFieldByName(field);\n },\n refresh: () => {\n this.context.update((c) => ({ ...c }));\n },\n output: () => undefined,\n find: (...args: unknown[]) => {\n const id = String(args[0] ?? '');\n return {\n clear: () => this.removeFilterFieldByName(id),\n };\n },\n };\n }\n\n private removeFilterFieldByName(fieldName: string): void {\n this.selectedFilters.update((prev) => prev.filter((f) => f.field !== fieldName));\n }\n\n //#region ---- Widget Focus Effect ----\n\n /**\n * Auto-focus widget when component ref is ready and filter is active\n * This reactive approach eliminates the need for setTimeout\n */\n #focusEffect = effect(() => {\n const renderer = this.widgetRenderer();\n const activeFilter = this.activeFilter();\n\n // Early return if no renderer or no active filter\n if (!renderer || !activeFilter) {\n return;\n }\n\n // Listen to componentRefSignal reactively\n const componentRef = renderer.componentRefSignal();\n\n // When componentRef is set (not null), focus the widget\n if (componentRef) {\n const componentInstance = componentRef.instance;\n\n // Try to use the component's native focus method\n if (componentInstance && typeof componentInstance.focus === 'function') {\n try {\n componentInstance.focus();\n } catch (error) {\n // console.error('Error focusing widget component:', error);\n }\n }\n }\n });\n\n @HostListener('document:keydown', ['$event'])\n protected async handleKeyboardEvent(event: KeyboardEvent) {\n if (event.ctrlKey) {\n switch (event.code) {\n case 'KeyF':\n event.preventDefault();\n event.stopPropagation();\n this.tagBox()?.focus();\n break;\n }\n }\n }\n\n //#endregion\n}\n","<div class=\"ax-flex ax-items-center ax-gap-2 ax-p-2\">\n <ax-button (keydown)=\"handleButtonKeyDown($event)\" (onClick)=\"popover.open()\" #filterButton [look]=\"'blank'\">\n <ax-icon class=\"far fa-bars-filter ax-cursor-pointer\"> </ax-icon>\n </ax-button>\n <ax-tag-box\n #tagBoxComponent\n [ngModel]=\"asyncTags()\"\n (onValueChanged)=\"handleSelectFilters($event)\"\n [textField]=\"'query'\"\n [valueField]=\"'id'\"\n [readonly]=\"filtersDefinitions().length === 0\"\n [look]=\"'none'\"\n [readonlyField]=\"'readOnly'\"\n [tagTemplate]=\"tagTemplate\"\n (onKeyDown)=\"handleKeyDown($event)\"\n [addOnEnter]=\"false\"\n [placeholder]=\"\n (filtersDefinitions().length === 0\n ? '@general:terms.interface.filter.no-filter-definitions'\n : '@general:terms.interface.filter.placeholder'\n )\n | translate\n | async\n \"\n #tagBox\n >\n <ax-suffix class=\"ax-hidden md:ax-block\"><span class=\"ax-text-gray-500\">Ctrl+F</span></ax-suffix>\n </ax-tag-box>\n\n <ng-template #tagTemplate let-item let-index=\"index\">\n <div\n class=\"ax-inline-flex ax-items-center ax-gap-1.5 hover:ax-bg-darkest ax-cursor-pointer ax-rounded-md ax-px-3 ax-py-1 ax-text-sm ax-surface\"\n [class.!ax-bg-primary]=\"item.field === 'all'\"\n [class.!ax-text-white]=\"item.field === 'all'\"\n (click)=\"handleTagClick(item)\"\n >\n <span>{{ item.query }}</span>\n @if (!item.readOnly) {\n <button (click)=\"handleRemoveTag($event, index)\" type=\"button\">\n <ax-icon class=\"ax-icon ax-icon-close\"></ax-icon>\n </button>\n }\n </div>\n </ng-template>\n</div>\n\n<ax-popover\n [offsetY]=\"activeFilter() ? -30 : 0\"\n [target]=\"tagBoxInput\"\n [openOn]=\"'toggle'\"\n (onOpened)=\"onPopoverOpened($event)\"\n [closeOn]=\"'clickOut'\"\n (onClosed)=\"handlePopoverClosed($event)\"\n [adaptivityEnabled]=\"true\"\n #popover\n>\n <div class=\"md:ax-min-w-72 ax-w-full ax-rounded-md md:ax-max-h-96 ax-max-w-80 md:ax-overflow-auto\">\n <axp-widgets-container [context]=\"context()\" (onContextChanged)=\"onContextChanged($event)\">\n @if (activeFilter()) {\n <div class=\"ax-flex ax-flex-col ax-lightest-surface ax-shadow-md\" (keydown.enter)=\"onEnterKeyPressed($event)\">\n <ax-header class=\"ax-border-b ax-border-light ax-px-4 ax-py-2\">{{\n activeFilter()?.title! | translate | async\n }}</ax-header>\n <ax-content class=\"ax-p-4\">\n <div class=\"ax-mb-2\">\n <ax-badge [text]=\"(getActiveOperator(activeFilter())! | translate | async) || ''\"></ax-badge>\n </div>\n <ng-container\n #widgetRenderer=\"widgetRenderer\"\n axp-widget-renderer\n [node]=\"{\n type: activeFilter()?.widget?.type || 'text-editor',\n path: activeFilter()?.field,\n options: activeFilter()?.widget?.options,\n }\"\n [mode]=\"'edit'\"\n >\n </ng-container>\n </ax-content>\n <ax-footer class=\"ax-border-t ax-flex ax-justify-end ax-border-light ax-w-full ax-px-4 ax-py-2\">\n <ax-button\n class=\"ax-xs\"\n [text]=\"'@general:actions.apply.title' | translate | async\"\n (onClick)=\"handleApplyFilter()\"\n ></ax-button>\n </ax-footer>\n </div>\n } @else {\n <div axListNavigation #list=\"axListNavigation\" class=\"axp-list-items\">\n <!-- @if (tagBox.inputValue()) {\n @for (inlineFilter of inlineFilters(); track inlineFilter.field) {\n <div\n axListNavigationItem\n #caseItem=\"axListNavigationItem\"\n [class.axp-state-focused]=\"caseItem.isActive()\"\n tabindex=\"0\"\n (click)=\"handleSelectInlineFilter(inlineFilter)\"\n (keydown)=\"handleInlineFilterKeyDown($event, inlineFilter)\"\n >\n {{ inlineFilter.title | translate | async }} {{ getActiveOperator(inlineFilter) }} '{{\n tagBox.inputValue()\n }}'\n </div>\n }\n <span class=\"ax-w-full ax-border-t ax-border-light ax-my-1\"></span>\n } -->\n @for (field of filterFields(); track field.field) {\n <div\n axListNavigationItem\n #caseItem=\"axListNavigationItem\"\n [class.axp-state-focused]=\"caseItem.isActive() && !isFilterDisabled(field)\"\n [class.axp-query-filters__advance-item--disabled]=\"isFilterDisabled(field)\"\n [attr.aria-disabled]=\"isFilterDisabled(field) ? 'true' : null\"\n [attr.tabindex]=\"isFilterDisabled(field) ? -1 : 0\"\n (click)=\"handleSelectField(field)\"\n (keydown)=\"handleFieldKeyDown($event, field)\"\n >\n <div class=\"ax-flex ax-items-end ax-gap-2\">\n <ax-icon class=\"ax-w-5\" [class]=\"'fa-light ' + field.icon\"> </ax-icon>\n {{ field.title | translate | async }}\n </div>\n </div>\n }\n </div>\n }\n </axp-widgets-container>\n </div>\n</ax-popover>\n","import { AXClickEvent } from '@acorex/cdk/common';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXFormComponent, AXFormModule } from '@acorex/components/form';\nimport { AXLabelModule } from '@acorex/components/label';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPContextChangeEvent, AXPFilterDefinition } from '@acorex/platform/core';\nimport { AXPWidgetCoreModule } from '@acorex/platform/layout/widget-core';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, input, output, signal } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\n//#region ---- Types ----\n\nexport interface AXPPreloadFiltersApplyEvent {\n filterValues: Record<string, any>;\n}\n\n//#endregion\n\n@Component({\n selector: 'axp-preload-filters',\n templateUrl: './preload-filters.component.html',\n styleUrls: ['./preload-filters.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n AXPWidgetCoreModule,\n AXFormModule,\n FormsModule,\n AXLabelModule,\n AXTranslationModule,\n AXButtonModule,\n ],\n})\nexport class AXPPreloadFiltersComponent {\n //#region ---- Inputs ----\n\n /**\n * Filter definitions to display\n */\n filterDefinitions = input.required<AXPFilterDefinition[]>();\n\n /**\n * Whether to show the \"Show All\" button\n */\n showAllButton = input<boolean>(true);\n\n //#endregion\n\n //#region ---- Outputs ----\n\n /**\n * Emitted when user applies filters\n */\n apply = output<AXPPreloadFiltersApplyEvent>();\n\n /**\n * Emitted when user clicks \"Show All\"\n */\n showAll = output<void>();\n\n //#endregion\n\n //#region ---- Properties ----\n\n /**\n * Context for widgets container\n */\n context = signal<any>({});\n\n //#endregion\n\n //#region ---- Event Handlers ----\n\n /**\n * On context changed\n */\n onContextChanged(event: AXPContextChangeEvent): void {\n this.context.set(event.data);\n }\n\n /**\n * Handle apply filters\n */\n async handleApply(form: AXFormComponent): Promise<void> {\n // Validate form\n const validationResult = await form.validate();\n\n if (!validationResult.result) {\n return;\n }\n\n const filterValues = this.context();\n\n this.apply.emit({ filterValues });\n }\n\n /**\n * Handle form keydown events\n */\n onFormKeyDown(event: KeyboardEvent, form: AXFormComponent): void {\n // Submit form on Enter key press\n if (event.key === 'Enter') {\n event.preventDefault();\n this.handleApply(form);\n }\n }\n\n /**\n * Handle show all (skip filters and go to list).\n * Prevents implicit form submit when the control renders as a submit button inside ax-form.\n */\n handleShowAll(event?: AXClickEvent): void {\n event?.nativeEvent?.preventDefault?.();\n this.showAll.emit();\n }\n\n //#endregion\n\n //#region ---- Utility Methods ----\n\n /**\n * Check if field is required\n */\n isFieldRequired(filterDef: AXPFilterDefinition): boolean {\n const validations = filterDef?.widget?.options?.['validations'];\n return Array.isArray(validations) && validations.some((v: any) => v['rule'] === 'required');\n }\n\n //#endregion\n}\n","<div class=\"ax-flex ax-flex-col ax-gap-4 ax-items-center ax-justify-center ax-h-full\">\n <div class=\"ax-card ax-min-w-96 ax-flex ax-flex-col ax-items-center ax-gap-2 ax-p-6\">\n <div class=\"ax-header\">\n <img\n width=\"180\"\n src=\"/assets/images/general/filter.svg\"\n [attr.alt]=\"('@general:messages.preload-filters.filter-icon-alt' | translate | async) ?? ''\"\n />\n </div>\n <div class=\"ax-py-6\">\n <div class=\"ax-mb-6\">\n <h4 class=\"ax-text-lg ax-font-medium\">\n {{ '@general:messages.preload-filters.title' | translate | async }}\n </h4>\n <span class=\"ax-text-sm ax-text-gray-400\">\n {{ '@general:messages.preload-filters.description' | translate | async }}\n </span>\n </div>\n <axp-widgets-container [context]=\"context\" (onContextChanged)=\"onContextChanged($event)\">\n <ax-form #form (keydown)=\"onFormKeyDown($event, form)\">\n @for (filterDef of filterDefinitions(); track $index) {\n <ax-form-field class=\"ax-mt-2\">\n <ax-label [required]=\"isFieldRequired(filterDef)\">\n {{ filterDef?.title ?? '' | translate | async }}\n </ax-label>\n <ng-container\n #widgetRenderer=\"widgetRenderer\"\n axp-widget-renderer\n [node]=\"{\n type: filterDef?.widget?.type || 'text-editor',\n path: filterDef?.field,\n options: filterDef?.widget?.options,\n }\"\n [mode]=\"'edit'\"\n >\n </ng-container>\n </ax-form-field>\n }\n <div class=\"ax-mt-6\">\n <ax-button\n [text]=\"'@general:actions.apply.title' | translate | async\"\n (onClick)=\"handleApply(form)\"\n [color]=\"'primary'\"\n class=\"ax-w-full\"\n ></ax-button>\n @if (showAllButton()) {\n <ax-button\n class=\"ax-w-full ax-mt-4 ax-text-primary\"\n [look]=\"'blank'\"\n [text]=\"'@general:actions.show.all.title' | translate | async\"\n (onClick)=\"handleShowAll($event)\"\n ></ax-button>\n }\n </div>\n </ax-form>\n </axp-widgets-container>\n </div>\n </div>\n</div>\n","import { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXFormModule } from '@acorex/components/form';\nimport { AXImageEditorContainerComponent, AXImageEditorModule } from '@acorex/components/image-editor';\nimport { AXBasePageComponent } from '@acorex/components/page';\nimport { AXToolBarModule } from '@acorex/components/toolbar';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPFileStorageService } from '@acorex/platform/common';\nimport { CommonModule } from '@angular/common';\nimport { Component, inject, input, linkedSignal, signal, viewChild } from '@angular/core';\n\n@Component({\n standalone: true,\n selector: 'axp-image-editor-popup',\n imports: [\n CommonModule,\n AXImageEditorModule,\n AXFormModule,\n AXToolBarModule,\n AXDecoratorModule,\n AXButtonModule,\n AXTranslationModule,\n ],\n template: `\n <ax-form class=\"ax-flex ax-justify-center\">\n <ax-form-field class=\"ax-p-2\">\n <ax-image-editor-container\n [aspectRatio]=\"[aspectRatio() ?? '16/9']\"\n #container\n [look]=\"look()\"\n (onValueChanged)=\"handleValueChanged($event)\"\n >\n <ax-header>\n <ax-toolbar>\n <ax-prefix>\n @if (showHistory()) {\n <ax-image-editor-history></ax-image-editor-history>\n }\n </ax-prefix>\n </ax-toolbar>\n </ax-header>\n <ax-image-editor-view [src]=\"url() || ''\"></ax-image-editor-view>\n </ax-image-editor-container>\n </ax-form-field>\n </ax-form>\n <ax-footer class=\"ax-flex ax-justify-end ax-gap-2\">\n <ax-suffix>\n <ax-button look=\"solid\" (onClick)=\"handleCancel()\" [text]=\"'@general:actions.cancel.title' | translate | async\">\n </ax-button>\n <ax-button\n color=\"primary\"\n look=\"solid\"\n (onClick)=\"handleSave()\"\n [text]=\"'@general:actions.save.title' | translate | async\"\n >\n </ax-button>\n </ax-suffix>\n </ax-footer>\n `,\n styles: `\n ::ng-deep ax-image-editor-view > canvas {\n height: 65vh;\n }\n `,\n})\nexport class AXPImageEditorPopupComponent extends AXBasePageComponent {\n private readonly fileStorage = inject(AXPFileStorageService);\n\n image = input.required<Blob>();\n showHistory = input<boolean>(true);\n look = input<'solid' | 'outline' | 'blank'>('blank');\n aspectRatio = input<string | undefined>(undefined);\n\n private container = viewChild(AXImageEditorContainerComponent);\n private blobUrl = signal<string | null>(null);\n protected url = signal<string | null>(null);\n\n protected context = linkedSignal<{ image: Blob | null }>(() => ({ image: this.image() }));\n\n override async ngOnInit(): Promise<void> {\n const value = this.image();\n //for safety\n if (!value) {\n this.url.set(null);\n return;\n }\n const prev = this.blobUrl();\n if (prev) {\n URL.revokeObjectURL(prev);\n }\n const blob = value as Blob;\n const next = URL.createObjectURL(blob);\n this.blobUrl.set(next);\n this.url.set(next);\n }\n\n handleValueChanged(e: any) {\n const value = e?.value as Blob[] | undefined;\n const webP = value?.find((item) => item.type.startsWith('image/webp'));\n if (webP) {\n this.context.set({ image: webP });\n }\n }\n\n handleSave() {\n this.close({ data: this.context() });\n }\n\n handleCancel() {\n this.close({ data: { image: null } });\n }\n\n override ngOnDestroy(): void {\n const prev = this.blobUrl();\n if (prev) {\n URL.revokeObjectURL(prev);\n }\n }\n}\n","import { AXPopupService } from '@acorex/components/popup';\nimport { AXTranslationService } from '@acorex/core/translation';\n// no file list types here; service deals with raw Blob\nimport { inject, Injectable, signal } from '@angular/core';\n\nexport interface AXPImageEditorOpenOptions {\n title?: string;\n image: Blob;\n showHistory?: boolean;\n look?: 'solid' | 'outline' | 'blank';\n aspectRatio?: string;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class AXPImageEditorService {\n private readonly popupService = inject(AXPopupService);\n private readonly translate = inject(AXTranslationService);\n\n async open(options?: AXPImageEditorOpenOptions): Promise<Blob | null> {\n const component = await import('./image-editor-popup.component').then((m) => m.AXPImageEditorPopupComponent);\n const result = await this.popupService.open(component, {\n title: options?.title ?? (await this.translate.translateAsync('@general:image.title')),\n data: {\n image: signal(options?.image),\n showHistory: signal(options?.showHistory ?? true),\n look: signal(options?.look ?? 'solid'),\n aspectRatio: signal(options?.aspectRatio),\n },\n });\n return (result?.data?.data?.image as Blob | null) ?? null;\n }\n}\n","import { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXImageModule } from '@acorex/components/image';\nimport { AXPlatform } from '@acorex/core/platform';\n\nimport { AXPComponentLogoConfig, AXPImageUrlLogoConfig, AXPIconLogoConfig } from '@acorex/platform/core';\nimport { CommonModule } from '@angular/common';\nimport { Component, inject, Input, OnInit, OnChanges, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n selector: 'axp-logo',\n templateUrl: './logo.component.html',\n imports: [CommonModule, AXImageModule, AXDecoratorModule],\n host: { class: 'ax-flex ax-justify-center' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXPLogoComponent implements OnInit, OnChanges {\n @Input()\n source!: any;\n\n protected logoType!: string;\n\n private platform = inject(AXPlatform);\n\n ngOnInit(): void {\n this.setLogoType();\n this.platform.themeMode$.subscribe(() => {\n this.setLogoTheme();\n });\n }\n\n ngOnChanges(): void {\n this.setLogoTheme();\n this.setLogoType();\n }\n\n protected setLogoType() {\n switch (true) {\n case this.source instanceof AXPImageUrlLogoConfig:\n this.logoType = 'url';\n break;\n\n case this.source instanceof AXPComponentLogoConfig:\n this.logoType = 'component';\n break;\n\n case this.source instanceof AXPIconLogoConfig:\n this.logoType = 'icon';\n break;\n\n default:\n break;\n }\n }\n\n protected setLogoTheme() {\n if (this.source && (this.source as any).dark && (this.source as any).light) {\n this.source = this.platform.isDark() ? (this.source as any).dark : (this.source as any).light;\n }\n }\n}\n\n","@switch (logoType) { \n @case ('url') {\n <ax-image [width]=\"source.width\" [height]=\"source.height\" [src]=\"source.url\"></ax-image>\n } \n @case ('component') {\n <ng-container *ngComponentOutlet=\"source.component\"></ng-container>\n } \n @case ('icon') {\n <i [class]=\"source.icon\" [style.color]=\"source.color\"></i>\n } \n}\n\n","//#region ---- Imports ----\n\nimport { AXTreeViewNode } from '@acorex/components/tree-view';\nimport { InjectionToken } from '@angular/core';\n\n//#endregion\n\n//#region ---- Types ----\n\n/**\n * Menu item type definitions.\n * - 'menu': Standard navigable menu item\n * - 'group': Menu group/category header\n * - 'break': Visual separator/divider\n */\nexport type AXPMenuCustomizerItemType = 'menu' | 'group' | 'break';\n\n/**\n * Menu item interface for customizer.\n * Represents a single menu item with its properties.\n */\nexport interface AXPMenuCustomizerItem {\n /** Unique identifier/key for the menu item */\n name?: string;\n\n /** Display text (can be an i18n key) */\n text?: string;\n\n /** Icon class (e.g., 'fa-light fa-home') */\n icon?: string;\n\n /** Navigation path/route */\n path?: string;\n\n /** Type of menu item */\n type?: AXPMenuCustomizerItemType;\n\n /** Priority for ordering (lower = higher priority) */\n priority?: number;\n\n /** Description/tooltip text */\n description?: string;\n\n /** Child menu items */\n children?: AXPMenuCustomizerItem[];\n}\n\n/**\n * Metadata for menu tree nodes.\n * Contains flags and original values for tracking customizations.\n */\nexport interface AXPMenuCustomizerNodeMetadata {\n /** Whether this is a built-in (system) menu item */\n isBuiltIn: boolean;\n\n /** Whether this is a custom (user-created) menu item */\n isCustom: boolean;\n\n /** Whether this menu item is currently hidden */\n isHidden: boolean;\n\n /** Original priority before any customizations */\n originalPriority?: number;\n\n /** Original parent name before any move operations */\n originalParentName?: string;\n}\n\n/**\n * Data structure for tree node combining menu item with metadata.\n * This is stored in the tree node's 'data' field.\n */\nexport interface AXPMenuCustomizerNodeData {\n /** The menu item properties */\n menuItem: AXPMenuCustomizerItem;\n\n /** Metadata about the menu item's state */\n metadata: AXPMenuCustomizerNodeMetadata;\n}\n\n/**\n * Available actions that can be performed on menu items.\n */\nexport type AXPMenuCustomizerAction = 'show' | 'hide' | 'edit' | 'delete' | 'add-child' | 'move';\n\n/**\n * Component state for loading/error handling.\n */\nexport type AXPMenuCustomizerState =\n | { status: 'idle' }\n | { status: 'loading' }\n | { status: 'success' }\n | { status: 'error'; message: string };\n\n//#endregion\n\n//#region ---- Service Interface ----\n\n/**\n * Abstract service interface for menu customization operations.\n * Implement this interface and provide it via AXP_MENU_CUSTOMIZER_SERVICE token.\n */\nexport abstract class AXPMenuCustomizerService {\n /**\n * Get menu tree nodes for the given scope key\n */\n abstract getMenuTree(scopeKey: string): Promise<AXTreeViewNode[]>;\n\n /**\n * Sync tree changes (reorder, move) to storage\n */\n abstract syncTreeChanges(scopeKey: string, treeNodes: AXTreeViewNode[]): Promise<void>;\n\n /**\n * Show a hidden menu item\n */\n abstract showMenuItem(scopeKey: string, menuName: string): Promise<void>;\n\n /**\n * Hide a menu item\n */\n abstract hideMenuItem(scopeKey: string, menuName: string): Promise<void>;\n\n /**\n * Add a custom menu item\n */\n abstract addCustomMenuItem(scopeKey: string, menuItem: AXPMenuCustomizerItem, parentName: string | null): Promise<void>;\n\n /**\n * Update a custom menu item\n */\n abstract updateCustomMenuItem(scopeKey: string, menuName: string, menuItem: AXPMenuCustomizerItem): Promise<void>;\n\n /**\n * Update menu item properties (for built-in items)\n */\n abstract updateMenuProperties(scopeKey: string, menuName: string, properties: Partial<AXPMenuCustomizerItem>): Promise<void>;\n\n /**\n * Delete a custom menu item\n */\n abstract deleteCustomMenuItem(scopeKey: string, menuName: string): Promise<void>;\n\n /**\n * Reset all customizations for the scope\n */\n abstract resetCustomizations(scopeKey: string): Promise<void>;\n}\n\n/**\n * Injection token for menu customizer service\n */\nexport const AXP_MENU_CUSTOMIZER_SERVICE = new InjectionToken<AXPMenuCustomizerService>('AXP_MENU_CUSTOMIZER_SERVICE');\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXBadgeModule } from '@acorex/components/badge';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDialogService } from '@acorex/components/dialog';\nimport { AXDropdownModule } from '@acorex/components/dropdown';\nimport { AXDropdownButtonModule } from '@acorex/components/dropdown-button';\nimport { AXToastService } from '@acorex/components/toast';\nimport { AsyncPipe } from '@angular/common';\n\nimport {\n AXTreeViewBeforeDropEvent,\n AXTreeViewComponent,\n AXTreeViewDragArea,\n AXTreeViewDragBehavior,\n AXTreeViewDropEvent,\n AXTreeViewNode,\n} from '@acorex/components/tree-view';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\nimport { AXPLayoutBuilderService } from '@acorex/platform/layout/builder';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n effect,\n inject,\n input,\n OnInit,\n output,\n signal,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { AXPStateMessageComponent } from '../state-message';\nimport {\n AXP_MENU_CUSTOMIZER_SERVICE,\n AXPMenuCustomizerAction,\n AXPMenuCustomizerItem,\n AXPMenuCustomizerNodeData,\n AXPMenuCustomizerState,\n} from './menu-customizer.types';\n\n//#endregion\n\n//#region ---- Menu Customizer Component ----\n\n/**\n * Reusable menu customizer component that allows users to reorder, show/hide,\n * and manage menu items using a tree-like interface.\n * Can be used standalone or within popups/dialogs.\n *\n * @description\n * This component provides a visual interface for customizing menu structures.\n * It supports:\n * - Drag and drop reordering of menu items\n * - Showing/hiding menu items\n * - Adding custom menu items\n * - Editing menu item properties\n * - Resetting customizations to defaults\n *\n * @example\n * ```html\n * <axp-menu-customizer\n * [scopeKey]=\"'edition:my-edition'\"\n * [showToolbar]=\"true\"\n * [allowAddItems]=\"true\"\n * (saved)=\"onSaved()\"\n * />\n * ```\n *\n * @requires AXP_MENU_CUSTOMIZER_SERVICE - Must provide an implementation of AXPMenuCustomizerService\n */\n@Component({\n selector: 'axp-menu-customizer',\n imports: [\n AXButtonModule,\n AXDecoratorModule,\n AXDropdownButtonModule,\n AXDropdownModule,\n AXTranslationModule,\n AXTreeViewComponent,\n AXPStateMessageComponent,\n AXBadgeModule,\n AsyncPipe,\n ],\n templateUrl: './menu-customizer.component.html',\n styleUrls: ['./menu-customizer.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: { class: 'axp-menu-customizer' },\n})\nexport class AXPMenuCustomizerComponent implements OnInit {\n //#region ---- Dependencies ----\n\n private readonly menuCustomizerService = inject(AXP_MENU_CUSTOMIZER_SERVICE);\n private readonly layoutBuilder = inject(AXPLayoutBuilderService);\n private readonly dialogService = inject(AXDialogService);\n private readonly toastService = inject(AXToastService);\n private readonly translationService = inject(AXTranslationService);\n private readonly destroyRef = inject(DestroyRef);\n\n //#endregion\n\n //#region ---- Inputs & Outputs ----\n\n /** The scope key for loading/saving menu customizations (e.g., 'edition:{id}', 'tenant:{id}') */\n scopeKey = input.required<string>();\n\n /** Whether to show the toolbar with collapse/expand/reset actions */\n showToolbar = input<boolean>(true);\n\n /** Whether to allow adding custom menu items */\n allowAddItems = input<boolean>(true);\n\n /** Drag behavior for the tree view: 'none' | 'order-only' | 'move' | 'both' */\n dragBehavior = input<AXTreeViewDragBehavior>('both');\n\n /** Drag area for the tree view: 'handler' | 'item' */\n dragArea = input<AXTreeViewDragArea>('handler');\n\n /** Emitted when changes are saved */\n saved = output<void>();\n\n /** Emitted when the customizer is closed/cancelled */\n cancelled = output<void>();\n\n //#endregion\n\n //#region ---- Component State ----\n\n /** Reference to the tree view component */\n protected readonly tree = viewChild(AXTreeViewComponent);\n\n /** Tree nodes data source */\n protected readonly treeNodes = signal<AXTreeViewNode[]>([]);\n\n /** Current loading/error state */\n protected readonly state = signal<AXPMenuCustomizerState>({ status: 'idle' });\n\n /** Flag to prevent concurrent sync operations */\n private isSyncing = false;\n\n //#endregion\n\n //#region ---- Computed Properties ----\n\n /** Whether the component is currently loading */\n protected readonly isLoading = computed(() => this.state().status === 'loading');\n\n /** Whether there is an error state */\n protected readonly hasError = computed(() => this.state().status === 'error');\n\n /** The current error message, if any */\n protected readonly errorMessage = computed(() => {\n const currentState = this.state();\n return currentState.status === 'error' ? currentState.message : '';\n });\n\n /** Whether the tree has nodes to display */\n protected readonly hasNodes = computed(() => this.treeNodes().length > 0);\n\n /** Whether to show the content (tree view) */\n protected readonly showContent = computed(() => !this.isLoading() && !this.hasError() && this.hasNodes());\n\n /** Whether to show the empty state */\n protected readonly showEmptyState = computed(() => !this.isLoading() && !this.hasError() && !this.hasNodes());\n\n //#endregion\n\n //#region ---- Lifecycle ----\n\n async ngOnInit(): Promise<void> {\n await this.loadMenuItems();\n }\n\n //#endregion\n\n //#region ---- Event Handlers ----\n\n /**\n * Handle before drop validation.\n * Prevents dropping into items with paths (leaf nodes that can't have children).\n *\n * @param event - The before drop event from tree view\n */\n protected handleBeforeDrop(event: AXTreeViewBeforeDropEvent): void {\n const targetParent = event.currentParent?.['data'] as AXPMenuCustomizerNodeData | undefined;\n\n // Prevent dropping into items with paths (leaf nodes)\n if (targetParent?.menuItem?.path) {\n event.canceled = true;\n this.showWarningMessage('@platform-management:menu-management.messages.error.move');\n }\n }\n\n /**\n * Handle order change event (reordering within the same parent).\n *\n * @param event - The drop event from tree view\n */\n protected async handleOrderChange(event: AXTreeViewDropEvent): Promise<void> {\n console.log('Order changed:', {\n node: event.node?.['id'],\n previousIndex: event.previousIndex,\n currentIndex: event.currentIndex,\n parent: event.currentParent?.['id'] ?? 'root',\n });\n\n // Use setTimeout to ensure tree view has finished updating the datasource\n setTimeout(() => this.syncTreeChanges(), 0);\n }\n\n /**\n * Handle move change event (moving to a different parent).\n *\n * @param event - The drop event from tree view\n */\n protected async handleMoveChange(event: AXTreeViewDropEvent): Promise<void> {\n console.log('Move changed:', {\n node: event.node?.['id'],\n previousParent: event.previousParent?.['id'] ?? 'root',\n currentParent: event.currentParent?.['id'] ?? 'root',\n currentIndex: event.currentIndex,\n });\n\n // Use setTimeout to ensure tree view has finished updating the datasource\n setTimeout(() => this.syncTreeChanges(), 0);\n }\n\n //#endregion\n\n //#region ---- Data Loading ----\n\n /**\n * Load menu tree for current scope.\n * Updates the component state to loading, then success or error.\n * Creates new array reference to ensure UI updates.\n */\n async loadMenuItems(): Promise<void> {\n try {\n this.state.set({ status: 'loading' });\n\n const treeNodes = await this.menuCustomizerService.getMenuTree(this.scopeKey());\n\n // Create new array reference to ensure tree view detects the change\n this.treeNodes.set([...treeNodes]);\n this.state.set({ status: 'success' });\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Failed to load menu items';\n this.state.set({ status: 'error', message });\n this.showErrorMessage('@platform-management:menu-management.messages.error.load');\n }\n }\n\n /**\n * Sync tree changes to backend.\n * Prevents concurrent sync operations using the isSyncing flag.\n * Reloads data with new reference after successful sync.\n */\n private async syncTreeChanges(): Promise<void> {\n if (this.isSyncing) {\n return;\n }\n\n // Get nodes from the tree component's datasource directly\n // This ensures we get the most up-to-date structure after drag-drop\n const treeComponent = this.tree();\n const nodes = treeComponent?.getRootNodes() ?? this.treeNodes();\n\n if (!nodes || nodes.length === 0) {\n return;\n }\n\n try {\n this.isSyncing = true;\n await this.menuCustomizerService.syncTreeChanges(this.scopeKey(), nodes);\n this.showSuccessMessage('@platform-management:menu-management.messages.success.reorder');\n\n // Reload with new array reference to ensure UI is in sync\n await this.loadMenuItems();\n } catch (error) {\n console.error('Failed to sync tree changes:', error);\n this.showErrorMessage('@platform-management:menu-management.messages.error.sync');\n } finally {\n this.isSyncing = false;\n }\n }\n\n //#endregion\n\n //#region ---- Public Methods ----\n\n /**\n * Collapse all tree nodes.\n */\n collapseAll(): void {\n this.tree()?.collapseAll();\n }\n\n /**\n * Expand all tree nodes.\n */\n async expandAll(): Promise<void> {\n await this.tree()?.expandAll();\n }\n\n /**\n * Reset all customizations to defaults.\n * Shows a confirmation dialog before resetting.\n */\n async resetCustomizations(): Promise<void> {\n const confirmed = await this.confirmAction(\n '@platform-management:menu-management.actions.reset.confirm.title',\n '@platform-management:menu-management.actions.reset.confirm.message',\n );\n\n if (!confirmed) return;\n\n try {\n await this.menuCustomizerService.resetCustomizations(this.scopeKey());\n this.showSuccessMessage('@platform-management:menu-management.messages.success.reset');\n } catch (error) {\n console.error('Failed to reset customizations:', error);\n this.showErrorMessage('@platform-management:menu-management.messages.error.reset');\n } finally {\n await this.loadMenuItems();\n }\n }\n\n /**\n * Add new root menu item.\n * Opens the menu item dialog without a parent.\n */\n async addRootMenuItem(): Promise<void> {\n await this.showMenuItemDialog(null, null);\n }\n\n /**\n * Reload the menu items from the service.\n * Useful for external refresh triggers.\n */\n async refresh(): Promise<void> {\n await this.loadMenuItems();\n }\n\n //#endregion\n\n //#region ---- Action Handlers ----\n\n /**\n * Handle menu item action dispatched from the template.\n *\n * @param action - The action to perform\n * @param nodeData - The node data to perform the action on\n */\n protected async onAction(action: AXPMenuCustomizerAction, nodeData: AXPMenuCustomizerNodeData): Promise<void> {\n const actionHandlers: Record<AXPMenuCustomizerAction, () => Promise<void>> = {\n show: () => this.showMenuItem(nodeData),\n hide: () => this.hideMenuItem(nodeData),\n edit: () => this.editMenuItem(nodeData),\n delete: () => this.deleteMenuItem(nodeData),\n 'add-child': () => this.addChildMenuItem(nodeData),\n move: () => Promise.resolve(), // Move is handled by drag-drop\n };\n\n const handler = actionHandlers[action];\n if (handler) {\n await handler();\n }\n }\n\n /**\n * Add new child menu item to a parent.\n *\n * @param parentNodeData - The parent node data\n */\n private async addChildMenuItem(parentNodeData: AXPMenuCustomizerNodeData): Promise<void> {\n await this.showMenuItemDialog(null, parentNodeData.menuItem.name ?? null);\n }\n\n //#endregion\n\n //#region ---- Menu Item Actions ----\n\n /**\n * Show a hidden menu item.\n *\n * @param nodeData - The node data containing the menu item to show\n */\n private async showMenuItem(nodeData: AXPMenuCustomizerNodeData): Promise<void> {\n const menuName = nodeData.menuItem.name;\n if (!menuName) return;\n\n await this.executeMenuAction(\n () => this.menuCustomizerService.showMenuItem(this.scopeKey(), menuName),\n '@platform-management:menu-management.messages.success.show',\n '@platform-management:menu-management.messages.error.show',\n );\n }\n\n /**\n * Hide a menu item.\n *\n * @param nodeData - The node data containing the menu item to hide\n */\n private async hideMenuItem(nodeData: AXPMenuCustomizerNodeData): Promise<void> {\n const menuName = nodeData.menuItem.name;\n if (!menuName) return;\n\n await this.executeMenuAction(\n () => this.menuCustomizerService.hideMenuItem(this.scopeKey(), menuName),\n '@platform-management:menu-management.messages.success.hide',\n '@platform-management:menu-management.messages.error.hide',\n );\n }\n\n /**\n * Edit a menu item.\n *\n * @param nodeData - The node data containing the menu item to edit\n */\n private async editMenuItem(nodeData: AXPMenuCustomizerNodeData): Promise<void> {\n await this.showMenuItemDialog(nodeData);\n }\n\n /**\n * Delete a custom menu item.\n * Shows a confirmation dialog before deleting.\n *\n * @param nodeData - The node data containing the menu item to delete\n */\n private async deleteMenuItem(nodeData: AXPMenuCustomizerNodeData): Promise<void> {\n const item = nodeData.menuItem;\n if (!item.name) return;\n\n const confirmed = await this.confirmAction(\n '@general:actions.delete.title',\n '@platform-management:menu-management.actions.delete.confirm.message',\n );\n\n if (!confirmed) return;\n\n await this.executeMenuAction(\n () => this.menuCustomizerService.deleteCustomMenuItem(this.scopeKey(), item.name!),\n '@platform-management:menu-management.messages.success.delete',\n '@platform-management:menu-management.messages.error.delete',\n );\n }\n\n //#endregion\n\n //#region ---- Dialog Helpers ----\n\n /**\n * Show menu item dialog (add/edit).\n *\n * @param nodeData - The node data for editing, or null for adding\n * @param parentName - The parent menu name for adding child items\n */\n private async showMenuItemDialog(\n nodeData: AXPMenuCustomizerNodeData | null,\n parentName: string | null = null,\n ): Promise<void> {\n const item = nodeData?.menuItem;\n const isEdit = !!item;\n const isBuiltIn = nodeData?.metadata?.isBuiltIn ?? false;\n\n const title = isEdit\n ? '@platform-management:menu-management.components.edit-dialog.title'\n : '@platform-management:menu-management.components.add-dialog.title';\n\n const context = this.buildDialogContext(item);\n\n const dialogRef = await this.layoutBuilder\n .create()\n .dialog((dialog) => {\n dialog\n .setTitle(title)\n .setContext(context)\n .content((flex) => {\n this.buildDialogFields(flex, isEdit, isBuiltIn);\n })\n .setActions((actions) => {\n actions.cancel('@general:actions.cancel.title').submit('@general:actions.save.title');\n });\n })\n .show();\n\n const action = dialogRef.action();\n if (action === 'cancel') {\n dialogRef.close();\n return;\n }\n\n const formData = dialogRef.context() as Partial<AXPMenuCustomizerItem>;\n\n try {\n await this.saveMenuItem(formData, nodeData, parentName, isEdit);\n this.showSuccessMessage('@platform-management:menu-management.messages.success.save');\n await this.loadMenuItems();\n dialogRef.close();\n } catch (error) {\n console.error('Failed to save menu item:', error);\n this.showErrorMessage('@platform-management:menu-management.messages.error.save');\n }\n }\n\n /**\n * Build the dialog context for add/edit dialog.\n *\n * @param item - The menu item to build context for, or undefined for new items\n */\n private buildDialogContext(item?: AXPMenuCustomizerItem): Record<string, unknown> {\n return {\n name: item?.name ?? '',\n text: item?.text ?? '',\n type: item?.type ?? 'menu',\n icon: item?.icon ?? '',\n path: item?.path ?? '',\n description: item?.description ?? '',\n };\n }\n\n /**\n * Build the dialog form fields.\n * Note: Priority is not included as item order is controlled by drag-drop.\n *\n * @param flex - The flex layout builder\n * @param isEdit - Whether this is an edit operation\n * @param isBuiltIn - Whether the item is built-in\n */\n private buildDialogFields(flex: any, isEdit: boolean, isBuiltIn: boolean): void {\n const I18N_PREFIX = '@platform-management:menu-management.fields';\n\n flex\n .setDirection('column')\n .formField(`${I18N_PREFIX}.name`, (field: any) => {\n field.path('name');\n field.textBox({\n placeholder: `${I18N_PREFIX}.name`,\n validations: [{ rule: 'required' }],\n disabled: isEdit && isBuiltIn,\n });\n })\n .formField(`${I18N_PREFIX}.text`, (field: any) => {\n field.path('text');\n field.textBox({\n placeholder: `${I18N_PREFIX}.text`,\n validations: [{ rule: 'required' }],\n });\n })\n .formField(`${I18N_PREFIX}.icon`, (field: any) => {\n field.path('icon');\n field.customWidget('icon-chooser', {});\n })\n .formField(`${I18N_PREFIX}.path`, (field: any) => {\n field.path('path');\n field.textBox({\n placeholder: `${I18N_PREFIX}.path`,\n disabled: isEdit && isBuiltIn,\n });\n })\n .formField(`${I18N_PREFIX}.description`, (field: any) => {\n field.path('description');\n field.largeTextBox({\n placeholder: `${I18N_PREFIX}.description`,\n rows: 3,\n });\n });\n }\n\n /**\n * Save menu item (create or update).\n *\n * @param formData - The form data from the dialog\n * @param nodeData - The original node data (for edit) or null (for add)\n * @param parentName - The parent menu name (for add child)\n * @param isEdit - Whether this is an edit operation\n */\n private async saveMenuItem(\n formData: Partial<AXPMenuCustomizerItem>,\n nodeData: AXPMenuCustomizerNodeData | null,\n parentName: string | null,\n isEdit: boolean,\n ): Promise<void> {\n const scopeKey = this.scopeKey();\n\n if (isEdit && nodeData?.menuItem?.name) {\n const menuName = nodeData.menuItem.name;\n\n if (nodeData.metadata?.isCustom) {\n // For custom items, update the entire item (preserving priority from current position)\n const updatedItem: AXPMenuCustomizerItem = {\n ...nodeData.menuItem,\n text: formData.text,\n icon: formData.icon,\n path: formData.path,\n description: formData.description,\n };\n await this.menuCustomizerService.updateCustomMenuItem(scopeKey, menuName, updatedItem);\n } else {\n // For built-in items, only update allowed properties (text, icon, description)\n const properties: Partial<AXPMenuCustomizerItem> = {\n text: formData.text,\n icon: formData.icon,\n description: formData.description,\n };\n await this.menuCustomizerService.updateMenuProperties(scopeKey, menuName, properties);\n }\n } else {\n // Add new custom item\n const newItem: AXPMenuCustomizerItem = {\n name: formData.name!,\n text: formData.text!,\n icon: formData.icon,\n path: formData.path,\n description: formData.description,\n };\n\n await this.menuCustomizerService.addCustomMenuItem(scopeKey, newItem, parentName);\n }\n }\n\n //#endregion\n\n //#region ---- Utility Methods ----\n\n /**\n * Execute a menu action with common error handling and reload.\n *\n * @param action - The action to execute\n * @param successMessageKey - The i18n key for success message\n * @param errorMessageKey - The i18n key for error message\n */\n private async executeMenuAction(\n action: () => Promise<void>,\n successMessageKey: string,\n errorMessageKey: string,\n ): Promise<void> {\n try {\n await action();\n this.showSuccessMessage(successMessageKey);\n await this.loadMenuItems();\n } catch (error) {\n console.error('Menu action failed:', error);\n this.showErrorMessage(errorMessageKey);\n }\n }\n\n /**\n * Show a confirmation dialog.\n *\n * @param titleKey - The i18n key for the dialog title\n * @param messageKey - The i18n key for the dialog message\n * @returns True if confirmed, false otherwise\n */\n private async confirmAction(titleKey: string, messageKey: string): Promise<boolean> {\n const [title, message] = await Promise.all([\n this.translationService.translateAsync(titleKey),\n this.translationService.translateAsync(messageKey),\n ]);\n return (await this.dialogService.confirm(title, message)).result;\n }\n\n /**\n * Show a success toast message.\n *\n * @param messageKey - The i18n key for the message\n */\n private async showSuccessMessage(messageKey: string): Promise<void> {\n const message = await this.translationService.translateAsync(messageKey);\n this.toastService.success(message);\n }\n\n /**\n * Show an error toast message.\n *\n * @param messageKey - The i18n key for the message\n */\n private async showErrorMessage(messageKey: string): Promise<void> {\n const message = await this.translationService.translateAsync(messageKey);\n this.toastService.danger(message);\n }\n\n /**\n * Show a warning toast message.\n *\n * @param messageKey - The i18n key for the message\n */\n private async showWarningMessage(messageKey: string): Promise<void> {\n const message = await this.translationService.translateAsync(messageKey);\n this.toastService.warning(message);\n }\n\n private readonly eff = effect(() => {\n console.log('treeNodes', this.treeNodes());\n });\n private readonly eff2 = effect(() => {\n console.log('datasource', this.tree()?.datasource());\n });\n\n //#endregion\n}\n\n//#endregion\n","<!-- i18n path constants -->\n@let i18nBase = '@platform-management:menu-management';\n@let i18nEmptyStates = i18nBase + '.components.menu-list.empty-states';\n@let i18nActions = i18nBase + '.actions';\n\n<!-- Loading State -->\n@if (isLoading()) {\n <axp-state-message\n mode=\"loading\"\n icon=\"fa-light fa-spinner-third fa-spin\"\n [title]=\"(i18nEmptyStates + '.loading.title' | translate | async)!\"\n [description]=\"(i18nEmptyStates + '.loading.description' | translate | async)!\"\n />\n}\n\n<!-- Error State -->\n@else if (hasError()) {\n <axp-state-message\n mode=\"error\"\n icon=\"fa-light fa-circle-exclamation\"\n [title]=\"(i18nEmptyStates + '.error.title' | translate | async)!\"\n [description]=\"(i18nEmptyStates + '.error.description' | translate | async)!\"\n >\n <ax-button\n slot=\"actions\"\n [text]=\"'@general:actions.retry.title' | translate | async\"\n look=\"outline\"\n color=\"primary\"\n (onClick)=\"loadMenuItems()\"\n >\n <i class=\"fa-light fa-rotate-left\"></i>\n </ax-button>\n </axp-state-message>\n}\n\n<!-- Empty State -->\n@else if (showEmptyState()) {\n <axp-state-message\n mode=\"empty\"\n icon=\"fa-light fa-bars\"\n [title]=\"(i18nEmptyStates + '.no-data.title' | translate | async)!\"\n [description]=\"(i18nEmptyStates + '.no-data.description' | translate | async)!\"\n >\n @if (allowAddItems()) {\n <ax-button\n slot=\"actions\"\n [text]=\"i18nActions + '.add-root.title' | translate | async\"\n look=\"solid\"\n color=\"primary\"\n (onClick)=\"addRootMenuItem()\"\n >\n <i class=\"fa-light fa-plus\"></i>\n </ax-button>\n }\n </axp-state-message>\n}\n\n<!-- Main Content -->\n@else if (showContent()) {\n <!-- Toolbar -->\n @if (showToolbar()) {\n <div class=\"axp-menu-customizer__toolbar\">\n @if (allowAddItems()) {\n <ax-button\n [text]=\"i18nActions + '.add-root.title' | translate | async\"\n look=\"solid\"\n color=\"primary\"\n (onClick)=\"addRootMenuItem()\"\n >\n <ax-prefix>\n <i class=\"fa-light fa-plus\"></i>\n </ax-prefix>\n </ax-button>\n }\n\n <div class=\"axp-menu-customizer__toolbar-spacer\"></div>\n <!-- \n <ax-button\n [text]=\"i18nActions + '.collapse.title' | translate | async\"\n look=\"outline\"\n (onClick)=\"collapseAll()\"\n >\n <ax-prefix>\n <i class=\"fa-light fa-minus-square\"></i>\n </ax-prefix>\n </ax-button>\n\n <ax-button\n [text]=\"i18nActions + '.expand.title' | translate | async\"\n look=\"outline\"\n (onClick)=\"expandAll()\"\n >\n <ax-prefix>\n <i class=\"fa-light fa-plus-square\"></i>\n </ax-prefix>\n </ax-button> -->\n\n <ax-button\n [text]=\"i18nActions + '.reset.title' | translate | async\"\n look=\"outline\"\n color=\"danger\"\n (onClick)=\"resetCustomizations()\"\n >\n <ax-prefix>\n <i class=\"fa-light fa-rotate-left\"></i>\n </ax-prefix>\n </ax-button>\n </div>\n }\n\n <!-- Menu Tree -->\n <div class=\"axp-menu-customizer__container\">\n <div class=\"axp-menu-customizer__tree\">\n <ax-tree-view\n [(datasource)]=\"treeNodes\"\n look=\"default\"\n [nodeTemplate]=\"itemTemplate\"\n selectMode=\"none\"\n [showIcons]=\"false\"\n [showChildrenBadge]=\"false\"\n [dragBehavior]=\"dragBehavior()\"\n [dragArea]=\"dragArea()\"\n (onBeforeDrop)=\"handleBeforeDrop($event)\"\n (onOrderChange)=\"handleOrderChange($event)\"\n (onMoveChange)=\"handleMoveChange($event)\"\n />\n </div>\n </div>\n}\n\n<!-- Custom Item Template -->\n<ng-template #itemTemplate let-node=\"node\" let-level=\"level\">\n @let nodeData = node['data'];\n @let item = nodeData.menuItem;\n @let metadata = nodeData.metadata;\n @let isGroup = item.type === 'group';\n @let isBreak = item.type === 'break';\n @let isMenu = item.type === 'menu' || !item.type;\n @let canAddChild = !item.path && isMenu && allowAddItems();\n @let canToggleVisibility = item.name && metadata.isBuiltIn;\n @let canDelete = item.name && metadata.isCustom;\n @let i18nStates = '@platform-management:menu-management.states';\n\n <div\n class=\"axp-menu-customizer__item\"\n [class.axp-menu-customizer__item--hidden]=\"metadata.isHidden\"\n [class.axp-menu-customizer__item--custom]=\"metadata.isCustom\"\n [class.axp-menu-customizer__item--group]=\"isGroup\"\n >\n <!-- Icon (hidden for groups) -->\n @if (item.icon && !isGroup) {\n <i class=\"axp-menu-customizer__item-icon\" [class]=\"item.icon\"></i>\n }\n\n <!-- Content based on item type -->\n @if (isGroup) {\n <span class=\"axp-menu-customizer__item-group\">\n <i class=\"fa-light fa-layer-group\"></i>\n {{ item.text | translate | async }}\n </span>\n } @else if (isBreak) {\n <span class=\"axp-menu-customizer__item-divider\">\n <i class=\"fa-light fa-minus\"></i>\n {{ i18nStates + '.divider' | translate | async }}\n </span>\n } @else if (item.text) {\n <span class=\"axp-menu-customizer__item-text\">\n {{ item.text | translate | async }}\n </span>\n } @else if (item.path) {\n <span class=\"axp-menu-customizer__item-path\">\n <i class=\"fa-light fa-link\"></i>\n {{ item.path }}\n </span>\n }\n\n <!-- Menu Name/Key -->\n @if (item.name) {\n <code class=\"axp-menu-customizer__item-name\">{{ item.name }}</code>\n }\n\n <!-- Status Badges -->\n @if (metadata.isHidden) {\n <ax-badge [text]=\"(i18nStates + '.hidden' | translate | async)!\" color=\"danger\" />\n } @else if (metadata.isCustom) {\n <ax-badge [text]=\"(i18nStates + '.custom' | translate | async)!\" color=\"success\" />\n } @else if (metadata.isBuiltIn) {\n <ax-badge [text]=\"(i18nStates + '.built-in' | translate | async)!\" color=\"primary\" />\n }\n\n <!-- Actions Dropdown -->\n <ax-button class=\"axp-menu-customizer__item-actions\" look=\"blank\" size=\"sm\" [iconOnly]=\"true\">\n <ax-prefix>\n <i class=\"fa-light fa-ellipsis-vertical\"></i>\n </ax-prefix>\n\n <ax-dropdown-panel #panel>\n <ax-button-item-list>\n <!-- Edit (only for items with names) -->\n @if (item.name) {\n <ax-button-item\n [text]=\"('@general:actions.edit.title' | translate | async)!\"\n (onClick)=\"onAction('edit', nodeData); panel.close()\"\n >\n <ax-prefix>\n <i class=\"fa-light fa-edit\"></i>\n </ax-prefix>\n </ax-button-item>\n }\n\n <!-- Show/Hide (only for built-in items with names) -->\n @if (canToggleVisibility) {\n @if (metadata.isHidden) {\n <ax-button-item\n [text]=\"(i18nActions + '.show.title' | translate | async)!\"\n (onClick)=\"onAction('show', nodeData); panel.close()\"\n >\n <ax-prefix>\n <i class=\"fa-light fa-eye\"></i>\n </ax-prefix>\n </ax-button-item>\n } @else {\n <ax-button-item\n [text]=\"(i18nActions + '.hide.title' | translate | async)!\"\n (onClick)=\"onAction('hide', nodeData); panel.close()\"\n >\n <ax-prefix>\n <i class=\"fa-light fa-eye-slash\"></i>\n </ax-prefix>\n </ax-button-item>\n }\n }\n\n <!-- Add Child -->\n @if (canAddChild) {\n <ax-button-item\n [text]=\"(i18nActions + '.add-child.title' | translate | async)!\"\n (onClick)=\"onAction('add-child', nodeData); panel.close()\"\n >\n <ax-prefix>\n <i class=\"fa-light fa-plus\"></i>\n </ax-prefix>\n </ax-button-item>\n }\n\n <!-- Delete (only for custom items with names) -->\n @if (canDelete) {\n <ax-divider />\n <ax-button-item\n color=\"danger\"\n [text]=\"('@general:actions.delete.title' | translate | async)!\"\n (onClick)=\"onAction('delete', nodeData); panel.close()\"\n >\n <ax-prefix>\n <i class=\"fa-light fa-trash\"></i>\n </ax-prefix>\n </ax-button-item>\n }\n\n <!-- Info message for items without names -->\n @if (!item.name) {\n <ax-divider />\n <div class=\"ax-p-2 ax-text-xs ax-text-neutral-500 ax-italic\">\n {{ i18nBase + '.messages.info.no-name' | translate | async }}\n </div>\n }\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n </div>\n</ng-template>\n","import { withDefaultMultiLanguageOnWidgetProperty } from '@acorex/platform/common';\nimport { AXPWidgetNode, AXPWidgetProperty } from '@acorex/platform/layout/widget-core';\nimport { cloneDeep, isArray, isEmpty, isNil, merge, set, sortBy, unionBy } from 'lodash-es';\n\nimport { AXPPropertyViewerGroup, AXPPropertyViewerTab } from './property-viewer.types';\n\n/**\n * Copies {@link AXPWidgetProperty.validations} onto `schema.interface.options` so the property\n * viewer binds a stable widget node.\n */\nexport function withValidationsOnEditorNode(prop: AXPWidgetProperty): AXPWidgetProperty {\n if (!prop.validations?.length || !prop.schema?.interface) {\n return prop;\n }\n const iface = prop.schema.interface as AXPWidgetNode;\n const withOptions: AXPWidgetNode = {\n ...iface,\n options: {\n ...(iface.options ?? {}),\n validations: prop.validations,\n },\n };\n return {\n ...prop,\n schema: {\n ...prop.schema,\n interface: withOptions as NonNullable<AXPWidgetProperty['schema']>['interface'],\n },\n };\n}\n\nexport function preparePropertyForViewer(\n prop: AXPWidgetProperty,\n applyDefaultMultiLanguage: boolean,\n): AXPWidgetProperty {\n const withMl = withDefaultMultiLanguageOnWidgetProperty(prop, applyDefaultMultiLanguage);\n return withValidationsOnEditorNode(withMl);\n}\n\n/**\n * Deep-clone-safe: mutates cloned tab trees only when caller passes a fresh clone.\n * Applies the same widget-property pipeline as {@link AXPPropertyViewerComponent}.\n */\nexport function preparePropertyViewerTabs(\n tabs: AXPPropertyViewerTab[],\n applyDefaultMultiLanguage: boolean,\n): AXPPropertyViewerTab[] {\n return tabs\n .map((tab) => ({\n ...tab,\n groups: (tab.groups ?? [])\n .map<AXPPropertyViewerGroup>((group) => ({\n ...group,\n isCollapsed: group.isCollapsed ?? false,\n props: (group.props ?? [])\n .filter((prop) => prop.visible !== false)\n .map((prop) => preparePropertyForViewer(prop, applyDefaultMultiLanguage)),\n }))\n .filter((group) => group.props.length > 0),\n }))\n .filter((tab) => tab.groups.length > 0);\n}\n\n/**\n * Builds a single \"General\" tab for {@link AXPPropertyViewerService} from {@link AXPWidgetProperty} rows\n * (schema shape is shared with widget metadata; the edited payload is arbitrary context, not an {@link AXPWidgetNode}).\n */\nexport function buildPropertyViewerTabsFromProperties(properties: AXPWidgetProperty[]): AXPPropertyViewerTab[] {\n const visibleProps = (properties ?? []).filter((prop) => prop.visible !== false);\n if (visibleProps.length === 0) {\n return [];\n }\n const groups = unionBy(\n sortBy(\n visibleProps.map((prop) => ({\n name: prop.group.name,\n title: prop.group.title,\n isCollapsed: false,\n props: sortBy(\n visibleProps.filter((p) => p.group.name === prop.group.name && p.visible !== false),\n ['order', 'title'],\n ),\n })),\n ['order', 'title'],\n ),\n 'name',\n ).filter((group) => group.props.length > 0);\n\n return [\n {\n name: 'general',\n title: 'General',\n groups,\n },\n ];\n}\n\n/**\n * Initial {@link AXPPropertyViewerService#setContext} value: property default paths merged with the current saved values.\n */\nexport function buildPropertyViewerInitialContextFromProperties(\n properties: AXPWidgetProperty[],\n existing: Record<string, unknown>,\n): Record<string, unknown> {\n const allProperties = (properties ?? []).filter((p) => p.visible !== false);\n const defaults = allProperties\n .filter((prop) => {\n const defaultValue = prop.schema.defaultValue;\n if (isArray(defaultValue)) {\n return !isEmpty(defaultValue);\n }\n return !isNil(defaultValue);\n })\n .reduce((acc, prop) => {\n if (prop.schema?.interface?.path) {\n set(acc, prop.schema.interface.path, prop.schema.defaultValue);\n }\n return acc;\n }, {} as Record<string, unknown>);\n return merge(cloneDeep(defaults), cloneDeep(existing));\n}\n","import type { AXPWidgetProperty } from '@acorex/platform/layout/widget-core';\n\n/**\n * Heuristic: non-`{{ }}` strings that are clearly scripts (e.g. questionnaire / layout conditions).\n * Avoids treating normal short labels as expressions.\n */\nfunction isLikelyBareBindingScript(s: string): boolean {\n return (\n /\\banswer\\./.test(s) ||\n /\\bfn\\./.test(s) ||\n /===|!==|&&|\\|\\|/.test(s) ||\n /\\b(?:eval|get|set)\\s*\\(/.test(s)\n );\n}\n\n/**\n * Whether a binding-enabled property should show expression UI (toggle to code + open editor)\n * instead of the literal widget.\n *\n * - Values already wrapped in `{{ ... }}` are expressions (see `AXPExpressionEvaluatorService.isExpression`).\n * - Persisted domain data often stores **bare** scripts; for `dataType: 'boolean'` (typical toggle + binding),\n * any non-empty string that is not a boolean literal is treated as an expression.\n * - For `number`, strings that are not plain numeric literals are treated as expressions.\n * - For other types, `isLikelyBareBindingScript` reduces false positives for plain text.\n */\nexport function isPropertyBindingExpressionFormValue(\n property: AXPWidgetProperty,\n value: unknown,\n isTemplateExpression: (s: string) => boolean,\n): boolean {\n if (!property.binding?.enabled) {\n return false;\n }\n if (typeof value === 'boolean' || value === null || value === undefined) {\n return false;\n }\n if (typeof value !== 'string') {\n return false;\n }\n const t = value.trim();\n if (!t) {\n return false;\n }\n if (isTemplateExpression(t)) {\n return true;\n }\n const dataType = property.schema?.dataType ?? 'string';\n if (dataType === 'boolean') {\n const tl = t.toLowerCase();\n if (tl === 'true' || tl === 'false' || tl === '1' || tl === '0') {\n return false;\n }\n return true;\n }\n if (dataType === 'number') {\n if (/^-?\\d+(\\.\\d+)?$/.test(t)) {\n return false;\n }\n return true;\n }\n return isLikelyBareBindingScript(t);\n}\n","import { AXAccordionModule } from '@acorex/components/accordion';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXButtonGroupModule } from '@acorex/components/button-group';\nimport { AXCodeEditorModule } from '@acorex/components/code-editor';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXFormComponent, AXFormModule } from '@acorex/components/form';\nimport { AXPopupService } from '@acorex/components/popup';\nimport { AXTabsModule, AXTabStripChangedEvent } from '@acorex/components/tabs';\nimport { AXValidationSummary } from '@acorex/core/validation';\nimport { AXPDefaultMultiLanguageConfigService } from '@acorex/platform/common';\nimport {\n AXPWidgetCoreModule,\n AXPWidgetNode,\n AXPWidgetProperty,\n} from '@acorex/platform/layout/widget-core';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport {\n AXPContextChangeEvent,\n AXPContextData,\n AXPExpressionEvaluatorScope,\n AXPExpressionEvaluatorService,\n} from '@acorex/platform/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n EventEmitter,\n inject,\n input,\n Output,\n signal,\n untracked,\n viewChild,\n ViewEncapsulation,\n WritableSignal,\n} from '@angular/core';\nimport { cloneDeep, get, merge, set } from 'lodash-es';\n\nimport {\n AXPPropertyViewerChangedEvent,\n AXPPropertyViewerGroup,\n AXPPropertyViewerTab,\n} from './property-viewer.types';\nimport { preparePropertyViewerTabs } from './property-viewer-tab-pipeline';\nimport { isPropertyBindingExpressionFormValue } from './property-viewer-binding.util';\n\n@Component({\n selector: 'axp-property-viewer',\n templateUrl: './property-viewer.component.html',\n styleUrls: ['./property-viewer.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n CommonModule,\n AXAccordionModule,\n AXButtonModule,\n AXButtonGroupModule,\n AXCodeEditorModule,\n AXDecoratorModule,\n AXFormModule,\n FormsModule,\n AXTabsModule,\n AXPWidgetCoreModule,\n AXTranslationModule,\n ],\n})\nexport class AXPPropertyViewerComponent {\n private readonly defaultMultiLanguageConfig = inject(AXPDefaultMultiLanguageConfigService);\n\n //#region ---- Inputs ----\n\n /**\n * List of tabs that should be rendered inside the property viewer.\n */\n tabsInput = input<AXPPropertyViewerTab[]>([]);\n\n /**\n * Determines rendering mode.\n */\n mode = input<'simple' | 'advanced'>('simple');\n\n /**\n * When a property uses binding expressions, controls how the expression is edited:\n * `inline` — code editor in the panel (default); `popup` — button that opens the dialog editor.\n */\n bindingExpressionEditorMode = input<'inline' | 'popup'>('inline');\n\n //#endregion\n\n //#region ---- Outputs ----\n\n /**\n * Emits when property context changes.\n */\n @Output()\n onChanged = new EventEmitter<AXPPropertyViewerChangedEvent>();\n\n //#endregion\n\n //#region ---- Signals ----\n\n protected currentTabIndex: WritableSignal<number> = signal(0);\n\n protected tabs = computed<AXPPropertyViewerTab[]>(() => {\n const incomingTabs = this.tabsInput() ?? [];\n const applyMl = this.defaultMultiLanguageConfig.getApplyDefaultMultiLanguage();\n return preparePropertyViewerTabs(incomingTabs, applyMl);\n });\n\n protected groups = computed<AXPPropertyViewerGroup[]>(() => {\n const preparedTabs = this.tabs();\n if (!preparedTabs.length) {\n return [];\n }\n const index = Math.min(this.currentTabIndex(), preparedTabs.length - 1);\n if (index !== this.currentTabIndex()) {\n this.currentTabIndex.set(index);\n }\n return preparedTabs[index].groups.map((group) => ({\n ...group,\n isCollapsed: this.groupCollapsedStates.get(group.name) ?? !!group.isCollapsed,\n }));\n });\n\n protected context = signal<any>({});\n\n /**\n * Per-expression-path override for \"use expression\" vs \"use value\" when binding.enabled.\n * Updated when user toggles the ax-switch; otherwise derived from isExpression(valueAtPath).\n */\n protected expressionModeState = signal<Record<string, boolean>>({});\n\n /**\n * Evaluated visibility for properties whose {@link AXPWidgetProperty.visible} is a `{{ }}` expression.\n * Keys match {@link AXPPropertyViewerComponent.propertyVisibilityKey}.\n */\n private propertyVisibility = signal<Record<string, boolean>>({});\n\n //#endregion\n\n //#region ---- Properties ----\n\n protected groupCollapsedStates: Map<string, boolean> = new Map();\n\n private readonly expressionEvaluator = inject(AXPExpressionEvaluatorService);\n private readonly popupService = inject(AXPopupService);\n\n private readonly form = viewChild(AXFormComponent);\n\n //#endregion\n\n constructor() {\n effect(() => {\n const availableTabs = this.tabs();\n const availableGroups = availableTabs.flatMap((tab) => tab.groups);\n availableGroups.forEach((group) => {\n if (!this.groupCollapsedStates.has(group.name) && group.isCollapsed !== undefined) {\n this.groupCollapsedStates.set(group.name, !!group.isCollapsed);\n }\n });\n if (!availableTabs.length) {\n this.currentTabIndex.set(0);\n } else if (this.currentTabIndex() >= availableTabs.length) {\n this.currentTabIndex.set(0);\n }\n });\n\n effect(() => {\n const ctx = this.context();\n const tabList = this.tabs();\n untracked(() => void this.recomputePropertyVisibility(ctx, tabList));\n });\n }\n\n //#region ---- Public Methods ----\n\n /**\n * Replaces the current context with the provided value and emits an init event.\n */\n public initializeContext(value: any): void {\n untracked(() => {\n this.context.set(cloneDeep(value ?? {}));\n this.onChanged.emit({ values: this.context(), mode: 'init' });\n });\n }\n\n /**\n * Merges the provided value into the current context and emits an update event.\n */\n public update(value: any): void {\n untracked(() => {\n this.context.set(merge(cloneDeep(this.context()), value ?? {}));\n this.onChanged.emit({ values: this.context(), mode: 'update' });\n });\n }\n\n /**\n * Runs registered validation rules on fields inside this viewer (requires {@link AXFormModule} host).\n */\n public async validate(): Promise<AXValidationSummary> {\n const form = this.form();\n if (!form) {\n return { result: true, messages: [], rules: [] } as AXValidationSummary;\n }\n return form.validate();\n }\n\n //#endregion\n\n //#region ---- Visibility (expression `visible` on widget properties) ----\n\n /**\n * Stable key for visibility map entries (avoids collisions when the same `name` appears twice).\n */\n protected propertyVisibilityKey(prop: AXPWidgetProperty): string {\n return prop.schema?.interface?.path ?? prop.name;\n }\n\n /**\n * Whether a property row should render. Booleans are static; `{{ }}` strings are evaluated against\n * {@link context} with `context.eval(path)` like {@link AXPWidgetRendererDirective.updateVisibility}.\n */\n protected isPropertyVisible(prop: AXPWidgetProperty): boolean {\n this.propertyVisibility();\n const vis = prop.visible;\n if (typeof vis === 'boolean') {\n return vis;\n }\n if (typeof vis === 'string' && this.expressionEvaluator.isExpression(vis)) {\n return this.propertyVisibility()[this.propertyVisibilityKey(prop)] ?? false;\n }\n return true;\n }\n\n private async recomputePropertyVisibility(ctx: AXPContextData, tabList: AXPPropertyViewerTab[]): Promise<void> {\n const props = tabList.flatMap((t) => t.groups.flatMap((g) => g.props));\n const scope: AXPExpressionEvaluatorScope = {\n context: {\n eval: (path: string) => get(ctx as object, path),\n },\n };\n const entries = await Promise.all(\n props.map(async (prop) => {\n const key = this.propertyVisibilityKey(prop);\n const vis = prop.visible;\n if (typeof vis === 'boolean') {\n return [key, vis] as const;\n }\n if (typeof vis === 'string' && this.expressionEvaluator.isExpression(vis)) {\n try {\n const result = await this.expressionEvaluator.evaluate(vis, scope);\n return [key, Boolean(result)] as const;\n } catch {\n return [key, true] as const;\n }\n }\n return [key, true] as const;\n }),\n );\n this.propertyVisibility.set(Object.fromEntries(entries));\n }\n\n //#endregion\n\n //#region ---- Event Handlers ----\n\n /**\n * Handles context changes produced by rendered widgets.\n */\n protected handleContextChange(event: AXPContextChangeEvent): void {\n untracked(() => {\n this.context.set(event.data);\n this.onChanged.emit({ values: this.context(), mode: event.state === 'initiated' ? 'init' : 'update' });\n });\n }\n\n /**\n * Handles tab selection changes.\n */\n protected handleTabChange(event: AXTabStripChangedEvent): void {\n const index = event.index;\n if (this.currentTabIndex() !== index) {\n this.currentTabIndex.set(index);\n }\n }\n\n /**\n * Stores collapsed state for a group.\n */\n protected handleCollapsedChange(groupName: string, isCollapsed: boolean): void {\n this.groupCollapsedStates.set(groupName, isCollapsed);\n }\n\n /**\n * Returns the config path used for the binding value (and expression) for a property with binding.enabled.\n */\n protected getExpressionPath(prop: AXPWidgetProperty): string {\n const basePath = prop.schema?.interface?.path ?? prop.name;\n return prop.binding?.optionKey ? `${basePath}.${prop.binding.optionKey}` : basePath;\n }\n\n /**\n * True when the property is in \"expression\" mode: show only the expression editor button, not the widget.\n * Uses expressionModeState when set; otherwise derives from template `{{ }}` expressions and, when\n * {@link AXPWidgetProperty.binding} is enabled, bare scripts persisted without wrappers.\n */\n protected isExpressionMode(prop: AXPWidgetProperty): boolean {\n this.expressionModeState(); // dependency for change detection\n const path = this.getExpressionPath(prop);\n const stored = this.expressionModeState()[path];\n if (stored !== undefined) {\n return stored;\n }\n const v = get(this.context(), path);\n return isPropertyBindingExpressionFormValue(prop, v, (s) => this.expressionEvaluator.isExpression(s));\n }\n\n /**\n * Returns the default value when switching from expression to value mode.\n * Source of truth is prop.schema.defaultValue (widget.types): plain value, or function (context) => value.\n * A minimal dataType fallback is used only when the schema provides no default.\n */\n private getDefaultValueForProperty(prop: AXPWidgetProperty): any {\n const def = prop.schema?.defaultValue;\n if (typeof def === 'function') {\n return def(this.context());\n }\n if (def !== undefined && def !== null) {\n return def;\n }\n const dataType = prop.schema?.dataType ?? 'string';\n switch (dataType) {\n case 'boolean':\n return false;\n case 'number':\n return 0;\n case 'object':\n return {};\n case 'array':\n return [];\n default:\n return '';\n }\n }\n\n /**\n * Updates the expression/value toggle state for a binding-enabled property.\n * When switching to value: resets the value at path to a type-appropriate default so the\n * widget renderer does not receive the expression string (e.g. checkbox gets false, not a string).\n * When switching to expression: sets the value at path to an empty string so the editor starts\n * blank instead of keeping the previous literal (e.g. true/false).\n */\n protected setExpressionMode(prop: AXPWidgetProperty, useExpression: boolean): void {\n const path = this.getExpressionPath(prop);\n const currentVal = get(this.context(), path);\n const currentIsExpression = isPropertyBindingExpressionFormValue(prop, currentVal, (s) =>\n this.expressionEvaluator.isExpression(s),\n );\n\n this.expressionModeState.update((s) => ({ ...s, [path]: useExpression }));\n\n if (!useExpression && currentIsExpression) {\n const next = cloneDeep(this.context());\n set(next, path, this.getDefaultValueForProperty(prop));\n untracked(() => {\n this.context.set(next);\n this.onChanged.emit({ values: this.context(), mode: 'update' });\n });\n } else if (useExpression && !currentIsExpression) {\n const next = cloneDeep(this.context());\n set(next, path, '');\n untracked(() => {\n this.context.set(next);\n this.onChanged.emit({ values: this.context(), mode: 'update' });\n });\n }\n }\n\n /**\n * Current binding expression string at the property path (for inline editor ngModel).\n */\n protected getBindingExpressionValue(prop: AXPWidgetProperty): string {\n const expressionPath = this.getExpressionPath(prop);\n const raw = get(this.context(), expressionPath);\n return typeof raw === 'string' ? raw : '';\n }\n\n /**\n * Persists inline code editor changes into context.\n */\n protected setBindingExpressionValue(prop: AXPWidgetProperty, value: string): void {\n const expressionPath = this.getExpressionPath(prop);\n const next = cloneDeep(this.context());\n set(next, expressionPath, value);\n untracked(() => {\n this.context.set(next);\n this.onChanged.emit({ values: this.context(), mode: 'update' });\n });\n }\n\n /**\n * Opens the binding/expression code editor for a property with binding.enabled.\n * Ensures the value passed to the popup is always a string to avoid code-editor crashes.\n */\n protected async openBindingEditor(prop: AXPWidgetProperty): Promise<void> {\n const expressionPath = this.getExpressionPath(prop);\n const raw = get(this.context(), expressionPath);\n const currentValue = typeof raw === 'string' ? raw : '';\n\n const { AXPBindingExpressionEditorPopupComponent } = await import(\n './binding-expression-editor-popup.component'\n );\n\n const result = await this.popupService.open(AXPBindingExpressionEditorPopupComponent, {\n title: '@general:widgets.triggers.edit-binding-expression',\n size: 'lg',\n data: { initialValue: signal(currentValue) },\n });\n\n if (result?.data?.value !== undefined) {\n const next = cloneDeep(this.context());\n set(next, expressionPath, result.data.value);\n untracked(() => {\n this.context.set(next);\n this.onChanged.emit({ values: this.context(), mode: 'update' });\n });\n }\n }\n\n //#endregion\n}\n\n","<ax-form>\n <axp-widgets-container [context]=\"context()\" (onContextChanged)=\"handleContextChange($event)\">\n <!-- #region Shared property row template (used in both advanced and simple modes) -->\n <ng-template #propertyRow let-prop=\"prop\" let-translateTitle=\"translateTitle\">\n <div class=\"ax-flex ax-flex-col ax-gap-2 ax-py-2\">\n <!-- Property header: title + value/expression toggle (when binding.enabled) -->\n <div class=\"ax-flex ax-items-center ax-gap-2 ax-w-full\">\n @if (prop.showLabel !== false) {\n @if (translateTitle) {\n <span class=\"ax-font-semibold ax-flex-1 ax-min-w-0\">{{ prop.title | translate | async }}</span>\n } @else {\n <span class=\"ax-font-semibold ax-flex-1 ax-min-w-0\">{{ prop.title }}</span>\n }\n }\n @if (prop.binding?.enabled) {\n <div class=\"ax-flex ax-gap-1 ax-shrink-0 ax-xs\">\n <ax-button [toggleable]=\"true\" [selected]=\"isExpressionMode(prop)\" look=\"twotone\"\n [color]=\"isExpressionMode(prop) ? 'primary' : 'default'\" class=\"ax-shrink-0\"\n [title]=\"(isExpressionMode(prop) ? '@general:terms.common.expression' : '@general:terms.common.value') | translate | async\"\n (selectedChange)=\"setExpressionMode(prop, $event)\">\n @if (isExpressionMode(prop)) {\n <ax-icon icon=\"fa-light fa-code\"></ax-icon>\n } @else {\n <ax-icon icon=\"fa-light fa-keyboard\"></ax-icon>\n }\n </ax-button>\n </div>\n }\n </div>\n <!-- Property content: expression editor (inline or popup) or widget renderer (value mode) -->\n @if (prop.binding?.enabled && isExpressionMode(prop)) {\n @if (bindingExpressionEditorMode() === 'inline') {\n <div class=\"ax-w-full ax-overflow-hidden\" style=\"direction: ltr;\">\n <ax-code-editor [ngModel]=\"getBindingExpressionValue(prop)\"\n (ngModelChange)=\"setBindingExpressionValue(prop, $event)\" language=\"javascript\"\n [lineNumbers]=\"true\" class=\"ax-w-full\">\n </ax-code-editor>\n </div>\n } @else {\n <ax-button look=\"twotone\" color=\"primary\" size=\"sm\" class=\"ax-w-full\"\n [text]=\"'@general:widgets.triggers.open-editor' | translate | async\"\n (onClick)=\"openBindingEditor(prop)\"\n [title]=\"'@general:widgets.triggers.edit-binding-expression' | translate | async\">\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-code\"></ax-icon>\n </ax-prefix>\n </ax-button>\n }\n } @else if (prop.schema.interface) {\n <ng-container axp-widget-renderer [node]=\"prop.schema.interface\" [mode]=\"'edit'\">\n </ng-container>\n }\n </div>\n </ng-template>\n <!-- #endregion -->\n\n <!-- #region Advanced mode: tabs + accordion groups -->\n @if (mode() === 'advanced') {\n <div class=\"ax-flex ax-flex-col\">\n @if (tabs().length > 1) {\n <div class=\"ax-pb-2\">\n <ax-tabs look=\"default\" (onActiveTabChanged)=\"handleTabChange($event)\" [look]=\"'with-line'\">\n @for (tab of tabs(); track $index) {\n <ax-tab-item [text]=\"(tab.title | translate | async) ?? ''\" [key]=\"$index.toString()\"\n [active]=\"currentTabIndex() === $index\">\n </ax-tab-item>\n }\n </ax-tabs>\n </div>\n }\n <div class=\"ax-flex-1 ax-overflow-auto\">\n <ax-accordion-group [accordion]=\"false\" [look]=\"'flat'\">\n @for (group of groups(); track $index) {\n <ax-accordion-item class=\"!ax-mb-0\" [caption]=\"(group.title | translate | async) ?? ''\"\n [isCollapsed]=\"group.isCollapsed\"\n (isCollapsedChange)=\"handleCollapsedChange(group.name, $event)\">\n <div class=\"ax-flex ax-flex-col\">\n @for (p of group.props; track $index) {\n @if (isPropertyVisible(p)) {\n <ng-container *ngTemplateOutlet=\"propertyRow; context: { prop: p, translateTitle: true }\">\n </ng-container>\n }\n }\n </div>\n </ax-accordion-item>\n }\n </ax-accordion-group>\n </div>\n </div>\n }\n <!-- #endregion -->\n\n <!-- #region Simple mode: flat list of properties with padding -->\n @else {\n <div class=\"ax-flex ax-flex-col ax-p-4 ax-gap-4\">\n @for (group of groups(); track $index) {\n @for (p of group.props; track $index) {\n @if (isPropertyVisible(p)) {\n <ng-container *ngTemplateOutlet=\"propertyRow; context: { prop: p, translateTitle: true }\">\n </ng-container>\n }\n }\n }\n </div>\n }\n <!-- #endregion -->\n </axp-widgets-container>\n</ax-form>","import { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXBasePageComponent } from '@acorex/components/page';\nimport { AXToastService } from '@acorex/components/toast';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\nimport { AXValidationSummary } from '@acorex/core/validation';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n effect,\n inject,\n input,\n signal,\n viewChild,\n} from '@angular/core';\n\nimport { AXPPropertyViewerComponent } from './property-viewer.component';\nimport {\n AXPPropertyViewerChangedEvent,\n AXPPropertyViewerResult,\n AXPPropertyViewerTab,\n} from './property-viewer.types';\n\n@Component({\n selector: 'axp-property-viewer-popup',\n template: `\n <div class=\"ax-flex ax-flex-col ax-h-full ax-overflow-hidden\">\n <axp-property-viewer\n [tabsInput]=\"tabs()\"\n [mode]=\"mode()\"\n (onChanged)=\"handlePropertyChanged($event)\"\n ></axp-property-viewer>\n </div>\n\n <ax-footer>\n <ax-suffix>\n <ax-button\n look=\"solid\"\n [disabled]=\"isApplying()\"\n [text]=\"('@general:actions.cancel.title' | translate | async) ?? ''\"\n (onClick)=\"handleCloseClick()\"\n ></ax-button>\n <ax-button\n look=\"solid\"\n color=\"primary\"\n [disabled]=\"isApplying()\"\n [text]=\"('@general:actions.save.title' | translate | async) ?? ''\"\n (onClick)=\"handleApplyClick()\"\n ></ax-button>\n </ax-suffix>\n </ax-footer>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n AXButtonModule,\n AXDecoratorModule,\n AXTranslationModule,\n AXPPropertyViewerComponent,\n ],\n})\nexport class AXPPropertyViewerPopupComponent extends AXBasePageComponent {\n //#region ---- Services ----\n\n private readonly toastService = inject(AXToastService);\n private readonly translationService = inject(AXTranslationService);\n\n //#endregion\n\n //#region ---- Inputs ----\n\n tabs = input.required<AXPPropertyViewerTab[]>();\n mode = input<'simple' | 'advanced'>('simple');\n context = input<any>({});\n\n //#endregion\n\n //#region ---- Popup data (assigned by AXPopupService; not `input()` — avoids host overwriting signal inputs) ----\n\n /**\n * Optional hook from `data.onApply`. Throw or reject to keep the popup open.\n * Return a value (not `undefined`) to use as the `close()` payload; otherwise `{ values, mode }` is used.\n */\n onApply?: (result: AXPPropertyViewerResult) => void | Promise<unknown>;\n\n //#endregion\n\n //#region ---- Properties ----\n\n protected readonly propertyViewer = viewChild(AXPPropertyViewerComponent);\n protected readonly currentValues = signal<Record<string, unknown>>({});\n protected readonly isApplying = signal(false);\n protected currentMode: 'init' | 'update' = 'init';\n\n //#endregion\n\n constructor() {\n super();\n\n effect(() => {\n const viewer = this.propertyViewer();\n if (!viewer) {\n return;\n }\n viewer.initializeContext(this.context() ?? {});\n });\n }\n\n //#region ---- Event Handlers ----\n\n protected handlePropertyChanged(event: AXPPropertyViewerChangedEvent): void {\n this.currentValues.set(event.values ?? {});\n this.currentMode = event.mode;\n }\n\n protected handleCloseClick(): void {\n this.close();\n }\n\n protected async handleApplyClick(): Promise<void> {\n const viewer = this.propertyViewer();\n if (viewer) {\n const summary = await viewer.validate();\n if (!summary.result) {\n await this.showValidationErrorToast(summary);\n return;\n }\n }\n\n const payload: AXPPropertyViewerResult = {\n values: this.currentValues(),\n mode: this.currentMode,\n };\n const defaultClose: AXPPropertyViewerResult = { values: payload.values, mode: payload.mode };\n const hook = this.onApply;\n if (hook) {\n this.isApplying.set(true);\n try {\n const out = await Promise.resolve(hook(payload));\n this.close(out === undefined ? defaultClose : out);\n } catch {\n return;\n } finally {\n this.isApplying.set(false);\n }\n return;\n }\n this.close(defaultClose);\n }\n\n private async showValidationErrorToast(summary: AXValidationSummary): Promise<void> {\n const withMessages = summary as AXValidationSummary & { messages?: string[] };\n const parts = (withMessages.messages ?? []).map((m) => (m != null ? String(m).trim() : '')).filter(Boolean);\n const detail = parts.length > 0 ? parts.join(' ') : '';\n const fallback =\n (await this.translationService.translateAsync('@general:messages.form.invalid.error.description')) ??\n 'Please fix the highlighted fields.';\n this.toastService.danger(detail || fallback);\n }\n\n //#endregion\n}\n","import { Injectable, inject, signal } from '@angular/core';\nimport { AXPopupService, AXPopupSizeType } from '@acorex/components/popup';\nimport { AXPDefaultMultiLanguageConfigService } from '@acorex/platform/common';\nimport { cloneDeep } from 'lodash-es';\n\nimport { AXPPropertyViewerPopupComponent } from './property-viewer-popup.component';\nimport { preparePropertyViewerTabs } from './property-viewer-tab-pipeline';\nimport {\n AXPPropertyViewerActionRef,\n AXPPropertyViewerResult,\n AXPPropertyViewerTab,\n} from './property-viewer.types';\n\n//#region ---- Fluent dialog API (mirrors layoutBuilder.create().dialog(...).show()) ----\n\nexport interface IAXPPropertyViewerRoot {\n dialog<T = unknown>(\n delegate: (container: IAXPPropertyViewerDialogBuilder<T>) => void,\n ): IAXPPropertyViewerDialogBuilder<T>;\n}\n\nexport interface IAXPPropertyViewerDialogBuilder<T = unknown> {\n setTitle(title: string): IAXPPropertyViewerDialogBuilder<T>;\n setSize(size: AXPopupSizeType): IAXPPropertyViewerDialogBuilder<T>;\n setCloseButton(closeButton: boolean): IAXPPropertyViewerDialogBuilder<T>;\n setContext(context: any): IAXPPropertyViewerDialogBuilder<T>;\n setTabs(tabs: AXPPropertyViewerTab[]): IAXPPropertyViewerDialogBuilder<T>;\n setMode(mode: 'simple' | 'advanced'): IAXPPropertyViewerDialogBuilder<T>;\n /**\n * Runs on Save. Throw or reject to keep the popup open (same idea as layout dialog `onAction`).\n * Return a value to resolve `show()`; omit return (or return void) to resolve with `{ values, mode }`.\n */\n onAction(\n handler: (dialogRef: AXPPropertyViewerActionRef) => T | Promise<T> | void | Promise<void>,\n ): IAXPPropertyViewerDialogBuilder<T>;\n show(): Promise<T | AXPPropertyViewerResult | null>;\n}\n\nclass PropertyViewerDialogBuilder<T = unknown> implements IAXPPropertyViewerDialogBuilder<T> {\n private titleValue = '';\n private sizeValue: AXPopupSizeType = 'md';\n private closeButtonValue = false;\n private contextValue: any = {};\n private tabsValue: AXPPropertyViewerTab[] | undefined;\n private modeValue: 'simple' | 'advanced' = 'simple';\n private onActionHandler?: (\n dialogRef: AXPPropertyViewerActionRef,\n ) => T | Promise<T> | void | Promise<void>;\n\n constructor(\n private readonly popupService: AXPopupService,\n private readonly getApplyDefaultMultiLanguage: () => boolean,\n ) {}\n\n setTitle(title: string): IAXPPropertyViewerDialogBuilder<T> {\n this.titleValue = title;\n return this;\n }\n\n setSize(size: AXPopupSizeType): IAXPPropertyViewerDialogBuilder<T> {\n this.sizeValue = size;\n return this;\n }\n\n setCloseButton(closeButton: boolean): IAXPPropertyViewerDialogBuilder<T> {\n this.closeButtonValue = closeButton;\n return this;\n }\n\n setContext(context: any): IAXPPropertyViewerDialogBuilder<T> {\n this.contextValue = context;\n return this;\n }\n\n setTabs(tabs: AXPPropertyViewerTab[]): IAXPPropertyViewerDialogBuilder<T> {\n this.tabsValue = tabs;\n return this;\n }\n\n setMode(mode: 'simple' | 'advanced'): IAXPPropertyViewerDialogBuilder<T> {\n this.modeValue = mode;\n return this;\n }\n\n onAction(\n handler: (dialogRef: AXPPropertyViewerActionRef) => T | Promise<T> | void | Promise<void>,\n ): IAXPPropertyViewerDialogBuilder<T> {\n this.onActionHandler = handler;\n return this;\n }\n\n async show(): Promise<T | AXPPropertyViewerResult | null> {\n if (!this.tabsValue?.length) {\n throw new Error('Property viewer dialog: call setTabs([...]) before show().');\n }\n\n const onApply = async (payload: AXPPropertyViewerResult): Promise<unknown> => {\n const fallback: AXPPropertyViewerResult = { values: payload.values, mode: payload.mode };\n if (!this.onActionHandler) {\n return fallback;\n }\n const dialogRef: AXPPropertyViewerActionRef = {\n close: () => {},\n context: () => payload.values,\n action: () => 'submit',\n setLoading: () => {},\n };\n const out = await this.onActionHandler(dialogRef);\n return out === undefined ? fallback : out;\n };\n\n const tabSource = this.tabsValue ?? [];\n const preparedTabs = preparePropertyViewerTabs(cloneDeep(tabSource), this.getApplyDefaultMultiLanguage());\n\n const result = await this.popupService.open(AXPPropertyViewerPopupComponent, {\n title: this.titleValue,\n size: this.sizeValue,\n closeButton: this.closeButtonValue,\n data: {\n tabs: signal(preparedTabs),\n mode: signal(this.modeValue),\n context: signal(this.contextValue ?? {}),\n onApply,\n },\n });\n\n return (result?.data as T | AXPPropertyViewerResult) ?? null;\n }\n}\n\n//#endregion\n\n//#region ---- Legacy single-call config ----\n\nexport interface AXPPropertyViewerConfig {\n title: string;\n tabs: AXPPropertyViewerTab[];\n context?: any;\n mode?: 'simple' | 'advanced';\n size?: AXPopupSizeType;\n /**\n * When set, runs before close on Save. Throw or reject to keep the popup open.\n */\n onApply?: (result: AXPPropertyViewerResult) => void | Promise<void>;\n}\n\n//#endregion\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPPropertyViewerService {\n //#region ---- Services & Dependencies ----\n\n private readonly popupService = inject(AXPopupService);\n private readonly defaultMultiLanguageConfig = inject(AXPDefaultMultiLanguageConfigService);\n\n //#endregion\n\n //#region ---- Public Methods ----\n\n /**\n * Same entry shape as `layoutBuilder.create()` — use `.dialog((d) => { ... }).show()`.\n */\n create(): IAXPPropertyViewerRoot {\n const popupService = this.popupService;\n const getApplyMl = () => this.defaultMultiLanguageConfig.getApplyDefaultMultiLanguage();\n return {\n dialog: <T>(delegate: (container: IAXPPropertyViewerDialogBuilder<T>) => void) => {\n const b = new PropertyViewerDialogBuilder<T>(popupService, getApplyMl);\n delegate(b);\n return b;\n },\n };\n }\n\n /**\n * Opens the property viewer popup in one call (delegates to {@link #create} `.dialog().show()`).\n */\n async open(config: AXPPropertyViewerConfig): Promise<AXPPropertyViewerResult | null> {\n const result = await this.create().dialog((d) => {\n d.setTitle(config.title)\n .setSize(config.size ?? 'md')\n .setCloseButton(false)\n .setMode(config.mode ?? 'simple')\n .setTabs(config.tabs)\n .setContext(config.context ?? {});\n if (config.onApply) {\n d.onAction(async (ref) => {\n await config.onApply!({ values: ref.context(), mode: 'update' });\n });\n }\n }).show();\n return (result as AXPPropertyViewerResult) ?? null;\n }\n\n //#endregion\n}\n","import {\n AXDragDirective,\n AXDragHandleDirective,\n AXDropListDirective,\n AXDropListDroppedEvent,\n} from '@acorex/cdk/drag-drop';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AsyncPipe, NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, input, output, TemplateRef } from '@angular/core';\nimport { AXPStateMessageComponent } from '../state-message';\n\n//#region ---- Repeater rows layout ----\n\n/**\n * Presentational layout for indexed rows: optional drag-and-drop, remove controls,\n * empty state, and add action. Row body is provided via {@link rowTemplate}.\n */\n@Component({\n selector: 'axp-repeater-rows-layout',\n templateUrl: './repeater-rows-layout.component.html',\n styleUrl: './repeater-rows-layout.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n AsyncPipe,\n NgTemplateOutlet,\n AXButtonModule,\n AXDecoratorModule,\n AXTranslationModule,\n AXPStateMessageComponent,\n AXDragHandleDirective,\n AXDropListDirective,\n AXDragDirective,\n ],\n})\nexport class AXPRepeaterRowsLayoutComponent {\n count = input.required<number>();\n\n disabled = input(false);\n hasControls = input(true);\n allowReorder = input(false);\n\n rowTemplate = input.required<TemplateRef<{ index: number }>>();\n\n /** i18n keys (e.g. `@general:...`) for labels; override per usage. */\n addItemLabelKey = input<string>('@general:state-message.repeater-empty.add-item');\n emptyTitleKey = input<string>('@general:state-message.repeater-empty.title');\n emptyDescriptionKey = input<string>('@general:state-message.repeater-empty.description');\n addFirstItemLabelKey = input<string>('@general:state-message.repeater-empty.add-first-item');\n\n addClick = output<void>();\n removeClick = output<number>();\n drop = output<AXDropListDroppedEvent>();\n\n protected readonly rowIndices = computed(() => Array.from({ length: this.count() }, (_, i) => i));\n\n protected readonly rowRowClass = computed(\n () =>\n `ax-grid ax-gap-4 ax-items-center ax-pb-2 ${\n this.allowReorder() ? 'ax-grid-cols-[auto_1fr_auto]' : 'ax-grid-cols-[1fr_auto]'\n }`,\n );\n\n protected onDrop(e: AXDropListDroppedEvent): void {\n this.drop.emit(e);\n }\n\n protected onAddClick(): void {\n this.addClick.emit();\n }\n\n protected onRemoveClick(index: number): void {\n this.removeClick.emit(index);\n }\n}\n\n//#endregion\n","<div axDropList dropListOrientation=\"vertical\" (dropListDropped)=\"onDrop($event)\">\n @for (i of rowIndices(); track i) {\n <div axDrag [dragDisabled]=\"!allowReorder()\" [class]=\"rowRowClass()\">\n @if (allowReorder()) {\n <div>\n <ax-icon class=\"fa-solid fa-grip-vertical\" axDragHandle></ax-icon>\n </div>\n }\n\n <div class=\"ax-min-w-0\">\n <ng-container [ngTemplateOutlet]=\"rowTemplate()\" [ngTemplateOutletContext]=\"{ index: i }\"></ng-container>\n </div>\n\n @if (hasControls()) {\n <div class=\"ax-justify-self-end ax-self-start\">\n <ax-button [disabled]=\"disabled()\" look=\"twotone\" color=\"danger\" (onClick)=\"onRemoveClick(i)\">\n <ax-icon icon=\"fa-regular fa-xmark\"></ax-icon>\n </ax-button>\n </div>\n }\n </div>\n } @empty {\n <axp-state-message mode=\"empty\" variant=\"compact\" icon=\"fa-light fa-list\" [title]=\"emptyTitleKey()\"\n [description]=\"emptyDescriptionKey()\">\n <div slot=\"actions\">\n <ax-button [text]=\"(addFirstItemLabelKey() | translate | async)!\" look=\"twotone\" color=\"primary\"\n [disabled]=\"disabled()\" (onClick)=\"onAddClick()\">\n <ax-prefix>\n <ax-icon class=\"fa-light fa-add\"></ax-icon>\n </ax-prefix>\n </ax-button>\n </div>\n </axp-state-message>\n }\n\n @if (count() > 0) {\n <div class=\"ax-flex ax-justify-end\">\n <ax-button [text]=\"(addItemLabelKey() | translate | async)!\" look=\"twotone\" [disabled]=\"disabled()\"\n (onClick)=\"onAddClick()\">\n <ax-prefix>\n <ax-icon class=\"fa-solid fa-add\"></ax-icon>\n </ax-prefix>\n </ax-button>\n </div>\n }\n</div>","import { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXTabsModule } from '@acorex/components/tabs';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPSortDefinition, AXPSortQuery } from '@acorex/platform/core';\nimport { CdkDrag, CdkDragDrop, CdkDragHandle, CdkDropList, moveItemInArray } from '@angular/cdk/drag-drop';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n effect,\n input,\n model,\n output,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport { isEqual } from 'lodash-es';\n\n@Component({\n selector: 'axp-query-sorts',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './query-sorts.component.html',\n encapsulation: ViewEncapsulation.None,\n imports: [\n CdkDropList,\n CdkDrag,\n CdkDragHandle,\n AXTabsModule,\n AXTranslationModule,\n CommonModule,\n AXDecoratorModule,\n AXButtonModule,\n ],\n})\nexport class AXPQuerySortsComponent {\n sortDefinitions = model<AXPSortDefinition[]>([]);\n sortQueries = signal<AXPSortQuery[]>([], {\n equal: isEqual,\n });\n\n initialSortQueries = input<AXPSortQuery[]>([]);\n sortQueriesChange = output<AXPSortQuery[]>();\n\n constructor() {\n // Recompute merged sort queries whenever inputs change\n effect(() => {\n const initialQueries = this.initialSortQueries();\n const definitions = this.sortDefinitions();\n\n const existingQueriesMap = new Map(initialQueries.map((q) => [q.name, q]));\n\n const mergedQueries = definitions.map((def) => {\n const existingQuery = existingQueriesMap.get(def.name);\n return existingQuery ? { ...def, dir: existingQuery.dir } : { ...def };\n });\n this.sortQueries.set(mergedQueries);\n });\n\n effect(() => {\n this.sortQueriesChange.emit(this.sortQueries().filter((q) => q.dir !== undefined));\n });\n }\n\n protected drop(event: CdkDragDrop<unknown[]>) {\n const sd = this.sortDefinitions();\n moveItemInArray(sd, event.previousIndex, event.currentIndex);\n this.sortDefinitions.set([...sd]);\n\n // Reorder sortQueries based on new sortDefinitions order\n const sq = this.sortQueries();\n moveItemInArray(sq, event.previousIndex, event.currentIndex);\n this.sortQueries.set([...sq]);\n }\n\n getSortDirection(item: AXPSortDefinition) {\n return this.sortQueries().find((i) => i.name === item.name)?.dir;\n }\n\n protected changeItemSort(item: AXPSortDefinition) {\n const itemDirection = this.getSortDirection(item);\n const newDirection = itemDirection === 'asc' ? 'desc' : itemDirection === 'desc' ? undefined : 'asc';\n\n this.sortQueries.update((prev) => {\n return prev.map((field) => {\n if (field.name === item.name) {\n return { ...field, dir: newDirection };\n }\n return field;\n });\n });\n }\n}\n","<div class=\"ax-flex ax-flex-col ax-justify-center ax-gap-4 ax-select-none\">\n <div class=\"ax-flex ax-flex-col ax-gap-4 ax-select-none\" cdkDropList (cdkDropListDropped)=\"drop($event)\">\n <div class=\"ax-flex ax-flex-col ax-gap-3 ax-w-full ax-sorted-list ax-max-h-[calc(100vh-280px)] ax-overflow-auto\">\n @for (item of sortDefinitions(); track item.name) {\n <div class=\"ax-flex ax-py-1 ax-items-center ax-justify-between\" cdkDrag cdkDragBoundary=\".ax-sorted-list\">\n <div class=\"ax-flex ax-items-center ax-gap-3\" cdkDragHandle>\n <ax-icon class=\"fa-solid fa-grip-dots-vertical ax-cursor-move\"></ax-icon>\n <p class=\"ax-font-medium ax-text-sm\">{{ item.title | translate | async }}</p>\n </div>\n <ax-button [color]=\"'blank'\" class=\"ax-sm\" (click)=\"changeItemSort(item)\">\n <ax-icon\n [class.ax-text-primary]=\"getSortDirection(item) === 'asc'\"\n class=\"fa-solid fa-arrow-up-long ax-text-neutral-400\"\n ></ax-icon>\n <ax-icon\n [class.ax-text-primary]=\"getSortDirection(item) === 'desc'\"\n class=\"fa-solid fa-arrow-down-long ax-text-neutral-400\"\n ></ax-icon>\n </ax-button>\n </div>\n }\n </div>\n </div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n HostListener,\n inject,\n input,\n model,\n output,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { set, get } from 'lodash-es';\n\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\nimport { AXClickEvent } from '@acorex/cdk/common';\nimport {\n AXPWidgetCoreModule,\n AXPWidgetNode,\n} from '@acorex/platform/layout/widget-core';\nimport { AXPContextChangeEvent, AXPDataGenerator } from '@acorex/platform/core';\n\nimport {\n AXPSpreadsheetColumn,\n AXPSpreadsheetRowMode,\n AXPSpreadsheetCellChangeEvent,\n AXPSpreadsheetRowChangeEvent,\n} from './spreadsheet.types';\n\n//#region ---- Component Definition ----\n\n@Component({\n selector: 'axp-spreadsheet',\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n AXTranslationModule,\n AXButtonModule,\n AXDecoratorModule,\n AXPWidgetCoreModule,\n ],\n templateUrl: './spreadsheet.component.html',\n styleUrl: './spreadsheet.component.scss',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'axp-spreadsheet',\n },\n})\nexport class AXPSpreadsheetComponent {\n //#endregion\n\n //#region ---- Services & Dependencies ----\n\n protected readonly translationService = inject(AXTranslationService);\n\n //#endregion\n\n //#region ---- Computed Properties for Translations ----\n\n /**\n * Translated column titles\n */\n protected translatedColumnTitles = signal<Map<string, string>>(new Map());\n\n //#endregion\n\n //#region ---- Inputs ----\n\n /**\n * Title for the spreadsheet (displayed in corner cell)\n */\n title = input<string>('');\n\n /**\n * Column definitions\n */\n columns = input.required<AXPSpreadsheetColumn[]>();\n\n /**\n * Row mode: 'fixed' or 'dynamic'\n */\n rowMode = input<AXPSpreadsheetRowMode>('fixed');\n\n /**\n * Rows data (for fixed mode - input only)\n * Each row must have a 'name' property for identification\n */\n rowsInput = input<Record<string, any>[]>([]);\n\n /**\n * Rows data (for dynamic mode - two-way binding)\n */\n rowsModel = model<Record<string, any>[]>([]);\n\n /**\n * Whether the spreadsheet is in readonly mode\n */\n readonly = input<boolean>(false);\n\n /**\n * Placeholder text for empty cells (default: \"–\")\n */\n emptyCellPlaceholder = input<string>('–');\n\n /**\n * Path to property in row object to display as row header title\n * Example: 'name', 'title', 'user.name'\n */\n rowTitlePath = input<string | null>(null);\n\n /**\n * Path to property in row object to display as row header description\n * Example: 'description', 'details', 'user.description'\n */\n rowDescriptionPath = input<string | null>(null);\n\n /**\n * Whether to allow adding rows (dynamic mode only, default: true)\n */\n allowAddRows = input<boolean>(true);\n\n /**\n * Whether to allow removing rows (default: true for dynamic mode, false for fixed mode)\n * Can be enabled for fixed mode if needed\n */\n allowRemoveRows = input<boolean>(true);\n\n //#endregion\n\n //#region ---- Outputs ----\n\n /**\n * Emitted when a single cell value changes\n */\n cellChange = output<AXPSpreadsheetCellChangeEvent>();\n\n /**\n * Emitted when rows are added or removed (dynamic mode only)\n */\n rowChange = output<AXPSpreadsheetRowChangeEvent>();\n\n /**\n * Emitted when the entire spreadsheet data changes\n */\n spreadsheetChange = output<Record<string, any>[]>();\n\n //#endregion\n\n //#region ---- Class Properties ----\n\n /**\n * Currently editing cell: { rowId, columnName } | null\n */\n protected editingCell = signal<{ rowId: string; columnName: string } | null>(null);\n\n /**\n * Original value when entering edit mode (for cancel functionality)\n */\n private originalCellValue = signal<any>(null);\n\n /**\n * Internal rows state (for fixed mode)\n */\n private internalRows = signal<Record<string, any>[]>([]);\n\n /**\n * Row ID mapping: rowId -> row index (for tracking)\n */\n private rowIdMap = new Map<string, number>();\n\n /**\n * Cache for widget nodes to prevent re-rendering\n * Key: `${rowIndex}_${columnName}`, Value: AXPWidgetNode\n */\n private widgetNodeCache = new Map<string, AXPWidgetNode>();\n\n /**\n * Cache for cell values to detect actual changes\n * Key: `${rowIndex}_${columnName}`, Value: any\n */\n private cellValueCache = new Map<string, any>();\n\n //#endregion\n\n //#region ---- Computed Properties ----\n\n /**\n * Get current rows based on mode\n */\n protected currentRows = computed<Record<string, any>[]>(() => {\n if (this.rowMode() === 'dynamic') {\n return this.rowsModel();\n } else {\n return this.internalRows();\n }\n });\n\n /**\n * Context for widgets-container (all rows as an object with rows array)\n * This allows widgets to access their cell via path like: rows[index].column.path\n */\n protected spreadsheetContext = computed<{ rows: Record<string, any>[] }>(() => {\n return {\n rows: this.currentRows(),\n };\n });\n\n /**\n * Get rows with IDs (ensure all rows have identifiers)\n */\n protected rowsWithIds = computed<Array<{ rowId: string; row: Record<string, any> }>>(() => {\n const rows = this.currentRows();\n const mode = this.rowMode();\n const result: Array<{ rowId: string; row: Record<string, any> }> = [];\n\n rows.forEach((row, index) => {\n let rowId: string;\n\n if (mode === 'fixed') {\n // Fixed mode: use 'name' property\n rowId = row['name'] || `row_${index}`;\n } else {\n // Dynamic mode: generate ID if not exists\n if (!row['_id']) {\n row['_id'] = this.generateRowId();\n }\n rowId = row['_id'];\n }\n\n // Update row ID map\n this.rowIdMap.set(rowId, index);\n\n result.push({ rowId, row });\n });\n\n return result;\n });\n\n /**\n * Check if spreadsheet is completely empty (both columns and rows)\n */\n protected isEmpty = computed<boolean>(() => {\n const columns = this.columns();\n const rows = this.currentRows();\n return (!columns || columns.length === 0) && (!rows || rows.length === 0);\n });\n\n /**\n * Check if columns are empty (regardless of rows)\n * When columns are empty, we should show a message about missing columns, not rows\n */\n protected isColumnsEmpty = computed<boolean>(() => {\n const columns = this.columns();\n return !columns || columns.length === 0;\n });\n\n /**\n * Check if only rows are empty (columns exist but no rows)\n */\n protected isRowsEmpty = computed<boolean>(() => {\n const columns = this.columns();\n const rows = this.currentRows();\n return (columns && columns.length > 0) && (!rows || rows.length === 0);\n });\n\n //#endregion\n\n //#region ---- Lifecycle Methods ----\n\n constructor() {\n // Initialize rows from input (fixed mode)\n this.internalRows.set(this.rowsInput());\n\n // Watch for rowsInput changes and update internalRows (fixed mode only)\n effect(() => {\n const rowsInput = this.rowsInput();\n const rowMode = this.rowMode();\n\n // Only update internalRows in fixed mode\n if (rowMode === 'fixed') {\n this.internalRows.set(rowsInput);\n }\n });\n }\n\n //#endregion\n\n //#region ---- Cell Value Methods ----\n\n /**\n * Get the value for a specific cell by row index\n */\n protected getCellValue(rowIndex: number, columnName: string): any {\n const rows = this.currentRows();\n const row = rows[rowIndex];\n if (!row) {\n return null;\n }\n\n const column = this.columns().find((col) => col.name === columnName);\n if (!column) {\n return null;\n }\n\n return get(row, column.path, null);\n }\n\n /**\n * Get row title from row object using rowTitlePath\n */\n protected getRowTitle(row: Record<string, any>, path: string): string {\n if (!row || !path) {\n return '';\n }\n return get(row, path, '') || '';\n }\n\n /**\n * Get row description from row object using rowDescriptionPath\n */\n protected getRowDescription(row: Record<string, any>, path: string): string {\n if (!row || !path) {\n return '';\n }\n return get(row, path, '') || '';\n }\n\n /**\n * Get row by ID\n */\n protected getRowById(rowId: string): Record<string, any> | null {\n const rowsWithIds = this.rowsWithIds();\n const found = rowsWithIds.find((item) => item.rowId === rowId);\n return found ? found.row : null;\n }\n\n /**\n * Check if a cell is currently being edited\n */\n protected isCellEditing(rowId: string, columnName: string): boolean {\n const editing = this.editingCell();\n return editing?.rowId === rowId && editing?.columnName === columnName;\n }\n\n /**\n * Check if a column is readonly\n */\n protected isColumnReadonly(column: AXPSpreadsheetColumn): boolean {\n return this.readonly() || column.readonly === true;\n }\n\n /**\n * Get widget node for a cell with dynamic path based on row index\n * Path format: rows[rowIndex].column.path\n * Uses caching to prevent unnecessary re-renders\n */\n protected getCellWidgetNode(column: AXPSpreadsheetColumn, rowIndex: number): AXPWidgetNode {\n const cacheKey = `${rowIndex}_${column.name}`;\n const rows = this.currentRows();\n const row = rows[rowIndex];\n const currentValue = row ? get(row, column.path, null) : null;\n const cachedValue = this.cellValueCache.get(cacheKey);\n\n // Get or create widget node\n let widgetNode = this.widgetNodeCache.get(cacheKey);\n\n if (!widgetNode) {\n // Create path: rows[index].column.path\n const dynamicPath = `rows.${rowIndex}.${column.path}`;\n\n // Create new widget node\n widgetNode = {\n ...column.widget,\n path: dynamicPath,\n defaultValue: currentValue !== null && currentValue !== undefined ? currentValue : column.widget.defaultValue,\n };\n\n // Cache the widget node\n this.widgetNodeCache.set(cacheKey, widgetNode);\n this.cellValueCache.set(cacheKey, currentValue);\n } else {\n // Update path in case row index changed (shouldn't happen, but be safe)\n widgetNode.path = `rows.${rowIndex}.${column.path}`;\n\n // Only update defaultValue if value actually changed (to prevent re-renders)\n if (cachedValue !== currentValue) {\n widgetNode.defaultValue = currentValue !== null && currentValue !== undefined ? currentValue : column.widget.defaultValue;\n this.cellValueCache.set(cacheKey, currentValue);\n }\n }\n\n return widgetNode;\n }\n\n //#endregion\n\n //#region ---- Event Handlers ----\n\n /**\n * Handle cell click to start editing\n */\n protected handleCellClick(rowId: string, columnName: string, event?: MouseEvent): void {\n if (this.readonly()) {\n return;\n }\n\n // Don't open editor if clicking on toolbar or buttons\n if (event) {\n const target = event.target as HTMLElement;\n if (target.closest('.__cell-toolbar') || target.closest('ax-button')) {\n return;\n }\n }\n\n const column = this.columns().find((col) => col.name === columnName);\n if (!column || this.isColumnReadonly(column)) {\n return;\n }\n\n // Don't open if already editing this cell\n const currentEditing = this.editingCell();\n if (currentEditing?.rowId === rowId && currentEditing?.columnName === columnName) {\n return;\n }\n\n // Store original value for cancel functionality\n const row = this.getRowById(rowId);\n if (row) {\n const originalValue = get(row, column.path, null);\n this.originalCellValue.set(originalValue);\n }\n\n this.editingCell.set({ rowId, columnName });\n }\n\n /**\n * Handle cell value change from widget\n * The widget sets the value at path like rows[index].column.path\n */\n protected handleCellValueChange(\n rowIndex: number,\n columnName: string,\n event: AXPContextChangeEvent\n ): void {\n // Only process if context has changed (not just initiated)\n if (event.state !== 'changed') {\n return;\n }\n\n const rows = this.currentRows();\n const row = rows[rowIndex];\n if (!row) {\n return;\n }\n\n const column = this.columns().find((col) => col.name === columnName);\n if (!column) {\n return;\n }\n\n // Get the new value from the context (widget sets it at rows[index].column.path)\n const dynamicPath = `rows.${rowIndex}.${column.path}`;\n const newValue = get(event.data, dynamicPath);\n\n // Update the row object directly\n set(row, column.path, newValue);\n\n // Update rows array\n this.updateRows();\n\n // Get rowId for events\n const rowId = this.rowMode() === 'fixed' ? row['name'] : row['_id'];\n\n // Emit events\n this.cellChange.emit({\n rowId: rowId || `row_${rowIndex}`,\n columnName,\n value: newValue,\n row: { ...row },\n });\n\n this.spreadsheetChange.emit([...this.currentRows()]);\n\n // Don't close edit mode automatically - let user finish editing\n // Edit mode will close on blur or click outside\n }\n\n /**\n * Handle spreadsheet context change from widgets-container\n * This is called when any widget in the spreadsheet changes\n */\n protected handleSpreadsheetContextChange(event: AXPContextChangeEvent): void {\n if (event.state !== 'changed') {\n return;\n }\n\n // Extract row index and column from the path (format: rows[index].column.path)\n const path = event.path || '';\n const pathMatch = path.match(/^rows\\.(\\d+)\\.(.+)$/);\n\n if (!pathMatch) {\n return;\n }\n\n const rowIndex = parseInt(pathMatch[1], 10);\n const columnPath = pathMatch[2];\n\n // Find the column by path\n const column = this.columns().find((col) => col.path === columnPath);\n if (!column) {\n return;\n }\n\n // Get the new value from event.data\n const newValue = get(event.data, path);\n\n // Update the row object (sync with context)\n const rows = this.currentRows();\n const row = rows[rowIndex];\n if (row) {\n // The context should already have the updated value, but sync row object to be sure\n set(row, columnPath, newValue);\n\n // Update cache (widget node will update defaultValue on next getCellWidgetNode call)\n const cacheKey = `${rowIndex}_${column.name}`;\n this.cellValueCache.set(cacheKey, newValue);\n // Don't delete widget node cache - just update defaultValue on next access\n // This prevents re-rendering while still reflecting the new value\n\n this.updateRows();\n\n // Get rowId for events\n const rowId = this.rowMode() === 'fixed' ? row['name'] : row['_id'];\n\n // Emit events\n this.cellChange.emit({\n rowId: rowId || `row_${rowIndex}`,\n columnName: column.name,\n value: newValue,\n row: { ...row },\n });\n\n this.spreadsheetChange.emit([...this.currentRows()]);\n }\n }\n\n /**\n * Handle blur event to stop editing (when user clicks away from cell)\n */\n protected handleCellBlur(rowId: string, columnName: string): void {\n // Small delay to allow click events to process first\n setTimeout(() => {\n const editing = this.editingCell();\n if (editing?.rowId === rowId && editing?.columnName === columnName) {\n // Don't close if clicking on the toolbar or buttons\n const activeElement = document.activeElement;\n const toolbarElement = activeElement?.closest('.__cell-toolbar');\n const buttonElement = activeElement?.closest('ax-button');\n\n // Only auto-commit if not clicking on toolbar or buttons\n if (!toolbarElement && !buttonElement) {\n this.commitCellEdit();\n }\n }\n }, 150);\n }\n\n /**\n * Handle Escape key to cancel editing\n */\n @HostListener('document:keydown', ['$event'])\n protected handleKeyDown(event: KeyboardEvent): void {\n if (event.key === 'Escape' && this.editingCell()) {\n event.preventDefault();\n event.stopPropagation();\n this.cancelCellEdit();\n }\n }\n\n /**\n * Commit cell edit (save changes and close editing mode)\n */\n protected commitCellEdit(): void {\n const editing = this.editingCell();\n if (!editing) {\n return;\n }\n\n // Changes are already saved via handleSpreadsheetContextChange\n // Close the editor (same as escape, but keeps changes)\n this.editingCell.set(null);\n this.originalCellValue.set(null);\n }\n\n /**\n * Cancel cell edit (discard changes and close editing mode - same as escape)\n */\n protected cancelCellEdit(): void {\n const editing = this.editingCell();\n if (!editing) {\n return;\n }\n\n const row = this.getRowById(editing.rowId);\n const column = this.columns().find((col) => col.name === editing.columnName);\n const originalValue = this.originalCellValue();\n\n if (row && column) {\n // Restore original value in row\n set(row, column.path, originalValue);\n\n // Clear cache for this cell so widget re-renders with original value\n const rowsWithIds = this.rowsWithIds();\n const rowIndex = rowsWithIds.findIndex((item) => item.rowId === editing.rowId);\n if (rowIndex !== -1) {\n const cacheKey = `${rowIndex}_${editing.columnName}`;\n this.cellValueCache.set(cacheKey, originalValue);\n this.widgetNodeCache.delete(cacheKey);\n }\n\n this.updateRows();\n }\n\n // Close the editor (same as escape)\n this.editingCell.set(null);\n this.originalCellValue.set(null);\n }\n\n\n /**\n * Handle click outside to stop editing\n */\n protected handleClickOutside(event: MouseEvent): void {\n const target = event.target as HTMLElement;\n\n // Don't close if clicking inside a widget or its elements\n if (\n target.closest('[axp-widget-renderer]') ||\n target.closest('.ax-dropdown') ||\n target.closest('.ax-popup') ||\n target.closest('.__cell-editor')\n ) {\n return;\n }\n\n this.editingCell.set(null);\n }\n\n /**\n * Handle add row (dynamic mode only)\n */\n protected handleAddRow(): void {\n if (this.rowMode() !== 'dynamic' || !this.allowAddRows() || this.readonly()) {\n return;\n }\n\n const columns = this.columns();\n const newRow: Record<string, any> = {\n _id: this.generateRowId(),\n };\n\n // Initialize with default values from widgets\n columns.forEach((column) => {\n if (column.widget.defaultValue !== undefined && column.widget.defaultValue !== null) {\n set(newRow, column.path, column.widget.defaultValue);\n }\n });\n\n const currentRows = this.rowsModel();\n const updatedRows = [...currentRows, newRow];\n this.rowsModel.set(updatedRows);\n\n this.rowChange.emit({\n type: 'add',\n rowId: newRow['_id'],\n row: { ...newRow },\n rows: updatedRows,\n });\n\n this.spreadsheetChange.emit(updatedRows);\n }\n\n /**\n * Handle remove row (works for both fixed and dynamic modes)\n */\n protected handleRemoveRow(rowId: string, _event: AXClickEvent): void {\n if (!this.allowRemoveRows() || this.readonly()) {\n return;\n }\n\n const currentRows = this.currentRows();\n let rowIndex = -1;\n let removedRow: Record<string, any> | undefined;\n\n if (this.rowMode() === 'fixed') {\n // Fixed mode: find by 'name' property\n rowIndex = currentRows.findIndex((row) => row['name'] === rowId);\n } else {\n // Dynamic mode: find by '_id' property\n rowIndex = currentRows.findIndex((row) => row['_id'] === rowId);\n }\n\n if (rowIndex === -1) {\n return;\n }\n\n removedRow = currentRows[rowIndex];\n\n if (this.rowMode() === 'dynamic') {\n // Dynamic mode: update rowsModel\n const updatedRows = currentRows.filter((_, index) => index !== rowIndex);\n this.rowsModel.set(updatedRows);\n\n this.rowChange.emit({\n type: 'remove',\n rowId,\n row: { ...removedRow },\n rows: updatedRows,\n });\n\n this.spreadsheetChange.emit(updatedRows);\n } else {\n // Fixed mode: update internalRows and emit events\n const updatedRows = currentRows.filter((_, index) => index !== rowIndex);\n this.internalRows.set(updatedRows);\n\n this.rowChange.emit({\n type: 'remove',\n rowId,\n row: { ...removedRow },\n rows: updatedRows,\n });\n\n this.spreadsheetChange.emit(updatedRows);\n }\n }\n\n //#endregion\n\n //#region ---- Utility Methods ----\n\n /**\n * Generate unique row ID for dynamic mode\n */\n private generateRowId(): string {\n return `row_${AXPDataGenerator.uuid()}`;\n }\n\n /**\n * Update rows array (sync internal state)\n */\n private updateRows(): void {\n if (this.rowMode() === 'dynamic') {\n // For dynamic mode, rowsModel is already updated (two-way binding)\n // Just trigger change detection\n this.rowsModel.set([...this.rowsModel()]);\n } else {\n // For fixed mode, update internal state\n this.internalRows.set([...this.internalRows()]);\n }\n }\n\n //#endregion\n}\n\n//#endregion\n\n","<!--\n #region ---- Spreadsheet Component Template ----\n-->\n<div class=\"__spreadsheet-container\" (click)=\"handleClickOutside($event)\">\n @if (isColumnsEmpty()) {\n <!-- Empty State: Columns are empty (regardless of rows) -->\n <div class=\"__empty-state\">\n <div class=\"__empty-icon\">\n <i class=\"fa-light fa-table-columns\"></i>\n </div>\n <div class=\"__empty-title\">{{ '@general:state-message.empty-columns.title' | translate | async }}</div>\n <div class=\"__empty-description\">{{ '@general:state-message.empty-columns.description' | translate | async }}\n </div>\n </div>\n } @else if (isEmpty()) {\n <!-- Empty State: Both columns and rows are empty -->\n <div class=\"__empty-state\">\n <div class=\"__empty-icon\">\n <i class=\"fa-light fa-table\"></i>\n </div>\n <div class=\"__empty-title\">{{ '@general:state-message.empty.title' | translate | async }}</div>\n <div class=\"__empty-description\">{{ '@general:state-message.empty.description' | translate | async }}</div>\n </div>\n } @else if (isRowsEmpty()) {\n <!-- Empty State: Only rows are empty - Show columns -->\n <div class=\"__table-wrapper\">\n <table class=\"__table\">\n <!-- Header Row -->\n <thead class=\"__thead\">\n <tr class=\"__header-row\">\n <!-- Corner cell (title) -->\n <th class=\"__corner-cell\">\n @if (title()) {\n <div class=\"__corner-title\">{{ title() | translate | async }}</div>\n }\n @if (rowMode() === 'dynamic' && allowAddRows() && !readonly()) {\n <div class=\"__corner-actions\">\n <ax-button look=\"blank\" color=\"primary\" (onClick)=\"handleAddRow()\"\n [attr.aria-label]=\"'Add Row'\">\n <ax-icon icon=\"far fa-plus\"></ax-icon>\n </ax-button>\n </div>\n }\n </th>\n\n <!-- Column headers -->\n @for (column of columns(); track column.name) {\n <th class=\"__column-header\" [style.width]=\"column.width\">\n <div class=\"__header-content\">\n <div class=\"__header-title\">{{ column.title | translate | async }}</div>\n </div>\n </th>\n }\n </tr>\n </thead>\n\n <!-- Empty State Row -->\n <tbody class=\"__tbody\">\n <tr class=\"__row __row--empty\">\n <td class=\"__row-header\" [attr.colspan]=\"columns().length + 1\">\n <div class=\"__empty-state-inline\">\n <div class=\"__empty-icon\">\n <i class=\"fa-light fa-list\"></i>\n </div>\n <div class=\"__empty-title\">{{ '@general:state-message.empty-rows.title' | translate | async\n }}\n </div>\n <div class=\"__empty-description\">{{ '@general:state-message.empty-rows.description' |\n translate |\n async }}</div>\n </div>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n } @else {\n <!-- Full Spreadsheet: Both columns and rows are available -->\n <div class=\"__table-wrapper\">\n <table class=\"__table\">\n <!-- Header Row -->\n <thead class=\"__thead\">\n <tr class=\"__header-row\">\n <!-- Corner cell (title) -->\n <th class=\"__corner-cell\">\n @if (title()) {\n <div class=\"__corner-title\">{{ title() | translate | async }}</div>\n }\n @if (rowMode() === 'dynamic' && allowAddRows() && !readonly()) {\n <div class=\"__corner-actions\">\n <ax-button look=\"blank\" color=\"primary\" (onClick)=\"handleAddRow()\"\n [attr.aria-label]=\"'Add Row'\">\n <ax-icon icon=\"far fa-plus\"></ax-icon>\n </ax-button>\n </div>\n }\n </th>\n\n <!-- Column headers -->\n @for (column of columns(); track column.name) {\n <th class=\"__column-header\" [style.width]=\"column.width\">\n <div class=\"__header-content\">\n <div class=\"__header-title\">{{ column.title | translate | async }}</div>\n </div>\n </th>\n }\n </tr>\n </thead>\n\n <!-- Body Rows -->\n <tbody class=\"__tbody\">\n <axp-widgets-container [context]=\"spreadsheetContext()\"\n (onContextChanged)=\"handleSpreadsheetContextChange($event)\">\n @for (rowItem of rowsWithIds(); track rowItem.rowId; let rowIndex = $index) {\n <tr class=\"__row\" [class.__row--odd]=\"rowIndex % 2 === 1\">\n <!-- Row header -->\n <td class=\"__row-header\">\n <div class=\"__header-content\">\n @if (rowTitlePath()) {\n <div class=\"__header-title\">{{ getRowTitle(rowItem.row, rowTitlePath()!) }}</div>\n }\n @if (rowDescriptionPath()) {\n <div class=\"__header-description\">{{ getRowDescription(rowItem.row,\n rowDescriptionPath()!) }}</div>\n }\n </div>\n @if (allowRemoveRows() && !readonly()) {\n <div class=\"__header-actions ax-xs ax-opacity-30 hover:ax-opacity-100\">\n <ax-button look=\"blank\" color=\"danger\"\n (onClick)=\"handleRemoveRow(rowItem.rowId, $event)\" [attr.aria-label]=\"'Remove Row'\">\n <ax-icon icon=\"far fa-times\"></ax-icon>\n </ax-button>\n </div>\n }\n </td>\n\n <!-- Spreadsheet cells -->\n @for (column of columns(); track column.name) {\n <td class=\"__cell\" [class.__cell--editing]=\"isCellEditing(rowItem.rowId, column.name)\"\n [class.__cell--readonly]=\"isColumnReadonly(column)\"\n (click)=\"$event.stopPropagation(); handleCellClick(rowItem.rowId, column.name, $event)\">\n @if (isCellEditing(rowItem.rowId, column.name) && !isColumnReadonly(column)) {\n <!-- Edit mode: Show widget in edit mode -->\n <div class=\"__cell-editor\" (blur)=\"handleCellBlur(rowItem.rowId, column.name)\"\n tabindex=\"-1\">\n <ng-container axp-widget-renderer [node]=\"getCellWidgetNode(column, rowIndex)\"\n [mode]=\"'edit'\"></ng-container>\n </div>\n <!-- Floating toolbar for commit/cancel -->\n <div class=\"__cell-toolbar ax-xs\" (click)=\"$event.stopPropagation()\"\n (mousedown)=\"$event.preventDefault(); $event.stopPropagation()\"\n (mouseup)=\"$event.stopPropagation()\" (focusin)=\"$event.stopPropagation()\">\n <ax-button look=\"blank\" color=\"success\" (onClick)=\"commitCellEdit()\"\n [attr.aria-label]=\"'Commit'\">\n <ax-icon icon=\"far fa-check\"></ax-icon>\n </ax-button>\n <ax-button look=\"blank\" color=\"danger\" (onClick)=\"cancelCellEdit()\"\n [attr.aria-label]=\"'Cancel'\">\n <ax-icon icon=\"far fa-times\"></ax-icon>\n </ax-button>\n </div>\n } @else {\n <!-- View mode: Show widget in view mode or placeholder -->\n <div class=\"__cell-value\">\n @if (getCellValue(rowIndex, column.name) !== null &&\n getCellValue(rowIndex, column.name) !== undefined) {\n <ng-container axp-widget-renderer [node]=\"getCellWidgetNode(column, rowIndex)\"\n [mode]=\"'view'\"></ng-container>\n } @else {\n <span class=\"__cell-placeholder\">{{ emptyCellPlaceholder() }}</span>\n }\n </div>\n }\n </td>\n }\n </tr>\n }\n </axp-widgets-container>\n </tbody>\n </table>\n </div>\n }\n</div>\n<!--\n #endregion\n-->","import { AXPWidgetNode } from '@acorex/platform/layout/widget-core';\n\n//#region ---- Spreadsheet Item Interface ----\n\n/**\n * Represents a spreadsheet item (row or column header) with id, text, and optional description\n */\nexport interface AXPSpreadsheetItem {\n id: string;\n title: string;\n description?: string;\n /**\n * Optional CSS class for cell styling (e.g., 'ax-bg-success-lightest ax-text-success' for green)\n * Used when this item is used as a cell value to color-code the cell\n * Allows proper control of both background and text colors\n */\n cssClass?: string;\n}\n\n//#endregion\n\n//#region ---- Spreadsheet Column Interface ----\n\n/**\n * Represents the value structure for spreadsheet cells\n * Stores only the ID reference to the item in cellOptions\n */\nexport type AXPSpreadsheetCellValue = string | null;\n\n//#endregion\n\n//#region ---- Matrix Data Structure ----\n\n/**\n * Matrix data structure: { [rowId]: { [columnId]: cellValueId } }\n * cellValueId is the ID of an item from cellOptions\n */\nexport type AXPSpreadsheetData = Record<string, Record<string, AXPSpreadsheetCellValue>>;\n\n/**\n * Represents a column definition in the spreadsheet\n */\nexport interface AXPSpreadsheetColumn {\n /**\n * Column identifier (unique name)\n */\n name: string;\n\n /**\n * Display title for column header\n */\n title: string;\n\n /**\n * Optional description for column header\n */\n description?: string;\n\n /**\n * Path to access row property (e.g., 'user.name', 'age')\n * Used to get/set values in row objects\n */\n path: string;\n\n /**\n * Widget configuration for this column\n * All cells in this column will use this widget\n */\n widget: AXPWidgetNode;\n\n /**\n * Optional column width\n */\n width?: string;\n\n /**\n * Column-level readonly override\n */\n readonly?: boolean;\n}\n\n//#endregion\n\n//#region ---- Spreadsheet Row Mode ----\n\n/**\n * Spreadsheet row mode\n * - 'fixed': Rows are provided as input, cannot add/remove (like matrix)\n * - 'dynamic': Users can add/remove rows dynamically (like Excel)\n */\nexport type AXPSpreadsheetRowMode = 'fixed' | 'dynamic';\n\n//#endregion\n\n//#region ---- Spreadsheet Cell Change Event ----\n\n/**\n * Event emitted when a single cell value changes\n */\nexport interface AXPSpreadsheetCellChangeEvent {\n /**\n * Row identifier (name for fixed mode, generated ID for dynamic mode)\n */\n rowId: string;\n\n /**\n * Column name\n */\n columnName: string;\n\n /**\n * New cell value (whatever the widget returns)\n */\n value: any;\n\n /**\n * Full row object after update\n */\n row: Record<string, any>;\n}\n\n//#endregion\n\n//#region ---- Spreadsheet Row Change Event ----\n\n/**\n * Event emitted when a row is added or removed (dynamic mode only)\n */\nexport interface AXPSpreadsheetRowChangeEvent {\n /**\n * Type of change: 'add' or 'remove'\n */\n type: 'add' | 'remove';\n\n /**\n * Row identifier\n */\n rowId: string;\n\n /**\n * Full row object (for 'add' events)\n */\n row?: Record<string, any>;\n\n /**\n * All rows after the change\n */\n rows: Record<string, any>[];\n}\n\n//#endregion\n\n//#region ---- Spreadsheet Configuration ----\n\n/**\n * Configuration for the spreadsheet component\n */\nexport interface AXPSpreadsheetConfig {\n /**\n * Widget configuration for cell editing (SelectBox)\n */\n cellWidget?: AXPWidgetNode;\n\n /**\n * Whether the spreadsheet is in readonly mode\n */\n readonly?: boolean;\n\n /**\n * Placeholder text for empty cells\n */\n emptyCellPlaceholder?: string;\n}\n\n//#endregion\n\n","//#region ---- Imports ----\n\nimport { AXButtonModule } from '@acorex/components/button';\nimport { ChangeDetectionStrategy, Component, computed, effect, input, OnDestroy, output, signal } from '@angular/core';\n\n\n//#endregion\n\n//#region ---- Component ----\n\n@Component({\n selector: 'axp-stopwatch',\n standalone: true,\n template: `\n <div class=\"axp-stopwatch ax-flex ax-items-center ax-gap-3 ax-px-3 ax-py-1.5\">\n <div class=\"ax-flex ax-items-center ax-gap-2\">\n <i class=\"fa-light fa-stopwatch ax-text-primary-600\"></i>\n <span class=\"ax-text-sm ax-font-mono ax-font-semibold ax-tabular-nums\" [class.ax-text-danger]=\"isTimeUp()\">\n {{ displayTime() }}\n </span>\n </div>\n @if (showControls()) {\n <div class=\"ax-flex ax-items-center ax-gap-2\">\n @if (isRunning()) {\n <ax-button\n look=\"solid\"\n size=\"sm\"\n color=\"primary\"\n (onClick)=\"pause()\"\n >\n <i class=\"fa-light fa-pause\"></i>\n </ax-button>\n <ax-button\n look=\"solid\"\n size=\"sm\"\n color=\"danger\"\n (onClick)=\"reset()\"\n >\n <i class=\"fa-light fa-stop\"></i>\n </ax-button>\n } @else {\n <ax-button\n look=\"solid\"\n size=\"sm\"\n color=\"primary\"\n (onClick)=\"start()\"\n >\n <i class=\"fa-light fa-play\"></i>\n </ax-button>\n }\n </div>\n }\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AXButtonModule],\n host: {\n class: 'ax-inline-flex',\n },\n styles: [\n `\n :host {\n display: inline-flex;\n }\n `,\n ],\n})\nexport class AXPStopwatchComponent implements OnDestroy {\n //#region ---- Inputs ----\n\n mode = input<'count-up' | 'count-down'>('count-up');\n timeLimit = input<number | undefined>(undefined); // seconds\n format = input<'hh:mm:ss' | 'mm:ss' | 'ss'>('mm:ss');\n autoStart = input<boolean>(false);\n showControls = input<boolean>(true);\n value = input<number>(0); // current elapsed time in seconds\n\n //#endregion\n\n //#region ---- Outputs ----\n\n valueChange = output<number>();\n timeUp = output<void>();\n\n //#endregion\n\n //#region ---- State ----\n\n private readonly currentTime = signal<number>(0);\n protected readonly isRunning = signal<boolean>(false);\n private intervalId: any = null;\n\n //#endregion\n\n //#region ---- Computed Properties ----\n\n protected readonly isTimeUp = computed<boolean>(() => {\n const mode = this.mode();\n const timeLimit = this.timeLimit();\n const current = this.currentTime();\n\n if (mode === 'count-down' && timeLimit !== undefined) {\n return current >= timeLimit;\n }\n return false;\n });\n\n protected readonly displayTime = computed<string>(() => {\n const current = this.currentTime();\n const format = this.format();\n const mode = this.mode();\n const timeLimit = this.timeLimit();\n\n let seconds = current;\n if (mode === 'count-down' && timeLimit !== undefined) {\n seconds = Math.max(0, timeLimit - current);\n }\n\n return this.formatTime(seconds, format);\n });\n\n //#endregion\n\n //#region ---- Lifecycle ----\n\n constructor() {\n // Initialize from value input if available\n effect(() => {\n const value = this.value();\n if (value !== null && value !== undefined) {\n this.currentTime.set(value);\n }\n });\n\n // Auto-start if enabled\n effect(() => {\n if (this.autoStart() && !this.isRunning()) {\n this.start();\n }\n });\n }\n\n ngOnDestroy(): void {\n this.stop();\n }\n\n //#endregion\n\n //#region ---- Methods ----\n\n start(): void {\n if (this.isRunning()) return;\n\n this.isRunning.set(true);\n this.intervalId = setInterval(() => {\n const current = this.currentTime();\n const mode = this.mode();\n const timeLimit = this.timeLimit();\n\n if (mode === 'count-down' && timeLimit !== undefined) {\n if (current >= timeLimit) {\n this.stop();\n this.onTimeUp();\n return;\n }\n }\n\n const newTime = current + 1;\n this.currentTime.set(newTime);\n this.valueChange.emit(newTime);\n }, 1000);\n }\n\n pause(): void {\n this.stop();\n }\n\n reset(): void {\n this.stop();\n this.currentTime.set(0);\n this.valueChange.emit(0);\n }\n\n private stop(): void {\n if (this.intervalId) {\n clearInterval(this.intervalId);\n this.intervalId = null;\n }\n this.isRunning.set(false);\n }\n\n private onTimeUp(): void {\n this.timeUp.emit();\n }\n\n private formatTime(seconds: number, format: 'hh:mm:ss' | 'mm:ss' | 'ss'): string {\n const hours = Math.floor(seconds / 3600);\n const minutes = Math.floor((seconds % 3600) / 60);\n const secs = seconds % 60;\n\n if (format === 'ss') {\n return `${secs.toString().padStart(2, '0')}s`;\n }\n\n if (format === 'mm:ss') {\n return `${minutes.toString().padStart(2, '0')}:${secs.toString().padStart(2, '0')}`;\n }\n\n // hh:mm:ss\n return `${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}:${secs.toString().padStart(2, '0')}`;\n }\n\n //#endregion\n}\n\n//#endregion\n\n","import type { AXPWidgetNode } from '@acorex/platform/layout/widget-core';\n\n/**\n * Builds the AXPWidgetNode tree for the table-columns-editor when using AXPLayoutRendererComponent.\n * Root: repeater-layout (path: 'columns') with add/remove controls.\n * Each row: form-field for name (text-editor), form-field for title (text-editor), form-field for widget (widget-field-configurator).\n */\nexport function buildTableColumnsEditorLayout(): AXPWidgetNode {\n return {\n type: 'repeater-layout',\n name: 'columns',\n path: 'columns',\n options: {\n hasControls: true,\n },\n children: [\n {\n type: 'form-field',\n name: 'name',\n options: {\n label: '@general:widgets.table-columns-editor.column-name',\n showLabel: true,\n },\n children: [\n {\n type: 'text-editor',\n path: 'name',\n name: 'name',\n options: { placeholder: 'name' },\n },\n ],\n },\n {\n type: 'form-field',\n name: 'title',\n options: {\n label: '@general:widgets.table-columns-editor.column-title',\n showLabel: true,\n },\n children: [\n {\n type: 'text-editor',\n path: 'title',\n name: 'title',\n options: { placeholder: 'Title' },\n },\n ],\n },\n {\n type: 'form-field',\n name: 'widget',\n options: {\n label: '@general:terms.widget',\n showLabel: true,\n },\n children: [\n {\n type: 'widget-field-configurator',\n path: 'widget',\n name: 'widget',\n options: {},\n },\n ],\n },\n ],\n };\n}\n","import { AXPLayoutRendererComponent } from '@acorex/platform/layout/builder';\nimport { afterNextRender, ChangeDetectionStrategy, Component, effect, model, signal } from '@angular/core';\nimport { isEqual } from 'lodash-es';\nimport { buildTableColumnsEditorLayout } from './table-columns-editor-layout';\nimport type { AXPTableColumnDefinition } from './table-columns-editor.types';\n\nconst DEFAULT_WIDGET: AXPTableColumnDefinition['widget'] = { type: 'text-box', options: {} };\n\nfunction normalizeColumn(row: Record<string, unknown>, index: number): AXPTableColumnDefinition {\n return {\n name: typeof row['name'] === 'string' ? row['name'] : (row['name'] != null ? String(row['name']) : `column_${index}`),\n title: typeof row['title'] === 'string' ? row['title'] : (row['title'] != null ? String(row['title']) : `Column ${index + 1}`),\n widget: row['widget'] != null && typeof row['widget'] === 'object' && 'type' in (row['widget'] as object)\n ? (row['widget'] as AXPTableColumnDefinition['widget'])\n : { ...DEFAULT_WIDGET },\n };\n}\n\nfunction normalizeColumns(rows: unknown[]): AXPTableColumnDefinition[] {\n if (!Array.isArray(rows)) return [];\n return rows.map((row, i) => normalizeColumn(typeof row === 'object' && row != null ? (row as Record<string, unknown>) : {}, i));\n}\n\n@Component({\n selector: 'axp-table-columns-editor',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AXPLayoutRendererComponent],\n template: `\n <div class=\"ax-flex ax-flex-col ax-flex-1 ax-min-h-0 ax-overflow-hidden\">\n <div class=\"ax-flex-1 ax-min-h-0 ax-overflow-auto ax-p-2\">\n <axp-layout-renderer\n [layout]=\"columnsEditorLayout()\"\n [(context)]=\"editorContext\"\n mode=\"edit\"\n />\n </div>\n </div>\n `,\n})\nexport class AXPTableColumnsEditorComponent {\n /** Layout tree: repeater (path: columns) with form-fields for name, title, widget. */\n protected readonly columnsEditorLayout = signal(buildTableColumnsEditorLayout());\n\n /** Two-way: list of column definitions (synced with editorContext.columns). */\n columns = model<AXPTableColumnDefinition[]>([]);\n\n /** Context for the layout renderer; must hold { columns: AXPTableColumnDefinition[] }. */\n protected readonly editorContext = model<{ columns: AXPTableColumnDefinition[] }>({ columns: [] });\n\n constructor() {\n afterNextRender(() => {\n const initial = this.columns();\n this.editorContext.set({ columns: initial?.length ? [...initial] : [] });\n });\n\n // Sync from parent columns into editor context (e.g. popup opened with initial columns).\n effect(() => {\n const cols = this.columns();\n const ctx = this.editorContext();\n if (!isEqual(ctx.columns, cols)) {\n this.editorContext.set({ columns: cols?.length ? [...cols] : [] });\n }\n });\n\n // Sync from layout renderer back to columns (user edited or repeater add/remove); normalize rows.\n effect(() => {\n const ctx = this.editorContext();\n const raw = ctx?.columns;\n const normalized = normalizeColumns(Array.isArray(raw) ? raw : []);\n const current = this.columns();\n if (!isEqual(current, normalized)) {\n this.columns.set(normalized);\n }\n });\n }\n}\n","import { AXBasePageComponent } from '@acorex/components/page';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AsyncPipe } from '@angular/common';\nimport { afterNextRender, ChangeDetectionStrategy, Component, input, model } from '@angular/core';\nimport { cloneDeep } from 'lodash-es';\nimport { AXPTableColumnsEditorComponent } from './table-columns-editor.component';\nimport type { AXPTableColumnDefinition } from './table-columns-editor.types';\n\nconst I18N = {\n title: '@general:widgets.table-columns-editor.popup-title',\n cancel: '@general:actions.cancel.title',\n save: '@general:actions.save.title',\n} as const;\n\n@Component({\n selector: 'axp-table-columns-editor-popup',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AsyncPipe, AXButtonModule, AXDecoratorModule, AXTranslationModule, AXPTableColumnsEditorComponent],\n template: `\n <div class=\"ax-flex ax-flex-col ax-flex-1 ax-min-h-0 ax-overflow-hidden\">\n <div class=\"ax-flex-1 ax-min-h-0 ax-overflow-auto\">\n <axp-table-columns-editor [(columns)]=\"localColumns\" />\n </div>\n </div>\n <ax-footer>\n <ax-suffix>\n <ax-button\n look=\"solid\"\n [text]=\"(I18N.cancel | translate | async) ?? ''\"\n (onClick)=\"handleCancel()\"\n ></ax-button>\n <ax-button\n look=\"solid\"\n color=\"primary\"\n [text]=\"(I18N.save | translate | async) ?? ''\"\n (onClick)=\"handleSave()\"\n ></ax-button>\n </ax-suffix>\n </ax-footer>\n `,\n})\nexport class AXPTableColumnsEditorPopupComponent extends AXBasePageComponent {\n protected readonly I18N = I18N;\n\n columns = input<AXPTableColumnDefinition[]>([]);\n localColumns = model<AXPTableColumnDefinition[]>([]);\n\n constructor() {\n super();\n afterNextRender(() => {\n const initial = this.columns();\n this.localColumns.set(cloneDeep(initial?.length ? initial : []));\n });\n }\n\n protected handleCancel(): void {\n this.close();\n }\n\n protected handleSave(): void {\n this.close({ columns: this.localColumns() });\n }\n}\n","import { AXPopupService } from '@acorex/components/popup';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { inject, Injectable } from '@angular/core';\nimport type { AXPTableColumnDefinition } from './table-columns-editor.types';\n\nexport interface AXPTableColumnsEditorOpenOptions {\n title?: string;\n columns?: AXPTableColumnDefinition[];\n}\n\n@Injectable({ providedIn: 'root' })\nexport class AXPTableColumnsEditorService {\n private readonly popupService = inject(AXPopupService);\n private readonly translationService = inject(AXTranslationService);\n\n async open(options?: AXPTableColumnsEditorOpenOptions): Promise<AXPTableColumnDefinition[] | null> {\n const component = await import('./table-columns-editor-popup.component').then(\n (m) => m.AXPTableColumnsEditorPopupComponent\n );\n const title =\n options?.title ??\n (await this.translationService.translateAsync('@general:widgets.table-columns-editor.popup-title'));\n const result = await this.popupService.open(component, {\n title,\n size: 'lg',\n data: {\n columns: options?.columns ?? [],\n },\n });\n const columns = result?.data?.columns;\n return Array.isArray(columns) ? columns : null;\n }\n}\n","import { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPSpreadsheetComponent } from '../spreadsheet';\nimport type { AXPSpreadsheetColumn } from '../spreadsheet/spreadsheet.types';\nimport { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, input, model } from '@angular/core';\nimport { cloneDeep } from 'lodash-es';\nimport type { AXPTableColumnDefinition } from '../table-columns-editor/table-columns-editor.types';\n\n/**\n * Builds spreadsheet column definitions from table column definitions.\n */\nfunction toSpreadsheetColumns(defs: AXPTableColumnDefinition[]): AXPSpreadsheetColumn[] {\n return defs.map((col) => ({\n name: col.name,\n title: col.title,\n path: col.name,\n widget: cloneDeep(col.widget),\n }));\n}\n\n@Component({\n selector: 'axp-table-data-editor',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AsyncPipe, AXDecoratorModule, AXTranslationModule, AXPSpreadsheetComponent],\n template: `\n <div class=\"ax-flex ax-flex-col ax-flex-1 ax-min-h-0 ax-overflow-hidden\">\n <div class=\"ax-flex-1 ax-min-h-0 ax-overflow-auto ax-p-2\">\n @if (spreadsheetColumns().length > 0) {\n <axp-spreadsheet\n [title]=\"''\"\n [columns]=\"spreadsheetColumns()\"\n [(rowsModel)]=\"rowsModel\"\n [rowMode]=\"'dynamic'\"\n [readonly]=\"false\"\n [allowAddRows]=\"true\"\n [allowRemoveRows]=\"true\"\n [emptyCellPlaceholder]=\"'–'\"\n />\n } @else {\n <p class=\"ax-text-sm ax-text-neutral-500 ax-py-4\">\n {{ ('@general:widgets.table-data-editor.define-columns-first' | translate | async) ?? 'Define columns first.' }}\n </p>\n }\n </div>\n </div>\n `,\n})\nexport class AXPTableDataEditorComponent {\n columns = input.required<AXPTableColumnDefinition[]>();\n rowsModel = model<Record<string, unknown>[]>([]);\n\n protected readonly spreadsheetColumns = computed(() => toSpreadsheetColumns(this.columns()));\n}\n","import { AXBasePageComponent } from '@acorex/components/page';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AsyncPipe } from '@angular/common';\nimport { afterNextRender, ChangeDetectionStrategy, Component, input, model } from '@angular/core';\nimport { cloneDeep } from 'lodash-es';\nimport { AXPTableDataEditorComponent } from './table-data-editor.component';\nimport type { AXPTableColumnDefinition } from '../table-columns-editor/table-columns-editor.types';\n\nconst I18N = {\n title: '@general:widgets.table-data-editor.popup-title',\n cancel: '@general:actions.cancel.title',\n save: '@general:actions.save.title',\n} as const;\n\n@Component({\n selector: 'axp-table-data-editor-popup',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AsyncPipe, AXButtonModule, AXDecoratorModule, AXTranslationModule, AXPTableDataEditorComponent],\n template: `\n <div class=\"ax-flex ax-flex-col ax-flex-1 ax-min-h-0 ax-overflow-hidden\">\n <div class=\"ax-flex-1 ax-min-h-0 ax-overflow-auto\">\n <axp-table-data-editor\n [columns]=\"columns()\"\n [(rowsModel)]=\"localRows\"\n />\n </div>\n </div>\n <ax-footer>\n <ax-suffix>\n <ax-button\n look=\"solid\"\n [text]=\"(I18N.cancel | translate | async) ?? ''\"\n (onClick)=\"handleCancel()\"\n ></ax-button>\n <ax-button\n look=\"solid\"\n color=\"primary\"\n [text]=\"(I18N.save | translate | async) ?? ''\"\n (onClick)=\"handleSave()\"\n ></ax-button>\n </ax-suffix>\n </ax-footer>\n `,\n})\nexport class AXPTableDataEditorPopupComponent extends AXBasePageComponent {\n protected readonly I18N = I18N;\n\n columns = input.required<AXPTableColumnDefinition[]>();\n rows = input<Record<string, unknown>[]>([]);\n localRows = model<Record<string, unknown>[]>([]);\n\n constructor() {\n super();\n afterNextRender(() => {\n const initial = this.rows();\n this.localRows.set(Array.isArray(initial) ? cloneDeep(initial) : []);\n });\n }\n\n protected handleCancel(): void {\n this.close();\n }\n\n protected handleSave(): void {\n const rows = this.localRows().map((row) => {\n const { _id, ...rest } = row;\n return rest as Record<string, unknown>;\n });\n this.close({ rows });\n }\n}\n","import { AXPopupService } from '@acorex/components/popup';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { inject, Injectable } from '@angular/core';\nimport type { AXPTableColumnDefinition } from '../table-columns-editor/table-columns-editor.types';\n\nexport interface AXPTableDataEditorOpenOptions {\n title?: string;\n columns: AXPTableColumnDefinition[];\n rows?: Record<string, unknown>[];\n}\n\n@Injectable({ providedIn: 'root' })\nexport class AXPTableDataEditorService {\n private readonly popupService = inject(AXPopupService);\n private readonly translationService = inject(AXTranslationService);\n\n async open(options: AXPTableDataEditorOpenOptions): Promise<Record<string, unknown>[] | null> {\n const component = await import('./table-data-editor-popup.component').then(\n (m) => m.AXPTableDataEditorPopupComponent\n );\n const title =\n options?.title ??\n (await this.translationService.translateAsync('@general:widgets.table-data-editor.popup-title'));\n const result = await this.popupService.open(component, {\n title,\n size: 'lg',\n data: {\n columns: options.columns ?? [],\n rows: options.rows ?? [],\n },\n });\n const rows = result?.data?.rows;\n return Array.isArray(rows) ? rows : null;\n }\n}\n","import { AXPWidgetCoreModule, AXPWidgetNode, AXPWidgetsCatalog } from '@acorex/platform/layout/widget-core';\nimport { CommonModule } from '@angular/common';\nimport { Component, computed, inject, signal, ViewEncapsulation, Input } from '@angular/core';\nimport { AXBasePageComponent } from '@acorex/components/page';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXFormComponent, AXFormModule } from '@acorex/components/form';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPTemplateViewerConfig } from './template-viewer.types';\nimport { AXPContextChangeEvent } from '@acorex/platform/core';\n\n@Component({\n selector: 'axp-template-viewer',\n template: `\n <div class=\"ax-p-4 ax-min-h-64\">\n <ax-form #form>\n <axp-widgets-container [context]=\"context\" (onContextChanged)=\"handleContextChanged($event)\" >\n <ng-container axp-widget-renderer [node]=\"currentPage()\" [mode]=\"config?.readOnly ? 'view' : 'edit'\"></ng-container>\n </axp-widgets-container>\n </ax-form>\n </div>\n \n @if (config?.showActions !== false) {\n <ax-footer>\n <ax-suffix>\n <ax-button [text]=\"'@general:actions.cancel.title' | translate | async\" (onClick)=\"handleCancel()\"></ax-button>\n @if (!config?.readOnly) {\n <ax-button color=\"primary\" [text]=\"'@general:actions.submit.title' | translate | async\" (onClick)=\"handleSubmit(form)\"></ax-button>\n }\n </ax-suffix>\n </ax-footer>\n }\n `,\n encapsulation: ViewEncapsulation.None,\n imports: [CommonModule, AXPWidgetCoreModule, AXDecoratorModule, AXButtonModule, AXFormModule, AXTranslationModule]\n})\nexport class AXPTemplateViewerComponent extends AXBasePageComponent {\n\n //#region ---- Input Properties ----\n\n @Input() set config(value: AXPTemplateViewerConfig | undefined) {\n this._config.set(value);\n }\n get config() {\n return this._config();\n }\n\n //#endregion\n\n //#region ---- Component State ----\n\n protected context: any = {};\n protected readonly document = signal({ type: AXPWidgetsCatalog.document } as AXPWidgetNode);\n protected readonly currentPageIndex = signal(0);\n protected readonly _config = signal<AXPTemplateViewerConfig | undefined>(undefined);\n\n protected readonly currentPage = computed(() => {\n return (\n this.document().children?.[this.currentPageIndex()] ?? ({ type: AXPWidgetsCatalog.pageLayout } as AXPWidgetNode)\n );\n });\n\n //#endregion\n\n //#region ---- Lifecycle Methods ----\n\n protected override async ngOnInit() {\n super.ngOnInit();\n await this.loadTemplate();\n }\n\n //#endregion\n\n //#region ---- Template Loading ----\n\n private async loadTemplate() {\n const config = this.config;\n if (!config) return;\n\n let templateData: AXPWidgetNode;\n\n if (typeof config.template === 'string') {\n try {\n templateData = JSON.parse(config.template);\n } catch (error) {\n console.error('Failed to parse template JSON:', error);\n return;\n }\n } else {\n templateData = config.template;\n }\n\n this.document.set(templateData);\n\n // Set initial context if provided\n if (config.context) {\n this.context = { ...config.context };\n }\n }\n\n //#endregion\n\n //#region ---- Event Handlers ----\n\n protected handleContextChanged(e: AXPContextChangeEvent) {\n this.context = e.data;\n }\n\n protected async handleSubmit(form: AXFormComponent) {\n const formResult = await form.validate();\n if (formResult.result) {\n this.close({\n context: this.context,\n cancelled: false,\n metadata: this.config?.metadata\n });\n }\n }\n\n protected handleCancel() {\n this.close({\n context: this.context,\n cancelled: true,\n metadata: this.config?.metadata\n });\n }\n\n //#endregion\n}\n","import { inject, Injectable } from '@angular/core';\nimport { AXPopupService } from '@acorex/components/popup';\nimport { AXPTemplateViewerConfig, AXPTemplateViewerResult } from './template-viewer.types';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AXPTemplateViewerService {\n private readonly popupService = inject(AXPopupService);\n\n /**\n * Show a template viewer dialog with the given configuration\n * @param config Template viewer configuration including template, title, and UI options\n * @returns Promise resolving to viewer result with form values and cancellation status\n */\n async showTemplate(config: AXPTemplateViewerConfig): Promise<AXPTemplateViewerResult> {\n const component = await import('./template-viewer.component').then(c => c.AXPTemplateViewerComponent);\n const result = await this.popupService.open(component, {\n title: config.title || 'Template Viewer',\n size: config.size || 'lg',\n closeButton: false,\n closeOnBackdropClick: false,\n draggable: false,\n data: { config }\n });\n\n return result?.data || { context: config.context, cancelled: true, metadata: config.metadata };\n }\n\n /**\n * Show a template viewer in read-only mode\n * @param config Template viewer configuration\n * @returns Promise resolving to viewer result\n */\n async showTemplateReadOnly(config: Omit<AXPTemplateViewerConfig, 'readOnly' | 'showActions'>): Promise<AXPTemplateViewerResult> {\n return this.showTemplate({\n ...config,\n readOnly: true,\n showActions: false\n });\n }\n}\n","//#region ---- Imports ----\n\nimport { ChangeDetectionStrategy, Component, computed, input, signal } from '@angular/core';\nimport { AXHtmlEvent } from '@acorex/cdk/common';\nimport { AXAvatarModule } from '@acorex/components/avatar';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXImageModule } from '@acorex/components/image';\nimport { isEmpty, isNil } from 'lodash-es';\n\n//#endregion\n\n//#region ---- Avatar Component ----\n\n/**\n * Generic avatar renderer with image and initials fallback.\n */\n@Component({\n selector: 'axp-avatar',\n templateUrl: './avatar.component.html',\n imports: [AXAvatarModule, AXDecoratorModule, AXImageModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n styleUrl: './avatar.component.scss',\n})\nexport class AXPAvatarComponent {\n /** Avatar size in pixels. */\n readonly size = input(40);\n\n /** Optional image source for the avatar. */\n readonly src = input<string | undefined>('');\n\n /** Display name used for title and initials fallback. */\n readonly fullName = input<string | undefined>('');\n\n /** Optional override for fallback text shown when image is not available. */\n readonly fallbackText = input<string | undefined>(undefined);\n\n /** Forces placeholder mode and '?' fallback. */\n readonly placeholder = input(false);\n\n protected readonly isAvatarLoaded = signal(false);\n\n protected readonly normalizedName = computed(() => (this.fullName() ?? '').trim());\n protected readonly resolvedSrc = computed(() => (this.src() ?? '').trim());\n protected readonly hasAvatar = computed(() => !isNil(this.resolvedSrc()) && !isEmpty(this.resolvedSrc()) && !this.placeholder());\n protected readonly isLoading = computed(() => this.hasAvatar() && !this.isAvatarLoaded());\n protected readonly avatarText = computed(() => {\n if (this.placeholder()) {\n return '?';\n }\n\n const customFallback = (this.fallbackText() ?? '').trim();\n if (customFallback) {\n return customFallback.toUpperCase();\n }\n\n return this.computeInitials(this.normalizedName());\n });\n protected readonly avatarColor = computed(() => this.pickColor(this.avatarText()));\n protected readonly title = computed(() => this.normalizedName());\n\n protected onImageError(event: AXHtmlEvent<ErrorEvent>): void {\n this.isAvatarLoaded.set(false);\n }\n\n protected onImageLoad(event: AXHtmlEvent<Event>): void {\n this.isAvatarLoaded.set(true);\n }\n\n private computeInitials(name: string): string {\n if (!name) {\n return '?';\n }\n\n const parts = name\n .split(/\\s+/)\n .filter(Boolean);\n\n if (parts.length === 1) {\n return parts[0].slice(0, 2).toUpperCase();\n }\n\n return (parts[0][0] + parts[parts.length - 1][0]).toUpperCase();\n }\n\n private hashString(value: string): number {\n let hash = 0;\n for (let i = 0; i < value.length; i++) {\n hash = (hash << 5) - hash + value.charCodeAt(i);\n hash |= 0;\n }\n\n return Math.abs(hash);\n }\n\n private pickColor(text: string): string {\n const colors = ['primary', 'secondary', 'danger', 'warning', 'success', 'accent1', 'accent2', 'accent3'];\n const index = this.hashString(text) % colors.length;\n return colors[index];\n // add tailwind classes for compilation\n // ax-primary-lightest\n // ax-secondary-lightest\n // ax-danger-lightest\n // ax-warning-lightest\n // ax-success-lightest\n // ax-accent1-lightest\n // ax-accent2-lightest\n // ax-accent3-lightest\n }\n}\n\n//#endregion\n","<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-text-xs ax-font-semibold\">{{ avatarText() }}</small>\n </ax-text>\n }\n</ax-avatar>","import { InjectionToken } from \"@angular/core\";\nimport { AXPUserAvatarData, AXPUserAvatarProvider } from \"./user-avatar.types\";\n\nexport const AXP_USER_AVATAR_PROVIDER = new InjectionToken<AXPUserAvatarProvider>(\n 'AXP_USER_AVATAR_PROVIDER'\n);\n\n\n","import { inject, Injectable } from \"@angular/core\";\nimport { AXPUserAvatarData } from \"./user-avatar.types\";\nimport { AXP_USER_AVATAR_PROVIDER } from \"./user-avatar.provider\";\nimport { BehaviorSubject, Observable, timer } from 'rxjs';\nimport { map, shareReplay, switchMap, tap } from 'rxjs/operators';\n\ninterface CacheEntry {\n data: AXPUserAvatarData;\n timestamp: number;\n subject: BehaviorSubject<AXPUserAvatarData>;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPUserAvatarService {\n private provider = inject(AXP_USER_AVATAR_PROVIDER, { optional: true });\n\n // Cache configuration\n private readonly cacheExpiryTime = 5 * 60 * 1000; // 5 minutes in milliseconds\n private readonly refreshInterval = 3 * 60 * 1000; // 3 minutes in milliseconds\n\n // Cache storage\n private cache = new Map<string, CacheEntry>();\n\n /**\n * Gets user information with caching and auto-refresh\n * @param userId The username to fetch information for\n * @returns Observable that emits user avatar data\n */\n getUserInfo$(userId: string): Observable<AXPUserAvatarData> {\n // Check if we have a cached entry\n if (!this.cache.has(userId) || this.isExpired(userId)) {\n // Create a new cache entry with default values\n const defaultData: AXPUserAvatarData = {\n id: userId,\n status: 'offline',\n username: '',\n firstName: '',\n lastName: ''\n };\n const subject = new BehaviorSubject<AXPUserAvatarData>(defaultData);\n this.cache.set(userId, {\n data: defaultData,\n timestamp: Date.now(),\n subject\n });\n\n // Fetch fresh data immediately\n this.fetchAndUpdateCache(userId);\n\n // Set up auto refresh\n timer(this.refreshInterval, this.refreshInterval)\n .pipe(\n tap(() => this.fetchAndUpdateCache(userId))\n )\n .subscribe();\n }\n\n return this.cache.get(userId)!.subject.asObservable();\n }\n\n /**\n * Gets user information (Promise-based for backward compatibility)\n * @param userId The username to fetch information for\n * @returns Promise that resolves to user avatar data\n */\n async getUserInfo(userId: string): Promise<AXPUserAvatarData> {\n // Check if we have an unexpired cached entry\n if (this.cache.has(userId) && !this.isExpired(userId)) {\n return this.cache.get(userId)!.data;\n }\n\n // Fetch fresh data and cache it\n return this.fetchAndUpdateCache(userId);\n }\n\n /**\n * Clears the entire cache or a specific user's cache\n * @param userId Optional username to clear specific cache\n */\n clearCache(userId?: string): void {\n if (userId) {\n this.cache.delete(userId);\n } else {\n this.cache.clear();\n }\n }\n\n /**\n * Force refresh data for a specific username\n * @param userId The username to refresh\n * @returns Promise that resolves to the refreshed data\n */\n async refreshUserInfo(userId: string): Promise<AXPUserAvatarData> {\n return this.fetchAndUpdateCache(userId);\n }\n\n /**\n * Checks if a cache entry is expired\n */\n private isExpired(userId: string): boolean {\n const entry = this.cache.get(userId);\n if (!entry) return true;\n\n return (Date.now() - entry.timestamp) > this.cacheExpiryTime;\n }\n\n /**\n * Fetches data from provider and updates the cache\n */\n private async fetchAndUpdateCache(userId: string): Promise<AXPUserAvatarData> {\n try {\n const data = await this.provider?.provide(userId);\n if (!data) {\n throw new Error(`User info not found for ${userId}`);\n }\n const entry = this.cache.get(userId);\n\n // Update the cache entry\n if (entry) {\n entry.data = data;\n entry.timestamp = Date.now();\n entry.subject.next(data);\n } else {\n // Create a new cache entry if needed\n const subject = new BehaviorSubject<AXPUserAvatarData>(data);\n this.cache.set(userId, {\n data,\n timestamp: Date.now(),\n subject\n });\n }\n\n return data;\n } catch (error) {\n console.error(`Error fetching user info for ${userId}:`, error);\n throw error;\n }\n }\n}","import { ChangeDetectionStrategy, Component, OnDestroy, OnInit, ViewEncapsulation, computed, inject, input, signal } from '@angular/core';\n\nimport { AXBadgeModule } from '@acorex/components/badge';\nimport { AXSkeletonModule } from '@acorex/components/skeleton';\nimport { Subject, takeUntil } from 'rxjs';\nimport { AXPUserAvatarService } from './user-avatar.service';\nimport { AXPUserAvatarData } from './user-avatar.types';\nimport { AXPAvatarComponent } from '../avatar';\n\n@Component({\n selector: 'axp-user-avatar',\n templateUrl: './user-avatar.component.html',\n styleUrl: './user-avatar.component.scss',\n imports: [AXPAvatarComponent, AXBadgeModule, AXSkeletonModule],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [],\n})\nexport class AXPUserAvatarComponent implements OnInit, OnDestroy {\n private readonly userAvatarService = inject(AXPUserAvatarService);\n private readonly destroy$ = new Subject<void>();\n\n protected userInfo = signal<AXPUserAvatarData | null>(null);\n\n size = input<number>(40);\n userId = input<string>('');\n\n src = signal<string>('');\n userName = computed(() => this.userInfo()?.username || '');\n firstName = computed(() => this.userInfo()?.firstName || 'Root');\n lastName = computed(() => this.userInfo()?.lastName || 'User');\n title = computed(() => `${this.firstName()} ${this.lastName()}`);\n isOnline = computed(() => this.userInfo()?.status === 'online');\n\n ngOnInit(): void {\n this.loadUserData();\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n private loadUserData(): void {\n // Skip if no username provided\n if (!this.userId()) {\n return;\n }\n\n // Subscribe to the user info observable to get real-time updates\n this.userAvatarService\n .getUserInfo$(this.userId())\n .pipe(takeUntil(this.destroy$))\n .subscribe((userData) => {\n this.userInfo.set(userData);\n // This is a placeholder - replace with your actual avatar URL logic\n this.generateAvatarSrc();\n });\n }\n\n /**\n * Generate avatar image source\n * This is a placeholder - implement based on your actual requirements\n */\n private generateAvatarSrc(): void {\n // Example: Check if the user has a custom avatar URL\n // If not, generate a placeholder using initials\n if (this.userInfo()?.avatarUrl) {\n this.src.set(this.userInfo()?.avatarUrl!);\n return;\n }\n this.src.set('');\n }\n}\n","<axp-avatar [size]=\"size()\" [src]=\"src()\" [fullName]=\"title()\" />","import { AXPopupService } from '@acorex/components/popup';\nimport { AXTabsComponent, AXTabsModule } from '@acorex/components/tabs';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\nimport { AXPViewQuery } from '@acorex/platform/core';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n effect,\n inject,\n model,\n signal,\n untracked,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\n\n@Component({\n selector: 'axp-query-views',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './query-views.component.html',\n encapsulation: ViewEncapsulation.None,\n imports: [AXTabsModule, AXTranslationModule, CommonModule],\n})\nexport class AXPQueryViewsComponent {\n protected popupService = inject(AXPopupService);\n protected translate = inject(AXTranslationService);\n protected tabs = viewChild<AXTabsComponent>('tabs');\n\n views = model<AXPViewQuery[]>([]);\n selectedView = model.required<AXPViewQuery>();\n\n protected isMounted = signal(false);\n\n ngAfterViewInit(): void {\n this.isMounted.set(true);\n }\n\n #effect = effect(() => {\n if (!this.isMounted()) return;\n const views = untracked(() => this.views());\n if (!views) return;\n const selectedTab = views.findIndex((v) => v.name == this.selectedView().name);\n untracked(() => {\n if (selectedTab != -1) {\n this.tabs()?.select(selectedTab);\n }\n });\n });\n\n setView(view: AXPViewQuery) {\n this.selectedView.set(view);\n }\n\n handleActiveChange(e: any) {\n console.log(e);\n }\n}\n","<ax-tabs #tabs [look]=\"'with-line'\" class=\"ax-font-semibold\">\n @for (item of views(); track item.name) {\n <ax-tab-item (onClick)=\"setView(item)\" [key]=\"item.name\" [text]=\"(item.title | translate | async) || 'item.title'\">\n </ax-tab-item>\n }\n <!-- <ax-tab-item\n (onClick)=\"createNew()\"\n [key]=\"'create-new'\"\n [text]=\"('@general:actions.create.title' | translate | async) || 'Create New'\"\n >\n </ax-tab-item> -->\n</ax-tabs>\n","import { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXFormModule } from '@acorex/components/form';\nimport { AXSearchBoxModule } from '@acorex/components/search-box';\nimport { AXSelectBoxComponent, AXSelectBoxModule } from '@acorex/components/select-box';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\nimport type { AXPActionMenuItem, AXPMultiLanguageString } from '@acorex/platform/core';\nimport { compareMultiLanguageStrings } from '@acorex/platform/core';\nimport type { AXPWidgetProperty } from '@acorex/platform/layout/widget-core';\nimport { AXPCommandExecutor } from '@acorex/platform/runtime';\nimport { AXPWorkflowService } from '@acorex/platform/workflow';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n input,\n model,\n signal,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { cloneDeep, merge } from 'lodash-es';\nimport {\n AXPPropertyViewerResult,\n AXPPropertyViewerService,\n buildPropertyViewerInitialContextFromProperties,\n buildPropertyViewerTabsFromProperties,\n} from '../property-viewer';\n\n//#region ---- Types ----\n\n/**\n * One selectable entry for {@link AXPItemConfiguratorComponent}.\n * Parents map external data into this shape. {@link propertyDefinitions} drive {@link AXPPropertyViewerService} tabs.\n */\nexport interface ItemConfiguratorListItem {\n id: string;\n /** Shown in the list and in the configure dialog title; plain string, i18n key, or locale map. */\n title: AXPMultiLanguageString;\n icon?: string;\n description?: AXPMultiLanguageString;\n propertyDefinitions?: AXPWidgetProperty[];\n}\n\ninterface ItemConfiguratorSelectRow {\n value: string;\n text: string;\n icon?: string;\n description?: string;\n}\n\n//#endregion\n\n//#region ---- Component ----\n\n/**\n * Select an item from a list and edit its settings via {@link AXPPropertyViewerService}.\n * Bound state: {@link selectedItemId} and {@link values} (context returned from the viewer). Not tied to {@link AXPWidgetNode}.\n */\n@Component({\n selector: 'axp-item-configurator',\n templateUrl: './item-configurator.component.html',\n styleUrl: './item-configurator.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n CommonModule,\n FormsModule,\n AXFormModule,\n AXButtonModule,\n AXSelectBoxModule,\n AXDecoratorModule,\n AXTranslationModule,\n AXSearchBoxModule,\n ],\n})\nexport class AXPItemConfiguratorComponent {\n //#region ---- Services & Dependencies ----\n\n //#endregion\n\n //#region ---- Inputs ----\n\n //#region ---- Inputs ----\n\n /** Selected list entry id ({@link ItemConfiguratorListItem.id}). */\n selectedItemId = model<string>('');\n\n /** Values edited in the property viewer (merged from dialog result). */\n values = model<Record<string, unknown>>({});\n\n label = input<string>('@general:terms.widget');\n\n readonly = input<boolean>(false);\n\n items = input<ItemConfiguratorListItem[]>([]);\n\n headerActions = input<AXPActionMenuItem[]>([]);\n\n //#endregion\n\n //#region ---- Services & Dependencies ----\n\n private readonly propertyViewerService = inject(AXPPropertyViewerService);\n private readonly translationService = inject(AXTranslationService);\n private readonly workflow = inject(AXPWorkflowService);\n private readonly commandExecutor = inject(AXPCommandExecutor);\n\n //#endregion\n\n //#region ---- Class Properties ----\n\n protected isEditMode = signal<boolean>(false);\n\n protected availableItems = computed<ItemConfiguratorSelectRow[]>(() => {\n const list: ItemConfiguratorSelectRow[] = [];\n for (const row of this.items()) {\n const id = row.id?.trim() ?? '';\n if (!id) {\n continue;\n }\n const title = this.translationService.resolve(row.title).trim() || id;\n list.push({\n value: id,\n text: title,\n icon: row.icon,\n description: row.description != null ? this.translationService.resolve(row.description) : undefined,\n });\n }\n const locale = this.translationService.getActiveLang();\n return list.sort((a, b) => compareMultiLanguageStrings(a.text, b.text, locale));\n });\n\n protected selectedListItem = computed<ItemConfiguratorListItem | null>(() => {\n const id = this.selectedItemId();\n if (!id) {\n return null;\n }\n return this.items().find((r) => r.id === id) ?? null;\n });\n\n protected resolvedPropertyDefinitions = computed<AXPWidgetProperty[]>(() => {\n const defs = this.selectedListItem()?.propertyDefinitions;\n if (isPropertyDefinitionArray(defs)) {\n return defs;\n }\n return [];\n });\n\n protected currentItemConfig = computed(() => {\n const itemId = this.selectedItemId();\n if (!itemId) {\n return null;\n }\n\n const listItem = this.selectedListItem();\n const hasProperties = this.resolvedPropertyDefinitions().length > 0;\n\n if (listItem != null) {\n return {\n title: this.translationService.resolve(listItem.title).trim() || itemId,\n description: listItem.description,\n icon: listItem.icon,\n hasProperties,\n };\n }\n\n return {\n title: itemId,\n description: undefined as AXPMultiLanguageString | undefined,\n icon: undefined as string | undefined,\n hasProperties,\n };\n });\n\n protected canConfigure = computed(() => {\n return !!this.selectedItemId() && !!this.currentItemConfig()?.hasProperties;\n });\n\n protected isConfigured = computed(() => {\n const v = this.values();\n if (!v || typeof v !== 'object') {\n return false;\n }\n return Object.keys(v).length > 0;\n });\n\n protected visibleHeaderActions = computed(() =>\n (this.headerActions() ?? []).filter((a) => a != null && a.visible !== false && !a.items?.length),\n );\n\n protected itemSelectBox = viewChild<AXSelectBoxComponent>('itemSelectBox');\n\n protected enterEditMode(): void {\n if (this.readonly()) {\n return;\n }\n this.isEditMode.set(true);\n }\n\n protected exitEditMode(): void {\n this.isEditMode.set(false);\n }\n\n //#endregion\n\n //#region ---- Lifecycle ----\n\n constructor() {\n effect(() => {\n if (!this.isEditMode()) {\n return;\n }\n const scheduleFocus = (): void => {\n setTimeout(() => {\n this.itemSelectBox()?.focus();\n this.itemSelectBox()?.open();\n }, 0);\n };\n scheduleFocus();\n });\n }\n\n //#endregion\n\n //#region ---- Event Handlers ----\n\n protected async onSelectionChange(event: { value?: string | null }): Promise<void> {\n if (this.readonly()) {\n return;\n }\n\n const newType = event?.value ?? null;\n const itemId = typeof newType === 'string' ? newType : '';\n\n if (this.selectedItemId() === itemId) {\n return;\n }\n\n if (!itemId) {\n this.selectedItemId.set('');\n this.values.set({});\n this.isEditMode.set(true);\n return;\n }\n\n this.selectedItemId.set(itemId);\n this.values.set({});\n this.isEditMode.set(false);\n // Open only on user selection from the select box — not when the model reverts (e.g. discard).\n if (this.canConfigure()) {\n void this.openConfigureDialog();\n }\n }\n\n protected async openConfigureDialog(): Promise<void> {\n if (!this.canConfigure() || this.readonly()) {\n return;\n }\n\n const defs = this.resolvedPropertyDefinitions();\n if (defs.length === 0) {\n return;\n }\n\n const tabs = buildPropertyViewerTabsFromProperties(defs);\n if (tabs.length === 0) {\n return;\n }\n\n // Property definitions use paths like `options` / `options.*`; viewer context must nest the\n // widget options bag under `options`, not at the root (same as widget-property-viewer).\n const context = buildPropertyViewerInitialContextFromProperties(defs, {\n options: cloneDeep(this.values()) as Record<string, unknown>,\n });\n const rawTitle = this.currentItemConfig()?.title?.trim() || this.selectedItemId().trim();\n const resolvedTitle = rawTitle.startsWith('@')\n ? (await this.translationService.translateAsync(rawTitle)) || rawTitle\n : rawTitle;\n const nameForDialog = resolvedTitle.trim();\n const title =\n (await this.translationService.translateAsync('@general:actions.configure.named-title', {\n params: { name: nameForDialog || '—' },\n })) || `Configure ${nameForDialog || '—'}`;\n\n const result = (await this.propertyViewerService\n .create()\n .dialog((d) => {\n d.setTitle(title)\n .setSize('md')\n .setCloseButton(true)\n .setMode('advanced')\n .setTabs(tabs)\n .setContext(cloneDeep(context));\n })\n .show()) as AXPPropertyViewerResult | null;\n\n if (result?.values && typeof result.values === 'object') {\n const rv = result.values as Record<string, unknown>;\n const optsPatch =\n rv['options'] !== undefined && typeof rv['options'] === 'object' && !Array.isArray(rv['options'])\n ? (rv['options'] as Record<string, unknown>)\n : rv;\n this.values.set(merge({}, cloneDeep(this.values()), cloneDeep(optsPatch)));\n }\n }\n\n protected onHeaderActionClick(action: AXPActionMenuItem): void {\n if (this.readonly() || this.isHeaderActionDisabled(action)) {\n return;\n }\n const command = action.command;\n if (!command?.name?.trim()) {\n return;\n }\n const name = command.name.trim();\n const cmdOptions = command.options ?? command.metadata;\n if (this.workflow.exists(name)) {\n void this.workflow.execute(name, cmdOptions ?? null);\n } else {\n void this.commandExecutor.execute(name, cmdOptions);\n }\n }\n\n protected isHeaderActionDisabled(action: AXPActionMenuItem): boolean {\n return action.disabled === true;\n }\n\n //#endregion\n}\n\n//#region ---- Helpers ----\n\nfunction isPropertyDefinitionArray(value: unknown): value is AXPWidgetProperty[] {\n if (!Array.isArray(value) || value.length === 0) {\n return false;\n }\n return value.every(\n (entry) =>\n entry != null &&\n typeof entry === 'object' &&\n 'name' in entry &&\n typeof (entry as AXPWidgetProperty).name === 'string' &&\n 'schema' in entry &&\n 'group' in entry,\n );\n}\n\n//#endregion\n","<!-- Item selector & info container -->\n<div class=\"__item-container\">\n @if (isEditMode()) {\n <div class=\"__item-selector\">\n <ax-select-box\n #itemSelectBox\n [ngModel]=\"selectedItemId()\"\n [dataSource]=\"availableItems()\"\n [placeholder]=\"('@general:actions.select.title' | translate | async) ?? ''\"\n [readonly]=\"readonly()\"\n (onValueChanged)=\"onSelectionChange($event)\"\n valueField=\"value\"\n textField=\"text\"\n [itemTemplate]=\"itemTemplate\"\n [selectedTemplate]=\"selectedTemplate\"\n (onClosed)=\"exitEditMode()\"\n >\n <ax-search-box></ax-search-box>\n <ax-clear-button></ax-clear-button>\n </ax-select-box>\n </div>\n }\n\n @if (!isEditMode()) {\n @if (selectedItemId() && currentItemConfig(); as config) {\n <div class=\"__item-info\">\n <div class=\"__item-header\" [class.__editable]=\"!readonly()\" (click)=\"enterEditMode()\">\n <div>\n @if (config.icon) {\n <i [class]=\"config.icon\"></i>\n }\n <div>\n <span>\n {{ config.title }}\n </span>\n @if (config.description) {\n <p>\n {{ (config.description | translate | async) ?? '' }}\n </p>\n }\n </div>\n </div>\n\n <div class=\"__action-buttons\" (click)=\"$event.stopPropagation()\">\n @if (config.hasProperties) {\n <ax-button\n [disabled]=\"!canConfigure() || readonly()\"\n [title]=\"('@general:actions.configure.title' | translate | async) ?? ''\"\n look=\"blank\"\n [color]=\"isConfigured() ? 'primary' : 'default'\"\n size=\"sm\"\n (onClick)=\"openConfigureDialog()\"\n >\n <ax-icon icon=\"fa-solid fa-cog\"></ax-icon>\n </ax-button>\n }\n @for (action of visibleHeaderActions(); track action.name ?? $index) {\n <ax-button\n look=\"blank\"\n size=\"sm\"\n [color]=\"action.color ?? 'default'\"\n [disabled]=\"readonly() || isHeaderActionDisabled(action)\"\n [title]=\"(action.title | translate | async) ?? ''\"\n [class.ax-icon-only]=\"action.iconOnly === true\"\n (onClick)=\"onHeaderActionClick(action)\"\n >\n @if (action.icon) {\n <ax-icon [icon]=\"action.icon\"></ax-icon>\n }\n @if (action.iconOnly !== true) {\n <span>{{ (action.title | translate | async) ?? '' }}</span>\n }\n </ax-button>\n }\n </div>\n </div>\n\n <!-- @if (!config.hasProperties) {\n <axp-state-message mode=\"info\" icon=\"fa-solid fa-info-circle\"\n [description]=\"'@general:widgets.widget-configurator.no-configuration-needed'\" variant=\"compact\">\n </axp-state-message>\n } -->\n </div>\n } @else {\n <div class=\"__item-empty\" [class.__editable]=\"!readonly()\" (click)=\"enterEditMode()\">\n <i class=\"fa-solid fa-puzzle-piece\"></i>\n <span>\n {{ ('@general:widgets.widget-configurator.select-widget-type' | translate | async) ?? 'Select an item type' }}\n </span>\n </div>\n }\n }\n\n <ng-template #itemTemplate let-context>\n @let item = context.data;\n <div class=\"__item-template ax-flex ax-w-full ax-items-center ax-gap-3 ax-p-2\">\n @if (item.icon) {\n <i [class]=\"item.icon + ' ax-text-base ax-w-5 ax-text-center'\"></i>\n }\n <div class=\"ax-flex ax-items-center ax-gap-2 ax-flex-1 ax-min-w-0\">\n <div class=\"ax-text-sm ax-font-medium\">\n {{ item.text }}\n </div>\n @if (item.description) {\n <div class=\"ax-text-xs ax-text-neutral-600\">\n {{ item.description }}\n </div>\n }\n </div>\n </div>\n </ng-template>\n\n <ng-template #selectedTemplate let-item>\n <div class=\"__selected-template\">\n @if (item?.data?.icon) {\n <i [class]=\"item.data.icon\"></i>\n }\n <span>\n {{ item?.data?.text }}\n </span>\n </div>\n </ng-template>\n</div>\n","import { AXTranslationService } from '@acorex/core/translation';\nimport type { AXPActionMenuItem, AXPOptionsData, AXPMultiLanguageString } from '@acorex/platform/core';\nimport { compareMultiLanguageStrings } from '@acorex/platform/core';\nimport { AXP_PREVIEW_WIDGET_FIELD_COMMAND_KEY } from '@acorex/platform/layout/builder';\nimport { AXPWidgetGroupEnum, AXPWidgetNode, AXPWidgetRegistryService } from '@acorex/platform/layout/widget-core';\n\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n input,\n model,\n untracked,\n ViewEncapsulation,\n} from '@angular/core';\nimport { cloneDeep, isEqual } from 'lodash-es';\n\nimport { AXPItemConfiguratorComponent, ItemConfiguratorListItem } from '../item-configurator';\n\n//#region ---- Component ----\n\n/**\n * Widget field configurator for entity forms: composes {@link AXPItemConfiguratorComponent} with\n * {@link AXPWidgetRegistryService} list items and widget preview.\n */\n@Component({\n selector: 'axp-widget-field-configurator',\n template: `\n <axp-item-configurator\n [(selectedItemId)]=\"selectedItemIdModel\"\n [(values)]=\"valuesModel\"\n [label]=\"label()\"\n [readonly]=\"readonly()\"\n [items]=\"configuratorItems()\"\n [headerActions]=\"previewHeaderActions()\"\n />\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'ax-flex ax-flex-col',\n '[attr.readonly]': 'readonly() ? \"\" : null',\n },\n styles: [\n `\n :host([readonly]) {\n pointer-events: none;\n opacity: 0.7;\n }\n `,\n ],\n imports: [AXPItemConfiguratorComponent],\n})\nexport class AXPWidgetFieldConfiguratorComponent {\n\n //#region ---- Inputs ----\n\n widget = model<AXPWidgetNode>({ type: '' });\n\n label = input<string>('@general:terms.widget');\n\n fieldName = input<string>('Field');\n\n fieldTitle = input<AXPMultiLanguageString>('');\n\n readonly = input<boolean>(false);\n\n //#endregion\n\n //#region ---- Services & Dependencies ----\n\n private readonly widgetRegistry = inject(AXPWidgetRegistryService);\n private readonly translation = inject(AXTranslationService);\n\n //#endregion\n\n //#region ---- Class Properties ----\n\n protected selectedItemIdModel = model<string>('');\n\n protected valuesModel = model<Record<string, unknown>>({});\n\n /**\n * List entries from {@link AXPWidgetRegistryService} (form editors), with\n * {@link ItemConfiguratorListItem.propertyDefinitions} from each registered config.\n */\n protected configuratorItems = computed<ItemConfiguratorListItem[]>(() => {\n const list: ItemConfiguratorListItem[] = [];\n for (const w of this.widgetRegistry.all()) {\n if (!w.groups?.includes(AXPWidgetGroupEnum.FormElement) || w.type !== 'editor') {\n continue;\n }\n const props = w.properties?.filter((p) => p.visible !== false) ?? [];\n list.push({\n id: w.name,\n title: w.title,\n icon: w.icon,\n description: w.description,\n propertyDefinitions: props.length > 0 ? props : undefined,\n });\n }\n const locale = this.translation.getActiveLang();\n return list.sort((a, b) => compareMultiLanguageStrings(a.title, b.title, locale));\n });\n\n protected previewHeaderActions = computed<AXPActionMenuItem[]>(() => {\n const w = this.widget();\n const hasType = !!w?.type;\n return [\n {\n name: 'preview-widget-field',\n title: '@general:actions.preview.title',\n icon: 'fa-solid fa-eye',\n iconOnly: true,\n disabled: this.readonly() || !hasType,\n command: {\n name: AXP_PREVIEW_WIDGET_FIELD_COMMAND_KEY,\n options: {\n widget: cloneDeep(w),\n fieldName: this.fieldName(),\n fieldTitle: this.fieldTitle(),\n },\n },\n },\n ];\n });\n\n //#endregion\n\n //#region ---- Lifecycle ----\n\n constructor() {\n effect(() => {\n const w = this.widget();\n const sid = w?.type ?? '';\n const opts = (w?.options ?? {}) as Record<string, unknown>;\n const curSid = untracked(() => this.selectedItemIdModel());\n const curVals = untracked(() => this.valuesModel());\n if (sid !== curSid || !isEqual(opts, curVals)) {\n untracked(() => {\n this.selectedItemIdModel.set(sid);\n this.valuesModel.set(opts);\n });\n }\n });\n\n effect(() => {\n const sid = this.selectedItemIdModel();\n const vals = this.valuesModel();\n const current = untracked(() => this.widget());\n const empty: AXPWidgetNode = { type: '', options: {} };\n\n if (!sid) {\n if (!isEqual(current ?? empty, empty)) {\n untracked(() => this.widget.set(empty));\n }\n return;\n }\n\n const next: AXPWidgetNode = {\n ...(current && typeof current === 'object' ? current : {}),\n type: sid,\n options: vals as AXPOptionsData,\n };\n\n if (!isEqual(next, current)) {\n untracked(() => this.widget.set(next));\n }\n });\n }\n\n //#endregion\n}\n\n//#endregion\n","import { AXTranslationModule } from '@acorex/core/translation';\nimport { CommonModule } from '@angular/common';\nimport { Component, input, output, ViewEncapsulation } from '@angular/core';\nimport { AXPWidgetItemClickEvent, AXPWidgetItemData } from './widget-item.types';\n\nconst WIDGET_ITEM_I18N = {\n pin: '@general:widgets.widget-item.pin',\n unpin: '@general:widgets.widget-item.unpin',\n} as const;\n\n/**\n * Generic widget item component for displaying selectable widgets with icons, titles, and descriptions.\n * Can be used across different modules for consistent widget display and interaction.\n */\n@Component({\n selector: 'axp-widget-item',\n imports: [CommonModule, AXTranslationModule],\n templateUrl: './widget-item.component.html',\n encapsulation: ViewEncapsulation.None,\n})\nexport class AXPWidgetItemComponent {\n protected readonly i18n = WIDGET_ITEM_I18N;\n\n // Inputs\n /** The widget data to display */\n widget = input.required<AXPWidgetItemData>();\n\n /** Whether this widget is currently selected */\n isSelected = input<boolean>(false);\n\n /** Whether to show the pin button */\n showPinButton = input<boolean>(true);\n\n /** Custom CSS classes to apply to the widget item */\n customClasses = input<string>('');\n\n // Outputs\n /** Emitted when the widget item is clicked */\n onWidgetClick = output<AXPWidgetItemClickEvent>();\n\n /** Emitted when the pin button is clicked */\n onPinClick = output<AXPWidgetItemClickEvent>();\n\n /**\n * Handle widget item click event\n */\n handleClick(event: MouseEvent): void {\n this.onWidgetClick.emit({\n event,\n widget: this.widget(),\n });\n }\n\n /**\n * Handle pin button click event\n */\n handlePinClick(event: MouseEvent): void {\n event.stopPropagation(); // Prevent widget click event\n this.onPinClick.emit({\n event,\n widget: this.widget(),\n });\n }\n\n /**\n * Get the effective icon to display\n */\n getIconClass(): string {\n return this.widget().icon || 'fa-light fa-document';\n }\n}\n","<div\n (click)=\"handleClick($event)\"\n class=\"ax-py-2 ax-px-3 ax-rounded-md ax-flex ax-gap-3 ax-items-center ax-group hover:ax-bg-primary-lightest/65 hover:ax-text-primary-on-lightest ax-cursor-pointer ax-w-full\"\n [class.ax-bg-primary-lightest]=\"isSelected()\"\n [class.ax-text-primary-on-lightest]=\"isSelected()\"\n [class.ax-border-primary-lightest]=\"isSelected()\"\n [class]=\"customClasses()\"\n>\n <!-- Widget Icon -->\n <div\n class=\"ax-min-w-10 ax-h-10 ax-flex ax-items-center ax-justify-center ax-rounded-md ax-border group-hover:ax-bg-primary-lighter group-hover:ax-text-primary-on-lighter group-hover:ax-border-primary-lighter\"\n [class.ax-bg-primary-light]=\"isSelected()\"\n [class.ax-text-primary-on-light]=\"isSelected()\"\n [class.ax-border-primary-light]=\"isSelected()\"\n [class.ax-surface]=\"!isSelected()\"\n >\n <i [ngClass]=\"getIconClass()\" class=\"ax-text-lg\"></i>\n </div>\n\n <!-- Widget Content -->\n <div class=\"ax-flex ax-flex-col ax-gap-1 ax-flex-1 ax-w-[70%]\">\n <div class=\"ax-flex ax-items-center ax-justify-between ax-gap-2\">\n <!-- Widget Title -->\n <div class=\"ax-font-semibold ax-text-sm ax-truncate\" [title]=\"(widget().title | translate | async) ?? ''\">\n {{ (widget().title | translate | async) ?? '' }}\n </div>\n\n <!-- Pin Button -->\n @if (showPinButton()) {\n <div (click)=\"handlePinClick($event)\" class=\"ax-cursor-pointer\">\n @if (widget().isPinned) {\n <i\n class=\"fa-solid fa-thumbtack ax-text-sm ax-rotate-45\"\n [title]=\"(i18n.unpin | translate | async) ?? ''\"\n ></i>\n } @else {\n <i\n class=\"fa-light fa-thumbtack ax-text-sm ax-rotate-45 ax-invisible group-hover:ax-visible\"\n [title]=\"(i18n.pin | translate | async) ?? ''\"\n ></i>\n }\n </div>\n }\n </div>\n\n <!-- Widget Description -->\n @if (widget().description; as desc) {\n <span class=\"ax-text-xs ax-truncate\" [title]=\"(desc | translate | async) ?? ''\">\n {{ (desc | translate | async) ?? '' }}\n </span>\n }\n </div>\n</div>\n","import {\n AXPWidgetConfig,\n AXPWidgetNode,\n AXPWidgetProperty,\n AXPWidgetRegistryService,\n} from '@acorex/platform/layout/widget-core';\n\nimport {\n ChangeDetectionStrategy,\n Component,\n effect,\n EventEmitter,\n inject,\n input,\n Output,\n signal,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { capitalize, cloneDeep, isArray, isEmpty, isNil, merge, set, sortBy, unionBy } from 'lodash-es';\n\nimport {\n AXPPropertyViewerChangedEvent,\n AXPPropertyViewerTab,\n} from '../property-viewer/property-viewer.types';\nimport { AXPPropertyViewerComponent } from '../property-viewer/property-viewer.component';\n\nexport interface AXPWidgetPropertiesChangedEvent {\n values: any;\n mode: 'init' | 'update';\n}\n\n@Component({\n selector: 'axp-widget-property-viewer',\n templateUrl: './widget-property-viewer.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [AXPPropertyViewerComponent],\n})\nexport class AXPWidgetPropertyViewerComponent {\n //#region ---- Inputs ----\n\n widget = input.required<AXPWidgetNode>();\n mode = input<'simple' | 'advanced'>('simple');\n\n //#endregion\n\n //#region ---- Outputs ----\n\n @Output()\n onChanged = new EventEmitter<AXPWidgetPropertiesChangedEvent>();\n\n //#endregion\n\n //#region ---- View refs ----\n\n protected readonly propertyViewerRef = viewChild(AXPPropertyViewerComponent);\n\n //#endregion\n\n //#region ---- State ----\n\n protected readonly config = signal<AXPWidgetConfig | null>(null);\n protected readonly tabs = signal<AXPPropertyViewerTab[]>([]);\n protected initialContext: Record<string, unknown> = {};\n protected groupCollapsedStates = new Map<string, boolean>();\n\n /** When true, the next onChanged from the inner viewer was caused by our update(); do not forward to avoid loop. */\n private suppressNextEmit = false;\n\n //#endregion\n\n //#region ---- Dependencies ----\n\n private readonly widgetRegistryService = inject(AXPWidgetRegistryService);\n\n //#endregion\n\n constructor() {\n effect(() => {\n const w = this.widget();\n if (!w) return;\n const cfg = this.widgetRegistryService.resolve(w?.type);\n if (cfg) {\n this.initialContext = {};\n this.config.set(cfg);\n this.fillTabs();\n } else {\n console.error(`Invalid widget name: ${w}`);\n }\n });\n\n effect(() => {\n const viewer = this.propertyViewerRef();\n const w = this.widget();\n if (!viewer || w == null) return;\n viewer.initializeContext(merge(cloneDeep(this.initialContext), w));\n });\n }\n\n //#region ---- Public API ----\n\n /**\n * Merges the given values into the property viewer context. Called by the designer when applying changes (e.g. undo/redo).\n * The inner viewer will emit onChanged; we ignore that emission to avoid designer -> update -> emit -> designer loop.\n */\n public update(values: any): void {\n this.suppressNextEmit = true;\n try {\n this.propertyViewerRef()?.update(values);\n } finally {\n this.suppressNextEmit = false;\n }\n }\n\n //#endregion\n\n //#region ---- Internal ----\n\n private fillTabs(): void {\n const cfg = this.config();\n const tabDefs: AXPPropertyViewerTab[] = [\n { name: 'general', title: 'General', groups: [] },\n ];\n Object.entries(cfg?.components ?? {}).forEach(([key, c]) => {\n if (c?.component != null && c?.properties?.length) {\n tabDefs.push({ name: key, title: capitalize(key), groups: [] });\n }\n });\n\n tabDefs.forEach((tab) => {\n const props =\n tab.name === 'general'\n ? (cfg?.properties ?? [])\n : ((cfg?.components as Record<string, { properties?: AXPWidgetProperty[] }>)?.[tab.name]?.properties ?? []);\n const visibleProps = props.filter((p) => p.visible !== false);\n tab.groups = unionBy(\n sortBy(\n visibleProps.map((pg) => ({\n isCollapsed: !!this.groupCollapsedStates.get(pg.group.name),\n name: pg.group.name,\n title: pg.group.title,\n props: sortBy(\n visibleProps.filter((p) => p.group.name === pg.group.name),\n ['order', 'title'],\n ),\n })),\n ['order', 'title'],\n ),\n 'name',\n ).filter((g) => g.props.length);\n });\n\n this.tabs.set(tabDefs.filter((t) => t.groups.length));\n\n const allProps = tabDefs.flatMap((tab) =>\n tab.name === 'general'\n ? (cfg?.properties ?? [])\n : ((cfg?.components as Record<string, { properties?: AXPWidgetProperty[] }>)?.[tab.name]?.properties ?? []),\n );\n this.initialContext = allProps\n .filter(\n (c) =>\n (!isArray(c.schema.defaultValue) && !isNil(c.schema.defaultValue)) ||\n (isArray(c.schema.defaultValue) && !isEmpty(c.schema.defaultValue)),\n )\n .reduce<Record<string, unknown>>((acc, c) => {\n set(acc, c.schema.interface.path, c.schema.defaultValue);\n return acc;\n }, {});\n }\n\n protected handlePropertyViewerChanged(ev: AXPPropertyViewerChangedEvent): void {\n if (this.suppressNextEmit) return;\n this.onChanged.emit({ values: ev.values, mode: ev.mode });\n }\n\n //#endregion\n}\n","<axp-property-viewer\n [tabsInput]=\"tabs()\"\n [mode]=\"mode()\"\n (onChanged)=\"handlePropertyViewerChanged($event)\"\n></axp-property-viewer>\n","import { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXBasePageComponent } from '@acorex/components/page';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPWidgetNode } from '@acorex/platform/layout/widget-core';\nimport { ChangeDetectionStrategy, Component, input, signal } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { AXPWidgetPropertyViewerComponent } from './widget-property-viewer.component';\n\n@Component({\n selector: 'axp-widget-property-viewer-popup',\n template: `\n <div class=\"ax-flex ax-flex-col ax-h-full ax-overflow-hidden\">\n <axp-widget-property-viewer \n [widget]=\"widget()\" \n [mode]=\"mode()\"\n (onChanged)=\"handlePropertyChanged($event)\">\n </axp-widget-property-viewer>\n </div>\n\n <ax-footer>\n <ax-suffix>\n <ax-button \n look=\"solid\" \n [text]=\"'@general:actions.close.title' | translate | async\"\n (onClick)=\"handleCloseClick()\">\n </ax-button>\n <ax-button \n look=\"solid\" \n color=\"primary\" \n [text]=\"'@general:actions.apply.title' | translate | async\"\n (onClick)=\"handleApplyClick()\">\n </ax-button>\n </ax-suffix>\n </ax-footer>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n AXButtonModule,\n AXDecoratorModule,\n AXTranslationModule,\n AXPWidgetPropertyViewerComponent\n ],\n})\nexport class AXPWidgetPropertyViewerPopupComponent extends AXBasePageComponent {\n\n //#region ---- Inputs ----\n\n widget = input.required<AXPWidgetNode>();\n mode = input<'simple' | 'advanced'>('simple');\n\n //#endregion\n\n //#region ---- Properties ----\n\n protected currentValues = signal<any>({});\n\n //#endregion\n\n //#region ---- Event Handlers ----\n\n protected handlePropertyChanged(event: { values: any; mode: 'init' | 'update' }) {\n this.currentValues.set(event.values);\n }\n\n protected handleCloseClick() {\n this.close();\n }\n\n protected handleApplyClick() {\n this.close({\n values: this.currentValues(),\n mode: 'update'\n });\n }\n\n //#endregion\n}\n","import { Injectable, inject } from '@angular/core';\nimport {\n AXPWidgetConfig,\n AXPWidgetNode,\n AXPWidgetProperty,\n AXPWidgetRegistryService,\n} from '@acorex/platform/layout/widget-core';\nimport { cloneDeep, isArray, isEmpty, isNil, merge, set, sortBy, unionBy } from 'lodash-es';\n\nimport {\n AXPPropertyViewerActionRef,\n AXPPropertyViewerService,\n AXPPropertyViewerTab,\n} from '../property-viewer';\n\n//#region ---- Types ----\n\nexport interface AXPWidgetPropertyInjection {\n property: AXPWidgetProperty;\n tab?: {\n name?: string;\n title?: string;\n };\n group?: {\n name?: string;\n title?: string;\n };\n}\n\nexport interface AXPWidgetPropertyViewerConfig {\n title: string;\n widget: AXPWidgetNode;\n mode?: 'simple' | 'advanced';\n onApply?: (result: AXPWidgetPropertyViewerResult) => void | Promise<void>;\n /**\n * Property names to exclude from the viewer.\n */\n exclude?: string[];\n /**\n * Custom property injection configuration.\n */\n custom?: {\n /**\n * Custom property injection entries.\n */\n properties: AXPWidgetPropertyInjection[];\n /**\n * Default tab fallback if property injection doesn't specify one.\n * When omitted, falls back to the first tab or \"general\".\n */\n defaultTab?: {\n name?: string;\n title?: string;\n };\n /**\n * Default group fallback when injection doesn't specify a group.\n * When omitted, falls back to the tab's first group or property defined group.\n */\n defaultGroup?: {\n name?: string;\n title?: string;\n };\n };\n}\n\n/** Emitted when the dialog applies; `values` is the updated viewer context (merge into {@link AXPWidgetNode} as needed). */\nexport interface AXPWidgetPropertyViewerResult {\n values: any;\n mode: 'init' | 'update';\n}\n\nexport interface IAXPWidgetPropertyViewerRoot {\n dialog(\n delegate: (container: IAXPWidgetPropertyViewerDialogBuilder) => void,\n ): IAXPWidgetPropertyViewerDialogBuilder;\n}\n\nexport interface IAXPWidgetPropertyViewerDialogBuilder {\n setTitle(title: string): IAXPWidgetPropertyViewerDialogBuilder;\n /**\n * Initial widget state shown in the viewer (type, options, name/path, …). Call before {@link show}.\n */\n setWidget(widget: AXPWidgetNode): IAXPWidgetPropertyViewerDialogBuilder;\n setMode(mode: 'simple' | 'advanced'): IAXPWidgetPropertyViewerDialogBuilder;\n setExclude(exclude: string[]): IAXPWidgetPropertyViewerDialogBuilder;\n setCustom(custom: AXPWidgetPropertyViewerConfig['custom']): IAXPWidgetPropertyViewerDialogBuilder;\n /**\n * When set to a non-empty array, builds tabs from these properties and skips registry lookup for {@link setWidget}'s type.\n * Omit or clear to resolve widget config from {@link AXPWidgetRegistryService} as usual.\n */\n setPropertyDefinitions(properties: AXPWidgetProperty[] | null): IAXPWidgetPropertyViewerDialogBuilder;\n onAction(\n handler: (\n dialogRef: AXPPropertyViewerActionRef,\n ) => void | Promise<void> | unknown | Promise<unknown>,\n ): IAXPWidgetPropertyViewerDialogBuilder;\n /**\n * Applies edits and returns updated context; merge {@link AXPWidgetPropertyViewerResult.values} into your widget node\n * (typically `options` and any top-level fields the viewer exposes).\n */\n show(): Promise<AXPWidgetPropertyViewerResult | null>;\n}\n\n//#endregion\n\n//#region ---- Tab / context builders ----\n\nfunction buildWidgetPropertyViewerTabs(\n config: AXPWidgetConfig,\n custom: AXPWidgetPropertyViewerConfig['custom'] | undefined,\n exclude: string[],\n): AXPPropertyViewerTab[] {\n const isExcluded = (property: AXPWidgetProperty): boolean => {\n return exclude.includes(property.name);\n };\n\n const tabs: Array<{ name: string; title: string; properties: AXPWidgetProperty[] }> = [\n {\n name: 'general',\n title: 'General',\n properties: (config.properties ?? []).filter((prop) => !isExcluded(prop)),\n },\n ];\n\n Object.entries(config.components ?? {}).forEach(([name, component]) => {\n if (component?.component && component.properties?.length) {\n tabs.push({\n name,\n title: component.title ?? name,\n properties: (component.properties ?? []).filter((prop: AXPWidgetProperty) => !isExcluded(prop)),\n });\n }\n });\n\n if (custom?.properties?.length) {\n custom.properties.forEach((entry) => {\n if (isExcluded(entry.property)) {\n return;\n }\n\n const defaultTabName = custom.defaultTab?.name ?? tabs[0]?.name ?? 'general';\n const defaultTabTitle =\n custom.defaultTab?.title ?? tabs.find((tab) => tab.name === defaultTabName)?.title ?? 'Custom';\n\n const targetTabName = entry.tab?.name ?? defaultTabName;\n const targetTabTitle = entry.tab?.title ?? (targetTabName === defaultTabName ? defaultTabTitle : 'Custom');\n\n let targetTab = tabs.find((tab) => tab.name === targetTabName);\n if (!targetTab) {\n targetTab = {\n name: targetTabName,\n title: targetTabTitle,\n properties: [],\n };\n tabs.push(targetTab);\n }\n\n const baseGroup = targetTab.properties[0]?.group;\n const defaultGroupName = custom.defaultGroup?.name ?? baseGroup?.name ?? entry.property.group?.name ?? 'custom';\n const defaultGroupTitle =\n custom.defaultGroup?.title ?? baseGroup?.title ?? entry.property.group?.title ?? 'Custom';\n\n const groupName = entry.group?.name ?? defaultGroupName;\n const groupTitle = entry.group?.title ?? defaultGroupTitle;\n\n targetTab.properties.push({\n ...entry.property,\n group: {\n ...entry.property.group,\n name: groupName,\n title: groupTitle,\n order: entry.property.group?.order ?? baseGroup?.order ?? 0,\n },\n });\n });\n }\n\n return tabs\n .map<AXPPropertyViewerTab>((tab) => {\n const visibleProps = (tab.properties ?? []).filter((prop) => prop.visible !== false);\n return {\n name: tab.name,\n title: tab.title,\n groups: unionBy(\n sortBy(\n visibleProps.map((prop) => ({\n name: prop.group.name,\n title: prop.group.title,\n isCollapsed: false,\n props: sortBy(\n visibleProps.filter((p) => p.group.name === prop.group.name && prop.visible !== false),\n ['order', 'title'],\n ),\n })),\n ['order', 'title'],\n ),\n 'name',\n ).filter((group) => group.props.length),\n };\n })\n .filter((tab) => tab.groups.length);\n}\n\nfunction buildWidgetPropertyViewerInitialContext(\n config: AXPWidgetConfig,\n widget: AXPWidgetNode,\n custom: AXPWidgetPropertyViewerConfig['custom'] | undefined,\n exclude: string[],\n): any {\n const isExcluded = (property: AXPWidgetProperty): boolean => {\n return exclude.includes(property.name);\n };\n\n const allProperties: AXPWidgetProperty[] = [\n ...(config.properties ?? []).filter((prop) => !isExcluded(prop)),\n ...Object.values(config.components ?? {})\n .flatMap((component) => component?.properties ?? [])\n .filter((prop) => !isExcluded(prop)),\n ...(custom?.properties?.map((item) => item.property).filter((prop) => !isExcluded(prop)) ?? []),\n ];\n\n const defaults = allProperties\n .filter((prop) => {\n const defaultValue = prop.schema.defaultValue;\n if (isArray(defaultValue)) {\n return !isEmpty(defaultValue);\n }\n return !isNil(defaultValue);\n })\n .reduce((acc, prop) => {\n if (prop.schema?.interface?.path) {\n set(acc, prop.schema.interface.path, prop.schema.defaultValue);\n }\n return acc;\n }, {} as Record<string, unknown>);\n\n return merge(cloneDeep(defaults), cloneDeep(widget));\n}\n\n//#endregion\n\n//#region ---- Synthetic config (dynamic property definitions) ----\n\n/**\n * Minimal widget config for {@link buildWidgetPropertyViewerTabs} when properties are supplied at runtime.\n */\nfunction createSyntheticWidgetConfigFromProperties(properties: AXPWidgetProperty[]): AXPWidgetConfig {\n return {\n name: 'dynamic-property-definitions',\n title: 'Dynamic',\n type: 'editor',\n properties,\n components: {},\n } as AXPWidgetConfig;\n}\n\n//#endregion\n\n//#region ---- Dialog builder ----\n\nclass WidgetPropertyViewerDialogBuilder implements IAXPWidgetPropertyViewerDialogBuilder {\n private titleValue = '';\n private widgetValue!: AXPWidgetNode;\n private modeValue: 'simple' | 'advanced' = 'simple';\n private excludeValue: string[] = [];\n private customValue: AXPWidgetPropertyViewerConfig['custom'] | undefined;\n private propertyDefinitionsValue: AXPWidgetProperty[] | null = null;\n private onActionHandler?: (\n dialogRef: AXPPropertyViewerActionRef,\n ) => void | Promise<void> | unknown | Promise<unknown>;\n\n constructor(\n private readonly widgetRegistryService: AXPWidgetRegistryService,\n private readonly propertyViewerService: AXPPropertyViewerService,\n ) {}\n\n setTitle(title: string): IAXPWidgetPropertyViewerDialogBuilder {\n this.titleValue = title;\n return this;\n }\n\n setWidget(widget: AXPWidgetNode): IAXPWidgetPropertyViewerDialogBuilder {\n this.widgetValue = widget;\n return this;\n }\n\n setMode(mode: 'simple' | 'advanced'): IAXPWidgetPropertyViewerDialogBuilder {\n this.modeValue = mode;\n return this;\n }\n\n setExclude(exclude: string[]): IAXPWidgetPropertyViewerDialogBuilder {\n this.excludeValue = exclude;\n return this;\n }\n\n setCustom(custom: AXPWidgetPropertyViewerConfig['custom']): IAXPWidgetPropertyViewerDialogBuilder {\n this.customValue = custom;\n return this;\n }\n\n setPropertyDefinitions(properties: AXPWidgetProperty[] | null): IAXPWidgetPropertyViewerDialogBuilder {\n this.propertyDefinitionsValue = properties;\n return this;\n }\n\n onAction(\n handler: (\n dialogRef: AXPPropertyViewerActionRef,\n ) => void | Promise<void> | unknown | Promise<unknown>,\n ): IAXPWidgetPropertyViewerDialogBuilder {\n this.onActionHandler = handler;\n return this;\n }\n\n async show(): Promise<AXPWidgetPropertyViewerResult | null> {\n if (!this.widgetValue) {\n throw new Error('Widget property viewer dialog: call setWidget(...) before show().');\n }\n\n const overrideProps = this.propertyDefinitionsValue;\n let widgetConfig: AXPWidgetConfig | null = null;\n\n if (overrideProps && overrideProps.length > 0) {\n widgetConfig = createSyntheticWidgetConfigFromProperties(overrideProps);\n } else {\n widgetConfig = this.widgetRegistryService.resolve(this.widgetValue.type);\n if (!widgetConfig) {\n console.error(\n `AXPWidgetPropertyViewerService: Unable to resolve widget config for type \"${this.widgetValue?.type}\"`,\n );\n return null;\n }\n }\n\n const exclude = this.excludeValue ?? [];\n const tabs = buildWidgetPropertyViewerTabs(widgetConfig, this.customValue, exclude);\n const context = buildWidgetPropertyViewerInitialContext(\n widgetConfig,\n this.widgetValue,\n this.customValue,\n exclude,\n );\n\n return (await this.propertyViewerService\n .create()\n .dialog((d) => {\n d.setTitle(this.titleValue)\n .setMode(this.modeValue)\n .setTabs(tabs)\n .setContext(context);\n if (this.onActionHandler) {\n d.onAction(this.onActionHandler);\n }\n })\n .show()) as AXPWidgetPropertyViewerResult | null;\n }\n}\n\n//#endregion\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPWidgetPropertyViewerService {\n //#region ---- Services & Dependencies ----\n\n private readonly widgetRegistryService = inject(AXPWidgetRegistryService);\n private readonly propertyViewerService = inject(AXPPropertyViewerService);\n\n //#endregion\n\n //#region ---- Public Methods ----\n\n /**\n * Same shape as `AXPPropertyViewerService.create()` — use `.dialog((d) => { ... }).show()`.\n */\n create(): IAXPWidgetPropertyViewerRoot {\n const widgetRegistryService = this.widgetRegistryService;\n const propertyViewerService = this.propertyViewerService;\n return {\n dialog: (delegate: (container: IAXPWidgetPropertyViewerDialogBuilder) => void) => {\n const b = new WidgetPropertyViewerDialogBuilder(widgetRegistryService, propertyViewerService);\n delegate(b);\n return b;\n },\n };\n }\n\n /**\n * One-shot open (delegates to {@link #create} `.dialog().show()`).\n */\n async open(config: AXPWidgetPropertyViewerConfig): Promise<AXPWidgetPropertyViewerResult | null> {\n return this.create()\n .dialog((d) => {\n d.setTitle(config.title).setWidget(config.widget).setMode(config.mode ?? 'simple');\n if (config.exclude?.length) {\n d.setExclude(config.exclude);\n }\n if (config.custom) {\n d.setCustom(config.custom);\n }\n if (config.onApply) {\n d.onAction(async (ref) => {\n await config.onApply!({ values: ref.context(), mode: 'update' });\n });\n }\n })\n .show();\n }\n\n //#endregion\n}\n","//#region ---- Imports ----\n\nimport { AXRange } from '@acorex/cdk/common';\nimport { AXPActionMenuItem, AXPExecuteCommand, AXPExecuteCommandResult } from '@acorex/platform/core';\nimport { InjectionToken } from '@angular/core';\n\n//#endregion\n\n//#region ---- Resource Appointment Item ----\n\n/**\n * Minimal appointment data for resource appointment board.\n * Providers return this; the component converts to scheduler/task shape as needed.\n */\nexport interface AXPResourceAppointmentItem {\n readonly id: string | number;\n title: string;\n startDate: Date;\n endDate: Date;\n resourceId?: string | number;\n description?: string;\n allDay?: boolean;\n}\n\n//#endregion\n\n//#region ---- Resource Appointment Status ----\n\n/**\n * Represents a status option for the resource appointment board (e.g. column or filter).\n * Aligned with task board status shape for provider compatibility.\n */\nexport interface AXPResourceAppointmentStatus {\n key: string;\n index: number;\n title: string;\n color?: string;\n}\n\n//#endregion\n\n//#region ---- Reservation Board Action ----\n\n/**\n * Action menu item for resource appointment board with optional priority.\n * Primary actions are shown as icon-only buttons, secondary in a dropdown.\n */\nexport type AXPResourceAppointmentActionMenuItem = AXPActionMenuItem & {\n priority?: 'primary' | 'secondary';\n};\n\n//#endregion\n\n//#region ---- Reservation Resource ----\n\nexport interface AXPResourceAppointmentResource {\n readonly id: string | number;\n title: string;\n description?: string;\n icon?: string;\n appointments: AXPResourceAppointmentItem[];\n}\n\n//#endregion\n\n//#region ---- Reservation Board Filter ----\n\nexport interface AXPResourceAppointmentBoardFilter {\n range?: AXRange<Date>;\n statuses?: (string | number)[];\n resourceIds?: (string | number)[];\n /** When set, only these providers are queried. */\n providerNames?: string[];\n}\n\n//#endregion\n\n//#region ---- Reservation Board Provider ----\n\nexport abstract class AXPResourceAppointmentBoardProvider<T = Record<string, unknown>> {\n abstract get name(): string;\n abstract get title(): string;\n abstract get icon(): string;\n abstract getList(filter?: AXPResourceAppointmentBoardFilter): Promise<AXPResourceAppointmentResource[]>;\n abstract getStatuses(): Promise<AXPResourceAppointmentStatus[]>;\n abstract getActions(context?: AXPResourceAppointmentItem): Promise<AXPResourceAppointmentActionMenuItem[]>;\n abstract executeCommand(command: AXPExecuteCommand): Promise<AXPExecuteCommandResult>;\n}\n\n//#endregion\n\n//#region ---- Injection Token ----\n\nexport const AXP_RESOURCE_APPOINTMENT_PROVIDER = new InjectionToken<\n AXPResourceAppointmentBoardProvider[] | Promise<AXPResourceAppointmentBoardProvider>[]\n>('AXP_RESOURCE_APPOINTMENT_PROVIDER');\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXRange } from '@acorex/cdk/common';\nimport { AXCalendarService } from '@acorex/core/date-time';\nimport { AXPExecuteCommand, AXPExecuteCommandResult } from '@acorex/platform/core';\nimport { inject, Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport {\n AXP_RESOURCE_APPOINTMENT_PROVIDER,\n AXPResourceAppointmentActionMenuItem,\n AXPResourceAppointmentBoardFilter,\n AXPResourceAppointmentBoardProvider,\n AXPResourceAppointmentItem,\n AXPResourceAppointmentResource,\n AXPResourceAppointmentStatus,\n} from './resource-appointment.types';\n\n//#endregion\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXPResourceAppointmentService {\n //#region ---- Services & Dependencies ----\n\n private readonly calendarService = inject(AXCalendarService);\n private readonly providers = inject(AXP_RESOURCE_APPOINTMENT_PROVIDER, { optional: true });\n\n //#endregion\n\n //#region ---- State ----\n\n private resolvedProviders: AXPResourceAppointmentBoardProvider[] | null = null;\n refresh$ = new Subject<void>();\n\n //#endregion\n\n //#region ---- Provider Resolution ----\n\n /**\n * Resolves providers from injected AXP_RESOURCE_APPOINTMENT_PROVIDER.\n * The service must be provided in an injector that has access to the token (e.g. component providers).\n */\n async resolveProviders(): Promise<AXPResourceAppointmentBoardProvider[]> {\n if (this.resolvedProviders !== null) {\n return this.resolvedProviders;\n }\n\n const raw = this.providers ?? [];\n const resolved = await Promise.all(raw.map((p) => Promise.resolve(p)));\n const flattened = resolved.flatMap((entry) => (Array.isArray(entry) ? entry : [entry]));\n\n this.resolvedProviders = flattened.filter(\n (p): p is AXPResourceAppointmentBoardProvider =>\n p != null && typeof (p as AXPResourceAppointmentBoardProvider).getList === 'function',\n );\n\n return this.resolvedProviders;\n }\n\n //#endregion\n\n //#region ---- Provider Access ----\n\n async getProviderTypes(): Promise<AXPResourceAppointmentBoardProvider[]> {\n return this.resolveProviders();\n }\n\n getProvider(name: string | undefined): AXPResourceAppointmentBoardProvider | null {\n if (!name) return null;\n return this.resolvedProviders?.find((p) => p.name === name) ?? null;\n }\n\n //#endregion\n\n //#region ---- Data Fetching ----\n\n async getList(filter?: AXPResourceAppointmentBoardFilter): Promise<AXPResourceAppointmentResource[]> {\n const allProviders = await this.resolveProviders();\n\n const providers =\n filter?.providerNames?.length && filter.providerNames.length > 0\n ? allProviders.filter((p) => filter.providerNames!.includes(p.name))\n : allProviders;\n\n if (providers.length === 0) {\n return [];\n }\n\n const promises = providers.map((provider) =>\n provider.getList(filter).then((resources) =>\n resources.map((r) => ({\n ...r,\n appointments: r.appointments.map((a) => ({ ...a, provider: provider.name })),\n })),\n ),\n );\n\n const results = await Promise.all(promises);\n return results.flat();\n }\n\n async getStatuses(providerName: string): Promise<AXPResourceAppointmentStatus[]> {\n const provider = await this.findProvider(providerName);\n return provider.getStatuses();\n }\n\n async getActions(\n context: AXPResourceAppointmentItem | undefined,\n providerName: string,\n ): Promise<AXPResourceAppointmentActionMenuItem[]> {\n const provider = await this.findProvider(providerName);\n return provider.getActions(context);\n }\n\n async executeCommand(command: AXPExecuteCommand, providerName: string): Promise<AXPExecuteCommandResult> {\n const provider = await this.findProvider(providerName);\n return provider.executeCommand(command);\n }\n\n //#endregion\n\n //#region ---- Date Utilities ----\n\n rangeCalculator(type: string): AXRange<Date> | undefined {\n switch (type) {\n case 'today':\n return {\n from: this.calendarService.create(new Date()).startOf('day').date,\n end: this.calendarService.create(new Date()).endOf('day').date,\n };\n case 'this-week':\n return {\n from: this.calendarService.create(new Date()).startOf('week').date,\n end: this.calendarService.create(new Date()).endOf('week').date,\n };\n case 'this-month':\n return {\n from: this.calendarService.create(new Date()).startOf('month').date,\n end: this.calendarService.create(new Date()).endOf('month').date,\n };\n default:\n return undefined;\n }\n }\n\n //#endregion\n\n //#region ---- Utility Methods ----\n\n private async findProvider(providerName: string): Promise<AXPResourceAppointmentBoardProvider> {\n const providers = await this.resolveProviders();\n const provider = providers.find((p) => p.name === providerName) ?? null;\n if (!provider) {\n throw new Error(`Reservation board provider '${providerName}' not found`);\n }\n return provider;\n }\n\n //#endregion\n}\n","//#region ---- Imports ----\n\nimport { AXCommonModule, AXStyleColorType } from '@acorex/cdk/common';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport {\n AXContextMenuComponent,\n AXContextMenuItemsClickEvent,\n AXContextMenuOpeningEvent,\n AXMenuModule,\n} from '@acorex/components/menu';\nimport {\n AXSchedulerAppointment,\n AXSchedulerComponent,\n AXSchedulerDateRange,\n AXSchedulerResource,\n AXSchedulerView,\n} from '@acorex/components/scheduler';\nimport { AXFormatService } from '@acorex/core/format';\nimport { AXTranslationService } from '@acorex/core/translation';\n\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n input,\n OnInit,\n signal,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { AXPResourceAppointmentService } from './resource-appointment.service';\nimport {\n AXPResourceAppointmentBoardFilter,\n AXPResourceAppointmentItem,\n AXPResourceAppointmentResource,\n} from './resource-appointment.types';\n\n//#endregion\n\n/** Scheduler appointment with optional provider tag for context menu routing. */\ntype AppointmentWithProvider = AXSchedulerAppointment & { provider?: string };\n\n@Component({\n selector: 'axp-resource-appointment',\n templateUrl: './resource-appointment.component.html',\n styleUrls: ['./resource-appointment.component.scss'],\n imports: [AXCommonModule, AXMenuModule, AXLoadingModule, AXSchedulerComponent, AXButtonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [AXPResourceAppointmentService],\n})\nexport class AXPResourceAppointmentComponent implements OnInit {\n //#region ---- Inputs ----\n\n /** Show resource headers in the timeline views. */\n showResourceHeaders = input<boolean>(true);\n\n /** Show appointments that have no resourceId. */\n showUnassignedAppointments = input<boolean>(true);\n\n /** Optional provider name to filter the board (e.g. from route param). */\n providerName = input<string | undefined>(undefined);\n\n //#endregion\n\n //#region ---- Services & Dependencies ----\n\n private readonly resourceAppointmentService = inject(AXPResourceAppointmentService);\n private readonly formatService = inject(AXFormatService);\n private readonly translateService = inject(AXTranslationService);\n\n //#endregion\n\n //#region ---- Component References ----\n\n private readonly contextMenu = viewChild<AXContextMenuComponent>('contextMenu');\n protected readonly schedulerRef = viewChild<AXSchedulerComponent>('scheduler');\n\n //#endregion\n\n //#region ---- State ----\n\n protected readonly isReady = signal(false);\n protected readonly currentDate = signal<Date>(new Date());\n protected readonly currentView = signal<AXSchedulerView>('timeline-month');\n private readonly currentAppointment = signal<AppointmentWithProvider | null>(null);\n\n /** Raw resources returned by providers. */\n private readonly rawResources = signal<AXPResourceAppointmentResource[]>([]);\n\n //#endregion\n\n //#region ---- Computed Properties ----\n\n /** Scheduler resources derived from provider data. */\n protected readonly schedulerResources = computed<AXSchedulerResource[]>(() =>\n this.rawResources().map((r) => ({\n id: r.id,\n title: r.title,\n })),\n );\n\n /** Flat list of scheduler appointments derived from provider data. */\n protected readonly schedulerAppointments = computed<AppointmentWithProvider[]>(() =>\n this.rawResources().flatMap((resource) =>\n resource.appointments.map((a: AXPResourceAppointmentItem & { provider?: string }) => ({\n id: a.id,\n title: a.title,\n startDate: a.startDate,\n endDate: a.endDate,\n allDay: a.allDay,\n description: a.description,\n resourceId: a.resourceId ?? resource.id,\n provider: a.provider,\n })),\n ),\n );\n\n /** Formatted date range text for the toolbar. */\n protected readonly timeText = computed(() => {\n const scheduler = this.schedulerRef();\n return scheduler?.currentDateText() ?? this.formatCurrentDateRange();\n });\n\n //#endregion\n\n //#region ---- Lifecycle ----\n\n constructor() {\n effect(() => {\n this.providerName();\n if (this.isReady()) {\n this.loadData();\n }\n });\n }\n\n async ngOnInit(): Promise<void> {\n await this.resolveProvidersAndReady();\n }\n\n //#endregion\n\n //#region ---- Provider Resolution ----\n\n private async resolveProvidersAndReady(): Promise<void> {\n await this.resourceAppointmentService.resolveProviders();\n // this.resourceAppointmentService.refresh$.subscribe(() => this.loadData());\n\n await this.loadData();\n this.isReady.set(true);\n }\n\n //#endregion\n\n //#region ---- Data Loading ----\n\n /** Fetches resource + appointment data from providers and updates signals. */\n private async loadData(range?: AXSchedulerDateRange): Promise<void> {\n const providerName = this.providerName();\n const filter: AXPResourceAppointmentBoardFilter = {\n ...(range && { range: { from: range.from, end: range.end } }),\n ...(providerName && { providerNames: [providerName] }),\n };\n\n const resourceList = await this.resourceAppointmentService.getList(filter);\n this.rawResources.set(resourceList);\n }\n\n //#endregion\n\n //#region ---- Event Handlers ----\n\n /** Re-load data when the scheduler view range changes and sync toolbar date. */\n protected handleRangeChanged(range: AXSchedulerDateRange): void {\n //TODO FIX LATER\n // this.currentDate.set(range.from);\n // this.loadData(range);\n }\n\n /** Navigate to previous/next period based on current view. */\n protected changeDate(forward: boolean): void {\n const date = new Date(this.currentDate().getTime());\n const view = this.currentView();\n\n switch (view) {\n case 'timeline-day':\n date.setDate(date.getDate() + (forward ? 1 : -1));\n break;\n case 'timeline-weekly':\n date.setDate(date.getDate() + (forward ? 7 : -7));\n break;\n case 'timeline-month':\n date.setMonth(date.getMonth() + (forward ? 1 : -1));\n break;\n default:\n date.setDate(date.getDate() + (forward ? 1 : -1));\n }\n\n this.currentDate.set(date);\n }\n\n /** Fallback formatted date range when scheduler ref is not yet available. */\n private formatCurrentDateRange(): string {\n const d = this.currentDate();\n return d ? this.formatService.format(d, 'datetime', { format: 'long' }) : '';\n }\n\n protected handleAppointmentClick(event: { appointment: AXSchedulerAppointment; nativeEvent: MouseEvent }): void {\n const appointment = event.appointment as AppointmentWithProvider;\n if (!appointment) return;\n\n this.currentAppointment.set(appointment);\n\n const { clientX: x, clientY: y, target } = event.nativeEvent;\n this.contextMenu()?.showAt({ x, y }, target as HTMLElement);\n }\n\n protected async handleContextMenuOpening(event: AXContextMenuOpeningEvent): Promise<void> {\n const appointment = this.currentAppointment();\n if (!appointment) return;\n\n const providerName = appointment.provider;\n if (!providerName) return;\n\n const item: AXPResourceAppointmentItem = {\n id: appointment.id,\n title: appointment.title ?? '',\n startDate: appointment.startDate,\n endDate: appointment.endDate,\n resourceId: appointment.resourceId,\n description: appointment.description,\n allDay: appointment.allDay,\n };\n const actions = await this.resourceAppointmentService.getActions(item, providerName);\n for (const actionItem of actions) {\n const t = actionItem.title;\n const text =\n typeof t === 'string'\n ? t.startsWith('@')\n ? await this.translateService.translateAsync(t)\n : t\n : this.translateService.resolve(t);\n event.items.push({\n text,\n icon: actionItem.icon,\n color: actionItem.color as AXStyleColorType,\n break: actionItem.break,\n data: { command: actionItem.command },\n });\n }\n }\n\n protected handleContextMenuItemClick(event: AXContextMenuItemsClickEvent): void {\n const providerName = this.currentAppointment()?.provider ?? '';\n this.resourceAppointmentService.executeCommand(event.item.data?.command, providerName);\n }\n\n //#endregion\n}\n","<div class=\"axp-resource-appointment__container ax-flex ax-flex-col ax-min-h-0 ax-h-full\">\n @if (isReady()) {\n <!-- TODO: Add weekly view 'timeline-weekly' -->\n <ax-scheduler\n #scheduler\n [views]=\"['timeline-day', 'timeline-month']\"\n [dataSource]=\"schedulerAppointments()\"\n [resources]=\"schedulerResources()\"\n [startingDate]=\"currentDate()\"\n [selectedView]=\"currentView()\"\n [draggable]=\"false\"\n (onRangeChanged)=\"handleRangeChanged($event)\"\n class=\"axp-resource-appointment__scheduler ax-bg-lightest dark:ax-bg-darkest ax-flex-1\"\n ></ax-scheduler>\n\n <ax-context-menu\n #contextMenu\n [closeOn]=\"'leave'\"\n [orientation]=\"'vertical'\"\n (onOpening)=\"handleContextMenuOpening($event)\"\n (onItemClick)=\"handleContextMenuItemClick($event)\"\n ></ax-context-menu>\n } @else {\n <div class=\"axp-resource-appointment__loading ax-flex ax-items-center ax-justify-center ax-w-full ax-h-full\">\n <ax-loading></ax-loading>\n </div>\n }\n</div>\n","//#region ---- Core value model (Sections / Items) ----\n\n/**\n * Host-owned item row. Required keys are stable; additional keys are persisted by the host mapper.\n */\nexport interface AXPBuilderItem {\n id: string;\n order: number;\n [key: string]: unknown;\n}\n\n/**\n * Host-owned section. Items live under `items` (not nested host-specific names).\n */\nexport interface AXPBuilderSection {\n id: string;\n order: number;\n items: AXPBuilderItem[];\n [key: string]: unknown;\n}\n\nexport interface AXPBuilderValue {\n sections: AXPBuilderSection[];\n}\n\n//#endregion\n\n//#region ---- Presentation + definition ----\n\nexport type AXPBuilderBadgeVariant = 'neutral' | 'accent' | 'warning' | 'danger' | 'success';\n\nexport interface AXPBuilderBadge {\n /** Translation key (e.g. `@general:...`) or plain text. */\n text: string;\n variant?: AXPBuilderBadgeVariant;\n}\n\nexport type AXPBuilderItemIconTone = 'default' | 'easy' | 'medium' | 'hard';\n\n/**\n * View model for one item row (icons, labels, badges). Built by {@link AXPBuilderDefinition.mapItemToView}.\n */\nexport interface AXPBuilderItemViewModel {\n icon: string;\n iconTone?: AXPBuilderItemIconTone;\n title: string;\n name?: string;\n description?: string;\n badges: AXPBuilderBadge[];\n}\n\nexport interface AXPBuilderTexts {\n addSection: string;\n addItem: string;\n emptySectionsTitle: string;\n emptySectionsDescription: string;\n emptyItemsTitle: string;\n emptyItemsDescription: string;\n /** Shown when {@link AXPBuilderDefinition.isDefaultSection} is true */\n defaultSectionBadge?: string;\n}\n\n/**\n * Declarative configuration for {@link AXPSectionItemsBuilderComponent}.\n * Prompts return domain slices; the builder assigns `id` / `order` / `items` where needed.\n */\nexport interface AXPBuilderDefinition {\n texts: AXPBuilderTexts;\n mapItemToView: (item: AXPBuilderItem, section: AXPBuilderSection) => AXPBuilderItemViewModel;\n /** When true, renders section technical `name` next to the title (parentheses). */\n showSectionTechnicalName?: boolean;\n isDefaultSection?(section: AXPBuilderSection): boolean;\n /** Minimum number of sections (default 1). */\n minSectionCount?: number;\n\n promptAddSection?(value: AXPBuilderValue): Promise<Record<string, unknown> | null>;\n promptEditSection?(\n section: AXPBuilderSection,\n value: AXPBuilderValue,\n ): Promise<Record<string, unknown> | null>;\n promptAddItems?(sectionId: string, value: AXPBuilderValue): Promise<AXPBuilderItem[] | null>;\n promptEditItem?(\n item: AXPBuilderItem,\n sectionId: string,\n value: AXPBuilderValue,\n ): Promise<AXPBuilderItem | null>;\n\n confirmRemoveSection?(section: AXPBuilderSection): Promise<boolean>;\n confirmRemoveItem?(item: AXPBuilderItem, sectionId: string): Promise<boolean>;\n}\n\n//#endregion\n","import { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXSafePipe } from '@acorex/core/pipes';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport {\n AXPDataGenerator,\n containsHtmlMarkup,\n extractTextFromHtml,\n type AXPMultiLanguageString,\n} from '@acorex/platform/core';\nimport {\n CdkDrag,\n CdkDragDrop,\n CdkDragHandle,\n CdkDropList,\n moveItemInArray,\n transferArrayItem,\n} from '@angular/cdk/drag-drop';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n computed,\n effect,\n input,\n output,\n signal,\n untracked,\n} from '@angular/core';\nimport { cloneDeep } from 'lodash-es';\nimport { AXPStateMessageComponent } from '../state-message/state-message.component';\nimport {\n AXPBuilderDefinition,\n AXPBuilderItem,\n AXPBuilderSection,\n AXPBuilderValue,\n} from './section-items-builder.types';\n\n@Component({\n selector: 'axp-section-items-builder',\n standalone: true,\n templateUrl: './section-items-builder.component.html',\n styleUrl: './section-items-builder.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'axp-section-items-builder-host',\n },\n imports: [\n CommonModule,\n AXButtonModule,\n AXDecoratorModule,\n AXTranslationModule,\n AXPStateMessageComponent,\n CdkDropList,\n CdkDrag,\n CdkDragHandle,\n AXSafePipe,\n ],\n})\nexport class AXPSectionItemsBuilderComponent {\n /** Used in template to branch between escaped text and sanitized HTML. */\n protected readonly containsHtmlMarkup = containsHtmlMarkup;\n\n readonly value = input.required<AXPBuilderValue>();\n readonly definition = input.required<AXPBuilderDefinition>();\n readonly readonlyMode = input(false, { alias: 'readonly' });\n\n readonly valueChange = output<AXPBuilderValue>();\n\n private readonly vm = signal<AXPBuilderValue>({ sections: [] });\n\n protected readonly sectionsModel = computed(() => this.normalizeValue(this.vm()));\n\n protected readonly sectionRows = computed(() => {\n const def = this.definition();\n return this.sectionsModel().sections.map((section) => ({\n section,\n itemRows: [...section.items]\n .sort((a, b) => a.order - b.order)\n .map((item) => ({\n item,\n view: def.mapItemToView(item, section),\n })),\n }));\n });\n\n protected readonly itemDropListIds = computed(() =>\n this.sectionsModel().sections.map((s) => this.sectionItemsListId(s.id)),\n );\n\n protected readonly canRemoveSection = computed(() => {\n const min = this.definition().minSectionCount ?? 1;\n return this.sectionsModel().sections.length > min;\n });\n\n constructor() {\n effect(() => {\n const next = cloneDeep(this.value());\n untracked(() => this.vm.set(this.normalizeValue(next)));\n });\n }\n\n /**\n * Opens add-section flow (same as primary \"Add section\" control). For page commands / ViewChild.\n */\n async addSection(): Promise<void> {\n await this.onAddSectionClick();\n }\n\n protected async onAddSectionClick(): Promise<void> {\n if (this.readonlyMode()) return;\n const def = this.definition();\n if (!def.promptAddSection) return;\n const partial = await def.promptAddSection(this.sectionsModel());\n if (!partial) return;\n const sections = [...this.sectionsModel().sections];\n const p = partial as Record<string, unknown>;\n const fromPartial =\n (typeof p['name'] === 'string' && p['name'].trim()) || (typeof p['id'] === 'string' && p['id'].trim()) || '';\n const id = fromPartial || AXPDataGenerator.uuid();\n const section: AXPBuilderSection = {\n ...partial,\n id,\n order: sections.length,\n items: [],\n } as AXPBuilderSection;\n sections.push(section);\n this.commit({ sections: this.reindexSections(sections) });\n }\n\n protected async onEditSection(section: AXPBuilderSection): Promise<void> {\n if (this.readonlyMode()) return;\n const def = this.definition();\n if (!def.promptEditSection) return;\n const partial = await def.promptEditSection(section, this.sectionsModel());\n if (!partial) return;\n const sections = this.sectionsModel().sections.map((s) => {\n if (s.id !== section.id) return s;\n const merged = { ...s, ...partial } as AXPBuilderSection;\n return { ...merged, items: s.items };\n });\n this.commit({ sections: this.reindexSections(sections) });\n }\n\n protected async onRemoveSection(section: AXPBuilderSection): Promise<void> {\n if (this.readonlyMode()) return;\n const min = this.definition().minSectionCount ?? 1;\n if (this.sectionsModel().sections.length <= min) return;\n const def = this.definition();\n if (def.confirmRemoveSection) {\n const ok = await def.confirmRemoveSection(section);\n if (!ok) return;\n }\n const remaining = this.sectionsModel().sections.filter((s) => s.id !== section.id);\n this.commit({ sections: this.reindexSections(remaining) });\n }\n\n protected async onAddItems(section: AXPBuilderSection): Promise<void> {\n if (this.readonlyMode()) return;\n const def = this.definition();\n if (!def.promptAddItems) return;\n const created = await def.promptAddItems(section.id, this.sectionsModel());\n if (!created?.length) return;\n const sections = this.sectionsModel().sections.map((s) => {\n if (s.id !== section.id) return s;\n const nextItems = [...s.items];\n const baseOrder = nextItems.length;\n created.forEach((item, i) => {\n nextItems.push({\n ...item,\n order: item.order ?? baseOrder + i,\n });\n });\n return { ...s, items: this.reindexItems(nextItems) };\n });\n this.commit({ sections });\n }\n\n protected async onEditItem(item: AXPBuilderItem, sectionId: string): Promise<void> {\n if (this.readonlyMode()) return;\n const def = this.definition();\n if (!def.promptEditItem) return;\n const updated = await def.promptEditItem(item, sectionId, this.sectionsModel());\n if (!updated) return;\n const sections = this.sectionsModel().sections.map((s) => {\n if (s.id !== sectionId) return s;\n return {\n ...s,\n items: s.items.map((it) => {\n if (it.id !== item.id) return it;\n const merged = { ...it, ...updated } as AXPBuilderItem;\n const nextId = updated.id !== undefined && String(updated.id).length > 0 ? String(updated.id) : it.id;\n return { ...merged, id: nextId };\n }),\n };\n });\n this.commit({ sections });\n }\n\n protected async onRemoveItem(item: AXPBuilderItem, sectionId: string): Promise<void> {\n if (this.readonlyMode()) return;\n const def = this.definition();\n if (def.confirmRemoveItem) {\n const ok = await def.confirmRemoveItem(item, sectionId);\n if (!ok) return;\n }\n const sections = this.sectionsModel().sections.map((s) => {\n if (s.id !== sectionId) return s;\n return { ...s, items: this.reindexItems(s.items.filter((it) => it.id !== item.id)) };\n });\n this.commit({ sections });\n }\n\n protected onSectionDrop(event: CdkDragDrop<AXPBuilderSection[]>): void {\n if (this.readonlyMode()) return;\n const list = [...this.sectionsModel().sections];\n moveItemInArray(list, event.previousIndex, event.currentIndex);\n this.commit({ sections: this.reindexSections(list) });\n }\n\n protected onItemDrop(event: CdkDragDrop<AXPBuilderItem[]>, targetSectionId: string): void {\n if (this.readonlyMode()) return;\n const sourceListId = event.previousContainer.id;\n const sourceSectionId = this.parseSectionIdFromDropListId(sourceListId);\n if (!sourceSectionId) return;\n const sections = [...this.sectionsModel().sections];\n const sourceIdx = sections.findIndex((s) => s.id === sourceSectionId);\n const targetIdx = sections.findIndex((s) => s.id === targetSectionId);\n if (sourceIdx < 0 || targetIdx < 0) return;\n const source = sections[sourceIdx];\n const target = sections[targetIdx];\n if (event.previousContainer === event.container) {\n const items = [...source.items];\n moveItemInArray(items, event.previousIndex, event.currentIndex);\n sections[sourceIdx] = { ...source, items: this.reindexItems(items) };\n this.commit({ sections });\n return;\n }\n const sourceItems = [...source.items];\n const targetItems = [...target.items];\n transferArrayItem(sourceItems, targetItems, event.previousIndex, event.currentIndex);\n sections[sourceIdx] = { ...source, items: this.reindexItems(sourceItems) };\n sections[targetIdx] = { ...target, items: this.reindexItems(targetItems) };\n this.commit({ sections });\n }\n\n protected sectionItemsListId(sectionId: string): string {\n return `section-${sectionId}-items`;\n }\n\n protected parseSectionIdFromDropListId(listId: string): string | null {\n const prefix = 'section-';\n const suffix = '-items';\n if (!listId.startsWith(prefix) || !listId.endsWith(suffix)) return null;\n return listId.slice(prefix.length, -suffix.length);\n }\n\n protected isDefaultSection(section: AXPBuilderSection): boolean {\n return this.definition().isDefaultSection?.(section) === true;\n }\n\n protected isTranslationKey(text: string): boolean {\n return typeof text === 'string' && text.startsWith('@');\n }\n\n /** Tooltip for rich HTML rows: plain text, no tags. */\n protected tooltipPlainTextForHtml(html: string): string {\n return extractTextFromHtml(html.trim());\n }\n\n /**\n * Prefer raw section fields for display so {@link AXPMultiLanguageString} maps are not\n * lost when {@link AXPBuilderDefinition#mapItemToView} stringifies them on items.\n */\n protected sectionTitleValue(section: AXPBuilderSection): AXPMultiLanguageString | string {\n const t = section['title'];\n if (t != null && typeof t === 'object' && !Array.isArray(t)) {\n return t as AXPMultiLanguageString;\n }\n if (typeof t === 'string' && t.trim()) return t;\n const n = section['name'];\n if (n != null && typeof n === 'object' && !Array.isArray(n)) {\n return n as AXPMultiLanguageString;\n }\n return typeof n === 'string' ? n : '';\n }\n\n protected sectionNameValue(section: AXPBuilderSection): AXPMultiLanguageString | string | undefined {\n const n = section['name'];\n if (n != null && typeof n === 'object' && !Array.isArray(n)) {\n return n as AXPMultiLanguageString;\n }\n return typeof n === 'string' ? n : undefined;\n }\n\n protected sectionDescriptionValue(section: AXPBuilderSection): AXPMultiLanguageString | string | undefined {\n const d = section['description'];\n if (d != null && typeof d === 'object' && !Array.isArray(d)) {\n return d as AXPMultiLanguageString;\n }\n return typeof d === 'string' ? d : undefined;\n }\n\n /**\n * Resolves item title/name/description for display: use raw item values when present\n * (including ML maps); fall back to {@link AXPBuilderItemViewModel} only when needed.\n */\n protected itemMultilingualField(\n item: AXPBuilderItem,\n field: 'title' | 'name' | 'description',\n viewFallback?: string | null,\n ): AXPMultiLanguageString | string {\n const raw = item[field];\n if (raw != null && typeof raw === 'object' && !Array.isArray(raw)) {\n return raw as AXPMultiLanguageString;\n }\n if (typeof raw === 'string') {\n return raw;\n }\n if (typeof raw === 'number' || typeof raw === 'boolean') {\n return String(raw);\n }\n if (viewFallback != null && viewFallback !== '' && viewFallback !== '[object Object]') {\n return viewFallback;\n }\n return '';\n }\n\n private commit(next: AXPBuilderValue): void {\n const normalized = this.normalizeValue(next);\n this.vm.set(normalized);\n this.valueChange.emit(normalized);\n }\n\n private normalizeValue(v: AXPBuilderValue): AXPBuilderValue {\n const sections = (v.sections ?? []).map((s) => ({\n ...s,\n items: [...(s.items ?? [])],\n }));\n return { sections: this.reindexSections(sections) };\n }\n\n private reindexSections(sections: AXPBuilderSection[]): AXPBuilderSection[] {\n return sections.map((s, i) => ({\n ...s,\n order: i,\n items: this.reindexItems(s.items),\n }));\n }\n\n private reindexItems(items: AXPBuilderItem[]): AXPBuilderItem[] {\n return items.map((it, i) => ({ ...it, order: i }));\n }\n}\n","<div class=\"axp-section-items-builder\" *translate=\"let t\">\n <div class=\"__content\">\n @if (sectionsModel().sections.length === 0) {\n <axp-state-message\n icon=\"fa-light fa-layer-group\"\n [title]=\"definition().texts.emptySectionsTitle\"\n [description]=\"definition().texts.emptySectionsDescription\"\n >\n </axp-state-message>\n } @else {\n <div\n class=\"__sections-container\"\n cdkDropList\n [cdkDropListData]=\"sectionsModel().sections\"\n (cdkDropListDropped)=\"onSectionDrop($event)\"\n >\n @for (row of sectionRows(); track row.section.id) {\n <div class=\"__section\" cdkDrag cdkDragPreviewClass=\"axp-section-items-builder-drag-preview\">\n <div class=\"__section-header\">\n @if (!readonlyMode()) {\n <div class=\"__section-drag-handle\" cdkDragHandle>\n <ax-icon icon=\"fa-solid fa-grip-vertical\"></ax-icon>\n </div>\n }\n <div class=\"__section-info\">\n @let secTitle = sectionTitleValue(row.section) | translate | async;\n <h3 class=\"__section-title\" [title]=\"secTitle\">\n {{ secTitle }}\n @if (definition().showSectionTechnicalName) {\n @let secTechName = sectionNameValue(row.section) | translate | async;\n @if (secTechName?.trim()) {\n <span class=\"__section-name-prefix\">({{ secTechName }})</span>\n }\n }\n @if (isDefaultSection(row.section)) {\n @if (definition().texts.defaultSectionBadge; as defaultBadge) {\n <span class=\"__default-section-badge\">{{ defaultBadge | translate | async }}</span>\n }\n }\n </h3>\n @let secDesc = (sectionDescriptionValue(row.section) | translate | async) || '';\n @let secDescTrimmed = secDesc?.trim();\n @if (secDescTrimmed) {\n @if (containsHtmlMarkup(secDescTrimmed)) {\n <div\n class=\"__section-description __section-description--rich\"\n [title]=\"tooltipPlainTextForHtml(secDesc)\"\n [innerHTML]=\"secDesc | safe: 'html'\"\n ></div>\n } @else {\n <p class=\"__section-description\" [title]=\"secDescTrimmed\">{{ secDescTrimmed }}</p>\n }\n }\n </div>\n @if (!readonlyMode()) {\n <div class=\"__section-actions\">\n @if (definition().promptAddItems) {\n <ax-button\n class=\"ax-sm\"\n [text]=\"definition().texts.addItem | translate | async\"\n [color]=\"'accent2'\"\n (onClick)=\"onAddItems(row.section)\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-plus\"></ax-icon>\n </ax-prefix>\n </ax-button>\n }\n @if (definition().promptEditSection || canRemoveSection()) {\n <div class=\"__section-inline-actions\">\n @if (definition().promptEditSection) {\n <ax-button\n class=\"ax-sm\"\n [look]=\"'blank'\"\n color=\"accent3\"\n (onClick)=\"onEditSection(row.section)\"\n >\n <ax-icon class=\"fa-light fa-pencil\"></ax-icon>\n </ax-button>\n }\n @if (canRemoveSection()) {\n <ax-button\n class=\"ax-sm\"\n [look]=\"'blank'\"\n color=\"danger\"\n (onClick)=\"onRemoveSection(row.section)\"\n >\n <ax-icon class=\"fa-light fa-trash-can\"></ax-icon>\n </ax-button>\n }\n </div>\n }\n </div>\n }\n </div>\n\n <div class=\"__items-container\">\n <div\n class=\"__items-list\"\n cdkDropList\n [id]=\"sectionItemsListId(row.section.id)\"\n [cdkDropListData]=\"row.section.items\"\n [cdkDropListConnectedTo]=\"itemDropListIds()\"\n (cdkDropListDropped)=\"onItemDrop($event, row.section.id)\"\n >\n @if (row.itemRows.length === 0) {\n <axp-state-message\n icon=\"fa-light fa-inbox\"\n [title]=\"definition().texts.emptyItemsTitle\"\n [description]=\"definition().texts.emptyItemsDescription\"\n >\n </axp-state-message>\n } @else {\n @for (ir of row.itemRows; track ir.item.id) {\n <div class=\"__item\" cdkDrag cdkDragPreviewClass=\"axp-section-items-builder-drag-preview\">\n @if (!readonlyMode()) {\n <div class=\"__drag-handle\" cdkDragHandle>\n <ax-icon icon=\"fa-solid fa-grip-vertical\"></ax-icon>\n </div>\n }\n <div class=\"__item-content\">\n <div\n class=\"__item-leading\"\n [title]=\"itemMultilingualField(ir.item, 'title', ir.view.title) | translate | async\"\n >\n <div\n class=\"__item-icon\"\n [class.__tone-easy]=\"ir.view.iconTone === 'easy'\"\n [class.__tone-medium]=\"ir.view.iconTone === 'medium'\"\n [class.__tone-hard]=\"ir.view.iconTone === 'hard'\"\n >\n <ax-icon [icon]=\"ir.view.icon\"></ax-icon>\n </div>\n </div>\n <div class=\"__item-info\">\n <div class=\"__item-info-body\">\n <div class=\"__title-row\">\n @let itemTitle =\n itemMultilingualField(ir.item, 'title', ir.view.title) | translate | async;\n @let itemName = itemMultilingualField(ir.item, 'name', ir.view.name) | translate | async;\n <h4\n class=\"__item-title\"\n [title]=\"itemTitle + (itemName?.trim() ? ' (' + itemName + ')' : '')\"\n >\n {{ itemTitle }}\n @if (itemName?.trim()) {\n <span class=\"__item-name-prefix\">({{ itemName }})</span>\n }\n </h4>\n </div>\n @let itemDesc =\n (itemMultilingualField(ir.item, 'description', ir.view.description)\n | translate\n | async) || '';\n @let itemDescTrimmed = itemDesc?.trim();\n @if (itemDescTrimmed) {\n @if (containsHtmlMarkup(itemDescTrimmed)) {\n <div\n class=\"__item-description __item-description--rich\"\n [title]=\"tooltipPlainTextForHtml(itemDesc)\"\n [innerHTML]=\"itemDesc | safe: 'html'\"\n ></div>\n } @else {\n <p class=\"__item-description\" [title]=\"itemDescTrimmed\">{{ itemDescTrimmed }}</p>\n }\n }\n </div>\n <div class=\"__title-actions\">\n @for (b of ir.view.badges; track $index) {\n <span\n class=\"__item-badge\"\n [class.__badge-neutral]=\"!b.variant || b.variant === 'neutral'\"\n [class.__badge-accent]=\"b.variant === 'accent'\"\n [class.__badge-warning]=\"b.variant === 'warning'\"\n [class.__badge-danger]=\"b.variant === 'danger'\"\n [class.__badge-success]=\"b.variant === 'success'\"\n >\n @if (isTranslationKey(b.text)) {\n {{ b.text | translate | async }}\n } @else {\n {{ b.text }}\n }\n </span>\n }\n @if (!readonlyMode()) {\n <div class=\"__item-actions\">\n @if (definition().promptEditItem) {\n <ax-button\n class=\"ax-sm\"\n [look]=\"'blank'\"\n color=\"accent3\"\n (onClick)=\"onEditItem(ir.item, row.section.id)\"\n >\n <ax-icon class=\"fa-light fa-pencil\"></ax-icon>\n </ax-button>\n }\n <ax-button\n [look]=\"'blank'\"\n class=\"ax-sm\"\n color=\"danger\"\n (onClick)=\"onRemoveItem(ir.item, row.section.id)\"\n >\n <ax-icon class=\"fa-light fa-trash-can\"></ax-icon>\n </ax-button>\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n }\n }\n </div>\n </div>\n </div>\n }\n </div>\n }\n </div>\n</div>\n","import type { AXPPropertyViewerTab } from '../property-viewer';\nimport {\n AXPWidgetsCatalog,\n createBooleanProperty,\n type AXPWidgetProperty,\n type AXPWidgetPropertyGroup,\n} from '@acorex/platform/layout/widget-core';\n\nconst GROUP_IDENTITY: AXPWidgetPropertyGroup = {\n name: 'identity',\n title: 'Identity',\n order: 0,\n};\n\nconst GROUP_CONTENT: AXPWidgetPropertyGroup = {\n name: 'content',\n title: 'Content',\n order: 1,\n};\n\nconst GROUP_VISIBILITY: AXPWidgetPropertyGroup = {\n name: 'visibility',\n title: 'Visibility',\n order: 2,\n};\n\nconst IDENTITY_PROPS: AXPWidgetProperty[] = [\n {\n name: 'name',\n title: '@general:terms.common.name',\n group: GROUP_IDENTITY,\n order: 10,\n schema: {\n dataType: 'string',\n defaultValue: '',\n interface: {\n name: 'name',\n path: 'name',\n type: AXPWidgetsCatalog.text,\n options: {\n placeholder: 'section-name',\n },\n },\n },\n validations: [{ rule: 'required' }, { rule: 'variable-name' }],\n visible: true,\n },\n {\n name: 'tags',\n title: '@general:terms.common.tags',\n group: GROUP_IDENTITY,\n order: 20,\n schema: {\n dataType: 'array',\n defaultValue: [],\n interface: {\n name: 'tags',\n path: 'tags',\n type: 'tag-editor',\n options: {\n placeholder: 'Add tags',\n allowDuplicate: false,\n },\n },\n },\n visible: true,\n },\n];\n\nconst CONTENT_PROPS: AXPWidgetProperty[] = [\n {\n name: 'title',\n title: '@general:terms.common.title',\n group: GROUP_CONTENT,\n order: 10,\n schema: {\n dataType: 'string',\n defaultValue: '',\n interface: {\n name: 'title',\n path: 'title',\n type: AXPWidgetsCatalog.text,\n options: {\n placeholder: 'Enter section title',\n },\n },\n },\n validations: [{ rule: 'required' }],\n visible: true,\n },\n {\n name: 'description',\n title: '@general:terms.common.description',\n group: GROUP_CONTENT,\n order: 20,\n schema: {\n dataType: 'string',\n defaultValue: '',\n interface: {\n name: 'description',\n path: 'description',\n type: AXPWidgetsCatalog.largeText,\n options: {\n rows: 3,\n placeholder: 'Enter section description (optional)',\n },\n },\n },\n visible: true,\n },\n];\n\nconst VISIBILITY_PROPS: AXPWidgetProperty[] = [\n {\n ...createBooleanProperty({\n name: 'isVisible',\n path: 'isVisible',\n title: 'Visible',\n group: GROUP_VISIBILITY,\n defaultValue: true,\n }),\n order: 10,\n },\n];\n\n/**\n * Default section editor: Identity (name, tags), Content (title, description), Visibility.\n */\nexport const STANDARD_SECTION_ITEMS_SECTION_TABS: AXPPropertyViewerTab[] = [\n {\n name: 'general',\n title: '@general:terms.common.information',\n groups: [\n {\n name: GROUP_IDENTITY.name,\n title: GROUP_IDENTITY.title,\n isCollapsed: false,\n props: IDENTITY_PROPS,\n },\n {\n name: GROUP_CONTENT.name,\n title: GROUP_CONTENT.title,\n isCollapsed: false,\n props: CONTENT_PROPS,\n },\n {\n name: GROUP_VISIBILITY.name,\n title: GROUP_VISIBILITY.title,\n isCollapsed: false,\n props: VISIBILITY_PROPS,\n },\n ],\n },\n];\n","import { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\n\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n output,\n viewChild,\n} from '@angular/core';\nimport { AXDialogService } from '@acorex/components/dialog';\nimport {\n AXPPropertyViewerService,\n type AXPPropertyViewerActionRef,\n type AXPPropertyViewerResult,\n type AXPPropertyViewerTab,\n type IAXPPropertyViewerDialogBuilder,\n} from '../property-viewer';\nimport {\n type AXPBuilderDefinition,\n type AXPBuilderItem,\n type AXPBuilderSection,\n type AXPBuilderTexts,\n type AXPBuilderValue,\n AXPSectionItemsBuilderComponent,\n} from '../section-items-builder';\nimport type { AXPMultiLanguageString } from '@acorex/platform/core';\nimport type { AXPStandardSectionFormContext, AXPStandardSectionItemsBuilderConfig } from './standard-section-items-builder.types';\nimport { STANDARD_SECTION_ITEMS_SECTION_TABS } from './standard-section-edit.property-tabs';\n\nconst DEFAULT_TEXTS: AXPBuilderTexts = {\n addSection: '@data-management:metadata-definitions.actions.add-group.title',\n addItem: '@general:actions.add-item.title',\n emptySectionsTitle:\n '@data-management:metadata-definitions.components.meta-data-selector.empty-states.no-groups.title',\n emptySectionsDescription:\n '@data-management:metadata-definitions.components.meta-data-selector.empty-states.no-groups.description',\n emptyItemsTitle:\n '@data-management:metadata-definitions.components.meta-data-selector.empty-states.empty-group.title',\n emptyItemsDescription:\n '@data-management:metadata-definitions.components.meta-data-selector.empty-states.empty-group.description',\n defaultSectionBadge:\n '@data-management:metadata-definitions.components.meta-data-selector.default-section-badge',\n};\n\n@Component({\n selector: 'axp-standard-section-items-builder',\n standalone: true,\n imports: [AXTranslationModule, AXDecoratorModule, AXPSectionItemsBuilderComponent],\n templateUrl: './standard-section-items-builder.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXPStandardSectionItemsBuilderComponent {\n readonly value = input.required<AXPBuilderValue>();\n readonly config = input.required<AXPStandardSectionItemsBuilderConfig>();\n readonly readonlyMode = input(false, { alias: 'readonly' });\n\n readonly valueChange = output<AXPBuilderValue>();\n\n private readonly inner = viewChild(AXPSectionItemsBuilderComponent);\n private readonly dialogService = inject(AXDialogService);\n private readonly translationService = inject(AXTranslationService);\n private readonly propertyViewerService = inject(AXPPropertyViewerService);\n\n protected readonly mergedDefinition = computed<AXPBuilderDefinition>(() => {\n const c = this.config();\n const tabs = c.sectionEditTabs ?? STANDARD_SECTION_ITEMS_SECTION_TABS;\n return {\n texts: { ...DEFAULT_TEXTS, ...c.texts },\n mapItemToView: c.mapItemToView,\n showSectionTechnicalName: c.showSectionTechnicalName ?? true,\n isDefaultSection: c.isDefaultSection,\n minSectionCount: c.minSectionCount ?? 1,\n promptAddSection:\n c.promptAddSection ?? ((v) => this.openSectionDialog(v, 'add', undefined, tabs)),\n promptEditSection:\n c.promptEditSection ?? ((section, v) => this.openSectionDialog(v, 'edit', section, tabs)),\n promptAddItems: c.promptAddItems,\n promptEditItem: c.promptEditItem,\n confirmRemoveSection: c.confirmRemoveSection ?? ((s) => this.defaultConfirmRemoveSection(s)),\n confirmRemoveItem: c.confirmRemoveItem ?? ((item, sid) => this.defaultConfirmRemoveItem(item, sid)),\n };\n });\n\n /** Same entry as page commands / toolbar: open standardized add-section dialog. */\n async addSection(): Promise<void> {\n await this.inner()?.addSection();\n }\n\n private isDuplicateSectionName(value: AXPBuilderValue, key: string, excludeSectionId?: string): boolean {\n const n = key.trim().toLowerCase();\n if (!n) return false;\n return value.sections.some((s) => {\n if (excludeSectionId != null && s.id === excludeSectionId) return false;\n const sk = String(s['name'] ?? '').trim().toLowerCase();\n return sk === n;\n });\n }\n\n /**\n * `AXPBuilderSection` uses `[key: string]: unknown`; cast to form-bound type without resolving ML.\n */\n private sectionFieldForForm(value: unknown): string | AXPMultiLanguageString {\n if (value === undefined || value === null) return '';\n return value as string | AXPMultiLanguageString;\n }\n\n private buildSectionContext(section: AXPBuilderSection | undefined): AXPStandardSectionFormContext {\n if (!section) {\n return {\n name: `section-${Date.now()}`,\n tags: [],\n title: '',\n description: '',\n isVisible: true,\n };\n }\n const rawName = section['name'];\n const fromName = typeof rawName === 'string' ? rawName.trim() : '';\n const fromId = typeof section['id'] === 'string' ? section['id'].trim() : '';\n return {\n name: fromName || fromId,\n tags: (section['tags'] as unknown) ?? [],\n title: this.sectionFieldForForm(section['title']),\n description: this.sectionFieldForForm(section['description']),\n isVisible: section['isVisible'] !== false,\n };\n }\n\n private async openSectionDialog(\n value: AXPBuilderValue,\n mode: 'add' | 'edit',\n section: AXPBuilderSection | undefined,\n tabs: AXPPropertyViewerTab[],\n ): Promise<Record<string, unknown> | null> {\n const addTitle =\n (await this.translationService.translateAsync('@general:actions.create.title')) || 'Add section';\n const editTitle = (await this.translationService.translateAsync('@general:actions.edit.title')) || 'Edit section';\n const dupTitle =\n (await this.translationService.translateAsync(\n '@data-management:metadata-definitions.components.meta-data-selector.dialogs.group-name-duplicate.title',\n )) || 'Duplicate key';\n const dupMessage =\n (await this.translationService.translateAsync(\n '@data-management:metadata-definitions.components.meta-data-selector.dialogs.group-name-duplicate.message',\n )) || 'Another section already uses this key.';\n\n const initial = this.buildSectionContext(section);\n const excludeId = mode === 'edit' ? section?.id : undefined;\n\n const result = await this.propertyViewerService\n .create()\n .dialog((d: IAXPPropertyViewerDialogBuilder) => {\n d.setTitle(mode === 'add' ? addTitle : editTitle)\n .setSize('md')\n .setCloseButton(true)\n .setMode('advanced')\n .setTabs(tabs)\n .setContext({\n name: initial.name ?? '',\n tags: initial.tags ?? [],\n title: initial.title ?? '',\n description: initial.description ?? '',\n isVisible: initial.isVisible !== false,\n })\n .onAction(async (ref: AXPPropertyViewerActionRef) => {\n const ctx = ref.context() as AXPStandardSectionFormContext;\n const key = (ctx.name ?? '').trim();\n if (!key) {\n throw new Error('StandardSectionValidation');\n }\n if (this.isDuplicateSectionName(value, key, excludeId)) {\n await this.dialogService.alert(dupTitle, dupMessage, 'danger');\n throw new Error('StandardSectionDuplicateKey');\n }\n });\n })\n .show();\n\n if (!result) return null;\n const ctx = (result as AXPPropertyViewerResult).values as AXPStandardSectionFormContext;\n const key = (ctx.name ?? '').trim();\n if (!key) return null;\n\n return {\n id: key,\n name: key,\n title: ctx.title ?? '',\n description: ctx.description ?? '',\n tags: ctx.tags ?? [],\n isVisible: ctx.isVisible !== false,\n };\n }\n\n private async defaultConfirmRemoveSection(_section: AXPBuilderSection): Promise<boolean> {\n const res = await this.dialogService.confirm(\n (await this.translationService.translateAsync('@data-management:metadata-definitions.actions.delete-group.title')) ||\n 'Delete section',\n (await this.translationService.translateAsync(\n '@data-management:metadata-definitions.components.meta-data-selector.dialogs.delete-group.message',\n )) || 'Remove this section and its items?',\n 'danger',\n 'horizontal',\n false,\n );\n return typeof res === 'boolean' ? res : res.result;\n }\n\n private async defaultConfirmRemoveItem(_item: AXPBuilderItem, _sectionId: string): Promise<boolean> {\n const res = await this.dialogService.confirm(\n (await this.translationService.translateAsync('@general:actions.delete.title')) || 'Delete',\n (await this.translationService.translateAsync('@general:workflow.confirm-delete')) ||\n 'Remove this item?',\n 'danger',\n 'horizontal',\n false,\n );\n return typeof res === 'boolean' ? res : res.result;\n }\n}\n","<axp-section-items-builder\n #inner\n [value]=\"value()\"\n [definition]=\"mergedDefinition()\"\n [readonly]=\"readonlyMode()\"\n (valueChange)=\"valueChange.emit($event)\"\n/>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i2","i1","i3","i4","i5","i7","i8","i6","moveItemInArray","rxFilter","i9","i10","I18N"],"mappings":"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"}
|