@eternalheart/angular-file-preview 1.6.5

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 (119) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +879 -0
  3. package/README.zh-CN.md +876 -0
  4. package/lib/LICENSE +22 -0
  5. package/lib/README.md +879 -0
  6. package/lib/components/preview/file-preview-toolbar.d.ts +19 -0
  7. package/lib/components/preview/nav-arrows.d.ts +25 -0
  8. package/lib/components/preview/renderer-outlet.d.ts +23 -0
  9. package/lib/components/preview/toolbar-button.d.ts +12 -0
  10. package/lib/components/resizable-split.d.ts +32 -0
  11. package/lib/di/locale.service.d.ts +12 -0
  12. package/lib/di/request.service.d.ts +20 -0
  13. package/lib/di/theme-mode.d.ts +6 -0
  14. package/lib/di/theme.service.d.ts +9 -0
  15. package/lib/fesm2022/eternalheart-angular-file-preview-avifLoader-BP3fgcMm-CZsJ9svm.mjs +55 -0
  16. package/lib/fesm2022/eternalheart-angular-file-preview-avifLoader-BP3fgcMm-CZsJ9svm.mjs.map +1 -0
  17. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-RendererError-DtNihCIX-DtNihCIX.mjs +58 -0
  18. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-RendererError-DtNihCIX-DtNihCIX.mjs.map +1 -0
  19. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-UobTf36G.mjs +5835 -0
  20. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-UobTf36G.mjs.map +1 -0
  21. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-base.types-D5x7QPey-D5x7QPey.mjs +17 -0
  22. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-base.types-D5x7QPey-D5x7QPey.mjs.map +1 -0
  23. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index--7d8Hgi0-D-sg24Qs.mjs +284 -0
  24. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index--7d8Hgi0-D-sg24Qs.mjs.map +1 -0
  25. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-6dZS_Cfs-B1itLV5R.mjs +703 -0
  26. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-6dZS_Cfs-B1itLV5R.mjs.map +1 -0
  27. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-B1ANUCTy-BRs7TMLn.mjs +231 -0
  28. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-B1ANUCTy-BRs7TMLn.mjs.map +1 -0
  29. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-BEaqpRV8-BidVIVlO.mjs +552 -0
  30. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-BEaqpRV8-BidVIVlO.mjs.map +1 -0
  31. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-BGqTRZbm-CAOLRw20.mjs +688 -0
  32. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-BGqTRZbm-CAOLRw20.mjs.map +1 -0
  33. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-Bv3JRXKn-B4Wewc-4.mjs +273 -0
  34. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-Bv3JRXKn-B4Wewc-4.mjs.map +1 -0
  35. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-C0McUoqT-DJ35bhIz.mjs +288 -0
  36. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-C0McUoqT-DJ35bhIz.mjs.map +1 -0
  37. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-C518mdUd-B5SCzrzU.mjs +550 -0
  38. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-C518mdUd-B5SCzrzU.mjs.map +1 -0
  39. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-CDjKPqyW-CmX5sdkL.mjs +102 -0
  40. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-CDjKPqyW-CmX5sdkL.mjs.map +1 -0
  41. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-CHi9tOe0-NOeQYAnM.mjs +516 -0
  42. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-CHi9tOe0-NOeQYAnM.mjs.map +1 -0
  43. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-CQwhffym-DAGw4Xy_.mjs +823 -0
  44. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-CQwhffym-DAGw4Xy_.mjs.map +1 -0
  45. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-CSCTj7ft-BfqruUyY.mjs +164 -0
  46. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-CSCTj7ft-BfqruUyY.mjs.map +1 -0
  47. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-Cb1RLXeO-Bj9gjS1Z.mjs +655 -0
  48. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-Cb1RLXeO-Bj9gjS1Z.mjs.map +1 -0
  49. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-Cw90Kdyg-BzrW_cyx.mjs +207 -0
  50. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-Cw90Kdyg-BzrW_cyx.mjs.map +1 -0
  51. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-D35x1nwM-CugEEXjg.mjs +199 -0
  52. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-D35x1nwM-CugEEXjg.mjs.map +1 -0
  53. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-D9jJNzeM-mWX59Aj2.mjs +194 -0
  54. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-D9jJNzeM-mWX59Aj2.mjs.map +1 -0
  55. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-DbmuvdvN-C29uLyt2.mjs +94 -0
  56. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-DbmuvdvN-C29uLyt2.mjs.map +1 -0
  57. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-DsNNZ59Q-C8MaSME6.mjs +468 -0
  58. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-DsNNZ59Q-C8MaSME6.mjs.map +1 -0
  59. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-DufW2Fuc-CTosCut6.mjs +193 -0
  60. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-DufW2Fuc-CTosCut6.mjs.map +1 -0
  61. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-TSTa_Q7E-DBhkL6pV.mjs +184 -0
  62. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-TSTa_Q7E-DBhkL6pV.mjs.map +1 -0
  63. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-pG0Ko5mI-DthQJg-X.mjs +492 -0
  64. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-index-pG0Ko5mI-DthQJg-X.mjs.map +1 -0
  65. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-shiki-highlight-CL9cG481-BKfwdOpN.mjs +68 -0
  66. package/lib/fesm2022/eternalheart-angular-file-preview-eternalheart-angular-file-preview-shiki-highlight-CL9cG481-BKfwdOpN.mjs.map +1 -0
  67. package/lib/fesm2022/eternalheart-angular-file-preview-heicLoader-CH_raQNn-BSXHd_oi.mjs +36 -0
  68. package/lib/fesm2022/eternalheart-angular-file-preview-heicLoader-CH_raQNn-BSXHd_oi.mjs.map +1 -0
  69. package/lib/fesm2022/eternalheart-angular-file-preview-jp2Loader-ldvCSsvm-DJEhfimG.mjs +121 -0
  70. package/lib/fesm2022/eternalheart-angular-file-preview-jp2Loader-ldvCSsvm-DJEhfimG.mjs.map +1 -0
  71. package/lib/fesm2022/eternalheart-angular-file-preview-psdLoader-D5CkupyY-D5Gegcdg.mjs +78 -0
  72. package/lib/fesm2022/eternalheart-angular-file-preview-psdLoader-D5CkupyY-D5Gegcdg.mjs.map +1 -0
  73. package/lib/fesm2022/eternalheart-angular-file-preview-rawLoader-0mLvxCNp-CCXn9Rdp.mjs +81 -0
  74. package/lib/fesm2022/eternalheart-angular-file-preview-rawLoader-0mLvxCNp-CCXn9Rdp.mjs.map +1 -0
  75. package/lib/fesm2022/eternalheart-angular-file-preview-tiffLoader-CmUAD1vO-0JqIws9t.mjs +59 -0
  76. package/lib/fesm2022/eternalheart-angular-file-preview-tiffLoader-CmUAD1vO-0JqIws9t.mjs.map +1 -0
  77. package/lib/fesm2022/eternalheart-angular-file-preview.mjs +2 -0
  78. package/lib/fesm2022/eternalheart-angular-file-preview.mjs.map +1 -0
  79. package/lib/file-preview-content.d.ts +65 -0
  80. package/lib/file-preview-embed.d.ts +30 -0
  81. package/lib/file-preview-modal.d.ts +34 -0
  82. package/lib/fp-core.d.ts +1 -0
  83. package/lib/index.css +2119 -0
  84. package/lib/index.d.ts +11 -0
  85. package/lib/renderers/Audio/index.d.ts +74 -0
  86. package/lib/renderers/Cad/index.d.ts +45 -0
  87. package/lib/renderers/Cad/toolbar.d.ts +15 -0
  88. package/lib/renderers/Csv/index.d.ts +26 -0
  89. package/lib/renderers/Doc/index.d.ts +19 -0
  90. package/lib/renderers/Docx/index.d.ts +42 -0
  91. package/lib/renderers/Epub/index.d.ts +57 -0
  92. package/lib/renderers/Font/font-preview-line.d.ts +26 -0
  93. package/lib/renderers/Font/index.d.ts +52 -0
  94. package/lib/renderers/Image/index.d.ts +79 -0
  95. package/lib/renderers/Json/index.d.ts +61 -0
  96. package/lib/renderers/Markdown/index.d.ts +35 -0
  97. package/lib/renderers/Mobi/index.d.ts +51 -0
  98. package/lib/renderers/Msg/index.d.ts +47 -0
  99. package/lib/renderers/Pdf/index.d.ts +55 -0
  100. package/lib/renderers/Ppt/index.d.ts +19 -0
  101. package/lib/renderers/Pptx/index.d.ts +29 -0
  102. package/lib/renderers/RendererError.d.ts +9 -0
  103. package/lib/renderers/RendererLoading.d.ts +7 -0
  104. package/lib/renderers/Subtitle/index.d.ts +25 -0
  105. package/lib/renderers/Text/index.d.ts +29 -0
  106. package/lib/renderers/Unsupported/index.d.ts +15 -0
  107. package/lib/renderers/Video/index.d.ts +28 -0
  108. package/lib/renderers/Xlsx/index.d.ts +25 -0
  109. package/lib/renderers/Xml/index.d.ts +26 -0
  110. package/lib/renderers/Zip/index.d.ts +58 -0
  111. package/lib/renderers/Zip/tree-item.d.ts +29 -0
  112. package/lib/renderers/base.types.d.ts +10 -0
  113. package/lib/renderers/lazy.d.ts +23 -0
  114. package/lib/renderers/registry.d.ts +13 -0
  115. package/lib/renderers/toolbar.types.d.ts +19 -0
  116. package/lib/types.d.ts +26 -0
  117. package/lib/utils/audio-player.d.ts +20 -0
  118. package/lib/utils/shiki-highlight.d.ts +7 -0
  119. package/package.json +119 -0
@@ -0,0 +1,19 @@
1
+ import type { Translator } from '../../fp-core';
2
+ import type { ToolbarGroup } from '../../renderers/toolbar.types';
3
+ import * as i0 from "@angular/core";
4
+ export declare class FilePreviewToolbar {
5
+ fileName: import("@angular/core").InputSignal<string>;
6
+ currentIndex: import("@angular/core").InputSignal<number>;
7
+ totalFiles: import("@angular/core").InputSignal<number>;
8
+ toolGroups: import("@angular/core").InputSignal<ToolbarGroup[]>;
9
+ t: import("@angular/core").InputSignal<Translator>;
10
+ showClose: import("@angular/core").InputSignal<boolean>;
11
+ showDownload: import("@angular/core").InputSignal<boolean>;
12
+ download: import("@angular/core").OutputEmitterRef<void>;
13
+ close: import("@angular/core").OutputEmitterRef<void>;
14
+ protected readonly downloadIcon: import("lucide-angular").LucideIconData;
15
+ protected readonly closeIcon: import("lucide-angular").LucideIconData;
16
+ readonly actionGroups: import("@angular/core").Signal<ToolbarGroup[]>;
17
+ static ɵfac: i0.ɵɵFactoryDeclaration<FilePreviewToolbar, never>;
18
+ static ɵcmp: i0.ɵɵComponentDeclaration<FilePreviewToolbar, "afp-file-preview-toolbar", never, { "fileName": { "alias": "fileName"; "required": true; "isSignal": true; }; "currentIndex": { "alias": "currentIndex"; "required": true; "isSignal": true; }; "totalFiles": { "alias": "totalFiles"; "required": true; "isSignal": true; }; "toolGroups": { "alias": "toolGroups"; "required": false; "isSignal": true; }; "t": { "alias": "t"; "required": true; "isSignal": true; }; "showClose": { "alias": "showClose"; "required": false; "isSignal": true; }; "showDownload": { "alias": "showDownload"; "required": false; "isSignal": true; }; }, { "download": "download"; "close": "close"; }, never, never, true, never>;
19
+ }
@@ -0,0 +1,25 @@
1
+ import type { Translator } from '../../fp-core';
2
+ import * as i0 from "@angular/core";
3
+ export declare class NavArrows {
4
+ container: import("@angular/core").InputSignal<HTMLElement | null>;
5
+ hasPrev: import("@angular/core").InputSignal<boolean>;
6
+ hasNext: import("@angular/core").InputSignal<boolean>;
7
+ resetKey: import("@angular/core").InputSignal<number>;
8
+ t: import("@angular/core").InputSignal<Translator>;
9
+ prev: import("@angular/core").OutputEmitterRef<void>;
10
+ next: import("@angular/core").OutputEmitterRef<void>;
11
+ protected readonly chevronLeft: import("lucide-angular").LucideIconData;
12
+ protected readonly chevronRight: import("lucide-angular").LucideIconData;
13
+ readonly visible: import("@angular/core").WritableSignal<boolean>;
14
+ private hideTimer;
15
+ private attached;
16
+ private readonly destroyRef;
17
+ constructor();
18
+ show: () => void;
19
+ private scheduleHide;
20
+ private clearTimer;
21
+ private detach;
22
+ private attach;
23
+ static ɵfac: i0.ɵɵFactoryDeclaration<NavArrows, never>;
24
+ static ɵcmp: i0.ɵɵComponentDeclaration<NavArrows, "afp-nav-arrows", never, { "container": { "alias": "container"; "required": false; "isSignal": true; }; "hasPrev": { "alias": "hasPrev"; "required": false; "isSignal": true; }; "hasNext": { "alias": "hasNext"; "required": false; "isSignal": true; }; "resetKey": { "alias": "resetKey"; "required": false; "isSignal": true; }; "t": { "alias": "t"; "required": true; "isSignal": true; }; }, { "prev": "prev"; "next": "next"; }, never, never, true, never>;
25
+ }
@@ -0,0 +1,23 @@
1
+ import { Type } from '@angular/core';
2
+ import type { RendererHandle } from '../../renderers/base.types';
3
+ import type { RendererLoader } from '../../renderers/lazy';
4
+ import * as i0 from "@angular/core";
5
+ export declare class RendererOutlet {
6
+ loader: import("@angular/core").InputSignal<RendererLoader | null>;
7
+ componentType: import("@angular/core").InputSignal<Type<unknown> | null>;
8
+ inputs: import("@angular/core").InputSignal<Record<string, unknown>>;
9
+ handleChange: import("@angular/core").OutputEmitterRef<RendererHandle | null>;
10
+ private host;
11
+ readonly loading: import("@angular/core").WritableSignal<boolean>;
12
+ private ref;
13
+ private loadedKey;
14
+ private seq;
15
+ private readonly destroyRef;
16
+ constructor();
17
+ private sync;
18
+ private applyInputs;
19
+ private emitHandle;
20
+ private clear;
21
+ static ɵfac: i0.ɵɵFactoryDeclaration<RendererOutlet, never>;
22
+ static ɵcmp: i0.ɵɵComponentDeclaration<RendererOutlet, "afp-renderer-outlet", never, { "loader": { "alias": "loader"; "required": false; "isSignal": true; }; "componentType": { "alias": "componentType"; "required": false; "isSignal": true; }; "inputs": { "alias": "inputs"; "required": false; "isSignal": true; }; }, { "handleChange": "handleChange"; }, never, never, true, never>;
23
+ }
@@ -0,0 +1,12 @@
1
+ import type { LucideIconData } from 'lucide-angular';
2
+ import * as i0 from "@angular/core";
3
+ export declare class ToolbarButton {
4
+ icon: import("@angular/core").InputSignal<LucideIconData>;
5
+ label: import("@angular/core").InputSignal<string>;
6
+ onClick: import("@angular/core").InputSignal<() => void>;
7
+ disabled: import("@angular/core").InputSignal<boolean>;
8
+ active: import("@angular/core").InputSignal<boolean>;
9
+ ariaKeyshortcuts: import("@angular/core").InputSignal<string | undefined>;
10
+ static ɵfac: i0.ɵɵFactoryDeclaration<ToolbarButton, never>;
11
+ static ɵcmp: i0.ɵɵComponentDeclaration<ToolbarButton, "afp-toolbar-button", never, { "icon": { "alias": "icon"; "required": true; "isSignal": true; }; "label": { "alias": "label"; "required": true; "isSignal": true; }; "onClick": { "alias": "onClick"; "required": true; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "active": { "alias": "active"; "required": false; "isSignal": true; }; "ariaKeyshortcuts": { "alias": "ariaKeyshortcuts"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
12
+ }
@@ -0,0 +1,32 @@
1
+ import * as i0 from "@angular/core";
2
+ export declare class ResizableSplit {
3
+ initialLeftWidth: import("@angular/core").InputSignal<number>;
4
+ minLeftWidth: import("@angular/core").InputSignal<number>;
5
+ maxLeftWidth: import("@angular/core").InputSignal<number>;
6
+ minRightWidth: import("@angular/core").InputSignal<number>;
7
+ storageKey: import("@angular/core").InputSignal<string | undefined>;
8
+ desktopMedia: import("@angular/core").InputSignal<string>;
9
+ mobileTabMode: import("@angular/core").InputSignal<boolean>;
10
+ leftTabLabel: import("@angular/core").InputSignal<string>;
11
+ rightTabLabel: import("@angular/core").InputSignal<string>;
12
+ private readonly container;
13
+ private readonly destroyRef;
14
+ readonly leftWidth: import("@angular/core").WritableSignal<number>;
15
+ readonly dragging: import("@angular/core").WritableSignal<boolean>;
16
+ readonly isDesktop: import("@angular/core").WritableSignal<boolean>;
17
+ readonly activeTab: import("@angular/core").WritableSignal<"left" | "right">;
18
+ readonly isMobileTab: import("@angular/core").Signal<boolean>;
19
+ readonly leftStyle: import("@angular/core").Signal<{
20
+ width: string;
21
+ } | undefined>;
22
+ readonly leftPaneClass: import("@angular/core").Signal<"afp-flex-1 afp-min-h-0 afp-min-w-0 afp-w-full afp-overflow-hidden" | "afp-min-h-0 afp-min-w-0 afp-flex-shrink-0 afp-w-full afp-max-h-60 md:afp-h-full md:afp-max-h-none">;
23
+ readonly rightPaneClass: import("@angular/core").Signal<"afp-flex-1 afp-min-h-0 afp-min-w-0 afp-w-full afp-overflow-hidden" | "afp-flex-1 afp-min-w-0 afp-min-h-0 afp-overflow-hidden">;
24
+ private storageApplied;
25
+ constructor();
26
+ switchTab(tab: 'left' | 'right'): void;
27
+ onDividerDown(e: MouseEvent): void;
28
+ private readonly onMove;
29
+ private readonly onUp;
30
+ static ɵfac: i0.ɵɵFactoryDeclaration<ResizableSplit, never>;
31
+ static ɵcmp: i0.ɵɵComponentDeclaration<ResizableSplit, "afp-resizable-split", never, { "initialLeftWidth": { "alias": "initialLeftWidth"; "required": false; "isSignal": true; }; "minLeftWidth": { "alias": "minLeftWidth"; "required": false; "isSignal": true; }; "maxLeftWidth": { "alias": "maxLeftWidth"; "required": false; "isSignal": true; }; "minRightWidth": { "alias": "minRightWidth"; "required": false; "isSignal": true; }; "storageKey": { "alias": "storageKey"; "required": false; "isSignal": true; }; "desktopMedia": { "alias": "desktopMedia"; "required": false; "isSignal": true; }; "mobileTabMode": { "alias": "mobileTabMode"; "required": false; "isSignal": true; }; "leftTabLabel": { "alias": "leftTabLabel"; "required": false; "isSignal": true; }; "rightTabLabel": { "alias": "rightTabLabel"; "required": false; "isSignal": true; }; }, {}, never, ["[splitLeft]", "[splitRight]"], true, never>;
32
+ }
@@ -0,0 +1,12 @@
1
+ import { type Locale, type Messages, type Translator } from '../fp-core';
2
+ import * as i0 from "@angular/core";
3
+ export declare function getFallbackTranslator(): Translator;
4
+ export declare class LocaleService {
5
+ private readonly localeSig;
6
+ private readonly messagesSig;
7
+ readonly locale: import("@angular/core").Signal<Locale>;
8
+ readonly t: import("@angular/core").Signal<Translator>;
9
+ configure(locale: Locale | undefined, messages: Partial<Record<Locale, Partial<Messages>>> | undefined): void;
10
+ static ɵfac: i0.ɵɵFactoryDeclaration<LocaleService, never>;
11
+ static ɵprov: i0.ɵɵInjectableDeclaration<LocaleService>;
12
+ }
@@ -0,0 +1,20 @@
1
+ import { type Fetcher, type PreviewFile, type RequestHandler, type RequestInitFactory, type ShouldFetchAsBlob } from '../fp-core';
2
+ import * as i0 from "@angular/core";
3
+ export interface RequestContextOptions {
4
+ requestInit?: RequestInitFactory;
5
+ requestHandler?: RequestHandler;
6
+ shouldFetchAsBlob?: ShouldFetchAsBlob;
7
+ }
8
+ export declare class RequestService {
9
+ private readonly optionsSig;
10
+ readonly fetcher: import("@angular/core").Signal<Fetcher>;
11
+ readonly shouldFetchAsBlob: import("@angular/core").Signal<ShouldFetchAsBlob | undefined>;
12
+ configure(options: RequestContextOptions): void;
13
+ /**
14
+ * 解析可消费 URL。调用方需自行在变更时 revoke;此方法返回 Promise。
15
+ */
16
+ resolveBlobUrl(url: string): Promise<string>;
17
+ static ɵfac: i0.ɵɵFactoryDeclaration<RequestService, never>;
18
+ static ɵprov: i0.ɵɵInjectableDeclaration<RequestService>;
19
+ }
20
+ export declare function needsBlobUrl(file: PreviewFile | undefined, shouldFetchAsBlob?: ShouldFetchAsBlob): boolean;
@@ -0,0 +1,6 @@
1
+ import type { Theme } from '../fp-core';
2
+ export declare function createSystemDarkSignal(): {
3
+ systemDark: import("@angular/core").WritableSignal<boolean>;
4
+ bind: (theme: Theme) => void;
5
+ };
6
+ export declare function resolveTheme(theme: Theme, systemDark: boolean): 'dark' | 'light';
@@ -0,0 +1,9 @@
1
+ import * as i0 from "@angular/core";
2
+ export type ResolvedTheme = 'dark' | 'light';
3
+ export declare class ThemeService {
4
+ private readonly themeSig;
5
+ readonly theme: import("@angular/core").Signal<ResolvedTheme>;
6
+ setTheme(theme: ResolvedTheme): void;
7
+ static ɵfac: i0.ɵɵFactoryDeclaration<ThemeService, never>;
8
+ static ɵprov: i0.ɵɵInjectableDeclaration<ThemeService>;
9
+ }
@@ -0,0 +1,55 @@
1
+ let e = null;
2
+ async function c() {
3
+ return e !== null ? e : new Promise((n) => {
4
+ const A = new Image();
5
+ A.onload = () => {
6
+ e = A.width === 1 && A.height === 1, n(e);
7
+ }, A.onerror = () => {
8
+ e = false, n(false);
9
+ }, A.src = "data:image/avif;base64,AAAAIGZ0eXBhdmlmAAAAAGF2aWZtaWYxbWlhZk1BMUIAAADybWV0YQAAAAAAAAAoaGRscgAAAAAAAAAAcGljdAAAAAAAAAAAAAAAAGxpYmF2aWYAAAAADnBpdG0AAAAAAAEAAAAeaWxvYwAAAABEAAABAAEAAAABAAABGgAAAB0AAAAoaWluZgAAAAAAAQAAABppbmZlAgAAAAABAABhdjAxQ29sb3IAAAAAamlwcnAAAABLaXBjbwAAABRpc3BlAAAAAAAAAAEAAAABAAAAEHBpeGkAAAAAAwgICAAAAAxhdjFDgQAMAAAAABNjb2xybmNseAACAAIABoAAAAAXaXBtYQAAAAAAAAABAAEEAQKDBAAAACVtZGF0EgAKCBgABogQEDQgMgkQAAAAB8dSLfI=";
10
+ });
11
+ }
12
+ class f {
13
+ /**
14
+ * 检测是否需要解码:仅在浏览器不原生支持 AVIF 时需要
15
+ */
16
+ async needsDecode(A) {
17
+ return A !== "image/avif" ? false : !await c();
18
+ }
19
+ /**
20
+ * 解码 AVIF 文件为 PNG Blob
21
+ */
22
+ async decode(A, r) {
23
+ if (await c())
24
+ return A instanceof Blob ? A : new Blob([A], { type: "image/avif" });
25
+ try {
26
+ const a = await import('@jsquash/avif'), i = A instanceof Blob ? await A.arrayBuffer() : A, o = await a.decode(i), t = document.createElement("canvas");
27
+ t.width = o.width, t.height = o.height;
28
+ const s = t.getContext("2d");
29
+ if (!s)
30
+ throw new Error("无法创建 Canvas 2D 上下文");
31
+ return s.putImageData(o, 0, 0), new Promise((g, d) => {
32
+ t.toBlob(
33
+ (B) => {
34
+ B ? g(B) : d(new Error("AVIF Canvas 转换为 PNG 失败"));
35
+ },
36
+ (r == null ? void 0 : r.outputFormat) || "image/png"
37
+ );
38
+ });
39
+ } catch (a) {
40
+ throw new Error(`AVIF 解码失败: ${(a == null ? void 0 : a.message) || "未知错误"}`);
41
+ }
42
+ }
43
+ /**
44
+ * 获取 AVIF 元数据
45
+ */
46
+ async getMetadata(A) {
47
+ return {
48
+ format: "avif"
49
+ };
50
+ }
51
+ }
52
+ const m = new f();
53
+
54
+ export { m as default };
55
+ //# sourceMappingURL=eternalheart-angular-file-preview-avifLoader-BP3fgcMm-CZsJ9svm.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eternalheart-angular-file-preview-avifLoader-BP3fgcMm-CZsJ9svm.mjs","sources":["../../../file-preview-core/lib/avifLoader-BP3fgcMm.js"],"sourcesContent":["let e = null;\nasync function c() {\n return e !== null ? e : new Promise((n) => {\n const A = new Image();\n A.onload = () => {\n e = A.width === 1 && A.height === 1, n(e);\n }, A.onerror = () => {\n e = !1, n(!1);\n }, A.src = \"data:image/avif;base64,AAAAIGZ0eXBhdmlmAAAAAGF2aWZtaWYxbWlhZk1BMUIAAADybWV0YQAAAAAAAAAoaGRscgAAAAAAAAAAcGljdAAAAAAAAAAAAAAAAGxpYmF2aWYAAAAADnBpdG0AAAAAAAEAAAAeaWxvYwAAAABEAAABAAEAAAABAAABGgAAAB0AAAAoaWluZgAAAAAAAQAAABppbmZlAgAAAAABAABhdjAxQ29sb3IAAAAAamlwcnAAAABLaXBjbwAAABRpc3BlAAAAAAAAAAEAAAABAAAAEHBpeGkAAAAAAwgICAAAAAxhdjFDgQAMAAAAABNjb2xybmNseAACAAIABoAAAAAXaXBtYQAAAAAAAAABAAEEAQKDBAAAACVtZGF0EgAKCBgABogQEDQgMgkQAAAAB8dSLfI=\";\n });\n}\nclass f {\n /**\n * 检测是否需要解码:仅在浏览器不原生支持 AVIF 时需要\n */\n async needsDecode(A) {\n return A !== \"image/avif\" ? !1 : !await c();\n }\n /**\n * 解码 AVIF 文件为 PNG Blob\n */\n async decode(A, r) {\n if (await c())\n return A instanceof Blob ? A : new Blob([A], { type: \"image/avif\" });\n try {\n const a = await import(\"@jsquash/avif\"), i = A instanceof Blob ? await A.arrayBuffer() : A, o = await a.decode(i), t = document.createElement(\"canvas\");\n t.width = o.width, t.height = o.height;\n const s = t.getContext(\"2d\");\n if (!s)\n throw new Error(\"无法创建 Canvas 2D 上下文\");\n return s.putImageData(o, 0, 0), new Promise((g, d) => {\n t.toBlob(\n (B) => {\n B ? g(B) : d(new Error(\"AVIF Canvas 转换为 PNG 失败\"));\n },\n (r == null ? void 0 : r.outputFormat) || \"image/png\"\n );\n });\n } catch (a) {\n throw new Error(`AVIF 解码失败: ${(a == null ? void 0 : a.message) || \"未知错误\"}`);\n }\n }\n /**\n * 获取 AVIF 元数据\n */\n async getMetadata(A) {\n return {\n format: \"avif\"\n };\n }\n}\nconst m = new f();\nexport {\n m as default\n};\n"],"names":[],"mappings":"AAAA,IAAI,CAAC,GAAG,IAAI;AACZ,eAAe,CAAC,GAAG;AACnB,EAAE,OAAO,CAAC,KAAK,IAAI,GAAG,CAAC,GAAG,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK;AAC7C,IAAI,MAAM,CAAC,GAAG,IAAI,KAAK,EAAE;AACzB,IAAI,CAAC,CAAC,MAAM,GAAG,MAAM;AACrB,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAC/C,IAAI,CAAC,EAAE,CAAC,CAAC,OAAO,GAAG,MAAM;AACzB,MAAM,CAAC,GAAG,KAAE,EAAE,CAAC,CAAC,KAAE,CAAC;AACnB,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,ibAAib;AAChc,EAAE,CAAC,CAAC;AACJ;AACA,MAAM,CAAC,CAAC;AACR;AACA;AACA;AACA,EAAE,MAAM,WAAW,CAAC,CAAC,EAAE;AACvB,IAAI,OAAO,CAAC,KAAK,YAAY,GAAG,KAAE,GAAG,CAAC,MAAM,CAAC,EAAE;AAC/C,EAAE;AACF;AACA;AACA;AACA,EAAE,MAAM,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE;AACrB,IAAI,IAAI,MAAM,CAAC,EAAE;AACjB,MAAM,OAAO,CAAC,YAAY,IAAI,GAAG,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;AAC1E,IAAI,IAAI;AACR,MAAM,MAAM,CAAC,GAAG,MAAM,OAAO,eAAe,CAAC,EAAE,CAAC,GAAG,CAAC,YAAY,IAAI,GAAG,MAAM,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;AAC7J,MAAM,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM;AAC5C,MAAM,MAAM,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC;AAClC,MAAM,IAAI,CAAC,CAAC;AACZ,QAAQ,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC;AAC7C,MAAM,OAAO,CAAC,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK;AAC5D,QAAQ,CAAC,CAAC,MAAM;AAChB,UAAU,CAAC,CAAC,KAAK;AACjB,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;AAC7D,UAAU,CAAC;AACX,UAAU,CAAC,CAAC,IAAI,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,YAAY,KAAK;AACnD,SAAS;AACT,MAAM,CAAC,CAAC;AACR,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE;AAChB,MAAM,MAAM,IAAI,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,IAAI,IAAI,GAAG,MAAM,GAAG,CAAC,CAAC,OAAO,KAAK,MAAM,CAAC,CAAC,CAAC;AACjF,IAAI;AACJ,EAAE;AACF;AACA;AACA;AACA,EAAE,MAAM,WAAW,CAAC,CAAC,EAAE;AACvB,IAAI,OAAO;AACX,MAAM,MAAM,EAAE;AACd,KAAK;AACL,EAAE;AACF;AACK,MAAC,CAAC,GAAG,IAAI,CAAC;;;;"}
@@ -0,0 +1,58 @@
1
+ import * as i0 from '@angular/core';
2
+ import { input, ChangeDetectionStrategy, Component } from '@angular/core';
3
+ import * as i1 from 'lucide-angular';
4
+ import { AlertCircle, LucideAngularModule } from 'lucide-angular';
5
+
6
+ class RendererError {
7
+ constructor() {
8
+ this.message = input.required();
9
+ this.detail = input(undefined);
10
+ this.showIcon = input(true);
11
+ this.alertCircle = AlertCircle;
12
+ }
13
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: RendererError, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
14
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.25", type: RendererError, isStandalone: true, selector: "afp-renderer-error", inputs: { message: { classPropertyName: "message", publicName: "message", isSignal: true, isRequired: true, transformFunction: null }, detail: { classPropertyName: "detail", publicName: "detail", isSignal: true, isRequired: false, transformFunction: null }, showIcon: { classPropertyName: "showIcon", publicName: "showIcon", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
15
+ <div class="afp-flex afp-items-center afp-justify-center afp-w-full afp-h-full">
16
+ <div class="afp-text-center">
17
+ @if (showIcon()) {
18
+ <div class="afp-w-12 afp-h-12 afp-mx-auto afp-mb-3 afp-rounded-full afp-flex afp-items-center afp-justify-center"
19
+ style="background: color-mix(in srgb, #ef4444 10%, transparent)">
20
+ <i-lucide [img]="alertCircle" class="afp-w-6 afp-h-6" style="color: #f87171" />
21
+ </div>
22
+ }
23
+ <p class="afp-text-base afp-font-medium afp-text-fg-primary afp-mb-1">{{ message() }}</p>
24
+ @if (detail()) {
25
+ <p class="afp-text-xs afp-text-fg-tertiary">{{ detail() }}</p>
26
+ }
27
+ </div>
28
+ </div>
29
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: LucideAngularModule }, { kind: "component", type: i1.LucideAngularComponent, selector: "lucide-angular, lucide-icon, i-lucide, span-lucide", inputs: ["class", "name", "img", "color", "absoluteStrokeWidth", "size", "strokeWidth"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
30
+ }
31
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: RendererError, decorators: [{
32
+ type: Component,
33
+ args: [{
34
+ selector: 'afp-renderer-error',
35
+ standalone: true,
36
+ imports: [LucideAngularModule],
37
+ changeDetection: ChangeDetectionStrategy.OnPush,
38
+ template: `
39
+ <div class="afp-flex afp-items-center afp-justify-center afp-w-full afp-h-full">
40
+ <div class="afp-text-center">
41
+ @if (showIcon()) {
42
+ <div class="afp-w-12 afp-h-12 afp-mx-auto afp-mb-3 afp-rounded-full afp-flex afp-items-center afp-justify-center"
43
+ style="background: color-mix(in srgb, #ef4444 10%, transparent)">
44
+ <i-lucide [img]="alertCircle" class="afp-w-6 afp-h-6" style="color: #f87171" />
45
+ </div>
46
+ }
47
+ <p class="afp-text-base afp-font-medium afp-text-fg-primary afp-mb-1">{{ message() }}</p>
48
+ @if (detail()) {
49
+ <p class="afp-text-xs afp-text-fg-tertiary">{{ detail() }}</p>
50
+ }
51
+ </div>
52
+ </div>
53
+ `,
54
+ }]
55
+ }] });
56
+
57
+ export { RendererError as R };
58
+ //# sourceMappingURL=eternalheart-angular-file-preview-eternalheart-angular-file-preview-RendererError-DtNihCIX-DtNihCIX.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eternalheart-angular-file-preview-eternalheart-angular-file-preview-RendererError-DtNihCIX-DtNihCIX.mjs","sources":["../fesm2022/eternalheart-angular-file-preview-RendererError-DtNihCIX.mjs"],"sourcesContent":["import * as i0 from '@angular/core';\nimport { input, ChangeDetectionStrategy, Component } from '@angular/core';\nimport * as i1 from 'lucide-angular';\nimport { AlertCircle, LucideAngularModule } from 'lucide-angular';\n\nclass RendererError {\n constructor() {\n this.message = input.required();\n this.detail = input(undefined);\n this.showIcon = input(true);\n this.alertCircle = AlertCircle;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"19.2.25\", ngImport: i0, type: RendererError, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"19.2.25\", type: RendererError, isStandalone: true, selector: \"afp-renderer-error\", inputs: { message: { classPropertyName: \"message\", publicName: \"message\", isSignal: true, isRequired: true, transformFunction: null }, detail: { classPropertyName: \"detail\", publicName: \"detail\", isSignal: true, isRequired: false, transformFunction: null }, showIcon: { classPropertyName: \"showIcon\", publicName: \"showIcon\", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `\n <div class=\"afp-flex afp-items-center afp-justify-center afp-w-full afp-h-full\">\n <div class=\"afp-text-center\">\n @if (showIcon()) {\n <div class=\"afp-w-12 afp-h-12 afp-mx-auto afp-mb-3 afp-rounded-full afp-flex afp-items-center afp-justify-center\"\n style=\"background: color-mix(in srgb, #ef4444 10%, transparent)\">\n <i-lucide [img]=\"alertCircle\" class=\"afp-w-6 afp-h-6\" style=\"color: #f87171\" />\n </div>\n }\n <p class=\"afp-text-base afp-font-medium afp-text-fg-primary afp-mb-1\">{{ message() }}</p>\n @if (detail()) {\n <p class=\"afp-text-xs afp-text-fg-tertiary\">{{ detail() }}</p>\n }\n </div>\n </div>\n `, isInline: true, dependencies: [{ kind: \"ngmodule\", type: LucideAngularModule }, { kind: \"component\", type: i1.LucideAngularComponent, selector: \"lucide-angular, lucide-icon, i-lucide, span-lucide\", inputs: [\"class\", \"name\", \"img\", \"color\", \"absoluteStrokeWidth\", \"size\", \"strokeWidth\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"19.2.25\", ngImport: i0, type: RendererError, decorators: [{\n type: Component,\n args: [{\n selector: 'afp-renderer-error',\n standalone: true,\n imports: [LucideAngularModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"afp-flex afp-items-center afp-justify-center afp-w-full afp-h-full\">\n <div class=\"afp-text-center\">\n @if (showIcon()) {\n <div class=\"afp-w-12 afp-h-12 afp-mx-auto afp-mb-3 afp-rounded-full afp-flex afp-items-center afp-justify-center\"\n style=\"background: color-mix(in srgb, #ef4444 10%, transparent)\">\n <i-lucide [img]=\"alertCircle\" class=\"afp-w-6 afp-h-6\" style=\"color: #f87171\" />\n </div>\n }\n <p class=\"afp-text-base afp-font-medium afp-text-fg-primary afp-mb-1\">{{ message() }}</p>\n @if (detail()) {\n <p class=\"afp-text-xs afp-text-fg-tertiary\">{{ detail() }}</p>\n }\n </div>\n </div>\n `,\n }]\n }] });\n\nexport { RendererError as R };\n//# sourceMappingURL=eternalheart-angular-file-preview-RendererError-DtNihCIX.mjs.map\n"],"names":[],"mappings":";;;;;AAKA,MAAM,aAAa,CAAC;AACpB,IAAI,WAAW,GAAG;AAClB,QAAQ,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,QAAQ,EAAE;AACvC,QAAQ,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC;AACtC,QAAQ,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC;AACnC,QAAQ,IAAI,CAAC,WAAW,GAAG,WAAW;AACtC,IAAI;AACJ,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC,CAAC;AAChL,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,oBAAoB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,aAAa,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,oBAAoB,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,EAAE,iBAAiB,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,iBAAiB,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,EAAE,iBAAiB,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE;AACnkB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,mBAAmB,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,sBAAsB,EAAE,QAAQ,EAAE,oDAAoD,EAAE,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,qBAAqB,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,CAAC,EAAE,eAAe,EAAE,EAAE,CAAC,uBAAuB,CAAC,MAAM,EAAE,CAAC,CAAC;AAC7V;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,UAAU,EAAE,CAAC;AACxH,YAAY,IAAI,EAAE,SAAS;AAC3B,YAAY,IAAI,EAAE,CAAC;AACnB,oBAAoB,QAAQ,EAAE,oBAAoB;AAClD,oBAAoB,UAAU,EAAE,IAAI;AACpC,oBAAoB,OAAO,EAAE,CAAC,mBAAmB,CAAC;AAClD,oBAAoB,eAAe,EAAE,uBAAuB,CAAC,MAAM;AACnE,oBAAoB,QAAQ,EAAE;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,CAAC;AACH,iBAAiB;AACjB,SAAS,CAAC,EAAE,CAAC;;;;"}