@acorex/components 21.0.3-next.9 → 21.1.0-next.0

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 (212) hide show
  1. package/conversation/README.md +462 -2
  2. package/fesm2022/acorex-components-accordion.mjs +4 -4
  3. package/fesm2022/acorex-components-accordion.mjs.map +1 -1
  4. package/fesm2022/acorex-components-action-sheet.mjs +2 -2
  5. package/fesm2022/acorex-components-action-sheet.mjs.map +1 -1
  6. package/fesm2022/acorex-components-alert.mjs +2 -2
  7. package/fesm2022/acorex-components-alert.mjs.map +1 -1
  8. package/fesm2022/acorex-components-aspect-ratio.mjs +2 -2
  9. package/fesm2022/acorex-components-aspect-ratio.mjs.map +1 -1
  10. package/fesm2022/acorex-components-audio-wave.mjs +2 -2
  11. package/fesm2022/acorex-components-audio-wave.mjs.map +1 -1
  12. package/fesm2022/acorex-components-avatar.mjs +2 -2
  13. package/fesm2022/acorex-components-avatar.mjs.map +1 -1
  14. package/fesm2022/acorex-components-badge.mjs +17 -12
  15. package/fesm2022/acorex-components-badge.mjs.map +1 -1
  16. package/fesm2022/acorex-components-bottom-navigation.mjs +2 -2
  17. package/fesm2022/acorex-components-bottom-navigation.mjs.map +1 -1
  18. package/fesm2022/acorex-components-breadcrumbs.mjs +2 -2
  19. package/fesm2022/acorex-components-breadcrumbs.mjs.map +1 -1
  20. package/fesm2022/acorex-components-button-group.mjs +2 -2
  21. package/fesm2022/acorex-components-button-group.mjs.map +1 -1
  22. package/fesm2022/acorex-components-button.mjs +6 -6
  23. package/fesm2022/acorex-components-button.mjs.map +1 -1
  24. package/fesm2022/acorex-components-calendar.mjs +6 -5
  25. package/fesm2022/acorex-components-calendar.mjs.map +1 -1
  26. package/fesm2022/acorex-components-check-box.mjs +2 -2
  27. package/fesm2022/acorex-components-check-box.mjs.map +1 -1
  28. package/fesm2022/acorex-components-chips.mjs +2 -2
  29. package/fesm2022/acorex-components-chips.mjs.map +1 -1
  30. package/fesm2022/acorex-components-circular-progress.mjs +2 -2
  31. package/fesm2022/acorex-components-circular-progress.mjs.map +1 -1
  32. package/fesm2022/acorex-components-color-box.mjs +2 -2
  33. package/fesm2022/acorex-components-color-box.mjs.map +1 -1
  34. package/fesm2022/acorex-components-color-palette.mjs +2 -2
  35. package/fesm2022/acorex-components-color-palette.mjs.map +1 -1
  36. package/fesm2022/acorex-components-command.mjs +2 -2
  37. package/fesm2022/acorex-components-command.mjs.map +1 -1
  38. package/fesm2022/acorex-components-comment.mjs +6 -6
  39. package/fesm2022/acorex-components-comment.mjs.map +1 -1
  40. package/fesm2022/acorex-components-conversation-composer-action-choice-dialog.component-C28hl7iD.mjs +101 -0
  41. package/fesm2022/acorex-components-conversation-composer-action-choice-dialog.component-C28hl7iD.mjs.map +1 -0
  42. package/fesm2022/acorex-components-conversation-emoji-categories-C7Gm95V0.mjs +1840 -0
  43. package/fesm2022/acorex-components-conversation-emoji-categories-C7Gm95V0.mjs.map +1 -0
  44. package/fesm2022/acorex-components-conversation-open-composer-picker-for-files-Duvap4M4.mjs +223 -0
  45. package/fesm2022/acorex-components-conversation-open-composer-picker-for-files-Duvap4M4.mjs.map +1 -0
  46. package/fesm2022/acorex-components-conversation.mjs +22272 -1218
  47. package/fesm2022/acorex-components-conversation.mjs.map +1 -1
  48. package/fesm2022/acorex-components-cron-job.mjs +14 -14
  49. package/fesm2022/acorex-components-cron-job.mjs.map +1 -1
  50. package/fesm2022/acorex-components-data-list.mjs +2 -2
  51. package/fesm2022/acorex-components-data-list.mjs.map +1 -1
  52. package/fesm2022/acorex-components-data-pager.mjs +2 -2
  53. package/fesm2022/acorex-components-data-pager.mjs.map +1 -1
  54. package/fesm2022/acorex-components-data-table.mjs +2 -2
  55. package/fesm2022/acorex-components-data-table.mjs.map +1 -1
  56. package/fesm2022/acorex-components-datetime-box.mjs +2 -2
  57. package/fesm2022/acorex-components-datetime-box.mjs.map +1 -1
  58. package/fesm2022/acorex-components-datetime-input.mjs +2 -2
  59. package/fesm2022/acorex-components-datetime-input.mjs.map +1 -1
  60. package/fesm2022/acorex-components-datetime-picker.mjs +2 -2
  61. package/fesm2022/acorex-components-datetime-picker.mjs.map +1 -1
  62. package/fesm2022/acorex-components-decorators.mjs +11 -18
  63. package/fesm2022/acorex-components-decorators.mjs.map +1 -1
  64. package/fesm2022/acorex-components-dialog.mjs +3 -4
  65. package/fesm2022/acorex-components-dialog.mjs.map +1 -1
  66. package/fesm2022/acorex-components-drawer.mjs +4 -4
  67. package/fesm2022/acorex-components-drawer.mjs.map +1 -1
  68. package/fesm2022/acorex-components-dropdown-button.mjs +2 -2
  69. package/fesm2022/acorex-components-dropdown-button.mjs.map +1 -1
  70. package/fesm2022/acorex-components-dropdown.mjs +2 -2
  71. package/fesm2022/acorex-components-dropdown.mjs.map +1 -1
  72. package/fesm2022/acorex-components-editor.mjs +2 -2
  73. package/fesm2022/acorex-components-editor.mjs.map +1 -1
  74. package/fesm2022/acorex-components-fab.mjs +2 -2
  75. package/fesm2022/acorex-components-fab.mjs.map +1 -1
  76. package/fesm2022/acorex-components-file-viewer.mjs +740 -0
  77. package/fesm2022/acorex-components-file-viewer.mjs.map +1 -0
  78. package/fesm2022/acorex-components-flow-chart.mjs +6 -6
  79. package/fesm2022/acorex-components-flow-chart.mjs.map +1 -1
  80. package/fesm2022/acorex-components-form.mjs +2 -2
  81. package/fesm2022/acorex-components-form.mjs.map +1 -1
  82. package/fesm2022/acorex-components-grid-layout-builder.mjs +2 -2
  83. package/fesm2022/acorex-components-grid-layout-builder.mjs.map +1 -1
  84. package/fesm2022/acorex-components-image-editor.mjs +387 -188
  85. package/fesm2022/acorex-components-image-editor.mjs.map +1 -1
  86. package/fesm2022/acorex-components-image.mjs +2 -2
  87. package/fesm2022/acorex-components-image.mjs.map +1 -1
  88. package/fesm2022/acorex-components-json-viewer.mjs +2 -2
  89. package/fesm2022/acorex-components-json-viewer.mjs.map +1 -1
  90. package/fesm2022/acorex-components-kanban.mjs +2 -2
  91. package/fesm2022/acorex-components-kanban.mjs.map +1 -1
  92. package/fesm2022/acorex-components-kbd.mjs +4 -6
  93. package/fesm2022/acorex-components-kbd.mjs.map +1 -1
  94. package/fesm2022/acorex-components-label.mjs +2 -2
  95. package/fesm2022/acorex-components-label.mjs.map +1 -1
  96. package/fesm2022/acorex-components-list.mjs +2 -2
  97. package/fesm2022/acorex-components-list.mjs.map +1 -1
  98. package/fesm2022/acorex-components-loading-dialog.mjs +2 -2
  99. package/fesm2022/acorex-components-loading-dialog.mjs.map +1 -1
  100. package/fesm2022/acorex-components-loading.mjs +4 -4
  101. package/fesm2022/acorex-components-loading.mjs.map +1 -1
  102. package/fesm2022/acorex-components-map.mjs +2 -2
  103. package/fesm2022/acorex-components-map.mjs.map +1 -1
  104. package/fesm2022/acorex-components-media-viewer.mjs +10 -10
  105. package/fesm2022/acorex-components-media-viewer.mjs.map +1 -1
  106. package/fesm2022/acorex-components-menu.mjs +4 -4
  107. package/fesm2022/acorex-components-menu.mjs.map +1 -1
  108. package/fesm2022/{acorex-components-modal-acorex-components-modal-lJw2DGSj.mjs → acorex-components-modal-acorex-components-modal-dF5HUEBH.mjs} +4 -4
  109. package/fesm2022/acorex-components-modal-acorex-components-modal-dF5HUEBH.mjs.map +1 -0
  110. package/fesm2022/{acorex-components-modal-modal-content.component-t9kRuhc_.mjs → acorex-components-modal-modal-content.component-BGTYje3j.mjs} +4 -4
  111. package/fesm2022/acorex-components-modal-modal-content.component-BGTYje3j.mjs.map +1 -0
  112. package/fesm2022/acorex-components-modal.mjs +1 -1
  113. package/fesm2022/acorex-components-navbar.mjs +2 -2
  114. package/fesm2022/acorex-components-navbar.mjs.map +1 -1
  115. package/fesm2022/acorex-components-notification.mjs +2 -2
  116. package/fesm2022/acorex-components-notification.mjs.map +1 -1
  117. package/fesm2022/acorex-components-number-box.mjs +2 -2
  118. package/fesm2022/acorex-components-number-box.mjs.map +1 -1
  119. package/fesm2022/acorex-components-otp.mjs +2 -2
  120. package/fesm2022/acorex-components-otp.mjs.map +1 -1
  121. package/fesm2022/acorex-components-paint.mjs +4 -4
  122. package/fesm2022/acorex-components-paint.mjs.map +1 -1
  123. package/fesm2022/acorex-components-password-box.mjs +4 -4
  124. package/fesm2022/acorex-components-password-box.mjs.map +1 -1
  125. package/fesm2022/acorex-components-pdf-reader.mjs +2 -2
  126. package/fesm2022/acorex-components-pdf-reader.mjs.map +1 -1
  127. package/fesm2022/acorex-components-phone-box.mjs +2 -2
  128. package/fesm2022/acorex-components-phone-box.mjs.map +1 -1
  129. package/fesm2022/acorex-components-picker.mjs +6 -6
  130. package/fesm2022/acorex-components-picker.mjs.map +1 -1
  131. package/fesm2022/acorex-components-popup.mjs +3 -3
  132. package/fesm2022/acorex-components-popup.mjs.map +1 -1
  133. package/fesm2022/acorex-components-progress-bar.mjs +2 -2
  134. package/fesm2022/acorex-components-progress-bar.mjs.map +1 -1
  135. package/fesm2022/acorex-components-qrcode.mjs +2 -2
  136. package/fesm2022/acorex-components-qrcode.mjs.map +1 -1
  137. package/fesm2022/acorex-components-query-builder.mjs +2 -2
  138. package/fesm2022/acorex-components-query-builder.mjs.map +1 -1
  139. package/fesm2022/acorex-components-radio.mjs +2 -2
  140. package/fesm2022/acorex-components-radio.mjs.map +1 -1
  141. package/fesm2022/acorex-components-rail-navigation.mjs +2 -2
  142. package/fesm2022/acorex-components-rail-navigation.mjs.map +1 -1
  143. package/fesm2022/acorex-components-range-slider.mjs +2 -2
  144. package/fesm2022/acorex-components-range-slider.mjs.map +1 -1
  145. package/fesm2022/acorex-components-rate-picker.mjs +2 -2
  146. package/fesm2022/acorex-components-rate-picker.mjs.map +1 -1
  147. package/fesm2022/acorex-components-rest-api-generator.mjs +10 -10
  148. package/fesm2022/acorex-components-rest-api-generator.mjs.map +1 -1
  149. package/fesm2022/acorex-components-result.mjs +2 -2
  150. package/fesm2022/acorex-components-result.mjs.map +1 -1
  151. package/fesm2022/acorex-components-routing-progress.mjs +2 -2
  152. package/fesm2022/acorex-components-routing-progress.mjs.map +1 -1
  153. package/fesm2022/acorex-components-scheduler-picker.mjs +40 -32
  154. package/fesm2022/acorex-components-scheduler-picker.mjs.map +1 -1
  155. package/fesm2022/acorex-components-scheduler.mjs +19 -22
  156. package/fesm2022/acorex-components-scheduler.mjs.map +1 -1
  157. package/fesm2022/acorex-components-search-box.mjs +4 -2
  158. package/fesm2022/acorex-components-search-box.mjs.map +1 -1
  159. package/fesm2022/acorex-components-select-box.mjs +5 -7
  160. package/fesm2022/acorex-components-select-box.mjs.map +1 -1
  161. package/fesm2022/acorex-components-selection-list-2.mjs +2 -2
  162. package/fesm2022/acorex-components-selection-list-2.mjs.map +1 -1
  163. package/fesm2022/acorex-components-selection-list.mjs +2 -2
  164. package/fesm2022/acorex-components-selection-list.mjs.map +1 -1
  165. package/fesm2022/acorex-components-side-menu.mjs +2 -2
  166. package/fesm2022/acorex-components-side-menu.mjs.map +1 -1
  167. package/fesm2022/acorex-components-skeleton.mjs +2 -2
  168. package/fesm2022/acorex-components-skeleton.mjs.map +1 -1
  169. package/fesm2022/acorex-components-sliding-item.mjs +2 -2
  170. package/fesm2022/acorex-components-sliding-item.mjs.map +1 -1
  171. package/fesm2022/acorex-components-step-wizard.mjs +2 -2
  172. package/fesm2022/acorex-components-step-wizard.mjs.map +1 -1
  173. package/fesm2022/acorex-components-switch.mjs +2 -2
  174. package/fesm2022/acorex-components-switch.mjs.map +1 -1
  175. package/fesm2022/acorex-components-tabs.mjs +2 -2
  176. package/fesm2022/acorex-components-tabs.mjs.map +1 -1
  177. package/fesm2022/acorex-components-tag-box.mjs +2 -2
  178. package/fesm2022/acorex-components-tag-box.mjs.map +1 -1
  179. package/fesm2022/acorex-components-tag.mjs +2 -2
  180. package/fesm2022/acorex-components-tag.mjs.map +1 -1
  181. package/fesm2022/acorex-components-text-area.mjs +2 -2
  182. package/fesm2022/acorex-components-text-area.mjs.map +1 -1
  183. package/fesm2022/acorex-components-text-box.mjs +2 -2
  184. package/fesm2022/acorex-components-text-box.mjs.map +1 -1
  185. package/fesm2022/acorex-components-time-line.mjs +4 -4
  186. package/fesm2022/acorex-components-time-line.mjs.map +1 -1
  187. package/fesm2022/acorex-components-toast.mjs +2 -2
  188. package/fesm2022/acorex-components-toast.mjs.map +1 -1
  189. package/fesm2022/acorex-components-toolbar.mjs +2 -2
  190. package/fesm2022/acorex-components-toolbar.mjs.map +1 -1
  191. package/fesm2022/acorex-components-tooltip.mjs +2 -2
  192. package/fesm2022/acorex-components-tooltip.mjs.map +1 -1
  193. package/fesm2022/acorex-components-tree-view.mjs +2 -2
  194. package/fesm2022/acorex-components-tree-view.mjs.map +1 -1
  195. package/fesm2022/acorex-components-uploader.mjs +6 -6
  196. package/fesm2022/acorex-components-uploader.mjs.map +1 -1
  197. package/fesm2022/acorex-components-wysiwyg.mjs +6 -6
  198. package/fesm2022/acorex-components-wysiwyg.mjs.map +1 -1
  199. package/package.json +12 -10
  200. package/types/acorex-components-badge.d.ts +2 -4
  201. package/types/acorex-components-conversation.d.ts +6574 -479
  202. package/types/acorex-components-file-viewer.d.ts +180 -0
  203. package/types/acorex-components-image-editor.d.ts +74 -47
  204. package/types/acorex-components-kbd.d.ts +2 -2
  205. package/types/acorex-components-scheduler-picker.d.ts +2 -0
  206. package/types/acorex-components-scheduler.d.ts +1 -3
  207. package/conversation2/README.md +0 -463
  208. package/fesm2022/acorex-components-conversation2.mjs +0 -22194
  209. package/fesm2022/acorex-components-conversation2.mjs.map +0 -1
  210. package/fesm2022/acorex-components-modal-acorex-components-modal-lJw2DGSj.mjs.map +0 -1
  211. package/fesm2022/acorex-components-modal-modal-content.component-t9kRuhc_.mjs.map +0 -1
  212. package/types/acorex-components-conversation2.d.ts +0 -6365
@@ -0,0 +1,740 @@
1
+ import * as i0 from '@angular/core';
2
+ import { signal, Injectable, APP_INITIALIZER, input, inject, computed, ChangeDetectionStrategy, Component, effect, ElementRef, viewChild, afterNextRender, ViewEncapsulation } from '@angular/core';
3
+ import { defineFileType, AX_IMAGE_FILE_TYPE, AX_VIDEO_FILE_TYPE, AX_AUDIO_FILE_TYPE, AX_DOCUMENT_FILE_TYPE, AX_FILE_FILE_TYPE, AXFileTypeRegistryService, AXFileTypeRendererOutletComponent } from '@acorex/core/file';
4
+ import { AXCarouselDirective } from '@acorex/cdk/carousel';
5
+ import { AXBadgeComponent } from '@acorex/components/badge';
6
+ import { AXButtonComponent } from '@acorex/components/button';
7
+ import { AXDecoratorIconComponent } from '@acorex/components/decorators';
8
+ import { AXLoadingComponent } from '@acorex/components/loading';
9
+ import { AXTooltipDirective } from '@acorex/components/tooltip';
10
+ import { AXFullScreenService } from '@acorex/core/full-screen';
11
+ import { AXZIndexService } from '@acorex/core/z-index';
12
+ import { AXPdfReaderComponent } from '@acorex/components/pdf-reader';
13
+ import { DomSanitizer } from '@angular/platform-browser';
14
+
15
+ /** Carousel state shared between container, slides and thumbnails. Provided per-container. */
16
+ class AXFileViewerService {
17
+ constructor() {
18
+ this.items = signal([], ...(ngDevMode ? [{ debugName: "items" }] : /* istanbul ignore next */ []));
19
+ this.selectedIndex = signal(0, ...(ngDevMode ? [{ debugName: "selectedIndex" }] : /* istanbul ignore next */ []));
20
+ this.urlCache = new Map();
21
+ }
22
+ /** Resolve a potentially lazy URL — caches the result. */
23
+ async resolveUrl(item, key) {
24
+ const raw = item[key];
25
+ if (!raw) {
26
+ return undefined;
27
+ }
28
+ const cacheKey = `${item.id}:${key}`;
29
+ const cached = this.urlCache.get(cacheKey);
30
+ if (cached) {
31
+ return cached;
32
+ }
33
+ const resolved = typeof raw === 'function' ? await raw() : raw;
34
+ this.urlCache.set(cacheKey, resolved);
35
+ return resolved;
36
+ }
37
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXFileViewerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
38
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXFileViewerService }); }
39
+ }
40
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXFileViewerService, decorators: [{
41
+ type: Injectable
42
+ }] });
43
+
44
+ function createFileViewerFileTypes() {
45
+ return [
46
+ defineFileType({
47
+ ...AX_IMAGE_FILE_TYPE,
48
+ name: 'image',
49
+ component: () => Promise.resolve().then(function () { return imageViewer_component; }).then((m) => m.AXFileViewerImageComponent),
50
+ }),
51
+ defineFileType({
52
+ ...AX_VIDEO_FILE_TYPE,
53
+ name: 'video',
54
+ component: () => Promise.resolve().then(function () { return videoViewer_component; }).then((m) => m.AXFileViewerVideoComponent),
55
+ }),
56
+ defineFileType({
57
+ ...AX_AUDIO_FILE_TYPE,
58
+ name: 'audio',
59
+ component: () => Promise.resolve().then(function () { return audioViewer_component; }).then((m) => m.AXFileViewerAudioComponent),
60
+ }),
61
+ defineFileType({
62
+ ...AX_DOCUMENT_FILE_TYPE,
63
+ name: 'document',
64
+ component: () => Promise.resolve().then(function () { return pdfViewer_component; }).then((m) => m.AXFileViewerPdfComponent),
65
+ extensions: (AX_DOCUMENT_FILE_TYPE.extensions ?? []).map((extension) => extension.name.toLowerCase() === 'pdf'
66
+ ? {
67
+ ...extension,
68
+ component: () => Promise.resolve().then(function () { return pdfViewer_component; }).then((m) => m.AXFileViewerPdfComponent),
69
+ }
70
+ : extension),
71
+ }),
72
+ defineFileType({
73
+ ...AX_FILE_FILE_TYPE,
74
+ name: 'file',
75
+ component: () => Promise.resolve().then(function () { return fileFallbackViewer_component; }).then((m) => m.AXFileViewerFileFallbackComponent),
76
+ }),
77
+ ];
78
+ }
79
+
80
+ /** Registers file-viewer components on standard file-type catalog entries. */
81
+ function provideFileViewer() {
82
+ return [
83
+ {
84
+ provide: APP_INITIALIZER,
85
+ useFactory: (registry) => () => registry.registerTypes(createFileViewerFileTypes()),
86
+ deps: [AXFileTypeRegistryService],
87
+ multi: true,
88
+ },
89
+ ];
90
+ }
91
+
92
+ const MIME_PREFIX_MAP = {
93
+ 'image/': 'image',
94
+ 'video/': 'video',
95
+ 'audio/': 'audio',
96
+ 'application/pdf': 'document',
97
+ };
98
+ /** Infers a file-type catalog name from the item. */
99
+ function resolveFileViewerFileType(item) {
100
+ if (item.fileType) {
101
+ return item.fileType;
102
+ }
103
+ if (item.mimeType) {
104
+ const mime = item.mimeType.toLowerCase();
105
+ for (const [prefix, name] of Object.entries(MIME_PREFIX_MAP)) {
106
+ if (mime.startsWith(prefix) || mime === prefix) {
107
+ return name;
108
+ }
109
+ }
110
+ }
111
+ if (item.extension) {
112
+ const ext = item.extension.replace(/^\./, '').toLowerCase();
113
+ if (['jpg', 'jpeg', 'png', 'gif', 'webp', 'svg'].includes(ext))
114
+ return 'image';
115
+ if (['mp4', 'webm', 'ogg'].includes(ext))
116
+ return 'video';
117
+ if (['mp3', 'wav', 'm4a'].includes(ext))
118
+ return 'audio';
119
+ if (ext === 'pdf')
120
+ return 'document';
121
+ }
122
+ return 'file';
123
+ }
124
+ /** Builds an extension hint from item metadata. */
125
+ function buildFileViewerExtensionHint(item) {
126
+ if (!item.mimeType && !item.extension) {
127
+ return undefined;
128
+ }
129
+ return {
130
+ mimeType: item.mimeType,
131
+ extensionName: item.extension,
132
+ };
133
+ }
134
+
135
+ class AXFileViewerSlideComponent {
136
+ constructor() {
137
+ this.item = input.required(...(ngDevMode ? [{ debugName: "item" }] : /* istanbul ignore next */ []));
138
+ this.index = input.required(...(ngDevMode ? [{ debugName: "index" }] : /* istanbul ignore next */ []));
139
+ this.service = inject(AXFileViewerService);
140
+ this.fileTypeName = computed(() => resolveFileViewerFileType(this.item()), ...(ngDevMode ? [{ debugName: "fileTypeName" }] : /* istanbul ignore next */ []));
141
+ this.extensionHint = computed(() => buildFileViewerExtensionHint(this.item()), ...(ngDevMode ? [{ debugName: "extensionHint" }] : /* istanbul ignore next */ []));
142
+ this.viewPayload = computed(() => ({
143
+ item: this.item(),
144
+ index: this.index(),
145
+ active: this.service.selectedIndex() === this.index(),
146
+ }), ...(ngDevMode ? [{ debugName: "viewPayload" }] : /* istanbul ignore next */ []));
147
+ }
148
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXFileViewerSlideComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
149
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.9", type: AXFileViewerSlideComponent, isStandalone: true, selector: "ax-file-viewer-slide", inputs: { item: { classPropertyName: "item", publicName: "item", isSignal: true, isRequired: true, transformFunction: null }, index: { classPropertyName: "index", publicName: "index", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: `
150
+ <ax-file-type-renderer [fileType]="fileTypeName()" [payload]="viewPayload()" [extensionHint]="extensionHint()" />
151
+ `, isInline: true, styles: [":host{display:flex;width:100%;height:100%;min-width:0;min-height:0;align-items:stretch;justify-content:stretch;-webkit-user-select:none;user-select:none;box-sizing:border-box}\n"], dependencies: [{ kind: "component", type: AXFileTypeRendererOutletComponent, selector: "ax-file-type-renderer", inputs: ["fileType", "payload", "extensionHint", "inputs"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
152
+ }
153
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXFileViewerSlideComponent, decorators: [{
154
+ type: Component,
155
+ args: [{ selector: 'ax-file-viewer-slide', changeDetection: ChangeDetectionStrategy.OnPush, imports: [AXFileTypeRendererOutletComponent], template: `
156
+ <ax-file-type-renderer [fileType]="fileTypeName()" [payload]="viewPayload()" [extensionHint]="extensionHint()" />
157
+ `, styles: [":host{display:flex;width:100%;height:100%;min-width:0;min-height:0;align-items:stretch;justify-content:stretch;-webkit-user-select:none;user-select:none;box-sizing:border-box}\n"] }]
158
+ }], propDecorators: { item: [{ type: i0.Input, args: [{ isSignal: true, alias: "item", required: true }] }], index: [{ type: i0.Input, args: [{ isSignal: true, alias: "index", required: true }] }] } });
159
+
160
+ const TYPE_ICON_MAP$1 = {
161
+ image: 'fa-light fa-image',
162
+ video: 'fa-light fa-video',
163
+ audio: 'fa-light fa-music',
164
+ document: 'fa-light fa-file-pdf',
165
+ file: 'fa-light fa-file-zipper',
166
+ };
167
+ class AXFileViewerThumbPreviewComponent {
168
+ constructor() {
169
+ this.item = input.required(...(ngDevMode ? [{ debugName: "item" }] : /* istanbul ignore next */ []));
170
+ this.service = inject(AXFileViewerService);
171
+ this.src = signal(null, ...(ngDevMode ? [{ debugName: "src" }] : /* istanbul ignore next */ []));
172
+ this.icon = computed(() => {
173
+ const type = resolveFileViewerFileType(this.item());
174
+ return TYPE_ICON_MAP$1[type] ?? TYPE_ICON_MAP$1['file'];
175
+ }, ...(ngDevMode ? [{ debugName: "icon" }] : /* istanbul ignore next */ []));
176
+ this.#resolve = effect((onCleanup) => {
177
+ const item = this.item();
178
+ this.src.set(null);
179
+ let cancelled = false;
180
+ onCleanup(() => {
181
+ cancelled = true;
182
+ });
183
+ void this.resolvePreview(item).then((url) => {
184
+ if (!cancelled) {
185
+ this.src.set(url ?? null);
186
+ }
187
+ });
188
+ }, ...(ngDevMode ? [{ debugName: "#resolve" }] : /* istanbul ignore next */ []));
189
+ }
190
+ #resolve;
191
+ async resolvePreview(item) {
192
+ const thumbnail = await this.service.resolveUrl(item, 'thumbnailUrl');
193
+ if (thumbnail) {
194
+ return thumbnail;
195
+ }
196
+ // Images can use the main asset URL when no dedicated thumbnail is provided.
197
+ if (resolveFileViewerFileType(item) === 'image') {
198
+ return this.service.resolveUrl(item, 'url');
199
+ }
200
+ return undefined;
201
+ }
202
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXFileViewerThumbPreviewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
203
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXFileViewerThumbPreviewComponent, isStandalone: true, selector: "ax-file-viewer-thumb-preview", inputs: { item: { classPropertyName: "item", publicName: "item", isSignal: true, isRequired: true, transformFunction: null } }, host: { classAttribute: "ax-file-viewer__thumb-preview" }, ngImport: i0, template: `
204
+ @if (src()) {
205
+ <img [src]="src()!" [alt]="item().name ?? ''" loading="lazy" />
206
+ } @else {
207
+ <i [class]="icon()"></i>
208
+ }
209
+ `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
210
+ }
211
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXFileViewerThumbPreviewComponent, decorators: [{
212
+ type: Component,
213
+ args: [{
214
+ selector: 'ax-file-viewer-thumb-preview',
215
+ changeDetection: ChangeDetectionStrategy.OnPush,
216
+ host: { class: 'ax-file-viewer__thumb-preview' },
217
+ template: `
218
+ @if (src()) {
219
+ <img [src]="src()!" [alt]="item().name ?? ''" loading="lazy" />
220
+ } @else {
221
+ <i [class]="icon()"></i>
222
+ }
223
+ `,
224
+ }]
225
+ }], propDecorators: { item: [{ type: i0.Input, args: [{ isSignal: true, alias: "item", required: true }] }] } });
226
+
227
+ const TYPE_LABEL_MAP = {
228
+ image: 'IMAGE',
229
+ video: 'VIDEO',
230
+ audio: 'AUDIO',
231
+ document: 'PDF',
232
+ file: 'FILE',
233
+ };
234
+ const TYPE_COLOR_MAP = {
235
+ image: 'success',
236
+ video: 'primary',
237
+ audio: 'danger',
238
+ document: 'warning',
239
+ file: 'secondary',
240
+ };
241
+ class AXFileViewerContainerComponent {
242
+ constructor() {
243
+ this.items = input([], ...(ngDevMode ? [{ debugName: "items" }] : /* istanbul ignore next */ []));
244
+ this.thumbnail = input(true, ...(ngDevMode ? [{ debugName: "thumbnail" }] : /* istanbul ignore next */ []));
245
+ this.pagination = input(true, ...(ngDevMode ? [{ debugName: "pagination" }] : /* istanbul ignore next */ []));
246
+ this.download = input(true, ...(ngDevMode ? [{ debugName: "download" }] : /* istanbul ignore next */ []));
247
+ this.fullscreen = input(true, ...(ngDevMode ? [{ debugName: "fullscreen" }] : /* istanbul ignore next */ []));
248
+ /** External loading flag — show overlay while parent data is being fetched. */
249
+ this.loading = input(false, ...(ngDevMode ? [{ debugName: "loading" }] : /* istanbul ignore next */ []));
250
+ this.service = inject(AXFileViewerService);
251
+ this.host = inject((ElementRef));
252
+ this.zIndexService = inject(AXZIndexService);
253
+ this.fullScreenService = inject(AXFullScreenService);
254
+ this.mainCarouselRef = viewChild('mainCarousel', ...(ngDevMode ? [{ debugName: "mainCarouselRef" }] : /* istanbul ignore next */ []));
255
+ this.thumbCarouselRef = viewChild('thumbCarousel', ...(ngDevMode ? [{ debugName: "thumbCarouselRef" }] : /* istanbul ignore next */ []));
256
+ this.fullscreenActive = signal(false, ...(ngDevMode ? [{ debugName: "fullscreenActive" }] : /* istanbul ignore next */ []));
257
+ this.zToken = null;
258
+ this.initToken = 0;
259
+ /** True while carousels are being (re)initialized. */
260
+ this.initializing = signal(true, ...(ngDevMode ? [{ debugName: "initializing" }] : /* istanbul ignore next */ []));
261
+ this.isBusy = computed(() => this.loading() || this.initializing(), ...(ngDevMode ? [{ debugName: "isBusy" }] : /* istanbul ignore next */ []));
262
+ this.isFirstSlide = computed(() => this.service.selectedIndex() <= 0, ...(ngDevMode ? [{ debugName: "isFirstSlide" }] : /* istanbul ignore next */ []));
263
+ this.isLastSlide = computed(() => this.service.selectedIndex() >= Math.max(this.service.items().length - 1, 0), ...(ngDevMode ? [{ debugName: "isLastSlide" }] : /* istanbul ignore next */ []));
264
+ this.currentItem = computed(() => this.service.items()[this.service.selectedIndex()], ...(ngDevMode ? [{ debugName: "currentItem" }] : /* istanbul ignore next */ []));
265
+ this.currentFileType = computed(() => {
266
+ const item = this.currentItem();
267
+ return item ? resolveFileViewerFileType(item) : 'file';
268
+ }, ...(ngDevMode ? [{ debugName: "currentFileType" }] : /* istanbul ignore next */ []));
269
+ this.currentTypeLabel = computed(() => TYPE_LABEL_MAP[this.currentFileType()] ?? 'FILE', ...(ngDevMode ? [{ debugName: "currentTypeLabel" }] : /* istanbul ignore next */ []));
270
+ this.currentTypeColor = computed(() => TYPE_COLOR_MAP[this.currentFileType()] ?? 'secondary', ...(ngDevMode ? [{ debugName: "currentTypeColor" }] : /* istanbul ignore next */ []));
271
+ this.slideCounter = computed(() => {
272
+ const total = this.service.items().length;
273
+ if (!total)
274
+ return '0 / 0';
275
+ return `${this.service.selectedIndex() + 1} / ${total}`;
276
+ }, ...(ngDevMode ? [{ debugName: "slideCounter" }] : /* istanbul ignore next */ []));
277
+ this.resolveFileType = resolveFileViewerFileType;
278
+ this.mainCarouselOptions = {
279
+ slidesPerView: 1,
280
+ observer: true,
281
+ observeParents: true,
282
+ updateOnWindowResize: true,
283
+ resizeObserver: true,
284
+ keyboard: true,
285
+ watchSlidesProgress: true,
286
+ speed: 300,
287
+ };
288
+ this.thumbnailCarouselOptions = {
289
+ spaceBetween: 10,
290
+ slidesPerView: 'auto',
291
+ watchSlidesProgress: true,
292
+ observer: true,
293
+ observeParents: true,
294
+ updateOnWindowResize: true,
295
+ resizeObserver: true,
296
+ };
297
+ this.#syncItems = effect(() => {
298
+ const items = this.items();
299
+ this.service.items.set(items);
300
+ if (items.length > 0) {
301
+ this.initializing.set(true);
302
+ setTimeout(() => void this.initCarousels());
303
+ }
304
+ else if (!this.loading()) {
305
+ this.initializing.set(false);
306
+ }
307
+ }, ...(ngDevMode ? [{ debugName: "#syncItems" }] : /* istanbul ignore next */ []));
308
+ this.#bindSlideChange = effect(() => {
309
+ const carousel = this.mainCarouselRef()?.carousel();
310
+ if (carousel) {
311
+ carousel.on('activeIndexChange', this.onSlideChange);
312
+ }
313
+ }, ...(ngDevMode ? [{ debugName: "#bindSlideChange" }] : /* istanbul ignore next */ []));
314
+ this.#init = afterNextRender(() => {
315
+ void this.initCarousels();
316
+ });
317
+ this.#fullScreenClass = effect(() => {
318
+ const active = this.fullscreenActive();
319
+ const el = this.host.nativeElement;
320
+ if (active) {
321
+ el.classList.add('ax-file-viewer--fullscreen');
322
+ this.acquireFullscreenZIndex(el);
323
+ }
324
+ else {
325
+ el.classList.remove('ax-file-viewer--fullscreen');
326
+ this.releaseFullscreenZIndex(el);
327
+ }
328
+ }, ...(ngDevMode ? [{ debugName: "#fullScreenClass" }] : /* istanbul ignore next */ []));
329
+ this.onSlideChange = (swiper) => {
330
+ this.service.selectedIndex.set(swiper.activeIndex);
331
+ };
332
+ }
333
+ resolveTypeLabel(item) {
334
+ return TYPE_LABEL_MAP[resolveFileViewerFileType(item)] ?? 'FILE';
335
+ }
336
+ formatSize(size) {
337
+ if (size == null || Number.isNaN(size))
338
+ return '';
339
+ if (size < 1024)
340
+ return `${size} B`;
341
+ if (size < 1024 * 1024)
342
+ return `${(size / 1024).toFixed(1)} KB`;
343
+ return `${(size / (1024 * 1024)).toFixed(1)} MB`;
344
+ }
345
+ #syncItems;
346
+ #bindSlideChange;
347
+ #init;
348
+ #fullScreenClass;
349
+ acquireFullscreenZIndex(el) {
350
+ if (this.zToken) {
351
+ this.zToken = this.zIndexService.bringToFront(this.zToken);
352
+ }
353
+ else {
354
+ this.zToken = this.zIndexService.acquire();
355
+ }
356
+ el.style.zIndex = String(this.zToken.zIndex);
357
+ }
358
+ releaseFullscreenZIndex(el) {
359
+ if (!this.zToken)
360
+ return;
361
+ this.zIndexService.release(this.zToken);
362
+ this.zToken = null;
363
+ el.style.zIndex = '';
364
+ }
365
+ async initCarousels() {
366
+ const token = ++this.initToken;
367
+ const mainRef = this.mainCarouselRef();
368
+ if (!mainRef || !this.service.items().length) {
369
+ if (!this.loading()) {
370
+ this.initializing.set(false);
371
+ }
372
+ return;
373
+ }
374
+ this.initializing.set(true);
375
+ try {
376
+ const thumbRef = this.thumbnail() ? this.thumbCarouselRef() : undefined;
377
+ if (thumbRef?.carousel()) {
378
+ thumbRef.carousel().destroy(true, true);
379
+ }
380
+ if (mainRef.carousel()) {
381
+ mainRef.carousel().destroy(true, true);
382
+ }
383
+ if (thumbRef) {
384
+ await thumbRef.init(this.thumbnailCarouselOptions);
385
+ await mainRef.init({
386
+ ...this.mainCarouselOptions,
387
+ thumbs: { swiper: thumbRef.carousel() },
388
+ });
389
+ }
390
+ else {
391
+ await mainRef.init(this.mainCarouselOptions);
392
+ }
393
+ if (token !== this.initToken)
394
+ return;
395
+ mainRef.carousel()?.slideTo(this.service.selectedIndex(), 0);
396
+ }
397
+ finally {
398
+ if (token === this.initToken) {
399
+ this.initializing.set(false);
400
+ }
401
+ }
402
+ }
403
+ next() {
404
+ if (this.isLastSlide())
405
+ return;
406
+ if (this.thumbnail()) {
407
+ this.thumbCarouselRef()?.carousel()?.slideNext();
408
+ }
409
+ this.mainCarouselRef()?.carousel()?.slideNext();
410
+ }
411
+ prev() {
412
+ if (this.isFirstSlide())
413
+ return;
414
+ if (this.thumbnail()) {
415
+ this.thumbCarouselRef()?.carousel()?.slidePrev();
416
+ }
417
+ this.mainCarouselRef()?.carousel()?.slidePrev();
418
+ }
419
+ goToIndex(index, speed = 300) {
420
+ this.service.selectedIndex.set(index);
421
+ this.mainCarouselRef()?.carousel()?.slideTo(index, speed);
422
+ if (this.thumbnail()) {
423
+ this.thumbCarouselRef()?.carousel()?.slideTo(index, speed);
424
+ }
425
+ }
426
+ toggleFullscreen() {
427
+ const host = this.host.nativeElement;
428
+ const next = !this.fullscreenActive();
429
+ this.fullscreenActive.set(next);
430
+ if (next) {
431
+ this.fullScreenService.enter(host);
432
+ }
433
+ else {
434
+ this.fullScreenService.exit(host);
435
+ }
436
+ }
437
+ async downloadCurrent() {
438
+ const item = this.currentItem();
439
+ if (!item)
440
+ return;
441
+ const url = await this.service.resolveUrl(item, 'url');
442
+ if (!url)
443
+ return;
444
+ const anchor = document.createElement('a');
445
+ anchor.href = url;
446
+ anchor.download = item.name ?? 'download';
447
+ anchor.target = '_blank';
448
+ anchor.rel = 'noopener';
449
+ anchor.click();
450
+ }
451
+ ngOnDestroy() {
452
+ this.mainCarouselRef()?.carousel()?.off('activeIndexChange', this.onSlideChange);
453
+ if (this.fullscreenActive()) {
454
+ this.fullScreenService.exit(this.host.nativeElement);
455
+ this.fullscreenActive.set(false);
456
+ }
457
+ this.releaseFullscreenZIndex(this.host.nativeElement);
458
+ }
459
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXFileViewerContainerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
460
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXFileViewerContainerComponent, isStandalone: true, selector: "ax-file-viewer-container", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: false, transformFunction: null }, thumbnail: { classPropertyName: "thumbnail", publicName: "thumbnail", isSignal: true, isRequired: false, transformFunction: null }, pagination: { classPropertyName: "pagination", publicName: "pagination", isSignal: true, isRequired: false, transformFunction: null }, download: { classPropertyName: "download", publicName: "download", isSignal: true, isRequired: false, transformFunction: null }, fullscreen: { classPropertyName: "fullscreen", publicName: "fullscreen", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null } }, providers: [AXFileViewerService], viewQueries: [{ propertyName: "mainCarouselRef", first: true, predicate: ["mainCarousel"], descendants: true, isSignal: true }, { propertyName: "thumbCarouselRef", first: true, predicate: ["thumbCarousel"], descendants: true, isSignal: true }], ngImport: i0, template: "@if (isBusy()) {\n <div class=\"ax-file-viewer__loading\" aria-busy=\"true\" aria-live=\"polite\">\n <ax-loading></ax-loading>\n </div>\n}\n\n@if (currentItem(); as item) {\n <header class=\"ax-file-viewer__header\">\n <div class=\"ax-file-viewer__meta\">\n <div class=\"ax-file-viewer__title-row\">\n <span class=\"ax-file-viewer__name\">{{ item.name || 'Untitled' }}</span>\n </div>\n <div class=\"ax-file-viewer__submeta\">\n @if (formatSize(item.size); as sizeLabel) {\n <span>{{ sizeLabel }}</span>\n <span class=\"ax-file-viewer__dot\">\u00B7</span>\n }\n <ax-badge\n class=\"ax-file-viewer__type-badge ax-pill ax-sm\"\n look=\"outline\"\n [color]=\"currentTypeColor()\"\n [text]=\"currentTypeLabel()\"\n />\n </div>\n </div>\n\n <div class=\"ax-file-viewer__header-slot\">\n <ng-content select=\"ax-header\"></ng-content>\n </div>\n\n @if (download() || fullscreen()) {\n <div class=\"ax-file-viewer__header-actions\">\n @if (download()) {\n <ax-button\n look=\"outline\"\n color=\"default\"\n [iconOnly]=\"true\"\n [axTooltip]=\"'Download'\"\n (onClick)=\"downloadCurrent()\"\n >\n <ax-icon icon=\"fa-light fa-download\"></ax-icon>\n </ax-button>\n }\n\n @if (fullscreen()) {\n <ax-button\n look=\"outline\"\n color=\"default\"\n [iconOnly]=\"true\"\n [axTooltip]=\"'Fullscreen'\"\n (onClick)=\"toggleFullscreen()\"\n >\n <ax-icon\n [icon]=\"fullscreenActive() ? 'fa-light fa-compress' : 'fa-light fa-expand'\"\n ></ax-icon>\n </ax-button>\n }\n </div>\n }\n </header>\n}\n\n<div\n class=\"ax-file-viewer__stage\"\n [class.ax-file-viewer__stage--nav]=\"service.items().length > 1\"\n [class.ax-file-viewer__stage--hidden]=\"isBusy()\"\n>\n @if (service.items().length > 1) {\n <ax-button\n class=\"ax-file-viewer__nav ax-file-viewer__nav--prev\"\n look=\"solid\"\n color=\"default\"\n [iconOnly]=\"true\"\n [disabled]=\"isFirstSlide()\"\n (onClick)=\"prev()\"\n >\n <ax-icon icon=\"fa-light fa-chevron-left\"></ax-icon>\n </ax-button>\n }\n\n <div class=\"ax-file-viewer__canvas\">\n <div #mainCarousel=\"axCarousel\" axCarousel class=\"ax-carousel\">\n <div class=\"ax-carousel-wrapper\">\n @for (file of service.items(); track file.id) {\n <div class=\"ax-carousel-slide\">\n <ax-file-viewer-slide [item]=\"file\" [index]=\"$index\" />\n </div>\n }\n </div>\n </div>\n\n @if (service.items().length > 0) {\n <span class=\"ax-file-viewer__overlay-counter\">{{ slideCounter() }}</span>\n }\n </div>\n\n @if (service.items().length > 1) {\n <ax-button\n class=\"ax-file-viewer__nav ax-file-viewer__nav--next\"\n look=\"solid\"\n color=\"default\"\n [iconOnly]=\"true\"\n [disabled]=\"isLastSlide()\"\n (onClick)=\"next()\"\n >\n <ax-icon icon=\"fa-light fa-chevron-right\"></ax-icon>\n </ax-button>\n }\n</div>\n\n@if (thumbnail() && service.items().length > 1) {\n <footer class=\"ax-file-viewer__thumbs\" [class.ax-file-viewer__thumbs--hidden]=\"isBusy()\">\n <div class=\"ax-file-viewer__thumbs-track\">\n <div #thumbCarousel=\"axCarousel\" axCarousel class=\"ax-carousel\">\n <div class=\"ax-carousel-wrapper\">\n @for (file of service.items(); track file.id) {\n <div\n class=\"ax-carousel-slide ax-file-viewer__thumb\"\n [attr.data-type]=\"resolveFileType(file)\"\n [class.ax-file-viewer__thumb--active]=\"service.selectedIndex() === $index\"\n (click)=\"goToIndex($index)\"\n >\n <ax-file-viewer-thumb-preview [item]=\"file\" />\n <div class=\"ax-file-viewer__thumb-footer\">\n <span class=\"ax-file-viewer__thumb-name\">{{ file.name || resolveTypeLabel(file) }}</span>\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n </footer>\n}\n", styles: ["@layer properties;:root{--swiper-theme-color: #007aff}:host{position:relative;display:block;margin-left:auto;margin-right:auto;z-index:1}.swiper{margin-left:auto;margin-right:auto;position:relative;overflow:hidden;list-style:none;padding:0;z-index:1;display:block}.swiper-vertical>.swiper-wrapper{flex-direction:column}.swiper-wrapper{position:relative;width:100%;height:100%;z-index:1;display:flex;transition-property:transform;transition-timing-function:var(--swiper-wrapper-transition-timing-function, initial);box-sizing:content-box}.swiper-android .swiper-slide,.swiper-ios .swiper-slide,.swiper-wrapper{transform:translateZ(0)}.swiper-horizontal{touch-action:pan-y}.swiper-vertical{touch-action:pan-x}.swiper-slide{flex-shrink:0;width:100%;height:100%;position:relative;transition-property:transform;display:block}.swiper-slide-invisible-blank{visibility:hidden}.swiper-autoheight,.swiper-autoheight .swiper-slide{height:auto}.swiper-autoheight .swiper-wrapper{align-items:flex-start;transition-property:transform,height}.swiper-backface-hidden .swiper-slide{transform:translateZ(0);backface-visibility:hidden}.swiper-3d.swiper-css-mode .swiper-wrapper{perspective:1200px}.swiper-3d .swiper-wrapper{transform-style:preserve-3d}.swiper-3d{perspective:1200px}.swiper-3d .swiper-slide,.swiper-3d .swiper-cube-shadow{transform-style:preserve-3d}.swiper-css-mode>.swiper-wrapper{overflow:auto;scrollbar-width:none;-ms-overflow-style:none}.swiper-css-mode>.swiper-wrapper::-webkit-scrollbar{display:none}.swiper-css-mode>.swiper-wrapper>.swiper-slide{scroll-snap-align:start start}.swiper-css-mode.swiper-horizontal>.swiper-wrapper{scroll-snap-type:x mandatory}.swiper-css-mode.swiper-vertical>.swiper-wrapper{scroll-snap-type:y mandatory}.swiper-css-mode.swiper-free-mode>.swiper-wrapper{scroll-snap-type:none}.swiper-css-mode.swiper-free-mode>.swiper-wrapper>.swiper-slide{scroll-snap-align:none}.swiper-css-mode.swiper-centered>.swiper-wrapper:before{content:\"\";flex-shrink:0;order:9999}.swiper-css-mode.swiper-centered>.swiper-wrapper>.swiper-slide{scroll-snap-align:center center;scroll-snap-stop:always}.swiper-css-mode.swiper-centered.swiper-horizontal>.swiper-wrapper>.swiper-slide:first-child{margin-inline-start:var(--swiper-centered-offset-before)}.swiper-css-mode.swiper-centered.swiper-horizontal>.swiper-wrapper:before{height:100%;min-height:1px;width:var(--swiper-centered-offset-after)}.swiper-css-mode.swiper-centered.swiper-vertical>.swiper-wrapper>.swiper-slide:first-child{margin-block-start:var(--swiper-centered-offset-before)}.swiper-css-mode.swiper-centered.swiper-vertical>.swiper-wrapper:before{width:100%;min-width:1px;height:var(--swiper-centered-offset-after)}.swiper-3d .swiper-slide-shadow,.swiper-3d .swiper-slide-shadow-left,.swiper-3d .swiper-slide-shadow-right,.swiper-3d .swiper-slide-shadow-top,.swiper-3d .swiper-slide-shadow-bottom{position:absolute;left:0;top:0;width:100%;height:100%;pointer-events:none;z-index:10}.swiper-3d .swiper-slide-shadow{background:#00000026}.swiper-3d .swiper-slide-shadow-left{background-image:linear-gradient(to left,#00000080,#0000)}.swiper-3d .swiper-slide-shadow-right{background-image:linear-gradient(to right,#00000080,#0000)}.swiper-3d .swiper-slide-shadow-top{background-image:linear-gradient(to top,#00000080,#0000)}.swiper-3d .swiper-slide-shadow-bottom{background-image:linear-gradient(to bottom,#00000080,#0000)}.swiper-lazy-preloader{width:42px;height:42px;position:absolute;left:50%;top:50%;margin-left:-21px;margin-top:-21px;z-index:10;transform-origin:50%;box-sizing:border-box;border:4px solid var(--swiper-preloader-color, var(--swiper-theme-color));border-radius:50%;border-top-color:transparent}:is(.swiper:not(.swiper-watch-progress),.swiper-watch-progress .swiper-slide-visible) .swiper-lazy-preloader{animation:swiper-preloader-spin 1s infinite linear}.swiper-lazy-preloader-white{--swiper-preloader-color: #fff}.swiper-lazy-preloader-black{--swiper-preloader-color: #000}@keyframes swiper-preloader-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.swiper-virtual .swiper-slide{-webkit-backface-visibility:hidden;transform:translateZ(0)}.swiper-virtual.swiper-css-mode .swiper-wrapper:after{content:\"\";position:absolute;left:0;top:0;pointer-events:none}.swiper-virtual.swiper-css-mode.swiper-horizontal .swiper-wrapper:after{height:1px;width:var(--swiper-virtual-size)}.swiper-virtual.swiper-css-mode.swiper-vertical .swiper-wrapper:after{width:1px;height:var(--swiper-virtual-size)}:root{--swiper-navigation-size: 44px}.swiper-button-prev,.swiper-button-next{position:absolute;width:var(--swiper-navigation-size);height:var(--swiper-navigation-size);z-index:10;cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--swiper-navigation-color, var(--swiper-theme-color))}:is(.swiper-button-prev,.swiper-button-next).swiper-button-disabled{opacity:.35;cursor:auto;pointer-events:none}:is(.swiper-button-prev,.swiper-button-next).swiper-button-hidden{opacity:0;cursor:auto;pointer-events:none}.swiper-navigation-disabled :is(.swiper-button-prev,.swiper-button-next){display:none!important}:is(.swiper-button-prev,.swiper-button-next) svg{width:100%;height:100%;object-fit:contain;transform-origin:center;fill:currentColor;pointer-events:none}.swiper-button-lock{display:none}.swiper-button-prev,.swiper-button-next{top:var(--swiper-navigation-top-offset, 50%);margin-top:calc(0px - (var(--swiper-navigation-size) / 2))}.swiper-button-prev{left:var(--swiper-navigation-sides-offset, 4px);right:auto}.swiper-button-prev .swiper-navigation-icon{transform:rotate(180deg)}.swiper-button-next{right:var(--swiper-navigation-sides-offset, 4px);left:auto}.swiper-horizontal .swiper-button-prev,.swiper-horizontal .swiper-button-next,.swiper-horizontal~.swiper-button-prev,.swiper-horizontal~.swiper-button-next{top:var(--swiper-navigation-top-offset, 50%);margin-top:calc(0px - (var(--swiper-navigation-size) / 2));margin-left:0}.swiper-horizontal .swiper-button-prev,.swiper-horizontal~.swiper-button-prev,.swiper-horizontal.swiper-rtl .swiper-button-next,.swiper-horizontal.swiper-rtl~.swiper-button-next{left:var(--swiper-navigation-sides-offset, 4px);right:auto}.swiper-horizontal .swiper-button-next,.swiper-horizontal~.swiper-button-next,.swiper-horizontal.swiper-rtl .swiper-button-prev,.swiper-horizontal.swiper-rtl~.swiper-button-prev{right:var(--swiper-navigation-sides-offset, 4px);left:auto}:is(.swiper-horizontal .swiper-button-prev,.swiper-horizontal~.swiper-button-prev,.swiper-horizontal.swiper-rtl .swiper-button-next,.swiper-horizontal.swiper-rtl~.swiper-button-next) .swiper-navigation-icon{transform:rotate(180deg)}:is(.swiper-horizontal.swiper-rtl .swiper-button-prev,.swiper-horizontal.swiper-rtl~.swiper-button-prev) .swiper-navigation-icon{transform:rotate(0)}.swiper-vertical .swiper-button-prev,.swiper-vertical .swiper-button-next,.swiper-vertical~.swiper-button-prev,.swiper-vertical~.swiper-button-next{left:var(--swiper-navigation-top-offset, 50%);right:auto;margin-left:calc(0px - (var(--swiper-navigation-size) / 2));margin-top:0}.swiper-vertical .swiper-button-prev,.swiper-vertical~.swiper-button-prev{top:var(--swiper-navigation-sides-offset, 4px);bottom:auto}:is(.swiper-vertical .swiper-button-prev,.swiper-vertical~.swiper-button-prev) .swiper-navigation-icon{transform:rotate(-90deg)}.swiper-vertical .swiper-button-next,.swiper-vertical~.swiper-button-next{bottom:var(--swiper-navigation-sides-offset, 4px);top:auto}:is(.swiper-vertical .swiper-button-next,.swiper-vertical~.swiper-button-next) .swiper-navigation-icon{transform:rotate(90deg)}.swiper-pagination{position:absolute;text-align:center;transition:.3s opacity;transform:translateZ(0);z-index:10}.swiper-pagination.swiper-pagination-hidden{opacity:0}.swiper-pagination-disabled>.swiper-pagination,.swiper-pagination.swiper-pagination-disabled{display:none!important}.swiper-pagination-fraction,.swiper-pagination-custom,.swiper-horizontal>.swiper-pagination-bullets,.swiper-pagination-bullets.swiper-pagination-horizontal{bottom:var(--swiper-pagination-bottom, 8px);top:var(--swiper-pagination-top, auto);left:0;width:100%}.swiper-pagination-bullets-dynamic{overflow:hidden;font-size:0}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{transform:scale(.33);position:relative}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active,.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-main{transform:scale(1)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev{transform:scale(.66)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev-prev{transform:scale(.33)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next{transform:scale(.66)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next-next{transform:scale(.33)}.swiper-pagination-bullet{width:var(--swiper-pagination-bullet-width, var(--swiper-pagination-bullet-size, 8px));height:var(--swiper-pagination-bullet-height, var(--swiper-pagination-bullet-size, 8px));display:inline-block;border-radius:var(--swiper-pagination-bullet-border-radius, 50%);background:var(--swiper-pagination-bullet-inactive-color, #000);opacity:var(--swiper-pagination-bullet-inactive-opacity, .2)}button.swiper-pagination-bullet{border:none;margin:0;padding:0;box-shadow:none;-webkit-appearance:none;appearance:none}.swiper-pagination-clickable .swiper-pagination-bullet{cursor:pointer}.swiper-pagination-bullet:only-child{display:none!important}.swiper-pagination-bullet-active{opacity:var(--swiper-pagination-bullet-opacity, 1);background:var(--swiper-pagination-color, var(--swiper-theme-color))}.swiper-vertical>.swiper-pagination-bullets,.swiper-pagination-vertical.swiper-pagination-bullets{right:var(--swiper-pagination-right, 8px);left:var(--swiper-pagination-left, auto);top:50%;transform:translate3d(0,-50%,0)}:is(.swiper-vertical>.swiper-pagination-bullets,.swiper-pagination-vertical.swiper-pagination-bullets) .swiper-pagination-bullet{margin:var(--swiper-pagination-bullet-vertical-gap, 6px) 0;display:block}:is(.swiper-vertical>.swiper-pagination-bullets,.swiper-pagination-vertical.swiper-pagination-bullets).swiper-pagination-bullets-dynamic{top:50%;transform:translateY(-50%);width:8px}:is(.swiper-vertical>.swiper-pagination-bullets,.swiper-pagination-vertical.swiper-pagination-bullets).swiper-pagination-bullets-dynamic .swiper-pagination-bullet{display:inline-block;transition:.2s transform,.2s top}:is(.swiper-horizontal>.swiper-pagination-bullets,.swiper-pagination-horizontal.swiper-pagination-bullets) .swiper-pagination-bullet{margin:0 var(--swiper-pagination-bullet-horizontal-gap, 4px)}:is(.swiper-horizontal>.swiper-pagination-bullets,.swiper-pagination-horizontal.swiper-pagination-bullets).swiper-pagination-bullets-dynamic{left:50%;transform:translate(-50%);white-space:nowrap}:is(.swiper-horizontal>.swiper-pagination-bullets,.swiper-pagination-horizontal.swiper-pagination-bullets).swiper-pagination-bullets-dynamic .swiper-pagination-bullet{transition:.2s transform,.2s left}.swiper-horizontal.swiper-rtl>.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{transition:.2s transform,.2s right}.swiper-pagination-fraction{color:var(--swiper-pagination-fraction-color, inherit)}.swiper-pagination-progressbar{background:var(--swiper-pagination-progressbar-bg-color, rgba(0, 0, 0, .25));position:absolute}.swiper-pagination-progressbar .swiper-pagination-progressbar-fill{background:var(--swiper-pagination-color, var(--swiper-theme-color));position:absolute;left:0;top:0;width:100%;height:100%;transform:scale(0);transform-origin:left top}.swiper-rtl .swiper-pagination-progressbar .swiper-pagination-progressbar-fill{transform-origin:right top}.swiper-horizontal>.swiper-pagination-progressbar,.swiper-pagination-progressbar.swiper-pagination-horizontal,.swiper-vertical>.swiper-pagination-progressbar.swiper-pagination-progressbar-opposite,.swiper-pagination-progressbar.swiper-pagination-vertical.swiper-pagination-progressbar-opposite{width:100%;height:var(--swiper-pagination-progressbar-size, 4px);left:0;top:0}.swiper-vertical>.swiper-pagination-progressbar,.swiper-pagination-progressbar.swiper-pagination-vertical,.swiper-horizontal>.swiper-pagination-progressbar.swiper-pagination-progressbar-opposite,.swiper-pagination-progressbar.swiper-pagination-horizontal.swiper-pagination-progressbar-opposite{width:var(--swiper-pagination-progressbar-size, 4px);height:100%;left:0;top:0}.swiper-pagination-lock{display:none}.swiper-scrollbar{border-radius:var(--swiper-scrollbar-border-radius, 10px);position:relative;touch-action:none;background:var(--swiper-scrollbar-bg-color, rgba(0, 0, 0, .1))}.swiper-scrollbar-disabled>.swiper-scrollbar,.swiper-scrollbar.swiper-scrollbar-disabled{display:none!important}.swiper-horizontal>.swiper-scrollbar,.swiper-scrollbar.swiper-scrollbar-horizontal{position:absolute;left:var(--swiper-scrollbar-sides-offset, 1%);bottom:var(--swiper-scrollbar-bottom, 4px);top:var(--swiper-scrollbar-top, auto);z-index:50;height:var(--swiper-scrollbar-size, 4px);width:calc(100% - 2 * var(--swiper-scrollbar-sides-offset, 1%))}.swiper-vertical>.swiper-scrollbar,.swiper-scrollbar.swiper-scrollbar-vertical{position:absolute;left:var(--swiper-scrollbar-left, auto);right:var(--swiper-scrollbar-right, 4px);top:var(--swiper-scrollbar-sides-offset, 1%);z-index:50;width:var(--swiper-scrollbar-size, 4px);height:calc(100% - 2 * var(--swiper-scrollbar-sides-offset, 1%))}.swiper-scrollbar-drag{height:100%;width:100%;position:relative;background:var(--swiper-scrollbar-drag-bg-color, rgba(0, 0, 0, .5));border-radius:var(--swiper-scrollbar-border-radius, 10px);left:0;top:0}.swiper-scrollbar-cursor-drag{cursor:move}.swiper-scrollbar-lock{display:none}.swiper-zoom-container{width:100%;height:100%;display:flex;justify-content:center;align-items:center;text-align:center}.swiper-zoom-container>img,.swiper-zoom-container>svg,.swiper-zoom-container>canvas{max-width:100%;max-height:100%;object-fit:contain}.swiper-slide-zoomed{cursor:move;touch-action:none}.swiper .swiper-notification{position:absolute;left:0;top:0;pointer-events:none;opacity:0;z-index:-1000}.swiper-free-mode>.swiper-wrapper{transition-timing-function:ease-out;margin:0 auto}.swiper-grid>.swiper-wrapper{flex-wrap:wrap}.swiper-grid-column>.swiper-wrapper{flex-wrap:wrap;flex-direction:column}.swiper-fade.swiper-free-mode .swiper-slide{transition-timing-function:ease-out}.swiper-fade .swiper-slide{pointer-events:none;transition-property:opacity}.swiper-fade .swiper-slide .swiper-slide{pointer-events:none}.swiper-fade .swiper-slide-active,.swiper-fade .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper.swiper-cube{overflow:visible}.swiper-cube .swiper-slide{pointer-events:none;backface-visibility:hidden;z-index:1;visibility:hidden;transform-origin:0 0;width:100%;height:100%}.swiper-cube .swiper-slide .swiper-slide{pointer-events:none}.swiper-cube.swiper-rtl .swiper-slide{transform-origin:100% 0}.swiper-cube .swiper-slide-active,.swiper-cube .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-cube .swiper-slide-active,.swiper-cube .swiper-slide-next,.swiper-cube .swiper-slide-prev{pointer-events:auto;visibility:visible}.swiper-cube .swiper-cube-shadow{position:absolute;left:0;bottom:0;width:100%;height:100%;opacity:.6;z-index:0}.swiper-cube .swiper-cube-shadow:before{content:\"\";background:#000;position:absolute;inset:0;filter:blur(50px)}.swiper-cube .swiper-slide-next+.swiper-slide{pointer-events:auto;visibility:visible}.swiper-cube .swiper-slide-shadow-cube.swiper-slide-shadow-top,.swiper-cube .swiper-slide-shadow-cube.swiper-slide-shadow-bottom,.swiper-cube .swiper-slide-shadow-cube.swiper-slide-shadow-left,.swiper-cube .swiper-slide-shadow-cube.swiper-slide-shadow-right{z-index:0;backface-visibility:hidden}.swiper.swiper-flip{overflow:visible}.swiper-flip .swiper-slide{pointer-events:none;backface-visibility:hidden;z-index:1}.swiper-flip .swiper-slide .swiper-slide{pointer-events:none}.swiper-flip .swiper-slide-active,.swiper-flip .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-flip .swiper-slide-shadow-flip.swiper-slide-shadow-top,.swiper-flip .swiper-slide-shadow-flip.swiper-slide-shadow-bottom,.swiper-flip .swiper-slide-shadow-flip.swiper-slide-shadow-left,.swiper-flip .swiper-slide-shadow-flip.swiper-slide-shadow-right{z-index:0;backface-visibility:hidden}.swiper-creative .swiper-slide{backface-visibility:hidden;overflow:hidden;transition-property:transform,opacity,height}.swiper.swiper-cards{overflow:visible}.swiper-cards .swiper-slide{transform-origin:center bottom;backface-visibility:hidden;overflow:hidden}@layer components{ax-file-viewer-container{--ax-fv-surface: var(--color-lightest);--ax-fv-surface-2: var(--color-light);--ax-fv-border: var(--color-border-lightest);--ax-fv-border-strong: var(--color-border-lighter);--ax-fv-text: var(--color-on-lightest);--ax-fv-muted: color-mix(in srgb, rgba(var(--ax-sys-color-on-surface)) 65%, transparent);--ax-fv-shadow: 0 10px 30px color-mix(in srgb, rgba(var(--ax-sys-color-on-surface)) 8%, transparent);--ax-fv-nav-bg: var(--color-lightest);--ax-fv-nav-shadow: 0 6px 18px color-mix(in srgb, rgba(var(--ax-sys-color-on-surface)) 12%, transparent);--ax-fv-counter-bg: var(--color-on-lightest);--ax-fv-counter-text: var(--color-lightest);--ax-fv-thumb-bg: var(--color-lightest);--ax-fv-thumb-preview: var(--color-lighter);--ax-fv-image: var(--color-success-500);--ax-fv-video: var(--color-primary-500);--ax-fv-audio: var(--color-danger-500);--ax-fv-document: var(--color-warning-500);--ax-fv-file: var(--color-secondary-500);--ax-fv-on-accent: var(--color-lightest);--ax-fv-stage-pad: .75rem;--ax-fv-nav-size: 2.5rem;position:relative;box-sizing:border-box;display:flex;height:100%;min-height:calc(var(--spacing, .25rem) * 0);width:100%;max-width:100%;min-width:calc(var(--spacing, .25rem) * 0);flex-direction:column;overflow:hidden;border-radius:1.25rem;background:var(--ax-fv-surface);border:1px solid var(--ax-fv-border);box-shadow:var(--ax-fv-shadow);color:var(--ax-fv-text)}@supports (color: color-mix(in lab,red,red)){ax-file-viewer-container{--ax-fv-muted: color-mix(in oklab, var(--color-on-surface) 65%, transparent)}}@supports (color: color-mix(in lab,red,red)){ax-file-viewer-container{--ax-fv-shadow: 0 10px 30px color-mix(in oklab, var(--color-on-surface) 8%, transparent)}}@supports (color: color-mix(in lab,red,red)){ax-file-viewer-container{--ax-fv-nav-shadow: 0 6px 18px color-mix(in oklab, var(--color-on-surface) 12%, transparent)}}ax-file-viewer-container>.ax-file-viewer__header,ax-file-viewer-container>.ax-file-viewer__stage,ax-file-viewer-container>.ax-file-viewer__thumbs{box-sizing:border-box;width:100%;max-width:100%;min-width:calc(var(--spacing, .25rem) * 0);background:var(--ax-fv-surface)}ax-file-viewer-container.ax-file-viewer--fullscreen{border-radius:0;background:var(--ax-fv-surface)}ax-file-viewer-container .ax-file-viewer__loading{position:absolute;inset:calc(var(--spacing, .25rem) * 0);z-index:10;display:flex;align-items:center;justify-content:center;background:color-mix(in srgb,rgba(var(--ax-sys-color-lightest-surface)) 72%,transparent);-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}@supports (color: color-mix(in lab,red,red)){ax-file-viewer-container .ax-file-viewer__loading{background:color-mix(in oklab,var(--color-lightest) 72%,transparent)}}ax-file-viewer-container .ax-file-viewer__stage--hidden,ax-file-viewer-container .ax-file-viewer__thumbs--hidden{pointer-events:none;visibility:hidden}ax-file-viewer-container .ax-file-viewer__header{box-sizing:border-box;display:grid;width:100%;max-width:100%;min-width:calc(var(--spacing, .25rem) * 0);flex-shrink:0;align-items:center;grid-template-columns:auto minmax(0,1fr) auto;gap:.5rem;padding:.75rem 1rem;background:var(--ax-fv-surface);border-bottom:1px solid var(--ax-fv-border)}ax-file-viewer-container .ax-file-viewer__meta{min-width:5rem;max-width:28rem;overflow:hidden}ax-file-viewer-container .ax-file-viewer__header-slot{display:flex;width:100%;min-width:calc(var(--spacing, .25rem) * 0);align-items:center}ax-file-viewer-container .ax-file-viewer__header-slot ax-header{width:100%}ax-file-viewer-container .ax-file-viewer__title-row{display:flex;min-width:calc(var(--spacing, .25rem) * 0);align-items:center;gap:calc(var(--spacing, .25rem) * 2)}ax-file-viewer-container .ax-file-viewer__name{overflow:hidden;--tw-font-weight: var(--font-weight-bold, 700);font-weight:var(--font-weight-bold, 700);text-overflow:ellipsis;white-space:nowrap;font-size:.95rem}ax-file-viewer-container .ax-file-viewer__type-badge{flex-shrink:0}ax-file-viewer-container .ax-file-viewer__submeta{margin-top:calc(var(--spacing, .25rem) * .5);display:flex;flex-wrap:wrap;align-items:center;gap:calc(var(--spacing, .25rem) * 1);font-size:var(--text-xs, .75rem);line-height:var(--tw-leading, var(--text-xs--line-height, calc(1 / .75)));color:var(--ax-fv-muted)}ax-file-viewer-container .ax-file-viewer__dot{opacity:50%}ax-file-viewer-container .ax-file-viewer__header-actions{display:flex;flex-shrink:0;align-items:center;gap:calc(var(--spacing, .25rem) * 1)}ax-file-viewer-container .ax-file-viewer__stage{box-sizing:border-box;display:grid;min-height:calc(var(--spacing, .25rem) * 0);width:100%;max-width:100%;min-width:calc(var(--spacing, .25rem) * 0);align-items:stretch;gap:calc(var(--spacing, .25rem) * 2);flex:1 1 auto;grid-template-columns:minmax(0,1fr);grid-template-rows:minmax(0,1fr);grid-template-areas:\"canvas\";padding:var(--ax-fv-stage-pad)}ax-file-viewer-container .ax-file-viewer__stage--nav{grid-template-columns:var(--ax-fv-nav-size) minmax(0,1fr) var(--ax-fv-nav-size);grid-template-areas:\"prev canvas next\";align-items:stretch}ax-file-viewer-container .ax-file-viewer__nav{z-index:2;width:var(--ax-fv-nav-size)!important;height:var(--ax-fv-nav-size)!important;min-width:var(--ax-fv-nav-size)!important;border-radius:999px!important;background:var(--ax-fv-nav-bg)!important;border:1px solid var(--ax-fv-border)!important;color:var(--ax-fv-text)!important;box-shadow:var(--ax-fv-nav-shadow)!important;justify-self:center;align-self:center}ax-file-viewer-container .ax-file-viewer__nav.ax-disabled,ax-file-viewer-container .ax-file-viewer__nav[disabled]{opacity:.35!important;cursor:not-allowed!important;box-shadow:none!important}ax-file-viewer-container .ax-file-viewer__nav.ax-file-viewer__nav--prev{grid-area:prev}ax-file-viewer-container .ax-file-viewer__nav.ax-file-viewer__nav--next{grid-area:next}ax-file-viewer-container .ax-file-viewer__canvas{position:relative;box-sizing:border-box;height:100%;width:100%;max-width:100%;min-width:calc(var(--spacing, .25rem) * 0);align-self:stretch;overflow:hidden;grid-area:canvas;min-height:12rem;border-radius:1rem}ax-file-viewer-container .ax-file-viewer__canvas .ax-carousel,ax-file-viewer-container .ax-file-viewer__canvas .swiper{box-sizing:border-box;height:100%;min-height:calc(var(--spacing, .25rem) * 0);width:100%;min-width:calc(var(--spacing, .25rem) * 0);overflow:hidden}ax-file-viewer-container .ax-file-viewer__canvas .ax-carousel-wrapper,ax-file-viewer-container .ax-file-viewer__canvas .swiper-wrapper{box-sizing:border-box;height:100%;align-items:stretch}ax-file-viewer-container .ax-file-viewer__canvas .ax-carousel-slide,ax-file-viewer-container .ax-file-viewer__canvas .swiper-slide{box-sizing:border-box;height:100%;min-height:calc(var(--spacing, .25rem) * 0);min-width:calc(var(--spacing, .25rem) * 0);align-items:stretch;overflow:hidden;display:flex!important;justify-content:stretch}ax-file-viewer-container .ax-file-viewer__canvas img,ax-file-viewer-container .ax-file-viewer__canvas video,ax-file-viewer-container .ax-file-viewer__canvas audio,ax-file-viewer-container .ax-file-viewer__canvas iframe,ax-file-viewer-container .ax-file-viewer__canvas ax-pdf-reader{max-height:100%;max-width:100%}ax-file-viewer-container .ax-file-viewer__overlay-counter{pointer-events:none;position:absolute;bottom:calc(var(--spacing, .25rem) * 5);left:50%;z-index:3;display:inline-flex;min-width:3.25rem;--tw-translate-x: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y);align-items:center;justify-content:center;border-radius:calc(infinity * 1px);padding-inline:calc(var(--spacing, .25rem) * 2.5);padding-block:calc(var(--spacing, .25rem) * 1);--tw-font-weight: var(--font-weight-semibold, 600);font-weight:var(--font-weight-semibold, 600);--tw-tracking: var(--tracking-wide, .025em);letter-spacing:var(--tracking-wide, .025em);opacity:80%;background:var(--ax-fv-counter-bg);color:var(--ax-fv-counter-text);font-size:.72rem}ax-file-viewer-container .ax-file-viewer__thumbs{box-sizing:border-box;width:100%;max-width:100%;min-width:calc(var(--spacing, .25rem) * 0);overflow:hidden;flex:0 0 auto;padding:.75rem 1rem 1rem;background:var(--ax-fv-surface);border-top:1px solid var(--ax-fv-border)}ax-file-viewer-container .ax-file-viewer__thumbs-track{box-sizing:border-box;width:100%;max-width:100%;min-width:calc(var(--spacing, .25rem) * 0);overflow:hidden}ax-file-viewer-container .ax-file-viewer__thumbs-track .ax-carousel,ax-file-viewer-container .ax-file-viewer__thumbs-track .swiper{box-sizing:border-box;width:100%;max-width:100%;min-width:calc(var(--spacing, .25rem) * 0);overflow:hidden}ax-file-viewer-container .ax-file-viewer__thumbs-track .ax-carousel-wrapper,ax-file-viewer-container .ax-file-viewer__thumbs-track .swiper-wrapper{align-items:stretch}ax-file-viewer-container .ax-file-viewer__thumbs-track .ax-carousel-slide,ax-file-viewer-container .ax-file-viewer__thumbs-track .swiper-slide{box-sizing:border-box;height:auto;width:7.5rem;max-width:7.5rem;overflow:hidden}ax-file-viewer-container .ax-file-viewer__thumb{box-sizing:border-box;display:flex;width:7.5rem;max-width:7.5rem;cursor:pointer;flex-direction:column;overflow:hidden;border-radius:.9rem;border:2px solid var(--ax-fv-border);background:var(--ax-fv-thumb-bg);transition:border-color .15s ease}ax-file-viewer-container .ax-file-viewer__thumb:hover{border-color:var(--ax-fv-border-strong)}ax-file-viewer-container .ax-file-viewer__thumb.swiper-slide-thumb-active,ax-file-viewer-container .ax-file-viewer__thumb.ax-file-viewer__thumb--active{border-color:var(--ax-fv-image)}ax-file-viewer-container .ax-file-viewer__thumb[data-type=video].ax-file-viewer__thumb--active,ax-file-viewer-container .ax-file-viewer__thumb[data-type=video].swiper-slide-thumb-active{border-color:var(--ax-fv-video)}ax-file-viewer-container .ax-file-viewer__thumb[data-type=audio].ax-file-viewer__thumb--active,ax-file-viewer-container .ax-file-viewer__thumb[data-type=audio].swiper-slide-thumb-active{border-color:var(--ax-fv-audio)}ax-file-viewer-container .ax-file-viewer__thumb[data-type=document].ax-file-viewer__thumb--active,ax-file-viewer-container .ax-file-viewer__thumb[data-type=document].swiper-slide-thumb-active{border-color:var(--ax-fv-document)}ax-file-viewer-container .ax-file-viewer__thumb[data-type=file].ax-file-viewer__thumb--active,ax-file-viewer-container .ax-file-viewer__thumb[data-type=file].swiper-slide-thumb-active{border-color:var(--ax-fv-file)}ax-file-viewer-container .ax-file-viewer__thumb-preview{box-sizing:border-box;display:flex;width:100%;max-width:100%;min-width:calc(var(--spacing, .25rem) * 0);align-items:center;justify-content:center;overflow:hidden;aspect-ratio:1.4;background:var(--ax-fv-thumb-preview)}ax-file-viewer-container .ax-file-viewer__thumb-preview i{font-size:1.45rem;color:var(--ax-fv-muted)}ax-file-viewer-container .ax-file-viewer__thumb-preview img{display:block;height:100%;width:100%;object-fit:cover}ax-file-viewer-container .ax-file-viewer__thumb[data-type=image] .ax-file-viewer__thumb-preview i{color:var(--ax-fv-image)}ax-file-viewer-container .ax-file-viewer__thumb[data-type=video] .ax-file-viewer__thumb-preview i{color:var(--ax-fv-video)}ax-file-viewer-container .ax-file-viewer__thumb[data-type=audio] .ax-file-viewer__thumb-preview i{color:var(--ax-fv-audio)}ax-file-viewer-container .ax-file-viewer__thumb[data-type=document] .ax-file-viewer__thumb-preview i{color:var(--ax-fv-document)}ax-file-viewer-container .ax-file-viewer__thumb[data-type=file] .ax-file-viewer__thumb-preview i{color:var(--ax-fv-file)}ax-file-viewer-container .ax-file-viewer__thumb-footer{box-sizing:border-box;display:grid;width:100%;max-width:100%;min-width:calc(var(--spacing, .25rem) * 0);align-items:center;grid-template-columns:minmax(0,1fr);gap:.3rem;padding:.4rem .45rem;border-top:1px solid var(--ax-fv-border);font-size:.65rem;color:var(--ax-fv-muted)}ax-file-viewer-container .ax-file-viewer__thumb-name{overflow:hidden;--tw-font-weight: var(--font-weight-medium, 500);font-weight:var(--font-weight-medium, 500);text-overflow:ellipsis;white-space:nowrap;color:var(--ax-fv-text)}ax-file-viewer-container .ax-carousel-pagination{display:none}@media(max-width:768px){ax-file-viewer-container{--ax-fv-stage-pad: .5rem;--ax-fv-nav-size: 2.25rem;border-radius:1rem}ax-file-viewer-container .ax-file-viewer__header{min-width:calc(var(--spacing, .25rem) * 0);gap:.5rem .75rem;padding:.65rem .75rem}ax-file-viewer-container .ax-file-viewer__name{font-size:.85rem}ax-file-viewer-container .ax-file-viewer__stage--nav{grid-template-columns:minmax(0,1fr) minmax(0,1fr);grid-template-rows:minmax(14rem,1fr) auto;grid-template-areas:\"canvas canvas\" \"prev next\";gap:.5rem;align-items:stretch}ax-file-viewer-container .ax-file-viewer__nav--prev{justify-self:end}ax-file-viewer-container .ax-file-viewer__nav--next{justify-self:start}ax-file-viewer-container .ax-file-viewer__canvas{min-height:14rem}ax-file-viewer-container .ax-file-viewer__thumbs{padding:.6rem .75rem .85rem}ax-file-viewer-container .ax-file-viewer__thumbs-track .ax-carousel-slide,ax-file-viewer-container .ax-file-viewer__thumbs-track .swiper-slide{width:5.75rem;max-width:5.75rem}ax-file-viewer-container .ax-file-viewer__thumb{width:5.75rem;max-width:5.75rem}}@media(max-width:480px){ax-file-viewer-container{--ax-fv-nav-size: 2rem;border-radius:.75rem}ax-file-viewer-container .ax-file-viewer__type-badge{display:none}ax-file-viewer-container .ax-file-viewer__thumbs{padding:calc(var(--spacing, .25rem) * 2)}ax-file-viewer-container .ax-file-viewer__thumbs-track .ax-carousel-slide,ax-file-viewer-container .ax-file-viewer__thumbs-track .swiper-slide{width:5.25rem;max-width:5.25rem}ax-file-viewer-container .ax-file-viewer__thumb{width:5.25rem;max-width:5.25rem}}ax-file-viewer-slide{box-sizing:border-box;display:flex;height:100%;min-height:calc(var(--spacing, .25rem) * 0);width:100%;min-width:calc(var(--spacing, .25rem) * 0);align-items:stretch;padding:calc(var(--spacing, .25rem) * 0);-webkit-user-select:none;user-select:none;justify-content:stretch}ax-file-viewer-image,ax-file-viewer-video,ax-file-viewer-audio,ax-file-viewer-pdf,ax-file-viewer-fallback{display:flex!important;width:100%!important;height:100%!important;min-width:0;min-height:0;box-sizing:border-box}}@property --tw-font-weight{syntax: \"*\"; inherits: false;}@property --tw-translate-x{syntax: \"*\"; inherits: false; initial-value: 0;}@property --tw-translate-y{syntax: \"*\"; inherits: false; initial-value: 0;}@property --tw-translate-z{syntax: \"*\"; inherits: false; initial-value: 0;}@property --tw-tracking{syntax: \"*\"; inherits: false;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-font-weight: initial;--tw-translate-x: 0;--tw-translate-y: 0;--tw-translate-z: 0;--tw-tracking: initial}}}\n/*! tailwindcss v4.1.16 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "directive", type: AXCarouselDirective, selector: "[axCarousel]", exportAs: ["axCarousel"] }, { kind: "component", type: AXFileViewerSlideComponent, selector: "ax-file-viewer-slide", inputs: ["item", "index"] }, { kind: "component", type: AXFileViewerThumbPreviewComponent, selector: "ax-file-viewer-thumb-preview", inputs: ["item"] }, { kind: "component", type: AXBadgeComponent, selector: "ax-badge", inputs: ["color", "look", "text"] }, { kind: "component", type: AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "component", type: AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: AXLoadingComponent, selector: "ax-loading", inputs: ["visible", "type", "context"], outputs: ["visibleChange"] }, { kind: "directive", type: AXTooltipDirective, selector: "[axTooltip]", inputs: ["axTooltipDisabled", "axTooltip", "axTooltipContext", "axTooltipPlacement", "axTooltipOffsetX", "axTooltipOffsetY", "axTooltipOpenAfter", "axTooltipCloseAfter"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
461
+ }
462
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXFileViewerContainerComponent, decorators: [{
463
+ type: Component,
464
+ args: [{ selector: 'ax-file-viewer-container', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, providers: [AXFileViewerService], imports: [
465
+ AXCarouselDirective,
466
+ AXFileViewerSlideComponent,
467
+ AXFileViewerThumbPreviewComponent,
468
+ AXBadgeComponent,
469
+ AXButtonComponent,
470
+ AXDecoratorIconComponent,
471
+ AXLoadingComponent,
472
+ AXTooltipDirective,
473
+ ], template: "@if (isBusy()) {\n <div class=\"ax-file-viewer__loading\" aria-busy=\"true\" aria-live=\"polite\">\n <ax-loading></ax-loading>\n </div>\n}\n\n@if (currentItem(); as item) {\n <header class=\"ax-file-viewer__header\">\n <div class=\"ax-file-viewer__meta\">\n <div class=\"ax-file-viewer__title-row\">\n <span class=\"ax-file-viewer__name\">{{ item.name || 'Untitled' }}</span>\n </div>\n <div class=\"ax-file-viewer__submeta\">\n @if (formatSize(item.size); as sizeLabel) {\n <span>{{ sizeLabel }}</span>\n <span class=\"ax-file-viewer__dot\">\u00B7</span>\n }\n <ax-badge\n class=\"ax-file-viewer__type-badge ax-pill ax-sm\"\n look=\"outline\"\n [color]=\"currentTypeColor()\"\n [text]=\"currentTypeLabel()\"\n />\n </div>\n </div>\n\n <div class=\"ax-file-viewer__header-slot\">\n <ng-content select=\"ax-header\"></ng-content>\n </div>\n\n @if (download() || fullscreen()) {\n <div class=\"ax-file-viewer__header-actions\">\n @if (download()) {\n <ax-button\n look=\"outline\"\n color=\"default\"\n [iconOnly]=\"true\"\n [axTooltip]=\"'Download'\"\n (onClick)=\"downloadCurrent()\"\n >\n <ax-icon icon=\"fa-light fa-download\"></ax-icon>\n </ax-button>\n }\n\n @if (fullscreen()) {\n <ax-button\n look=\"outline\"\n color=\"default\"\n [iconOnly]=\"true\"\n [axTooltip]=\"'Fullscreen'\"\n (onClick)=\"toggleFullscreen()\"\n >\n <ax-icon\n [icon]=\"fullscreenActive() ? 'fa-light fa-compress' : 'fa-light fa-expand'\"\n ></ax-icon>\n </ax-button>\n }\n </div>\n }\n </header>\n}\n\n<div\n class=\"ax-file-viewer__stage\"\n [class.ax-file-viewer__stage--nav]=\"service.items().length > 1\"\n [class.ax-file-viewer__stage--hidden]=\"isBusy()\"\n>\n @if (service.items().length > 1) {\n <ax-button\n class=\"ax-file-viewer__nav ax-file-viewer__nav--prev\"\n look=\"solid\"\n color=\"default\"\n [iconOnly]=\"true\"\n [disabled]=\"isFirstSlide()\"\n (onClick)=\"prev()\"\n >\n <ax-icon icon=\"fa-light fa-chevron-left\"></ax-icon>\n </ax-button>\n }\n\n <div class=\"ax-file-viewer__canvas\">\n <div #mainCarousel=\"axCarousel\" axCarousel class=\"ax-carousel\">\n <div class=\"ax-carousel-wrapper\">\n @for (file of service.items(); track file.id) {\n <div class=\"ax-carousel-slide\">\n <ax-file-viewer-slide [item]=\"file\" [index]=\"$index\" />\n </div>\n }\n </div>\n </div>\n\n @if (service.items().length > 0) {\n <span class=\"ax-file-viewer__overlay-counter\">{{ slideCounter() }}</span>\n }\n </div>\n\n @if (service.items().length > 1) {\n <ax-button\n class=\"ax-file-viewer__nav ax-file-viewer__nav--next\"\n look=\"solid\"\n color=\"default\"\n [iconOnly]=\"true\"\n [disabled]=\"isLastSlide()\"\n (onClick)=\"next()\"\n >\n <ax-icon icon=\"fa-light fa-chevron-right\"></ax-icon>\n </ax-button>\n }\n</div>\n\n@if (thumbnail() && service.items().length > 1) {\n <footer class=\"ax-file-viewer__thumbs\" [class.ax-file-viewer__thumbs--hidden]=\"isBusy()\">\n <div class=\"ax-file-viewer__thumbs-track\">\n <div #thumbCarousel=\"axCarousel\" axCarousel class=\"ax-carousel\">\n <div class=\"ax-carousel-wrapper\">\n @for (file of service.items(); track file.id) {\n <div\n class=\"ax-carousel-slide ax-file-viewer__thumb\"\n [attr.data-type]=\"resolveFileType(file)\"\n [class.ax-file-viewer__thumb--active]=\"service.selectedIndex() === $index\"\n (click)=\"goToIndex($index)\"\n >\n <ax-file-viewer-thumb-preview [item]=\"file\" />\n <div class=\"ax-file-viewer__thumb-footer\">\n <span class=\"ax-file-viewer__thumb-name\">{{ file.name || resolveTypeLabel(file) }}</span>\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n </footer>\n}\n", styles: ["@layer properties;:root{--swiper-theme-color: #007aff}:host{position:relative;display:block;margin-left:auto;margin-right:auto;z-index:1}.swiper{margin-left:auto;margin-right:auto;position:relative;overflow:hidden;list-style:none;padding:0;z-index:1;display:block}.swiper-vertical>.swiper-wrapper{flex-direction:column}.swiper-wrapper{position:relative;width:100%;height:100%;z-index:1;display:flex;transition-property:transform;transition-timing-function:var(--swiper-wrapper-transition-timing-function, initial);box-sizing:content-box}.swiper-android .swiper-slide,.swiper-ios .swiper-slide,.swiper-wrapper{transform:translateZ(0)}.swiper-horizontal{touch-action:pan-y}.swiper-vertical{touch-action:pan-x}.swiper-slide{flex-shrink:0;width:100%;height:100%;position:relative;transition-property:transform;display:block}.swiper-slide-invisible-blank{visibility:hidden}.swiper-autoheight,.swiper-autoheight .swiper-slide{height:auto}.swiper-autoheight .swiper-wrapper{align-items:flex-start;transition-property:transform,height}.swiper-backface-hidden .swiper-slide{transform:translateZ(0);backface-visibility:hidden}.swiper-3d.swiper-css-mode .swiper-wrapper{perspective:1200px}.swiper-3d .swiper-wrapper{transform-style:preserve-3d}.swiper-3d{perspective:1200px}.swiper-3d .swiper-slide,.swiper-3d .swiper-cube-shadow{transform-style:preserve-3d}.swiper-css-mode>.swiper-wrapper{overflow:auto;scrollbar-width:none;-ms-overflow-style:none}.swiper-css-mode>.swiper-wrapper::-webkit-scrollbar{display:none}.swiper-css-mode>.swiper-wrapper>.swiper-slide{scroll-snap-align:start start}.swiper-css-mode.swiper-horizontal>.swiper-wrapper{scroll-snap-type:x mandatory}.swiper-css-mode.swiper-vertical>.swiper-wrapper{scroll-snap-type:y mandatory}.swiper-css-mode.swiper-free-mode>.swiper-wrapper{scroll-snap-type:none}.swiper-css-mode.swiper-free-mode>.swiper-wrapper>.swiper-slide{scroll-snap-align:none}.swiper-css-mode.swiper-centered>.swiper-wrapper:before{content:\"\";flex-shrink:0;order:9999}.swiper-css-mode.swiper-centered>.swiper-wrapper>.swiper-slide{scroll-snap-align:center center;scroll-snap-stop:always}.swiper-css-mode.swiper-centered.swiper-horizontal>.swiper-wrapper>.swiper-slide:first-child{margin-inline-start:var(--swiper-centered-offset-before)}.swiper-css-mode.swiper-centered.swiper-horizontal>.swiper-wrapper:before{height:100%;min-height:1px;width:var(--swiper-centered-offset-after)}.swiper-css-mode.swiper-centered.swiper-vertical>.swiper-wrapper>.swiper-slide:first-child{margin-block-start:var(--swiper-centered-offset-before)}.swiper-css-mode.swiper-centered.swiper-vertical>.swiper-wrapper:before{width:100%;min-width:1px;height:var(--swiper-centered-offset-after)}.swiper-3d .swiper-slide-shadow,.swiper-3d .swiper-slide-shadow-left,.swiper-3d .swiper-slide-shadow-right,.swiper-3d .swiper-slide-shadow-top,.swiper-3d .swiper-slide-shadow-bottom{position:absolute;left:0;top:0;width:100%;height:100%;pointer-events:none;z-index:10}.swiper-3d .swiper-slide-shadow{background:#00000026}.swiper-3d .swiper-slide-shadow-left{background-image:linear-gradient(to left,#00000080,#0000)}.swiper-3d .swiper-slide-shadow-right{background-image:linear-gradient(to right,#00000080,#0000)}.swiper-3d .swiper-slide-shadow-top{background-image:linear-gradient(to top,#00000080,#0000)}.swiper-3d .swiper-slide-shadow-bottom{background-image:linear-gradient(to bottom,#00000080,#0000)}.swiper-lazy-preloader{width:42px;height:42px;position:absolute;left:50%;top:50%;margin-left:-21px;margin-top:-21px;z-index:10;transform-origin:50%;box-sizing:border-box;border:4px solid var(--swiper-preloader-color, var(--swiper-theme-color));border-radius:50%;border-top-color:transparent}:is(.swiper:not(.swiper-watch-progress),.swiper-watch-progress .swiper-slide-visible) .swiper-lazy-preloader{animation:swiper-preloader-spin 1s infinite linear}.swiper-lazy-preloader-white{--swiper-preloader-color: #fff}.swiper-lazy-preloader-black{--swiper-preloader-color: #000}@keyframes swiper-preloader-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.swiper-virtual .swiper-slide{-webkit-backface-visibility:hidden;transform:translateZ(0)}.swiper-virtual.swiper-css-mode .swiper-wrapper:after{content:\"\";position:absolute;left:0;top:0;pointer-events:none}.swiper-virtual.swiper-css-mode.swiper-horizontal .swiper-wrapper:after{height:1px;width:var(--swiper-virtual-size)}.swiper-virtual.swiper-css-mode.swiper-vertical .swiper-wrapper:after{width:1px;height:var(--swiper-virtual-size)}:root{--swiper-navigation-size: 44px}.swiper-button-prev,.swiper-button-next{position:absolute;width:var(--swiper-navigation-size);height:var(--swiper-navigation-size);z-index:10;cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--swiper-navigation-color, var(--swiper-theme-color))}:is(.swiper-button-prev,.swiper-button-next).swiper-button-disabled{opacity:.35;cursor:auto;pointer-events:none}:is(.swiper-button-prev,.swiper-button-next).swiper-button-hidden{opacity:0;cursor:auto;pointer-events:none}.swiper-navigation-disabled :is(.swiper-button-prev,.swiper-button-next){display:none!important}:is(.swiper-button-prev,.swiper-button-next) svg{width:100%;height:100%;object-fit:contain;transform-origin:center;fill:currentColor;pointer-events:none}.swiper-button-lock{display:none}.swiper-button-prev,.swiper-button-next{top:var(--swiper-navigation-top-offset, 50%);margin-top:calc(0px - (var(--swiper-navigation-size) / 2))}.swiper-button-prev{left:var(--swiper-navigation-sides-offset, 4px);right:auto}.swiper-button-prev .swiper-navigation-icon{transform:rotate(180deg)}.swiper-button-next{right:var(--swiper-navigation-sides-offset, 4px);left:auto}.swiper-horizontal .swiper-button-prev,.swiper-horizontal .swiper-button-next,.swiper-horizontal~.swiper-button-prev,.swiper-horizontal~.swiper-button-next{top:var(--swiper-navigation-top-offset, 50%);margin-top:calc(0px - (var(--swiper-navigation-size) / 2));margin-left:0}.swiper-horizontal .swiper-button-prev,.swiper-horizontal~.swiper-button-prev,.swiper-horizontal.swiper-rtl .swiper-button-next,.swiper-horizontal.swiper-rtl~.swiper-button-next{left:var(--swiper-navigation-sides-offset, 4px);right:auto}.swiper-horizontal .swiper-button-next,.swiper-horizontal~.swiper-button-next,.swiper-horizontal.swiper-rtl .swiper-button-prev,.swiper-horizontal.swiper-rtl~.swiper-button-prev{right:var(--swiper-navigation-sides-offset, 4px);left:auto}:is(.swiper-horizontal .swiper-button-prev,.swiper-horizontal~.swiper-button-prev,.swiper-horizontal.swiper-rtl .swiper-button-next,.swiper-horizontal.swiper-rtl~.swiper-button-next) .swiper-navigation-icon{transform:rotate(180deg)}:is(.swiper-horizontal.swiper-rtl .swiper-button-prev,.swiper-horizontal.swiper-rtl~.swiper-button-prev) .swiper-navigation-icon{transform:rotate(0)}.swiper-vertical .swiper-button-prev,.swiper-vertical .swiper-button-next,.swiper-vertical~.swiper-button-prev,.swiper-vertical~.swiper-button-next{left:var(--swiper-navigation-top-offset, 50%);right:auto;margin-left:calc(0px - (var(--swiper-navigation-size) / 2));margin-top:0}.swiper-vertical .swiper-button-prev,.swiper-vertical~.swiper-button-prev{top:var(--swiper-navigation-sides-offset, 4px);bottom:auto}:is(.swiper-vertical .swiper-button-prev,.swiper-vertical~.swiper-button-prev) .swiper-navigation-icon{transform:rotate(-90deg)}.swiper-vertical .swiper-button-next,.swiper-vertical~.swiper-button-next{bottom:var(--swiper-navigation-sides-offset, 4px);top:auto}:is(.swiper-vertical .swiper-button-next,.swiper-vertical~.swiper-button-next) .swiper-navigation-icon{transform:rotate(90deg)}.swiper-pagination{position:absolute;text-align:center;transition:.3s opacity;transform:translateZ(0);z-index:10}.swiper-pagination.swiper-pagination-hidden{opacity:0}.swiper-pagination-disabled>.swiper-pagination,.swiper-pagination.swiper-pagination-disabled{display:none!important}.swiper-pagination-fraction,.swiper-pagination-custom,.swiper-horizontal>.swiper-pagination-bullets,.swiper-pagination-bullets.swiper-pagination-horizontal{bottom:var(--swiper-pagination-bottom, 8px);top:var(--swiper-pagination-top, auto);left:0;width:100%}.swiper-pagination-bullets-dynamic{overflow:hidden;font-size:0}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{transform:scale(.33);position:relative}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active,.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-main{transform:scale(1)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev{transform:scale(.66)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev-prev{transform:scale(.33)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next{transform:scale(.66)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next-next{transform:scale(.33)}.swiper-pagination-bullet{width:var(--swiper-pagination-bullet-width, var(--swiper-pagination-bullet-size, 8px));height:var(--swiper-pagination-bullet-height, var(--swiper-pagination-bullet-size, 8px));display:inline-block;border-radius:var(--swiper-pagination-bullet-border-radius, 50%);background:var(--swiper-pagination-bullet-inactive-color, #000);opacity:var(--swiper-pagination-bullet-inactive-opacity, .2)}button.swiper-pagination-bullet{border:none;margin:0;padding:0;box-shadow:none;-webkit-appearance:none;appearance:none}.swiper-pagination-clickable .swiper-pagination-bullet{cursor:pointer}.swiper-pagination-bullet:only-child{display:none!important}.swiper-pagination-bullet-active{opacity:var(--swiper-pagination-bullet-opacity, 1);background:var(--swiper-pagination-color, var(--swiper-theme-color))}.swiper-vertical>.swiper-pagination-bullets,.swiper-pagination-vertical.swiper-pagination-bullets{right:var(--swiper-pagination-right, 8px);left:var(--swiper-pagination-left, auto);top:50%;transform:translate3d(0,-50%,0)}:is(.swiper-vertical>.swiper-pagination-bullets,.swiper-pagination-vertical.swiper-pagination-bullets) .swiper-pagination-bullet{margin:var(--swiper-pagination-bullet-vertical-gap, 6px) 0;display:block}:is(.swiper-vertical>.swiper-pagination-bullets,.swiper-pagination-vertical.swiper-pagination-bullets).swiper-pagination-bullets-dynamic{top:50%;transform:translateY(-50%);width:8px}:is(.swiper-vertical>.swiper-pagination-bullets,.swiper-pagination-vertical.swiper-pagination-bullets).swiper-pagination-bullets-dynamic .swiper-pagination-bullet{display:inline-block;transition:.2s transform,.2s top}:is(.swiper-horizontal>.swiper-pagination-bullets,.swiper-pagination-horizontal.swiper-pagination-bullets) .swiper-pagination-bullet{margin:0 var(--swiper-pagination-bullet-horizontal-gap, 4px)}:is(.swiper-horizontal>.swiper-pagination-bullets,.swiper-pagination-horizontal.swiper-pagination-bullets).swiper-pagination-bullets-dynamic{left:50%;transform:translate(-50%);white-space:nowrap}:is(.swiper-horizontal>.swiper-pagination-bullets,.swiper-pagination-horizontal.swiper-pagination-bullets).swiper-pagination-bullets-dynamic .swiper-pagination-bullet{transition:.2s transform,.2s left}.swiper-horizontal.swiper-rtl>.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{transition:.2s transform,.2s right}.swiper-pagination-fraction{color:var(--swiper-pagination-fraction-color, inherit)}.swiper-pagination-progressbar{background:var(--swiper-pagination-progressbar-bg-color, rgba(0, 0, 0, .25));position:absolute}.swiper-pagination-progressbar .swiper-pagination-progressbar-fill{background:var(--swiper-pagination-color, var(--swiper-theme-color));position:absolute;left:0;top:0;width:100%;height:100%;transform:scale(0);transform-origin:left top}.swiper-rtl .swiper-pagination-progressbar .swiper-pagination-progressbar-fill{transform-origin:right top}.swiper-horizontal>.swiper-pagination-progressbar,.swiper-pagination-progressbar.swiper-pagination-horizontal,.swiper-vertical>.swiper-pagination-progressbar.swiper-pagination-progressbar-opposite,.swiper-pagination-progressbar.swiper-pagination-vertical.swiper-pagination-progressbar-opposite{width:100%;height:var(--swiper-pagination-progressbar-size, 4px);left:0;top:0}.swiper-vertical>.swiper-pagination-progressbar,.swiper-pagination-progressbar.swiper-pagination-vertical,.swiper-horizontal>.swiper-pagination-progressbar.swiper-pagination-progressbar-opposite,.swiper-pagination-progressbar.swiper-pagination-horizontal.swiper-pagination-progressbar-opposite{width:var(--swiper-pagination-progressbar-size, 4px);height:100%;left:0;top:0}.swiper-pagination-lock{display:none}.swiper-scrollbar{border-radius:var(--swiper-scrollbar-border-radius, 10px);position:relative;touch-action:none;background:var(--swiper-scrollbar-bg-color, rgba(0, 0, 0, .1))}.swiper-scrollbar-disabled>.swiper-scrollbar,.swiper-scrollbar.swiper-scrollbar-disabled{display:none!important}.swiper-horizontal>.swiper-scrollbar,.swiper-scrollbar.swiper-scrollbar-horizontal{position:absolute;left:var(--swiper-scrollbar-sides-offset, 1%);bottom:var(--swiper-scrollbar-bottom, 4px);top:var(--swiper-scrollbar-top, auto);z-index:50;height:var(--swiper-scrollbar-size, 4px);width:calc(100% - 2 * var(--swiper-scrollbar-sides-offset, 1%))}.swiper-vertical>.swiper-scrollbar,.swiper-scrollbar.swiper-scrollbar-vertical{position:absolute;left:var(--swiper-scrollbar-left, auto);right:var(--swiper-scrollbar-right, 4px);top:var(--swiper-scrollbar-sides-offset, 1%);z-index:50;width:var(--swiper-scrollbar-size, 4px);height:calc(100% - 2 * var(--swiper-scrollbar-sides-offset, 1%))}.swiper-scrollbar-drag{height:100%;width:100%;position:relative;background:var(--swiper-scrollbar-drag-bg-color, rgba(0, 0, 0, .5));border-radius:var(--swiper-scrollbar-border-radius, 10px);left:0;top:0}.swiper-scrollbar-cursor-drag{cursor:move}.swiper-scrollbar-lock{display:none}.swiper-zoom-container{width:100%;height:100%;display:flex;justify-content:center;align-items:center;text-align:center}.swiper-zoom-container>img,.swiper-zoom-container>svg,.swiper-zoom-container>canvas{max-width:100%;max-height:100%;object-fit:contain}.swiper-slide-zoomed{cursor:move;touch-action:none}.swiper .swiper-notification{position:absolute;left:0;top:0;pointer-events:none;opacity:0;z-index:-1000}.swiper-free-mode>.swiper-wrapper{transition-timing-function:ease-out;margin:0 auto}.swiper-grid>.swiper-wrapper{flex-wrap:wrap}.swiper-grid-column>.swiper-wrapper{flex-wrap:wrap;flex-direction:column}.swiper-fade.swiper-free-mode .swiper-slide{transition-timing-function:ease-out}.swiper-fade .swiper-slide{pointer-events:none;transition-property:opacity}.swiper-fade .swiper-slide .swiper-slide{pointer-events:none}.swiper-fade .swiper-slide-active,.swiper-fade .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper.swiper-cube{overflow:visible}.swiper-cube .swiper-slide{pointer-events:none;backface-visibility:hidden;z-index:1;visibility:hidden;transform-origin:0 0;width:100%;height:100%}.swiper-cube .swiper-slide .swiper-slide{pointer-events:none}.swiper-cube.swiper-rtl .swiper-slide{transform-origin:100% 0}.swiper-cube .swiper-slide-active,.swiper-cube .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-cube .swiper-slide-active,.swiper-cube .swiper-slide-next,.swiper-cube .swiper-slide-prev{pointer-events:auto;visibility:visible}.swiper-cube .swiper-cube-shadow{position:absolute;left:0;bottom:0;width:100%;height:100%;opacity:.6;z-index:0}.swiper-cube .swiper-cube-shadow:before{content:\"\";background:#000;position:absolute;inset:0;filter:blur(50px)}.swiper-cube .swiper-slide-next+.swiper-slide{pointer-events:auto;visibility:visible}.swiper-cube .swiper-slide-shadow-cube.swiper-slide-shadow-top,.swiper-cube .swiper-slide-shadow-cube.swiper-slide-shadow-bottom,.swiper-cube .swiper-slide-shadow-cube.swiper-slide-shadow-left,.swiper-cube .swiper-slide-shadow-cube.swiper-slide-shadow-right{z-index:0;backface-visibility:hidden}.swiper.swiper-flip{overflow:visible}.swiper-flip .swiper-slide{pointer-events:none;backface-visibility:hidden;z-index:1}.swiper-flip .swiper-slide .swiper-slide{pointer-events:none}.swiper-flip .swiper-slide-active,.swiper-flip .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-flip .swiper-slide-shadow-flip.swiper-slide-shadow-top,.swiper-flip .swiper-slide-shadow-flip.swiper-slide-shadow-bottom,.swiper-flip .swiper-slide-shadow-flip.swiper-slide-shadow-left,.swiper-flip .swiper-slide-shadow-flip.swiper-slide-shadow-right{z-index:0;backface-visibility:hidden}.swiper-creative .swiper-slide{backface-visibility:hidden;overflow:hidden;transition-property:transform,opacity,height}.swiper.swiper-cards{overflow:visible}.swiper-cards .swiper-slide{transform-origin:center bottom;backface-visibility:hidden;overflow:hidden}@layer components{ax-file-viewer-container{--ax-fv-surface: var(--color-lightest);--ax-fv-surface-2: var(--color-light);--ax-fv-border: var(--color-border-lightest);--ax-fv-border-strong: var(--color-border-lighter);--ax-fv-text: var(--color-on-lightest);--ax-fv-muted: color-mix(in srgb, rgba(var(--ax-sys-color-on-surface)) 65%, transparent);--ax-fv-shadow: 0 10px 30px color-mix(in srgb, rgba(var(--ax-sys-color-on-surface)) 8%, transparent);--ax-fv-nav-bg: var(--color-lightest);--ax-fv-nav-shadow: 0 6px 18px color-mix(in srgb, rgba(var(--ax-sys-color-on-surface)) 12%, transparent);--ax-fv-counter-bg: var(--color-on-lightest);--ax-fv-counter-text: var(--color-lightest);--ax-fv-thumb-bg: var(--color-lightest);--ax-fv-thumb-preview: var(--color-lighter);--ax-fv-image: var(--color-success-500);--ax-fv-video: var(--color-primary-500);--ax-fv-audio: var(--color-danger-500);--ax-fv-document: var(--color-warning-500);--ax-fv-file: var(--color-secondary-500);--ax-fv-on-accent: var(--color-lightest);--ax-fv-stage-pad: .75rem;--ax-fv-nav-size: 2.5rem;position:relative;box-sizing:border-box;display:flex;height:100%;min-height:calc(var(--spacing, .25rem) * 0);width:100%;max-width:100%;min-width:calc(var(--spacing, .25rem) * 0);flex-direction:column;overflow:hidden;border-radius:1.25rem;background:var(--ax-fv-surface);border:1px solid var(--ax-fv-border);box-shadow:var(--ax-fv-shadow);color:var(--ax-fv-text)}@supports (color: color-mix(in lab,red,red)){ax-file-viewer-container{--ax-fv-muted: color-mix(in oklab, var(--color-on-surface) 65%, transparent)}}@supports (color: color-mix(in lab,red,red)){ax-file-viewer-container{--ax-fv-shadow: 0 10px 30px color-mix(in oklab, var(--color-on-surface) 8%, transparent)}}@supports (color: color-mix(in lab,red,red)){ax-file-viewer-container{--ax-fv-nav-shadow: 0 6px 18px color-mix(in oklab, var(--color-on-surface) 12%, transparent)}}ax-file-viewer-container>.ax-file-viewer__header,ax-file-viewer-container>.ax-file-viewer__stage,ax-file-viewer-container>.ax-file-viewer__thumbs{box-sizing:border-box;width:100%;max-width:100%;min-width:calc(var(--spacing, .25rem) * 0);background:var(--ax-fv-surface)}ax-file-viewer-container.ax-file-viewer--fullscreen{border-radius:0;background:var(--ax-fv-surface)}ax-file-viewer-container .ax-file-viewer__loading{position:absolute;inset:calc(var(--spacing, .25rem) * 0);z-index:10;display:flex;align-items:center;justify-content:center;background:color-mix(in srgb,rgba(var(--ax-sys-color-lightest-surface)) 72%,transparent);-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}@supports (color: color-mix(in lab,red,red)){ax-file-viewer-container .ax-file-viewer__loading{background:color-mix(in oklab,var(--color-lightest) 72%,transparent)}}ax-file-viewer-container .ax-file-viewer__stage--hidden,ax-file-viewer-container .ax-file-viewer__thumbs--hidden{pointer-events:none;visibility:hidden}ax-file-viewer-container .ax-file-viewer__header{box-sizing:border-box;display:grid;width:100%;max-width:100%;min-width:calc(var(--spacing, .25rem) * 0);flex-shrink:0;align-items:center;grid-template-columns:auto minmax(0,1fr) auto;gap:.5rem;padding:.75rem 1rem;background:var(--ax-fv-surface);border-bottom:1px solid var(--ax-fv-border)}ax-file-viewer-container .ax-file-viewer__meta{min-width:5rem;max-width:28rem;overflow:hidden}ax-file-viewer-container .ax-file-viewer__header-slot{display:flex;width:100%;min-width:calc(var(--spacing, .25rem) * 0);align-items:center}ax-file-viewer-container .ax-file-viewer__header-slot ax-header{width:100%}ax-file-viewer-container .ax-file-viewer__title-row{display:flex;min-width:calc(var(--spacing, .25rem) * 0);align-items:center;gap:calc(var(--spacing, .25rem) * 2)}ax-file-viewer-container .ax-file-viewer__name{overflow:hidden;--tw-font-weight: var(--font-weight-bold, 700);font-weight:var(--font-weight-bold, 700);text-overflow:ellipsis;white-space:nowrap;font-size:.95rem}ax-file-viewer-container .ax-file-viewer__type-badge{flex-shrink:0}ax-file-viewer-container .ax-file-viewer__submeta{margin-top:calc(var(--spacing, .25rem) * .5);display:flex;flex-wrap:wrap;align-items:center;gap:calc(var(--spacing, .25rem) * 1);font-size:var(--text-xs, .75rem);line-height:var(--tw-leading, var(--text-xs--line-height, calc(1 / .75)));color:var(--ax-fv-muted)}ax-file-viewer-container .ax-file-viewer__dot{opacity:50%}ax-file-viewer-container .ax-file-viewer__header-actions{display:flex;flex-shrink:0;align-items:center;gap:calc(var(--spacing, .25rem) * 1)}ax-file-viewer-container .ax-file-viewer__stage{box-sizing:border-box;display:grid;min-height:calc(var(--spacing, .25rem) * 0);width:100%;max-width:100%;min-width:calc(var(--spacing, .25rem) * 0);align-items:stretch;gap:calc(var(--spacing, .25rem) * 2);flex:1 1 auto;grid-template-columns:minmax(0,1fr);grid-template-rows:minmax(0,1fr);grid-template-areas:\"canvas\";padding:var(--ax-fv-stage-pad)}ax-file-viewer-container .ax-file-viewer__stage--nav{grid-template-columns:var(--ax-fv-nav-size) minmax(0,1fr) var(--ax-fv-nav-size);grid-template-areas:\"prev canvas next\";align-items:stretch}ax-file-viewer-container .ax-file-viewer__nav{z-index:2;width:var(--ax-fv-nav-size)!important;height:var(--ax-fv-nav-size)!important;min-width:var(--ax-fv-nav-size)!important;border-radius:999px!important;background:var(--ax-fv-nav-bg)!important;border:1px solid var(--ax-fv-border)!important;color:var(--ax-fv-text)!important;box-shadow:var(--ax-fv-nav-shadow)!important;justify-self:center;align-self:center}ax-file-viewer-container .ax-file-viewer__nav.ax-disabled,ax-file-viewer-container .ax-file-viewer__nav[disabled]{opacity:.35!important;cursor:not-allowed!important;box-shadow:none!important}ax-file-viewer-container .ax-file-viewer__nav.ax-file-viewer__nav--prev{grid-area:prev}ax-file-viewer-container .ax-file-viewer__nav.ax-file-viewer__nav--next{grid-area:next}ax-file-viewer-container .ax-file-viewer__canvas{position:relative;box-sizing:border-box;height:100%;width:100%;max-width:100%;min-width:calc(var(--spacing, .25rem) * 0);align-self:stretch;overflow:hidden;grid-area:canvas;min-height:12rem;border-radius:1rem}ax-file-viewer-container .ax-file-viewer__canvas .ax-carousel,ax-file-viewer-container .ax-file-viewer__canvas .swiper{box-sizing:border-box;height:100%;min-height:calc(var(--spacing, .25rem) * 0);width:100%;min-width:calc(var(--spacing, .25rem) * 0);overflow:hidden}ax-file-viewer-container .ax-file-viewer__canvas .ax-carousel-wrapper,ax-file-viewer-container .ax-file-viewer__canvas .swiper-wrapper{box-sizing:border-box;height:100%;align-items:stretch}ax-file-viewer-container .ax-file-viewer__canvas .ax-carousel-slide,ax-file-viewer-container .ax-file-viewer__canvas .swiper-slide{box-sizing:border-box;height:100%;min-height:calc(var(--spacing, .25rem) * 0);min-width:calc(var(--spacing, .25rem) * 0);align-items:stretch;overflow:hidden;display:flex!important;justify-content:stretch}ax-file-viewer-container .ax-file-viewer__canvas img,ax-file-viewer-container .ax-file-viewer__canvas video,ax-file-viewer-container .ax-file-viewer__canvas audio,ax-file-viewer-container .ax-file-viewer__canvas iframe,ax-file-viewer-container .ax-file-viewer__canvas ax-pdf-reader{max-height:100%;max-width:100%}ax-file-viewer-container .ax-file-viewer__overlay-counter{pointer-events:none;position:absolute;bottom:calc(var(--spacing, .25rem) * 5);left:50%;z-index:3;display:inline-flex;min-width:3.25rem;--tw-translate-x: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y);align-items:center;justify-content:center;border-radius:calc(infinity * 1px);padding-inline:calc(var(--spacing, .25rem) * 2.5);padding-block:calc(var(--spacing, .25rem) * 1);--tw-font-weight: var(--font-weight-semibold, 600);font-weight:var(--font-weight-semibold, 600);--tw-tracking: var(--tracking-wide, .025em);letter-spacing:var(--tracking-wide, .025em);opacity:80%;background:var(--ax-fv-counter-bg);color:var(--ax-fv-counter-text);font-size:.72rem}ax-file-viewer-container .ax-file-viewer__thumbs{box-sizing:border-box;width:100%;max-width:100%;min-width:calc(var(--spacing, .25rem) * 0);overflow:hidden;flex:0 0 auto;padding:.75rem 1rem 1rem;background:var(--ax-fv-surface);border-top:1px solid var(--ax-fv-border)}ax-file-viewer-container .ax-file-viewer__thumbs-track{box-sizing:border-box;width:100%;max-width:100%;min-width:calc(var(--spacing, .25rem) * 0);overflow:hidden}ax-file-viewer-container .ax-file-viewer__thumbs-track .ax-carousel,ax-file-viewer-container .ax-file-viewer__thumbs-track .swiper{box-sizing:border-box;width:100%;max-width:100%;min-width:calc(var(--spacing, .25rem) * 0);overflow:hidden}ax-file-viewer-container .ax-file-viewer__thumbs-track .ax-carousel-wrapper,ax-file-viewer-container .ax-file-viewer__thumbs-track .swiper-wrapper{align-items:stretch}ax-file-viewer-container .ax-file-viewer__thumbs-track .ax-carousel-slide,ax-file-viewer-container .ax-file-viewer__thumbs-track .swiper-slide{box-sizing:border-box;height:auto;width:7.5rem;max-width:7.5rem;overflow:hidden}ax-file-viewer-container .ax-file-viewer__thumb{box-sizing:border-box;display:flex;width:7.5rem;max-width:7.5rem;cursor:pointer;flex-direction:column;overflow:hidden;border-radius:.9rem;border:2px solid var(--ax-fv-border);background:var(--ax-fv-thumb-bg);transition:border-color .15s ease}ax-file-viewer-container .ax-file-viewer__thumb:hover{border-color:var(--ax-fv-border-strong)}ax-file-viewer-container .ax-file-viewer__thumb.swiper-slide-thumb-active,ax-file-viewer-container .ax-file-viewer__thumb.ax-file-viewer__thumb--active{border-color:var(--ax-fv-image)}ax-file-viewer-container .ax-file-viewer__thumb[data-type=video].ax-file-viewer__thumb--active,ax-file-viewer-container .ax-file-viewer__thumb[data-type=video].swiper-slide-thumb-active{border-color:var(--ax-fv-video)}ax-file-viewer-container .ax-file-viewer__thumb[data-type=audio].ax-file-viewer__thumb--active,ax-file-viewer-container .ax-file-viewer__thumb[data-type=audio].swiper-slide-thumb-active{border-color:var(--ax-fv-audio)}ax-file-viewer-container .ax-file-viewer__thumb[data-type=document].ax-file-viewer__thumb--active,ax-file-viewer-container .ax-file-viewer__thumb[data-type=document].swiper-slide-thumb-active{border-color:var(--ax-fv-document)}ax-file-viewer-container .ax-file-viewer__thumb[data-type=file].ax-file-viewer__thumb--active,ax-file-viewer-container .ax-file-viewer__thumb[data-type=file].swiper-slide-thumb-active{border-color:var(--ax-fv-file)}ax-file-viewer-container .ax-file-viewer__thumb-preview{box-sizing:border-box;display:flex;width:100%;max-width:100%;min-width:calc(var(--spacing, .25rem) * 0);align-items:center;justify-content:center;overflow:hidden;aspect-ratio:1.4;background:var(--ax-fv-thumb-preview)}ax-file-viewer-container .ax-file-viewer__thumb-preview i{font-size:1.45rem;color:var(--ax-fv-muted)}ax-file-viewer-container .ax-file-viewer__thumb-preview img{display:block;height:100%;width:100%;object-fit:cover}ax-file-viewer-container .ax-file-viewer__thumb[data-type=image] .ax-file-viewer__thumb-preview i{color:var(--ax-fv-image)}ax-file-viewer-container .ax-file-viewer__thumb[data-type=video] .ax-file-viewer__thumb-preview i{color:var(--ax-fv-video)}ax-file-viewer-container .ax-file-viewer__thumb[data-type=audio] .ax-file-viewer__thumb-preview i{color:var(--ax-fv-audio)}ax-file-viewer-container .ax-file-viewer__thumb[data-type=document] .ax-file-viewer__thumb-preview i{color:var(--ax-fv-document)}ax-file-viewer-container .ax-file-viewer__thumb[data-type=file] .ax-file-viewer__thumb-preview i{color:var(--ax-fv-file)}ax-file-viewer-container .ax-file-viewer__thumb-footer{box-sizing:border-box;display:grid;width:100%;max-width:100%;min-width:calc(var(--spacing, .25rem) * 0);align-items:center;grid-template-columns:minmax(0,1fr);gap:.3rem;padding:.4rem .45rem;border-top:1px solid var(--ax-fv-border);font-size:.65rem;color:var(--ax-fv-muted)}ax-file-viewer-container .ax-file-viewer__thumb-name{overflow:hidden;--tw-font-weight: var(--font-weight-medium, 500);font-weight:var(--font-weight-medium, 500);text-overflow:ellipsis;white-space:nowrap;color:var(--ax-fv-text)}ax-file-viewer-container .ax-carousel-pagination{display:none}@media(max-width:768px){ax-file-viewer-container{--ax-fv-stage-pad: .5rem;--ax-fv-nav-size: 2.25rem;border-radius:1rem}ax-file-viewer-container .ax-file-viewer__header{min-width:calc(var(--spacing, .25rem) * 0);gap:.5rem .75rem;padding:.65rem .75rem}ax-file-viewer-container .ax-file-viewer__name{font-size:.85rem}ax-file-viewer-container .ax-file-viewer__stage--nav{grid-template-columns:minmax(0,1fr) minmax(0,1fr);grid-template-rows:minmax(14rem,1fr) auto;grid-template-areas:\"canvas canvas\" \"prev next\";gap:.5rem;align-items:stretch}ax-file-viewer-container .ax-file-viewer__nav--prev{justify-self:end}ax-file-viewer-container .ax-file-viewer__nav--next{justify-self:start}ax-file-viewer-container .ax-file-viewer__canvas{min-height:14rem}ax-file-viewer-container .ax-file-viewer__thumbs{padding:.6rem .75rem .85rem}ax-file-viewer-container .ax-file-viewer__thumbs-track .ax-carousel-slide,ax-file-viewer-container .ax-file-viewer__thumbs-track .swiper-slide{width:5.75rem;max-width:5.75rem}ax-file-viewer-container .ax-file-viewer__thumb{width:5.75rem;max-width:5.75rem}}@media(max-width:480px){ax-file-viewer-container{--ax-fv-nav-size: 2rem;border-radius:.75rem}ax-file-viewer-container .ax-file-viewer__type-badge{display:none}ax-file-viewer-container .ax-file-viewer__thumbs{padding:calc(var(--spacing, .25rem) * 2)}ax-file-viewer-container .ax-file-viewer__thumbs-track .ax-carousel-slide,ax-file-viewer-container .ax-file-viewer__thumbs-track .swiper-slide{width:5.25rem;max-width:5.25rem}ax-file-viewer-container .ax-file-viewer__thumb{width:5.25rem;max-width:5.25rem}}ax-file-viewer-slide{box-sizing:border-box;display:flex;height:100%;min-height:calc(var(--spacing, .25rem) * 0);width:100%;min-width:calc(var(--spacing, .25rem) * 0);align-items:stretch;padding:calc(var(--spacing, .25rem) * 0);-webkit-user-select:none;user-select:none;justify-content:stretch}ax-file-viewer-image,ax-file-viewer-video,ax-file-viewer-audio,ax-file-viewer-pdf,ax-file-viewer-fallback{display:flex!important;width:100%!important;height:100%!important;min-width:0;min-height:0;box-sizing:border-box}}@property --tw-font-weight{syntax: \"*\"; inherits: false;}@property --tw-translate-x{syntax: \"*\"; inherits: false; initial-value: 0;}@property --tw-translate-y{syntax: \"*\"; inherits: false; initial-value: 0;}@property --tw-translate-z{syntax: \"*\"; inherits: false; initial-value: 0;}@property --tw-tracking{syntax: \"*\"; inherits: false;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-font-weight: initial;--tw-translate-x: 0;--tw-translate-y: 0;--tw-translate-z: 0;--tw-tracking: initial}}}\n/*! tailwindcss v4.1.16 | MIT License | https://tailwindcss.com */\n"] }]
474
+ }], propDecorators: { items: [{ type: i0.Input, args: [{ isSignal: true, alias: "items", required: false }] }], thumbnail: [{ type: i0.Input, args: [{ isSignal: true, alias: "thumbnail", required: false }] }], pagination: [{ type: i0.Input, args: [{ isSignal: true, alias: "pagination", required: false }] }], download: [{ type: i0.Input, args: [{ isSignal: true, alias: "download", required: false }] }], fullscreen: [{ type: i0.Input, args: [{ isSignal: true, alias: "fullscreen", required: false }] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }], mainCarouselRef: [{ type: i0.ViewChild, args: ['mainCarousel', { isSignal: true }] }], thumbCarouselRef: [{ type: i0.ViewChild, args: ['thumbCarousel', { isSignal: true }] }] } });
475
+
476
+ const TYPE_ICON_MAP = {
477
+ image: 'fa-light fa-image',
478
+ video: 'fa-light fa-video',
479
+ audio: 'fa-light fa-music',
480
+ document: 'fa-light fa-file-lines',
481
+ file: 'fa-light fa-file',
482
+ };
483
+ class AXFileViewerThumbnailsComponent {
484
+ constructor() {
485
+ this.service = inject(AXFileViewerService);
486
+ this.thumbnails = computed(() => this.service.items().map((item, index) => {
487
+ const type = resolveFileViewerFileType(item);
488
+ return {
489
+ id: item.id,
490
+ index,
491
+ type,
492
+ icon: TYPE_ICON_MAP[type] ?? TYPE_ICON_MAP['file'],
493
+ };
494
+ }), ...(ngDevMode ? [{ debugName: "thumbnails" }] : /* istanbul ignore next */ []));
495
+ }
496
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXFileViewerThumbnailsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
497
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXFileViewerThumbnailsComponent, isStandalone: true, selector: "ax-file-viewer-thumbnails", ngImport: i0, template: `
498
+ <div class="ax-file-viewer-thumbnails">
499
+ @for (thumb of thumbnails(); track thumb.id) {
500
+ <button
501
+ class="ax-file-viewer-thumb"
502
+ [class.ax-file-viewer-thumb--active]="thumb.index === service.selectedIndex()"
503
+ (click)="service.selectedIndex.set(thumb.index)"
504
+ >
505
+ <i [class]="thumb.icon"></i>
506
+ </button>
507
+ }
508
+ </div>
509
+ `, isInline: true, styles: [":host{display:block}.ax-file-viewer-thumbnails{display:flex;gap:.5rem;justify-content:center;padding:.5rem;flex-wrap:wrap}.ax-file-viewer-thumb{display:flex;align-items:center;justify-content:center;width:3rem;height:3rem;border-radius:var(--ax-sys-border-radius, .25rem);border:1px solid rgb(var(--ax-sys-color-border-lightest-surface));background:transparent;cursor:pointer;opacity:.5;transition:opacity .2s;font-size:1.25rem;color:rgb(var(--ax-sys-color-on-surface))}.ax-file-viewer-thumb--active{opacity:1;border-color:rgb(var(--ax-sys-color-primary))}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
510
+ }
511
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXFileViewerThumbnailsComponent, decorators: [{
512
+ type: Component,
513
+ args: [{ selector: 'ax-file-viewer-thumbnails', changeDetection: ChangeDetectionStrategy.OnPush, template: `
514
+ <div class="ax-file-viewer-thumbnails">
515
+ @for (thumb of thumbnails(); track thumb.id) {
516
+ <button
517
+ class="ax-file-viewer-thumb"
518
+ [class.ax-file-viewer-thumb--active]="thumb.index === service.selectedIndex()"
519
+ (click)="service.selectedIndex.set(thumb.index)"
520
+ >
521
+ <i [class]="thumb.icon"></i>
522
+ </button>
523
+ }
524
+ </div>
525
+ `, styles: [":host{display:block}.ax-file-viewer-thumbnails{display:flex;gap:.5rem;justify-content:center;padding:.5rem;flex-wrap:wrap}.ax-file-viewer-thumb{display:flex;align-items:center;justify-content:center;width:3rem;height:3rem;border-radius:var(--ax-sys-border-radius, .25rem);border:1px solid rgb(var(--ax-sys-color-border-lightest-surface));background:transparent;cursor:pointer;opacity:.5;transition:opacity .2s;font-size:1.25rem;color:rgb(var(--ax-sys-color-on-surface))}.ax-file-viewer-thumb--active{opacity:1;border-color:rgb(var(--ax-sys-color-primary))}\n"] }]
526
+ }] });
527
+
528
+ class AXFileViewerImageComponent {
529
+ constructor() {
530
+ this.payload = input.required(...(ngDevMode ? [{ debugName: "payload" }] : /* istanbul ignore next */ []));
531
+ this.service = inject(AXFileViewerService);
532
+ this.src = signal(null, ...(ngDevMode ? [{ debugName: "src" }] : /* istanbul ignore next */ []));
533
+ this.loading = signal(false, ...(ngDevMode ? [{ debugName: "loading" }] : /* istanbul ignore next */ []));
534
+ this.#resolve = effect(() => {
535
+ const p = this.payload();
536
+ if (p.active) {
537
+ this.loading.set(true);
538
+ void this.service
539
+ .resolveUrl(p.item, 'url')
540
+ .then((url) => this.src.set(url ?? null))
541
+ .finally(() => this.loading.set(false));
542
+ }
543
+ }, ...(ngDevMode ? [{ debugName: "#resolve" }] : /* istanbul ignore next */ []));
544
+ }
545
+ #resolve;
546
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXFileViewerImageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
547
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXFileViewerImageComponent, isStandalone: true, selector: "ax-file-viewer-image", inputs: { payload: { classPropertyName: "payload", publicName: "payload", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: `
548
+ @if (loading()) {
549
+ <ax-loading></ax-loading>
550
+ } @else if (src()) {
551
+ <img [src]="src()" [alt]="payload().item.name ?? 'Image'" />
552
+ }
553
+ `, isInline: true, styles: [":host{display:flex;justify-content:center;align-items:center;width:100%;height:100%;min-width:0;min-height:0;padding:.75rem;box-sizing:border-box}img{width:100%;height:100%;max-width:100%;max-height:100%;object-fit:contain;border-radius:.75rem}\n"], dependencies: [{ kind: "component", type: AXLoadingComponent, selector: "ax-loading", inputs: ["visible", "type", "context"], outputs: ["visibleChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
554
+ }
555
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXFileViewerImageComponent, decorators: [{
556
+ type: Component,
557
+ args: [{ selector: 'ax-file-viewer-image', changeDetection: ChangeDetectionStrategy.OnPush, imports: [AXLoadingComponent], template: `
558
+ @if (loading()) {
559
+ <ax-loading></ax-loading>
560
+ } @else if (src()) {
561
+ <img [src]="src()" [alt]="payload().item.name ?? 'Image'" />
562
+ }
563
+ `, styles: [":host{display:flex;justify-content:center;align-items:center;width:100%;height:100%;min-width:0;min-height:0;padding:.75rem;box-sizing:border-box}img{width:100%;height:100%;max-width:100%;max-height:100%;object-fit:contain;border-radius:.75rem}\n"] }]
564
+ }], propDecorators: { payload: [{ type: i0.Input, args: [{ isSignal: true, alias: "payload", required: true }] }] } });
565
+
566
+ var imageViewer_component = /*#__PURE__*/Object.freeze({
567
+ __proto__: null,
568
+ AXFileViewerImageComponent: AXFileViewerImageComponent
569
+ });
570
+
571
+ class AXFileViewerVideoComponent {
572
+ constructor() {
573
+ this.payload = input.required(...(ngDevMode ? [{ debugName: "payload" }] : /* istanbul ignore next */ []));
574
+ this.service = inject(AXFileViewerService);
575
+ this.src = signal(null, ...(ngDevMode ? [{ debugName: "src" }] : /* istanbul ignore next */ []));
576
+ this.loading = signal(false, ...(ngDevMode ? [{ debugName: "loading" }] : /* istanbul ignore next */ []));
577
+ this.#resolve = effect(() => {
578
+ const p = this.payload();
579
+ if (p.active) {
580
+ this.loading.set(true);
581
+ void this.service
582
+ .resolveUrl(p.item, 'url')
583
+ .then((url) => this.src.set(url ?? null))
584
+ .finally(() => this.loading.set(false));
585
+ }
586
+ }, ...(ngDevMode ? [{ debugName: "#resolve" }] : /* istanbul ignore next */ []));
587
+ }
588
+ #resolve;
589
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXFileViewerVideoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
590
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXFileViewerVideoComponent, isStandalone: true, selector: "ax-file-viewer-video", inputs: { payload: { classPropertyName: "payload", publicName: "payload", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: `
591
+ @if (loading()) {
592
+ <ax-loading></ax-loading>
593
+ } @else if (src()) {
594
+ <video controls [src]="src()"></video>
595
+ }
596
+ `, isInline: true, styles: [":host{display:flex;justify-content:center;align-items:center;width:100%;height:100%;min-width:0;min-height:0;padding:.75rem;box-sizing:border-box}video{width:100%;height:100%;max-width:100%;max-height:100%;object-fit:contain;border-radius:.75rem;background:rgb(var(--ax-sys-color-dark))}\n"], dependencies: [{ kind: "component", type: AXLoadingComponent, selector: "ax-loading", inputs: ["visible", "type", "context"], outputs: ["visibleChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
597
+ }
598
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXFileViewerVideoComponent, decorators: [{
599
+ type: Component,
600
+ args: [{ selector: 'ax-file-viewer-video', changeDetection: ChangeDetectionStrategy.OnPush, imports: [AXLoadingComponent], template: `
601
+ @if (loading()) {
602
+ <ax-loading></ax-loading>
603
+ } @else if (src()) {
604
+ <video controls [src]="src()"></video>
605
+ }
606
+ `, styles: [":host{display:flex;justify-content:center;align-items:center;width:100%;height:100%;min-width:0;min-height:0;padding:.75rem;box-sizing:border-box}video{width:100%;height:100%;max-width:100%;max-height:100%;object-fit:contain;border-radius:.75rem;background:rgb(var(--ax-sys-color-dark))}\n"] }]
607
+ }], propDecorators: { payload: [{ type: i0.Input, args: [{ isSignal: true, alias: "payload", required: true }] }] } });
608
+
609
+ var videoViewer_component = /*#__PURE__*/Object.freeze({
610
+ __proto__: null,
611
+ AXFileViewerVideoComponent: AXFileViewerVideoComponent
612
+ });
613
+
614
+ class AXFileViewerAudioComponent {
615
+ constructor() {
616
+ this.payload = input.required(...(ngDevMode ? [{ debugName: "payload" }] : /* istanbul ignore next */ []));
617
+ this.service = inject(AXFileViewerService);
618
+ this.src = signal(null, ...(ngDevMode ? [{ debugName: "src" }] : /* istanbul ignore next */ []));
619
+ this.loading = signal(false, ...(ngDevMode ? [{ debugName: "loading" }] : /* istanbul ignore next */ []));
620
+ this.#resolve = effect(() => {
621
+ const p = this.payload();
622
+ if (p.active) {
623
+ this.loading.set(true);
624
+ void this.service
625
+ .resolveUrl(p.item, 'url')
626
+ .then((url) => this.src.set(url ?? null))
627
+ .finally(() => this.loading.set(false));
628
+ }
629
+ }, ...(ngDevMode ? [{ debugName: "#resolve" }] : /* istanbul ignore next */ []));
630
+ }
631
+ #resolve;
632
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXFileViewerAudioComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
633
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXFileViewerAudioComponent, isStandalone: true, selector: "ax-file-viewer-audio", inputs: { payload: { classPropertyName: "payload", publicName: "payload", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: `
634
+ @if (loading()) {
635
+ <ax-loading></ax-loading>
636
+ } @else if (src()) {
637
+ <audio controls [src]="src()"></audio>
638
+ }
639
+ `, isInline: true, styles: [":host{display:flex;justify-content:center;align-items:center;width:100%;height:100%;min-width:0;min-height:0;padding:1rem;box-sizing:border-box}audio{width:100%;max-width:min(40rem,100%);min-width:0}\n"], dependencies: [{ kind: "component", type: AXLoadingComponent, selector: "ax-loading", inputs: ["visible", "type", "context"], outputs: ["visibleChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
640
+ }
641
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXFileViewerAudioComponent, decorators: [{
642
+ type: Component,
643
+ args: [{ selector: 'ax-file-viewer-audio', changeDetection: ChangeDetectionStrategy.OnPush, imports: [AXLoadingComponent], template: `
644
+ @if (loading()) {
645
+ <ax-loading></ax-loading>
646
+ } @else if (src()) {
647
+ <audio controls [src]="src()"></audio>
648
+ }
649
+ `, styles: [":host{display:flex;justify-content:center;align-items:center;width:100%;height:100%;min-width:0;min-height:0;padding:1rem;box-sizing:border-box}audio{width:100%;max-width:min(40rem,100%);min-width:0}\n"] }]
650
+ }], propDecorators: { payload: [{ type: i0.Input, args: [{ isSignal: true, alias: "payload", required: true }] }] } });
651
+
652
+ var audioViewer_component = /*#__PURE__*/Object.freeze({
653
+ __proto__: null,
654
+ AXFileViewerAudioComponent: AXFileViewerAudioComponent
655
+ });
656
+
657
+ class AXFileViewerPdfComponent {
658
+ constructor() {
659
+ this.payload = input.required(...(ngDevMode ? [{ debugName: "payload" }] : /* istanbul ignore next */ []));
660
+ this.service = inject(AXFileViewerService);
661
+ this.sanitizer = inject(DomSanitizer);
662
+ this.safeSrc = signal(null, ...(ngDevMode ? [{ debugName: "safeSrc" }] : /* istanbul ignore next */ []));
663
+ this.loading = signal(false, ...(ngDevMode ? [{ debugName: "loading" }] : /* istanbul ignore next */ []));
664
+ this.#resolve = effect(() => {
665
+ const p = this.payload();
666
+ if (p.active) {
667
+ this.loading.set(true);
668
+ void this.service
669
+ .resolveUrl(p.item, 'url')
670
+ .then((url) => {
671
+ this.safeSrc.set(url ? this.sanitizer.bypassSecurityTrustResourceUrl(url) : null);
672
+ })
673
+ .finally(() => this.loading.set(false));
674
+ }
675
+ }, ...(ngDevMode ? [{ debugName: "#resolve" }] : /* istanbul ignore next */ []));
676
+ }
677
+ #resolve;
678
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXFileViewerPdfComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
679
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXFileViewerPdfComponent, isStandalone: true, selector: "ax-file-viewer-pdf", inputs: { payload: { classPropertyName: "payload", publicName: "payload", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: `
680
+ @if (loading()) {
681
+ <ax-loading></ax-loading>
682
+ } @else if (safeSrc()) {
683
+ <ax-pdf-reader [src]="safeSrc()"></ax-pdf-reader>
684
+ }
685
+ `, isInline: true, styles: [":host{display:flex;width:100%;height:100%;min-width:0;min-height:0;padding:.5rem;box-sizing:border-box}ax-pdf-reader{display:block;width:100%;height:100%}\n"], dependencies: [{ kind: "component", type: AXLoadingComponent, selector: "ax-loading", inputs: ["visible", "type", "context"], outputs: ["visibleChange"] }, { kind: "component", type: AXPdfReaderComponent, selector: "ax-pdf-reader", inputs: ["src"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
686
+ }
687
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXFileViewerPdfComponent, decorators: [{
688
+ type: Component,
689
+ args: [{ selector: 'ax-file-viewer-pdf', changeDetection: ChangeDetectionStrategy.OnPush, imports: [AXLoadingComponent, AXPdfReaderComponent], template: `
690
+ @if (loading()) {
691
+ <ax-loading></ax-loading>
692
+ } @else if (safeSrc()) {
693
+ <ax-pdf-reader [src]="safeSrc()"></ax-pdf-reader>
694
+ }
695
+ `, styles: [":host{display:flex;width:100%;height:100%;min-width:0;min-height:0;padding:.5rem;box-sizing:border-box}ax-pdf-reader{display:block;width:100%;height:100%}\n"] }]
696
+ }], propDecorators: { payload: [{ type: i0.Input, args: [{ isSignal: true, alias: "payload", required: true }] }] } });
697
+
698
+ var pdfViewer_component = /*#__PURE__*/Object.freeze({
699
+ __proto__: null,
700
+ AXFileViewerPdfComponent: AXFileViewerPdfComponent
701
+ });
702
+
703
+ class AXFileViewerFileFallbackComponent {
704
+ constructor() {
705
+ this.payload = input.required(...(ngDevMode ? [{ debugName: "payload" }] : /* istanbul ignore next */ []));
706
+ this.name = computed(() => this.payload().item.name, ...(ngDevMode ? [{ debugName: "name" }] : /* istanbul ignore next */ []));
707
+ }
708
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXFileViewerFileFallbackComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
709
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXFileViewerFileFallbackComponent, isStandalone: true, selector: "ax-file-viewer-fallback", inputs: { payload: { classPropertyName: "payload", publicName: "payload", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: `
710
+ <div class="ax-file-viewer-fallback">
711
+ <i class="fa-light fa-file ax-file-viewer-fallback__icon"></i>
712
+ @if (name()) {
713
+ <span class="ax-file-viewer-fallback__name">{{ name() }}</span>
714
+ }
715
+ </div>
716
+ `, isInline: true, styles: [":host{display:flex;justify-content:center;align-items:center;width:100%;height:100%;min-width:0;min-height:0;box-sizing:border-box}.ax-file-viewer-fallback{display:flex;flex-direction:column;align-items:center;gap:.5rem;color:inherit;opacity:.85}.ax-file-viewer-fallback__icon{font-size:3rem;opacity:.55}.ax-file-viewer-fallback__name{font-size:.875rem;opacity:.75;max-width:min(20rem,80vw);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
717
+ }
718
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXFileViewerFileFallbackComponent, decorators: [{
719
+ type: Component,
720
+ args: [{ selector: 'ax-file-viewer-fallback', changeDetection: ChangeDetectionStrategy.OnPush, template: `
721
+ <div class="ax-file-viewer-fallback">
722
+ <i class="fa-light fa-file ax-file-viewer-fallback__icon"></i>
723
+ @if (name()) {
724
+ <span class="ax-file-viewer-fallback__name">{{ name() }}</span>
725
+ }
726
+ </div>
727
+ `, styles: [":host{display:flex;justify-content:center;align-items:center;width:100%;height:100%;min-width:0;min-height:0;box-sizing:border-box}.ax-file-viewer-fallback{display:flex;flex-direction:column;align-items:center;gap:.5rem;color:inherit;opacity:.85}.ax-file-viewer-fallback__icon{font-size:3rem;opacity:.55}.ax-file-viewer-fallback__name{font-size:.875rem;opacity:.75;max-width:min(20rem,80vw);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}\n"] }]
728
+ }], propDecorators: { payload: [{ type: i0.Input, args: [{ isSignal: true, alias: "payload", required: true }] }] } });
729
+
730
+ var fileFallbackViewer_component = /*#__PURE__*/Object.freeze({
731
+ __proto__: null,
732
+ AXFileViewerFileFallbackComponent: AXFileViewerFileFallbackComponent
733
+ });
734
+
735
+ /**
736
+ * Generated bundle index. Do not edit.
737
+ */
738
+
739
+ export { AXFileViewerAudioComponent, AXFileViewerContainerComponent, AXFileViewerFileFallbackComponent, AXFileViewerImageComponent, AXFileViewerPdfComponent, AXFileViewerService, AXFileViewerSlideComponent, AXFileViewerThumbPreviewComponent, AXFileViewerThumbnailsComponent, AXFileViewerVideoComponent, buildFileViewerExtensionHint, createFileViewerFileTypes, provideFileViewer, resolveFileViewerFileType };
740
+ //# sourceMappingURL=acorex-components-file-viewer.mjs.map