@acorex/cdk 21.0.2-next.32 → 21.0.2-next.34

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.
Files changed (74) hide show
  1. package/fesm2022/acorex-cdk-accordion.mjs +38 -38
  2. package/fesm2022/acorex-cdk-accordion.mjs.map +1 -1
  3. package/fesm2022/acorex-cdk-carousel.mjs +4 -4
  4. package/fesm2022/acorex-cdk-carousel.mjs.map +1 -1
  5. package/fesm2022/acorex-cdk-clipboard.mjs +8 -8
  6. package/fesm2022/acorex-cdk-clipboard.mjs.map +1 -1
  7. package/fesm2022/acorex-cdk-common.mjs +171 -116
  8. package/fesm2022/acorex-cdk-common.mjs.map +1 -1
  9. package/fesm2022/acorex-cdk-dom.mjs +4 -4
  10. package/fesm2022/acorex-cdk-dom.mjs.map +1 -1
  11. package/fesm2022/acorex-cdk-double-click.mjs +6 -6
  12. package/fesm2022/acorex-cdk-double-click.mjs.map +1 -1
  13. package/fesm2022/acorex-cdk-drag-drop.mjs +71 -71
  14. package/fesm2022/acorex-cdk-drag-drop.mjs.map +1 -1
  15. package/fesm2022/acorex-cdk-drawer.mjs +27 -27
  16. package/fesm2022/acorex-cdk-drawer.mjs.map +1 -1
  17. package/fesm2022/acorex-cdk-focus-trap.mjs +19 -19
  18. package/fesm2022/acorex-cdk-focus-trap.mjs.map +1 -1
  19. package/fesm2022/acorex-cdk-full-screen.mjs +5 -5
  20. package/fesm2022/acorex-cdk-full-screen.mjs.map +1 -1
  21. package/fesm2022/acorex-cdk-input-mask.mjs +20 -14
  22. package/fesm2022/acorex-cdk-input-mask.mjs.map +1 -1
  23. package/fesm2022/acorex-cdk-list-navigation.mjs +19 -19
  24. package/fesm2022/acorex-cdk-list-navigation.mjs.map +1 -1
  25. package/fesm2022/acorex-cdk-outline.mjs +79 -68
  26. package/fesm2022/acorex-cdk-outline.mjs.map +1 -1
  27. package/fesm2022/acorex-cdk-overlay.mjs +16 -3
  28. package/fesm2022/acorex-cdk-overlay.mjs.map +1 -1
  29. package/fesm2022/acorex-cdk-pan-view.mjs +22 -22
  30. package/fesm2022/acorex-cdk-pan-view.mjs.map +1 -1
  31. package/fesm2022/acorex-cdk-qrcode.mjs.map +1 -1
  32. package/fesm2022/acorex-cdk-resizable.mjs +14 -13
  33. package/fesm2022/acorex-cdk-resizable.mjs.map +1 -1
  34. package/fesm2022/acorex-cdk-selection.mjs +23 -23
  35. package/fesm2022/acorex-cdk-selection.mjs.map +1 -1
  36. package/fesm2022/acorex-cdk-sliding-item.mjs +11 -11
  37. package/fesm2022/acorex-cdk-sliding-item.mjs.map +1 -1
  38. package/fesm2022/acorex-cdk-sticky.mjs +3 -3
  39. package/fesm2022/acorex-cdk-sticky.mjs.map +1 -1
  40. package/fesm2022/acorex-cdk-uploader.mjs +298 -188
  41. package/fesm2022/acorex-cdk-uploader.mjs.map +1 -1
  42. package/fesm2022/acorex-cdk-virtual-scroll.mjs +18 -18
  43. package/fesm2022/acorex-cdk-virtual-scroll.mjs.map +1 -1
  44. package/fesm2022/acorex-cdk-wysiwyg.mjs +1 -1
  45. package/fesm2022/acorex-cdk-wysiwyg.mjs.map +1 -1
  46. package/fesm2022/acorex-cdk-z-index.mjs +4 -4
  47. package/fesm2022/acorex-cdk-z-index.mjs.map +1 -1
  48. package/fesm2022/acorex-cdk.mjs.map +1 -1
  49. package/package.json +29 -28
  50. package/{common/index.d.ts → types/acorex-cdk-common.d.ts} +9 -7
  51. package/{focus-trap/index.d.ts → types/acorex-cdk-focus-trap.d.ts} +3 -4
  52. package/{input-mask/index.d.ts → types/acorex-cdk-input-mask.d.ts} +1 -0
  53. package/{outline/index.d.ts → types/acorex-cdk-outline.d.ts} +1 -0
  54. package/{overlay/index.d.ts → types/acorex-cdk-overlay.d.ts} +1 -0
  55. package/{uploader/index.d.ts → types/acorex-cdk-uploader.d.ts} +120 -110
  56. /package/{accordion/index.d.ts → types/acorex-cdk-accordion.d.ts} +0 -0
  57. /package/{carousel/index.d.ts → types/acorex-cdk-carousel.d.ts} +0 -0
  58. /package/{clipboard/index.d.ts → types/acorex-cdk-clipboard.d.ts} +0 -0
  59. /package/{dom/index.d.ts → types/acorex-cdk-dom.d.ts} +0 -0
  60. /package/{double-click/index.d.ts → types/acorex-cdk-double-click.d.ts} +0 -0
  61. /package/{drag-drop/index.d.ts → types/acorex-cdk-drag-drop.d.ts} +0 -0
  62. /package/{drawer/index.d.ts → types/acorex-cdk-drawer.d.ts} +0 -0
  63. /package/{full-screen/index.d.ts → types/acorex-cdk-full-screen.d.ts} +0 -0
  64. /package/{list-navigation/index.d.ts → types/acorex-cdk-list-navigation.d.ts} +0 -0
  65. /package/{pan-view/index.d.ts → types/acorex-cdk-pan-view.d.ts} +0 -0
  66. /package/{qrcode/index.d.ts → types/acorex-cdk-qrcode.d.ts} +0 -0
  67. /package/{resizable/index.d.ts → types/acorex-cdk-resizable.d.ts} +0 -0
  68. /package/{selection/index.d.ts → types/acorex-cdk-selection.d.ts} +0 -0
  69. /package/{sliding-item/index.d.ts → types/acorex-cdk-sliding-item.d.ts} +0 -0
  70. /package/{sticky/index.d.ts → types/acorex-cdk-sticky.d.ts} +0 -0
  71. /package/{virtual-scroll/index.d.ts → types/acorex-cdk-virtual-scroll.d.ts} +0 -0
  72. /package/{wysiwyg/index.d.ts → types/acorex-cdk-wysiwyg.d.ts} +0 -0
  73. /package/{z-index/index.d.ts → types/acorex-cdk-z-index.d.ts} +0 -0
  74. /package/{index.d.ts → types/acorex-cdk.d.ts} +0 -0
@@ -1,47 +1,44 @@
1
1
  import * as _angular_core from '@angular/core';
2
2
  import { OnInit, OnDestroy, TemplateRef } from '@angular/core';
3
3
  import { AXEvent } from '@acorex/cdk/common';
4
+ import { AXValidationRuleResult } from '@acorex/core/validation';
4
5
  import * as rxjs from 'rxjs';
5
6
  import { Subject, BehaviorSubject } from 'rxjs';
6
7
 
7
8
  /**
8
- * A directive that provides browse functionality for file uploads.
9
- * When applied to an element, clicking it will trigger the file browser dialog.
9
+ * Triggers the nearest {@link AXUploaderZoneDirective} file dialog on click.
10
+ * Resolves the zone via DI when possible, otherwise walks the DOM (supports content projection).
10
11
  * @category Directives
11
12
  */
12
13
  declare class AXUploaderBrowseDirective implements OnInit, OnDestroy {
13
- /**
14
- * The uploader zone directive instance.
15
- * @ignore
16
- */
17
- private uploaderZone;
18
- /**
19
- * The element reference for the directive host.
20
- * @ignore
21
- */
22
- private elementRef;
23
- /**
24
- * Platform ID for browser detection.
25
- * @ignore
26
- */
27
- private platformID;
28
- /**
29
- * Initializes the directive by adding click event listener and data attribute.
30
- */
14
+ private readonly elementRef;
15
+ private readonly platformID;
16
+ /** When browse + zone share the same host element. */
17
+ private readonly zoneFromInjector;
18
+ private readonly onClick;
31
19
  ngOnInit(): void;
32
- /**
33
- * Cleans up the directive by removing event listeners.
34
- */
35
20
  ngOnDestroy(): void;
36
- /**
37
- * Handles the click event to trigger file browser.
38
- * @private
39
- */
21
+ private resolveZone;
40
22
  private handleClick;
41
23
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXUploaderBrowseDirective, never>;
42
24
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<AXUploaderBrowseDirective, "[axUploaderBrowseHandle]", never, {}, {}, never, never, true, never>;
43
25
  }
44
26
 
27
+ interface AXUploaderChooseFilesResult {
28
+ accepted: File[];
29
+ rejected: {
30
+ file: File;
31
+ errors: AXValidationRuleResult[];
32
+ }[];
33
+ }
34
+ interface AXUploaderFileChangeEvent {
35
+ event: Event;
36
+ files: File[];
37
+ rejected?: {
38
+ file: File;
39
+ errors: AXValidationRuleResult[];
40
+ }[];
41
+ }
45
42
  type AXUploadStatus = 'new' | 'inprogress' | 'completed' | 'failed' | 'canceled';
46
43
  interface AXUploaderChangedEvent extends AXEvent {
47
44
  requests: AXUploadRequest[];
@@ -119,6 +116,11 @@ declare class AXUploaderZoneDirective implements OnDestroy {
119
116
  * @defaultValue null
120
117
  */
121
118
  accept: _angular_core.InputSignal<string>;
119
+ /**
120
+ * Logical file type name from {@link AXFileService} (e.g. `conversation-image`).
121
+ * Required for browse handles and validated selection.
122
+ */
123
+ fileType: _angular_core.InputSignal<string>;
122
124
  /**
123
125
  * Custom template for the drag overlay. If provided, this will be used instead of the default overlay.
124
126
  */
@@ -177,10 +179,7 @@ declare class AXUploaderZoneDirective implements OnDestroy {
177
179
  * Emitted when files are selected or dropped (like HTML file input).
178
180
  * Emits an event with files property containing the selected files.
179
181
  */
180
- fileChange: _angular_core.OutputEmitterRef<{
181
- event: Event;
182
- files: File[];
183
- }>;
182
+ fileChange: _angular_core.OutputEmitterRef<AXUploaderFileChangeEvent>;
184
183
  /**
185
184
  * Emitted when files are changed (added, removed, etc.).
186
185
  * @deprecated Use fileChange instead for simpler file input-like behavior
@@ -276,103 +275,114 @@ declare class AXUploaderZoneDirective implements OnDestroy {
276
275
  */
277
276
  browser(): Promise<void>;
278
277
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXUploaderZoneDirective, never>;
279
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<AXUploaderZoneDirective, "[axUploaderZone]", never, { "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "accept": { "alias": "accept"; "required": false; "isSignal": true; }; "overlayTemplate": { "alias": "overlayTemplate"; "required": false; "isSignal": true; }; "disableBrowse": { "alias": "disableBrowse"; "required": false; "isSignal": true; }; "disableDragDrop": { "alias": "disableDragDrop"; "required": false; "isSignal": true; }; }, { "fileChange": "fileChange"; "onChanged": "onChanged"; "dragEnter": "dragEnter"; "dragLeave": "dragLeave"; "dragOver": "dragOver"; "onFileUploadComplete": "onFileUploadComplete"; "onFilesUploadComplete": "onFilesUploadComplete"; }, never, never, true, never>;
278
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<AXUploaderZoneDirective, "[axUploaderZone]", never, { "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "accept": { "alias": "accept"; "required": false; "isSignal": true; }; "fileType": { "alias": "fileType"; "required": false; "isSignal": true; }; "overlayTemplate": { "alias": "overlayTemplate"; "required": false; "isSignal": true; }; "disableBrowse": { "alias": "disableBrowse"; "required": false; "isSignal": true; }; "disableDragDrop": { "alias": "disableDragDrop"; "required": false; "isSignal": true; }; }, { "fileChange": "fileChange"; "onChanged": "onChanged"; "dragEnter": "dragEnter"; "dragLeave": "dragLeave"; "dragOver": "dragOver"; "onFileUploadComplete": "onFileUploadComplete"; "onFilesUploadComplete": "onFilesUploadComplete"; }, never, never, true, never>;
280
279
  }
281
280
 
281
+ /** Reference to stored file/media (url and/or mediaId). */
282
+ interface AXUploadReference {
283
+ url?: string;
284
+ mediaId?: string;
285
+ mimeType?: string;
286
+ size?: number;
287
+ expiresAt?: number;
288
+ metadata?: Record<string, unknown>;
289
+ }
290
+ interface AXFileUploadOptions {
291
+ source: File | Blob;
292
+ fileName?: string;
293
+ mimeType?: string;
294
+ metadata?: Record<string, unknown>;
295
+ onProgress?: (percent: number) => void;
296
+ signal?: AbortSignal;
297
+ }
298
+ interface AXUploadResult {
299
+ url: string;
300
+ thumbnailUrl?: string;
301
+ mediaId?: string;
302
+ size: number;
303
+ mimeType: string;
304
+ metadata?: Record<string, unknown>;
305
+ }
306
+ /** Emitted when {@link AXUploaderService.upload} is called. */
307
+ interface AXUploaderUploadEvent extends AXEvent {
308
+ options: AXFileUploadOptions;
309
+ resolve: (result: AXUploadResult) => void;
310
+ reject: (reason: unknown) => void;
311
+ }
312
+ /** Emitted when {@link AXUploaderService.resolveUrl} is called. */
313
+ interface AXUploaderResolveUrlEvent extends AXEvent {
314
+ reference: AXUploadReference;
315
+ signal?: AbortSignal;
316
+ resolve: (url: string) => void;
317
+ reject: (reason: unknown) => void;
318
+ }
319
+ /** Emitted when {@link AXUploaderService.deleteMedia} is called. */
320
+ interface AXUploaderDeleteMediaEvent extends AXEvent {
321
+ reference: AXUploadReference;
322
+ resolve: () => void;
323
+ reject: (reason: unknown) => void;
324
+ }
325
+ interface AXUploaderBrowseOptions {
326
+ multiple?: boolean;
327
+ accept?: string;
328
+ /** Logical file type name(s) registered in {@link AXFileService}. */
329
+ fileType?: string | string[];
330
+ }
331
+ interface AXUploaderAddOptions {
332
+ fileType?: string | string[];
333
+ }
282
334
  /**
283
- * Service for managing file uploads with drag-and-drop support, progress tracking, and dialog management.
335
+ * File upload queue and validation via {@link AXFileService}.
336
+ * Storage is implemented by subscribing to upload/resolve/delete events.
284
337
  * @category Services
285
338
  */
286
339
  declare class AXUploaderService {
287
- /**
288
- * Translation service for localized text.
289
- * @ignore
290
- */
291
- private translateService;
292
- /**
293
- * File service for file operations.
294
- * @ignore
295
- */
296
- private fileService;
297
- /**
298
- * Behavior subject for managing upload requests.
299
- * @ignore
300
- */
340
+ private readonly fileService;
301
341
  private readonly _files$;
302
- /**
303
- * Gets the files behavior subject for observing upload requests.
304
- */
305
342
  readonly files: rxjs.Observable<AXUploadRequest[]>;
306
- /**
307
- * Subject for file upload start events.
308
- */
309
343
  readonly onFileUploadStart: Subject<AXUploaderFileStartEvent>;
310
- /**
311
- * Subject for file upload complete events.
312
- */
313
344
  readonly onFileUploadComplete: Subject<AXUploaderFileCompleteEvent>;
314
- /**
315
- * Subject for all files upload complete events.
316
- */
317
345
  readonly onFilesUploadComplete: Subject<AXUploaderFilesCompleteEvent>;
318
- /**
319
- * Subject for file upload canceled events.
320
- */
321
346
  readonly onFileUploadCanceled: Subject<AXUploaderFileCancelEvent>;
322
- /**
323
- * Signal indicating if any upload has determined progress.
324
- */
325
- readonly isAnyDetermined: _angular_core.Signal<boolean>;
326
- /**
327
- * Observable for total estimated upload time.
328
- */
347
+ /** Subscribe to perform uploads (e.g. HTTP, IndexedDB). */
348
+ readonly onUpload: Subject<AXUploaderUploadEvent>;
349
+ /** Subscribe to resolve a stored reference to a playback URL. */
350
+ readonly onResolveUrl: Subject<AXUploaderResolveUrlEvent>;
351
+ /** Subscribe to delete stored media. */
352
+ readonly onDeleteMedia: Subject<AXUploaderDeleteMediaEvent>;
329
353
  readonly totalEstimateTime: rxjs.Observable<number>;
330
- /**
331
- * Converts a File object to an AXUploadRequest.
332
- * @private
333
- */
334
- private convertFileToRequest;
335
- /**
336
- * Starts uploading files that are in 'new' status.
337
- * @private
338
- */
339
- private startUpload;
340
- /**
341
- * Binds event handlers to an upload request.
342
- * @private
343
- */
344
- private bindEvents;
345
- /**
346
- * Opens the file browser dialog and returns selected files as upload requests.
347
- * @param options - Configuration options for file selection
348
- * @returns Promise that resolves to an array of upload requests
349
- */
350
- browse(options?: {
351
- multiple?: boolean;
352
- accept?: string;
353
- }): Promise<AXUploadRequest[]>;
354
- /**
355
- * Adds files to the upload queue and starts the upload process.
356
- * @param files - Files to add to the upload queue
357
- * @returns Promise that resolves to an array of upload requests
358
- */
359
- add(files: FileList | File[]): Promise<AXUploadRequest[]>;
360
- /**
361
- * Cancels all pending and in-progress uploads.
362
- */
354
+ isAnyDetermined(): boolean;
355
+ validateFiles(files: File[], fileType: string): Promise<{
356
+ accepted: File[];
357
+ rejected: {
358
+ file: File;
359
+ errors: AXValidationRuleResult[];
360
+ }[];
361
+ }>;
362
+ getAcceptAttribute(fileType: string | string[]): Promise<string>;
363
+ upload(options: AXFileUploadOptions): Promise<AXUploadResult>;
364
+ resolveUrl(reference: AXUploadReference, signal?: AbortSignal): Promise<string>;
365
+ resolvePlaybackUrl(reference: AXUploadReference, signal?: AbortSignal): Promise<string>;
366
+ deleteMedia(reference: AXUploadReference): Promise<void>;
367
+ private hasUploadHandler;
368
+ private hasResolveUrlHandler;
369
+ private hasDeleteMediaHandler;
370
+ add(files: FileList | File[], options?: AXUploaderAddOptions): Promise<AXUploadRequest[]>;
371
+ /**
372
+ * Opens the file dialog and returns selected files without enqueueing uploads.
373
+ * With `fileType`, applies catalog validation; otherwise uses legacy accept-only selection.
374
+ */
375
+ chooseFiles(options?: AXUploaderBrowseOptions): Promise<AXUploaderChooseFilesResult>;
376
+ browse(options?: AXUploaderBrowseOptions): Promise<AXUploadRequest[]>;
363
377
  cancelAll(): Promise<void>;
364
- /**
365
- * Clears all completed uploads from the queue.
366
- */
367
378
  clearAll(): void;
368
- /**
369
- * Removes a specific upload request from the queue.
370
- * @param item - The upload request to remove
371
- */
372
379
  remove(item: AXUploadRequest): void;
380
+ private startUpload;
381
+ private bindEvents;
382
+ private applyFileTypeValidation;
373
383
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXUploaderService, never>;
374
384
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXUploaderService>;
375
385
  }
376
386
 
377
387
  export { AXUploadRequest, AXUploaderBrowseDirective, AXUploaderService, AXUploaderZoneDirective };
378
- export type { AXUploadStatus, AXUploaderChangedEvent, AXUploaderFileCancelEvent, AXUploaderFileCompleteEvent, AXUploaderFileStartEvent, AXUploaderFilesCompleteEvent };
388
+ export type { AXFileUploadOptions, AXUploadReference, AXUploadResult, AXUploadStatus, AXUploaderAddOptions, AXUploaderBrowseOptions, AXUploaderChangedEvent, AXUploaderChooseFilesResult, AXUploaderDeleteMediaEvent, AXUploaderFileCancelEvent, AXUploaderFileChangeEvent, AXUploaderFileCompleteEvent, AXUploaderFileStartEvent, AXUploaderFilesCompleteEvent, AXUploaderResolveUrlEvent, AXUploaderUploadEvent };
File without changes
File without changes