@acorex/platform 21.0.0-next.12 → 21.0.0-next.13
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/core/index.d.ts +3 -1
- package/fesm2022/acorex-platform-core.mjs +10 -6
- package/fesm2022/acorex-platform-core.mjs.map +1 -1
- package/fesm2022/acorex-platform-domain.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-entity.mjs +2 -2
- package/fesm2022/acorex-platform-layout-entity.mjs.map +1 -1
- package/fesm2022/{acorex-platform-layout-widgets-file-list-popup.component-BfV3spe3.mjs → acorex-platform-layout-widgets-file-list-popup.component-CChaPy_w.mjs} +11 -3
- package/fesm2022/acorex-platform-layout-widgets-file-list-popup.component-CChaPy_w.mjs.map +1 -0
- package/fesm2022/acorex-platform-layout-widgets.mjs +85 -16
- package/fesm2022/acorex-platform-layout-widgets.mjs.map +1 -1
- package/fesm2022/acorex-platform-workflow.mjs +0 -2
- package/fesm2022/acorex-platform-workflow.mjs.map +1 -1
- package/layout/entity/index.d.ts +1 -0
- package/layout/widgets/index.d.ts +25 -2
- package/package.json +9 -9
- package/workflow/index.d.ts +33 -30
- package/fesm2022/acorex-platform-layout-widgets-file-list-popup.component-BfV3spe3.mjs.map +0 -1
|
@@ -26,6 +26,11 @@ class AXPFileListPopupComponent extends AXBasePageComponent {
|
|
|
26
26
|
this.fileEditable = input(true, ...(ngDevMode ? [{ debugName: "fileEditable" }] : []));
|
|
27
27
|
this.accept = input('*', ...(ngDevMode ? [{ debugName: "accept" }] : []));
|
|
28
28
|
this.maxFileSize = input(1024 * 1024 * 100, ...(ngDevMode ? [{ debugName: "maxFileSize" }] : []));
|
|
29
|
+
/** Same as widget plugins (e.g. document) so hooks/actions run in popup too. */
|
|
30
|
+
this.plugins = input([], ...(ngDevMode ? [{ debugName: "plugins" }] : []));
|
|
31
|
+
this.excludePlugins = input([], ...(ngDevMode ? [{ debugName: "excludePlugins" }] : []));
|
|
32
|
+
/** When true, file edit dialog shows name, title and description fields. Default false. */
|
|
33
|
+
this.enableTitleDescription = input(false, ...(ngDevMode ? [{ debugName: "enableTitleDescription" }] : []));
|
|
29
34
|
//#endregion
|
|
30
35
|
//#region ---- Computed Properties ----
|
|
31
36
|
this.mode = computed(() => this.readOnly() ? 'view' : 'edit', ...(ngDevMode ? [{ debugName: "mode" }] : []));
|
|
@@ -42,6 +47,9 @@ class AXPFileListPopupComponent extends AXBasePageComponent {
|
|
|
42
47
|
accept: this.accept(),
|
|
43
48
|
maxFileSize: this.maxFileSize(),
|
|
44
49
|
fileEditable: this.fileEditable(),
|
|
50
|
+
plugins: this.plugins(),
|
|
51
|
+
excludePlugins: this.excludePlugins(),
|
|
52
|
+
enableTitleDescription: this.enableTitleDescription(),
|
|
45
53
|
},
|
|
46
54
|
}), ...(ngDevMode ? [{ debugName: "node" }] : []));
|
|
47
55
|
}
|
|
@@ -110,7 +118,7 @@ class AXPFileListPopupComponent extends AXBasePageComponent {
|
|
|
110
118
|
});
|
|
111
119
|
}
|
|
112
120
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AXPFileListPopupComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
113
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: AXPFileListPopupComponent, isStandalone: true, selector: "ng-component", inputs: { files: { classPropertyName: "files", publicName: "files", isSignal: true, isRequired: false, transformFunction: null }, readOnly: { classPropertyName: "readOnly", publicName: "readOnly", isSignal: true, isRequired: false, transformFunction: null }, multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: true, isRequired: false, transformFunction: null }, fileEditable: { classPropertyName: "fileEditable", publicName: "fileEditable", isSignal: true, isRequired: false, transformFunction: null }, accept: { classPropertyName: "accept", publicName: "accept", isSignal: true, isRequired: false, transformFunction: null }, maxFileSize: { classPropertyName: "maxFileSize", publicName: "maxFileSize", isSignal: true, isRequired: false, transformFunction: null } }, usesInheritance: true, ngImport: i0, template: "<div class=\"ax-p-2\">\n <axp-widgets-container [context]=\"context()\" (onContextChanged)=\"onContextChanged($event)\">\n <ng-container axp-widget-renderer [node]=\"node()\" [mode]=\"mode()\"></ng-container>\n </axp-widgets-container>\n</div>\n<ax-footer>\n <ax-suffix>\n @if (readOnly()) {\n <ax-button [text]=\"'@general:actions.close.title' | translate | async\" (click)=\"close()\"></ax-button>\n } @else {\n <ax-button [text]=\"'@general:actions.discard.title' | translate | async\" (click)=\"close()\"></ax-button>\n <ax-button\n [text]=\"'@general:actions.apply.title' | translate | async\"\n (click)=\"apply()\"\n [color]=\"'primary'\"\n ></ax-button>\n }\n </ax-suffix>\n</ax-footer>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type:
|
|
121
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: AXPFileListPopupComponent, isStandalone: true, selector: "ng-component", inputs: { files: { classPropertyName: "files", publicName: "files", isSignal: true, isRequired: false, transformFunction: null }, readOnly: { classPropertyName: "readOnly", publicName: "readOnly", isSignal: true, isRequired: false, transformFunction: null }, multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: true, isRequired: false, transformFunction: null }, fileEditable: { classPropertyName: "fileEditable", publicName: "fileEditable", isSignal: true, isRequired: false, transformFunction: null }, accept: { classPropertyName: "accept", publicName: "accept", isSignal: true, isRequired: false, transformFunction: null }, maxFileSize: { classPropertyName: "maxFileSize", publicName: "maxFileSize", isSignal: true, isRequired: false, transformFunction: null }, plugins: { classPropertyName: "plugins", publicName: "plugins", isSignal: true, isRequired: false, transformFunction: null }, excludePlugins: { classPropertyName: "excludePlugins", publicName: "excludePlugins", isSignal: true, isRequired: false, transformFunction: null }, enableTitleDescription: { classPropertyName: "enableTitleDescription", publicName: "enableTitleDescription", isSignal: true, isRequired: false, transformFunction: null } }, usesInheritance: true, ngImport: i0, template: "<div class=\"ax-p-2\">\n <axp-widgets-container [context]=\"context()\" (onContextChanged)=\"onContextChanged($event)\">\n <ng-container axp-widget-renderer [node]=\"node()\" [mode]=\"mode()\"></ng-container>\n </axp-widgets-container>\n</div>\n<ax-footer>\n <ax-suffix>\n @if (readOnly()) {\n <ax-button [text]=\"'@general:actions.close.title' | translate | async\" (click)=\"close()\"></ax-button>\n } @else {\n <ax-button [text]=\"'@general:actions.discard.title' | translate | async\" (click)=\"close()\"></ax-button>\n <ax-button\n [text]=\"'@general:actions.apply.title' | translate | async\"\n (click)=\"apply()\"\n [color]=\"'primary'\"\n ></ax-button>\n }\n </ax-suffix>\n</ax-footer>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type:
|
|
114
122
|
//
|
|
115
123
|
AXLabelModule }, { kind: "ngmodule", type: AXCheckBoxModule }, { kind: "ngmodule", type: AXDecoratorModule }, { 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: AXTranslationModule }, { kind: "ngmodule", type:
|
|
116
124
|
//
|
|
@@ -129,7 +137,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
|
|
|
129
137
|
//
|
|
130
138
|
AXPWidgetCoreModule
|
|
131
139
|
], template: "<div class=\"ax-p-2\">\n <axp-widgets-container [context]=\"context()\" (onContextChanged)=\"onContextChanged($event)\">\n <ng-container axp-widget-renderer [node]=\"node()\" [mode]=\"mode()\"></ng-container>\n </axp-widgets-container>\n</div>\n<ax-footer>\n <ax-suffix>\n @if (readOnly()) {\n <ax-button [text]=\"'@general:actions.close.title' | translate | async\" (click)=\"close()\"></ax-button>\n } @else {\n <ax-button [text]=\"'@general:actions.discard.title' | translate | async\" (click)=\"close()\"></ax-button>\n <ax-button\n [text]=\"'@general:actions.apply.title' | translate | async\"\n (click)=\"apply()\"\n [color]=\"'primary'\"\n ></ax-button>\n }\n </ax-suffix>\n</ax-footer>\n" }]
|
|
132
|
-
}], propDecorators: { files: [{ type: i0.Input, args: [{ isSignal: true, alias: "files", required: false }] }], readOnly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readOnly", required: false }] }], multiple: [{ type: i0.Input, args: [{ isSignal: true, alias: "multiple", required: false }] }], fileEditable: [{ type: i0.Input, args: [{ isSignal: true, alias: "fileEditable", required: false }] }], accept: [{ type: i0.Input, args: [{ isSignal: true, alias: "accept", required: false }] }], maxFileSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxFileSize", required: false }] }] } });
|
|
140
|
+
}], propDecorators: { files: [{ type: i0.Input, args: [{ isSignal: true, alias: "files", required: false }] }], readOnly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readOnly", required: false }] }], multiple: [{ type: i0.Input, args: [{ isSignal: true, alias: "multiple", required: false }] }], fileEditable: [{ type: i0.Input, args: [{ isSignal: true, alias: "fileEditable", required: false }] }], accept: [{ type: i0.Input, args: [{ isSignal: true, alias: "accept", required: false }] }], maxFileSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxFileSize", required: false }] }], plugins: [{ type: i0.Input, args: [{ isSignal: true, alias: "plugins", required: false }] }], excludePlugins: [{ type: i0.Input, args: [{ isSignal: true, alias: "excludePlugins", required: false }] }], enableTitleDescription: [{ type: i0.Input, args: [{ isSignal: true, alias: "enableTitleDescription", required: false }] }] } });
|
|
133
141
|
|
|
134
142
|
export { AXPFileListPopupComponent };
|
|
135
|
-
//# sourceMappingURL=acorex-platform-layout-widgets-file-list-popup.component-
|
|
143
|
+
//# sourceMappingURL=acorex-platform-layout-widgets-file-list-popup.component-CChaPy_w.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"acorex-platform-layout-widgets-file-list-popup.component-CChaPy_w.mjs","sources":["../tmp-esm2022/layout/widgets/lib/widgets/advance/file-uploader/file-list-popup/file-list-popup.component.js"],"sourcesContent":["import { AXButtonModule } from '@acorex/components/button';\nimport { AXCheckBoxModule } from '@acorex/components/check-box';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXLabelModule } from '@acorex/components/label';\nimport { AXBasePageComponent } from '@acorex/components/page';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { CommonModule } from '@angular/common';\nimport { Component, computed, inject, input, linkedSignal } from '@angular/core';\nimport { AXPWidgetCoreModule } from '@acorex/platform/layout/widget-core';\nimport { AXPFileStorageService } from '@acorex/platform/common';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@acorex/components/decorators\";\nimport * as i2 from \"@acorex/components/button\";\nimport * as i3 from \"@acorex/platform/layout/widget-core\";\nimport * as i4 from \"@angular/common\";\nimport * as i5 from \"@acorex/core/translation\";\nexport class AXPFileListPopupComponent extends AXBasePageComponent {\n constructor() {\n super(...arguments);\n this.fileService = inject(AXPFileStorageService);\n //#region ---- Component Properties ----\n this.files = input([], ...(ngDevMode ? [{ debugName: \"files\" }] : []));\n this.readOnly = input(false, ...(ngDevMode ? [{ debugName: \"readOnly\" }] : []));\n this.multiple = input(false, ...(ngDevMode ? [{ debugName: \"multiple\" }] : []));\n this.fileEditable = input(true, ...(ngDevMode ? [{ debugName: \"fileEditable\" }] : []));\n this.accept = input('*', ...(ngDevMode ? [{ debugName: \"accept\" }] : []));\n this.maxFileSize = input(1024 * 1024 * 100, ...(ngDevMode ? [{ debugName: \"maxFileSize\" }] : []));\n /** Same as widget plugins (e.g. document) so hooks/actions run in popup too. */\n this.plugins = input([], ...(ngDevMode ? [{ debugName: \"plugins\" }] : []));\n this.excludePlugins = input([], ...(ngDevMode ? [{ debugName: \"excludePlugins\" }] : []));\n /** When true, file edit dialog shows name, title and description fields. Default false. */\n this.enableTitleDescription = input(false, ...(ngDevMode ? [{ debugName: \"enableTitleDescription\" }] : []));\n //#endregion\n //#region ---- Computed Properties ----\n this.mode = computed(() => this.readOnly() ? 'view' : 'edit', ...(ngDevMode ? [{ debugName: \"mode\" }] : []));\n //#endregion\n //#region ---- Context & Node Management ----\n this.context = linkedSignal(() => ({}), ...(ngDevMode ? [{ debugName: \"context\" }] : []));\n this.node = computed(() => ({\n type: 'file-uploader',\n path: 'files',\n defaultValue: Array.isArray(this.files()) && typeof this.files()[0] !== 'string' ? this.files() : [],\n options: {\n readOnly: this.readOnly(),\n multiple: this.multiple(),\n accept: this.accept(),\n maxFileSize: this.maxFileSize(),\n fileEditable: this.fileEditable(),\n plugins: this.plugins(),\n excludePlugins: this.excludePlugins(),\n enableTitleDescription: this.enableTitleDescription(),\n },\n }), ...(ngDevMode ? [{ debugName: \"node\" }] : []));\n }\n onContextChanged(event) {\n this.context.set(event.data);\n }\n //#endregion\n //#region ---- Lifecycle Methods ----\n async ngOnInit() {\n if (Array.isArray(this.files()) && typeof this.files()[0] === 'string') {\n this.isLoading = true;\n // Convert string file IDs to AXPFileListItem objects using batch API\n const prefixedIds = this.files();\n const actualIds = prefixedIds.map((id) => this.removeFilePrefix(id));\n let fileItems = [];\n try {\n const infos = await this.fileService.findMany(actualIds);\n const infoMap = new Map(infos.map((i) => [i.fileId, i]));\n fileItems = prefixedIds.map((prefixedId) => {\n const actualId = this.removeFilePrefix(prefixedId);\n const info = infoMap.get(actualId);\n if (info) {\n return {\n id: info.fileId,\n name: info.name || '',\n size: info.size,\n status: 'uploaded',\n source: {\n kind: 'fileId',\n value: info.fileId,\n },\n };\n }\n return {\n id: actualId,\n name: 'Unknown File',\n size: 0,\n status: 'deleted',\n source: { kind: 'none', value: '' },\n };\n });\n }\n catch (error) {\n console.error('Failed to get file infos', error);\n fileItems = prefixedIds.map((prefixedId) => ({\n id: this.removeFilePrefix(prefixedId),\n name: 'Unknown File',\n size: 0,\n status: 'deleted',\n source: { kind: 'none', value: '' },\n }));\n }\n this.isLoading = false;\n // Update the context with the converted file items\n this.context.set({ files: fileItems });\n }\n }\n removeFilePrefix(fileId) {\n return fileId.startsWith('file:') ? fileId.substring(5) : fileId;\n }\n //#endregion\n //#region ---- UI Handlers ----\n apply() {\n this.close({\n data: this.context(),\n });\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXPFileListPopupComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.3.16\", type: AXPFileListPopupComponent, isStandalone: true, selector: \"ng-component\", inputs: { files: { classPropertyName: \"files\", publicName: \"files\", isSignal: true, isRequired: false, transformFunction: null }, readOnly: { classPropertyName: \"readOnly\", publicName: \"readOnly\", isSignal: true, isRequired: false, transformFunction: null }, multiple: { classPropertyName: \"multiple\", publicName: \"multiple\", isSignal: true, isRequired: false, transformFunction: null }, fileEditable: { classPropertyName: \"fileEditable\", publicName: \"fileEditable\", isSignal: true, isRequired: false, transformFunction: null }, accept: { classPropertyName: \"accept\", publicName: \"accept\", isSignal: true, isRequired: false, transformFunction: null }, maxFileSize: { classPropertyName: \"maxFileSize\", publicName: \"maxFileSize\", isSignal: true, isRequired: false, transformFunction: null }, plugins: { classPropertyName: \"plugins\", publicName: \"plugins\", isSignal: true, isRequired: false, transformFunction: null }, excludePlugins: { classPropertyName: \"excludePlugins\", publicName: \"excludePlugins\", isSignal: true, isRequired: false, transformFunction: null }, enableTitleDescription: { classPropertyName: \"enableTitleDescription\", publicName: \"enableTitleDescription\", isSignal: true, isRequired: false, transformFunction: null } }, usesInheritance: true, ngImport: i0, template: \"<div class=\\\"ax-p-2\\\">\\n <axp-widgets-container [context]=\\\"context()\\\" (onContextChanged)=\\\"onContextChanged($event)\\\">\\n <ng-container axp-widget-renderer [node]=\\\"node()\\\" [mode]=\\\"mode()\\\"></ng-container>\\n </axp-widgets-container>\\n</div>\\n<ax-footer>\\n <ax-suffix>\\n @if (readOnly()) {\\n <ax-button [text]=\\\"'@general:actions.close.title' | translate | async\\\" (click)=\\\"close()\\\"></ax-button>\\n } @else {\\n <ax-button [text]=\\\"'@general:actions.discard.title' | translate | async\\\" (click)=\\\"close()\\\"></ax-button>\\n <ax-button\\n [text]=\\\"'@general:actions.apply.title' | translate | async\\\"\\n (click)=\\\"apply()\\\"\\n [color]=\\\"'primary'\\\"\\n ></ax-button>\\n }\\n </ax-suffix>\\n</ax-footer>\\n\", dependencies: [{ kind: \"ngmodule\", type: CommonModule }, { kind: \"ngmodule\", type: \n //\n AXLabelModule }, { kind: \"ngmodule\", type: AXCheckBoxModule }, { kind: \"ngmodule\", type: AXDecoratorModule }, { kind: \"component\", type: i1.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: i2.AXButtonComponent, selector: \"ax-button\", inputs: [\"disabled\", \"size\", \"tabIndex\", \"color\", \"look\", \"text\", \"toggleable\", \"selected\", \"iconOnly\", \"type\", \"loadingText\"], outputs: [\"onBlur\", \"onFocus\", \"onClick\", \"selectedChange\", \"toggleableChange\", \"lookChange\", \"colorChange\", \"disabledChange\", \"loadingTextChange\"] }, { kind: \"ngmodule\", type: AXTranslationModule }, { kind: \"ngmodule\", type: \n //\n AXPWidgetCoreModule }, { kind: \"component\", type: i3.AXPWidgetContainerComponent, selector: \"axp-widgets-container\", inputs: [\"context\", \"functions\"], outputs: [\"onContextChanged\"] }, { kind: \"directive\", type: i3.AXPWidgetRendererDirective, selector: \"[axp-widget-renderer]\", inputs: [\"parentNode\", \"index\", \"mode\", \"node\"], outputs: [\"onOptionsChanged\", \"onValueChanged\", \"onLoad\"], exportAs: [\"widgetRenderer\"] }, { kind: \"pipe\", type: i4.AsyncPipe, name: \"async\" }, { kind: \"pipe\", type: i5.AXTranslatorPipe, name: \"translate\" }] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXPFileListPopupComponent, decorators: [{\n type: Component,\n args: [{ imports: [\n CommonModule,\n //\n AXLabelModule,\n AXCheckBoxModule,\n AXDecoratorModule,\n AXButtonModule,\n AXTranslationModule,\n //\n AXPWidgetCoreModule\n ], template: \"<div class=\\\"ax-p-2\\\">\\n <axp-widgets-container [context]=\\\"context()\\\" (onContextChanged)=\\\"onContextChanged($event)\\\">\\n <ng-container axp-widget-renderer [node]=\\\"node()\\\" [mode]=\\\"mode()\\\"></ng-container>\\n </axp-widgets-container>\\n</div>\\n<ax-footer>\\n <ax-suffix>\\n @if (readOnly()) {\\n <ax-button [text]=\\\"'@general:actions.close.title' | translate | async\\\" (click)=\\\"close()\\\"></ax-button>\\n } @else {\\n <ax-button [text]=\\\"'@general:actions.discard.title' | translate | async\\\" (click)=\\\"close()\\\"></ax-button>\\n <ax-button\\n [text]=\\\"'@general:actions.apply.title' | translate | async\\\"\\n (click)=\\\"apply()\\\"\\n [color]=\\\"'primary'\\\"\\n ></ax-button>\\n }\\n </ax-suffix>\\n</ax-footer>\\n\" }]\n }], propDecorators: { files: [{ type: i0.Input, args: [{ isSignal: true, alias: \"files\", required: false }] }], readOnly: [{ type: i0.Input, args: [{ isSignal: true, alias: \"readOnly\", required: false }] }], multiple: [{ type: i0.Input, args: [{ isSignal: true, alias: \"multiple\", required: false }] }], fileEditable: [{ type: i0.Input, args: [{ isSignal: true, alias: \"fileEditable\", required: false }] }], accept: [{ type: i0.Input, args: [{ isSignal: true, alias: \"accept\", required: false }] }], maxFileSize: [{ type: i0.Input, args: [{ isSignal: true, alias: \"maxFileSize\", required: false }] }], plugins: [{ type: i0.Input, args: [{ isSignal: true, alias: \"plugins\", required: false }] }], excludePlugins: [{ type: i0.Input, args: [{ isSignal: true, alias: \"excludePlugins\", required: false }] }], enableTitleDescription: [{ type: i0.Input, args: [{ isSignal: true, alias: \"enableTitleDescription\", required: false }] }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1saXN0LXBvcHVwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vbGF5b3V0L3dpZGdldHMvc3JjL2xpYi93aWRnZXRzL2FkdmFuY2UvZmlsZS11cGxvYWRlci9maWxlLWxpc3QtcG9wdXAvZmlsZS1saXN0LXBvcHVwLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vbGF5b3V0L3dpZGdldHMvc3JjL2xpYi93aWRnZXRzL2FkdmFuY2UvZmlsZS11cGxvYWRlci9maWxlLWxpc3QtcG9wdXAvZmlsZS1saXN0LXBvcHVwLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDekQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFL0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxtQkFBbUIsRUFBa0QsTUFBTSxxQ0FBcUMsQ0FBQztBQUMxSCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7Ozs7OztBQWdCaEUsTUFBTSxPQUFP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QkFDRixtQkFBbUI7OzRGQUlWLHlCQUF5QjtrQkFkckMsU0FBUzs4QkFDQzt3QkFDUCxZQUFZO3dCQUNaLEVBQUU7d0JBQ0YsYUFBYTt3QkFDYixnQkFBZ0I7d0JBQ2hCLGlCQUFpQjt3QkFDakIsY0FBYzt3QkFDZCxtQkFBbUI7d0JBQ25CLEVBQUU7d0JBQ0YsbUJBQW1CO3FCQUNwQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFYQnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2J1dHRvbic7XG5pbXBvcnQgeyBBWENoZWNrQm94TW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2NoZWNrLWJveCc7XG5pbXBvcnQgeyBBWERlY29yYXRvck1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9kZWNvcmF0b3JzJztcbmltcG9ydCB7IEFYTGFiZWxNb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvbGFiZWwnO1xuaW1wb3J0IHsgQVhCYXNlUGFnZUNvbXBvbmVudCB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9wYWdlJztcbmltcG9ydCB7IEFYVHJhbnNsYXRpb25Nb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvcmUvdHJhbnNsYXRpb24nO1xuaW1wb3J0IHsgQVhQRmlsZUxpc3RJdGVtIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIGNvbXB1dGVkLCBpbmplY3QsIGlucHV0LCBsaW5rZWRTaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFYUFdpZGdldENvcmVNb2R1bGUsIEFYUFdpZGdldENvcmVDb250ZXh0Q2hhbmdlRXZlbnQsIEFYUFdpZGdldE5vZGUgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2xheW91dC93aWRnZXQtY29yZSc7XG5pbXBvcnQgeyBBWFBGaWxlU3RvcmFnZVNlcnZpY2UgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2NvbW1vbic7XG5cbkBDb21wb25lbnQoe1xuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIC8vXG4gICAgQVhMYWJlbE1vZHVsZSxcbiAgICBBWENoZWNrQm94TW9kdWxlLFxuICAgIEFYRGVjb3JhdG9yTW9kdWxlLFxuICAgIEFYQnV0dG9uTW9kdWxlLFxuICAgIEFYVHJhbnNsYXRpb25Nb2R1bGUsXG4gICAgLy9cbiAgICBBWFBXaWRnZXRDb3JlTW9kdWxlXG4gIF0sXG4gIHRlbXBsYXRlVXJsOiAnLi9maWxlLWxpc3QtcG9wdXAuY29tcG9uZW50Lmh0bWwnLFxufSlcbmV4cG9ydCBjbGFzcyBBWFBGaWxlTGlzdFBvcHVwQ29tcG9uZW50IGV4dGVuZHMgQVhCYXNlUGFnZUNvbXBvbmVudCB7XG5cbiAgcHJpdmF0ZSBmaWxlU2VydmljZSA9IGluamVjdChBWFBGaWxlU3RvcmFnZVNlcnZpY2UpO1xuXG4gIC8vI3JlZ2lvbiAtLS0tICAgQ29tcG9uZW50IFByb3BlcnRpZXMgICAtLS0tXG5cbiAgZmlsZXMgPSBpbnB1dDxBWFBGaWxlTGlzdEl0ZW1bXSB8IHN0cmluZ1tdPihbXSk7XG4gIHJlYWRPbmx5ID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuICBtdWx0aXBsZSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgZmlsZUVkaXRhYmxlID0gaW5wdXQ8Ym9vbGVhbj4odHJ1ZSk7XG4gIGFjY2VwdCA9IGlucHV0PHN0cmluZz4oJyonKTtcbiAgbWF4RmlsZVNpemUgPSBpbnB1dDxudW1iZXI+KDEwMjQgKiAxMDI0ICogMTAwKTtcbiAgLyoqIFNhbWUgYXMgd2lkZ2V0IHBsdWdpbnMgKGUuZy4gZG9jdW1lbnQpIHNvIGhvb2tzL2FjdGlvbnMgcnVuIGluIHBvcHVwIHRvby4gKi9cbiAgcGx1Z2lucyA9IGlucHV0PHsgbmFtZTogc3RyaW5nOyBvcHRpb25zPzogdW5rbm93biB9W10+KFtdKTtcbiAgZXhjbHVkZVBsdWdpbnMgPSBpbnB1dDxzdHJpbmdbXT4oW10pO1xuICAvKiogV2hlbiB0cnVlLCBmaWxlIGVkaXQgZGlhbG9nIHNob3dzIG5hbWUsIHRpdGxlIGFuZCBkZXNjcmlwdGlvbiBmaWVsZHMuIERlZmF1bHQgZmFsc2UuICovXG4gIGVuYWJsZVRpdGxlRGVzY3JpcHRpb24gPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIC0tLS0gICBDb21wdXRlZCBQcm9wZXJ0aWVzICAgLS0tLVxuXG4gIHByb3RlY3RlZCBtb2RlID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5yZWFkT25seSgpID8gJ3ZpZXcnIDogJ2VkaXQnKTtcblxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gLS0tLSAgIENvbnRleHQgJiBOb2RlIE1hbmFnZW1lbnQgICAtLS0tXG5cbiAgcHJvdGVjdGVkIGNvbnRleHQgPSBsaW5rZWRTaWduYWw8e30+KCgpID0+ICh7XG4gIH0pKTtcblxuICBwcm90ZWN0ZWQgb25Db250ZXh0Q2hhbmdlZChldmVudDogQVhQV2lkZ2V0Q29yZUNvbnRleHRDaGFuZ2VFdmVudCkge1xuICAgIHRoaXMuY29udGV4dC5zZXQoZXZlbnQuZGF0YSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgbm9kZSA9IGNvbXB1dGVkPEFYUFdpZGdldE5vZGU+KCgpID0+ICh7XG4gICAgdHlwZTogJ2ZpbGUtdXBsb2FkZXInLFxuICAgIHBhdGg6ICdmaWxlcycsXG4gICAgZGVmYXVsdFZhbHVlOiBBcnJheS5pc0FycmF5KHRoaXMuZmlsZXMoKSkgJiYgdHlwZW9mIHRoaXMuZmlsZXMoKVswXSAhPT0gJ3N0cmluZycgPyB0aGlzLmZpbGVzKCkgOiBbXSxcbiAgICBvcHRpb25zOiB7XG4gICAgICByZWFkT25seTogdGhpcy5yZWFkT25seSgpLFxuICAgICAgbXVsdGlwbGU6IHRoaXMubXVsdGlwbGUoKSxcbiAgICAgIGFjY2VwdDogdGhpcy5hY2NlcHQoKSxcbiAgICAgIG1heEZpbGVTaXplOiB0aGlzLm1heEZpbGVTaXplKCksXG4gICAgICBmaWxlRWRpdGFibGU6IHRoaXMuZmlsZUVkaXRhYmxlKCksXG4gICAgICBwbHVnaW5zOiB0aGlzLnBsdWdpbnMoKSxcbiAgICAgIGV4Y2x1ZGVQbHVnaW5zOiB0aGlzLmV4Y2x1ZGVQbHVnaW5zKCksXG4gICAgICBlbmFibGVUaXRsZURlc2NyaXB0aW9uOiB0aGlzLmVuYWJsZVRpdGxlRGVzY3JpcHRpb24oKSxcbiAgICB9LFxuICB9KSk7XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIC0tLS0gICBMaWZlY3ljbGUgTWV0aG9kcyAgIC0tLS1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgbmdPbkluaXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYoQXJyYXkuaXNBcnJheSh0aGlzLmZpbGVzKCkpICYmIHR5cGVvZiB0aGlzLmZpbGVzKClbMF0gPT09ICdzdHJpbmcnKXtcbiAgICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcbiAgICAgIC8vIENvbnZlcnQgc3RyaW5nIGZpbGUgSURzIHRvIEFYUEZpbGVMaXN0SXRlbSBvYmplY3RzIHVzaW5nIGJhdGNoIEFQSVxuICAgICAgY29uc3QgcHJlZml4ZWRJZHMgPSB0aGlzLmZpbGVzKCkgYXMgc3RyaW5nW107XG4gICAgICBjb25zdCBhY3R1YWxJZHMgPSBwcmVmaXhlZElkcy5tYXAoKGlkKSA9PiB0aGlzLnJlbW92ZUZpbGVQcmVmaXgoaWQpKTtcbiAgICAgIGxldCBmaWxlSXRlbXM6IEFYUEZpbGVMaXN0SXRlbVtdID0gW107XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBpbmZvcyA9IGF3YWl0IHRoaXMuZmlsZVNlcnZpY2UuZmluZE1hbnkoYWN0dWFsSWRzKTtcbiAgICAgICAgY29uc3QgaW5mb01hcCA9IG5ldyBNYXAoaW5mb3MubWFwKChpKSA9PiBbaS5maWxlSWQsIGldKSk7XG4gICAgICAgIGZpbGVJdGVtcyA9IHByZWZpeGVkSWRzLm1hcCgocHJlZml4ZWRJZCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGFjdHVhbElkID0gdGhpcy5yZW1vdmVGaWxlUHJlZml4KHByZWZpeGVkSWQpO1xuICAgICAgICAgIGNvbnN0IGluZm8gPSBpbmZvTWFwLmdldChhY3R1YWxJZCk7XG4gICAgICAgICAgaWYgKGluZm8pIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGlkOiBpbmZvLmZpbGVJZCxcbiAgICAgICAgICAgICAgbmFtZTogaW5mby5uYW1lIHx8ICcnLFxuICAgICAgICAgICAgICBzaXplOiBpbmZvLnNpemUsXG4gICAgICAgICAgICAgIHN0YXR1czogJ3VwbG9hZGVkJyxcbiAgICAgICAgICAgICAgc291cmNlOiB7XG4gICAgICAgICAgICAgICAga2luZDogJ2ZpbGVJZCcsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGluZm8uZmlsZUlkLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSBhcyBBWFBGaWxlTGlzdEl0ZW07XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpZDogYWN0dWFsSWQsXG4gICAgICAgICAgICBuYW1lOiAnVW5rbm93biBGaWxlJyxcbiAgICAgICAgICAgIHNpemU6IDAsXG4gICAgICAgICAgICBzdGF0dXM6ICdkZWxldGVkJyxcbiAgICAgICAgICAgIHNvdXJjZTogeyBraW5kOiAnbm9uZScsIHZhbHVlOiAnJyB9LFxuICAgICAgICAgIH0gYXMgQVhQRmlsZUxpc3RJdGVtO1xuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBnZXQgZmlsZSBpbmZvcycsIGVycm9yKTtcbiAgICAgICAgZmlsZUl0ZW1zID0gcHJlZml4ZWRJZHMubWFwKChwcmVmaXhlZElkKSA9PiAoe1xuICAgICAgICAgIGlkOiB0aGlzLnJlbW92ZUZpbGVQcmVmaXgocHJlZml4ZWRJZCksXG4gICAgICAgICAgbmFtZTogJ1Vua25vd24gRmlsZScsXG4gICAgICAgICAgc2l6ZTogMCxcbiAgICAgICAgICBzdGF0dXM6ICdkZWxldGVkJyxcbiAgICAgICAgICBzb3VyY2U6IHsga2luZDogJ25vbmUnLCB2YWx1ZTogJycgfSxcbiAgICAgICAgfSBhcyBBWFBGaWxlTGlzdEl0ZW0pKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgIC8vIFVwZGF0ZSB0aGUgY29udGV4dCB3aXRoIHRoZSBjb252ZXJ0ZWQgZmlsZSBpdGVtc1xuICAgICAgdGhpcy5jb250ZXh0LnNldCh7IGZpbGVzOiBmaWxlSXRlbXMgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHJlbW92ZUZpbGVQcmVmaXgoZmlsZUlkOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBmaWxlSWQuc3RhcnRzV2l0aCgnZmlsZTonKSA/IGZpbGVJZC5zdWJzdHJpbmcoNSkgOiBmaWxlSWQ7XG4gIH1cblxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gLS0tLSAgIFVJIEhhbmRsZXJzICAgLS0tLVxuXG4gIGFwcGx5KCkge1xuICAgIHRoaXMuY2xvc2Uoe1xuICAgICAgZGF0YTogdGhpcy5jb250ZXh0KCksXG4gICAgfSk7XG4gIH1cblxuICAvLyNlbmRyZWdpb25cblxufVxuIiwiPGRpdiBjbGFzcz1cImF4LXAtMlwiPlxuICA8YXhwLXdpZGdldHMtY29udGFpbmVyIFtjb250ZXh0XT1cImNvbnRleHQoKVwiIChvbkNvbnRleHRDaGFuZ2VkKT1cIm9uQ29udGV4dENoYW5nZWQoJGV2ZW50KVwiPlxuICAgIDxuZy1jb250YWluZXIgYXhwLXdpZGdldC1yZW5kZXJlciBbbm9kZV09XCJub2RlKClcIiBbbW9kZV09XCJtb2RlKClcIj48L25nLWNvbnRhaW5lcj5cbiAgPC9heHAtd2lkZ2V0cy1jb250YWluZXI+XG48L2Rpdj5cbjxheC1mb290ZXI+XG4gIDxheC1zdWZmaXg+XG4gICAgQGlmIChyZWFkT25seSgpKSB7XG4gICAgICA8YXgtYnV0dG9uIFt0ZXh0XT1cIidAZ2VuZXJhbDphY3Rpb25zLmNsb3NlLnRpdGxlJyB8IHRyYW5zbGF0ZSB8IGFzeW5jXCIgKGNsaWNrKT1cImNsb3NlKClcIj48L2F4LWJ1dHRvbj5cbiAgICB9IEBlbHNlIHtcbiAgICAgIDxheC1idXR0b24gW3RleHRdPVwiJ0BnZW5lcmFsOmFjdGlvbnMuZGlzY2FyZC50aXRsZScgfCB0cmFuc2xhdGUgfCBhc3luY1wiIChjbGljayk9XCJjbG9zZSgpXCI+PC9heC1idXR0b24+XG4gICAgICA8YXgtYnV0dG9uXG4gICAgICAgIFt0ZXh0XT1cIidAZ2VuZXJhbDphY3Rpb25zLmFwcGx5LnRpdGxlJyB8IHRyYW5zbGF0ZSB8IGFzeW5jXCJcbiAgICAgICAgKGNsaWNrKT1cImFwcGx5KClcIlxuICAgICAgICBbY29sb3JdPVwiJ3ByaW1hcnknXCJcbiAgICAgID48L2F4LWJ1dHRvbj5cbiAgICB9XG4gIDwvYXgtc3VmZml4PlxuPC9heC1mb290ZXI+XG4iXX0="],"names":["i1","i2","i3","i4"],"mappings":"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"}
|
|
@@ -10289,7 +10289,7 @@ class AXPEditFileUploaderCommand {
|
|
|
10289
10289
|
async execute(input) {
|
|
10290
10290
|
try {
|
|
10291
10291
|
// Show dialog to edit file details
|
|
10292
|
-
const updatedFile = await this.showEditDialog(input.file, input.plugins ?? [], input.excludePlugins ?? []);
|
|
10292
|
+
const updatedFile = await this.showEditDialog(input.file, input.plugins ?? [], input.excludePlugins ?? [], input.enableTitleDescription ?? false);
|
|
10293
10293
|
return {
|
|
10294
10294
|
success: true,
|
|
10295
10295
|
data: updatedFile
|
|
@@ -10306,10 +10306,14 @@ class AXPEditFileUploaderCommand {
|
|
|
10306
10306
|
}
|
|
10307
10307
|
//#endregion
|
|
10308
10308
|
//#region ---- Dialog Logic ----
|
|
10309
|
-
async showEditDialog(file, plugins, excludePlugins) {
|
|
10309
|
+
async showEditDialog(file, plugins, excludePlugins, enableTitleDescription) {
|
|
10310
10310
|
const title = await this.translationService.translateAsync('@general:widgets.file-uploader.edit-dialog.title');
|
|
10311
|
-
const
|
|
10312
|
-
|
|
10311
|
+
const nameLabel = enableTitleDescription
|
|
10312
|
+
? await this.translationService.translateAsync('@general:terms.common.name')
|
|
10313
|
+
: await this.translationService.translateAsync('@general:actions.rename.title');
|
|
10314
|
+
const namePlaceholder = await this.translationService.translateAsync('@general:actions.rename.title');
|
|
10315
|
+
const titleLabel = await this.translationService.translateAsync('@general:terms.common.title');
|
|
10316
|
+
const descriptionLabel = await this.translationService.translateAsync('@general:terms.common.description');
|
|
10313
10317
|
const submitLabel = await this.translationService.translateAsync('@general:actions.submit.title');
|
|
10314
10318
|
// Hooks: parameter insertion points
|
|
10315
10319
|
const beforeRenamePayload = await this.hooks.runAsync(FileUploaderWebhookKeys.EditDialog.Params.BeforeRename, {
|
|
@@ -10353,22 +10357,44 @@ class AXPEditFileUploaderCommand {
|
|
|
10353
10357
|
.setGap('16px');
|
|
10354
10358
|
// Add items before rename
|
|
10355
10359
|
this.buildFormFields(formFlex, beforeRenamePayload?.items ?? []);
|
|
10356
|
-
//
|
|
10357
|
-
formFlex.formField(
|
|
10360
|
+
// Name field (label "Name" when enableTitleDescription, else "Rename")
|
|
10361
|
+
formFlex.formField(nameLabel, field => {
|
|
10358
10362
|
field.path('name');
|
|
10359
10363
|
field.textBox({
|
|
10360
|
-
placeholder:
|
|
10364
|
+
placeholder: namePlaceholder,
|
|
10361
10365
|
validations: [
|
|
10362
10366
|
{ rule: 'maxLength', options: { value: 256 } }
|
|
10363
10367
|
]
|
|
10364
10368
|
});
|
|
10365
10369
|
});
|
|
10370
|
+
// Title and description fields when enableTitleDescription is true
|
|
10371
|
+
if (enableTitleDescription) {
|
|
10372
|
+
formFlex.formField(titleLabel, field => {
|
|
10373
|
+
field.path('title');
|
|
10374
|
+
field.textBox({
|
|
10375
|
+
placeholder: titleLabel,
|
|
10376
|
+
validations: [
|
|
10377
|
+
{ rule: 'maxLength', options: { value: 256 } }
|
|
10378
|
+
]
|
|
10379
|
+
});
|
|
10380
|
+
});
|
|
10381
|
+
formFlex.formField(descriptionLabel, field => {
|
|
10382
|
+
field.path('description');
|
|
10383
|
+
field.largeTextBox({
|
|
10384
|
+
placeholder: descriptionLabel,
|
|
10385
|
+
validations: [
|
|
10386
|
+
{ rule: 'maxLength', options: { value: 1024 } }
|
|
10387
|
+
]
|
|
10388
|
+
});
|
|
10389
|
+
});
|
|
10390
|
+
}
|
|
10366
10391
|
// Add items after rename
|
|
10367
10392
|
this.buildFormFields(formFlex, afterRenamePayload?.items ?? []);
|
|
10368
10393
|
});
|
|
10369
10394
|
// Add groups after form
|
|
10370
10395
|
this.buildGroups(contentBuilder, groupsAfterPayload?.groups ?? []);
|
|
10371
10396
|
})
|
|
10397
|
+
.setCloseButton(true)
|
|
10372
10398
|
.setActions(actions => {
|
|
10373
10399
|
actions.custom({
|
|
10374
10400
|
title: submitLabel,
|
|
@@ -10555,6 +10581,8 @@ class AXPFileListComponent {
|
|
|
10555
10581
|
this.onRename = output();
|
|
10556
10582
|
this.readonly = input(false, ...(ngDevMode ? [{ debugName: "readonly" }] : []));
|
|
10557
10583
|
this.fileEditable = input(true, ...(ngDevMode ? [{ debugName: "fileEditable" }] : []));
|
|
10584
|
+
/** When true, edit dialog shows name, title and description fields. Default false. */
|
|
10585
|
+
this.enableTitleDescription = input(false, ...(ngDevMode ? [{ debugName: "enableTitleDescription" }] : []));
|
|
10558
10586
|
this.multiple = input(true, ...(ngDevMode ? [{ debugName: "multiple" }] : []));
|
|
10559
10587
|
this.files = input([], ...(ngDevMode ? [{ debugName: "files" }] : []));
|
|
10560
10588
|
// Plugin context (passed from parent widget)
|
|
@@ -10870,6 +10898,7 @@ class AXPFileListComponent {
|
|
|
10870
10898
|
file,
|
|
10871
10899
|
plugins: this.plugins() ?? [],
|
|
10872
10900
|
excludePlugins: this.excludePlugins() ?? [],
|
|
10901
|
+
enableTitleDescription: this.enableTitleDescription(),
|
|
10873
10902
|
});
|
|
10874
10903
|
if (!commandResult?.success || !commandResult.data) {
|
|
10875
10904
|
return;
|
|
@@ -10911,7 +10940,7 @@ class AXPFileListComponent {
|
|
|
10911
10940
|
return action.color ?? 'primary';
|
|
10912
10941
|
}
|
|
10913
10942
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AXPFileListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
10914
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: AXPFileListComponent, isStandalone: true, selector: "axp-file-list", inputs: { readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, fileEditable: { classPropertyName: "fileEditable", publicName: "fileEditable", isSignal: true, isRequired: false, transformFunction: null }, multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: true, isRequired: false, transformFunction: null }, files: { classPropertyName: "files", publicName: "files", isSignal: true, isRequired: false, transformFunction: null }, plugins: { classPropertyName: "plugins", publicName: "plugins", isSignal: true, isRequired: false, transformFunction: null }, excludePlugins: { classPropertyName: "excludePlugins", publicName: "excludePlugins", isSignal: true, isRequired: false, transformFunction: null }, capabilities: { classPropertyName: "capabilities", publicName: "capabilities", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onRemove: "onRemove", onRevert: "onRevert", onRename: "onRename" }, providers: [], ngImport: i0, template: "@for (file of displayFiles(); track $index) {\n <div\n class=\"__item\"\n [ngClass]=\"{ '--removed': file.status === 'deleted', '--attached': file.status === 'attached' }\"\n >\n <div class=\"__icon\">\n <i class=\"fa-fw {{ getFileInfo(file.name).icon }} fa-solid\"></i>\n </div>\n <div class=\"__name\">{{ file.name }}</div>\n <div class=\"__actions\">\n @if (file.status === 'deleted' && multiple()) {\n <!-- Revert button - only show when multiple is true -->\n <ax-button [look]=\"'blank'\" class=\"ax-sm\" color=\"warning\" (onClick)=\"handleFileRevert($event,file)\">\n <ax-icon class=\"fa-light fa-rotate-left\"></ax-icon>\n </ax-button>\n } @else if (file.status !== 'deleted') {\n <!-- All actions from hooks (including default actions) -->\n @if (!readonly() || (readonly() && file.status === 'attached')) {\n @for (action of actionsFor(file, $index); track action.id ?? action.textKey ?? action.text ?? $index) {\n <ax-button\n [look]=\"'blank'\"\n class=\"ax-sm\"\n [color]=\"getActionColor(action)\"\n (onClick)=\"runAction(action)\"\n >\n @if (action.icon) {\n <ax-icon class=\"{{ action.icon }}\"></ax-icon>\n }\n </ax-button>\n }\n }\n }\n </div>\n </div>\n} @empty {\n <div class=\"__empty-state\">\n <axp-state-message\n icon=\"fa-light fa-folder-open\"\n [title]=\"'@general:widgets.file-uploader.empty-state.title'\"\n [description]=\"'@general:widgets.file-uploader.empty-state.description'\"\n >\n </axp-state-message>\n </div>\n}\n", styles: [":host{display:flex;width:100%;flex-direction:column;gap:.125rem;padding-top:.5rem;padding-bottom:.5rem}:host .__item{display:flex;cursor:pointer;align-items:center;gap:.75rem;border-left-width:4px;border-color:transparent;padding:.5rem}:host .__item:hover{background-color:rgb(var(--ax-sys-color-lighter-surface));color:rgb(var(--ax-sys-color-on-lighter-surface));border-color:rgb(var(--ax-sys-color-border-lighter-surface))}:host .__item.--removed{--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-danger-500),var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-danger-50),var(--tw-bg-opacity, 1))}:host .__item.--attached{--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-success-500),var(--tw-border-opacity, 1));animation:attached-flash 1s ease-out forwards}:host .__item .__icon{width:1.5rem;flex-shrink:0}:host .__item .__name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:start;font-size:.875rem;line-height:1.25rem;font-weight:500}:host .__item .__actions{margin-left:auto;display:flex}@keyframes attached-flash{0%{background-color:rgb(var(--ax-sys-color-success-50))}to{background-color:transparent}}.__empty-state{cursor:pointer;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s;animation-duration:.2s}.__empty-state:hover{opacity:.8}\n"], dependencies: [{ kind: "ngmodule", type:
|
|
10943
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: AXPFileListComponent, isStandalone: true, selector: "axp-file-list", inputs: { readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, fileEditable: { classPropertyName: "fileEditable", publicName: "fileEditable", isSignal: true, isRequired: false, transformFunction: null }, enableTitleDescription: { classPropertyName: "enableTitleDescription", publicName: "enableTitleDescription", isSignal: true, isRequired: false, transformFunction: null }, multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: true, isRequired: false, transformFunction: null }, files: { classPropertyName: "files", publicName: "files", isSignal: true, isRequired: false, transformFunction: null }, plugins: { classPropertyName: "plugins", publicName: "plugins", isSignal: true, isRequired: false, transformFunction: null }, excludePlugins: { classPropertyName: "excludePlugins", publicName: "excludePlugins", isSignal: true, isRequired: false, transformFunction: null }, capabilities: { classPropertyName: "capabilities", publicName: "capabilities", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onRemove: "onRemove", onRevert: "onRevert", onRename: "onRename" }, providers: [], ngImport: i0, template: "@for (file of displayFiles(); track $index) {\n <div\n class=\"__item\"\n [ngClass]=\"{ '--removed': file.status === 'deleted', '--attached': file.status === 'attached' }\"\n >\n <div class=\"__icon\">\n <i class=\"fa-fw {{ getFileInfo(file.name).icon }} fa-solid\"></i>\n </div>\n <div class=\"__name\">{{ file.name }}</div>\n <div class=\"__actions\">\n @if (file.status === 'deleted' && multiple()) {\n <!-- Revert button - only show when multiple is true -->\n <ax-button [look]=\"'blank'\" class=\"ax-sm\" color=\"warning\" (onClick)=\"handleFileRevert($event,file)\">\n <ax-icon class=\"fa-light fa-rotate-left\"></ax-icon>\n </ax-button>\n } @else if (file.status !== 'deleted') {\n <!-- All actions from hooks (including default actions) -->\n @if (!readonly() || (readonly() && file.status === 'attached')) {\n @for (action of actionsFor(file, $index); track action.id ?? action.textKey ?? action.text ?? $index) {\n <ax-button\n [look]=\"'blank'\"\n class=\"ax-sm\"\n [color]=\"getActionColor(action)\"\n (onClick)=\"runAction(action)\"\n >\n @if (action.icon) {\n <ax-icon class=\"{{ action.icon }}\"></ax-icon>\n }\n </ax-button>\n }\n }\n }\n </div>\n </div>\n} @empty {\n <div class=\"__empty-state\">\n <axp-state-message\n icon=\"fa-light fa-folder-open\"\n [title]=\"'@general:widgets.file-uploader.empty-state.title'\"\n [description]=\"'@general:widgets.file-uploader.empty-state.description'\"\n >\n </axp-state-message>\n </div>\n}\n", styles: [":host{display:flex;width:100%;flex-direction:column;gap:.125rem;padding-top:.5rem;padding-bottom:.5rem}:host .__item{display:flex;cursor:pointer;align-items:center;gap:.75rem;border-left-width:4px;border-color:transparent;padding:.5rem}:host .__item:hover{background-color:rgb(var(--ax-sys-color-lighter-surface));color:rgb(var(--ax-sys-color-on-lighter-surface));border-color:rgb(var(--ax-sys-color-border-lighter-surface))}:host .__item.--removed{--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-danger-500),var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-danger-50),var(--tw-bg-opacity, 1))}:host .__item.--attached{--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-success-500),var(--tw-border-opacity, 1));animation:attached-flash 1s ease-out forwards}:host .__item .__icon{width:1.5rem;flex-shrink:0}:host .__item .__name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:start;font-size:.875rem;line-height:1.25rem;font-weight:500}:host .__item .__actions{margin-left:auto;display:flex}@keyframes attached-flash{0%{background-color:rgb(var(--ax-sys-color-success-50))}to{background-color:transparent}}.__empty-state{cursor:pointer;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s;animation-duration:.2s}.__empty-state:hover{opacity:.8}\n"], dependencies: [{ kind: "ngmodule", type:
|
|
10915
10944
|
// Angular
|
|
10916
10945
|
CommonModule }, { kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type:
|
|
10917
10946
|
// ACoreX
|
|
@@ -10935,7 +10964,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
|
|
|
10935
10964
|
// Platform
|
|
10936
10965
|
AXPStateMessageComponent,
|
|
10937
10966
|
], providers: [], template: "@for (file of displayFiles(); track $index) {\n <div\n class=\"__item\"\n [ngClass]=\"{ '--removed': file.status === 'deleted', '--attached': file.status === 'attached' }\"\n >\n <div class=\"__icon\">\n <i class=\"fa-fw {{ getFileInfo(file.name).icon }} fa-solid\"></i>\n </div>\n <div class=\"__name\">{{ file.name }}</div>\n <div class=\"__actions\">\n @if (file.status === 'deleted' && multiple()) {\n <!-- Revert button - only show when multiple is true -->\n <ax-button [look]=\"'blank'\" class=\"ax-sm\" color=\"warning\" (onClick)=\"handleFileRevert($event,file)\">\n <ax-icon class=\"fa-light fa-rotate-left\"></ax-icon>\n </ax-button>\n } @else if (file.status !== 'deleted') {\n <!-- All actions from hooks (including default actions) -->\n @if (!readonly() || (readonly() && file.status === 'attached')) {\n @for (action of actionsFor(file, $index); track action.id ?? action.textKey ?? action.text ?? $index) {\n <ax-button\n [look]=\"'blank'\"\n class=\"ax-sm\"\n [color]=\"getActionColor(action)\"\n (onClick)=\"runAction(action)\"\n >\n @if (action.icon) {\n <ax-icon class=\"{{ action.icon }}\"></ax-icon>\n }\n </ax-button>\n }\n }\n }\n </div>\n </div>\n} @empty {\n <div class=\"__empty-state\">\n <axp-state-message\n icon=\"fa-light fa-folder-open\"\n [title]=\"'@general:widgets.file-uploader.empty-state.title'\"\n [description]=\"'@general:widgets.file-uploader.empty-state.description'\"\n >\n </axp-state-message>\n </div>\n}\n", styles: [":host{display:flex;width:100%;flex-direction:column;gap:.125rem;padding-top:.5rem;padding-bottom:.5rem}:host .__item{display:flex;cursor:pointer;align-items:center;gap:.75rem;border-left-width:4px;border-color:transparent;padding:.5rem}:host .__item:hover{background-color:rgb(var(--ax-sys-color-lighter-surface));color:rgb(var(--ax-sys-color-on-lighter-surface));border-color:rgb(var(--ax-sys-color-border-lighter-surface))}:host .__item.--removed{--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-danger-500),var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-danger-50),var(--tw-bg-opacity, 1))}:host .__item.--attached{--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-success-500),var(--tw-border-opacity, 1));animation:attached-flash 1s ease-out forwards}:host .__item .__icon{width:1.5rem;flex-shrink:0}:host .__item .__name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:start;font-size:.875rem;line-height:1.25rem;font-weight:500}:host .__item .__actions{margin-left:auto;display:flex}@keyframes attached-flash{0%{background-color:rgb(var(--ax-sys-color-success-50))}to{background-color:transparent}}.__empty-state{cursor:pointer;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s;animation-duration:.2s}.__empty-state:hover{opacity:.8}\n"] }]
|
|
10938
|
-
}], propDecorators: { onRemove: [{ type: i0.Output, args: ["onRemove"] }], onRevert: [{ type: i0.Output, args: ["onRevert"] }], onRename: [{ type: i0.Output, args: ["onRename"] }], readonly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readonly", required: false }] }], fileEditable: [{ type: i0.Input, args: [{ isSignal: true, alias: "fileEditable", required: false }] }], multiple: [{ type: i0.Input, args: [{ isSignal: true, alias: "multiple", required: false }] }], files: [{ type: i0.Input, args: [{ isSignal: true, alias: "files", required: false }] }], plugins: [{ type: i0.Input, args: [{ isSignal: true, alias: "plugins", required: false }] }], excludePlugins: [{ type: i0.Input, args: [{ isSignal: true, alias: "excludePlugins", required: false }] }], capabilities: [{ type: i0.Input, args: [{ isSignal: true, alias: "capabilities", required: false }] }] } });
|
|
10967
|
+
}], propDecorators: { onRemove: [{ type: i0.Output, args: ["onRemove"] }], onRevert: [{ type: i0.Output, args: ["onRevert"] }], onRename: [{ type: i0.Output, args: ["onRename"] }], readonly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readonly", required: false }] }], fileEditable: [{ type: i0.Input, args: [{ isSignal: true, alias: "fileEditable", required: false }] }], enableTitleDescription: [{ type: i0.Input, args: [{ isSignal: true, alias: "enableTitleDescription", required: false }] }], multiple: [{ type: i0.Input, args: [{ isSignal: true, alias: "multiple", required: false }] }], files: [{ type: i0.Input, args: [{ isSignal: true, alias: "files", required: false }] }], plugins: [{ type: i0.Input, args: [{ isSignal: true, alias: "plugins", required: false }] }], excludePlugins: [{ type: i0.Input, args: [{ isSignal: true, alias: "excludePlugins", required: false }] }], capabilities: [{ type: i0.Input, args: [{ isSignal: true, alias: "capabilities", required: false }] }] } });
|
|
10939
10968
|
|
|
10940
10969
|
class AXPFileUploaderWidgetService {
|
|
10941
10970
|
constructor() {
|
|
@@ -10950,11 +10979,14 @@ class AXPFileUploaderWidgetService {
|
|
|
10950
10979
|
accept: '*',
|
|
10951
10980
|
fileEditable: true,
|
|
10952
10981
|
maxFileSize: 1024 * 1024 * 10,
|
|
10982
|
+
plugins: [],
|
|
10983
|
+
excludePlugins: [],
|
|
10984
|
+
enableTitleDescription: false,
|
|
10953
10985
|
};
|
|
10954
10986
|
options = { ...defaultOptions, ...options };
|
|
10955
|
-
const component = await import('./acorex-platform-layout-widgets-file-list-popup.component-
|
|
10987
|
+
const component = await import('./acorex-platform-layout-widgets-file-list-popup.component-CChaPy_w.mjs').then((m) => m.AXPFileListPopupComponent);
|
|
10956
10988
|
const result = await this.popupService.open(component, {
|
|
10957
|
-
title:
|
|
10989
|
+
title: await this.translate.translateAsync('@document-management:terms.common.file'),
|
|
10958
10990
|
data: {
|
|
10959
10991
|
files: signal(options.files),
|
|
10960
10992
|
readOnly: signal(options.readOnly),
|
|
@@ -10962,6 +10994,9 @@ class AXPFileUploaderWidgetService {
|
|
|
10962
10994
|
accept: signal(options.accept),
|
|
10963
10995
|
maxFileSize: signal(options.maxFileSize),
|
|
10964
10996
|
fileEditable: signal(options.fileEditable ?? true),
|
|
10997
|
+
plugins: options.plugins ?? [],
|
|
10998
|
+
excludePlugins: options.excludePlugins ?? [],
|
|
10999
|
+
enableTitleDescription: signal(options.enableTitleDescription ?? false),
|
|
10965
11000
|
},
|
|
10966
11001
|
});
|
|
10967
11002
|
return result?.data?.data?.files;
|
|
@@ -11037,6 +11072,7 @@ class AXPFileUploaderWidgetEditComponent extends AXPValueWidgetComponent {
|
|
|
11037
11072
|
}
|
|
11038
11073
|
return this.options()['fileEditable'];
|
|
11039
11074
|
}, ...(ngDevMode ? [{ debugName: "fileEditable" }] : []));
|
|
11075
|
+
this.enableTitleDescription = computed(() => this.options()['enableTitleDescription'] ?? false, ...(ngDevMode ? [{ debugName: "enableTitleDescription" }] : []));
|
|
11040
11076
|
this.readonly = computed(() => this.options()['readonly'], ...(ngDevMode ? [{ debugName: "readonly" }] : []));
|
|
11041
11077
|
this.maxFileSize = computed(() => this.options()['maxFileSize'], ...(ngDevMode ? [{ debugName: "maxFileSize" }] : []));
|
|
11042
11078
|
// Drag and drop state
|
|
@@ -11255,6 +11291,7 @@ class AXPFileUploaderWidgetEditComponent extends AXPValueWidgetComponent {
|
|
|
11255
11291
|
[files]="files()"
|
|
11256
11292
|
[readonly]="readonly()"
|
|
11257
11293
|
[fileEditable]="fileEditable()"
|
|
11294
|
+
[enableTitleDescription]="enableTitleDescription()"
|
|
11258
11295
|
[plugins]="plugins()"
|
|
11259
11296
|
[excludePlugins]="excludePlugins()"
|
|
11260
11297
|
[capabilities]="capabilities"
|
|
@@ -11264,7 +11301,7 @@ class AXPFileUploaderWidgetEditComponent extends AXPValueWidgetComponent {
|
|
|
11264
11301
|
(onRename)="handleFileRename($event)"
|
|
11265
11302
|
></axp-file-list>
|
|
11266
11303
|
</div>
|
|
11267
|
-
`, isInline: true, styles: [".__drag-over{background-color:rgba(var(--ax-sys-color-primary-50),.1);border:2px dashed rgb(var(--ax-sys-color-primary-500));border-radius:.375rem}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { 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: "component", type: i1.AXButtonItemComponent, selector: "ax-button-item", inputs: ["color", "disabled", "text", "selected", "divided", "data", "name"], outputs: ["onClick", "onFocus", "onBlur", "disabledChange"] }, { kind: "component", type: i1.AXButtonItemListComponent, selector: "ax-button-item-list", inputs: ["items", "closeParentOnClick", "lockOnLoading"], outputs: ["onItemClick"] }, { kind: "directive", type: AXUploaderZoneDirective, selector: "[axUploaderZone]", inputs: ["multiple", "accept", "overlayTemplate", "disableBrowse", "disableDragDrop"], outputs: ["fileChange", "onChanged", "dragEnter", "dragLeave", "dragOver", "onFileUploadComplete", "onFilesUploadComplete"] }, { 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: AXLoadingModule }, { kind: "ngmodule", type: AXDropdownModule }, { kind: "component", type: i5$2.AXDropdownPanelComponent, selector: "ax-dropdown-panel", inputs: ["isOpen", "fitParent", "dropdownWidth", "position", "placement", "_target", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "ngmodule", type: AXPComponentSlotModule }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "directive", type: i5.AXTranslatorDirective, selector: "[translate]" }, { kind: "component", type: AXPFileListComponent, selector: "axp-file-list", inputs: ["readonly", "fileEditable", "multiple", "files", "plugins", "excludePlugins", "capabilities"], outputs: ["onRemove", "onRevert", "onRename"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
11304
|
+
`, isInline: true, styles: [".__drag-over{background-color:rgba(var(--ax-sys-color-primary-50),.1);border:2px dashed rgb(var(--ax-sys-color-primary-500));border-radius:.375rem}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { 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: "component", type: i1.AXButtonItemComponent, selector: "ax-button-item", inputs: ["color", "disabled", "text", "selected", "divided", "data", "name"], outputs: ["onClick", "onFocus", "onBlur", "disabledChange"] }, { kind: "component", type: i1.AXButtonItemListComponent, selector: "ax-button-item-list", inputs: ["items", "closeParentOnClick", "lockOnLoading"], outputs: ["onItemClick"] }, { kind: "directive", type: AXUploaderZoneDirective, selector: "[axUploaderZone]", inputs: ["multiple", "accept", "overlayTemplate", "disableBrowse", "disableDragDrop"], outputs: ["fileChange", "onChanged", "dragEnter", "dragLeave", "dragOver", "onFileUploadComplete", "onFilesUploadComplete"] }, { 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: AXLoadingModule }, { kind: "ngmodule", type: AXDropdownModule }, { kind: "component", type: i5$2.AXDropdownPanelComponent, selector: "ax-dropdown-panel", inputs: ["isOpen", "fitParent", "dropdownWidth", "position", "placement", "_target", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "ngmodule", type: AXPComponentSlotModule }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "directive", type: i5.AXTranslatorDirective, selector: "[translate]" }, { kind: "component", type: AXPFileListComponent, selector: "axp-file-list", inputs: ["readonly", "fileEditable", "enableTitleDescription", "multiple", "files", "plugins", "excludePlugins", "capabilities"], outputs: ["onRemove", "onRevert", "onRename"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
11268
11305
|
}
|
|
11269
11306
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AXPFileUploaderWidgetEditComponent, decorators: [{
|
|
11270
11307
|
type: Component,
|
|
@@ -11306,6 +11343,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
|
|
|
11306
11343
|
[files]="files()"
|
|
11307
11344
|
[readonly]="readonly()"
|
|
11308
11345
|
[fileEditable]="fileEditable()"
|
|
11346
|
+
[enableTitleDescription]="enableTitleDescription()"
|
|
11309
11347
|
[plugins]="plugins()"
|
|
11310
11348
|
[excludePlugins]="excludePlugins()"
|
|
11311
11349
|
[capabilities]="capabilities"
|
|
@@ -11353,7 +11391,7 @@ class AXPFileUploaderWidgetViewComponent extends AXPValueWidgetComponent {
|
|
|
11353
11391
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AXPFileUploaderWidgetViewComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
11354
11392
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.16", type: AXPFileUploaderWidgetViewComponent, isStandalone: true, selector: "axp-file-uploader-widget-view", host: { properties: { "class": "this.__class" } }, usesInheritance: true, ngImport: i0, template: `
|
|
11355
11393
|
<axp-file-list [files]="files()" [readonly]="true"></axp-file-list>
|
|
11356
|
-
`, isInline: true, dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "ngmodule", type: AXUploaderModule }, { kind: "ngmodule", type: AXLoadingModule }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "component", type: AXPFileListComponent, selector: "axp-file-list", inputs: ["readonly", "fileEditable", "multiple", "files", "plugins", "excludePlugins", "capabilities"], outputs: ["onRemove", "onRevert", "onRename"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
11394
|
+
`, isInline: true, dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "ngmodule", type: AXUploaderModule }, { kind: "ngmodule", type: AXLoadingModule }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "component", type: AXPFileListComponent, selector: "axp-file-list", inputs: ["readonly", "fileEditable", "enableTitleDescription", "multiple", "files", "plugins", "excludePlugins", "capabilities"], outputs: ["onRemove", "onRevert", "onRename"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
11357
11395
|
}
|
|
11358
11396
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AXPFileUploaderWidgetViewComponent, decorators: [{
|
|
11359
11397
|
type: Component,
|
|
@@ -11412,6 +11450,12 @@ const AXPFileUploaderWidget = {
|
|
|
11412
11450
|
path: 'options.fileEditable',
|
|
11413
11451
|
group: AXP_BEHAVIOR_PROPERTY_GROUP,
|
|
11414
11452
|
}),
|
|
11453
|
+
createBooleanProperty({
|
|
11454
|
+
name: 'enableTitleDescription',
|
|
11455
|
+
title: 'Enable Title & Description',
|
|
11456
|
+
path: 'options.enableTitleDescription',
|
|
11457
|
+
group: AXP_BEHAVIOR_PROPERTY_GROUP,
|
|
11458
|
+
}),
|
|
11415
11459
|
createNumberProperty({
|
|
11416
11460
|
name: 'maxFileSize',
|
|
11417
11461
|
title: 'Max File Size (bytes)',
|
|
@@ -11460,6 +11504,8 @@ class AXPGalleryWidgetEditComponent extends AXPValueWidgetComponent {
|
|
|
11460
11504
|
this.loadingDialog = inject(AXLoadingDialogService);
|
|
11461
11505
|
this.translationService = inject(AXTranslationService);
|
|
11462
11506
|
this.gallery = viewChild('c', ...(ngDevMode ? [{ debugName: "gallery" }] : []));
|
|
11507
|
+
/** Object URLs created for blobs/binary; revoked on destroy for memory safety. */
|
|
11508
|
+
this.objectUrls = new Set();
|
|
11463
11509
|
/**
|
|
11464
11510
|
* Convert AXPFileListItem[] to AXMediaViewerData[] for display in media viewer.
|
|
11465
11511
|
* Uses lazy-loading callbacks for URL resolution.
|
|
@@ -11622,15 +11668,28 @@ class AXPGalleryWidgetEditComponent extends AXPValueWidgetComponent {
|
|
|
11622
11668
|
* Resolve the URL for a file item.
|
|
11623
11669
|
* Returns a promise that resolves to the file URL.
|
|
11624
11670
|
*/
|
|
11671
|
+
/**
|
|
11672
|
+
* Register an object URL for later revocation on destroy (memory safety).
|
|
11673
|
+
*/
|
|
11674
|
+
trackObjectUrl(url) {
|
|
11675
|
+
if (url.startsWith('blob:')) {
|
|
11676
|
+
this.objectUrls.add(url);
|
|
11677
|
+
}
|
|
11678
|
+
return url;
|
|
11679
|
+
}
|
|
11625
11680
|
async resolveFileUrl(file) {
|
|
11626
11681
|
// Blob source - create object URL
|
|
11627
11682
|
if (file.source?.kind === 'blob' && file.source.value instanceof Blob) {
|
|
11628
|
-
return URL.createObjectURL(file.source.value);
|
|
11683
|
+
return this.trackObjectUrl(URL.createObjectURL(file.source.value));
|
|
11629
11684
|
}
|
|
11630
11685
|
// File ID source - fetch from storage service
|
|
11631
11686
|
if (file.source?.kind === 'fileId' && typeof file.source.value === 'string') {
|
|
11632
11687
|
const fileInfo = await this.fileStorageService.getInfo(file.source.value);
|
|
11633
|
-
|
|
11688
|
+
if (fileInfo?.url)
|
|
11689
|
+
return fileInfo.url;
|
|
11690
|
+
if (fileInfo?.binary)
|
|
11691
|
+
return this.trackObjectUrl(URL.createObjectURL(fileInfo.binary));
|
|
11692
|
+
return '';
|
|
11634
11693
|
}
|
|
11635
11694
|
// URL source - return directly
|
|
11636
11695
|
if (file.source?.kind === 'url' && typeof file.source.value === 'string') {
|
|
@@ -11645,10 +11704,20 @@ class AXPGalleryWidgetEditComponent extends AXPValueWidgetComponent {
|
|
|
11645
11704
|
}
|
|
11646
11705
|
// Assume it's a file ID - fetch from storage service
|
|
11647
11706
|
const fileInfo = await this.fileStorageService.getInfo(value);
|
|
11648
|
-
|
|
11707
|
+
if (fileInfo?.url)
|
|
11708
|
+
return fileInfo.url;
|
|
11709
|
+
if (fileInfo?.binary)
|
|
11710
|
+
return this.trackObjectUrl(URL.createObjectURL(fileInfo.binary));
|
|
11711
|
+
return '';
|
|
11649
11712
|
}
|
|
11650
11713
|
return '';
|
|
11651
11714
|
}
|
|
11715
|
+
ngOnDestroy() {
|
|
11716
|
+
for (const url of this.objectUrls) {
|
|
11717
|
+
URL.revokeObjectURL(url);
|
|
11718
|
+
}
|
|
11719
|
+
this.objectUrls.clear();
|
|
11720
|
+
}
|
|
11652
11721
|
/**
|
|
11653
11722
|
* Process files from various sources (file picker, drag-drop, etc.)
|
|
11654
11723
|
* This method is called by drag-and-drop handler
|