@acorex-platform/framework-client 2.0.0-next.13 → 2.0.0-next.15
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-Cyr1DaiD.mjs → acorex-platform-framework-client-common-common-settings.provider-ChU2tvyt.mjs} +2 -19
- package/fesm2022/{acorex-platform-framework-client-common-common-settings.provider-Cyr1DaiD.mjs.map → acorex-platform-framework-client-common-common-settings.provider-ChU2tvyt.mjs.map} +1 -1
- package/fesm2022/acorex-platform-framework-client-common.mjs +26 -126
- package/fesm2022/acorex-platform-framework-client-common.mjs.map +1 -1
- package/fesm2022/acorex-platform-framework-client-layout-components.mjs +98 -221
- 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-D2kZxLOh.mjs → acorex-platform-framework-client-layout-entity-acorex-platform-framework-client-layout-entity-RG1FLjoP.mjs} +17 -18
- package/fesm2022/{acorex-platform-framework-client-layout-entity-acorex-platform-framework-client-layout-entity-D2kZxLOh.mjs.map → acorex-platform-framework-client-layout-entity-acorex-platform-framework-client-layout-entity-RG1FLjoP.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-framework-client-layout-entity-attachments-page.component-BManmr01.mjs → acorex-platform-framework-client-layout-entity-attachments-page.component-Bh8YRyxV.mjs} +2 -2
- package/fesm2022/{acorex-platform-framework-client-layout-entity-attachments-page.component-BManmr01.mjs.map → acorex-platform-framework-client-layout-entity-attachments-page.component-Bh8YRyxV.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-framework-client-layout-entity-bulk-entity.command-B8XsnrnO.mjs → acorex-platform-framework-client-layout-entity-bulk-entity.command-CSfoFx99.mjs} +2 -2
- package/fesm2022/{acorex-platform-framework-client-layout-entity-bulk-entity.command-B8XsnrnO.mjs.map → acorex-platform-framework-client-layout-entity-bulk-entity.command-CSfoFx99.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-framework-client-layout-entity-file-list-popup.component-DGZVS11E.mjs → acorex-platform-framework-client-layout-entity-file-list-popup.component-Z2N8JZ3_.mjs} +2 -2
- package/fesm2022/{acorex-platform-framework-client-layout-entity-file-list-popup.component-DGZVS11E.mjs.map → acorex-platform-framework-client-layout-entity-file-list-popup.component-Z2N8JZ3_.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-framework-client-layout-entity-gallery-page.component-Be348QCj.mjs → acorex-platform-framework-client-layout-entity-gallery-page.component-ZEGLkwzi.mjs} +2 -2
- package/fesm2022/{acorex-platform-framework-client-layout-entity-gallery-page.component-Be348QCj.mjs.map → acorex-platform-framework-client-layout-entity-gallery-page.component-ZEGLkwzi.mjs.map} +1 -1
- package/fesm2022/acorex-platform-framework-client-layout-entity.mjs +1 -1
- package/fesm2022/acorex-platform-framework-client-layout-views.mjs +10 -59
- package/fesm2022/acorex-platform-framework-client-layout-views.mjs.map +1 -1
- package/fesm2022/acorex-platform-framework-client-layout-widget-core.mjs +158 -42
- package/fesm2022/acorex-platform-framework-client-layout-widget-core.mjs.map +1 -1
- package/fesm2022/{acorex-platform-framework-client-layout-widgets-acorex-platform-framework-client-layout-widgets-M8SZFPQx.mjs → acorex-platform-framework-client-layout-widgets-acorex-platform-framework-client-layout-widgets-CzhP4_OE.mjs} +5 -13
- package/fesm2022/acorex-platform-framework-client-layout-widgets-acorex-platform-framework-client-layout-widgets-CzhP4_OE.mjs.map +1 -0
- package/fesm2022/{acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-DsLgZbZA.mjs → acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-BIl416zF.mjs} +2 -2
- package/fesm2022/{acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-DsLgZbZA.mjs.map → acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-BIl416zF.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-framework-client-layout-widgets-text-block-widget-designer.component-Vpz3itLZ.mjs → acorex-platform-framework-client-layout-widgets-text-block-widget-designer.component-DK8XXQuT.mjs} +2 -2
- package/fesm2022/{acorex-platform-framework-client-layout-widgets-text-block-widget-designer.component-Vpz3itLZ.mjs.map → acorex-platform-framework-client-layout-widgets-text-block-widget-designer.component-DK8XXQuT.mjs.map} +1 -1
- package/fesm2022/acorex-platform-framework-client-layout-widgets.mjs +1 -1
- package/fesm2022/acorex-platform-framework-client-realtime.mjs +7 -49
- package/fesm2022/acorex-platform-framework-client-realtime.mjs.map +1 -1
- package/fesm2022/acorex-platform-framework-client-themes-default.mjs +7 -14
- package/fesm2022/acorex-platform-framework-client-themes-default.mjs.map +1 -1
- package/i18n/en-AU/general.json +4 -16
- package/i18n/en-AU/layout.json +1 -2
- package/i18n/en-US/general.json +4 -16
- package/i18n/en-US/layout.json +1 -2
- package/i18n/fa-IR/general.json +4 -16
- package/i18n/fa-IR/layout.json +1 -2
- package/package.json +2 -2
- package/types/acorex-platform-framework-client-common.d.ts +5 -40
- package/types/acorex-platform-framework-client-layout-components.d.ts +3 -9
- package/types/acorex-platform-framework-client-layout-entity.d.ts +0 -2
- package/types/acorex-platform-framework-client-layout-views.d.ts +0 -15
- package/types/acorex-platform-framework-client-layout-widget-core.d.ts +11 -11
- package/types/acorex-platform-framework-client-layout-widgets.d.ts +0 -12
- package/types/acorex-platform-framework-client-realtime.d.ts +0 -5
- package/fesm2022/acorex-platform-framework-client-layout-widgets-acorex-platform-framework-client-layout-widgets-M8SZFPQx.mjs.map +0 -1
|
@@ -14,12 +14,12 @@ import * as i4$3 from '@acorex/core/format';
|
|
|
14
14
|
import { AXFormatService, AXFormatModule } from '@acorex/core/format';
|
|
15
15
|
import { AXPLayoutRendererComponent, AXPDialogOpener, AXPLayoutBuilderService, resolveLayoutBuilderDialogResult } from '@acorex-platform/framework-client/layout/builder';
|
|
16
16
|
import * as i1 from '@angular/common';
|
|
17
|
-
import { CommonModule, NgTemplateOutlet, AsyncPipe, isPlatformBrowser,
|
|
17
|
+
import { CommonModule, NgTemplateOutlet, AsyncPipe, isPlatformBrowser, NgComponentOutlet, DOCUMENT } from '@angular/common';
|
|
18
18
|
import * as i0 from '@angular/core';
|
|
19
19
|
import { inject, input, signal, effect, ViewEncapsulation, ChangeDetectionStrategy, Component, output, computed, linkedSignal, InjectionToken, Injector, Injectable, Directive, viewChild, contentChild, ElementRef, afterNextRender, model, EventEmitter, forwardRef, ViewChild, Output, Input, untracked, DestroyRef, PLATFORM_ID, createComponent, EnvironmentInjector, runInInjectionContext, ApplicationRef, makeEnvironmentProviders, viewChildren, ViewChildren, TemplateRef, contentChildren } from '@angular/core';
|
|
20
20
|
import { AXAccordionCdkModule } from '@acorex/cdk/accordion';
|
|
21
21
|
import { AXTagModule } from '@acorex/components/tag';
|
|
22
|
-
import { AXPSettingsService, AXPStateMessageComponent,
|
|
22
|
+
import { AXPSettingsService, AXPStateMessageComponent, AXPFileChooserSettings, normalizeStoredImageRef, extractFileExtension, AXPFileStorageService, AXPFileTypeProviderService, resolveFileTypeDisplay, AXPCommonSettings, coerceAXPSettingRawValueByKind, AXPFilterOperatorMiddlewareService, ALL_DEFAULT_OPERATORS, withDefaultMultiLanguageOnWidgetProperty, AXPDefaultMultiLanguageConfigService, resolveSearchableText, isStoredImageFileId, resolveStoredImageDisplayUrl } from '@acorex-platform/framework-client/common';
|
|
23
23
|
export { AXPFileChooserSettings, AXPStateMessageComponent } from '@acorex-platform/framework-client/common';
|
|
24
24
|
import * as i1$1 from '@acorex/components/avatar';
|
|
25
25
|
import { AXAvatarModule } from '@acorex/components/avatar';
|
|
@@ -65,8 +65,8 @@ import { AXPopupService } from '@acorex/components/popup';
|
|
|
65
65
|
import { moveItemInArray as moveItemInArray$1, AXDragDirective, AXDragHandleDirective, AXDropListDirective } from '@acorex/cdk/drag-drop';
|
|
66
66
|
import { normalizeEntityListUserStylingRules, AXP_ENTITY_LIST_RECORD_STYLING_TARGET, createEntityListStylingCondition, isEntityListRecordStylingTarget, resolveEntityListFilterQueryField, resolveEntityListFilterContextField, isCustomQueryView } from '@acorex-platform/framework-shared/entity';
|
|
67
67
|
import { AXLookupComponent } from '@acorex/components/lookup';
|
|
68
|
-
import { AXToastService } from '@acorex/components/toast';
|
|
69
68
|
import { DomSanitizer } from '@angular/platform-browser';
|
|
69
|
+
import { AXToastService } from '@acorex/components/toast';
|
|
70
70
|
import { getFileExtension, AXFileService } from '@acorex/core/file';
|
|
71
71
|
import { AXDialogService } from '@acorex/components/dialog';
|
|
72
72
|
import { resolveFileViewerFileType, AXFileViewerContainerComponent, AXFileViewerService, AXFileViewerGalleryService } from '@acorex/components/file-viewer';
|
|
@@ -4264,6 +4264,36 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
4264
4264
|
args: [{ providedIn: 'root' }]
|
|
4265
4265
|
}] });
|
|
4266
4266
|
|
|
4267
|
+
//#region ---- Rejection notifications ----
|
|
4268
|
+
async function notifyFileAcceptRejections(rejected, deps) {
|
|
4269
|
+
if (rejected.length === 0) {
|
|
4270
|
+
return;
|
|
4271
|
+
}
|
|
4272
|
+
const { translateService, toastService, maxFileSize } = deps;
|
|
4273
|
+
const errorTitle = await translateService.translateAsync('@general:messages.error.title');
|
|
4274
|
+
const typeRejections = rejected.filter((entry) => entry.reason === 'type');
|
|
4275
|
+
const sizeRejections = rejected.filter((entry) => entry.reason === 'size');
|
|
4276
|
+
if (typeRejections.length === 1) {
|
|
4277
|
+
const content = await translateService.translateAsync('@general:widgets.file-uploader.validation.file-type-not-allowed', { params: { fileName: typeRejections[0].file.name } });
|
|
4278
|
+
toastService.show({ color: 'danger', title: errorTitle, content });
|
|
4279
|
+
return;
|
|
4280
|
+
}
|
|
4281
|
+
if (typeRejections.length > 1) {
|
|
4282
|
+
const content = await translateService.translateAsync('@general:widgets.file-uploader.validation.file-type-not-allowed-summary', { params: { count: typeRejections.length } });
|
|
4283
|
+
toastService.show({ color: 'danger', title: errorTitle, content });
|
|
4284
|
+
return;
|
|
4285
|
+
}
|
|
4286
|
+
if (sizeRejections.length === 1) {
|
|
4287
|
+
const maxMb = Math.round((maxFileSize / (1024 * 1024)) * 10) / 10;
|
|
4288
|
+
const content = await translateService.translateAsync('@general:widgets.file-uploader.validation.file-size-exceeds-limit', { params: { fileName: sizeRejections[0].file.name, maxSizeMb: maxMb } });
|
|
4289
|
+
toastService.show({ color: 'danger', title: errorTitle, content });
|
|
4290
|
+
return;
|
|
4291
|
+
}
|
|
4292
|
+
const content = await translateService.translateAsync('@general:widgets.file-uploader.validation.files-rejected-summary', { params: { count: rejected.length } });
|
|
4293
|
+
toastService.show({ color: 'danger', title: errorTitle, content });
|
|
4294
|
+
}
|
|
4295
|
+
//#endregion
|
|
4296
|
+
|
|
4267
4297
|
//#endregion
|
|
4268
4298
|
//#region ---- Validation ----
|
|
4269
4299
|
function isUnrestrictedFileAccept(accept) {
|
|
@@ -4448,36 +4478,6 @@ function matchesCategoryByExtension(fileName, category) {
|
|
|
4448
4478
|
}
|
|
4449
4479
|
//#endregion
|
|
4450
4480
|
|
|
4451
|
-
//#region ---- Rejection notifications ----
|
|
4452
|
-
async function notifyFileAcceptRejections(rejected, deps) {
|
|
4453
|
-
if (rejected.length === 0) {
|
|
4454
|
-
return;
|
|
4455
|
-
}
|
|
4456
|
-
const { translateService, toastService, maxFileSize } = deps;
|
|
4457
|
-
const errorTitle = await translateService.translateAsync('@general:messages.generic.error.title');
|
|
4458
|
-
const typeRejections = rejected.filter((entry) => entry.reason === 'type');
|
|
4459
|
-
const sizeRejections = rejected.filter((entry) => entry.reason === 'size');
|
|
4460
|
-
if (typeRejections.length === 1) {
|
|
4461
|
-
const content = await translateService.translateAsync('@general:widgets.file-uploader.validation.file-type-not-allowed', { params: { fileName: typeRejections[0].file.name } });
|
|
4462
|
-
toastService.show({ color: 'danger', title: errorTitle, content });
|
|
4463
|
-
}
|
|
4464
|
-
else if (typeRejections.length > 1) {
|
|
4465
|
-
const content = await translateService.translateAsync('@general:widgets.file-uploader.validation.file-type-not-allowed-summary', { params: { count: typeRejections.length } });
|
|
4466
|
-
toastService.show({ color: 'danger', title: errorTitle, content });
|
|
4467
|
-
}
|
|
4468
|
-
if (sizeRejections.length === 1) {
|
|
4469
|
-
const maxSize = formatMaxFileSizeForDisplay(maxFileSize);
|
|
4470
|
-
const content = await translateService.translateAsync('@general:widgets.file-uploader.validation.file-size-exceeds-limit', { params: { fileName: sizeRejections[0].file.name, maxSize } });
|
|
4471
|
-
toastService.show({ color: 'danger', title: errorTitle, content });
|
|
4472
|
-
return;
|
|
4473
|
-
}
|
|
4474
|
-
if (sizeRejections.length > 1) {
|
|
4475
|
-
const content = await translateService.translateAsync('@general:widgets.file-uploader.validation.files-rejected-summary', { params: { count: sizeRejections.length } });
|
|
4476
|
-
toastService.show({ color: 'danger', title: errorTitle, content });
|
|
4477
|
-
}
|
|
4478
|
-
}
|
|
4479
|
-
//#endregion
|
|
4480
|
-
|
|
4481
4481
|
//#region ---- Accept resolution ----
|
|
4482
4482
|
const ZIP_ACCEPT_TOKENS = '.zip,application/zip';
|
|
4483
4483
|
/**
|
|
@@ -4503,8 +4503,7 @@ function resolveFileChooserAccept(accept, promptZipOnMultiple) {
|
|
|
4503
4503
|
//#endregion
|
|
4504
4504
|
|
|
4505
4505
|
//#region ---- Chooser result validation ----
|
|
4506
|
-
|
|
4507
|
-
function resolveChooserItemFile(item) {
|
|
4506
|
+
function fileFromListItem(item) {
|
|
4508
4507
|
const source = item.source;
|
|
4509
4508
|
if (source?.kind !== 'blob' || source.value == null) {
|
|
4510
4509
|
return undefined;
|
|
@@ -4513,8 +4512,7 @@ function resolveChooserItemFile(item) {
|
|
|
4513
4512
|
return source.value;
|
|
4514
4513
|
}
|
|
4515
4514
|
if (source.value instanceof Blob) {
|
|
4516
|
-
|
|
4517
|
-
return new File([source.value], name, {
|
|
4515
|
+
return new File([source.value], item.name, {
|
|
4518
4516
|
type: source.value.type ?? '',
|
|
4519
4517
|
});
|
|
4520
4518
|
}
|
|
@@ -4527,38 +4525,30 @@ function validateFileChooserItems(items, options) {
|
|
|
4527
4525
|
const accept = options['accept'];
|
|
4528
4526
|
const maxFileSize = defaultTo(options['maxFileSize'], 0);
|
|
4529
4527
|
const passthrough = [];
|
|
4530
|
-
const
|
|
4528
|
+
const blobItems = [];
|
|
4529
|
+
const blobFiles = [];
|
|
4531
4530
|
for (const item of items) {
|
|
4532
|
-
const file =
|
|
4531
|
+
const file = fileFromListItem(item);
|
|
4533
4532
|
if (file) {
|
|
4534
|
-
|
|
4533
|
+
blobItems.push(item);
|
|
4534
|
+
blobFiles.push(file);
|
|
4535
4535
|
continue;
|
|
4536
4536
|
}
|
|
4537
4537
|
passthrough.push(item);
|
|
4538
4538
|
}
|
|
4539
|
-
const namedAccepted =
|
|
4540
|
-
const namedRejected =
|
|
4541
|
-
|
|
4542
|
-
|
|
4543
|
-
|
|
4544
|
-
|
|
4545
|
-
|
|
4546
|
-
|
|
4547
|
-
}
|
|
4548
|
-
if (maxFileSize > 0 && (item.size ?? 0) > maxFileSize) {
|
|
4549
|
-
namedRejected.push({ file: placeholder, reason: 'size' });
|
|
4550
|
-
continue;
|
|
4551
|
-
}
|
|
4552
|
-
namedAccepted.push(item);
|
|
4553
|
-
}
|
|
4554
|
-
if (!blobEntries.length) {
|
|
4539
|
+
const namedAccepted = passthrough.filter((item) => isUnrestrictedFileAccept(accept) || fileNameMatchesAccept(item.name ?? '', accept));
|
|
4540
|
+
const namedRejected = passthrough
|
|
4541
|
+
.filter((item) => !namedAccepted.includes(item))
|
|
4542
|
+
.map((item) => ({
|
|
4543
|
+
file: new File([], item.name ?? 'file', { type: '' }),
|
|
4544
|
+
reason: 'type',
|
|
4545
|
+
}));
|
|
4546
|
+
if (!blobFiles.length) {
|
|
4555
4547
|
return { accepted: namedAccepted, rejected: namedRejected };
|
|
4556
4548
|
}
|
|
4557
|
-
const { accepted, rejected } = filterFilesByAcceptAndMaxSize(
|
|
4549
|
+
const { accepted, rejected } = filterFilesByAcceptAndMaxSize(blobFiles, accept, maxFileSize);
|
|
4558
4550
|
const acceptedSet = new Set(accepted);
|
|
4559
|
-
const acceptedItems =
|
|
4560
|
-
.filter((entry) => acceptedSet.has(entry.file))
|
|
4561
|
-
.map((entry) => entry.item);
|
|
4551
|
+
const acceptedItems = blobItems.filter((item) => acceptedSet.has(fileFromListItem(item)));
|
|
4562
4552
|
return {
|
|
4563
4553
|
accepted: [...namedAccepted, ...acceptedItems],
|
|
4564
4554
|
rejected: [...namedRejected, ...rejected],
|
|
@@ -4574,7 +4564,9 @@ const AXPFileChooserHookKeys = {
|
|
|
4574
4564
|
|
|
4575
4565
|
//#region ---- File chooser tokens ----
|
|
4576
4566
|
/**
|
|
4567
|
+
|
|
4577
4568
|
* Multi token for file chooser providers (system disk, drive, external systems).
|
|
4569
|
+
|
|
4578
4570
|
*/
|
|
4579
4571
|
const AXP_FILE_CHOOSER_PROVIDERS = new InjectionToken('AXP_FILE_CHOOSER_PROVIDERS');
|
|
4580
4572
|
//#endregion
|
|
@@ -4586,37 +4578,14 @@ const AXP_SYSTEM_FILE_CHOOSER_PROVIDER = {
|
|
|
4586
4578
|
order: 1,
|
|
4587
4579
|
choose: async (context) => {
|
|
4588
4580
|
const fileService = inject(AXFileService);
|
|
4589
|
-
const documentRef = inject(DOCUMENT);
|
|
4590
|
-
const translateService = inject(AXTranslationService);
|
|
4591
|
-
const toastService = inject(AXToastService);
|
|
4592
4581
|
const multiple = Boolean(context.options['multiple']);
|
|
4593
4582
|
const fileType = context.options['fileType'];
|
|
4594
|
-
const
|
|
4595
|
-
const
|
|
4596
|
-
|
|
4597
|
-
|
|
4598
|
-
|
|
4599
|
-
|
|
4600
|
-
const picked = await openSystemFileDialog(documentRef, { accept, multiple });
|
|
4601
|
-
if (!picked.length) {
|
|
4602
|
-
return undefined;
|
|
4603
|
-
}
|
|
4604
|
-
let files = picked;
|
|
4605
|
-
if (fileType) {
|
|
4606
|
-
const validation = await fileService.validateMany(picked, fileType);
|
|
4607
|
-
files = validation.accepted;
|
|
4608
|
-
if (validation.rejected.length > 0) {
|
|
4609
|
-
const rejected = validation.rejected.map((entry) => ({
|
|
4610
|
-
file: entry.file,
|
|
4611
|
-
reason: catalogRejectionReason(entry.errors, maxFileSize),
|
|
4612
|
-
}));
|
|
4613
|
-
await notifyFileAcceptRejections(rejected, {
|
|
4614
|
-
translateService,
|
|
4615
|
-
toastService,
|
|
4616
|
-
maxFileSize,
|
|
4617
|
-
});
|
|
4618
|
-
}
|
|
4619
|
-
}
|
|
4583
|
+
const accept = context.options['accept'];
|
|
4584
|
+
const files = await fileService.choose({
|
|
4585
|
+
fileType,
|
|
4586
|
+
accept,
|
|
4587
|
+
multiple,
|
|
4588
|
+
});
|
|
4620
4589
|
if (!files.length) {
|
|
4621
4590
|
return undefined;
|
|
4622
4591
|
}
|
|
@@ -4633,13 +4602,9 @@ const AXP_SYSTEM_FILE_CHOOSER_PROVIDER = {
|
|
|
4633
4602
|
if (!multiple) {
|
|
4634
4603
|
return next.slice(0, 1);
|
|
4635
4604
|
}
|
|
4636
|
-
return [...
|
|
4605
|
+
return [...context.items, ...next];
|
|
4637
4606
|
},
|
|
4638
4607
|
};
|
|
4639
|
-
function catalogRejectionReason(errors, maxFileSize) {
|
|
4640
|
-
const failedForSize = errors.some((error) => (error.rule ?? '').toLowerCase().includes('size'));
|
|
4641
|
-
return failedForSize && maxFileSize > 0 ? 'size' : 'type';
|
|
4642
|
-
}
|
|
4643
4608
|
//#endregion
|
|
4644
4609
|
|
|
4645
4610
|
//#region ---- File chooser platform settings ----
|
|
@@ -4995,18 +4960,13 @@ class AXPFileChooserService {
|
|
|
4995
4960
|
if (!items?.length) {
|
|
4996
4961
|
return items;
|
|
4997
4962
|
}
|
|
4998
|
-
const previousItems = new Set(context.items ?? []);
|
|
4999
|
-
const incoming = items.filter((item) => !previousItems.has(item));
|
|
5000
|
-
if (incoming.length === 0) {
|
|
5001
|
-
return items;
|
|
5002
|
-
}
|
|
5003
4963
|
const maxFileSize = defaultTo(context.options['maxFileSize'], 0);
|
|
5004
4964
|
const promptZipOnMultiple = (await this.settingsService.get(AXPFileChooserSettings.PromptZipOnMultiple)) ?? false;
|
|
5005
4965
|
const validationOptions = {
|
|
5006
4966
|
...context.options,
|
|
5007
4967
|
accept: resolveFileChooserAccept(context.options['accept'], promptZipOnMultiple),
|
|
5008
4968
|
};
|
|
5009
|
-
const { accepted, rejected } = validateFileChooserItems(
|
|
4969
|
+
const { accepted, rejected } = validateFileChooserItems(items, validationOptions);
|
|
5010
4970
|
if (rejected.length > 0) {
|
|
5011
4971
|
await notifyFileAcceptRejections(rejected, {
|
|
5012
4972
|
translateService: this.translateService,
|
|
@@ -5014,14 +4974,7 @@ class AXPFileChooserService {
|
|
|
5014
4974
|
maxFileSize,
|
|
5015
4975
|
});
|
|
5016
4976
|
}
|
|
5017
|
-
|
|
5018
|
-
return undefined;
|
|
5019
|
-
}
|
|
5020
|
-
if (previousItems.size === 0) {
|
|
5021
|
-
return accepted;
|
|
5022
|
-
}
|
|
5023
|
-
const acceptedIncoming = new Set(accepted);
|
|
5024
|
-
return items.filter((item) => previousItems.has(item) || acceptedIncoming.has(item));
|
|
4977
|
+
return accepted.length > 0 ? accepted : undefined;
|
|
5025
4978
|
}
|
|
5026
4979
|
async runAfterChosenHook(providerKey, context, items) {
|
|
5027
4980
|
if (!items?.length) {
|
|
@@ -5051,8 +5004,6 @@ class AXPFileChooserDirective {
|
|
|
5051
5004
|
constructor() {
|
|
5052
5005
|
//#region ---- Services & Dependencies ----
|
|
5053
5006
|
this.chooserService = inject(AXPFileChooserService);
|
|
5054
|
-
this.toastService = inject(AXToastService);
|
|
5055
|
-
this.translateService = inject(AXTranslationService);
|
|
5056
5007
|
this.elementRef = inject(ElementRef);
|
|
5057
5008
|
this.envInjector = inject(EnvironmentInjector);
|
|
5058
5009
|
this.appRef = inject(ApplicationRef);
|
|
@@ -5113,16 +5064,10 @@ class AXPFileChooserDirective {
|
|
|
5113
5064
|
...this.context(),
|
|
5114
5065
|
items: this.items(),
|
|
5115
5066
|
});
|
|
5116
|
-
if (result
|
|
5067
|
+
if (result) {
|
|
5117
5068
|
this.items.set(result);
|
|
5118
5069
|
}
|
|
5119
5070
|
}
|
|
5120
|
-
catch (error) {
|
|
5121
|
-
console.error('[AXPFileChooserDirective] choose failed', error);
|
|
5122
|
-
const title = await this.translateService.translateAsync('@general:messages.generic.error.title');
|
|
5123
|
-
const content = await this.translateService.translateAsync('@layout:components.file-chooser.messages.choose-failed');
|
|
5124
|
-
this.toastService.show({ color: 'danger', title, content });
|
|
5125
|
-
}
|
|
5126
5071
|
finally {
|
|
5127
5072
|
this.busy.set(false);
|
|
5128
5073
|
}
|
|
@@ -5156,38 +5101,30 @@ async function compressImageFile(file, quality = 0.7, maxDimension = 1920) {
|
|
|
5156
5101
|
if (!file.type.startsWith('image/') || file.type === 'image/svg+xml') {
|
|
5157
5102
|
return file;
|
|
5158
5103
|
}
|
|
5159
|
-
|
|
5160
|
-
|
|
5161
|
-
|
|
5162
|
-
|
|
5163
|
-
|
|
5164
|
-
|
|
5165
|
-
|
|
5166
|
-
|
|
5167
|
-
|
|
5168
|
-
|
|
5169
|
-
const context = canvas.getContext('2d');
|
|
5170
|
-
if (!context) {
|
|
5171
|
-
return file;
|
|
5172
|
-
}
|
|
5173
|
-
context.drawImage(bitmap, 0, 0, width, height);
|
|
5174
|
-
const mimeType = file.type === 'image/png' ? 'image/png' : 'image/jpeg';
|
|
5175
|
-
const blob = await new Promise((resolve) => {
|
|
5176
|
-
canvas.toBlob(resolve, mimeType, quality);
|
|
5177
|
-
});
|
|
5178
|
-
if (!blob || blob.size >= file.size) {
|
|
5179
|
-
return file;
|
|
5180
|
-
}
|
|
5181
|
-
const extension = mimeType === 'image/png' ? 'png' : 'jpg';
|
|
5182
|
-
const baseName = file.name.includes('.') ? file.name.slice(0, file.name.lastIndexOf('.')) : file.name;
|
|
5183
|
-
return new File([blob], `${baseName}.${extension}`, { type: mimeType, lastModified: Date.now() });
|
|
5184
|
-
}
|
|
5185
|
-
catch {
|
|
5104
|
+
const bitmap = await createImageBitmap(file);
|
|
5105
|
+
const scale = Math.min(1, maxDimension / Math.max(bitmap.width, bitmap.height));
|
|
5106
|
+
const width = Math.max(1, Math.round(bitmap.width * scale));
|
|
5107
|
+
const height = Math.max(1, Math.round(bitmap.height * scale));
|
|
5108
|
+
const canvas = document.createElement('canvas');
|
|
5109
|
+
canvas.width = width;
|
|
5110
|
+
canvas.height = height;
|
|
5111
|
+
const context = canvas.getContext('2d');
|
|
5112
|
+
if (!context) {
|
|
5113
|
+
bitmap.close();
|
|
5186
5114
|
return file;
|
|
5187
5115
|
}
|
|
5188
|
-
|
|
5189
|
-
|
|
5116
|
+
context.drawImage(bitmap, 0, 0, width, height);
|
|
5117
|
+
bitmap.close();
|
|
5118
|
+
const mimeType = file.type === 'image/png' ? 'image/png' : 'image/jpeg';
|
|
5119
|
+
const blob = await new Promise((resolve) => {
|
|
5120
|
+
canvas.toBlob(resolve, mimeType, quality);
|
|
5121
|
+
});
|
|
5122
|
+
if (!blob || blob.size >= file.size) {
|
|
5123
|
+
return file;
|
|
5190
5124
|
}
|
|
5125
|
+
const extension = mimeType === 'image/png' ? 'png' : 'jpg';
|
|
5126
|
+
const baseName = file.name.includes('.') ? file.name.slice(0, file.name.lastIndexOf('.')) : file.name;
|
|
5127
|
+
return new File([blob], `${baseName}.${extension}`, { type: mimeType, lastModified: Date.now() });
|
|
5191
5128
|
}
|
|
5192
5129
|
/**
|
|
5193
5130
|
* Builds a store-only ZIP archive (no compression) from the given files.
|
|
@@ -5199,10 +5136,9 @@ async function createZipArchive(files, archiveName = 'archive.zip') {
|
|
|
5199
5136
|
})));
|
|
5200
5137
|
const chunks = [];
|
|
5201
5138
|
const centralDirectory = [];
|
|
5202
|
-
const usedNames = new Set();
|
|
5203
5139
|
let offset = 0;
|
|
5204
5140
|
for (const entry of entries) {
|
|
5205
|
-
const nameBytes = new TextEncoder().encode(
|
|
5141
|
+
const nameBytes = new TextEncoder().encode(entry.name);
|
|
5206
5142
|
const crc = crc32(entry.data);
|
|
5207
5143
|
const localHeader = buildLocalFileHeader(nameBytes, entry.data.length, crc);
|
|
5208
5144
|
chunks.push(localHeader, nameBytes, entry.data);
|
|
@@ -5221,32 +5157,10 @@ async function createZipArchive(files, archiveName = 'archive.zip') {
|
|
|
5221
5157
|
}
|
|
5222
5158
|
return new File([archive], archiveName, { type: 'application/zip', lastModified: Date.now() });
|
|
5223
5159
|
}
|
|
5224
|
-
const ZIP_VERSION_NEEDED = 20;
|
|
5225
|
-
const ZIP_UTF8_FLAG = 0x0800;
|
|
5226
|
-
function uniqueZipEntryName(name, used) {
|
|
5227
|
-
const baseName = name || 'file';
|
|
5228
|
-
if (!used.has(baseName)) {
|
|
5229
|
-
used.add(baseName);
|
|
5230
|
-
return baseName;
|
|
5231
|
-
}
|
|
5232
|
-
const dot = baseName.lastIndexOf('.');
|
|
5233
|
-
const stem = dot > 0 ? baseName.slice(0, dot) : baseName;
|
|
5234
|
-
const extension = dot > 0 ? baseName.slice(dot) : '';
|
|
5235
|
-
let index = 2;
|
|
5236
|
-
let candidate = `${stem} (${index})${extension}`;
|
|
5237
|
-
while (used.has(candidate)) {
|
|
5238
|
-
index += 1;
|
|
5239
|
-
candidate = `${stem} (${index})${extension}`;
|
|
5240
|
-
}
|
|
5241
|
-
used.add(candidate);
|
|
5242
|
-
return candidate;
|
|
5243
|
-
}
|
|
5244
5160
|
function buildLocalFileHeader(nameBytes, size, crc) {
|
|
5245
5161
|
const header = new Uint8Array(30);
|
|
5246
5162
|
const view = new DataView(header.buffer);
|
|
5247
5163
|
view.setUint32(0, 0x04034b50, true);
|
|
5248
|
-
view.setUint16(4, ZIP_VERSION_NEEDED, true);
|
|
5249
|
-
view.setUint16(6, ZIP_UTF8_FLAG, true);
|
|
5250
5164
|
view.setUint16(8, 0, true);
|
|
5251
5165
|
view.setUint16(10, 0, true);
|
|
5252
5166
|
view.setUint32(14, crc, true);
|
|
@@ -5260,9 +5174,6 @@ function buildCentralDirectoryHeader(nameBytes, size, crc, offset) {
|
|
|
5260
5174
|
const header = new Uint8Array(46);
|
|
5261
5175
|
const view = new DataView(header.buffer);
|
|
5262
5176
|
view.setUint32(0, 0x02014b50, true);
|
|
5263
|
-
view.setUint16(4, ZIP_VERSION_NEEDED, true);
|
|
5264
|
-
view.setUint16(6, ZIP_VERSION_NEEDED, true);
|
|
5265
|
-
view.setUint16(8, ZIP_UTF8_FLAG, true);
|
|
5266
5177
|
view.setUint16(10, 0, true);
|
|
5267
5178
|
view.setUint16(12, 0, true);
|
|
5268
5179
|
view.setUint32(16, crc, true);
|
|
@@ -5872,44 +5783,21 @@ const AXP_SYSTEM_FILE_UPLOADER_PROVIDER = {
|
|
|
5872
5783
|
icon: 'fa-light fa-file-arrow-up',
|
|
5873
5784
|
order: 1,
|
|
5874
5785
|
upload: async (context) => {
|
|
5875
|
-
const fileStorage = inject(AXPFileStorageService);
|
|
5876
|
-
const translateService = inject(AXTranslationService);
|
|
5877
|
-
const toastService = inject(AXToastService);
|
|
5878
5786
|
const multiple = Boolean(context.options['multiple']);
|
|
5879
|
-
const
|
|
5880
|
-
// Omitted maxFileSize keeps the historical 10 MB cap. Zero or negative means no limit.
|
|
5881
|
-
const maxFileSize = typeof maxFileSizeOption === 'number' ? maxFileSizeOption : 10 * 1024 * 1024;
|
|
5787
|
+
const maxFileSize = defaultTo(context.options['maxFileSize'], 10 * 1024 * 1024);
|
|
5882
5788
|
const refId = defaultTo(context.options['refId'], 'temp');
|
|
5883
5789
|
const refType = defaultTo(context.options['refType'], 'file-uploader');
|
|
5884
5790
|
const category = defaultTo(context.options['category'], 'attachment');
|
|
5885
|
-
const chosen =
|
|
5886
|
-
|
|
5887
|
-
|
|
5888
|
-
|
|
5889
|
-
const file = resolveChooserItemFile(item);
|
|
5890
|
-
if (!file) {
|
|
5891
|
-
continue;
|
|
5892
|
-
}
|
|
5893
|
-
const comparableSize = Math.max(item.size ?? 0, file.size);
|
|
5894
|
-
if (maxFileSize > 0 && comparableSize > maxFileSize) {
|
|
5895
|
-
rejected.push({ file, reason: 'size' });
|
|
5896
|
-
continue;
|
|
5897
|
-
}
|
|
5898
|
-
uploadable.push({ item, file });
|
|
5899
|
-
}
|
|
5900
|
-
if (rejected.length > 0) {
|
|
5901
|
-
await notifyFileAcceptRejections(rejected, {
|
|
5902
|
-
translateService,
|
|
5903
|
-
toastService,
|
|
5904
|
-
maxFileSize,
|
|
5905
|
-
});
|
|
5906
|
-
}
|
|
5907
|
-
const queue = multiple ? uploadable : uploadable.slice(0, 1);
|
|
5908
|
-
if (queue.length === 0) {
|
|
5791
|
+
const chosen = context.chosen.filter((item) => (item.size ?? 0) <= maxFileSize &&
|
|
5792
|
+
item.source?.kind === 'blob' &&
|
|
5793
|
+
item.source.value instanceof File);
|
|
5794
|
+
if (isEmpty(chosen)) {
|
|
5909
5795
|
return undefined;
|
|
5910
5796
|
}
|
|
5797
|
+
const fileStorage = inject(AXPFileStorageService);
|
|
5911
5798
|
const uploaded = [];
|
|
5912
|
-
for (const
|
|
5799
|
+
for (const item of chosen) {
|
|
5800
|
+
const file = item.source.value;
|
|
5913
5801
|
const info = await fileStorage.save({
|
|
5914
5802
|
file,
|
|
5915
5803
|
name: item.name,
|
|
@@ -5932,7 +5820,7 @@ const AXP_SYSTEM_FILE_UPLOADER_PROVIDER = {
|
|
|
5932
5820
|
if (!multiple) {
|
|
5933
5821
|
return uploaded.slice(0, 1);
|
|
5934
5822
|
}
|
|
5935
|
-
return [...
|
|
5823
|
+
return [...context.items, ...uploaded];
|
|
5936
5824
|
},
|
|
5937
5825
|
};
|
|
5938
5826
|
//#endregion
|
|
@@ -6010,8 +5898,6 @@ class AXPFileUploaderDirective {
|
|
|
6010
5898
|
constructor() {
|
|
6011
5899
|
//#region ---- Services & Dependencies ----
|
|
6012
5900
|
this.uploaderService = inject(AXPFileUploaderService);
|
|
6013
|
-
this.toastService = inject(AXToastService);
|
|
6014
|
-
this.translateService = inject(AXTranslationService);
|
|
6015
5901
|
this.elementRef = inject(ElementRef);
|
|
6016
5902
|
this.envInjector = inject(EnvironmentInjector);
|
|
6017
5903
|
this.appRef = inject(ApplicationRef);
|
|
@@ -6076,12 +5962,6 @@ class AXPFileUploaderDirective {
|
|
|
6076
5962
|
this.uploaded.set(result);
|
|
6077
5963
|
}
|
|
6078
5964
|
}
|
|
6079
|
-
catch (error) {
|
|
6080
|
-
console.error('[AXPFileUploaderDirective] upload failed', error);
|
|
6081
|
-
const title = await this.translateService.translateAsync('@general:messages.generic.error.title');
|
|
6082
|
-
const content = await this.translateService.translateAsync('@general:widgets.file-uploader.messages.upload-failed');
|
|
6083
|
-
this.toastService.show({ color: 'danger', title, content });
|
|
6084
|
-
}
|
|
6085
5965
|
finally {
|
|
6086
5966
|
this.busy.set(false);
|
|
6087
5967
|
}
|
|
@@ -15354,7 +15234,6 @@ class AXPUserAvatarComponent {
|
|
|
15354
15234
|
this.sessionService = inject(AXPSessionService);
|
|
15355
15235
|
this.fileStorage = inject(AXPFileStorageService);
|
|
15356
15236
|
this.presenceService = inject(AXPUserPresenceService, { optional: true });
|
|
15357
|
-
this.userStatus = inject(AXPUserStatusFeatureService);
|
|
15358
15237
|
this.resolveGeneration = 0;
|
|
15359
15238
|
this.lastResolvedRef = null;
|
|
15360
15239
|
this.userInfo = signal(null, /* @ts-ignore */
|
|
@@ -15402,14 +15281,13 @@ class AXPUserAvatarComponent {
|
|
|
15402
15281
|
...(ngDevMode ? [{ debugName: "isAway" }] : /* istanbul ignore next */ []));
|
|
15403
15282
|
this.isBusy = computed(() => this.presenceStatus() === 'busy', /* @ts-ignore */
|
|
15404
15283
|
...(ngDevMode ? [{ debugName: "isBusy" }] : /* istanbul ignore next */ []));
|
|
15405
|
-
this.showPresenceDot = computed(() => this.
|
|
15406
|
-
this.showPresence() &&
|
|
15284
|
+
this.showPresenceDot = computed(() => this.showPresence() &&
|
|
15407
15285
|
isWatchablePresenceUserId(String(this.userId() ?? '')) &&
|
|
15408
15286
|
this.presenceStatus() !== null, /* @ts-ignore */
|
|
15409
15287
|
...(ngDevMode ? [{ debugName: "showPresenceDot" }] : /* istanbul ignore next */ []));
|
|
15410
15288
|
effect((onCleanup) => {
|
|
15411
15289
|
const id = String(this.userId() ?? '').trim();
|
|
15412
|
-
const showPresence = this.showPresence()
|
|
15290
|
+
const showPresence = this.showPresence();
|
|
15413
15291
|
void this.displayName();
|
|
15414
15292
|
void this.displayAvatar();
|
|
15415
15293
|
if (!id) {
|
|
@@ -15675,7 +15553,6 @@ class AXPUserCardComponent {
|
|
|
15675
15553
|
//#region ----- Services & Dependencies -----
|
|
15676
15554
|
this.avatarService = inject(AXPUserAvatarService);
|
|
15677
15555
|
this.presenceService = inject(AXPUserPresenceService, { optional: true });
|
|
15678
|
-
this.userStatus = inject(AXPUserStatusFeatureService);
|
|
15679
15556
|
this.formatService = inject(AXFormatService);
|
|
15680
15557
|
this.settingsService = inject(AXPSettingsService);
|
|
15681
15558
|
this.translation = inject(AXTranslationService);
|
|
@@ -15732,7 +15609,7 @@ class AXPUserCardComponent {
|
|
|
15732
15609
|
}
|
|
15733
15610
|
}, /* @ts-ignore */
|
|
15734
15611
|
...(ngDevMode ? [{ debugName: "presenceLabelKey" }] : /* istanbul ignore next */ []));
|
|
15735
|
-
this.showPresence = computed(() =>
|
|
15612
|
+
this.showPresence = computed(() => isWatchablePresenceUserId(this.userId()), /* @ts-ignore */
|
|
15736
15613
|
...(ngDevMode ? [{ debugName: "showPresence" }] : /* istanbul ignore next */ []));
|
|
15737
15614
|
this.tooltipDisabled = computed(() => !this.tooltipText(), /* @ts-ignore */
|
|
15738
15615
|
...(ngDevMode ? [{ debugName: "tooltipDisabled" }] : /* istanbul ignore next */ []));
|
|
@@ -15760,7 +15637,7 @@ class AXPUserCardComponent {
|
|
|
15760
15637
|
this.subscriptions.add(this.avatarService.getUserInfo$(userId).subscribe((data) => {
|
|
15761
15638
|
this.identity.set(data);
|
|
15762
15639
|
}));
|
|
15763
|
-
if (this.
|
|
15640
|
+
if (this.presenceService && isWatchablePresenceUserId(userId)) {
|
|
15764
15641
|
this.presenceService.watch(userId);
|
|
15765
15642
|
this.watchedUserId = userId;
|
|
15766
15643
|
this.presence.set(this.presenceService.get(userId) ?? { userId, status: 'offline' });
|
|
@@ -17142,5 +17019,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
17142
17019
|
* Generated bundle index. Do not edit.
|
|
17143
17020
|
*/
|
|
17144
17021
|
|
|
17145
|
-
export { AXPActivityLogComponent, AXPAvatarComponent, AXPCategoryTreeComponent, AXPColorChooserComponent, AXPColorPalettePickerComponent, AXPColumnItemListComponent, AXPCompareViewComponent, AXPConditionBuilderComponent, AXPConditionBuilderConditionComponent, AXPDataSelectorComponent, AXPDataSelectorService, AXPDragDropListComponent, AXPEntityListStylingDialogService, AXPEntityListStylingPopupComponent, AXPExpressionFieldDefinitions, AXPFileChooserCompressImagesHook, AXPFileChooserDirective, AXPFileChooserHookKeys, AXPFileChooserService, AXPFileChooserZipFilesHook, AXPFileUploaderDirective, AXPFileUploaderHookKeys, AXPFileUploaderService, AXPFileViewerComponent, AXPFileViewerFallbackContentComponent, AXPFileViewerService, AXPImageEditorPopupComponent, AXPImageEditorService, AXPInfiniteScrollDirective, AXPItemConfiguratorComponent, AXPLayoutFloatingZoomBarComponent, AXPLayoutSideDetailPanelComponent, AXPLayoutSideDetailPanelSectionDirective, AXPLocalDataSourceEditorDialogService, AXPMarkdownTemplateDirective, AXPMarkdownViewerComponent, AXPMenuBadgeHelper, AXPMenuCustomizerComponent, AXPMenuCustomizerService, AXPOutcomeResultsViewerComponent, AXPPageComponentRegistryService, AXPPreloadFiltersComponent, AXPPropertyViewerComponent, AXPPropertyViewerPopupComponent, AXPPropertyViewerService, AXPQueryColumnsComponent, AXPQueryFiltersComponent, AXPQuerySortsComponent, AXPQueryViewSaveButtonComponent, AXPQueryViewSaveDialogService, AXPQueryViewTabsComponent, AXPQueryViewsComponent, AXPRepeaterRowsLayoutComponent, AXPResourceAppointmentBoardProvider, AXPResourceAppointmentComponent, AXPResourceAppointmentService, AXPSectionItemsBuilderComponent, AXPSignatureEditorService, AXPSpreadsheetComponent, AXPStandardSectionItemsBuilderComponent, AXPStopwatchComponent, AXPTableColumnsEditorComponent, AXPTableColumnsEditorPopupComponent, AXPTableColumnsEditorService, AXPTableDataEditorComponent, AXPTableDataEditorPopupComponent, AXPTableDataEditorService, AXPTaskBadgeDirective, AXPTaskBadgeProvider, AXPTaskBadgeService, AXPTemplateViewerComponent, AXPTemplateViewerService, AXPTextCommandColumnComponent, AXPThemeLayoutActionsComponent, AXPThemeLayoutBlockComponent, AXPThemeLayoutContainerComponent, AXPThemeLayoutEndSideComponent, AXPThemeLayoutFooterComponent, AXPThemeLayoutHeaderComponent, AXPThemeLayoutListComponent, AXPThemeLayoutListItemComponent, AXPThemeLayoutListItemsGroupComponent, AXPThemeLayoutPageHeaderComponent, AXPThemeLayoutPagePrimaryActionsComponent, AXPThemeLayoutPageSecondaryActionsComponent, AXPThemeLayoutSectionComponent, AXPThemeLayoutStartSideComponent, AXPThemeLayoutToolbarComponent, AXPUserAvatarComponent, AXPUserAvatarService, AXPUserCardComponent, AXPUserCardDirective, AXPUserCardService, AXPVirtualKeypadComponent, AXPWidgetFieldConfiguratorComponent, AXPWidgetItemComponent, AXPWidgetPropertyViewerComponent, AXPWidgetPropertyViewerPopupComponent, AXPWidgetPropertyViewerService, AXP_EXPRESSION_LOGIC_DEFINITIONS, AXP_EXPRESSION_OPERATION_DEFINITIONS, AXP_FILE_CHOOSER_DEFAULT_ZIP_ARCHIVE_NAME, AXP_FILE_CHOOSER_HOOK_PROVIDERS, AXP_FILE_CHOOSER_OPTION_KEYS, AXP_FILE_CHOOSER_PROVIDERS, AXP_FILE_UPLOADER_PROVIDERS, AXP_IMAGE_FILE_CHOOSER_ACCEPT, AXP_INFINITE_SCROLL_DEFAULT_ROOT_MARGIN, AXP_MENU_CUSTOMIZER_SERVICE, AXP_PAGE_COMPONENT_PROVIDER, AXP_PAGE_LAYOUT_ELEMENT_ID, AXP_PROFILE_PHOTO_GRAVATAR_SOURCE_KEY, AXP_RESOURCE_APPOINTMENT_PROVIDER, AXP_SIGNATURE_PROVIDER, AXP_SPREADSHEET_COLUMN_WIDGET_TYPES, AXP_SYSTEM_FILE_CHOOSER_PROVIDER, AXP_SYSTEM_FILE_UPLOADER_PROVIDER, AXP_TASK_BADGE_PROVIDERS, AXP_USER_AVATAR_PROVIDER, PROPERTY_VIEWER_EXPRESSION_EDITOR_MIN_LINES, SPREADSHEET_COLUMN_NAME_PATH, SPREADSHEET_COLUMN_TITLE_PATH, STANDARD_SECTION_ITEMS_SECTION_TABS, USER_CARD_HOVER_OPEN_DELAY_MS, USER_CARD_ITEMS_HOOK, USER_CARD_ITEMS_SKELETON_DELAY_MS, asSpreadsheetColumnTitle, buildEntityListStylingRulesLayout, buildFileChooserOptions, buildGravatarAvatarUrl, buildPropertyViewerInitialContextFromProperties, buildPropertyViewerTabsFromProperties, buildTableColumnsEditorLayout, compressImageFile, createAttachedFileProviderMenu, createZipArchive, fetchGravatarImageFile, fileListItemToFileViewerItem, fileListItemToImageFile, fileMatchesAccept, fileNameMatchesAccept, filterFileProvidersByContext, filterFilesByAcceptAndMaxSize, formatAcceptForDisplay, formatMaxFileSizeForDisplay, getFieldDefinitions, getLogicDefinition, getOperationDefinition, isPropertyBindingExpressionFormValue, isUnrestrictedFileAccept, mapFileListToViewerItems, md5Hex, mergeInfiniteScrollPage, mergeObjectsReplacingArrays, normalizeFileViewerBoundValue, normalizeSpreadsheetColumnName, notifyFileAcceptRejections, observeInfiniteScroll, pickImageFileViaFileChooser, pickProfilePhotoImageFile, preparePropertyForViewer, preparePropertyViewerTabs, provideFileChooserHooks, readSpreadsheetColumnIdentity, readSpreadsheetColumnWidth, registerFieldDefinitions,
|
|
17022
|
+
export { AXPActivityLogComponent, AXPAvatarComponent, AXPCategoryTreeComponent, AXPColorChooserComponent, AXPColorPalettePickerComponent, AXPColumnItemListComponent, AXPCompareViewComponent, AXPConditionBuilderComponent, AXPConditionBuilderConditionComponent, AXPDataSelectorComponent, AXPDataSelectorService, AXPDragDropListComponent, AXPEntityListStylingDialogService, AXPEntityListStylingPopupComponent, AXPExpressionFieldDefinitions, AXPFileChooserCompressImagesHook, AXPFileChooserDirective, AXPFileChooserHookKeys, AXPFileChooserService, AXPFileChooserZipFilesHook, AXPFileUploaderDirective, AXPFileUploaderHookKeys, AXPFileUploaderService, AXPFileViewerComponent, AXPFileViewerFallbackContentComponent, AXPFileViewerService, AXPImageEditorPopupComponent, AXPImageEditorService, AXPInfiniteScrollDirective, AXPItemConfiguratorComponent, AXPLayoutFloatingZoomBarComponent, AXPLayoutSideDetailPanelComponent, AXPLayoutSideDetailPanelSectionDirective, AXPLocalDataSourceEditorDialogService, AXPMarkdownTemplateDirective, AXPMarkdownViewerComponent, AXPMenuBadgeHelper, AXPMenuCustomizerComponent, AXPMenuCustomizerService, AXPOutcomeResultsViewerComponent, AXPPageComponentRegistryService, AXPPreloadFiltersComponent, AXPPropertyViewerComponent, AXPPropertyViewerPopupComponent, AXPPropertyViewerService, AXPQueryColumnsComponent, AXPQueryFiltersComponent, AXPQuerySortsComponent, AXPQueryViewSaveButtonComponent, AXPQueryViewSaveDialogService, AXPQueryViewTabsComponent, AXPQueryViewsComponent, AXPRepeaterRowsLayoutComponent, AXPResourceAppointmentBoardProvider, AXPResourceAppointmentComponent, AXPResourceAppointmentService, AXPSectionItemsBuilderComponent, AXPSignatureEditorService, AXPSpreadsheetComponent, AXPStandardSectionItemsBuilderComponent, AXPStopwatchComponent, AXPTableColumnsEditorComponent, AXPTableColumnsEditorPopupComponent, AXPTableColumnsEditorService, AXPTableDataEditorComponent, AXPTableDataEditorPopupComponent, AXPTableDataEditorService, AXPTaskBadgeDirective, AXPTaskBadgeProvider, AXPTaskBadgeService, AXPTemplateViewerComponent, AXPTemplateViewerService, AXPTextCommandColumnComponent, AXPThemeLayoutActionsComponent, AXPThemeLayoutBlockComponent, AXPThemeLayoutContainerComponent, AXPThemeLayoutEndSideComponent, AXPThemeLayoutFooterComponent, AXPThemeLayoutHeaderComponent, AXPThemeLayoutListComponent, AXPThemeLayoutListItemComponent, AXPThemeLayoutListItemsGroupComponent, AXPThemeLayoutPageHeaderComponent, AXPThemeLayoutPagePrimaryActionsComponent, AXPThemeLayoutPageSecondaryActionsComponent, AXPThemeLayoutSectionComponent, AXPThemeLayoutStartSideComponent, AXPThemeLayoutToolbarComponent, AXPUserAvatarComponent, AXPUserAvatarService, AXPUserCardComponent, AXPUserCardDirective, AXPUserCardService, AXPVirtualKeypadComponent, AXPWidgetFieldConfiguratorComponent, AXPWidgetItemComponent, AXPWidgetPropertyViewerComponent, AXPWidgetPropertyViewerPopupComponent, AXPWidgetPropertyViewerService, AXP_EXPRESSION_LOGIC_DEFINITIONS, AXP_EXPRESSION_OPERATION_DEFINITIONS, AXP_FILE_CHOOSER_DEFAULT_ZIP_ARCHIVE_NAME, AXP_FILE_CHOOSER_HOOK_PROVIDERS, AXP_FILE_CHOOSER_OPTION_KEYS, AXP_FILE_CHOOSER_PROVIDERS, AXP_FILE_UPLOADER_PROVIDERS, AXP_IMAGE_FILE_CHOOSER_ACCEPT, AXP_INFINITE_SCROLL_DEFAULT_ROOT_MARGIN, AXP_MENU_CUSTOMIZER_SERVICE, AXP_PAGE_COMPONENT_PROVIDER, AXP_PAGE_LAYOUT_ELEMENT_ID, AXP_PROFILE_PHOTO_GRAVATAR_SOURCE_KEY, AXP_RESOURCE_APPOINTMENT_PROVIDER, AXP_SIGNATURE_PROVIDER, AXP_SPREADSHEET_COLUMN_WIDGET_TYPES, AXP_SYSTEM_FILE_CHOOSER_PROVIDER, AXP_SYSTEM_FILE_UPLOADER_PROVIDER, AXP_TASK_BADGE_PROVIDERS, AXP_USER_AVATAR_PROVIDER, PROPERTY_VIEWER_EXPRESSION_EDITOR_MIN_LINES, SPREADSHEET_COLUMN_NAME_PATH, SPREADSHEET_COLUMN_TITLE_PATH, STANDARD_SECTION_ITEMS_SECTION_TABS, USER_CARD_HOVER_OPEN_DELAY_MS, USER_CARD_ITEMS_HOOK, USER_CARD_ITEMS_SKELETON_DELAY_MS, asSpreadsheetColumnTitle, buildEntityListStylingRulesLayout, buildFileChooserOptions, buildGravatarAvatarUrl, buildPropertyViewerInitialContextFromProperties, buildPropertyViewerTabsFromProperties, buildTableColumnsEditorLayout, compressImageFile, createAttachedFileProviderMenu, createZipArchive, fetchGravatarImageFile, fileListItemToFileViewerItem, fileListItemToImageFile, fileMatchesAccept, fileNameMatchesAccept, filterFileProvidersByContext, filterFilesByAcceptAndMaxSize, formatAcceptForDisplay, formatMaxFileSizeForDisplay, getFieldDefinitions, getLogicDefinition, getOperationDefinition, isPropertyBindingExpressionFormValue, isUnrestrictedFileAccept, mapFileListToViewerItems, md5Hex, mergeInfiniteScrollPage, mergeObjectsReplacingArrays, normalizeFileViewerBoundValue, normalizeSpreadsheetColumnName, notifyFileAcceptRejections, observeInfiniteScroll, pickImageFileViaFileChooser, pickProfilePhotoImageFile, preparePropertyForViewer, preparePropertyViewerTabs, provideFileChooserHooks, readSpreadsheetColumnIdentity, readSpreadsheetColumnWidth, registerFieldDefinitions, resolveExcludedFileProviderKeys, resolveFileChooserAccept, resolveFileChooserExtension, resolveFileListItemUrl, resolveFileUploaderEmptyStateDescription, resolveInfiniteScrollRoot, sortUserCardActions, sortUserCardRows, spreadsheetColumnIdentityProperties, toSpreadsheetColumnWidget, validateFileChooserItems, visibleUserCardActions, withValidationsOnEditorNode };
|
|
17146
17023
|
//# sourceMappingURL=acorex-platform-framework-client-layout-components.mjs.map
|