{"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/avatar/avatar.component.ts","../../../../libs/platform/layout/components/src/lib/avatar/avatar.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/data-table/text-command-column.component.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/signature-editor/signature-editor.types.ts","../../../../libs/platform/layout/components/src/lib/signature-editor/signature-editor.service.ts","../../../../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/item-configurator/item-configurator.component.ts","../../../../libs/platform/layout/components/src/lib/item-configurator/item-configurator.component.html","../../../../libs/platform/layout/components/src/lib/layout-floating-zoom-bar/layout-floating-zoom-bar.component.ts","../../../../libs/platform/layout/components/src/lib/layout-floating-zoom-bar/layout-floating-zoom-bar.component.html","../../../../libs/platform/layout/components/src/lib/layout-side-detail-panel/layout-side-detail-panel.types.ts","../../../../libs/platform/layout/components/src/lib/layout-side-detail-panel/layout-side-detail-panel-section.directive.ts","../../../../libs/platform/layout/components/src/lib/layout-side-detail-panel/layout-side-detail-panel.component.ts","../../../../libs/platform/layout/components/src/lib/layout-side-detail-panel/layout-side-detail-panel.component.html","../../../../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/markdown-viewer/markdown-viewer.component.ts","../../../../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/outcome-results-viewer/outcome-results-viewer.component.ts","../../../../libs/platform/layout/components/src/lib/outcome-results-viewer/outcome-results-viewer.types.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/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/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/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/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/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/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/virtual-keypad/virtual-keypad.component.ts","../../../../libs/platform/layout/components/src/lib/virtual-keypad/virtual-keypad.component.html","../../../../libs/platform/layout/components/src/lib/virtual-keypad/virtual-keypad.types.ts","../../../../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/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/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  titleParams = input<Record<string, unknown>>({});\n  descriptionParams = input<Record<string, unknown>>({});\n\n  // Optional styling\n  look = input<'default' | 'compact' | 'minimal'>('default');\n}\n\n//#endregion\n","<div class=\"axp-state-message\" [attr.data-mode]=\"mode()\" [attr.data-look]=\"look()\">\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: { params: titleParams() } | async }}</h3>\n    }\n    @if (description()) {\n    <p class=\"__description\">{{ description() | translate: { params: descriptionParams() } | async }}</p>\n    }\n    <div class=\"__actions\">\n      <ng-content select=\"[slot=actions]\"></ng-content>\n    </div>\n  </div>\n</div>","import { AXPSystemActionType, getSystemActions } from '@acorex/platform/contracts';\nimport { 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';\n\nimport { AXPActivityLog } from '@acorex/platform/core';\n\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 -->","//#region ---- Imports ----\n\nimport { ChangeDetectionStrategy, Component, computed, input, linkedSignal } 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 imageFailed = linkedSignal({\n    source: () => this.src(),\n    computation: () => false,\n  });\n\n  protected readonly normalizedName = computed(() => (this.fullName() ?? '').trim());\n  protected readonly resolvedSrc = computed(() => (this.src() ?? '').trim());\n  protected readonly hasAvatar = computed(\n    () => !isNil(this.resolvedSrc()) && !isEmpty(this.resolvedSrc()) && !this.placeholder() && !this.imageFailed(),\n  );\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.imageFailed.set(true);\n  }\n\n  protected onImageLoad(event: AXHtmlEvent<Event>): void {\n    this.imageFailed.set(false);\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  <ax-image\n    (onError)=\"onImageError($event)\"\n    (onLoad)=\"onImageLoad($event)\"\n    [src]=\"resolvedSrc()\"\n  />\n  } @else {\n  <ax-text>\n    <small class=\"ax-font-semibold\" [style.font-size]=\"size() * 0.35 + 'px'\">{{ avatarText() }}</small>\n  </ax-text>\n  }\n</ax-avatar>\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 { AXBadgeComponent } from '@acorex/components/badge';\nimport { AXPLayoutThemeService } from '@acorex/platform/themes/shared';\nimport { computed, Directive, effect, inject, input, InputSignal } from '@angular/core';\nimport { SIGNAL, signalSetFn } from '@angular/core/primitives/signals';\nimport { AXPTaskBadgeService } from './task-badge.service';\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);\n  private hostElement = this.host.getHostElement();\n  protected themeStore = inject(AXPLayoutThemeService);\n\n  badgeKey = input<string | undefined>(undefined);\n  count = input<number>(0, { alias: 'axp-task-badge' });\n\n  private readonly actualCount = computed(() => {\n    const inputCount = this.count();\n\n    if (inputCount) {\n      return inputCount;\n    }\n    const key = this.badgeKey();\n    if (!key) {\n      return 0;\n    }\n\n    return this.badgeService.getCount(key)();\n  });\n\n  private readonly badgeText = computed(() => {\n    const count = this.actualCount();\n\n    if (!count) {\n      return '';\n    }\n\n    const isCompact = this.themeStore.menuVerticalMode() === 'compact';\n\n    return isCompact ? '' : count.toString();\n  });\n\n  #eff = effect(() => {\n    const count = this.actualCount();\n\n    this.setValueOfInputSignal(this.host.text, this.badgeText());\n\n    if (!count) {\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}\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 type { AXPCategoryEntity } from '@acorex/platform/contracts';\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  protected emptyStateTitleParams = computed(() => ({ term: this.searchValue() }));\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 when the node has not been loaded yet (independent of expand event timing).\n    const hasUnloadedChildren =\n      (node.childrenCount ?? 0) > 0 && (!node.children || node.children.length === 0);\n\n    if (node.id !== 'root' && hasUnloadedChildren && 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-flex-1 ax-min-h-0 ax-min-w-0 ax-overflow-y-auto ax-overflow-x-hidden\" [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      [titleParams]=\"emptyStateTitleParams()\"\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 type { AXPCategoryEntity } from '@acorex/platform/contracts';\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/contracts';\n\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","\nimport { AXPContextData, type AXPWidgetNode } from '@acorex/platform/contracts';\nimport { 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 } from '@acorex/platform/layout/widget-core';\n\n\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    AXRowCommandItem,\n    AXRowCommandItemClickEvent,\n} from '@acorex/components/data-table';\nimport { AXPWidgetCoreModule } from '@acorex/platform/layout/widget-core';\nimport { CommonModule } from '@angular/common';\nimport {\n    ChangeDetectionStrategy,\n    Component,\n    ViewEncapsulation,\n    computed,\n    effect,\n    inject,\n    signal,\n    viewChild,\n} 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 { setupPopupFooterKeyboardShortcuts } from '@acorex/platform/core';\nimport { AXBadgeModule } from '@acorex/components/badge';\n\n// Import category tree types and component\nimport type { AXPCategoryEntity } from '@acorex/platform/contracts';\nimport { AXPCategoryTreeDataSource, AXPCategoryTreeComponent } from '../category-tree';\nimport { isEmpty, isEqual, 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 AXPDataSelectorRowActionItem {\n    name: string;\n    text: string;\n    icon?: string;\n    color?: string;\n    disabled?: boolean | string;\n    default?: boolean;\n    divided?: boolean;\n}\n\nexport interface AXPDataSelectorRowActionsHandler {\n    hasPrimary: () => boolean;\n    hasDropdown: () => boolean;\n    getPrimaryItems: () => AXPDataSelectorRowActionItem[];\n    getDropdownItems: (rowData: unknown) => Promise<AXPDataSelectorRowActionItem[]>;\n    execute: (commandName: string, rowData: unknown) => Promise<void>;\n}\n\nexport interface AXPDataSelectorSearchField {\n    name: string;\n    title: string;\n}\n\nexport interface AXPDataSelectorSelectionConfig {\n    mode?: 'single' | 'multiple';\n    selectedItemIds?: string[] | number[];\n    /** When true, Select stays enabled with no selection so the user can confirm clearing. Default: true. */\n    allowUnselect?: boolean;\n}\n\nexport interface AXPDataSelectorGridConfig {\n    columns: AXPDataSelectorColumn[];\n    parentField?: string;\n}\n\nexport interface AXPDataSelectorFilterConfig {\n    value?: AXDataSourceFilterOption;\n}\n\nexport interface AXPDataSelectorSearchConfig {\n    fields?: AXPDataSelectorSearchField[];\n    initial?: string;\n}\n\nexport interface AXPDataSelectorCategoryFilterConfig {\n    field: string;\n    operator?: 'equal' | 'contains' | 'in';\n}\n\nexport interface AXPDataSelectorCategoryConfig {\n    enabled?: boolean;\n    title: string;\n    dataSource: AXPCategoryTreeDataSource;\n    filter: AXPDataSelectorCategoryFilterConfig;\n    width?: string;\n}\n\nexport interface AXPDataSelectorCreateConfig {\n    mode?: AXPDataSelectorAllowCreate;\n    onCreate?: (mode: 'full' | 'quick') => Promise<any | null>;\n}\n\nexport interface AXPDataSelectorConfig {\n    title: string;\n    dataSource: AXDataSource<any>;\n    grid: AXPDataSelectorGridConfig;\n    selection?: AXPDataSelectorSelectionConfig;\n    filter?: AXPDataSelectorFilterConfig;\n    search?: AXPDataSelectorSearchConfig;\n    category?: AXPDataSelectorCategoryConfig;\n    create?: AXPDataSelectorCreateConfig;\n    /** Optional entity row actions (preview, edit, etc.) shown in the grid. */\n    rowActions?: AXPDataSelectorRowActionsHandler;\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    encapsulation: ViewEncapsulation.None,\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        grid: { columns: [] },\n        selection: { mode: 'single' },\n        create: { mode: 'none' },\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    /** Suppresses stale grid selection events while a single-mode row click is being applied. */\n    private rowClickSelectionSync = 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().search?.fields;\n            void this.updateSearchPlaceholder(searchFields);\n        });\n\n        effect(() => {\n            const initialTerm = this.config().search?.initial ?? '';\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        setupPopupFooterKeyboardShortcuts(\n            () => [\n                {\n                    title: '@general:actions.cancel.title',\n                    command: 'cancel',\n                    handler: () => this.handleCloseClick(),\n                },\n                {\n                    title: '@general:actions.select.title',\n                    command: 'select',\n                    disabled: () => !this.allowSelect(),\n                    handler: () => this.handleSelectClick(),\n                },\n            ],\n            { id: 'data-selector-popup' },\n        );\n    }\n\n    //#region ----   Computed Properties   ----\n\n    protected allowUnselect = computed(() => this.config().selection?.allowUnselect ?? true);\n\n    protected allowSelect = computed(() => {\n        if (this.allowUnselect()) {\n            return true;\n        }\n        return this.selectedItems().length > 0;\n    });\n\n    protected selectedCount = computed(() => this.selectedItems().length);\n\n    protected hasSearch = computed(() => {\n        const searchFields = this.config().search?.fields;\n        return searchFields && searchFields.length > 0;\n    });\n\n    protected selectionMode = computed(() => this.config().selection?.mode ?? 'single');\n\n    protected categoryEnabled = computed(() => {\n        const category = this.config().category;\n        return !!category && category.enabled !== false && !!category.dataSource;\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    protected hasRowActionPrimary = computed(() => this.config().rowActions?.hasPrimary() ?? false);\n\n    protected hasRowActionDropdown = computed(() => this.config().rowActions?.hasDropdown() ?? false);\n\n    protected primaryRowActionItems = computed(\n        () => (this.config().rowActions?.getPrimaryItems() ?? []) as AXRowCommandItem[],\n    );\n\n    protected primaryRowActionColumnWidth = computed(() => {\n        const count = this.primaryRowActionItems().length;\n        return count > 0 ? `${count * 70}px` : '60px';\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        if (!this.isSingleSelectionMode()) {\n            return;\n        }\n\n        const clicked = e.data;\n        const current = this.selectedItems();\n        const clickedKey = this.getRowKey(clicked);\n        const isAlreadySelected =\n            current.length === 1 && this.getRowKey(current[0]) === clickedKey;\n\n        const nextSelection =\n            this.allowUnselect() && isAlreadySelected ? [] : [clicked];\n\n        this.rowClickSelectionSync = true;\n        this.applySingleSelection(nextSelection, true);\n    }\n\n    protected async handleSelectedRowsChange(rows: unknown[]) {\n        if (this.rowClickSelectionSync) {\n            return;\n        }\n\n        let newSelection = (rows as any[]) || [];\n\n        if (this.isSingleSelectionMode()) {\n            const clamped = this.clampSingleSelection(newSelection);\n            if (!isEqual(clamped, newSelection) && !this.isApplyingInitialSelection) {\n                this.syncGridSingleSelection(clamped);\n            }\n            newSelection = clamped;\n        }\n\n        if (!this.isApplyingInitialSelection) {\n            this.userHasInteracted = true;\n        }\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().create?.onCreate;\n        if (!onCreate) return;\n\n        const createdItem = await onCreate(mode);\n        if (createdItem) {\n            if (this.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    protected getDropdownRowActionItems = (rowData: unknown): Promise<AXRowCommandItem[]> => {\n        const handler = this.config().rowActions;\n        if (!handler) {\n            return Promise.resolve([]);\n        }\n\n        return handler.getDropdownItems(rowData).then(\n            (items) => items as AXRowCommandItem[],\n        );\n    };\n\n    protected async handleRowActionClick(event: AXRowCommandItemClickEvent): Promise<void> {\n        event.nativeEvent.preventDefault();\n        event.nativeEvent.stopPropagation();\n        const handler = this.config().rowActions;\n        if (!handler || this.grid()?.dataSource.isLoading) {\n            return;\n        }\n\n        if (event.setLoading) {\n            event.setLoading(true);\n        }\n\n        try {\n            await handler.execute(event.name, event.data);\n        } finally {\n            if (event.setLoading) {\n                event.setLoading(false);\n            }\n        }\n    }\n\n    // Category Filter Event Handlers\n    protected handleCategoryFilterClick(node: AXPCategoryEntity) {\n        const categoryConfig = this.config().category!;\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().filter?.value;\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 getRowKey(row: unknown): string {\n        const dataSource = this.config().dataSource as { config?: { key?: string } };\n        const keyField = dataSource.config?.key ?? 'id';\n        return String((row as Record<string, unknown>)?.[keyField] ?? '');\n    }\n\n    private isSingleSelectionMode(): boolean {\n        return this.selectionMode() === 'single';\n    }\n\n    private applySingleSelection(selection: any[], force = false): void {\n        const clamped = this.clampSingleSelection(selection);\n        if (!force && isEqual(clamped, this.selectedItems())) {\n            this.clearRowClickSelectionSync();\n            return;\n        }\n\n        this.userHasInteracted = true;\n        this.selectedItems.set(clamped);\n        this.syncGridSingleSelection(clamped);\n    }\n\n    private clearRowClickSelectionSync(): void {\n        this.rowClickSelectionSync = false;\n    }\n\n    /**\n     * Keeps at most one row when single mode uses checkboxes.\n     */\n    private clampSingleSelection(newSelection: any[]): any[] {\n        if (newSelection.length <= 1) {\n            return newSelection;\n        }\n\n        const prev = this.selectedItems();\n        const prevKeys = new Set(prev.map((row) => this.getRowKey(row)));\n        const added = newSelection.filter((row) => !prevKeys.has(this.getRowKey(row)));\n\n        if (added.length > 0) {\n            return [added[added.length - 1]!];\n        }\n\n        return [newSelection[newSelection.length - 1]!];\n    }\n\n    private syncGridSingleSelection(selection: any[]): void {\n        const grid = this.grid();\n        if (!grid) {\n            this.clearRowClickSelectionSync();\n            return;\n        }\n\n        queueMicrotask(() => {\n            this.isApplyingInitialSelection = true;\n            try {\n                if (selection.length === 1 && grid.selectRows) {\n                    grid.selectRows(selection[0]);\n                } else if (selection.length === 0) {\n                    grid.selectedRows = [];\n                }\n            } finally {\n                setTimeout(() => {\n                    this.isApplyingInitialSelection = false;\n                    this.clearRowClickSelectionSync();\n                }, 0);\n            }\n        });\n    }\n\n    private applySearchFilter(searchTerm: string) {\n        const searchFields = this.config().search?.fields;\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().filter?.value;\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().filter?.value;\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().filter?.value;\n\n        if (baseFilters) {\n            this.config().dataSource.filter(baseFilters);\n            this.config().dataSource.refresh();\n        }\n    }\n\n    private applyCategoryFilter(filterValue: any, categoryConfig: AXPDataSelectorCategoryConfig) {\n\n        if (isNil(filterValue) || filterValue === 'root') {\n            const baseFilters = this.config().filter?.value;\n            if (baseFilters) {\n                this.config().dataSource.filter(baseFilters);\n            } else {\n                this.config().dataSource.clearFilter();\n            }\n            this.config().dataSource.refresh();\n            return;\n        }\n\n        // Get base filters from config\n        const baseFilters = this.config().filter?.value;\n\n        // Create category filter\n        const categoryFilter = {\n            field: categoryConfig.filter.field,\n            value: filterValue,\n            operator: { type: categoryConfig.filter.operator || '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().selection?.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            let 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            if (this.isSingleSelectionMode() && itemsToSelect.length > 1) {\n                itemsToSelect = [itemsToSelect[0]!];\n            }\n\n            // Only mark as applied if we found items to select\n            if (itemsToSelect.length > 0) {\n                this.initialSelectedItems = [...itemsToSelect];\n                this.isApplyingInitialSelection = true;\n\n                try {\n                    if (this.isSingleSelectionMode()) {\n                        this.rowClickSelectionSync = true;\n                        this.selectedItems.set(itemsToSelect);\n                        this.syncGridSingleSelection(itemsToSelect);\n                    } else {\n                        this.selectedItems.set(itemsToSelect);\n                        if (this.grid()?.selectRows) {\n                            this.grid()!.selectRows(...itemsToSelect);\n                        }\n                    }\n\n                    this.initialSelectionApplied = true;\n                } finally {\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]=\"categoryEnabled()\">\n    <!-- Category Filter Side Panel -->\n    @if (categoryEnabled()) {\n    <div class=\"axp-category-filter-panel\" [style.width]=\"config().category?.width || '300px'\">\n      <axp-category-tree [dataSource]=\"config().category!.dataSource\" [config]=\"categoryTreeConfig()\"\n        [actions]=\"categoryTreeActions()\" (nodeClick)=\"handleCategoryFilterClick($event)\">\n      </axp-category-tree>\n    </div>\n    }\n\n    <!-- Main Data Area -->\n    <div class=\"axp-main-data-area\">\n      @if (hasSearch()) {\n      <div class=\"ax-w-full ax-mb-2\">\n        <ax-search-box [placeholder]=\"searchPlaceholderText()\" [value]=\"searchTerm\"\n          (onValueChanged)=\"handleChangeSearchValue($event)\" [axAutoFocus]=\"true\">\n          <ax-clear-button></ax-clear-button>\n        </ax-search-box>\n      </div>\n      }\n      <ax-data-table #grid [showFooter]=\"false\" class=\"ax-flex-1 ax-min-h-0\" [paging]=\"true\"\n        [loading]=\"{ enabled: true, animation: true }\" [dataSource]=\"config().dataSource\"\n        [parentField]=\"config().grid.parentField\" [selectedRows]=\"selectedItems()\"\n        (selectedRowsChange)=\"handleSelectedRowsChange($event)\" (onRowClick)=\"handleRowClick($event)\"\n        (onRowDbClick)=\"handleRowDbClick($event)\">\n        <ax-select-column fixed=\"start\" [width]=\"'50px'\"></ax-select-column>\n\n        @for (col of config().grid.columns; track col.name) {\n        @if (col.visible) {\n        <axp-widget-column-renderer [expandHandler]=\"$index === 0 && config().grid.parentField ? true : false\"\n          [caption]=\"col.title | translate | async\" [customWidth]=\"col.width || ''\" [node]=\"{\n              path: col.dataPath || col.name,\n              type: col.widget.type,\n              options: col.widget.options\n            }\">\n        </axp-widget-column-renderer>\n        }\n        }\n        @if (hasRowActionPrimary()) {\n        <ax-command-column fixed=\"end\" [width]=\"primaryRowActionColumnWidth()\" [items]=\"primaryRowActionItems()\"\n          (onItemClick)=\"handleRowActionClick($event)\">\n        </ax-command-column>\n        }\n        @if (hasRowActionDropdown()) {\n        <ax-dropdown-command-column fixed=\"end\" [width]=\"'60px'\" [items]=\"getDropdownRowActionItems\"\n          (onItemClick)=\"handleRowActionClick($event)\">\n        </ax-dropdown-command-column>\n        }\n      </ax-data-table>\n    </div>\n  </div>\n</div>\n\n<ax-footer>\n  <ax-prefix>\n    @if ((config().create?.mode === 'full' || config().create?.mode === 'quick') && config().create?.onCreate) {\n    <ax-button look=\"twotone\" color=\"primary\" [text]=\"'@general:actions.create.title' | translate | async\"\n      (onClick)=\"handleCreateNewClick(config().create?.mode === 'quick' ? 'quick' : 'full')\">\n      <ax-prefix>\n        <ax-icon icon=\"far fa-plus\"></ax-icon>\n      </ax-prefix>\n    </ax-button>\n    }\n  </ax-prefix>\n  <ax-suffix>\n    <ax-button look=\"solid\" [text]=\"('@general:actions.close.title' | translate | async)!\"\n      (onClick)=\"handleCloseClick()\">\n    </ax-button>\n    <ax-button look=\"solid\" color=\"primary\" [text]=\"('@general:actions.select.title' | translate | async)!\"\n      (onClick)=\"handleSelectClick()\" [disabled]=\"allowSelect() === false\">\n      <!-- @if (selectionMode() === 'multiple' && selectedCount() > 0) {\n      <ax-badge [text]=\"selectedCount().toString()\" color=\"accent1\"\n        class=\"ax-absolute ax-end-[2px] ax-top-[2px]\"></ax-badge>\n      } -->\n    </ax-button>\n  </ax-suffix>\n</ax-footer>\n","import { Injectable, inject, signal } from '@angular/core';\nimport { AXPopupService } from '@acorex/components/popup';\nimport { AXPDataSelectorConfig, AXPDataSelectorColumn } from './data-selector.component';\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        const processedConfig = { ...config };\n\n        if (processedConfig.filter?.value) {\n            processedConfig.filter = {\n                ...processedConfig.filter,\n                value: await this.expressionService.evaluate(processedConfig.filter.value),\n            };\n        }\n\n        processedConfig.grid = {\n            ...processedConfig.grid,\n            columns: this.applyColumnWidths(processedConfig.grid.columns),\n        };\n\n        const categoryActive =\n            processedConfig.category?.enabled !== false && !!processedConfig.category?.dataSource;\n\n        const result = await this.popupService.open(component, {\n            title: processedConfig.title,\n            size: categoryActive\n                ? 'lg'\n                : (processedConfig.grid.columns.length > 3 ? 'lg' : 'md'),\n            data: {\n                config: signal(processedConfig)\n            }\n        });\n\n        return result.data || null;\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            if (column.width) {\n                return column;\n            }\n\n            const columnWithWidth: IColumnWithWidth = {\n                name: column.name,\n                width: column.width,\n                widget: {\n                    type: column.widget.type,\n                },\n            };\n\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 { AXDataTableColumnComponent } from '@acorex/components/data-table';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AsyncPipe } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  EventEmitter,\n  Input,\n  OnChanges,\n  OnInit,\n  Output,\n  TemplateRef,\n  ViewChild,\n  forwardRef,\n} from '@angular/core';\nimport { get } from 'lodash-es';\n\n//#region ----   Types   ----\n\nexport interface AXPTextCommandColumnClickEvent {\n  data: Record<string, unknown>;\n  textField: string;\n}\n\n//#endregion\n\n//#region ----   Text Command Column   ----\n\n/**\n * Data-table column that renders a field value as a clickable text link and emits a command event on click.\n */\n@Component({\n  selector: 'axp-text-command-column',\n  styleUrls: ['./text-command-column.component.scss'],\n  template: `\n    <ng-template #header>\n      <div\n        class=\"axp-widget-column-header ax-w-full ax-flex ax-items-center ax-select-none\"\n        [class.axp-widget-column-header--sortable]=\"sortEnabled\"\n        [class.axp-widget-column-header--sort-active]=\"headerSortDirection === 'asc' || headerSortDirection === 'desc'\"\n        [class.ax-gap-1]=\"!sortEnabled\"\n        (click)=\"onHeaderClick($event)\"\n      >\n        <span\n          class=\"axp-widget-column-header__caption ax-truncate\"\n          [class.axp-widget-column-header__caption--with-sort]=\"sortEnabled\"\n        >{{ caption | translate | async }}</span>\n        @if (sortEnabled) {\n          <span class=\"axp-widget-column-header__sort ax-flex ax-items-center ax-gap-0.5 ax-shrink-0\">\n            @if (headerSortPriority !== undefined && headerSortPriority > 1) {\n              <span class=\"axp-widget-column-header__sort-priority ax-text-xs ax-opacity-70\">{{ headerSortPriority }}</span>\n            }\n            <i\n              class=\"fa-solid fa-arrow-up-long ax-text-neutral-400\"\n              [class.ax-text-primary]=\"headerSortDirection === 'asc'\"\n            ></i>\n            <i\n              class=\"fa-solid fa-arrow-down-long ax-text-neutral-400\"\n              [class.ax-text-primary]=\"headerSortDirection === 'desc'\"\n            ></i>\n          </span>\n        }\n      </div>\n    </ng-template>\n    <ng-template #cell let-row>\n      @if (resolveLabel(row.data); as label) {\n        <span\n          class=\"ax-text-primary ax-cursor-pointer hover:ax-underline\"\n          [class.ax-opacity-50]=\"disabled\"\n          [class.ax-pointer-events-none]=\"disabled\"\n          (click)=\"handleClick(row.data)\"\n        >{{ label | translate | async }}</span>\n      } @else {\n        <span class=\"ax-text-muted\">{{ emptyDisplay }}</span>\n      }\n    </ng-template>\n    <ng-template #footer></ng-template>\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [AXTranslationModule, AsyncPipe],\n  providers: [\n    {\n      provide: AXDataTableColumnComponent,\n      useExisting: forwardRef(() => AXPTextCommandColumnComponent),\n    },\n  ],\n})\nexport class AXPTextCommandColumnComponent extends AXDataTableColumnComponent implements OnInit, OnChanges {\n  @Input({ required: true }) override caption = '';\n\n  /** Row field path used to resolve the link label. */\n  @Input({ required: true }) textField = '';\n\n  @Input() customWidth?: string;\n\n  @Input() columnFixed?: 'start' | 'end';\n\n  @Input() footerTemplate?: TemplateRef<unknown>;\n\n  @Input() sortEnabled = false;\n\n  @Input() headerSortDirection?: 'asc' | 'desc';\n\n  @Input() headerSortPriority?: number;\n\n  @Input() disabled = false;\n\n  @Input() emptyDisplay = '---';\n\n  @Output() readonly commandClick = new EventEmitter<AXPTextCommandColumnClickEvent>();\n\n  @Output() readonly sortToggle = new EventEmitter<MouseEvent>();\n\n  @ViewChild('header', { static: true }) headerTemplate!: TemplateRef<unknown>;\n\n  @ViewChild('cell', { static: true }) cellTemplate!: TemplateRef<unknown>;\n\n  @ViewChild('footer', { static: true }) private contentFooterTemplate!: TemplateRef<unknown>;\n\n  override get loadingEnabled(): boolean {\n    return false;\n  }\n\n  override get name(): string {\n    return `col-${this.textField}`;\n  }\n\n  get renderFooterTemplate(): TemplateRef<unknown> {\n    return this.footerTemplate ?? this.contentFooterTemplate;\n  }\n\n  get renderHeaderTemplate(): TemplateRef<unknown> {\n    return this.headerTemplate;\n  }\n\n  get renderCellTemplate(): TemplateRef<unknown> {\n    return this.cellTemplate;\n  }\n\n  ngOnInit(): void {\n    this.syncColumnState();\n  }\n\n  ngOnChanges(): void {\n    this.syncColumnState();\n  }\n\n  protected resolveLabel(rowData: Record<string, unknown>): string | null {\n    const value = get(rowData, this.textField);\n    if (value == null || value === '') {\n      return null;\n    }\n\n    return String(value);\n  }\n\n  protected handleClick(rowData: Record<string, unknown>): void {\n    if (this.disabled) {\n      return;\n    }\n\n    this.commandClick.emit({\n      data: rowData,\n      textField: this.textField,\n    });\n  }\n\n  protected onHeaderClick(event: MouseEvent): void {\n    if (!this.sortEnabled) {\n      return;\n    }\n\n    event.stopPropagation();\n    this.sortToggle.emit(event);\n  }\n\n  private syncColumnState(): void {\n    this.allowSorting = this.sortEnabled;\n    this.sortOrder = this.headerSortDirection;\n    this.sortIndex = this.headerSortPriority;\n    this.fixed = this.columnFixed;\n\n    if (this.customWidth) {\n      this.width = this.customWidth;\n    }\n  }\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, type AXPWidgetNode } from '@acorex/platform/contracts';\n\nimport { AXPWidgetCoreModule } 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/contracts';\n\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","\nimport { type AXPContextChangeEvent, AXPFilterDefinition, AXPFilterQuery, AXPKeyboardShortcutPriority, type AXPMultiLanguageString } from '@acorex/platform/contracts';\nimport { 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 { AXKBDComponent, AXKBDItemComponent } from '@acorex/components/kbd';\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';\n\nimport type { AXPExpressionEvaluatorScope } from '@acorex/platform/core';\n\nimport { AXPExpressionEvaluatorService, AXPKeyboardShortcutRegistry, AXPDataSourceQueryService, chordToKbdItemKeys } from '@acorex/platform/core';\nimport { resolveEntityListFilterContextField, resolveEntityListFilterQueryField } from '@acorex/platform/layout/entity-contracts';\nimport {\n  AXPWidgetContainerComponent,\n  AXPWidgetCoreModule,\n  AXPWidgetRendererDirective,\n} from '@acorex/platform/layout/widget-core';\nimport { CommonModule } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  DestroyRef,\n  ElementRef,\n  effect,\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 { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { cloneDeep, get, isEqual, isNil, isPlainObject, isString } 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    AXKBDComponent,\n    AXKBDItemComponent,\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  private readonly shortcutRegistry = inject(AXPKeyboardShortcutRegistry);\n  private readonly destroyRef = inject(DestroyRef);\n  private readonly elementRef = inject(ElementRef<HTMLElement>);\n  private readonly dataSourceQueryService = inject(AXPDataSourceQueryService);\n\n  protected readonly filterFocusShortcutKeys = chordToKbdItemKeys('ctrl+f');\n\n  constructor() {\n    this.shortcutRegistry.register({\n      owner: this.destroyRef,\n      elementRef: this.elementRef,\n      id: 'query-filters',\n      priority: AXPKeyboardShortcutPriority.Page,\n      group: '@general:keyboard-shortcuts.groups.filters',\n      when: () => this.filtersDefinitions().length > 0,\n      shortcuts: [\n        {\n          keys: ['ctrl+f'],\n          title: '@general:keyboard-shortcuts.actions.focus-filters',\n          allowInEditableFields: true,\n          handler: () => {\n            this.tagBox()?.focus();\n          },\n        },\n      ],\n    });\n\n    this.translate.langChanges$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n      this.translationEpoch.update((epoch) => epoch + 1);\n    });\n  }\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 widgetsContainer = viewChild(AXPWidgetContainerComponent);\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  /** Committed context entry for the filter being edited; restored when popover closes without Apply. */\n  private editingContextSnapshot: { contextField: string; entry: unknown } | null = null;\n\n  /** Bumped on locale change so filter chip labels re-resolve i18n keys. */\n  private translationEpoch = signal(0);\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 ===\n                (this.context()[this.resolveFilterContextField(sf)]?.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 rawDataSource = filter.widget.options?.['dataSource'];\n      const textField = filter.widget.options?.['textField'] ?? 'title';\n      const valueField = filter.widget.options?.['valueField'] ?? 'id';\n\n      if (typeof rawDataSource === 'string') {\n        const found = await this.dataSourceQueryService.queryByKey(rawDataSource, val, {\n          valueField,\n        });\n        if (Array.isArray(found)) {\n          return found.map((data) => String(get(data as Record<string, unknown>, textField) ?? '')).join(', ');\n        }\n        if (found) {\n          return String(get(found as Record<string, unknown>, textField) ?? val);\n        }\n        return String(val ?? '');\n      }\n\n      const dataSource: AXDataSource = rawDataSource as AXDataSource;\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      if (q.field === 'all') {\n        return {\n          field: 'all',\n          title: 'All',\n          operator: q.operator ?? { type: 'contains' },\n          value: q.value,\n          widget: { type: 'text-box' },\n          filterType: { inline: true, advance: false },\n          hidden: q.hidden,\n        };\n      }\n\n      const definition = definitions.find((p) => p.field === q.field);\n      const readOnly = (q as { readOnly?: boolean }).readOnly === true;\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        ...(readOnly ? { readOnly: true } : {}),\n      };\n    });\n  }\n\n  convertQueriesToContext(queries: AXPFilterQuery[]): any {\n    return queries.reduce((acc, q) => {\n      const definition = this.filtersDefinitions().find((p) => p.field === q.field);\n      const contextField = this.resolveFilterContextField(definition ?? { field: q.field });\n      acc[contextField] = { 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.prepareNewFilterContext(field);\n    this.captureEditingContextSnapshot(field);\n    this.activeFilter.set(field);\n    this.tagBox()?.inputValue.set('');\n  }\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        const contextField = this.resolveFilterContextField(field);\n        this.context.update((prev) => {\n          return {\n            ...prev,\n            [contextField]: {\n              value: this.tagBoxInput?.value,\n              operation: { type: 'contains' },\n            },\n          };\n        });\n        this.syncWidgetsContainerContext(this.context());\n      }\n    }\n  }\n\n  onContextChanged(e: AXPContextChangeEvent) {\n    if (isEqual(e.data, this.context())) {\n      return;\n    }\n\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 contextField = this.resolveFilterContextField(reservedFitler);\n      const selectedFiltersFields = this.selectedFilters().map((f) => f.field);\n      const context = this.getWidgetsContext();\n      const appliedEntry = context[contextField] as\n        | { value?: unknown; operation?: { type?: string }; displayText?: unknown }\n        | undefined;\n      const appliedValue =\n        appliedEntry != null && typeof appliedEntry === 'object' && 'value' in appliedEntry\n          ? appliedEntry.value\n          : appliedEntry;\n      const appliedOperator = (appliedEntry?.operation ?? reservedFitler.operator) as AXPFilterDefinition['operator'];\n\n      if (selectedFiltersFields.includes(field)) {\n        this.selectedFilters.update((prev) =>\n          prev.map((f) =>\n            f.field === field ? { ...f, value: appliedValue, operator: appliedOperator } : f,\n          ),\n        );\n      } else {\n        this.selectedFilters.update((prev) => [\n          ...prev,\n          { ...reservedFitler, value: appliedValue, operator: appliedOperator },\n        ]);\n      }\n      this.editingContextSnapshot = null;\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.syncWidgetsContainerContext(this.context());\n    this.captureEditingContextSnapshot(item);\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        const contextField = this.resolveFilterContextField(f);\n        const operator = context[contextField]?.operation ?? f.operator;\n        convertedFilters.push({\n          field: this.resolveFilterQueryField(f, operator),\n          value: context[contextField]?.value ?? f.value,\n          hidden: f.hidden,\n          operator,\n          displayText: context[contextField]?.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: this.resolveFilterQueryField(f, { type: 'contains' }),\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        const contextField = this.resolveFilterContextField(f);\n        newContext[contextField] = {\n          value: context[contextField]?.value ?? f.value,\n          operation: context[contextField]?.operation || f.operator,\n          displayText: context[contextField]?.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.syncWidgetsContainerContext(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  /**\n   * Maps filter definition to the storage query field.\n   * Inline `contains` filters on lookup/select use `inlineQueryField` (display text path).\n   */\n  private resolveFilterQueryField(filter: AXPFilterDefinition, operator?: { type?: string }): string | undefined {\n    return resolveEntityListFilterQueryField(filter, operator);\n  }\n\n  /**\n   * Flat context key for widget binding (avoids lodash nested paths when `field` contains dots).\n   */\n  protected resolveFilterContextField(\n    filter: Pick<AXPFilterDefinition, 'field'> & { contextField?: string },\n  ): string {\n    return resolveEntityListFilterContextField(filter);\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()?.[this.resolveFilterContextField(filter!)]?.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.restoreEditingContextSnapshot();\n    this.activeFilter.set(null);\n    this.syncWidgetsContainerContext(this.context());\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    const editingField = this.activeFilter()?.field;\n    void this.translationEpoch();\n\n    Promise.all(filters.map((filter) => this.buildFilterTag(filter, context, editingField))).then((results) => {\n      this.asyncTags.set(results.filter((r) => !r.hidden));\n    });\n  });\n\n  /**\n   * Builds a single chip. Never rejects: definitions coming from backend data (e.g. document metadata\n   * fields) can carry unexpected title/value shapes, and one failure used to leave every chip unrendered.\n   */\n  private async buildFilterTag(\n    filter: AXPFilterDefinition,\n    context: Record<string, any>,\n    editingField?: string,\n  ): Promise<AXPFilterDefinition & { readOnly: boolean; query: string }> {\n    const readOnly =\n      (filter as { readOnly?: boolean }).readOnly === true || filter.widget?.options?.['readonly'] === true;\n\n    try {\n      const committedEntry = this.getCommittedFilterEntry(filter, context, editingField);\n      const val = committedEntry?.value ?? filter.value;\n      const displayText = committedEntry?.displayText;\n\n      const rawDisplay =\n        displayText != null && displayText !== '' ? displayText : await this.getDisplayValue(filter, val);\n      const displayValue = await this.formatFilterDisplayValue(rawDisplay);\n      const operatorType = committedEntry?.operation?.type ?? filter.operator?.type;\n      const operatorKey = ALL_DEFAULT_OPERATORS.find((o) => o.name === operatorType)?.title;\n      const title = await this.translateLabel(filter.title);\n      const operator = operatorKey ? await this.translateLabel(operatorKey) : '';\n      return {\n        ...filter,\n        readOnly,\n        query: `${title} ${operator} '${displayValue}'`.trim(),\n      };\n    } catch {\n      return { ...filter, readOnly, query: isString(filter.title) ? filter.title.trim() : '' };\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  /**\n   * Resolves filter chip labels; translates i18n keys stored in select `displayText` or datasource titles.\n   */\n  private async formatFilterDisplayValue(value: unknown): Promise<string> {\n    if (value == null || value === '') {\n      return '';\n    }\n\n    const parts = Array.isArray(value) ? value : [value];\n    const labels = await Promise.all(parts.map((part) => this.translateLabel(part)));\n\n    return labels.filter(Boolean).join(', ');\n  }\n\n  /**\n   * Resolves a label that may be an i18n key, a plain string, or a multi-language object\n   * (filter definitions built from backend data are not guaranteed to be plain strings).\n   */\n  private async translateLabel(text: unknown): Promise<string> {\n    if (isNil(text)) {\n      return '';\n    }\n    const resolved = isString(text)\n      ? text\n      : isPlainObject(text)\n        ? this.translate.resolve(text as AXPMultiLanguageString)\n        : String(text);\n    const trimmed = isString(resolved) ? resolved.trim() : '';\n    if (!trimmed) {\n      return '';\n    }\n    if (trimmed.startsWith('@')) {\n      return (await this.translate.translateAsync(trimmed)) || trimmed;\n    }\n    return trimmed;\n  }\n\n  /**\n   * Clears stale widget-store state when adding a filter from the advance list.\n   */\n  private prepareNewFilterContext(filter: AXPFilterDefinition): void {\n    const contextField = this.resolveFilterContextField(filter);\n\n    this.context.update((prev) => {\n      if (!(contextField in prev)) {\n        return prev;\n      }\n\n      const next = { ...prev };\n      delete next[contextField];\n      return next;\n    });\n    this.syncWidgetsContainerContext(this.context());\n  }\n\n  /**\n   * Forces the widgets container to accept external filter context (bypasses dirty sync guard).\n   * Does not await widget settle — safe before the filter widget is mounted.\n   */\n  private syncWidgetsContainerContext(context: Record<string, unknown>): void {\n    const container = this.widgetsContainer();\n    if (!container) {\n      return;\n    }\n\n    const next = cloneDeep(context);\n    if (isEqual(container.contextService.data(), next)) {\n      return;\n    }\n\n    if (!this.activeFilter()) {\n      container.builderService.clearWidgets();\n    }\n\n    container.contextService.set(next);\n    container.contextService.commitSaved();\n  }\n\n  /** Live context from the widgets container (source of truth while a filter widget is open). */\n  private getWidgetsContext(): Record<string, unknown> {\n    const containerData = this.widgetsContainer()?.contextService.data();\n    if (containerData) {\n      return containerData as Record<string, unknown>;\n    }\n\n    return this.context() as Record<string, unknown>;\n  }\n\n  private captureEditingContextSnapshot(filter: AXPFilterDefinition): void {\n    const contextField = this.resolveFilterContextField(filter);\n    const context = this.context();\n    this.editingContextSnapshot = {\n      contextField,\n      entry: cloneDeep(context[contextField]),\n    };\n  }\n\n  private restoreEditingContextSnapshot(): void {\n    const snapshot = this.editingContextSnapshot;\n    if (!snapshot) {\n      return;\n    }\n\n    const { contextField, entry } = snapshot;\n    this.context.update((prev) => ({\n      ...prev,\n      [contextField]: cloneDeep(entry),\n    }));\n    this.editingContextSnapshot = null;\n  }\n\n  /**\n   * Returns the committed filter context entry (snapshot while editing, live context otherwise).\n   */\n  private getCommittedFilterEntry(\n    filter: AXPFilterDefinition,\n    context: Record<string, unknown>,\n    editingField?: string,\n  ): { value?: unknown; operation?: { type?: string }; displayText?: unknown } | undefined {\n    const contextField = this.resolveFilterContextField(filter);\n    const snapshot = this.editingContextSnapshot;\n\n    if (editingField === filter.field && snapshot?.contextField === contextField) {\n      return snapshot.entry as { value?: unknown; operation?: { type?: string }; displayText?: unknown };\n    }\n\n    return context[contextField] as { value?: unknown; operation?: { type?: string }; displayText?: unknown };\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 paths = args.filter((arg): arg is string => typeof arg === 'string' && arg.trim().length > 0);\n        return this.filterContextPath$.pipe(\n          rxFilter((e) => {\n            if (paths.length === 0) {\n              return true;\n            }\n            if (!e.path) {\n              return false;\n            }\n            return paths.some((path) => {\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          }),\n        ) as Observable<unknown>;\n      },\n    };\n  }\n\n  private getFilterWidgetScopeForDefinition(def: AXPFilterDefinition): { [name: string]: (...args: unknown[]) => unknown } {\n    const field = def.field!;\n    const contextField = this.resolveFilterContextField(def);\n    return {\n      call: () => undefined,\n      setValue: (...args: unknown[]) => {\n        const value = args[0];\n        this.context.update((prev) => ({\n          ...prev,\n          [contextField]: { ...(prev[contextField] 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  //#endregion\n}\n","<div class=\"ax-flex ax-items-center ax-gap-2 ax-p-2\" (keydown.control.space)=\"popover.open()\">\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 #tagBoxComponent [ngModel]=\"asyncTags()\" (onValueChanged)=\"handleSelectFilters($event)\"\n    [textField]=\"'query'\" [valueField]=\"'id'\" [readonly]=\"filtersDefinitions().length === 0\" [look]=\"'none'\"\n    [readonlyField]=\"'readOnly'\" [tagTemplate]=\"tagTemplate\" (onKeyDown)=\"handleKeyDown($event)\" [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    \" #tagBox>\n    <ax-suffix class=\"ax-hidden ax-shrink-0 ax-whitespace-nowrap md:ax-block ax-text-gray-500\">\n      <ax-kbd class=\"look-text\">\n        <ax-kbd-item [keys]=\"filterFocusShortcutKeys\"></ax-kbd-item>\n      </ax-kbd>\n    </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'\" [class.!ax-text-white]=\"item.field === 'all'\"\n      (click)=\"handleTagClick(item)\">\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 [offsetY]=\"activeFilter() ? -30 : 0\" [target]=\"tagBoxInput\" [openOn]=\"'toggle'\"\n  (onOpened)=\"onPopoverOpened($event)\" [closeOn]=\"'clickOut'\" (onClosed)=\"handlePopoverClosed($event)\"\n  [adaptivityEnabled]=\"true\" #popover>\n  <div class=\"md:ax-min-w-72 ax-w-full ax-rounded-md md:ax-max-h-96 lg:ax-w-[450px] md:ax-overflow-auto\">\n    <axp-widgets-container #widgetsContainer [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 #widgetRenderer=\"widgetRenderer\" axp-widget-renderer [node]=\"{\n                type: activeFilter()?.widget?.type || 'text-editor',\n                path: resolveFilterContextField(activeFilter()!),\n                options: activeFilter()?.widget?.options,\n              }\" [mode]=\"'edit'\">\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 class=\"ax-xs\" [text]=\"'@general:actions.apply.title' | translate | async\"\n            (onClick)=\"handleApplyFilter()\"></ax-button>\n        </ax-footer>\n      </div>\n      } @else {\n      <div axListNavigation #list=\"axListNavigation\" class=\"axp-list-items ax-border-none\">\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 axListNavigationItem #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\" (click)=\"handleSelectField(field)\"\n          (keydown)=\"handleFieldKeyDown($event, field)\">\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>","import { AXPContextChangeEvent, AXPFilterDefinition } from '@acorex/platform/contracts';\nimport { 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';\n\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 { setupPopupFooterKeyboardShortcuts } from '@acorex/platform/core';\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 #container [look]=\"look()\" (onValueChanged)=\"handleValueChanged($event)\">\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  constructor() {\n    super();\n    setupPopupFooterKeyboardShortcuts(\n      () => [\n        {\n          title: '@general:actions.cancel.title',\n          command: 'cancel',\n          handler: () => this.handleCancel(),\n        },\n        {\n          title: '@general:actions.save.title',\n          command: 'submit',\n          handler: () => this.handleSave(),\n        },\n      ],\n      { id: 'image-editor-popup' },\n    );\n  }\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","//#region ---- Signature editor types ----\n\nexport type AXPSignatureEditorAction = 'apply' | 'cancel';\n\nexport interface AXPSignatureEditorOpenOptions {\n  /** Dialog title i18n key or plain text. */\n  title?: string;\n  value?: string | null;\n  disabled?: boolean;\n  /** Footer primary action label (defaults to Apply). */\n  submitActionKey?: string;\n}\n\nexport interface AXPSignatureEditorResult {\n  action: AXPSignatureEditorAction;\n  value: string | null;\n}\n\n//#endregion\n","import { AXPLayoutBuilderService } from '@acorex/platform/layout/builder';\nimport { inject, Injectable } from '@angular/core';\nimport { isString } from 'lodash-es';\n\nimport {\n  AXPSignatureEditorAction,\n  AXPSignatureEditorOpenOptions,\n  AXPSignatureEditorResult,\n} from './signature-editor.types';\n\n//#region ---- Constants ----\n\nconst SIGNATURE_WIDGET_NAME = 'signature';\n\n//#endregion\n\n//#region ---- Signature editor service ----\n\n/**\n * Opens the shared signature capture dialog (paint pad, Clear, and Save/Apply).\n * Clear resets the canvas; the primary action persists the current pad (empty removes the signature).\n */\n@Injectable({ providedIn: 'root' })\nexport class AXPSignatureEditorService {\n  //#region ---- Services & Dependencies ----\n\n  private readonly layoutBuilder = inject(AXPLayoutBuilderService);\n\n  //#endregion\n\n  //#region ---- Public API ----\n\n  async open(options: AXPSignatureEditorOpenOptions = {}): Promise<AXPSignatureEditorResult> {\n    const initialValue = options.value ?? null;\n    const disabled = options.disabled ?? false;\n\n    const ref = await this.layoutBuilder\n      .create()\n      .dialog((dialog) => {\n        dialog\n          .setTitle(options.title ?? '@platform-layout-widgets:widgets.signature.title')\n          .setSize('sm')\n          .setCloseButton(true)\n          .setContext({ value: initialValue })\n          .content((content) => {\n            content\n              .setDirection('column')\n              .setGap('16px')\n              .setAlignItems('stretch')\n              .customWidget(SIGNATURE_WIDGET_NAME, {\n                name: SIGNATURE_WIDGET_NAME,\n                path: 'value',\n                disabled,\n                showOverlay: false,\n                editMode: true,\n              });\n          })\n          .setActions((actions) => {\n            actions.cancel('@general:actions.cancel.title');\n            actions.custom({\n              title: '@general:actions.clear.title',\n              icon: 'fa-light fa-eraser',\n              disabled: '{{ !context.value }}',\n              command: { name: 'widget:signature.clear' },\n              position: 'prefix',\n            });\n            actions.submit(options.submitActionKey ?? '@general:actions.apply.title');\n          });\n      })\n      .show();\n\n    const action = this.resolveAction(ref.action());\n    const context = ref.context() ?? {};\n\n    if (action === 'apply') {\n      const newValue = context.value as string | null | undefined;\n      const value = this.resolveAppliedValue(newValue, initialValue);\n      ref.close();\n      return { action: 'apply', value };\n    }\n\n    ref.close();\n    return { action: 'cancel', value: initialValue };\n  }\n\n  //#endregion\n\n  //#region ---- Utility Methods ----\n\n  private resolveAction(action: string | undefined): AXPSignatureEditorAction {\n    if (action === 'submit' || action === 'signature-apply') {\n      return 'apply';\n    }\n\n    return 'cancel';\n  }\n\n  private resolveAppliedValue(newValue: unknown, initialValue: string | null): string | null {\n    if (newValue === null || newValue === '') {\n      return null;\n    }\n\n    if (isString(newValue)) {\n      return newValue;\n    }\n\n    return initialValue;\n  }\n\n  //#endregion\n}\n\n//#endregion\n","import { AXPWidgetProperty } from '@acorex/platform/layout/widget-core-contracts';\nimport type { AXPWidgetNode } from '@acorex/platform/contracts';\nimport { withDefaultMultiLanguageOnWidgetProperty } from '@acorex/platform/common';\n\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-contracts';\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 { AXPContextChangeEvent, AXPContextData, type AXPWidgetNode } from '@acorex/platform/contracts';\nimport { AXPWidgetProperty } from '@acorex/platform/layout/widget-core-contracts';\n\nimport { 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 { AXPWidgetCoreModule } from '@acorex/platform/layout/widget-core';\nimport { AXTranslationModule } from '@acorex/core/translation';\n\nimport { AXPExpressionEvaluatorScope, AXPExpressionEvaluatorService } 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 { setupPopupFooterKeyboardShortcuts } from '@acorex/platform/core';\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    /** Optional hook from `data.onChange`; fires on each user edit while the dialog is open. */\n    onChange?: (event: AXPPropertyViewerChangedEvent) => void;\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        setupPopupFooterKeyboardShortcuts(\n            () => [\n                {\n                    title: '@general:actions.cancel.title',\n                    command: 'cancel',\n                    handler: () => this.handleCloseClick(),\n                },\n                {\n                    title: '@general:actions.save.title',\n                    command: 'submit',\n                    disabled: () => this.isApplying(),\n                    handler: () => this.handleApplyClick(),\n                },\n            ],\n            { id: 'property-viewer-popup' },\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        if (event.mode === 'update') {\n            this.onChange?.(event);\n        }\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    AXPPropertyViewerChangedEvent,\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    /** Fires on each property edit while the dialog is open (not on init). */\n    onChange(handler: (event: AXPPropertyViewerChangedEvent) => void): 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    private onChangeHandler?: (event: AXPPropertyViewerChangedEvent) => 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    onChange(handler: (event: AXPPropertyViewerChangedEvent) => void): IAXPPropertyViewerDialogBuilder<T> {\n        this.onChangeHandler = 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                onChange: this.onChangeHandler,\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 { type AXPActionMenuItem, type AXPMultiLanguageString, compareMultiLanguageStrings } from '@acorex/platform/contracts';\nimport { resolveSearchableText } from '@acorex/platform/common';\nimport type { AXPWidgetProperty } from '@acorex/platform/layout/widget-core-contracts';\nimport { 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';\n\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 locale = this.translationService.getActiveLang();\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 = resolveSearchableText(row.title, locale, this.translationService).trim() || id;\n      list.push({\n        value: id,\n        text: title,\n        icon: row.icon,\n        description:\n          row.description != null\n            ? resolveSearchableText(row.description, locale, this.translationService)\n            : undefined,\n      });\n    }\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 valuesSnapshot = cloneDeep(this.values());\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          .onChange((event) => {\n            if (event.mode !== 'update' || !event.values || typeof event.values !== 'object') {\n              return;\n            }\n            const optsPatch = extractOptionsPatchFromPropertyViewerValues(\n              event.values as Record<string, unknown>,\n            );\n            this.values.set(merge({}, cloneDeep(valuesSnapshot), cloneDeep(optsPatch)));\n          });\n      })\n      .show()) as AXPPropertyViewerResult | null;\n\n    if (result?.values && typeof result.values === 'object') {\n      const optsPatch = extractOptionsPatchFromPropertyViewerValues(result.values as Record<string, unknown>);\n      this.values.set(merge({}, cloneDeep(valuesSnapshot), cloneDeep(optsPatch)));\n      return;\n    }\n\n    this.values.set(cloneDeep(valuesSnapshot));\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\nfunction extractOptionsPatchFromPropertyViewerValues(\n  values: Record<string, unknown>,\n): Record<string, unknown> {\n  const nested = values['options'];\n  if (nested !== undefined && typeof nested === 'object' && !Array.isArray(nested)) {\n    return nested as Record<string, unknown>;\n  }\n  return values;\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      [itemHeight]=\"72\" [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 | translate | async }}\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 [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  </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-flex-col ax-gap-1 ax-flex-1 ax-min-w-0\">\n        <div class=\"ax-text-sm ax-font-medium\">\n          {{ item.text | translate | async }}\n        </div>\n        @if (item.description) {\n        <div class=\"ax-text-xs ax-text-neutral-600\">\n          {{ item.description | translate | async }}\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 | translate | async }}\n      </span>\n    </div>\n  </ng-template>\n</div>","//#region ---- Imports ----\n\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, input, output, ViewEncapsulation } from '@angular/core';\n\n//#endregion\n\n//#region ---- Component ----\n\n/**\n * Floating zoom controls for canvas-style views (org chart, workflow designer, etc.).\n * Parent container should be `position: relative` so the bar anchors to the bottom-end.\n */\n@Component({\n  selector: 'axp-layout-floating-zoom-bar',\n  templateUrl: './layout-floating-zoom-bar.component.html',\n  styleUrl: './layout-floating-zoom-bar.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n  imports: [CommonModule, AXButtonModule, AXDecoratorModule],\n})\nexport class AXPLayoutFloatingZoomBarComponent {\n  //#region ---- Inputs ----\n\n  /** Zoom level as a percentage (e.g. 100 for 100%). */\n  readonly zoomLevel = input(100);\n\n  //#endregion\n\n  //#region ---- Outputs ----\n\n  readonly zoomIn = output<void>();\n  readonly zoomOut = output<void>();\n  readonly zoomReset = output<void>();\n\n  //#endregion\n\n  //#region ---- Computed ----\n\n  protected readonly zoomLabel = computed(() => `${Math.round(this.zoomLevel())}%`);\n\n  //#endregion\n\n  //#region ---- UI Handlers ----\n\n  protected onZoomIn(): void {\n    this.zoomIn.emit();\n  }\n\n  protected onZoomOut(): void {\n    this.zoomOut.emit();\n  }\n\n  protected onZoomReset(): void {\n    this.zoomReset.emit();\n  }\n\n  //#endregion\n}\n\n//#endregion\n","<div class=\"axp-layout-floating-zoom-bar\">\n  <ax-button look=\"blank\" class=\"ax-sm __zoom-button\" (onClick)=\"onZoomOut()\">\n    <ax-icon class=\"fa-solid fa-minus\"></ax-icon>\n  </ax-button>\n  <ax-button look=\"blank\" class=\"ax-sm __zoom-value\" [text]=\"zoomLabel()\" (onClick)=\"onZoomReset()\"></ax-button>\n  <ax-button look=\"blank\" class=\"ax-sm __zoom-button\" (onClick)=\"onZoomIn()\">\n    <ax-icon class=\"fa-solid fa-plus\"></ax-icon>\n  </ax-button>\n</div>\n","//#region ---- Header ----\n\n/** Leading icon chip in the panel header (optional). */\nexport interface AXPLayoutSideDetailPanelHeaderIcon {\n  /** Full class list for the `<i>` element (e.g. `fa-solid fa-lg fa-fw fa-sitemap`). */\n  iconClass: string;\n  /** CSS custom properties for icon color (e.g. `--node-bg-color`). */\n  surfaceVars?: Record<string, string>;\n  /** When true, renders the shortcut overlay glyph (document explorer). */\n  shortcut?: boolean;\n}\n\nexport interface AXPLayoutSideDetailPanelHeader {\n  primaryTitle: string;\n  secondaryTitle?: string;\n  icon?: AXPLayoutSideDetailPanelHeaderIcon;\n}\n\n//#endregion\n\n//#region ---- Empty state ----\n\n/** Shown when nothing is selected; copy is supplied by the parent. */\nexport interface AXPLayoutSideDetailPanelEmptyState {\n  primaryTitle: string;\n  message: string;\n  icon?: AXPLayoutSideDetailPanelHeaderIcon;\n}\n\n//#endregion\n\n//#region ---- Rows & sections ----\n\nexport type AXPLayoutSideDetailPanelRowFormat = 'datetime' | 'date' | 'filesize' | 'number' | 'string';\n\nexport interface AXPLayoutSideDetailPanelRow {\n  label: string;\n  value: string | number | Date | null | undefined;\n  format?: AXPLayoutSideDetailPanelRowFormat;\n}\n\nexport interface AXPLayoutSideDetailPanelSection {\n  /** Section heading; omit for a flat block of rows. */\n  title?: string;\n  rows?: AXPLayoutSideDetailPanelRow[];\n  /**\n   * Renders projected content from `[axpLayoutSideDetailPanelSection=\"<key>\"]` instead of rows\n   * (e.g. document metadata widget).\n   */\n  projectionKey?: string;\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { Directive, inject, input, TemplateRef } from '@angular/core';\n\n//#endregion\n\n//#region ---- Directive ----\n\n/** Projects custom section body into {@link AXPLayoutSideDetailPanelComponent} by `projectionKey`. */\n@Directive({\n  selector: '[axpLayoutSideDetailPanelSection]',\n})\nexport class AXPLayoutSideDetailPanelSectionDirective {\n  readonly key = input.required<string>({ alias: 'axpLayoutSideDetailPanelSection' });\n  readonly template = inject(TemplateRef<unknown>);\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXFormatModule } from '@acorex/core/format';\nimport { CommonModule } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  contentChildren,\n  input,\n  output,\n  TemplateRef,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { AXPLayoutSideDetailPanelSectionDirective } from './layout-side-detail-panel-section.directive';\nimport type {\n  AXPLayoutSideDetailPanelEmptyState,\n  AXPLayoutSideDetailPanelHeader,\n  AXPLayoutSideDetailPanelHeaderIcon,\n  AXPLayoutSideDetailPanelRow,\n  AXPLayoutSideDetailPanelSection,\n} from './layout-side-detail-panel.types';\n\n//#endregion\n\n//#region ---- Component ----\n\n/**\n * Side detail panel for canvas-style layouts (org chart, workflow designer, document drive, etc.).\n * Visual language matches organization-chart / document-explorer detail panels.\n */\n@Component({\n  selector: 'axp-layout-side-detail-panel',\n  templateUrl: './layout-side-detail-panel.component.html',\n  styleUrl: './layout-side-detail-panel.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n  imports: [CommonModule, AXDecoratorModule, AXButtonModule, AXFormatModule],\n})\nexport class AXPLayoutSideDetailPanelComponent {\n  //#region ---- Inputs ----\n\n  /** When set, shows the multi-selection header (e.g. document explorer). */\n  readonly multiSelectLabel = input<string | null>(null);\n\n  /** Selected item header; omit with {@link emptyState} when nothing is selected. */\n  readonly header = input<AXPLayoutSideDetailPanelHeader | null>(null);\n\n  /** One or more titled sections of label/value rows and/or projected custom sections. */\n  readonly sections = input<AXPLayoutSideDetailPanelSection[]>([]);\n\n  /** Flat rows without wrapping sections (optional {@link rowsSectionTitle}). */\n  readonly rows = input<AXPLayoutSideDetailPanelRow[]>([]);\n\n  /** Section title when only {@link rows} is used. */\n  readonly rowsSectionTitle = input<string | null>(null);\n\n  /** Message when {@link header} is set but there are no rows/sections. */\n  readonly noRowsMessage = input<string | null>(null);\n\n  /** Empty selection state (customizable copy from parent). */\n  readonly emptyState = input<AXPLayoutSideDetailPanelEmptyState | null>(null);\n\n  //#endregion\n\n  //#region ---- Outputs ----\n\n  readonly panelClose = output<void>();\n\n  //#endregion\n\n  //#region ---- Projected sections ----\n\n  private readonly projectedSections = contentChildren(AXPLayoutSideDetailPanelSectionDirective);\n\n  //#endregion\n\n  //#region ---- UI Handlers ----\n\n  protected onClose(): void {\n    this.panelClose.emit();\n  }\n\n  protected sectionTrack(section: AXPLayoutSideDetailPanelSection, index: number): string {\n    return section.projectionKey ?? section.title ?? String(index);\n  }\n\n  protected templateForProjectionKey(key: string): TemplateRef<unknown> | null {\n    return this.projectedSections().find((s) => s.key() === key)?.template ?? null;\n  }\n\n  protected surfaceStyle(icon: AXPLayoutSideDetailPanelHeaderIcon | undefined): Record<string, string> {\n    return icon?.surfaceVars ?? {};\n  }\n\n  //#endregion\n}\n\n//#endregion\n","@if (multiSelectLabel(); as multiLabel) {\n  <div class=\"__header\">\n    <div class=\"__title\">\n      <span class=\"axp-layout-side-detail-panel__icon\">\n        <i class=\"fa-fw fa-lg fa-solid\"></i>\n      </span>\n      <span>{{ multiLabel }}</span>\n    </div>\n    <ax-button [look]=\"'blank'\" class=\"ax-sm ax-rounded-full\" (onClick)=\"onClose()\">\n      <ax-icon icon=\"fa-solid fa-xmark\"></ax-icon>\n    </ax-button>\n  </div>\n  <div class=\"__content\"></div>\n} @else if (header(); as h) {\n  <div class=\"__header\">\n    <div class=\"__title\">\n      @if (h.icon; as icon) {\n        <span\n          class=\"axp-layout-side-detail-panel__icon\"\n          [class.axp-layout-side-detail-panel__icon--shortcut]=\"icon.shortcut\"\n          [class.axp-layout-side-detail-panel__icon--themed]=\"!!surfaceStyle(icon)['--node-bg-color']\"\n          [style.--node-bg-color]=\"surfaceStyle(icon)['--node-bg-color']\"\n        >\n          <i [class]=\"icon.iconClass\"></i>\n          @if (icon.shortcut) {\n            <i class=\"fa-light fa-up-right-from-square axp-layout-side-detail-panel__icon-arrow\" aria-hidden=\"true\"></i>\n          }\n        </span>\n      }\n      <div class=\"ax-flex ax-flex-col ax-min-w-0 ax-flex-1\">\n        <span class=\"__heading-primary\">{{ h.primaryTitle }}</span>\n        @if (h.secondaryTitle) {\n          <span class=\"ax-text-xs ax-opacity-80 ax-truncate\">{{ h.secondaryTitle }}</span>\n        }\n      </div>\n    </div>\n    <ax-button [look]=\"'blank'\" class=\"ax-sm ax-rounded-full\" (onClick)=\"onClose()\">\n      <ax-icon icon=\"fa-solid fa-xmark\"></ax-icon>\n    </ax-button>\n  </div>\n  <div class=\"__content\">\n    @if (sections().length > 0) {\n      @for (section of sections(); track sectionTrack(section, $index)) {\n        <div class=\"__section\">\n          @if (section.title) {\n            <div class=\"__title\">\n              <span>{{ section.title }}</span>\n            </div>\n          }\n          <div class=\"__content\">\n            @if (section.projectionKey; as projectionKey) {\n              @if (templateForProjectionKey(projectionKey); as tpl) {\n                <ng-container *ngTemplateOutlet=\"tpl\" />\n              }\n            } @else {\n              @for (row of section.rows ?? []; track row.label + '-' + $index) {\n                <div class=\"__row\">\n                  <div class=\"__title\">\n                    <span>{{ row.label }}</span>\n                  </div>\n                  <div class=\"__content\">\n                    @if (row.format) {\n                      <span>{{ row.value | format: row.format | async }}</span>\n                    } @else {\n                      <span>{{ row.value ?? '---' }}</span>\n                    }\n                  </div>\n                </div>\n              }\n            }\n          </div>\n        </div>\n      }\n    } @else if (rows().length > 0) {\n      <div class=\"__section\">\n        @if (rowsSectionTitle(); as sectionTitle) {\n          <div class=\"__title\">\n            <span>{{ sectionTitle }}</span>\n          </div>\n        }\n        <div class=\"__content\">\n          @for (row of rows(); track row.label + '-' + $index) {\n            <div class=\"__row\">\n              <div class=\"__title\">\n                <span>{{ row.label }}</span>\n              </div>\n              <div class=\"__content\">\n                @if (row.format) {\n                  <span>{{ row.value | format: row.format | async }}</span>\n                } @else {\n                  <span>{{ row.value ?? '---' }}</span>\n                }\n              </div>\n            </div>\n          }\n        </div>\n      </div>\n    } @else if (noRowsMessage(); as noRows) {\n      <div class=\"__section\">\n        <div class=\"__content\">\n          <span class=\"ax-opacity-70 ax-text-sm\">{{ noRows }}</span>\n        </div>\n      </div>\n    }\n  </div>\n} @else if (emptyState(); as empty) {\n  <div class=\"__header\">\n    <div class=\"__title\">\n      @if (empty.icon; as icon) {\n        <span\n          class=\"axp-layout-side-detail-panel__icon\"\n          [class.axp-layout-side-detail-panel__icon--themed]=\"!!surfaceStyle(icon)['--node-bg-color']\"\n          [style.--node-bg-color]=\"surfaceStyle(icon)['--node-bg-color']\"\n        >\n          <i [class]=\"icon.iconClass\"></i>\n        </span>\n      }\n      <span class=\"__heading-primary\">{{ empty.primaryTitle }}</span>\n    </div>\n    <ax-button [look]=\"'blank'\" class=\"ax-sm ax-rounded-full\" (onClick)=\"onClose()\">\n      <ax-icon icon=\"fa-solid fa-xmark\"></ax-icon>\n    </ax-button>\n  </div>\n  <div class=\"__content\">\n    <div class=\"__section\">\n      <div class=\"__content\">\n        <span class=\"ax-opacity-70 ax-text-sm\">{{ empty.message }}</span>\n      </div>\n    </div>\n  </div>\n}\n","import { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXImageModule } from '@acorex/components/image';\nimport { AXP_PLATFORM_CONFIG_TOKEN } from '@acorex/platform/common';\nimport { AXPComponentLogoConfig, AXPIconLogoConfig, AXPImageUrlLogoConfig } from '@acorex/platform/core';\nimport { AXPDeviceService } from '@acorex/platform/core';\nimport { AXPMenuVerticalMode, AXPLayoutThemeService } from '@acorex/platform/themes/shared';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, inject, input } 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 {\n  //#region ---- Inputs ----\n\n  source = input<any>();\n\n  //#endregion\n\n  //#region ---- Services & Dependencies ----\n\n  private readonly themeStore = inject(AXPLayoutThemeService);\n  private readonly platformConfig = inject(AXP_PLATFORM_CONFIG_TOKEN);\n  private readonly deviceService = inject(AXPDeviceService);\n\n  //#endregion\n\n  //#region ---- Computed Properties ----\n\n  protected readonly compactLogoSize = 32;\n\n  /**\n   * Resolves menu mode with mobile overlay viewports forcing full logo display.\n   */\n  private readonly resolvedMenuMode = computed(() => {\n    this.deviceService.screenSize();\n    if (!this.deviceService.isLarge()) {\n      return AXPMenuVerticalMode.Full;\n    }\n    return this.themeStore.effectiveMenuVerticalMode();\n  });\n\n  protected readonly activeSource = computed(() => {\n    this.themeStore.isDarkMode();\n    const inputSource = this.source();\n    const compactIcon =\n      this.resolvedMenuMode() === AXPMenuVerticalMode.Compact\n        ? this.platformConfig.logo?.icon\n        : undefined;\n\n    if (compactIcon?.dark) {\n      return compactIcon.dark;\n    }\n    if (compactIcon) {\n      return compactIcon.light;\n    }\n    if (inputSource?.dark && inputSource?.light) {\n      return this.themeStore.isDarkMode() ? inputSource.dark : inputSource.light;\n    }\n    return inputSource;\n  });\n\n  protected readonly isCompactLogo = computed(\n    () =>\n      this.resolvedMenuMode() === AXPMenuVerticalMode.Compact &&\n      !!this.platformConfig.logo?.icon,\n  );\n\n  protected readonly logoType = computed(() => {\n    const activeSource = this.activeSource();\n    if (activeSource instanceof AXPImageUrlLogoConfig) {\n      return 'url';\n    }\n    if (activeSource instanceof AXPComponentLogoConfig) {\n      return 'component';\n    }\n    if (activeSource instanceof AXPIconLogoConfig) {\n      return 'icon';\n    }\n    return undefined;\n  });\n\n  //#endregion\n}\n","@switch (logoType()) {\n  @case ('url') {\n    @let logo = activeSource();\n    <ax-image\n      [width]=\"isCompactLogo() ? compactLogoSize : logo?.width\"\n      [height]=\"isCompactLogo() ? compactLogoSize : logo?.height\"\n      [src]=\"logo?.url\"\n    ></ax-image>\n  }\n  @case ('component') {\n    <ng-container *ngComponentOutlet=\"activeSource()?.component\"></ng-container>\n  }\n  @case ('icon') {\n    @let logo = activeSource();\n    <i [class]=\"logo?.icon\" [style.color]=\"logo?.color\"></i>\n  }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  Directive,\n  TemplateRef,\n  ViewEncapsulation,\n  computed,\n  contentChildren,\n  effect,\n  input,\n  signal,\n} from '@angular/core';\n\n//#region ---- Types ----\n\ntype MarkdownSegmentType = 'markdown' | 'code';\n\ninterface MarkdownSegmentBase {\n  type: MarkdownSegmentType;\n}\n\ninterface MarkdownContentSegment extends MarkdownSegmentBase {\n  type: 'markdown';\n  html: string;\n}\n\ninterface MarkdownCodeSegment extends MarkdownSegmentBase {\n  type: 'code';\n  language: string;\n  code: string;\n}\n\ntype MarkdownSegment = MarkdownContentSegment | MarkdownCodeSegment;\ntype MarkdownTemplateType = 'markdown' | 'code';\ntype MarkdownCompiler = (value: string) => string;\ntype MicromarkModule = {\n  micromark: (value: string, options?: unknown) => string;\n};\ntype MicromarkGfmModule = {\n  gfm: () => unknown;\n  gfmHtml: () => unknown;\n};\n\ninterface MarkdownTemplateContext {\n  $implicit: MarkdownSegment;\n  segment: MarkdownSegment;\n}\n\n//#endregion\n\n//#region ---- Template Directives ----\n\n@Directive({\n  selector: 'ng-template[axpMarkdownTemplate]',\n})\nexport class AXPMarkdownTemplateDirective {\n  /** Indicates which segment type this template customizes. */\n  readonly type = input.required<MarkdownTemplateType>({ alias: 'axpMarkdownTemplate' });\n\n  constructor(public readonly template: TemplateRef<MarkdownTemplateContext>) {}\n}\n\n//#endregion\n\n//#region ---- Component ----\n\n@Component({\n  selector: 'axp-markdown-viewer',\n  standalone: true,\n  imports: [CommonModule],\n  template: `\n    <section class=\"axp-markdown-viewer\">\n      @for (segment of segments(); track $index) {\n        @if (segment.type === 'code') {\n          @if (codeTemplate(); as template) {\n            <ng-container\n              [ngTemplateOutlet]=\"template\"\n              [ngTemplateOutletContext]=\"{ $implicit: segment, segment: segment }\"\n            >\n            </ng-container>\n          } @else {\n            <pre class=\"axp-markdown-viewer__code\"><code>{{ segment.code }}</code></pre>\n          }\n        } @else {\n          @if (markdownTemplate(); as template) {\n            <ng-container\n              [ngTemplateOutlet]=\"template\"\n              [ngTemplateOutletContext]=\"{ $implicit: segment, segment: segment }\"\n            >\n            </ng-container>\n          } @else {\n            <div class=\"axp-markdown-viewer__content\" [innerHTML]=\"segment.html\"></div>\n          }\n        }\n      }\n    </section>\n  `,\n  styleUrls: ['./markdown-viewer.component.scss'],\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXPMarkdownViewerComponent {\n  //#region ---- Inputs ----\n\n  /** Raw markdown content to render. */\n  readonly markdown = input<string>('');\n\n  //#endregion\n\n  //#region ---- Template Slots ----\n\n  /** Optional templates for overriding markdown and code segments. */\n  private readonly templates = contentChildren(AXPMarkdownTemplateDirective);\n\n  protected readonly markdownTemplate = computed(\n    () => this.templates().find((item) => item.type() === 'markdown')?.template,\n  );\n\n  protected readonly codeTemplate = computed(() => this.templates().find((item) => item.type() === 'code')?.template);\n\n  //#endregion\n\n  //#region ---- View Model ----\n\n  private readonly markdownCompiler = signal<MarkdownCompiler | null>(null);\n\n  /** Tracks compiler readiness so parsed HTML refreshes after the lazy chunk loads. */\n  protected readonly segments = computed(() => {\n    this.markdownCompiler();\n    return this.parseMarkdown(this.markdown() ?? '');\n  });\n\n  /** Shared in-flight lazy import (bundler emits async chunks from literal specifiers below). */\n  private micromarkLoadPromise: Promise<void> | null = null;\n\n  //#endregion\n\n  //#region ---- Parsing ----\n\n  constructor() {\n    effect(() => {\n      const value = this.markdown();\n      if (value.trim() && !this.markdownCompiler()) {\n        void this.ensureMicromarkCompiler();\n      }\n    });\n  }\n\n  /**\n   * Splits markdown into text/code segments, compiles markdown text to HTML with micromark,\n   * and keeps fenced code blocks available for custom Angular rendering.\n   */\n  private parseMarkdown(markdown: string): MarkdownSegment[] {\n    if (!markdown.trim()) {\n      return [];\n    }\n\n    const lines = markdown.replaceAll('\\r\\n', '\\n').split('\\n');\n    const segments: MarkdownSegment[] = [];\n    const markdownBuffer: string[] = [];\n\n    let fenceMarker: '`' | '~' | null = null;\n    let fenceLength = 0;\n    let fenceLanguage = '';\n    let fenceBody: string[] = [];\n\n    const flushMarkdownBuffer = (): void => {\n      if (!markdownBuffer.length) {\n        return;\n      }\n\n      this.addMarkdownSegment(segments, markdownBuffer.join('\\n'));\n      markdownBuffer.length = 0;\n    };\n\n    for (const line of lines) {\n      if (!fenceMarker) {\n        const fenceStart = line.match(/^([`~]{3,})(.*)$/);\n        if (!fenceStart) {\n          markdownBuffer.push(line);\n          continue;\n        }\n        const marker = fenceStart[1][0];\n        if (marker !== '`' && marker !== '~') {\n          markdownBuffer.push(line);\n          continue;\n        }\n        flushMarkdownBuffer();\n        fenceMarker = marker;\n        fenceLength = fenceStart[1].length;\n        fenceLanguage = fenceStart[2].trim().split(/\\s+/)[0] ?? '';\n        fenceBody = [];\n        continue;\n      }\n\n      const fenceEndPattern = new RegExp(`^${fenceMarker}{${fenceLength},}\\\\s*$`);\n      if (fenceEndPattern.test(line)) {\n        segments.push({\n          type: 'code',\n          language: fenceLanguage,\n          code: fenceBody.join('\\n'),\n        });\n\n        fenceMarker = null;\n        fenceLength = 0;\n        fenceLanguage = '';\n        fenceBody = [];\n        continue;\n      }\n\n      fenceBody.push(line);\n    }\n\n    if (fenceMarker) {\n      // Unclosed fence is treated as markdown to avoid content loss.\n      markdownBuffer.push(`${fenceMarker.repeat(fenceLength)}${fenceLanguage ? ` ${fenceLanguage}` : ''}`);\n      markdownBuffer.push(...fenceBody);\n    }\n\n    flushMarkdownBuffer();\n\n    return segments;\n  }\n\n  private addMarkdownSegment(segments: MarkdownSegment[], value: string): void {\n    if (!value.trim()) {\n      return;\n    }\n\n    const compiler = this.markdownCompiler();\n    segments.push({\n      type: 'markdown',\n      html: compiler ? compiler(value) : this.escapeHtml(value),\n    });\n  }\n\n  private ensureMicromarkCompiler(): Promise<void> {\n    if (this.markdownCompiler()) {\n      return Promise.resolve();\n    }\n    if (!this.micromarkLoadPromise) {\n      this.micromarkLoadPromise = this.loadMicromarkCompiler().finally(() => {\n        this.micromarkLoadPromise = null;\n      });\n    }\n    return this.micromarkLoadPromise;\n  }\n\n  private async loadMicromarkCompiler(): Promise<void> {\n    if (this.markdownCompiler()) {\n      return;\n    }\n\n    try {\n      const [micromarkModule, gfmModule] = await loadMicromarkModules();\n\n      const compiler: MarkdownCompiler = (value: string) =>\n        micromarkModule.micromark(value, {\n          extensions: [gfmModule.gfm()],\n          htmlExtensions: [gfmModule.gfmHtml()],\n        });\n\n      this.markdownCompiler.set(compiler);\n    } catch (error) {\n      console.warn('[AXPMarkdownViewer] Failed to load micromark; showing escaped text.', error);\n    }\n  }\n\n  private escapeHtml(value: string): string {\n    return value\n      .replaceAll('&', '&amp;')\n      .replaceAll('<', '&lt;')\n      .replaceAll('>', '&gt;')\n      .replaceAll('\"', '&quot;')\n      .replaceAll(\"'\", '&#39;')\n      .replaceAll('\\n', '<br>');\n  }\n\n  //#endregion\n}\n\n/**\n * Lazy-loaded from workspace `node_modules`. Must stay as literal string specifiers (not variables,\n * not `@vite-ignore`) so Angular/esbuild can emit separate async chunks instead of leaving runtime\n * bare-specifier imports that fail in the browser and previously triggered esm.sh fallback.\n */\nfunction loadMicromarkModules(): Promise<[MicromarkModule, MicromarkGfmModule]> {\n  return Promise.all([import('micromark'), import('micromark-extension-gfm')]) as Promise<\n    [MicromarkModule, MicromarkGfmModule]\n  >;\n}\n\n//#endregion\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","//#region ----   Imports   ----\n\nimport { NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, input, ViewEncapsulation } from '@angular/core';\nimport type { AXPOutcomeResultRow, AXPOutcomeResultsViewModel, AXPOutcomeResultSection } from './outcome-results-viewer.types';\n\n//#endregion\n\n//#region ----   Component   ----\n\n/**\n * Read-only outcome results list (label/value rows with optional section grouping).\n */\n@Component({\n  selector: 'axp-outcome-results-viewer',\n  template: `\n    <div\n      class=\"axp-outcome-results-viewer __root ax-flex ax-flex-col ax-items-center ax-justify-center ax-p-8 ax-min-h-[200px] ax-text-on-surface\"\n    >\n      @if (hasRows()) {\n        <div class=\"ax-max-w-2xl ax-w-full\">\n          @if (resolvedTitle(); as sectionTitle) {\n            <h3 class=\"ax-text-base ax-font-semibold ax-mb-3 ax-text-on-surface\">{{ sectionTitle }}</h3>\n          }\n          @if (showGroupedSections()) {\n            <div class=\"ax-flex ax-flex-col ax-gap-5\">\n              @for (group of sections(); track group.trackKey) {\n                <section class=\"ax-flex ax-flex-col ax-gap-2\">\n                  @if (group.title) {\n                    <h4 class=\"ax-text-sm ax-font-semibold ax-text-on-surface\">{{ group.title }}</h4>\n                  }\n                  @if (group.description) {\n                    <p class=\"ax-text-sm __text-muted\">{{ group.description }}</p>\n                  }\n                  <ng-container\n                    *ngTemplateOutlet=\"outcomeList; context: { $implicit: group.items }\"\n                  ></ng-container>\n                </section>\n              }\n            </div>\n          } @else {\n            <ng-container *ngTemplateOutlet=\"outcomeList; context: { $implicit: flatRows() }\"></ng-container>\n          }\n        </div>\n      } @else if (resolvedEmptyMessage(); as message) {\n        <p class=\"ax-text-sm __text-muted\">{{ message }}</p>\n      }\n    </div>\n\n    <ng-template #outcomeList let-items>\n      <ul\n        class=\"__list ax-list-none ax-p-0 ax-m-0 ax-flex ax-flex-col ax-gap-1 ax-rounded-lg ax-border ax-overflow-hidden\"\n      >\n        @for (row of items; track row.key) {\n          <li class=\"__row ax-flex ax-justify-between ax-gap-4 ax-py-3 ax-px-4 ax-border-b last:ax-border-b-0\">\n            <span class=\"ax-text-sm ax-font-medium __text-muted\">{{ row.label }}</span>\n            <span\n              class=\"ax-text-sm ax-text-right ax-break-all\"\n              [class]=\"row.valuePresentation.classes\"\n              [style.color]=\"row.valuePresentation.color\"\n              [style.background-color]=\"row.valuePresentation.backgroundColor\"\n              [style.border-color]=\"row.valuePresentation.borderColor\"\n            >\n              @if (row.iconClass) {\n                <i [class]=\"row.iconClass\"></i>\n              }\n              {{ formatValue(row.value) }}\n            </span>\n          </li>\n        }\n      </ul>\n    </ng-template>\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [NgTemplateOutlet],\n  encapsulation: ViewEncapsulation.None,\n  host: { class: 'axp-outcome-results-viewer ax-block' },\n  styleUrl: './outcome-results-viewer.component.scss',\n})\nexport class AXPOutcomeResultsViewerComponent {\n  //#region ----   Inputs   ----\n\n  model = input<AXPOutcomeResultsViewModel | null>(null);\n\n  /** Optional heading above the list (overrides {@link AXPOutcomeResultsViewModel.title}). */\n  title = input<string | undefined>(undefined);\n\n  /** Shown when there are no rows (overrides {@link AXPOutcomeResultsViewModel.emptyMessage}). */\n  emptyMessage = input<string | undefined>(undefined);\n\n  protected readonly resolvedTitle = computed(() => this.title() ?? this.model()?.title);\n\n  protected readonly resolvedEmptyMessage = computed(() => this.emptyMessage() ?? this.model()?.emptyMessage);\n\n  //#endregion\n\n  //#region ----   Computed   ----\n\n  protected readonly sections = computed((): AXPOutcomeResultSection[] => {\n    const sections = this.model()?.sections;\n    return Array.isArray(sections) ? sections : [];\n  });\n\n  protected readonly flatRows = computed((): AXPOutcomeResultRow[] => {\n    const rows = this.model()?.rows;\n    if (Array.isArray(rows) && rows.length > 0) {\n      return rows;\n    }\n    const groups = this.sections();\n    if (groups.length > 0) {\n      return groups.flatMap((g) => g.items);\n    }\n    return [];\n  });\n\n  protected readonly showGroupedSections = computed(() => this.sections().length > 1);\n\n  protected readonly hasRows = computed(() => this.flatRows().length > 0);\n\n  //#endregion\n\n  //#region ----   Helpers   ----\n\n  protected formatValue(value: unknown): string {\n    if (value == null || value === '') return '—';\n    if (typeof value === 'string') return value;\n    if (typeof value === 'number' || typeof value === 'boolean') return String(value);\n    if (Array.isArray(value)) {\n      return value.map((a) => (typeof a === 'object' ? JSON.stringify(a) : String(a))).join(', ');\n    }\n    if (typeof value === 'object') return JSON.stringify(value);\n    return String(value);\n  }\n\n  //#endregion\n}\n\n//#endregion\n","//#region ----   Outcome results view model   ----\n\n/** Resolved value chip styling for one outcome row. */\nexport interface AXPOutcomeResultValuePresentation {\n  classes: string;\n  color?: string;\n  backgroundColor?: string;\n  borderColor?: string;\n}\n\n/** One label/value row in the outcome results list. */\nexport interface AXPOutcomeResultRow {\n  key: string;\n  label: string;\n  value: unknown;\n  iconClass?: string;\n  valuePresentation: AXPOutcomeResultValuePresentation;\n}\n\n/** Optional section grouping for outcome rows. */\nexport interface AXPOutcomeResultSection {\n  trackKey: string;\n  title: string;\n  description?: string;\n  items: AXPOutcomeResultRow[];\n}\n\n/** Data consumed by {@link AXPOutcomeResultsViewerComponent} and the outcome-results-viewer widget. */\nexport interface AXPOutcomeResultsViewModel {\n  sections?: AXPOutcomeResultSection[];\n  /** Flat rows when sections are omitted or for single-section collapse. */\n  rows?: AXPOutcomeResultRow[];\n  /** Optional heading (e.g. from host dialog or post-submit step). */\n  title?: string;\n  /** Shown when there are no rows. */\n  emptyMessage?: string;\n}\n\n//#endregion\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} 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 ax-w-full\">\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-center\">\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\" [look]=\"'minimal'\" [title]=\"emptyTitleKey()\" [description]=\"emptyDescriptionKey()\">\n    <div slot=\"actions\" class=\"ax-sm\">\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>","//#region ---- Imports ----\n\nimport { AXPActionMenuItem, AXPExecuteCommand, AXPExecuteCommandResult } from '@acorex/platform/contracts';\nimport { AXRange } from '@acorex/cdk/common';\n\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/contracts';\n\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 { AXPDataGenerator, type AXPMultiLanguageString, containsHtmlMarkup, extractTextFromHtml, isFormValueEqual } from '@acorex/platform/contracts';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXSafePipe } from '@acorex/core/pipes';\nimport { AXTranslationModule } from '@acorex/core/translation';\n\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';\n\nimport { cloneDeep, isEqual } 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  /** Snapshot from the last external `[value]` sync (load, discard, save refresh). */\n  private readonly baseline = signal<AXPBuilderValue>({ sections: [] });\n\n  /** Set on local {@link commit}; cleared on external sync or {@link markClean}. */\n  private pendingCommitSnapshot: AXPBuilderValue | null = null;\n\n  /** True when the live model differs from the external baseline. */\n  readonly isDirty = computed(() =>\n    !isFormValueEqual(this.normalizeValue(this.vm()), this.baseline()),\n  );\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 normalized = this.normalizeValue(cloneDeep(this.value()));\n      const current = untracked(() => this.normalizeValue(this.vm()));\n\n      if (isEqual(normalized, current)) {\n        this.pendingCommitSnapshot = null;\n        return;\n      }\n\n      if (this.pendingCommitSnapshot != null) {\n        if (!isEqual(normalized, current)) {\n          // Parent discard/reload pushed a new external model — accept as the clean baseline.\n          untracked(() => {\n            this.vm.set(normalized);\n            this.baseline.set(cloneDeep(normalized));\n            this.pendingCommitSnapshot = null;\n          });\n          return;\n        }\n\n        this.pendingCommitSnapshot = null;\n        return;\n      }\n\n      untracked(() => {\n        this.vm.set(normalized);\n        this.baseline.set(cloneDeep(normalized));\n        this.pendingCommitSnapshot = null;\n      });\n    });\n  }\n\n  /** Align dirty baseline to the current model (call after save). */\n  markClean(): void {\n    this.baseline.set(cloneDeep(this.normalizeValue(this.vm())));\n    this.pendingCommitSnapshot = null;\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.pendingCommitSnapshot = cloneDeep(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 { 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/contracts';\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<AXPSortDefinition[]>([], {\n    equal: isEqual,\n  });\n\n  initialSortQueries = input<AXPSortQuery[]>([]);\n  sortQueriesChange = output<AXPSortQuery[]>();\n\n  constructor() {\n    // Sync from parent while preserving active-sort order (e.g. column click order).\n    effect(() => {\n      const initialQueries = this.initialSortQueries();\n      const definitions = this.sortDefinitions();\n      const definitionsMap = new Map(definitions.map((def) => [def.name, def]));\n      const included = new Set<string>();\n      const mergedQueries: AXPSortDefinition[] = [];\n\n      for (const query of initialQueries) {\n        const definition = definitionsMap.get(query.name);\n        if (!definition) {\n          continue;\n        }\n        mergedQueries.push({ ...definition, dir: query.dir });\n        included.add(query.name);\n      }\n\n      for (const definition of definitions) {\n        if (!included.has(definition.name)) {\n          mergedQueries.push({ ...definition });\n        }\n      }\n\n      this.sortQueries.set(mergedQueries);\n    });\n  }\n\n  private emitActiveSortQueries(): void {\n    this.sortQueriesChange.emit(\n      this.sortQueries()\n        .filter((q) => q.dir !== undefined)\n        .map((q) => ({ name: q.name, dir: q.dir }) as AXPSortQuery),\n    );\n  }\n\n  protected drop(event: CdkDragDrop<unknown[]>) {\n    const sq = [...this.sortQueries()];\n    moveItemInArray(sq, event.previousIndex, event.currentIndex);\n    this.sortQueries.set(sq);\n    this.sortDefinitions.set([...sq]);\n    this.emitActiveSortQueries();\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    this.emitActiveSortQueries();\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 sortQueries(); 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","\nimport { AXPContextChangeEvent, AXPDataGenerator, AXPKeyboardShortcutPriority, type AXPWidgetNode } from '@acorex/platform/contracts';\nimport { CommonModule } from '@angular/common';\nimport {\n    ChangeDetectionStrategy,\n    Component,\n    computed,\n    DestroyRef,\n    ElementRef,\n    effect,\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 { AXPWidgetCoreModule } from '@acorex/platform/layout/widget-core';\n\nimport { AXPKeyboardShortcutRegistry } 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    private readonly shortcutRegistry = inject(AXPKeyboardShortcutRegistry);\n    private readonly destroyRef = inject(DestroyRef);\n    private readonly elementRef = inject(ElementRef<HTMLElement>);\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        this.shortcutRegistry.register({\n            owner: this.destroyRef,\n            elementRef: this.elementRef,\n            id: 'spreadsheet-cancel-edit',\n            priority: AXPKeyboardShortcutPriority.Panel,\n            when: () => this.editingCell() != null,\n            shortcuts: [\n                {\n                    keys: ['escape'],\n                    title: '@general:actions.cancel.title',\n                    handler: () => this.cancelCellEdit(),\n                },\n            ],\n        });\n\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        // Columns drive widget cache keys; when the column defs array is rebuilt, stale nodes keep old bindings.\n        let previousColumnsRef: AXPSpreadsheetColumn[] | undefined;\n        effect(() => {\n            const cols = this.columns();\n            if (previousColumnsRef !== undefined && previousColumnsRef !== cols) {\n                this.widgetNodeCache.clear();\n                this.cellValueCache.clear();\n            }\n            previousColumnsRef = cols;\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     * 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     * 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 type { AXPWidgetNode } from '@acorex/platform/contracts';\n\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","import { type AXPWidgetProperty, type AXPWidgetPropertyGroup, createBooleanProperty } from '@acorex/platform/layout/widget-core-contracts';\nimport type { AXPPropertyViewerTab } from '../property-viewer';\nimport { AXPWidgetsCatalog } from '@acorex/platform/contracts';\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/contracts';\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  /** Whether the builder model differs from the last external baseline. */\n  isDirty(): boolean {\n    return this.inner()?.isDirty() ?? false;\n  }\n\n  /** Clears dirty state by aligning baseline to the current model. */\n  markClean(): void {\n    this.inner()?.markClean();\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","//#region ----   Imports   ----\n\nimport { AXButtonModule } from '@acorex/components/button';\nimport { ChangeDetectionStrategy, Component, computed, effect, input, OnDestroy, output, signal } from '@angular/core';\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/contracts';\n\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 { setupPopupFooterKeyboardShortcuts } from '@acorex/platform/core';\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    setupPopupFooterKeyboardShortcuts(\n      () => [\n        {\n          title: I18N.cancel,\n          command: 'cancel',\n          handler: () => this.handleCancel(),\n        },\n        {\n          title: I18N.save,\n          command: 'submit',\n          handler: () => this.handleSave(),\n        },\n      ],\n      { id: 'table-columns-editor-popup' },\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 { setupPopupFooterKeyboardShortcuts } from '@acorex/platform/core';\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    setupPopupFooterKeyboardShortcuts(\n      () => [\n        {\n          title: I18N.cancel,\n          command: 'cancel',\n          handler: () => this.handleCancel(),\n        },\n        {\n          title: I18N.save,\n          command: 'submit',\n          handler: () => this.handleSave(),\n        },\n      ],\n      { id: 'table-data-editor-popup' },\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","\nimport { AXPContextChangeEvent, type AXPWidgetNode, AXPWidgetsCatalog } from '@acorex/platform/contracts';\nimport { AXPWidgetCoreModule } from '@acorex/platform/layout/widget-core';\n\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';\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","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 {\n  ChangeDetectionStrategy,\n  Component,\n  ViewEncapsulation,\n  computed,\n  effect,\n  inject,\n  input,\n  signal,\n} from '@angular/core';\n\nimport { AXBadgeModule } from '@acorex/components/badge';\nimport { AXSkeletonModule } from '@acorex/components/skeleton';\nimport { AXPAvatarComponent } from '../avatar';\nimport { AXPUserAvatarService } from './user-avatar.service';\nimport { AXPUserAvatarData } from './user-avatar.types';\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 {\n  private readonly userAvatarService = inject(AXPUserAvatarService);\n\n  protected userInfo = signal<AXPUserAvatarData | null>(null);\n\n  size = input<number>(40);\n  userId = input<string | number>('');\n\n  src = signal<string>('');\n  /** Username from the user record. */\n  readonly userName = computed(() => this.userInfo()?.username || '');\n\n  /** Given name segment used for display and templates. */\n  readonly firstName = computed(() => this.userInfo()?.firstName?.trim() || '');\n\n  /** Family name segment used for display and templates. */\n  readonly lastName = computed(() => this.userInfo()?.lastName?.trim() || '');\n\n  /** Full display name used for avatar initials and external templates. */\n  readonly title = computed(() => this.resolveDisplayName(this.userInfo()));\n\n  readonly isOnline = computed(() => this.userInfo()?.status === 'online');\n\n  constructor() {\n    effect((onCleanup) => {\n      // userId may arrive as number from backends; coerce before trim.\n      const userId = String(this.userId() ?? '').trim();\n      if (!userId) {\n        this.userInfo.set(null);\n        this.src.set('');\n        return;\n      }\n\n      const sub = this.userAvatarService.getUserInfo$(userId).subscribe((userData) => {\n        this.userInfo.set(userData);\n        this.generateAvatarSrc();\n      });\n\n      onCleanup(() => sub.unsubscribe());\n    });\n  }\n\n  /**\n   * Resolves avatar image URL from user data and resets load state.\n   */\n  private generateAvatarSrc(): void {\n    if (this.userInfo()?.avatarUrl) {\n      this.src.set(this.userInfo()?.avatarUrl!);\n      return;\n    }\n    this.src.set('');\n  }\n\n  private resolveDisplayName(info: AXPUserAvatarData | null): string {\n    if (!info) {\n      return '';\n    }\n\n    const parts = [info.firstName, info.lastName].map((part) => part?.trim()).filter(Boolean) as string[];\n    if (parts.length > 0) {\n      return parts.join(' ');\n    }\n\n    return info.username.trim();\n  }\n}\n","<axp-avatar [size]=\"size()\" [src]=\"src()\" [fullName]=\"title()\" />\n","//#region ---- Imports ----\n\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, input, output, ViewEncapsulation } from '@angular/core';\nimport {\n  AXPVirtualKeypadKey,\n  AXPVirtualKeypadLook,\n  AXPVirtualKeypadPressEvent,\n} from './virtual-keypad.types';\n\n//#endregion\n\n//#region ---- Constants ----\n\nconst DIGIT_KEYS: AXPVirtualKeypadKey[] = [\n  { digit: '1' },\n  { digit: '2', letters: 'ABC' },\n  { digit: '3', letters: 'DEF' },\n  { digit: '4', letters: 'GHI' },\n  { digit: '5', letters: 'JKL' },\n  { digit: '6', letters: 'MNO' },\n  { digit: '7', letters: 'PQRS' },\n  { digit: '8', letters: 'TUV' },\n  { digit: '9', letters: 'WXYZ' },\n];\n\nconst ZERO_KEY: AXPVirtualKeypadKey = { digit: '0' };\n\n//#endregion\n\n//#region ---- Virtual keypad component ----\n\n/**\n * Touch-friendly numeric keypad for PIN and code entry on mobile layouts.\n */\n@Component({\n  selector: 'axp-virtual-keypad',\n  templateUrl: './virtual-keypad.component.html',\n  styleUrl: './virtual-keypad.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n  imports: [AXTranslationModule, AsyncPipe],\n  host: {\n    class: 'axp-virtual-keypad-host',\n  },\n})\nexport class AXPVirtualKeypadComponent {\n  //#region ---- Inputs ----\n\n  /** Disables all keypad buttons. */\n  readonly disabled = input(false);\n\n  /** Shows phone-style letter hints under digits 2–9. */\n  readonly showLetterHints = input(true);\n\n  /** Visual style of keypad keys. */\n  readonly look = input<AXPVirtualKeypadLook>('solid');\n\n  //#endregion\n\n  //#region ---- Outputs ----\n\n  /** Emitted when a digit key is pressed. */\n  readonly digitPress = output<number>();\n\n  /** Emitted when the backspace key is pressed. */\n  readonly backspace = output<void>();\n\n  /** Emitted for either digit or backspace actions. */\n  readonly keyPress = output<AXPVirtualKeypadPressEvent>();\n\n  //#endregion\n\n  //#region ---- Template data ----\n\n  protected readonly digitKeys = DIGIT_KEYS;\n  protected readonly zeroKey = ZERO_KEY;\n\n  //#endregion\n\n  //#region ---- UI handlers ----\n\n  protected onDigitPress(digit: string): void {\n    if (this.disabled()) {\n      return;\n    }\n\n    const value = Number(digit);\n    this.digitPress.emit(value);\n    this.keyPress.emit({ action: 'digit', digit: value });\n  }\n\n  protected onBackspace(): void {\n    if (this.disabled()) {\n      return;\n    }\n\n    this.backspace.emit();\n    this.keyPress.emit({ action: 'backspace' });\n  }\n\n  //#endregion\n}\n\n//#endregion\n","<div\n  class=\"axp-virtual-keypad\"\n  role=\"group\"\n  [attr.data-look]=\"look()\"\n  [attr.aria-label]=\"'@general:virtual-keypad.aria-label' | translate | async\"\n>\n  <div class=\"__grid\">\n    @for (key of digitKeys; track key.digit) {\n      <button\n        type=\"button\"\n        class=\"__key\"\n        [disabled]=\"disabled()\"\n        [attr.aria-label]=\"key.digit\"\n        (click)=\"onDigitPress(key.digit)\"\n      >\n        <span class=\"__digit\">{{ key.digit }}</span>\n        @if (showLetterHints() && key.letters) {\n          <span class=\"__letters\" aria-hidden=\"true\">{{ key.letters }}</span>\n        }\n      </button>\n    }\n\n    <span class=\"__spacer\" aria-hidden=\"true\"></span>\n\n    <button\n      type=\"button\"\n      class=\"__key\"\n      [disabled]=\"disabled()\"\n      aria-label=\"0\"\n      (click)=\"onDigitPress(zeroKey.digit)\"\n    >\n      <span class=\"__digit\">{{ zeroKey.digit }}</span>\n    </button>\n\n    <button\n      type=\"button\"\n      class=\"__key __key--action\"\n      [disabled]=\"disabled()\"\n      [attr.aria-label]=\"'@general:virtual-keypad.backspace' | translate | async\"\n      (click)=\"onBackspace()\"\n    >\n      <i class=\"fa-light fa-delete-left\" aria-hidden=\"true\"></i>\n    </button>\n  </div>\n</div>\n","//#region ---- Virtual keypad types ----\n\nexport interface AXPVirtualKeypadKey {\n  /** Numeric digit displayed on the key (0–9). */\n  digit: string;\n  /** Optional phone-style letter hints shown below the digit. */\n  letters?: string;\n}\n\nexport type AXPVirtualKeypadLook = 'blank' | 'solid';\n\nexport type AXPVirtualKeypadAction = 'digit' | 'backspace';\n\nexport interface AXPVirtualKeypadPressEvent {\n  action: AXPVirtualKeypadAction;\n  /** Present when `action` is `digit`. */\n  digit?: number;\n}\n\n//#endregion\n","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/contracts';\n\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 { AXP_PREVIEW_WIDGET_FIELD_COMMAND_KEY, type AXPActionMenuItem, type AXPMultiLanguageString, type AXPOptionsData, type AXPWidgetNode, compareMultiLanguageStrings } from '@acorex/platform/contracts';\nimport { AXPWidgetGroupEnum } from '@acorex/platform/layout/widget-core-contracts';\n\nimport { AXTranslationService } from '@acorex/core/translation';\n\nimport { 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 { AXPWidgetConfig, AXPWidgetProperty } from '@acorex/platform/layout/widget-core-contracts';\nimport type { AXPWidgetNode } from '@acorex/platform/contracts';\nimport { AXPWidgetRegistryService } 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 type { AXPWidgetNode } from '@acorex/platform/contracts';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXBasePageComponent } from '@acorex/components/page';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { setupPopupFooterKeyboardShortcuts } from '@acorex/platform/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  constructor() {\n    super();\n    setupPopupFooterKeyboardShortcuts(\n      () => [\n        {\n          title: '@general:actions.close.title',\n          command: 'cancel',\n          handler: () => this.handleCloseClick(),\n        },\n        {\n          title: '@general:actions.apply.title',\n          command: 'apply',\n          handler: () => this.handleApplyClick(),\n        },\n      ],\n      { id: 'widget-property-viewer-popup' },\n    );\n  }\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 { AXPWidgetConfig, AXPWidgetProperty } from '@acorex/platform/layout/widget-core-contracts';\nimport type { AXPWidgetNode } from '@acorex/platform/contracts';\nimport { Injectable, inject } from '@angular/core';\nimport { AXPWidgetRegistryService } 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","/**\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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"}