@acorex/core 20.9.0 → 20.9.1
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-core-file.mjs +140 -2
- package/fesm2022/acorex-core-file.mjs.map +1 -1
- package/file/index.d.ts +102 -6
- package/package.json +1 -1
package/file/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as i1 from '@acorex/core/format';
|
|
2
2
|
import { AXFormatOptions, AXFormatter } from '@acorex/core/format';
|
|
3
3
|
import * as i0 from '@angular/core';
|
|
4
|
-
import { Injector,
|
|
4
|
+
import { Injector, Type, InputSignal, Signal, Provider, InjectionToken, ModuleWithProviders } from '@angular/core';
|
|
5
5
|
import * as i2 from '@acorex/core/validation';
|
|
6
6
|
import { AXValidationRuleOptions, AXValidationRuleResult, AXValidationService, AXValidationRule } from '@acorex/core/validation';
|
|
7
7
|
|
|
@@ -61,6 +61,31 @@ type AXFileOpenResult = void | boolean | null | undefined;
|
|
|
61
61
|
/** Runs `open` from extension first, then parent type, in the caller's injection context. */
|
|
62
62
|
declare function runFileTypeOpen(type: AXFileType, ctx: AXFileTypeOpenContext, payload: unknown, extension?: AXFileTypeExtension): Promise<AXFileOpenResult> | AXFileOpenResult;
|
|
63
63
|
|
|
64
|
+
/**
|
|
65
|
+
* View component for a file type — either an Angular component class or a lazy loader.
|
|
66
|
+
*
|
|
67
|
+
* @example
|
|
68
|
+
* ```ts
|
|
69
|
+
* // eager
|
|
70
|
+
* component: ImageViewerComponent,
|
|
71
|
+
*
|
|
72
|
+
* // lazy
|
|
73
|
+
* component: () => import('./image-viewer.component').then(m => m.ImageViewerComponent),
|
|
74
|
+
* ```
|
|
75
|
+
*/
|
|
76
|
+
type AXFileTypeComponent = Type<AXFileTypeViewComponent> | (() => Promise<Type<AXFileTypeViewComponent>>);
|
|
77
|
+
/**
|
|
78
|
+
* Recommended contract for file-type view components.
|
|
79
|
+
* Implement `readonly payload = input.required<TPayload>()` in new components.
|
|
80
|
+
*/
|
|
81
|
+
interface AXFileTypeViewComponent<TPayload = unknown> {
|
|
82
|
+
readonly payload: InputSignal<TPayload> | Signal<TPayload>;
|
|
83
|
+
}
|
|
84
|
+
/** Resolves a {@link AXFileTypeComponent} to an Angular component type. */
|
|
85
|
+
declare function resolveFileTypeComponentType(component: AXFileTypeComponent): Promise<Type<unknown>>;
|
|
86
|
+
/** Whether `value` is a lazy loader rather than an Angular component class. */
|
|
87
|
+
declare function isLazyFileTypeComponentLoader(value: AXFileTypeComponent): value is () => Promise<Type<AXFileTypeViewComponent>>;
|
|
88
|
+
|
|
64
89
|
/** Metadata key for catalog usage context. */
|
|
65
90
|
declare const AX_FILE_TYPE_METADATA_PURPOSE: "purpose";
|
|
66
91
|
/** Catalog metadata bag; `purpose` lists usage contexts (e.g. `['system']`). */
|
|
@@ -86,14 +111,14 @@ interface AXFileValidations {
|
|
|
86
111
|
maxSize?: number;
|
|
87
112
|
rules?: AXFileValidationRule[];
|
|
88
113
|
}
|
|
89
|
-
type AXFileTypeUtilities = Record<string, (ctx: AXFileTypeContext, ...args: unknown[]) => Promise<unknown> | unknown>;
|
|
114
|
+
type AXFileTypeUtilities$1 = Record<string, (ctx: AXFileTypeContext, ...args: unknown[]) => Promise<unknown> | unknown>;
|
|
90
115
|
/**
|
|
91
116
|
* Logical file category (image, video, …).
|
|
92
117
|
*
|
|
93
118
|
* - With type `validations` set: any file matching those rules is allowed; `extensions` only override when matched.
|
|
94
119
|
* - With empty / omitted `validations` and `extensions` listed: only those extensions are allowed.
|
|
95
120
|
*/
|
|
96
|
-
interface AXFileType<T extends AXFileTypeUtilities = AXFileTypeUtilities> {
|
|
121
|
+
interface AXFileType<T extends AXFileTypeUtilities$1 = AXFileTypeUtilities$1> {
|
|
97
122
|
name: string;
|
|
98
123
|
title?: string;
|
|
99
124
|
icon?: string;
|
|
@@ -113,9 +138,11 @@ interface AXFileType<T extends AXFileTypeUtilities = AXFileTypeUtilities> {
|
|
|
113
138
|
* Invoke via {@link runFileTypeOpen} so `inject()` works in the caller's context.
|
|
114
139
|
*/
|
|
115
140
|
open?: (ctx: AXFileTypeOpenContext, payload: unknown) => Promise<AXFileOpenResult> | AXFileOpenResult;
|
|
141
|
+
/** Optional view component (eager class or lazy `() => import(...)`) for this file type's payload. */
|
|
142
|
+
component?: AXFileTypeComponent;
|
|
116
143
|
}
|
|
117
144
|
/** Extension entry — {@link AXFileType} without nested `extensions`. */
|
|
118
|
-
type AXFileTypeExtension<T extends AXFileTypeUtilities = AXFileTypeUtilities> = Omit<AXFileType<T>, 'extensions'>;
|
|
145
|
+
type AXFileTypeExtension<T extends AXFileTypeUtilities$1 = AXFileTypeUtilities$1> = Omit<AXFileType<T>, 'extensions'>;
|
|
119
146
|
|
|
120
147
|
declare function getFileTypePurposes(type: AXFileType): string[];
|
|
121
148
|
declare function fileTypeMatchesPurpose(type: AXFileType, purpose: string | string[]): boolean;
|
|
@@ -140,6 +167,9 @@ declare function findFileTypeExtension(file: File, type: AXFileType): AXFileType
|
|
|
140
167
|
declare function resolveFileTypeExtension(type: AXFileType, hint?: AXFileTypeExtensionHint): AXFileTypeExtension | undefined;
|
|
141
168
|
declare function resolveFileTypeCopy(type: AXFileType, extension?: AXFileTypeExtension): AXFileType['copy'] | undefined;
|
|
142
169
|
declare function resolveFileTypeOpen(type: AXFileType, extension?: AXFileTypeExtension): AXFileType['open'] | undefined;
|
|
170
|
+
declare function resolveFileTypeComponent(type: AXFileType, extension?: AXFileTypeExtension): AXFileType['component'] | undefined;
|
|
171
|
+
/** Loads the resolved view component (extension override first). */
|
|
172
|
+
declare function loadFileTypeComponent(type: AXFileType, extension?: AXFileTypeExtension): Promise<Type<unknown> | undefined>;
|
|
143
173
|
declare function resolveFileTypePaste(type: AXFileType, extension?: AXFileTypeExtension): AXFileType['paste'] | undefined;
|
|
144
174
|
declare function resolveFileTypeUtility(type: AXFileType, extension: AXFileTypeExtension | undefined, name: string): ((ctx: AXFileTypeContext, ...args: unknown[]) => Promise<unknown> | unknown) | undefined;
|
|
145
175
|
/** Runs `copy` from extension first, then parent type. */
|
|
@@ -149,6 +179,68 @@ declare function runFileTypeUtility(type: AXFileType, ctx: AXFileTypeContext, ex
|
|
|
149
179
|
/** Runs a catalog utility with optional file-based extension resolution. */
|
|
150
180
|
declare function runFileTypeUtilityForFile(type: AXFileType, ctx: AXFileTypeContext, file: File | undefined, name: string, ...args: unknown[]): Promise<unknown> | unknown;
|
|
151
181
|
|
|
182
|
+
type AXFileTypeUtilities = Record<string, (ctx: AXFileTypeContext, ...args: unknown[]) => Promise<unknown> | unknown>;
|
|
183
|
+
/** Config for {@link defineFileType}. */
|
|
184
|
+
interface DefineFileTypeConfig<TPayload = unknown, TUtilities extends AXFileTypeUtilities = AXFileTypeUtilities> {
|
|
185
|
+
name: string;
|
|
186
|
+
title?: string;
|
|
187
|
+
icon?: string;
|
|
188
|
+
metadata?: AXFileTypeMetadata;
|
|
189
|
+
validations?: AXFileValidations;
|
|
190
|
+
extensions?: AXFileTypeExtension<TUtilities>[];
|
|
191
|
+
utilities?: TUtilities;
|
|
192
|
+
paste?: AXFileType<TUtilities>['paste'];
|
|
193
|
+
copy?: (payload: TPayload) => Promise<AXFileCopyResult> | AXFileCopyResult;
|
|
194
|
+
open?: (ctx: AXFileTypeOpenContext, payload: TPayload) => Promise<AXFileOpenResult> | AXFileOpenResult;
|
|
195
|
+
/** Eager component class or lazy `() => import(...).then(m => m.Component)`. */
|
|
196
|
+
component?: AXFileTypeComponent;
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
|
|
200
|
+
* Builds an {@link AXFileType} with optional typed handlers and view component.
|
|
201
|
+
|
|
202
|
+
*
|
|
203
|
+
|
|
204
|
+
* @example
|
|
205
|
+
|
|
206
|
+
* ```ts
|
|
207
|
+
|
|
208
|
+
* export const imageFileType = defineFileType<ImagePayload>({
|
|
209
|
+
|
|
210
|
+
* name: 'image',
|
|
211
|
+
|
|
212
|
+
* copy: (p) => p.caption ?? p.url,
|
|
213
|
+
|
|
214
|
+
* component: () => import('./image-viewer.component').then(m => m.ImageViewerComponent),
|
|
215
|
+
|
|
216
|
+
* });
|
|
217
|
+
|
|
218
|
+
* ```
|
|
219
|
+
|
|
220
|
+
*/
|
|
221
|
+
declare function defineFileType<TPayload = unknown, TUtilities extends AXFileTypeUtilities = AXFileTypeUtilities>(config: DefineFileTypeConfig<TPayload, TUtilities>): AXFileType<TUtilities>;
|
|
222
|
+
|
|
223
|
+
/** Registers static file types via the existing {@link AXFileTypeInfoProvider} multi-token. */
|
|
224
|
+
declare function provideFileTypes(types: AXFileType[] | (() => AXFileType[] | Promise<AXFileType[]>)): Provider;
|
|
225
|
+
|
|
226
|
+
declare class AXFileTypeRendererOutletComponent {
|
|
227
|
+
private readonly registry;
|
|
228
|
+
/** Catalog name (e.g. `image`, `conversation-image`). */
|
|
229
|
+
readonly fileType: i0.InputSignal<string>;
|
|
230
|
+
/** Payload passed to the file-type view component. */
|
|
231
|
+
readonly payload: i0.InputSignal<unknown>;
|
|
232
|
+
/** Optional extension / MIME hint for extension-level renderer overrides. */
|
|
233
|
+
readonly extensionHint: i0.InputSignal<AXFileTypeExtensionHint>;
|
|
234
|
+
/** Extra inputs merged with `payload` (e.g. `message` in conversation). */
|
|
235
|
+
readonly inputs: i0.InputSignal<Record<string, unknown>>;
|
|
236
|
+
readonly resolvedComponent: i0.WritableSignal<Type<unknown>>;
|
|
237
|
+
readonly loading: i0.WritableSignal<boolean>;
|
|
238
|
+
readonly mergedInputs: i0.WritableSignal<Record<string, unknown>>;
|
|
239
|
+
constructor();
|
|
240
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<AXFileTypeRendererOutletComponent, never>;
|
|
241
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<AXFileTypeRendererOutletComponent, "ax-file-type-renderer", never, { "fileType": { "alias": "fileType"; "required": true; "isSignal": true; }; "payload": { "alias": "payload"; "required": true; "isSignal": true; }; "extensionHint": { "alias": "extensionHint"; "required": false; "isSignal": true; }; "inputs": { "alias": "inputs"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
242
|
+
}
|
|
243
|
+
|
|
152
244
|
/** Contributes {@link AXFileType} entries (multi provider). */
|
|
153
245
|
declare abstract class AXFileTypeInfoProvider {
|
|
154
246
|
abstract items(): Promise<AXFileType[]>;
|
|
@@ -167,6 +259,10 @@ declare class AXFileTypeRegistryService {
|
|
|
167
259
|
private resolveTypes;
|
|
168
260
|
getTypes(query?: AXFileTypeQuery): Promise<AXFileType[]>;
|
|
169
261
|
get(name: string): Promise<AXFileType | undefined>;
|
|
262
|
+
/** Resolved view component ref for a catalog entry (optional extension hint). */
|
|
263
|
+
getComponent(name: string, hint?: AXFileTypeExtensionHint): Promise<AXFileType['component'] | undefined>;
|
|
264
|
+
/** Loads the view component for a catalog entry. */
|
|
265
|
+
loadComponent(name: string, hint?: AXFileTypeExtensionHint): Promise<Type<unknown> | undefined>;
|
|
170
266
|
accept(typeNames?: string | string[]): Promise<string>;
|
|
171
267
|
matchType(file: File): Promise<AXFileType | undefined>;
|
|
172
268
|
validate(file: File, typeName: string): Promise<AXValidationRuleResult[]>;
|
|
@@ -362,5 +458,5 @@ declare class AXFileService {
|
|
|
362
458
|
static ɵprov: i0.ɵɵInjectableDeclaration<AXFileService>;
|
|
363
459
|
}
|
|
364
460
|
|
|
365
|
-
export { AXAudioFileTypeProvider, AXDocumentFileTypeProvider, AXFileFileTypeProvider, AXFileMaxSizeValidationRule, AXFileMimeTypeValidationRule, AXFileMinSizeValidationRule, AXFileModule, AXFileService, AXFileSizeFormatter, AXFileTypeInfoProvider, AXFileTypeRegistryService, AXImageFileTypeProvider, AXVideoFileTypeProvider, AX_AUDIO_FILE_TYPE, AX_BUILTIN_FILE_TYPE_PROVIDERS, AX_DOCUMENT_FILE_TYPE, AX_FILE_FILE_TYPE, AX_FILE_TYPE_INFO_PROVIDER, AX_FILE_TYPE_METADATA_PURPOSE, AX_FILE_VALIDATION_RULES, AX_IMAGE_FILE_TYPE, AX_VIDEO_FILE_TYPE, createFileTypeMetadata, fileTypeMatchesPurpose, fileValidationsToRules, filterFileTypesByPurpose, findFileTypeExtension, findFileTypeExtensionByName, findFileTypeExtensionForMime, formatFileSizeBytes, getFileExtension, getFileTypePurposes, isEmptyFileValidations, isExtensionsOnlyType, matchesFileMime, mergeFileValidations, provideBuiltinFileTypeProviders, provideDefaultFileTypeProviders, provideFileTypeInfoProvider, provideFileTypeSystem, provideFileValidationRules, resolveFileCopyText, resolveFileTypeCopy, resolveFileTypeExtension, resolveFileTypeOpen, resolveFileTypePaste, resolveFileTypeUtility, resolveFileValidations, runFileTypeCopy, runFileTypeOpen, runFileTypeUtility, runFileTypeUtilityForFile, validateFileAgainstType, validateFileWithValidations };
|
|
366
|
-
export type { AXFileChooseOptions, AXFileCopyData, AXFileCopyResult, AXFileMaxSizeValidationRuleOptions, AXFileMimeTypeValidationRuleOptions, AXFileMinSizeValidationRuleOptions, AXFileModuleConfig, AXFileOpenResult, AXFileSizeFormatterOptions, AXFileType, AXFileTypeContext, AXFileTypeExtension, AXFileTypeExtensionHint, AXFileTypeMetadata, AXFileTypeOpenContext, AXFileTypeQuery, AXFileValidationRule, AXFileValidations };
|
|
461
|
+
export { AXAudioFileTypeProvider, AXDocumentFileTypeProvider, AXFileFileTypeProvider, AXFileMaxSizeValidationRule, AXFileMimeTypeValidationRule, AXFileMinSizeValidationRule, AXFileModule, AXFileService, AXFileSizeFormatter, AXFileTypeInfoProvider, AXFileTypeRegistryService, AXFileTypeRendererOutletComponent, AXImageFileTypeProvider, AXVideoFileTypeProvider, AX_AUDIO_FILE_TYPE, AX_BUILTIN_FILE_TYPE_PROVIDERS, AX_DOCUMENT_FILE_TYPE, AX_FILE_FILE_TYPE, AX_FILE_TYPE_INFO_PROVIDER, AX_FILE_TYPE_METADATA_PURPOSE, AX_FILE_VALIDATION_RULES, AX_IMAGE_FILE_TYPE, AX_VIDEO_FILE_TYPE, createFileTypeMetadata, defineFileType, fileTypeMatchesPurpose, fileValidationsToRules, filterFileTypesByPurpose, findFileTypeExtension, findFileTypeExtensionByName, findFileTypeExtensionForMime, formatFileSizeBytes, getFileExtension, getFileTypePurposes, isEmptyFileValidations, isExtensionsOnlyType, isLazyFileTypeComponentLoader, loadFileTypeComponent, matchesFileMime, mergeFileValidations, provideBuiltinFileTypeProviders, provideDefaultFileTypeProviders, provideFileTypeInfoProvider, provideFileTypeSystem, provideFileTypes, provideFileValidationRules, resolveFileCopyText, resolveFileTypeComponent, resolveFileTypeComponentType, resolveFileTypeCopy, resolveFileTypeExtension, resolveFileTypeOpen, resolveFileTypePaste, resolveFileTypeUtility, resolveFileValidations, runFileTypeCopy, runFileTypeOpen, runFileTypeUtility, runFileTypeUtilityForFile, validateFileAgainstType, validateFileWithValidations };
|
|
462
|
+
export type { AXFileChooseOptions, AXFileCopyData, AXFileCopyResult, AXFileMaxSizeValidationRuleOptions, AXFileMimeTypeValidationRuleOptions, AXFileMinSizeValidationRuleOptions, AXFileModuleConfig, AXFileOpenResult, AXFileSizeFormatterOptions, AXFileType, AXFileTypeComponent, AXFileTypeContext, AXFileTypeExtension, AXFileTypeExtensionHint, AXFileTypeMetadata, AXFileTypeOpenContext, AXFileTypeQuery, AXFileTypeViewComponent, AXFileValidationRule, AXFileValidations, DefineFileTypeConfig };
|