@acorex-platform/framework-client 0.0.28 → 0.0.32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/{acorex-platform-framework-client-common-common-settings.provider-CLm2BVk-.mjs → acorex-platform-framework-client-common-common-settings.provider-CzBr0cRi.mjs} +23 -2
- package/fesm2022/acorex-platform-framework-client-common-common-settings.provider-CzBr0cRi.mjs.map +1 -0
- package/fesm2022/acorex-platform-framework-client-common.mjs +678 -112
- package/fesm2022/acorex-platform-framework-client-common.mjs.map +1 -1
- package/fesm2022/acorex-platform-framework-client-core.mjs +85 -9
- package/fesm2022/acorex-platform-framework-client-core.mjs.map +1 -1
- package/fesm2022/acorex-platform-framework-client-layout-builder.mjs +3 -6
- package/fesm2022/acorex-platform-framework-client-layout-builder.mjs.map +1 -1
- package/fesm2022/acorex-platform-framework-client-layout-components.mjs +469 -73
- package/fesm2022/acorex-platform-framework-client-layout-components.mjs.map +1 -1
- package/fesm2022/{acorex-platform-framework-client-layout-entity-acorex-platform-framework-client-layout-entity-BXOMs6oD.mjs → acorex-platform-framework-client-layout-entity-acorex-platform-framework-client-layout-entity-Bu8LLCVa.mjs} +3324 -2169
- package/fesm2022/acorex-platform-framework-client-layout-entity-acorex-platform-framework-client-layout-entity-Bu8LLCVa.mjs.map +1 -0
- package/fesm2022/{acorex-platform-framework-client-layout-entity-attachments-page.component-DCK-qb-F.mjs → acorex-platform-framework-client-layout-entity-attachments-page.component-EU1dgVH_.mjs} +2 -2
- package/fesm2022/{acorex-platform-framework-client-layout-entity-attachments-page.component-DCK-qb-F.mjs.map → acorex-platform-framework-client-layout-entity-attachments-page.component-EU1dgVH_.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-framework-client-layout-entity-bulk-entity.command-Cs3agnpF.mjs → acorex-platform-framework-client-layout-entity-bulk-entity.command-DNBhGkO8.mjs} +43 -15
- package/fesm2022/acorex-platform-framework-client-layout-entity-bulk-entity.command-DNBhGkO8.mjs.map +1 -0
- package/fesm2022/{acorex-platform-framework-client-layout-entity-file-list-popup.component-p0hxDb0W.mjs → acorex-platform-framework-client-layout-entity-file-list-popup.component-B3__csKW.mjs} +3 -3
- package/fesm2022/{acorex-platform-framework-client-layout-entity-file-list-popup.component-p0hxDb0W.mjs.map → acorex-platform-framework-client-layout-entity-file-list-popup.component-B3__csKW.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-framework-client-layout-entity-gallery-page.component-DYV9YPyw.mjs → acorex-platform-framework-client-layout-entity-gallery-page.component-DtNSVjeF.mjs} +2 -2
- package/fesm2022/{acorex-platform-framework-client-layout-entity-gallery-page.component-DYV9YPyw.mjs.map → acorex-platform-framework-client-layout-entity-gallery-page.component-DtNSVjeF.mjs.map} +1 -1
- package/fesm2022/acorex-platform-framework-client-layout-entity.mjs +1 -1
- package/fesm2022/acorex-platform-framework-client-layout-views.mjs +37 -6
- package/fesm2022/acorex-platform-framework-client-layout-views.mjs.map +1 -1
- package/fesm2022/acorex-platform-framework-client-layout-widget-core.mjs +148 -130
- package/fesm2022/acorex-platform-framework-client-layout-widget-core.mjs.map +1 -1
- package/fesm2022/{acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-3CO4xJB3.mjs → acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-4mX8aYzA.mjs} +3 -3
- package/fesm2022/{acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-3CO4xJB3.mjs.map → acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-4mX8aYzA.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-framework-client-layout-widgets-tabular-data-edit-popup.component-CRST84ou.mjs → acorex-platform-framework-client-layout-widgets-tabular-data-edit-popup.component-D3pnOGmB.mjs} +3 -3
- package/fesm2022/{acorex-platform-framework-client-layout-widgets-tabular-data-edit-popup.component-CRST84ou.mjs.map → acorex-platform-framework-client-layout-widgets-tabular-data-edit-popup.component-D3pnOGmB.mjs.map} +1 -1
- package/fesm2022/acorex-platform-framework-client-layout-widgets.mjs +1127 -717
- package/fesm2022/acorex-platform-framework-client-layout-widgets.mjs.map +1 -1
- package/fesm2022/acorex-platform-framework-client-realtime.mjs +70 -5
- package/fesm2022/acorex-platform-framework-client-realtime.mjs.map +1 -1
- package/fesm2022/acorex-platform-framework-client-runtime.mjs +121 -6
- package/fesm2022/acorex-platform-framework-client-runtime.mjs.map +1 -1
- package/fesm2022/{acorex-platform-framework-client-themes-default-entity-master-single-view.component-C2Abf7Lb.mjs → acorex-platform-framework-client-themes-default-entity-master-single-view.component-DCpl6AXq.mjs} +51 -12
- package/fesm2022/acorex-platform-framework-client-themes-default-entity-master-single-view.component-DCpl6AXq.mjs.map +1 -0
- package/fesm2022/acorex-platform-framework-client-themes-default.mjs +770 -679
- package/fesm2022/acorex-platform-framework-client-themes-default.mjs.map +1 -1
- package/fesm2022/{acorex-platform-framework-client-themes-shared-settings.provider-D2XPkc71.mjs → acorex-platform-framework-client-themes-shared-settings.provider-CpsAIsxj.mjs} +76 -1
- package/fesm2022/acorex-platform-framework-client-themes-shared-settings.provider-CpsAIsxj.mjs.map +1 -0
- package/fesm2022/acorex-platform-framework-client-themes-shared.mjs +320 -32
- package/fesm2022/acorex-platform-framework-client-themes-shared.mjs.map +1 -1
- package/package.json +7 -7
- package/types/acorex-platform-framework-client-common.d.ts +137 -9
- package/types/acorex-platform-framework-client-core.d.ts +4 -1
- package/types/acorex-platform-framework-client-layout-components.d.ts +139 -20
- package/types/acorex-platform-framework-client-layout-entity.d.ts +518 -256
- package/types/acorex-platform-framework-client-layout-views.d.ts +48 -0
- package/types/acorex-platform-framework-client-layout-widget-core.d.ts +2 -2
- package/types/acorex-platform-framework-client-layout-widgets.d.ts +130 -80
- package/types/acorex-platform-framework-client-realtime.d.ts +39 -2
- package/types/acorex-platform-framework-client-runtime.d.ts +56 -5
- package/types/acorex-platform-framework-client-themes-default.d.ts +144 -14
- package/types/acorex-platform-framework-client-themes-shared.d.ts +36 -3
- package/fesm2022/acorex-platform-framework-client-common-common-settings.provider-CLm2BVk-.mjs.map +0 -1
- package/fesm2022/acorex-platform-framework-client-layout-entity-acorex-platform-framework-client-layout-entity-BXOMs6oD.mjs.map +0 -1
- package/fesm2022/acorex-platform-framework-client-layout-entity-bulk-entity.command-Cs3agnpF.mjs.map +0 -1
- package/fesm2022/acorex-platform-framework-client-themes-default-entity-master-single-view.component-C2Abf7Lb.mjs.map +0 -1
- package/fesm2022/acorex-platform-framework-client-themes-shared-settings.provider-D2XPkc71.mjs.map +0 -1
|
@@ -510,11 +510,11 @@ class AXPRepeaterWidgetColumnComponent extends AXPColumnWidgetComponent {
|
|
|
510
510
|
}
|
|
511
511
|
}
|
|
512
512
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPRepeaterWidgetColumnComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
513
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXPRepeaterWidgetColumnComponent, isStandalone: true, selector: "axp-repeater-widget-column", inputs: { rawValue: "rawValue", rowData: "rowData", rawValueInput: ["rawValue", "rawValueInput"], rowDataInput: ["rowData", "rowDataInput"] }, providers: [AXPWidgetCoreService, AXPContextStore], viewQueries: [{ propertyName: "moreButton", first: true, predicate: ["moreButton"], descendants: true, isSignal: true }, { propertyName: "morePopover", first: true, predicate: ["morePopover"], descendants: true, isSignal: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "@if (useTextDisplay()) {\n <div class=\"relative flex min-w-0 items-center gap-1\">\n @for (text of visibleDisplayTexts(); track $index) {\n <span class=\"truncate\">{{ text }}</span>\n @if ($index < visibleDisplayTexts().length - 1) {\n <span class=\"text-muted shrink-0\">,</span>\n }\n } @empty {\n <span class=\"text-muted\">---</span>\n }\n\n @if (hasMoreItems()) {\n <span\n class=\"absolute flex end-0 h-full cursor-pointer items-center px-1 hover:primary-lighter-surface\"\n (click)=\"showMoreItems()\"\n #moreButton\n >\n <i class=\"fa-light fa-ellipsis-vertical\"></i>\n </span>\n }\n </div>\n} @else {\n <div class=\"relative flex items-
|
|
513
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXPRepeaterWidgetColumnComponent, isStandalone: true, selector: "axp-repeater-widget-column", inputs: { rawValue: "rawValue", rowData: "rowData", rawValueInput: ["rawValue", "rawValueInput"], rowDataInput: ["rowData", "rowDataInput"] }, providers: [AXPWidgetCoreService, AXPContextStore], viewQueries: [{ propertyName: "moreButton", first: true, predicate: ["moreButton"], descendants: true, isSignal: true }, { propertyName: "morePopover", first: true, predicate: ["morePopover"], descendants: true, isSignal: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "@if (useTextDisplay()) {\n <div class=\"relative flex min-w-0 items-center gap-1\">\n @for (text of visibleDisplayTexts(); track $index) {\n <span class=\"truncate\">{{ text }}</span>\n @if ($index < visibleDisplayTexts().length - 1) {\n <span class=\"text-muted shrink-0\">,</span>\n }\n } @empty {\n <span class=\"text-muted\">---</span>\n }\n\n @if (hasMoreItems()) {\n <span\n class=\"absolute flex end-0 h-full cursor-pointer items-center px-1 hover:primary-lighter-surface\"\n (click)=\"showMoreItems()\"\n #moreButton\n >\n <i class=\"fa-light fa-ellipsis-vertical\"></i>\n </span>\n }\n </div>\n} @else {\n <div class=\"relative flex min-w-0 flex-col items-stretch gap-0.5\">\n @for (item of visibleItems(); track $index) {\n @if (childWidgetNode) {\n <ng-container\n axp-widget-renderer\n [node]=\"getItemNode(item, $index)!\"\n [mode]=\"'view'\"\n [parentNode]=\"null\"\n [index]=\"$index\"\n ></ng-container>\n }\n } @empty {\n <span class=\"text-muted\">---</span>\n }\n\n @if (hasMoreItems()) {\n <span\n class=\"absolute flex end-0 h-full cursor-pointer items-center px-1 hover:primary-lighter-surface\"\n (click)=\"showMoreItems()\"\n #moreButton\n >\n <i class=\"fa-light fa-ellipsis-vertical\"></i>\n </span>\n }\n </div>\n}\n\n<ax-popover [openOn]=\"'manual'\" #morePopover (openChange)=\"onMorePopoverOpenChange($event)\">\n <div class=\"lightest-surface min-w-[280px] rounded-lg border p-4 shadow-lg\">\n <div class=\"mb-4 border-b pb-2\">\n <h3 class=\"text-base font-semibold\">All {{ popoverItemCount() }} Items</h3>\n </div>\n <div class=\"max-h-64 flex flex-col gap-3 overflow-auto\" style=\"max-height: max(30dvh, 10rem)\">\n @if (useTextDisplay()) {\n @for (text of resolvedDisplayTexts(); track $index) {\n <div class=\"truncate\">{{ text }}</div>\n }\n } @else {\n @for (item of allItems(); track $index) {\n <div>\n @if (childWidgetNode) {\n <ng-container\n axp-widget-renderer\n [node]=\"getItemNode(item, $index)!\"\n [mode]=\"'view'\"\n [parentNode]=\"null\"\n [index]=\"$index\"\n ></ng-container>\n }\n </div>\n }\n }\n </div>\n </div>\n</ax-popover>\n", dependencies: [{ kind: "ngmodule", type: AXBadgeModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "ngmodule", type: AXPopoverModule }, { kind: "component", type: i3.AXPopoverComponent, selector: "ax-popover", inputs: ["width", "disablePanelClass", "visualContextScope", "disabled", "offsetX", "offsetY", "target", "placement", "content", "openOn", "closeOn", "hasBackdrop", "openAfter", "closeAfter", "closeOnScroll", "backdropClass", "panelClass", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "ngmodule", type: AXPWidgetCoreModule }, { kind: "directive", type: i1.AXPWidgetRendererDirective, selector: "[axp-widget-renderer]", inputs: ["parentNode", "index", "mode", "node"], outputs: ["onOptionsChanged", "onValueChanged", "onLoad"], exportAs: ["widgetRenderer"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
514
514
|
}
|
|
515
515
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPRepeaterWidgetColumnComponent, decorators: [{
|
|
516
516
|
type: Component,
|
|
517
|
-
args: [{ selector: 'axp-repeater-widget-column', changeDetection: ChangeDetectionStrategy.OnPush, imports: [AXBadgeModule, AXButtonModule, AXPopoverModule, AXPWidgetCoreModule], providers: [AXPWidgetCoreService, AXPContextStore], inputs: ['rawValue', 'rowData'], template: "@if (useTextDisplay()) {\n <div class=\"relative flex min-w-0 items-center gap-1\">\n @for (text of visibleDisplayTexts(); track $index) {\n <span class=\"truncate\">{{ text }}</span>\n @if ($index < visibleDisplayTexts().length - 1) {\n <span class=\"text-muted shrink-0\">,</span>\n }\n } @empty {\n <span class=\"text-muted\">---</span>\n }\n\n @if (hasMoreItems()) {\n <span\n class=\"absolute flex end-0 h-full cursor-pointer items-center px-1 hover:primary-lighter-surface\"\n (click)=\"showMoreItems()\"\n #moreButton\n >\n <i class=\"fa-light fa-ellipsis-vertical\"></i>\n </span>\n }\n </div>\n} @else {\n <div class=\"relative flex items-
|
|
517
|
+
args: [{ selector: 'axp-repeater-widget-column', changeDetection: ChangeDetectionStrategy.OnPush, imports: [AXBadgeModule, AXButtonModule, AXPopoverModule, AXPWidgetCoreModule], providers: [AXPWidgetCoreService, AXPContextStore], inputs: ['rawValue', 'rowData'], template: "@if (useTextDisplay()) {\n <div class=\"relative flex min-w-0 items-center gap-1\">\n @for (text of visibleDisplayTexts(); track $index) {\n <span class=\"truncate\">{{ text }}</span>\n @if ($index < visibleDisplayTexts().length - 1) {\n <span class=\"text-muted shrink-0\">,</span>\n }\n } @empty {\n <span class=\"text-muted\">---</span>\n }\n\n @if (hasMoreItems()) {\n <span\n class=\"absolute flex end-0 h-full cursor-pointer items-center px-1 hover:primary-lighter-surface\"\n (click)=\"showMoreItems()\"\n #moreButton\n >\n <i class=\"fa-light fa-ellipsis-vertical\"></i>\n </span>\n }\n </div>\n} @else {\n <div class=\"relative flex min-w-0 flex-col items-stretch gap-0.5\">\n @for (item of visibleItems(); track $index) {\n @if (childWidgetNode) {\n <ng-container\n axp-widget-renderer\n [node]=\"getItemNode(item, $index)!\"\n [mode]=\"'view'\"\n [parentNode]=\"null\"\n [index]=\"$index\"\n ></ng-container>\n }\n } @empty {\n <span class=\"text-muted\">---</span>\n }\n\n @if (hasMoreItems()) {\n <span\n class=\"absolute flex end-0 h-full cursor-pointer items-center px-1 hover:primary-lighter-surface\"\n (click)=\"showMoreItems()\"\n #moreButton\n >\n <i class=\"fa-light fa-ellipsis-vertical\"></i>\n </span>\n }\n </div>\n}\n\n<ax-popover [openOn]=\"'manual'\" #morePopover (openChange)=\"onMorePopoverOpenChange($event)\">\n <div class=\"lightest-surface min-w-[280px] rounded-lg border p-4 shadow-lg\">\n <div class=\"mb-4 border-b pb-2\">\n <h3 class=\"text-base font-semibold\">All {{ popoverItemCount() }} Items</h3>\n </div>\n <div class=\"max-h-64 flex flex-col gap-3 overflow-auto\" style=\"max-height: max(30dvh, 10rem)\">\n @if (useTextDisplay()) {\n @for (text of resolvedDisplayTexts(); track $index) {\n <div class=\"truncate\">{{ text }}</div>\n }\n } @else {\n @for (item of allItems(); track $index) {\n <div>\n @if (childWidgetNode) {\n <ng-container\n axp-widget-renderer\n [node]=\"getItemNode(item, $index)!\"\n [mode]=\"'view'\"\n [parentNode]=\"null\"\n [index]=\"$index\"\n ></ng-container>\n }\n </div>\n }\n }\n </div>\n </div>\n</ax-popover>\n" }]
|
|
518
518
|
}], propDecorators: { rawValueInput: [{
|
|
519
519
|
type: Input,
|
|
520
520
|
args: ['rawValue']
|
|
@@ -524,4 +524,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
524
524
|
}], moreButton: [{ type: i0.ViewChild, args: ['moreButton', { isSignal: true }] }], morePopover: [{ type: i0.ViewChild, args: ['morePopover', { isSignal: true }] }] } });
|
|
525
525
|
|
|
526
526
|
export { AXPRepeaterWidgetColumnComponent };
|
|
527
|
-
//# sourceMappingURL=acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-
|
|
527
|
+
//# sourceMappingURL=acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-4mX8aYzA.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-3CO4xJB3.mjs","sources":["../../../../../libs/framework/client/layout/widgets/src/lib/widgets/layout/repeater/repeater-column-display.util.ts","../../../../../libs/framework/client/layout/widgets/src/lib/widgets/layout/repeater/repeater-widget-column.component.ts","../../../../../libs/framework/client/layout/widgets/src/lib/widgets/layout/repeater/repeater-widget-column.component.html"],"sourcesContent":["import { type AXPMultiLanguageString, type AXPWidgetNode, AXPWidgetsList } from '@acorex-platform/framework-shared/core';\nimport { isValidMultiLanguageObject, resolveMultiLanguageString } from '@acorex/core/translation';\n\nimport type { AXPRepeaterEntityByKeyLookup } from './repeater-entity-lookup.token';\nimport { get, isNil } from 'lodash-es';\n\n//#region ---- Types ----\n\nexport interface RepeaterLookupColumnHint {\n entity: string;\n valueField: string;\n textField: string;\n fkPath: string;\n displayPath?: string;\n}\n\n//#endregion\n\n//#region ---- Constants ----\n\nconst LAYOUT_WIDGET_TYPES = new Set<string>(Object.values(AXPWidgetsList.Layouts));\n\nconst LOOKUP_WIDGET_TYPE = AXPWidgetsList.Editors.LookupBox;\n\nconst NESTED_DISPLAY_FIELDS = ['title', 'name', 'displayName', 'label', 'text', 'code'] as const;\n\nconst SKIP_ITEM_ROOT_KEYS = new Set(['id', 'startDate', 'endDate', '__meta__']);\n\n//#endregion\n\n//#region ---- Raw value normalization ----\n\n/**\n * Normalizes repeater column values from grid rows (array, single object, or JSON string).\n */\nexport function normalizeRepeaterColumnItems(raw: unknown, rowData?: unknown, dataPath?: string): unknown[] {\n let value = raw;\n\n if (isNil(value) && rowData != null && dataPath) {\n value = get(rowData, dataPath);\n }\n\n if (typeof value === 'string') {\n const trimmed = value.trim();\n if (trimmed.startsWith('[') || trimmed.startsWith('{')) {\n try {\n value = JSON.parse(trimmed);\n } catch {\n return trimmed ? [trimmed] : [];\n }\n } else if (trimmed) {\n return [trimmed];\n } else {\n return [];\n }\n }\n\n if (isNil(value)) {\n return [];\n }\n\n return (Array.isArray(value) ? value : [value]).filter((item) => item != null);\n}\n\nfunction resolveLookupFkValue(item: unknown, hint: RepeaterLookupColumnHint): unknown {\n if (item == null || typeof item !== 'object') {\n return undefined;\n }\n\n const direct = get(item, hint.fkPath);\n if (direct != null && direct !== '') {\n if (typeof direct === 'object') {\n return get(direct, hint.valueField) ?? get(direct, 'id');\n }\n return direct;\n }\n\n if (hint.fkPath.endsWith('Id')) {\n const base = hint.fkPath.slice(0, -2);\n const nestedId = get(item, `${base}.id`);\n if (nestedId != null && nestedId !== '') {\n return nestedId;\n }\n\n const nestedObject = get(item, base);\n if (nestedObject != null && typeof nestedObject === 'object') {\n return get(nestedObject, hint.valueField) ?? get(nestedObject, 'id');\n }\n }\n\n return undefined;\n}\n\nfunction extractNestedDisplayFallback(\n item: Record<string, unknown>,\n locale: string,\n resolveMultiLanguage: (ml: AXPMultiLanguageString) => string,\n): string {\n for (const value of Object.values(item)) {\n if (value == null || typeof value !== 'object' || Array.isArray(value)) {\n continue;\n }\n\n for (const field of NESTED_DISPLAY_FIELDS) {\n const text = resolveDisplayValue(get(value, field), locale, resolveMultiLanguage);\n if (text) {\n return text;\n }\n }\n }\n\n return '';\n}\n\n//#endregion\n\n//#region ---- Column mode resolution ----\n\n/**\n * Layout/container nodes wrap edit UI; leaf editors (contact, text, lookup, …) render per-item in columns.\n */\nexport function isRepeaterLayoutWidgetNode(node: AXPWidgetNode): boolean {\n return LAYOUT_WIDGET_TYPES.has(String(node.type));\n}\n\n/**\n * Collects non-layout widget nodes under a repeater row template (one per editable field).\n */\nexport function collectRepeaterRowEditorLeaves(root: AXPWidgetNode | undefined): AXPWidgetNode[] {\n if (!root) {\n return [];\n }\n\n const leaves: AXPWidgetNode[] = [];\n\n const visit = (node: AXPWidgetNode): void => {\n const children = node.children ?? [];\n\n if (!isRepeaterLayoutWidgetNode(node)) {\n leaves.push(node);\n return;\n }\n\n for (const child of children) {\n visit(child);\n }\n };\n\n visit(root);\n return leaves;\n}\n\n/**\n * Widget column when the row template is a single leaf editor (e.g. ContactBox).\n * Text column when the row is a multi-field layout (e.g. GridLayout with lookup + dates).\n */\nexport function resolveRepeaterColumnDisplayMode(rowTemplate: AXPWidgetNode | undefined): 'widget' | 'text' {\n if (!rowTemplate) {\n return 'text';\n }\n\n if (!isRepeaterLayoutWidgetNode(rowTemplate)) {\n return 'widget';\n }\n\n return collectRepeaterRowEditorLeaves(rowTemplate).length === 1 ? 'widget' : 'text';\n}\n\n/**\n * Node passed to `axp-widget-renderer` for widget-mode columns (direct leaf or single nested editor).\n */\nexport function resolveRepeaterWidgetColumnNode(rowTemplate: AXPWidgetNode | undefined): AXPWidgetNode | undefined {\n if (!rowTemplate) {\n return undefined;\n }\n\n if (!isRepeaterLayoutWidgetNode(rowTemplate)) {\n return rowTemplate;\n }\n\n const leaves = collectRepeaterRowEditorLeaves(rowTemplate);\n return leaves.length === 1 ? leaves[0] : undefined;\n}\n\n//#endregion\n\n//#region ---- Text display inference ----\n\nfunction flattenRepeaterRowNodes(root: AXPWidgetNode | undefined): AXPWidgetNode[] {\n if (!root) {\n return [];\n }\n\n const nodes: AXPWidgetNode[] = [];\n const visit = (node: AXPWidgetNode): void => {\n nodes.push(node);\n for (const child of node.children ?? []) {\n visit(child);\n }\n };\n visit(root);\n return nodes;\n}\n\nfunction isLookupWidget(node: AXPWidgetNode): boolean {\n return String(node.type) === LOOKUP_WIDGET_TYPE;\n}\n\nfunction resolveLookupExposeDisplayPath(node: AXPWidgetNode): string | undefined {\n const expose = node.options?.['expose'] as Array<{ source?: string; target?: string }> | undefined;\n const textField = String(node.options?.['textField'] ?? 'title').trim() || 'title';\n\n if (expose?.length) {\n const preferred = expose.find((entry) => entry.source === textField && entry.target?.trim());\n if (preferred?.target) {\n return preferred.target.trim();\n }\n\n const titleTarget = expose.find(\n (entry) =>\n entry.target?.trim() &&\n (entry.source === 'title' || entry.target.endsWith('.title') || entry.target === 'title'),\n );\n if (titleTarget?.target) {\n return titleTarget.target.trim();\n }\n\n const firstTarget = expose.find((entry) => entry.target?.trim());\n if (firstTarget?.target) {\n return firstTarget.target.trim();\n }\n }\n\n const binding = String(node.path ?? node.name ?? '').trim();\n if (binding.endsWith('Id')) {\n const base = binding.slice(0, -2);\n if (base) {\n return `${base}.${textField}`;\n }\n }\n\n return undefined;\n}\n\nexport function inferRepeaterDisplayPathFromTemplate(rowTemplate: AXPWidgetNode | undefined): string | undefined {\n return resolveRepeaterLookupColumnHint(rowTemplate)?.displayPath;\n}\n\n/**\n * Lookup metadata from the repeater row template (used to hydrate FK ids in list rows).\n */\nexport function resolveRepeaterLookupColumnHint(rowTemplate: AXPWidgetNode | undefined): RepeaterLookupColumnHint | undefined {\n for (const node of flattenRepeaterRowNodes(rowTemplate)) {\n if (!isLookupWidget(node)) {\n continue;\n }\n\n const entity = String(node.options?.['entity'] ?? '').trim();\n const fkPath = String(node.path ?? node.name ?? '').trim();\n if (!entity || !fkPath) {\n continue;\n }\n\n return {\n entity,\n valueField: String(node.options?.['valueField'] ?? 'id').trim() || 'id',\n textField: String(node.options?.['textField'] ?? 'title').trim() || 'title',\n fkPath,\n displayPath: resolveLookupExposeDisplayPath(node),\n };\n }\n\n return undefined;\n}\n\nexport function inferRepeaterDisplayPathFromItem(item: unknown): string | undefined {\n if (item == null || typeof item !== 'object' || Array.isArray(item)) {\n return undefined;\n }\n\n const record = item as Record<string, unknown>;\n\n for (const [key, value] of Object.entries(record)) {\n if (SKIP_ITEM_ROOT_KEYS.has(key) || key.endsWith('Id')) {\n continue;\n }\n if (value == null || typeof value !== 'object' || Array.isArray(value)) {\n continue;\n }\n\n for (const field of NESTED_DISPLAY_FIELDS) {\n if (!isNil(get(value, field))) {\n return `${key}.${field}`;\n }\n }\n }\n\n for (const field of NESTED_DISPLAY_FIELDS) {\n if (!isNil(get(record, field))) {\n return field;\n }\n }\n\n return undefined;\n}\n\nexport function resolveRepeaterItemDisplayPath(\n rowTemplate: AXPWidgetNode | undefined,\n sampleItem?: unknown,\n): string | undefined {\n return inferRepeaterDisplayPathFromTemplate(rowTemplate) ?? inferRepeaterDisplayPathFromItem(sampleItem);\n}\n\nfunction resolveDisplayValue(\n value: unknown,\n locale: string,\n resolveMultiLanguage: (ml: AXPMultiLanguageString) => string,\n): string {\n if (isNil(value)) {\n return '';\n }\n\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n return String(value).trim();\n }\n\n if (typeof value === 'object' && !Array.isArray(value)) {\n if (isValidMultiLanguageObject(value)) {\n return resolveMultiLanguage(value as AXPMultiLanguageString).trim();\n }\n\n const resolved = resolveMultiLanguageString(value as AXPMultiLanguageString, locale).trim();\n if (resolved && resolved !== '[object Object]') {\n return resolved;\n }\n }\n\n return '';\n}\n\nexport function extractRepeaterItemDisplayText(\n item: unknown,\n displayPath: string | undefined,\n locale: string,\n resolveMultiLanguage: (ml: AXPMultiLanguageString) => string,\n): string {\n if (item == null) {\n return '';\n }\n\n if (typeof item === 'string' || typeof item === 'number' || typeof item === 'boolean') {\n return String(item).trim();\n }\n\n if (typeof item !== 'object') {\n return '';\n }\n\n const path = displayPath ?? inferRepeaterDisplayPathFromItem(item);\n if (path) {\n const fromPath = resolveDisplayValue(get(item, path), locale, resolveMultiLanguage);\n if (fromPath) {\n return fromPath;\n }\n }\n\n return extractNestedDisplayFallback(item as Record<string, unknown>, locale, resolveMultiLanguage);\n}\n\nexport function extractRepeaterDisplayTexts(\n items: unknown[],\n rowTemplate: AXPWidgetNode | undefined,\n locale: string,\n resolveMultiLanguage: (ml: AXPMultiLanguageString) => string,\n): string[] {\n const filtered = items.filter((item) => item != null);\n if (filtered.length === 0) {\n return [];\n }\n\n const displayPath = resolveRepeaterItemDisplayPath(rowTemplate, filtered[0]);\n\n return filtered\n .map((item) => extractRepeaterItemDisplayText(item, displayPath, locale, resolveMultiLanguage))\n .filter((text) => text.length > 0);\n}\n\n/**\n * Resolves repeater column labels, hydrating lookup FK ids when list rows omit nested snapshots.\n */\nexport async function resolveRepeaterDisplayTextsWithHydration(\n items: unknown[],\n rowTemplate: AXPWidgetNode | undefined,\n entityLookup: AXPRepeaterEntityByKeyLookup | undefined,\n locale: string,\n resolveMultiLanguage: (ml: AXPMultiLanguageString) => string,\n): Promise<string[]> {\n const filtered = items.filter((item) => item != null);\n if (filtered.length === 0) {\n return [];\n }\n\n const displayPath = resolveRepeaterItemDisplayPath(rowTemplate, filtered[0]);\n const lookupHint = resolveRepeaterLookupColumnHint(rowTemplate);\n const lookupCache = new Map<string, string>();\n\n const resolveLookupTitle = async (id: unknown): Promise<string> => {\n const hint = lookupHint;\n if (!hint) {\n return '';\n }\n\n if (id != null && typeof id === 'object') {\n const inline = resolveDisplayValue(get(id, hint.textField), locale, resolveMultiLanguage);\n if (inline) {\n return inline;\n }\n }\n\n if (id == null || id === '') {\n return '';\n }\n\n if (!hint.entity.includes('.') || !entityLookup) {\n return '';\n }\n\n const cacheKey = String(id);\n const cached = lookupCache.get(cacheKey);\n if (cached != null) {\n return cached;\n }\n\n try {\n const row = await entityLookup.byKey(hint.entity, cacheKey);\n const text = resolveDisplayValue(get(row, hint.textField), locale, resolveMultiLanguage);\n lookupCache.set(cacheKey, text);\n return text;\n } catch {\n lookupCache.set(cacheKey, '');\n return '';\n }\n };\n\n const texts = await Promise.all(\n filtered.map(async (item) => {\n const inline = extractRepeaterItemDisplayText(item, displayPath, locale, resolveMultiLanguage);\n if (inline) {\n return inline;\n }\n\n if (!lookupHint) {\n return '';\n }\n\n const fkValue = resolveLookupFkValue(item, lookupHint);\n if (fkValue != null && typeof fkValue === 'object') {\n const fromEmbedded = await resolveLookupTitle(fkValue);\n if (fromEmbedded) {\n return fromEmbedded;\n }\n }\n\n return resolveLookupTitle(fkValue);\n }),\n );\n\n return texts.filter((text) => text.length > 0);\n}\n\n//#endregion\n","import { AXBadgeModule } from '@acorex/components/badge';\nimport { AXPColumnWidgetComponent, AXPWidgetCoreModule, AXPWidgetCoreService } from '@acorex-platform/framework-client/layout/widget-core';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXPopoverComponent, AXPopoverModule } from '@acorex/components/popover';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPMultiLanguageString, type AXPWidgetNode } from '@acorex-platform/framework-shared/core';\nimport { AXPContextStore } from '@acorex-platform/framework-client/core';\nimport {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Input,\n OnChanges,\n SimpleChanges,\n computed,\n effect,\n inject,\n signal,\n untracked,\n viewChild,\n} from '@angular/core';\n\nimport {\n extractRepeaterDisplayTexts,\n normalizeRepeaterColumnItems,\n resolveRepeaterColumnDisplayMode,\n resolveRepeaterDisplayTextsWithHydration,\n resolveRepeaterWidgetColumnNode,\n} from './repeater-column-display.util';\nimport { AXP_REPEATER_ENTITY_BY_KEY_LOOKUP } from './repeater-entity-lookup.token';\n\n@Component({\n selector: 'axp-repeater-widget-column',\n templateUrl: './repeater-widget-column.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AXBadgeModule, AXButtonModule, AXPopoverModule, AXPWidgetCoreModule],\n providers: [AXPWidgetCoreService, AXPContextStore],\n inputs: ['rawValue', 'rowData'],\n})\nexport class AXPRepeaterWidgetColumnComponent extends AXPColumnWidgetComponent<any[]> implements OnChanges {\n //#region ---- Services & Dependencies ----\n\n private readonly translation = inject(AXTranslationService);\n private readonly entityLookup = inject(AXP_REPEATER_ENTITY_BY_KEY_LOOKUP, { optional: true });\n\n //#endregion\n\n //#region ---- Inputs ----\n\n private readonly rawValueSignal = signal<unknown>(null);\n private readonly rowDataSignal = signal<unknown>(null);\n\n @Input('rawValue')\n set rawValueInput(value: unknown) {\n this.rawValueSignal.set(value);\n }\n\n @Input('rowData')\n set rowDataInput(value: unknown) {\n this.rowDataSignal.set(value);\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['rawValue']) {\n this.rawValueSignal.set(changes['rawValue'].currentValue);\n }\n if (changes['rowData']) {\n this.rowDataSignal.set(changes['rowData'].currentValue);\n }\n }\n\n //#endregion\n\n //#region ---- View Children ----\n\n protected moreButton = viewChild<ElementRef>('moreButton');\n protected morePopover = viewChild<AXPopoverComponent>('morePopover');\n\n //#endregion\n\n //#region ---- Properties ----\n\n protected maxVisible: number = this.options['maxVisible'] ?? 2;\n\n protected get rowTemplate(): AXPWidgetNode | undefined {\n return this.options['children']?.[0];\n }\n\n protected get columnDisplayMode(): 'widget' | 'text' {\n return resolveRepeaterColumnDisplayMode(this.rowTemplate);\n }\n\n protected get childWidgetNode(): AXPWidgetNode | undefined {\n return this.columnDisplayMode === 'widget' ? resolveRepeaterWidgetColumnNode(this.rowTemplate) : undefined;\n }\n\n //#endregion\n\n //#region ---- Signals ----\n\n protected isMorePopoverOpen = signal(false);\n protected resolvedDisplayTexts = signal<string[]>([]);\n\n //#endregion\n\n //#region ---- Node Cache ----\n\n private nodeCache = new Map<number, AXPWidgetNode>();\n private lastItems: unknown[] = [];\n private hydrateRequestId = 0;\n\n private clearCacheIfNeeded(): void {\n const currentItems = this.allItems();\n if (\n currentItems.length !== this.lastItems.length ||\n currentItems.some((item, idx) => item !== this.lastItems[idx])\n ) {\n this.nodeCache.clear();\n this.lastItems = [...currentItems];\n }\n }\n\n //#endregion\n\n //#region ---- Effects ----\n\n private readonly hydrateDisplayTexts = effect((onCleanup) => {\n if (this.columnDisplayMode !== 'text') {\n untracked(() => this.resolvedDisplayTexts.set([]));\n return;\n }\n\n const items = this.displayItems();\n const locale = this.translation.getActiveLang();\n const resolveMultiLanguage = (value: AXPMultiLanguageString) => this.translation.resolve(value);\n\n const syncTexts = extractRepeaterDisplayTexts(items, this.rowTemplate, locale, resolveMultiLanguage);\n untracked(() => this.resolvedDisplayTexts.set(syncTexts));\n\n const requestId = ++this.hydrateRequestId;\n let cancelled = false;\n onCleanup(() => {\n cancelled = true;\n });\n\n void resolveRepeaterDisplayTextsWithHydration(\n items,\n this.rowTemplate,\n this.entityLookup ?? undefined,\n locale,\n resolveMultiLanguage,\n ).then((texts) => {\n if (!cancelled && requestId === this.hydrateRequestId) {\n this.resolvedDisplayTexts.set(texts);\n }\n });\n });\n\n //#endregion\n\n //#region ---- Computed Properties ----\n\n protected useTextDisplay = computed(() => this.columnDisplayMode === 'text');\n\n protected displayItems = computed(() =>\n normalizeRepeaterColumnItems(\n this.rawValueSignal(),\n this.rowDataSignal(),\n this.path ?? (this.options['columnName'] as string | undefined),\n ),\n );\n\n protected allItems = computed(() => this.displayItems());\n\n protected visibleItems = computed(() => this.allItems().slice(0, this.maxVisible));\n\n protected visibleDisplayTexts = computed(() => this.resolvedDisplayTexts().slice(0, this.maxVisible));\n\n protected hasMoreItems = computed(() => {\n if (this.useTextDisplay()) {\n return this.resolvedDisplayTexts().length > this.maxVisible;\n }\n return this.allItems().length > this.maxVisible;\n });\n\n protected popoverItemCount = computed(() =>\n this.useTextDisplay() ? this.resolvedDisplayTexts().length : this.allItems().length,\n );\n\n //#endregion\n\n //#region ---- UI Handlers ----\n\n protected showMoreItems(): void {\n this.openMorePopover();\n }\n\n protected onMorePopoverOpenChange(event: unknown): void {\n this.isMorePopoverOpen.set(!!event);\n }\n\n protected getItemNode(item: unknown, index: number): AXPWidgetNode | undefined {\n const childWidgetNode = this.childWidgetNode;\n if (!childWidgetNode) {\n return undefined;\n }\n\n this.clearCacheIfNeeded();\n\n const cachedNode = this.nodeCache.get(index);\n if (cachedNode) {\n return cachedNode;\n }\n\n const child = childWidgetNode;\n const childBindingRaw = child.path ?? child.name;\n const childBinding =\n childBindingRaw != null && String(childBindingRaw).trim() !== '' ? String(childBindingRaw).trim() : '';\n const baseItemPath = `${this.path}[${index}]`;\n const itemPath = childBinding && childBinding !== '.' ? `${baseItemPath}.${childBinding}` : baseItemPath;\n\n const node: AXPWidgetNode = {\n ...child,\n path: itemPath,\n defaultValue: item,\n options: {\n ...child.options,\n rawValue: item,\n rowData: this.rowDataSignal(),\n },\n };\n\n this.nodeCache.set(index, node);\n return node;\n }\n\n //#endregion\n\n //#region ---- Private Methods ----\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 //#endregion\n}\n","@if (useTextDisplay()) {\n <div class=\"relative flex min-w-0 items-center gap-1\">\n @for (text of visibleDisplayTexts(); track $index) {\n <span class=\"truncate\">{{ text }}</span>\n @if ($index < visibleDisplayTexts().length - 1) {\n <span class=\"text-muted shrink-0\">,</span>\n }\n } @empty {\n <span class=\"text-muted\">---</span>\n }\n\n @if (hasMoreItems()) {\n <span\n class=\"absolute flex end-0 h-full cursor-pointer items-center px-1 hover:primary-lighter-surface\"\n (click)=\"showMoreItems()\"\n #moreButton\n >\n <i class=\"fa-light fa-ellipsis-vertical\"></i>\n </span>\n }\n </div>\n} @else {\n <div class=\"relative flex items-center gap-1\">\n @for (item of visibleItems(); track $index) {\n @if (childWidgetNode) {\n <ng-container\n axp-widget-renderer\n [node]=\"getItemNode(item, $index)!\"\n [mode]=\"'view'\"\n [parentNode]=\"null\"\n [index]=\"$index\"\n ></ng-container>\n }\n } @empty {\n <span class=\"text-muted\">---</span>\n }\n\n @if (hasMoreItems()) {\n <span\n class=\"absolute flex end-0 h-full cursor-pointer items-center px-1 hover:primary-lighter-surface\"\n (click)=\"showMoreItems()\"\n #moreButton\n >\n <i class=\"fa-light fa-ellipsis-vertical\"></i>\n </span>\n }\n </div>\n}\n\n<ax-popover [openOn]=\"'manual'\" #morePopover (openChange)=\"onMorePopoverOpenChange($event)\">\n <div class=\"lightest-surface min-w-[280px] rounded-lg border p-4 shadow-lg\">\n <div class=\"mb-4 border-b pb-2\">\n <h3 class=\"text-base font-semibold\">All {{ popoverItemCount() }} Items</h3>\n </div>\n <div class=\"max-h-64 flex flex-col gap-3 overflow-auto\" style=\"max-height: max(30dvh, 10rem)\">\n @if (useTextDisplay()) {\n @for (text of resolvedDisplayTexts(); track $index) {\n <div class=\"truncate\">{{ text }}</div>\n }\n } @else {\n @for (item of allItems(); track $index) {\n <div>\n @if (childWidgetNode) {\n <ng-container\n axp-widget-renderer\n [node]=\"getItemNode(item, $index)!\"\n [mode]=\"'view'\"\n [parentNode]=\"null\"\n [index]=\"$index\"\n ></ng-container>\n }\n </div>\n }\n }\n </div>\n </div>\n</ax-popover>\n"],"names":["i2"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-4mX8aYzA.mjs","sources":["../../../../../libs/framework/client/layout/widgets/src/lib/widgets/layout/repeater/repeater-column-display.util.ts","../../../../../libs/framework/client/layout/widgets/src/lib/widgets/layout/repeater/repeater-widget-column.component.ts","../../../../../libs/framework/client/layout/widgets/src/lib/widgets/layout/repeater/repeater-widget-column.component.html"],"sourcesContent":["import { type AXPMultiLanguageString, type AXPWidgetNode, AXPWidgetsList } from '@acorex-platform/framework-shared/core';\nimport { isValidMultiLanguageObject, resolveMultiLanguageString } from '@acorex/core/translation';\n\nimport type { AXPRepeaterEntityByKeyLookup } from './repeater-entity-lookup.token';\nimport { get, isNil } from 'lodash-es';\n\n//#region ---- Types ----\n\nexport interface RepeaterLookupColumnHint {\n entity: string;\n valueField: string;\n textField: string;\n fkPath: string;\n displayPath?: string;\n}\n\n//#endregion\n\n//#region ---- Constants ----\n\nconst LAYOUT_WIDGET_TYPES = new Set<string>(Object.values(AXPWidgetsList.Layouts));\n\nconst LOOKUP_WIDGET_TYPE = AXPWidgetsList.Editors.LookupBox;\n\nconst NESTED_DISPLAY_FIELDS = ['title', 'name', 'displayName', 'label', 'text', 'code'] as const;\n\nconst SKIP_ITEM_ROOT_KEYS = new Set(['id', 'startDate', 'endDate', '__meta__']);\n\n//#endregion\n\n//#region ---- Raw value normalization ----\n\n/**\n * Normalizes repeater column values from grid rows (array, single object, or JSON string).\n */\nexport function normalizeRepeaterColumnItems(raw: unknown, rowData?: unknown, dataPath?: string): unknown[] {\n let value = raw;\n\n if (isNil(value) && rowData != null && dataPath) {\n value = get(rowData, dataPath);\n }\n\n if (typeof value === 'string') {\n const trimmed = value.trim();\n if (trimmed.startsWith('[') || trimmed.startsWith('{')) {\n try {\n value = JSON.parse(trimmed);\n } catch {\n return trimmed ? [trimmed] : [];\n }\n } else if (trimmed) {\n return [trimmed];\n } else {\n return [];\n }\n }\n\n if (isNil(value)) {\n return [];\n }\n\n return (Array.isArray(value) ? value : [value]).filter((item) => item != null);\n}\n\nfunction resolveLookupFkValue(item: unknown, hint: RepeaterLookupColumnHint): unknown {\n if (item == null || typeof item !== 'object') {\n return undefined;\n }\n\n const direct = get(item, hint.fkPath);\n if (direct != null && direct !== '') {\n if (typeof direct === 'object') {\n return get(direct, hint.valueField) ?? get(direct, 'id');\n }\n return direct;\n }\n\n if (hint.fkPath.endsWith('Id')) {\n const base = hint.fkPath.slice(0, -2);\n const nestedId = get(item, `${base}.id`);\n if (nestedId != null && nestedId !== '') {\n return nestedId;\n }\n\n const nestedObject = get(item, base);\n if (nestedObject != null && typeof nestedObject === 'object') {\n return get(nestedObject, hint.valueField) ?? get(nestedObject, 'id');\n }\n }\n\n return undefined;\n}\n\nfunction extractNestedDisplayFallback(\n item: Record<string, unknown>,\n locale: string,\n resolveMultiLanguage: (ml: AXPMultiLanguageString) => string,\n): string {\n for (const value of Object.values(item)) {\n if (value == null || typeof value !== 'object' || Array.isArray(value)) {\n continue;\n }\n\n for (const field of NESTED_DISPLAY_FIELDS) {\n const text = resolveDisplayValue(get(value, field), locale, resolveMultiLanguage);\n if (text) {\n return text;\n }\n }\n }\n\n return '';\n}\n\n//#endregion\n\n//#region ---- Column mode resolution ----\n\n/**\n * Layout/container nodes wrap edit UI; leaf editors (contact, text, lookup, …) render per-item in columns.\n */\nexport function isRepeaterLayoutWidgetNode(node: AXPWidgetNode): boolean {\n return LAYOUT_WIDGET_TYPES.has(String(node.type));\n}\n\n/**\n * Collects non-layout widget nodes under a repeater row template (one per editable field).\n */\nexport function collectRepeaterRowEditorLeaves(root: AXPWidgetNode | undefined): AXPWidgetNode[] {\n if (!root) {\n return [];\n }\n\n const leaves: AXPWidgetNode[] = [];\n\n const visit = (node: AXPWidgetNode): void => {\n const children = node.children ?? [];\n\n if (!isRepeaterLayoutWidgetNode(node)) {\n leaves.push(node);\n return;\n }\n\n for (const child of children) {\n visit(child);\n }\n };\n\n visit(root);\n return leaves;\n}\n\n/**\n * Widget column when the row template is a single leaf editor (e.g. ContactBox).\n * Text column when the row is a multi-field layout (e.g. GridLayout with lookup + dates).\n */\nexport function resolveRepeaterColumnDisplayMode(rowTemplate: AXPWidgetNode | undefined): 'widget' | 'text' {\n if (!rowTemplate) {\n return 'text';\n }\n\n if (!isRepeaterLayoutWidgetNode(rowTemplate)) {\n return 'widget';\n }\n\n return collectRepeaterRowEditorLeaves(rowTemplate).length === 1 ? 'widget' : 'text';\n}\n\n/**\n * Node passed to `axp-widget-renderer` for widget-mode columns (direct leaf or single nested editor).\n */\nexport function resolveRepeaterWidgetColumnNode(rowTemplate: AXPWidgetNode | undefined): AXPWidgetNode | undefined {\n if (!rowTemplate) {\n return undefined;\n }\n\n if (!isRepeaterLayoutWidgetNode(rowTemplate)) {\n return rowTemplate;\n }\n\n const leaves = collectRepeaterRowEditorLeaves(rowTemplate);\n return leaves.length === 1 ? leaves[0] : undefined;\n}\n\n//#endregion\n\n//#region ---- Text display inference ----\n\nfunction flattenRepeaterRowNodes(root: AXPWidgetNode | undefined): AXPWidgetNode[] {\n if (!root) {\n return [];\n }\n\n const nodes: AXPWidgetNode[] = [];\n const visit = (node: AXPWidgetNode): void => {\n nodes.push(node);\n for (const child of node.children ?? []) {\n visit(child);\n }\n };\n visit(root);\n return nodes;\n}\n\nfunction isLookupWidget(node: AXPWidgetNode): boolean {\n return String(node.type) === LOOKUP_WIDGET_TYPE;\n}\n\nfunction resolveLookupExposeDisplayPath(node: AXPWidgetNode): string | undefined {\n const expose = node.options?.['expose'] as Array<{ source?: string; target?: string }> | undefined;\n const textField = String(node.options?.['textField'] ?? 'title').trim() || 'title';\n\n if (expose?.length) {\n const preferred = expose.find((entry) => entry.source === textField && entry.target?.trim());\n if (preferred?.target) {\n return preferred.target.trim();\n }\n\n const titleTarget = expose.find(\n (entry) =>\n entry.target?.trim() &&\n (entry.source === 'title' || entry.target.endsWith('.title') || entry.target === 'title'),\n );\n if (titleTarget?.target) {\n return titleTarget.target.trim();\n }\n\n const firstTarget = expose.find((entry) => entry.target?.trim());\n if (firstTarget?.target) {\n return firstTarget.target.trim();\n }\n }\n\n const binding = String(node.path ?? node.name ?? '').trim();\n if (binding.endsWith('Id')) {\n const base = binding.slice(0, -2);\n if (base) {\n return `${base}.${textField}`;\n }\n }\n\n return undefined;\n}\n\nexport function inferRepeaterDisplayPathFromTemplate(rowTemplate: AXPWidgetNode | undefined): string | undefined {\n return resolveRepeaterLookupColumnHint(rowTemplate)?.displayPath;\n}\n\n/**\n * Lookup metadata from the repeater row template (used to hydrate FK ids in list rows).\n */\nexport function resolveRepeaterLookupColumnHint(rowTemplate: AXPWidgetNode | undefined): RepeaterLookupColumnHint | undefined {\n for (const node of flattenRepeaterRowNodes(rowTemplate)) {\n if (!isLookupWidget(node)) {\n continue;\n }\n\n const entity = String(node.options?.['entity'] ?? '').trim();\n const fkPath = String(node.path ?? node.name ?? '').trim();\n if (!entity || !fkPath) {\n continue;\n }\n\n return {\n entity,\n valueField: String(node.options?.['valueField'] ?? 'id').trim() || 'id',\n textField: String(node.options?.['textField'] ?? 'title').trim() || 'title',\n fkPath,\n displayPath: resolveLookupExposeDisplayPath(node),\n };\n }\n\n return undefined;\n}\n\nexport function inferRepeaterDisplayPathFromItem(item: unknown): string | undefined {\n if (item == null || typeof item !== 'object' || Array.isArray(item)) {\n return undefined;\n }\n\n const record = item as Record<string, unknown>;\n\n for (const [key, value] of Object.entries(record)) {\n if (SKIP_ITEM_ROOT_KEYS.has(key) || key.endsWith('Id')) {\n continue;\n }\n if (value == null || typeof value !== 'object' || Array.isArray(value)) {\n continue;\n }\n\n for (const field of NESTED_DISPLAY_FIELDS) {\n if (!isNil(get(value, field))) {\n return `${key}.${field}`;\n }\n }\n }\n\n for (const field of NESTED_DISPLAY_FIELDS) {\n if (!isNil(get(record, field))) {\n return field;\n }\n }\n\n return undefined;\n}\n\nexport function resolveRepeaterItemDisplayPath(\n rowTemplate: AXPWidgetNode | undefined,\n sampleItem?: unknown,\n): string | undefined {\n return inferRepeaterDisplayPathFromTemplate(rowTemplate) ?? inferRepeaterDisplayPathFromItem(sampleItem);\n}\n\nfunction resolveDisplayValue(\n value: unknown,\n locale: string,\n resolveMultiLanguage: (ml: AXPMultiLanguageString) => string,\n): string {\n if (isNil(value)) {\n return '';\n }\n\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n return String(value).trim();\n }\n\n if (typeof value === 'object' && !Array.isArray(value)) {\n if (isValidMultiLanguageObject(value)) {\n return resolveMultiLanguage(value as AXPMultiLanguageString).trim();\n }\n\n const resolved = resolveMultiLanguageString(value as AXPMultiLanguageString, locale).trim();\n if (resolved && resolved !== '[object Object]') {\n return resolved;\n }\n }\n\n return '';\n}\n\nexport function extractRepeaterItemDisplayText(\n item: unknown,\n displayPath: string | undefined,\n locale: string,\n resolveMultiLanguage: (ml: AXPMultiLanguageString) => string,\n): string {\n if (item == null) {\n return '';\n }\n\n if (typeof item === 'string' || typeof item === 'number' || typeof item === 'boolean') {\n return String(item).trim();\n }\n\n if (typeof item !== 'object') {\n return '';\n }\n\n const path = displayPath ?? inferRepeaterDisplayPathFromItem(item);\n if (path) {\n const fromPath = resolveDisplayValue(get(item, path), locale, resolveMultiLanguage);\n if (fromPath) {\n return fromPath;\n }\n }\n\n return extractNestedDisplayFallback(item as Record<string, unknown>, locale, resolveMultiLanguage);\n}\n\nexport function extractRepeaterDisplayTexts(\n items: unknown[],\n rowTemplate: AXPWidgetNode | undefined,\n locale: string,\n resolveMultiLanguage: (ml: AXPMultiLanguageString) => string,\n): string[] {\n const filtered = items.filter((item) => item != null);\n if (filtered.length === 0) {\n return [];\n }\n\n const displayPath = resolveRepeaterItemDisplayPath(rowTemplate, filtered[0]);\n\n return filtered\n .map((item) => extractRepeaterItemDisplayText(item, displayPath, locale, resolveMultiLanguage))\n .filter((text) => text.length > 0);\n}\n\n/**\n * Resolves repeater column labels, hydrating lookup FK ids when list rows omit nested snapshots.\n */\nexport async function resolveRepeaterDisplayTextsWithHydration(\n items: unknown[],\n rowTemplate: AXPWidgetNode | undefined,\n entityLookup: AXPRepeaterEntityByKeyLookup | undefined,\n locale: string,\n resolveMultiLanguage: (ml: AXPMultiLanguageString) => string,\n): Promise<string[]> {\n const filtered = items.filter((item) => item != null);\n if (filtered.length === 0) {\n return [];\n }\n\n const displayPath = resolveRepeaterItemDisplayPath(rowTemplate, filtered[0]);\n const lookupHint = resolveRepeaterLookupColumnHint(rowTemplate);\n const lookupCache = new Map<string, string>();\n\n const resolveLookupTitle = async (id: unknown): Promise<string> => {\n const hint = lookupHint;\n if (!hint) {\n return '';\n }\n\n if (id != null && typeof id === 'object') {\n const inline = resolveDisplayValue(get(id, hint.textField), locale, resolveMultiLanguage);\n if (inline) {\n return inline;\n }\n }\n\n if (id == null || id === '') {\n return '';\n }\n\n if (!hint.entity.includes('.') || !entityLookup) {\n return '';\n }\n\n const cacheKey = String(id);\n const cached = lookupCache.get(cacheKey);\n if (cached != null) {\n return cached;\n }\n\n try {\n const row = await entityLookup.byKey(hint.entity, cacheKey);\n const text = resolveDisplayValue(get(row, hint.textField), locale, resolveMultiLanguage);\n lookupCache.set(cacheKey, text);\n return text;\n } catch {\n lookupCache.set(cacheKey, '');\n return '';\n }\n };\n\n const texts = await Promise.all(\n filtered.map(async (item) => {\n const inline = extractRepeaterItemDisplayText(item, displayPath, locale, resolveMultiLanguage);\n if (inline) {\n return inline;\n }\n\n if (!lookupHint) {\n return '';\n }\n\n const fkValue = resolveLookupFkValue(item, lookupHint);\n if (fkValue != null && typeof fkValue === 'object') {\n const fromEmbedded = await resolveLookupTitle(fkValue);\n if (fromEmbedded) {\n return fromEmbedded;\n }\n }\n\n return resolveLookupTitle(fkValue);\n }),\n );\n\n return texts.filter((text) => text.length > 0);\n}\n\n//#endregion\n","import { AXBadgeModule } from '@acorex/components/badge';\nimport { AXPColumnWidgetComponent, AXPWidgetCoreModule, AXPWidgetCoreService } from '@acorex-platform/framework-client/layout/widget-core';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXPopoverComponent, AXPopoverModule } from '@acorex/components/popover';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPMultiLanguageString, type AXPWidgetNode } from '@acorex-platform/framework-shared/core';\nimport { AXPContextStore } from '@acorex-platform/framework-client/core';\nimport {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Input,\n OnChanges,\n SimpleChanges,\n computed,\n effect,\n inject,\n signal,\n untracked,\n viewChild,\n} from '@angular/core';\n\nimport {\n extractRepeaterDisplayTexts,\n normalizeRepeaterColumnItems,\n resolveRepeaterColumnDisplayMode,\n resolveRepeaterDisplayTextsWithHydration,\n resolveRepeaterWidgetColumnNode,\n} from './repeater-column-display.util';\nimport { AXP_REPEATER_ENTITY_BY_KEY_LOOKUP } from './repeater-entity-lookup.token';\n\n@Component({\n selector: 'axp-repeater-widget-column',\n templateUrl: './repeater-widget-column.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AXBadgeModule, AXButtonModule, AXPopoverModule, AXPWidgetCoreModule],\n providers: [AXPWidgetCoreService, AXPContextStore],\n inputs: ['rawValue', 'rowData'],\n})\nexport class AXPRepeaterWidgetColumnComponent extends AXPColumnWidgetComponent<any[]> implements OnChanges {\n //#region ---- Services & Dependencies ----\n\n private readonly translation = inject(AXTranslationService);\n private readonly entityLookup = inject(AXP_REPEATER_ENTITY_BY_KEY_LOOKUP, { optional: true });\n\n //#endregion\n\n //#region ---- Inputs ----\n\n private readonly rawValueSignal = signal<unknown>(null);\n private readonly rowDataSignal = signal<unknown>(null);\n\n @Input('rawValue')\n set rawValueInput(value: unknown) {\n this.rawValueSignal.set(value);\n }\n\n @Input('rowData')\n set rowDataInput(value: unknown) {\n this.rowDataSignal.set(value);\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['rawValue']) {\n this.rawValueSignal.set(changes['rawValue'].currentValue);\n }\n if (changes['rowData']) {\n this.rowDataSignal.set(changes['rowData'].currentValue);\n }\n }\n\n //#endregion\n\n //#region ---- View Children ----\n\n protected moreButton = viewChild<ElementRef>('moreButton');\n protected morePopover = viewChild<AXPopoverComponent>('morePopover');\n\n //#endregion\n\n //#region ---- Properties ----\n\n protected maxVisible: number = this.options['maxVisible'] ?? 2;\n\n protected get rowTemplate(): AXPWidgetNode | undefined {\n return this.options['children']?.[0];\n }\n\n protected get columnDisplayMode(): 'widget' | 'text' {\n return resolveRepeaterColumnDisplayMode(this.rowTemplate);\n }\n\n protected get childWidgetNode(): AXPWidgetNode | undefined {\n return this.columnDisplayMode === 'widget' ? resolveRepeaterWidgetColumnNode(this.rowTemplate) : undefined;\n }\n\n //#endregion\n\n //#region ---- Signals ----\n\n protected isMorePopoverOpen = signal(false);\n protected resolvedDisplayTexts = signal<string[]>([]);\n\n //#endregion\n\n //#region ---- Node Cache ----\n\n private nodeCache = new Map<number, AXPWidgetNode>();\n private lastItems: unknown[] = [];\n private hydrateRequestId = 0;\n\n private clearCacheIfNeeded(): void {\n const currentItems = this.allItems();\n if (\n currentItems.length !== this.lastItems.length ||\n currentItems.some((item, idx) => item !== this.lastItems[idx])\n ) {\n this.nodeCache.clear();\n this.lastItems = [...currentItems];\n }\n }\n\n //#endregion\n\n //#region ---- Effects ----\n\n private readonly hydrateDisplayTexts = effect((onCleanup) => {\n if (this.columnDisplayMode !== 'text') {\n untracked(() => this.resolvedDisplayTexts.set([]));\n return;\n }\n\n const items = this.displayItems();\n const locale = this.translation.getActiveLang();\n const resolveMultiLanguage = (value: AXPMultiLanguageString) => this.translation.resolve(value);\n\n const syncTexts = extractRepeaterDisplayTexts(items, this.rowTemplate, locale, resolveMultiLanguage);\n untracked(() => this.resolvedDisplayTexts.set(syncTexts));\n\n const requestId = ++this.hydrateRequestId;\n let cancelled = false;\n onCleanup(() => {\n cancelled = true;\n });\n\n void resolveRepeaterDisplayTextsWithHydration(\n items,\n this.rowTemplate,\n this.entityLookup ?? undefined,\n locale,\n resolveMultiLanguage,\n ).then((texts) => {\n if (!cancelled && requestId === this.hydrateRequestId) {\n this.resolvedDisplayTexts.set(texts);\n }\n });\n });\n\n //#endregion\n\n //#region ---- Computed Properties ----\n\n protected useTextDisplay = computed(() => this.columnDisplayMode === 'text');\n\n protected displayItems = computed(() =>\n normalizeRepeaterColumnItems(\n this.rawValueSignal(),\n this.rowDataSignal(),\n this.path ?? (this.options['columnName'] as string | undefined),\n ),\n );\n\n protected allItems = computed(() => this.displayItems());\n\n protected visibleItems = computed(() => this.allItems().slice(0, this.maxVisible));\n\n protected visibleDisplayTexts = computed(() => this.resolvedDisplayTexts().slice(0, this.maxVisible));\n\n protected hasMoreItems = computed(() => {\n if (this.useTextDisplay()) {\n return this.resolvedDisplayTexts().length > this.maxVisible;\n }\n return this.allItems().length > this.maxVisible;\n });\n\n protected popoverItemCount = computed(() =>\n this.useTextDisplay() ? this.resolvedDisplayTexts().length : this.allItems().length,\n );\n\n //#endregion\n\n //#region ---- UI Handlers ----\n\n protected showMoreItems(): void {\n this.openMorePopover();\n }\n\n protected onMorePopoverOpenChange(event: unknown): void {\n this.isMorePopoverOpen.set(!!event);\n }\n\n protected getItemNode(item: unknown, index: number): AXPWidgetNode | undefined {\n const childWidgetNode = this.childWidgetNode;\n if (!childWidgetNode) {\n return undefined;\n }\n\n this.clearCacheIfNeeded();\n\n const cachedNode = this.nodeCache.get(index);\n if (cachedNode) {\n return cachedNode;\n }\n\n const child = childWidgetNode;\n const childBindingRaw = child.path ?? child.name;\n const childBinding =\n childBindingRaw != null && String(childBindingRaw).trim() !== '' ? String(childBindingRaw).trim() : '';\n const baseItemPath = `${this.path}[${index}]`;\n const itemPath = childBinding && childBinding !== '.' ? `${baseItemPath}.${childBinding}` : baseItemPath;\n\n const node: AXPWidgetNode = {\n ...child,\n path: itemPath,\n defaultValue: item,\n options: {\n ...child.options,\n rawValue: item,\n rowData: this.rowDataSignal(),\n },\n };\n\n this.nodeCache.set(index, node);\n return node;\n }\n\n //#endregion\n\n //#region ---- Private Methods ----\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 //#endregion\n}\n","@if (useTextDisplay()) {\n <div class=\"relative flex min-w-0 items-center gap-1\">\n @for (text of visibleDisplayTexts(); track $index) {\n <span class=\"truncate\">{{ text }}</span>\n @if ($index < visibleDisplayTexts().length - 1) {\n <span class=\"text-muted shrink-0\">,</span>\n }\n } @empty {\n <span class=\"text-muted\">---</span>\n }\n\n @if (hasMoreItems()) {\n <span\n class=\"absolute flex end-0 h-full cursor-pointer items-center px-1 hover:primary-lighter-surface\"\n (click)=\"showMoreItems()\"\n #moreButton\n >\n <i class=\"fa-light fa-ellipsis-vertical\"></i>\n </span>\n }\n </div>\n} @else {\n <div class=\"relative flex min-w-0 flex-col items-stretch gap-0.5\">\n @for (item of visibleItems(); track $index) {\n @if (childWidgetNode) {\n <ng-container\n axp-widget-renderer\n [node]=\"getItemNode(item, $index)!\"\n [mode]=\"'view'\"\n [parentNode]=\"null\"\n [index]=\"$index\"\n ></ng-container>\n }\n } @empty {\n <span class=\"text-muted\">---</span>\n }\n\n @if (hasMoreItems()) {\n <span\n class=\"absolute flex end-0 h-full cursor-pointer items-center px-1 hover:primary-lighter-surface\"\n (click)=\"showMoreItems()\"\n #moreButton\n >\n <i class=\"fa-light fa-ellipsis-vertical\"></i>\n </span>\n }\n </div>\n}\n\n<ax-popover [openOn]=\"'manual'\" #morePopover (openChange)=\"onMorePopoverOpenChange($event)\">\n <div class=\"lightest-surface min-w-[280px] rounded-lg border p-4 shadow-lg\">\n <div class=\"mb-4 border-b pb-2\">\n <h3 class=\"text-base font-semibold\">All {{ popoverItemCount() }} Items</h3>\n </div>\n <div class=\"max-h-64 flex flex-col gap-3 overflow-auto\" style=\"max-height: max(30dvh, 10rem)\">\n @if (useTextDisplay()) {\n @for (text of resolvedDisplayTexts(); track $index) {\n <div class=\"truncate\">{{ text }}</div>\n }\n } @else {\n @for (item of allItems(); track $index) {\n <div>\n @if (childWidgetNode) {\n <ng-container\n axp-widget-renderer\n [node]=\"getItemNode(item, $index)!\"\n [mode]=\"'view'\"\n [parentNode]=\"null\"\n [index]=\"$index\"\n ></ng-container>\n }\n </div>\n }\n }\n </div>\n </div>\n</ax-popover>\n"],"names":["i2"],"mappings":"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"}
|
|
@@ -6,7 +6,7 @@ import * as i1$2 from '@acorex/components/data-table';
|
|
|
6
6
|
import { AXDataTableModule } from '@acorex/components/data-table';
|
|
7
7
|
import * as i2 from '@acorex/components/decorators';
|
|
8
8
|
import { AXDecoratorModule } from '@acorex/components/decorators';
|
|
9
|
-
import * as
|
|
9
|
+
import * as i2$1 from '@acorex/components/form';
|
|
10
10
|
import { AXFormModule } from '@acorex/components/form';
|
|
11
11
|
import { AXBasePageComponent } from '@acorex/components/page';
|
|
12
12
|
import * as i1$4 from '@acorex/core/translation';
|
|
@@ -184,7 +184,7 @@ class AXPTabularDataPopupComponent extends AXBasePageComponent {
|
|
|
184
184
|
</ax-footer>
|
|
185
185
|
</ax-form>
|
|
186
186
|
</axp-widgets-container>
|
|
187
|
-
`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i2.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i2.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXPWidgetCoreModule }, { kind: "component", type: i1$1.AXPWidgetContainerComponent, selector: "axp-widgets-container", inputs: ["context", "functions"], outputs: ["onContextChanged"] }, { kind: "directive", type: i1$1.AXPWidgetRendererDirective, selector: "[axp-widget-renderer]", inputs: ["parentNode", "index", "mode", "node"], outputs: ["onOptionsChanged", "onValueChanged", "onLoad"], exportAs: ["widgetRenderer"] }, { kind: "ngmodule", type: AXDataTableModule }, { kind: "component", type: i1$2.AXDataTableComponent, selector: "ax-data-table", inputs: ["dataSource", "selectedRows", "parentField", "hasChildrenField", "rowDetailsTemplate", "rowCssClass", "cellCssClass", "highlightText", "look", "rowTemplate", "emptyTemplate", "noDataTemplate", "alternative", "showHeader", "fixedHeader", "showFooter", "fixedFooter", "itemHeight", "allowReordering", "paging", "fetchDataMode", "loading", "focusedRow"], outputs: ["selectedRowsChange", "focusedRowChange", "onRowClick", "onRowDbClick", "onColumnsOrderChanged", "onColumnSizeChanged", "onPageChanged"] }, { kind: "component", type: i1$2.AXDataTableTextColumnComponent, selector: "ax-text-column", inputs: ["width", "caption", "allowSorting", "allowResizing", "fixed", "hasTitle", "customExpandIcon", "customCollapseIcon", "dataField", "expandHandler", "wrapText", "cellTemplate", "footerTemplate", "headerTemplate", "format", "formatOptions"] }, { kind: "component", type: i1$2.AXRowCommandColumnComponent, selector: "ax-command-column", inputs: ["width", "caption", "fixed", "footerTemplate", "items"], outputs: ["onItemClick"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "ngmodule", type: AXFormModule }, { kind: "component", type:
|
|
187
|
+
`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i2.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i2.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXPWidgetCoreModule }, { kind: "component", type: i1$1.AXPWidgetContainerComponent, selector: "axp-widgets-container", inputs: ["context", "functions"], outputs: ["onContextChanged"] }, { kind: "directive", type: i1$1.AXPWidgetRendererDirective, selector: "[axp-widget-renderer]", inputs: ["parentNode", "index", "mode", "node"], outputs: ["onOptionsChanged", "onValueChanged", "onLoad"], exportAs: ["widgetRenderer"] }, { kind: "ngmodule", type: AXDataTableModule }, { kind: "component", type: i1$2.AXDataTableComponent, selector: "ax-data-table", inputs: ["dataSource", "selectedRows", "parentField", "hasChildrenField", "rowDetailsTemplate", "rowCssClass", "cellCssClass", "highlightText", "look", "rowTemplate", "emptyTemplate", "noDataTemplate", "alternative", "showHeader", "fixedHeader", "showFooter", "fixedFooter", "itemHeight", "allowReordering", "paging", "fetchDataMode", "loading", "focusedRow"], outputs: ["selectedRowsChange", "focusedRowChange", "onRowClick", "onRowDbClick", "onColumnsOrderChanged", "onColumnSizeChanged", "onPageChanged"] }, { kind: "component", type: i1$2.AXDataTableTextColumnComponent, selector: "ax-text-column", inputs: ["width", "caption", "allowSorting", "allowResizing", "fixed", "hasTitle", "customExpandIcon", "customCollapseIcon", "dataField", "expandHandler", "wrapText", "cellTemplate", "footerTemplate", "headerTemplate", "format", "formatOptions"] }, { kind: "component", type: i1$2.AXRowCommandColumnComponent, selector: "ax-command-column", inputs: ["width", "caption", "fixed", "footerTemplate", "items"], outputs: ["onItemClick"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "ngmodule", type: AXFormModule }, { kind: "component", type: i2$1.AXFormComponent, selector: "ax-form", inputs: ["disabled", "readonly", "labelMode", "look", "messageStyle", "updateOn", "inUserInteractionActive"], outputs: ["onValidate", "updateOnChange"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$4.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
188
188
|
}
|
|
189
189
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPTabularDataPopupComponent, decorators: [{
|
|
190
190
|
type: Component,
|
|
@@ -272,4 +272,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
272
272
|
}], propDecorators: { grid: [{ type: i0.ViewChild, args: ['grid', { isSignal: true }] }] } });
|
|
273
273
|
|
|
274
274
|
export { AXPTabularDataPopupComponent };
|
|
275
|
-
//# sourceMappingURL=acorex-platform-framework-client-layout-widgets-tabular-data-edit-popup.component-
|
|
275
|
+
//# sourceMappingURL=acorex-platform-framework-client-layout-widgets-tabular-data-edit-popup.component-D3pnOGmB.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acorex-platform-framework-client-layout-widgets-tabular-data-edit-popup.component-CRST84ou.mjs","sources":["../../../../../libs/framework/client/layout/widgets/src/lib/widgets/editors/tabular-data/tabular-data-edit-popup.component.ts"],"sourcesContent":["import {AXPDataGenerator} from '@acorex-platform/framework-client/core';\nimport {AXPContextChangeEvent} from '@acorex-platform/framework-shared/core';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDataSource } from '@acorex/cdk/common';\nimport {\n AXDataTableComponent,\n AXDataTableModule,\n AXRowCommandItem,\n AXRowCommandItemClickEvent,\n} from '@acorex/components/data-table';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXFormComponent, AXFormModule } from '@acorex/components/form';\nimport { AXBasePageComponent } from '@acorex/components/page';\nimport { AXTranslationModule } from '@acorex/core/translation';\n\nimport { AXPWidgetCoreModule } from '@acorex-platform/framework-client/layout/widget-core';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, viewChild } from '@angular/core';\nimport { cloneDeep } from 'lodash-es';\nimport { AXPTabularDataColumn } from './tabular-widget.types';\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <axp-widgets-container [context]=\"context\" (onContextChanged)=\"handleContextChange($event)\">\n <ax-form #form>\n <div class=\"p-4\">\n <ax-data-table\n #grid\n [paging]=\"false\"\n [allowReordering]=\"true\"\n (selectedRowsChange)=\"handleSelectionChange($event)\"\n [dataSource]=\"dataSource\"\n class=\"h-96 overflow-auto\"\n >\n @for (column of columns; track $index) {\n <ax-text-column\n width=\"200px\"\n [caption]=\"column.title\"\n [dataField]=\"column.name\"\n [cellTemplate]=\"cell\"\n [allowResizing]=\"true\"\n ></ax-text-column>\n <ng-template #cell let-item>\n <ng-container\n axp-widget-renderer\n [node]=\"{\n path: item.rowIndex + '.' + column.name,\n type: column.type,\n options: column.options ?? {},\n }\"\n [mode]=\"'edit'\"\n >\n </ng-container>\n </ng-template>\n }\n <ax-command-column\n fixed=\"end\"\n [width]=\"getCommandRowItems.length * 60 + 'px'\"\n [items]=\"getCommandRowItems\"\n (onItemClick)=\"handleRowCommandClick($event)\"\n ></ax-command-column>\n </ax-data-table>\n @if (!disabled) {\n <div class=\"flex justify-end py-4\">\n <ax-button\n [text]=\"(this.context ?? []).length ? 'Start Adding Items' : 'Add Your First Item'\"\n look=\"twotone\"\n [disabled]=\"disabled\"\n (onClick)=\"addRecord()\"\n class=\"col-start-10 col-end-13\"\n >\n <ax-prefix>\n <ax-icon class=\"fa-solid fa-add\"></ax-icon>\n </ax-prefix>\n </ax-button>\n </div>\n }\n </div>\n <ax-footer>\n <ax-suffix>\n <ax-button [text]=\"'@general:actions.discard.title' | translate | async\" (onClick)=\"onCloseDiscard()\"></ax-button>\n <ax-button\n color=\"primary\"\n [text]=\"'@general:actions.ok.title' | translate | async\"\n (onClick)=\"handleSaveClick(form)\"\n ></ax-button>\n </ax-suffix>\n </ax-footer>\n </ax-form>\n </axp-widgets-container>\n `,\n imports: [\n CommonModule,\n AXDecoratorModule,\n AXButtonModule,\n AXPWidgetCoreModule,\n AXDataTableModule,\n AXTranslationModule,\n AXFormModule,\n ],\n})\nexport class AXPTabularDataPopupComponent extends AXBasePageComponent {\n context: any;\n columns: AXPTabularDataColumn[];\n disabled: boolean = false;\n defaultRowCount: number = 0;\n contextDiscard: any;\n\n getCommandRowItems: AXRowCommandItem[] = [\n {\n name: 'delete',\n text: \"@general:actions.delete.title\",\n icon: 'fa-light fa-trash text-danger',\n //divided: boolean,\n //disabled: boolean,\n color: 'danger',\n },\n ];\n\n protected override ngOnInit(): void {\n this.columns = this.columns.filter((col) => col.name != null && col.name != '' && col.type != null);\n\n this.columns = this.columns.map((col) => {\n return {\n ...col,\n options: {\n ...(col.options ?? {}),\n validationRules: [\n {\n rule: 'required',\n },\n ],\n },\n };\n });\n this.contextDiscard = cloneDeep(this.context);\n if (this.context == null || this.context?.length == 0) {\n for (let i = 0; i < this.defaultRowCount; i++) {\n this.addRecord();\n }\n }\n }\n\n protected dataSource = new AXDataSource({\n load: async () => {\n this.context = (this.context ?? []).map((x: any) => {\n return {\n ...x,\n id: AXPDataGenerator.uuid(),\n options: {},\n };\n });\n const items = this.context;\n console.log(this.context);\n\n return {\n items: items ?? [],\n total: (items ?? []).length,\n };\n },\n pageSize: 1,\n key: 'gridItem',\n });\n\n protected grid = viewChild<AXDataTableComponent>('grid');\n\n handleContextChange(e: AXPContextChangeEvent) {\n this.context = e.data;\n }\n\n onCloseDiscard() {\n this.close({\n context: this.contextDiscard,\n });\n }\n\n addRecord() {\n console.log(this.columns);\n\n const value = this.context ?? [];\n const newRecord = this.columns?.reduce((acc: { [key: string]: any }, column) => {\n acc[column.name] = ''; // or any default value\n return acc;\n }, {});\n console.log(value);\n this.context = [...value, newRecord];\n this.grid()?.refresh();\n }\n\n handleSelectionChange(e: any) {\n console.log(e);\n }\n\n protected async handleRowCommandClick(e: AXRowCommandItemClickEvent) {\n if (e.name == 'delete') {\n this.context = this.context.filter((item: any) => item.id !== e.data.id);\n this.grid()?.refresh();\n }\n }\n\n protected async handleSaveClick(form: AXFormComponent) {\n const formResult = await form.validate();\n console.log(formResult.rules);\n\n if (formResult.result) {\n this.close({\n context: this.context,\n });\n }\n }\n}\n"],"names":["i1","i2","i3","i4","i5","i6","i7"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"acorex-platform-framework-client-layout-widgets-tabular-data-edit-popup.component-D3pnOGmB.mjs","sources":["../../../../../libs/framework/client/layout/widgets/src/lib/widgets/editors/tabular-data/tabular-data-edit-popup.component.ts"],"sourcesContent":["import {AXPDataGenerator} from '@acorex-platform/framework-client/core';\nimport {AXPContextChangeEvent} from '@acorex-platform/framework-shared/core';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDataSource } from '@acorex/cdk/common';\nimport {\n AXDataTableComponent,\n AXDataTableModule,\n AXRowCommandItem,\n AXRowCommandItemClickEvent,\n} from '@acorex/components/data-table';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXFormComponent, AXFormModule } from '@acorex/components/form';\nimport { AXBasePageComponent } from '@acorex/components/page';\nimport { AXTranslationModule } from '@acorex/core/translation';\n\nimport { AXPWidgetCoreModule } from '@acorex-platform/framework-client/layout/widget-core';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, viewChild } from '@angular/core';\nimport { cloneDeep } from 'lodash-es';\nimport { AXPTabularDataColumn } from './tabular-widget.types';\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <axp-widgets-container [context]=\"context\" (onContextChanged)=\"handleContextChange($event)\">\n <ax-form #form>\n <div class=\"p-4\">\n <ax-data-table\n #grid\n [paging]=\"false\"\n [allowReordering]=\"true\"\n (selectedRowsChange)=\"handleSelectionChange($event)\"\n [dataSource]=\"dataSource\"\n class=\"h-96 overflow-auto\"\n >\n @for (column of columns; track $index) {\n <ax-text-column\n width=\"200px\"\n [caption]=\"column.title\"\n [dataField]=\"column.name\"\n [cellTemplate]=\"cell\"\n [allowResizing]=\"true\"\n ></ax-text-column>\n <ng-template #cell let-item>\n <ng-container\n axp-widget-renderer\n [node]=\"{\n path: item.rowIndex + '.' + column.name,\n type: column.type,\n options: column.options ?? {},\n }\"\n [mode]=\"'edit'\"\n >\n </ng-container>\n </ng-template>\n }\n <ax-command-column\n fixed=\"end\"\n [width]=\"getCommandRowItems.length * 60 + 'px'\"\n [items]=\"getCommandRowItems\"\n (onItemClick)=\"handleRowCommandClick($event)\"\n ></ax-command-column>\n </ax-data-table>\n @if (!disabled) {\n <div class=\"flex justify-end py-4\">\n <ax-button\n [text]=\"(this.context ?? []).length ? 'Start Adding Items' : 'Add Your First Item'\"\n look=\"twotone\"\n [disabled]=\"disabled\"\n (onClick)=\"addRecord()\"\n class=\"col-start-10 col-end-13\"\n >\n <ax-prefix>\n <ax-icon class=\"fa-solid fa-add\"></ax-icon>\n </ax-prefix>\n </ax-button>\n </div>\n }\n </div>\n <ax-footer>\n <ax-suffix>\n <ax-button [text]=\"'@general:actions.discard.title' | translate | async\" (onClick)=\"onCloseDiscard()\"></ax-button>\n <ax-button\n color=\"primary\"\n [text]=\"'@general:actions.ok.title' | translate | async\"\n (onClick)=\"handleSaveClick(form)\"\n ></ax-button>\n </ax-suffix>\n </ax-footer>\n </ax-form>\n </axp-widgets-container>\n `,\n imports: [\n CommonModule,\n AXDecoratorModule,\n AXButtonModule,\n AXPWidgetCoreModule,\n AXDataTableModule,\n AXTranslationModule,\n AXFormModule,\n ],\n})\nexport class AXPTabularDataPopupComponent extends AXBasePageComponent {\n context: any;\n columns: AXPTabularDataColumn[];\n disabled: boolean = false;\n defaultRowCount: number = 0;\n contextDiscard: any;\n\n getCommandRowItems: AXRowCommandItem[] = [\n {\n name: 'delete',\n text: \"@general:actions.delete.title\",\n icon: 'fa-light fa-trash text-danger',\n //divided: boolean,\n //disabled: boolean,\n color: 'danger',\n },\n ];\n\n protected override ngOnInit(): void {\n this.columns = this.columns.filter((col) => col.name != null && col.name != '' && col.type != null);\n\n this.columns = this.columns.map((col) => {\n return {\n ...col,\n options: {\n ...(col.options ?? {}),\n validationRules: [\n {\n rule: 'required',\n },\n ],\n },\n };\n });\n this.contextDiscard = cloneDeep(this.context);\n if (this.context == null || this.context?.length == 0) {\n for (let i = 0; i < this.defaultRowCount; i++) {\n this.addRecord();\n }\n }\n }\n\n protected dataSource = new AXDataSource({\n load: async () => {\n this.context = (this.context ?? []).map((x: any) => {\n return {\n ...x,\n id: AXPDataGenerator.uuid(),\n options: {},\n };\n });\n const items = this.context;\n console.log(this.context);\n\n return {\n items: items ?? [],\n total: (items ?? []).length,\n };\n },\n pageSize: 1,\n key: 'gridItem',\n });\n\n protected grid = viewChild<AXDataTableComponent>('grid');\n\n handleContextChange(e: AXPContextChangeEvent) {\n this.context = e.data;\n }\n\n onCloseDiscard() {\n this.close({\n context: this.contextDiscard,\n });\n }\n\n addRecord() {\n console.log(this.columns);\n\n const value = this.context ?? [];\n const newRecord = this.columns?.reduce((acc: { [key: string]: any }, column) => {\n acc[column.name] = ''; // or any default value\n return acc;\n }, {});\n console.log(value);\n this.context = [...value, newRecord];\n this.grid()?.refresh();\n }\n\n handleSelectionChange(e: any) {\n console.log(e);\n }\n\n protected async handleRowCommandClick(e: AXRowCommandItemClickEvent) {\n if (e.name == 'delete') {\n this.context = this.context.filter((item: any) => item.id !== e.data.id);\n this.grid()?.refresh();\n }\n }\n\n protected async handleSaveClick(form: AXFormComponent) {\n const formResult = await form.validate();\n console.log(formResult.rules);\n\n if (formResult.result) {\n this.close({\n context: this.context,\n });\n }\n }\n}\n"],"names":["i1","i2","i3","i4","i5","i6","i7"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAsGM,MAAO,4BAA6B,SAAQ,mBAAmB,CAAA;AAjFrE,IAAA,WAAA,GAAA;;QAoFE,IAAA,CAAA,QAAQ,GAAY,KAAK;QACzB,IAAA,CAAA,eAAe,GAAW,CAAC;AAG3B,QAAA,IAAA,CAAA,kBAAkB,GAAuB;AACvC,YAAA;AACE,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,IAAI,EAAE,+BAA+B;AACrC,gBAAA,IAAI,EAAE,+BAA+B;;;AAGrC,gBAAA,KAAK,EAAE,QAAQ;AAChB,aAAA;SACF;QA0BS,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,CAAC;YACtC,IAAI,EAAE,YAAW;AACf,gBAAA,IAAI,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,CAAM,KAAI;oBACjD,OAAO;AACL,wBAAA,GAAG,CAAC;AACJ,wBAAA,EAAE,EAAE,gBAAgB,CAAC,IAAI,EAAE;AAC3B,wBAAA,OAAO,EAAE,EAAE;qBACZ;AACH,gBAAA,CAAC,CAAC;AACF,gBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO;AAC1B,gBAAA,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;gBAEzB,OAAO;oBACL,KAAK,EAAE,KAAK,IAAI,EAAE;AAClB,oBAAA,KAAK,EAAE,CAAC,KAAK,IAAI,EAAE,EAAE,MAAM;iBAC5B;YACH,CAAC;AACD,YAAA,QAAQ,EAAE,CAAC;AACX,YAAA,GAAG,EAAE,UAAU;AAChB,SAAA,CAAC;QAEQ,IAAA,CAAA,IAAI,GAAG,SAAS,CAAuB,MAAM;iFAAC;AA8CzD,IAAA;IA3FoB,QAAQ,GAAA;AACzB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,IAAI,IAAI,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,EAAE,IAAI,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC;AAEnG,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,KAAI;YACtC,OAAO;AACL,gBAAA,GAAG,GAAG;AACN,gBAAA,OAAO,EAAE;AACP,oBAAA,IAAI,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC;AACtB,oBAAA,eAAe,EAAE;AACf,wBAAA;AACE,4BAAA,IAAI,EAAE,UAAU;AACjB,yBAAA;AACF,qBAAA;AACF,iBAAA;aACF;AACH,QAAA,CAAC,CAAC;QACF,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC;AAC7C,QAAA,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC,EAAE;AACrD,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC,EAAE,EAAE;gBAC7C,IAAI,CAAC,SAAS,EAAE;YAClB;QACF;IACF;AAyBA,IAAA,mBAAmB,CAAC,CAAwB,EAAA;AAC1C,QAAA,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,IAAI;IACvB;IAEA,cAAc,GAAA;QACZ,IAAI,CAAC,KAAK,CAAC;YACT,OAAO,EAAE,IAAI,CAAC,cAAc;AAC7B,SAAA,CAAC;IACJ;IAEA,SAAS,GAAA;AACP,QAAA,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;AAEzB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,IAAI,EAAE;AAChC,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,GAA2B,EAAE,MAAM,KAAI;YAC7E,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;AACtB,YAAA,OAAO,GAAG;QACZ,CAAC,EAAE,EAAE,CAAC;AACN,QAAA,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;QAClB,IAAI,CAAC,OAAO,GAAG,CAAC,GAAG,KAAK,EAAE,SAAS,CAAC;AACpC,QAAA,IAAI,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE;IACxB;AAEA,IAAA,qBAAqB,CAAC,CAAM,EAAA;AAC1B,QAAA,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;IAChB;IAEU,MAAM,qBAAqB,CAAC,CAA6B,EAAA;AACjE,QAAA,IAAI,CAAC,CAAC,IAAI,IAAI,QAAQ,EAAE;YACtB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAS,KAAK,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;AACxE,YAAA,IAAI,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE;QACxB;IACF;IAEU,MAAM,eAAe,CAAC,IAAqB,EAAA;AACnD,QAAA,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE;AACxC,QAAA,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC;AAE7B,QAAA,IAAI,UAAU,CAAC,MAAM,EAAE;YACrB,IAAI,CAAC,KAAK,CAAC;gBACT,OAAO,EAAE,IAAI,CAAC,OAAO;AACtB,aAAA,CAAC;QACJ;IACF;8GA5GW,4BAA4B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA5B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,4BAA4B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,MAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,MAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA/E7B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoET,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAEC,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,iBAAiB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,wBAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,2BAAA,EAAA,QAAA,EAAA,8IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACjB,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,OAAA,EAAA,MAAA,EAAA,MAAA,EAAA,YAAA,EAAA,UAAA,EAAA,UAAA,EAAA,MAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,YAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACd,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,2BAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,OAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,kBAAA,EAAA,gBAAA,EAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACnB,iBAAiB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,cAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,aAAA,EAAA,cAAA,EAAA,eAAA,EAAA,MAAA,EAAA,aAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,YAAA,EAAA,aAAA,EAAA,YAAA,EAAA,aAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,SAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,oBAAA,EAAA,kBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,uBAAA,EAAA,qBAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,8BAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,EAAA,cAAA,EAAA,eAAA,EAAA,OAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,WAAA,EAAA,eAAA,EAAA,UAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,2BAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,gBAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACjB,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACnB,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,WAAA,EAAA,MAAA,EAAA,cAAA,EAAA,UAAA,EAAA,yBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,gBAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAGH,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBAjFxC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;oBACT,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoET,EAAA,CAAA;AACD,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,iBAAiB;wBACjB,cAAc;wBACd,mBAAmB;wBACnB,iBAAiB;wBACjB,mBAAmB;wBACnB,YAAY;AACb,qBAAA;AACF,iBAAA;kEAgEkD,MAAM,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;;;"}
|