arxatec-ui 0.1.67 → 0.1.71

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 (107) hide show
  1. package/README.md +76 -1
  2. package/dist/components/file_view/components/file_simple_preview_render/index.js +28 -34
  3. package/dist/components/file_view/components/file_simple_preview_render/index.js.map +1 -1
  4. package/dist/components/file_view/components/file_simple_preview_sheet/index.js +1 -1
  5. package/dist/components/file_view/components/file_simple_preview_sheet/index.js.map +1 -1
  6. package/dist/components/file_view/components/file_url_preview_render/index.js +20 -22
  7. package/dist/components/file_view/components/file_url_preview_render/index.js.map +1 -1
  8. package/dist/components/file_view/components/file_url_preview_sheet/index.js +1 -1
  9. package/dist/components/file_view/components/file_url_preview_sheet/index.js.map +1 -1
  10. package/dist/components/file_view/components/file_view_sheet/components/file_view_sheet_panel_content/index.d.ts +1 -1
  11. package/dist/components/file_view/components/file_view_sheet/components/file_view_sheet_panel_content/index.js +51 -45
  12. package/dist/components/file_view/components/file_view_sheet/components/file_view_sheet_panel_content/index.js.map +1 -1
  13. package/dist/components/file_view/components/file_view_sheet/index.d.ts +1 -1
  14. package/dist/components/file_view/components/file_view_sheet/index.js +5 -2
  15. package/dist/components/file_view/components/file_view_sheet/index.js.map +1 -1
  16. package/dist/components/file_view/components/file_view_sheet/types/index.d.ts +2 -0
  17. package/dist/components/file_view/components/image_viewer/index.d.ts +1 -1
  18. package/dist/components/file_view/components/image_viewer/index.js +5 -4
  19. package/dist/components/file_view/components/image_viewer/index.js.map +1 -1
  20. package/dist/components/file_view/components/image_viewer/utils/heic/index.js +6 -7
  21. package/dist/components/file_view/components/image_viewer/utils/heic/index.js.map +1 -1
  22. package/dist/components/file_view/components/lazy_viewer/components/pending/index.d.ts +5 -0
  23. package/dist/components/file_view/components/lazy_viewer/components/pending/index.js +7 -0
  24. package/dist/components/file_view/components/lazy_viewer/components/pending/index.js.map +1 -0
  25. package/dist/components/file_view/components/lazy_viewer/index.d.ts +4 -0
  26. package/dist/components/file_view/components/lazy_viewer/index.js +24 -0
  27. package/dist/components/file_view/components/lazy_viewer/index.js.map +1 -0
  28. package/dist/components/file_view/components/pdf_viewer/components/content/index.js +1 -0
  29. package/dist/components/file_view/components/pdf_viewer/components/content/index.js.map +1 -1
  30. package/dist/components/file_view/components/pdf_viewer/index.d.ts +1 -1
  31. package/dist/components/file_view/components/pdf_viewer/index.js +3 -2
  32. package/dist/components/file_view/components/pdf_viewer/index.js.map +1 -1
  33. package/dist/components/file_view/components/template_viewer/components/pdf_template_viewer/components/pdf_template_viewer_content/index.js +1 -0
  34. package/dist/components/file_view/components/template_viewer/components/pdf_template_viewer/components/pdf_template_viewer_content/index.js.map +1 -1
  35. package/dist/components/file_view/index.d.ts +2 -1
  36. package/dist/components/file_view/utilities/pdf_worker_configuration.d.ts +3 -0
  37. package/dist/components/file_view/utilities/pdf_worker_configuration.js +15 -0
  38. package/dist/components/file_view/utilities/pdf_worker_configuration.js.map +1 -0
  39. package/dist/components/file_view/utilities/setup_pdf_worker/index.js +12 -0
  40. package/dist/components/file_view/utilities/setup_pdf_worker/index.js.map +1 -0
  41. package/dist/components/icons/components/apple_isotype/index.d.ts +2 -0
  42. package/dist/components/icons/components/apple_isotype/index.js +14 -0
  43. package/dist/components/icons/components/apple_isotype/index.js.map +1 -0
  44. package/dist/components/icons/components/index.d.ts +1 -0
  45. package/dist/components/logo/constants/index.d.ts +2 -0
  46. package/dist/components/logo/constants/index.js +29 -0
  47. package/dist/components/logo/constants/index.js.map +1 -0
  48. package/dist/components/logo/index.d.ts +5 -3
  49. package/dist/components/logo/index.js +21 -12
  50. package/dist/components/logo/index.js.map +1 -1
  51. package/dist/components/logo/types/index.d.ts +10 -0
  52. package/dist/components/sonner/index.js +15 -13
  53. package/dist/components/sonner/index.js.map +1 -1
  54. package/dist/exports/file-view-audio.d.ts +1 -0
  55. package/dist/exports/file-view-code.d.ts +2 -0
  56. package/dist/exports/file-view-core.d.ts +22 -0
  57. package/dist/exports/file-view-docx.d.ts +1 -0
  58. package/dist/exports/file-view-image.d.ts +3 -0
  59. package/dist/exports/file-view-lazy.d.ts +1 -0
  60. package/dist/exports/file-view-office.d.ts +1 -0
  61. package/dist/exports/file-view-pdf.d.ts +2 -0
  62. package/dist/exports/file-view-summary.d.ts +2 -0
  63. package/dist/exports/file-view-template.d.ts +3 -0
  64. package/dist/exports/file-view-transcription.d.ts +2 -0
  65. package/dist/exports/file-view-video.d.ts +2 -0
  66. package/dist/exports/file-view-xlsx.d.ts +1 -0
  67. package/dist/file-view-audio.js +2 -0
  68. package/dist/file-view-code.js +3 -0
  69. package/dist/file-view-core.js +22 -0
  70. package/dist/file-view-docx.js +2 -0
  71. package/dist/file-view-image.js +6 -0
  72. package/dist/file-view-lazy.js +2 -0
  73. package/dist/file-view-office.js +2 -0
  74. package/dist/file-view-pdf.js +5 -0
  75. package/dist/file-view-summary.js +3 -0
  76. package/dist/file-view-template.js +4 -0
  77. package/dist/file-view-transcription.js +3 -0
  78. package/dist/file-view-video.js +3 -0
  79. package/dist/file-view-xlsx.js +2 -0
  80. package/dist/file-view.js +44 -43
  81. package/dist/fonts/cormorant-garamond-italic-cyrillic-ext.woff2 +0 -0
  82. package/dist/fonts/cormorant-garamond-italic-cyrillic.woff2 +0 -0
  83. package/dist/fonts/cormorant-garamond-italic-latin-ext.woff2 +0 -0
  84. package/dist/fonts/cormorant-garamond-italic-latin.woff2 +0 -0
  85. package/dist/fonts/cormorant-garamond-italic-vietnamese.woff2 +0 -0
  86. package/dist/fonts/cormorant-garamond-normal-cyrillic-ext.woff2 +0 -0
  87. package/dist/fonts/cormorant-garamond-normal-cyrillic.woff2 +0 -0
  88. package/dist/fonts/cormorant-garamond-normal-latin-ext.woff2 +0 -0
  89. package/dist/fonts/cormorant-garamond-normal-latin.woff2 +0 -0
  90. package/dist/fonts/cormorant-garamond-normal-vietnamese.woff2 +0 -0
  91. package/dist/fonts/cormorantgaramond-OFL.txt +93 -0
  92. package/dist/fonts/jetbrains-mono-italic-cyrillic-ext.woff2 +0 -0
  93. package/dist/fonts/jetbrains-mono-italic-cyrillic.woff2 +0 -0
  94. package/dist/fonts/jetbrains-mono-italic-greek.woff2 +0 -0
  95. package/dist/fonts/jetbrains-mono-italic-latin-ext.woff2 +0 -0
  96. package/dist/fonts/jetbrains-mono-italic-latin.woff2 +0 -0
  97. package/dist/fonts/jetbrains-mono-italic-vietnamese.woff2 +0 -0
  98. package/dist/fonts/jetbrains-mono-normal-cyrillic-ext.woff2 +0 -0
  99. package/dist/fonts/jetbrains-mono-normal-cyrillic.woff2 +0 -0
  100. package/dist/fonts/jetbrains-mono-normal-greek.woff2 +0 -0
  101. package/dist/fonts/jetbrains-mono-normal-latin-ext.woff2 +0 -0
  102. package/dist/fonts/jetbrains-mono-normal-latin.woff2 +0 -0
  103. package/dist/fonts/jetbrains-mono-normal-vietnamese.woff2 +0 -0
  104. package/dist/fonts/jetbrainsmono-OFL.txt +93 -0
  105. package/dist/index.js +41 -40
  106. package/dist/styles.css +242 -2
  107. package/package.json +78 -8
package/README.md CHANGED
@@ -93,7 +93,29 @@ Patterns follow **shadcn**-style APIs (compound components with named exports).
93
93
  - **Surfaces & navigation:** `Card`, `Dialog`, `Sheet`, `Drawer`, `Popover`, `Tooltip`, `DropdownMenu`, `ContextMenu`, `Tabs`, `Breadcrumb`, `Pagination`, `PaginationController`, `Sidebar`, `Command`, `Collapsible`, and more.
94
94
  - **Data & feedback:** `Table`, `Badge`, `Skeleton`, `Progress`, `StatusMessage`, `AsyncBoundary`, `AsyncCommandList`, `Chart`, `Carousel`, and more.
95
95
  - **Maps:** `MapView`, `MapPicker`.
96
- - **Extras:** `Toaster` (Sonner), `IconPicker`, `EmojiPicker`, brand icons, animated icons, etc.
96
+ - **Extras:** `Toaster` (Sonner), `Logo`, `IconPicker`, `EmojiPicker`, brand icons, animated icons, etc.
97
+
98
+ `Logo` accepts `variant="arxatec" | "academy" | "management"` starting with
99
+ `0.1.71`. Omitting `variant` renders the original Arxatec logo. All three inline
100
+ SVGs preserve their proportions and inherit their color through `currentColor`:
101
+
102
+ ```tsx
103
+ import { Logo } from "arxatec-ui";
104
+
105
+ <Logo className="h-8 w-auto text-foreground" />;
106
+ <Logo variant="academy" className="h-8 w-auto text-foreground" />;
107
+ <Logo variant="management" className="h-8 w-auto text-foreground" />;
108
+ ```
109
+
110
+ `AppleIsotype` is an inline SVG with a transparent background. It inherits its
111
+ color through `currentColor` and accepts SVG props, including `className` and
112
+ ARIA attributes:
113
+
114
+ ```tsx
115
+ import { AppleIsotype } from "arxatec-ui";
116
+
117
+ <AppleIsotype className="size-4 text-foreground" aria-hidden="true" />;
118
+ ```
97
119
 
98
120
  The full list matches the `export *` entries in [`src/index.ts`](./src/index.ts).
99
121
 
@@ -136,3 +158,56 @@ Publishing to npm requires **2FA**; use `npm publish --otp=...` when prompted.
136
158
  ## License
137
159
 
138
160
  MIT. See [LICENSE](./LICENSE).
161
+
162
+ ## File-view engines on demand (0.1.69)
163
+
164
+ Existing `arxatec-ui/file-view` exports remain compatible. Applications that need
165
+ bounded startup downloads should use the lightweight shell and lazy engines:
166
+
167
+ ```tsx
168
+ import {
169
+ FileViewSheet,
170
+ configureFileViewPdfWorker,
171
+ } from "arxatec-ui/file-view/core";
172
+ import { lazyFileViewer } from "arxatec-ui/file-view/lazy";
173
+ import type { FilePdfViewerProps } from "arxatec-ui/file-view/pdf";
174
+
175
+ configureFileViewPdfWorker(localHashedWorkerUrl);
176
+ const PdfViewer = lazyFileViewer<FilePdfViewerProps>(() =>
177
+ import("arxatec-ui/file-view/pdf").then(({ FilePdfViewer }) => ({
178
+ default: FilePdfViewer,
179
+ })),
180
+ );
181
+ ```
182
+
183
+ Engine entries under `/file-view/` are `pdf`, `image`, `office`, `code`, `template`,
184
+ `docx`, `xlsx`, `audio`, `video`, `summary` and `transcription`. The core does not
185
+ import PDF or another engine. HEIC conversion loads `heic2any` only for HEIC.
186
+ The wrapper loads without adding loading, error or retry controls. Loading
187
+ callbacks reach the existing parent sheet; a failed load ends its pending state.
188
+ Closing and reopening the sheet allows another load attempt.
189
+
190
+ `FileViewSheet` accepts `lazyPanels?: boolean`, default `false`. Set it to `true`
191
+ to mount only the initial panel and mount each other panel on its first visit.
192
+ Visited panels remain mounted, preserving edits, annotations and zoom, until
193
+ close or `fileKey` changes. `onActiveTabChange` reports the active panel. Render
194
+ callbacks receive `isActive`; query consumers should use it to pause summary and
195
+ transcription reads. Hidden-panel loading must not replace the active panel.
196
+
197
+ Configure a local hashed PDF worker before opening PDF. Configuration itself is
198
+ lightweight; deferred setup respects it and later configuration updates it. Match
199
+ the worker version exactly to `pdfjs-dist` resolved by this package's `react-pdf`.
200
+ The worker URL can use web/PWA origin or Electron `app://arxatec`. Build consumers
201
+ with the package's worker setup marked as a side effect. PDF and image viewers
202
+ forward `onLoadingChange` until their content is ready.
203
+
204
+ Import `arxatec-ui/styles.css` once. Font faces retain ArxatecSans,
205
+ Cormorant Garamond (300–700, normal/italic) and JetBrains Mono (100–800,
206
+ normal/italic), with local licensed assets and `font-display: swap`. They download
207
+ only when matching content uses them; omit fonts from PWA precache and cache
208
+ requested faces at runtime. Consumers share `react-hook-form`, `@tiptap/core` and
209
+ `@tiptap/react` as peers alongside React and React Query.
210
+
211
+ Publication requires owner PR merge and clean-main publish. The platform's
212
+ minimum release age is seven days; validate a tarball in isolation before that
213
+ consumer update.
@@ -1,59 +1,53 @@
1
- import { FilePdfViewer as e } from "../pdf_viewer/index.js";
2
- import { FileImageViewer as t } from "../image_viewer/index.js";
3
- import { FileVideoPlayer as n } from "../video_player/index.js";
4
- import { FileAudioPlayer as r } from "../audio_player/index.js";
5
- import { FileUnknownViewer as i } from "../unknown_viewer/index.js";
6
- import { FileBlobOfficeUnavailable as a } from "../blob_office_unavailable/index.js";
7
- import { FileDocxPreviewViewer as o } from "../docx_preview_viewer/index.js";
8
- import { effectiveMimeFromFile as s } from "../../utilities/effective_mime_from_file.js";
9
- import { FileSourceFileViewer as c } from "../file_source_file_viewer/index.js";
10
- import { FileXlsxPreviewViewer as l } from "../xlsx_preview_viewer/index.js";
11
- import { downloadFromUrl as u } from "../../utilities/download_from_url.js";
12
- import { CODE_FILE_EXTENSIONS as d, CODE_MIME_PREFIXES as f, OFFICE_MIME_TYPES as p } from "./constants/index.js";
13
- import { jsx as m } from "react/jsx-runtime";
1
+ import { FileUnknownViewer as e } from "../unknown_viewer/index.js";
2
+ import { lazyFileViewer as t } from "../lazy_viewer/index.js";
3
+ import { FileBlobOfficeUnavailable as n } from "../blob_office_unavailable/index.js";
4
+ import { downloadFromUrl as r } from "../../utilities/download_from_url.js";
5
+ import { effectiveMimeFromFile as i } from "../../utilities/effective_mime_from_file.js";
6
+ import { CODE_FILE_EXTENSIONS as a, CODE_MIME_PREFIXES as o, OFFICE_MIME_TYPES as s } from "./constants/index.js";
7
+ import { jsx as c } from "react/jsx-runtime";
14
8
  //#region src/components/file_view/components/file_simple_preview_render/index.tsx
15
- var h = ({ file: h, url: g, onLoadingChange: _ }) => {
16
- let v = s(h), y = () => u(g, h.name);
17
- return v === "application/pdf" ? /* @__PURE__ */ m(e, {
9
+ var l = t(() => import("../audio_player/index.js").then((e) => ({ default: e.FileAudioPlayer }))), u = t(() => import("../docx_preview_viewer/index.js").then((e) => ({ default: e.FileDocxPreviewViewer }))), d = t(() => import("../image_viewer/index.js").then((e) => ({ default: e.FileImageViewer }))), f = t(() => import("../pdf_viewer/index.js").then((e) => ({ default: e.FilePdfViewer }))), p = t(() => import("../file_source_file_viewer/index.js").then((e) => ({ default: e.FileSourceFileViewer }))), m = t(() => import("../video_player/index.js").then((e) => ({ default: e.FileVideoPlayer }))), h = t(() => import("../xlsx_preview_viewer/index.js").then((e) => ({ default: e.FileXlsxPreviewViewer }))), g = ({ file: t, url: g, onLoadingChange: _ }) => {
10
+ let v = i(t), y = () => r(g, t.name);
11
+ return v === "application/pdf" ? /* @__PURE__ */ c(f, {
18
12
  url: g,
19
- fileName: h.name,
13
+ fileName: t.name,
20
14
  onDownload: y,
21
15
  onLoadingChange: _
22
- }) : v.startsWith("image/") ? /* @__PURE__ */ m(t, {
16
+ }) : v.startsWith("image/") ? /* @__PURE__ */ c(d, {
23
17
  url: g,
24
18
  mimeType: v,
25
19
  fileId: g,
26
- fileName: h.name,
20
+ fileName: t.name,
27
21
  onDownload: y,
28
22
  onLoadingChange: _
29
- }) : v.startsWith("video/") ? /* @__PURE__ */ m(n, {
23
+ }) : v.startsWith("video/") ? /* @__PURE__ */ c(m, {
30
24
  url: g,
31
- fileName: h.name,
25
+ fileName: t.name,
32
26
  onDownload: y,
33
27
  onLoadingChange: _
34
- }) : v.startsWith("audio/") ? /* @__PURE__ */ m(r, {
28
+ }) : v.startsWith("audio/") ? /* @__PURE__ */ c(l, {
35
29
  url: g,
36
- fileName: h.name,
30
+ fileName: t.name,
37
31
  onDownload: y,
38
32
  onLoadingChange: _
39
- }) : f.some((e) => v.startsWith(e)) || d.test(h.name) ? /* @__PURE__ */ m(c, {
40
- file: h,
33
+ }) : o.some((e) => v.startsWith(e)) || a.test(t.name) ? /* @__PURE__ */ c(p, {
34
+ file: t,
41
35
  onLoadingChange: _
42
- }) : v === "application/vnd.openxmlformats-officedocument.wordprocessingml.document" ? /* @__PURE__ */ m(o, {
43
- file: h,
36
+ }) : v === "application/vnd.openxmlformats-officedocument.wordprocessingml.document" ? /* @__PURE__ */ c(u, {
37
+ file: t,
44
38
  onLoadingChange: _
45
- }) : v === "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" || v === "application/vnd.ms-excel" ? /* @__PURE__ */ m(l, {
46
- file: h,
39
+ }) : v === "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" || v === "application/vnd.ms-excel" ? /* @__PURE__ */ c(h, {
40
+ file: t,
47
41
  onLoadingChange: _
48
- }) : p.includes(v) ? /* @__PURE__ */ m(a, {
42
+ }) : s.includes(v) ? /* @__PURE__ */ c(n, {
49
43
  url: g,
50
- fileName: h.name
51
- }) : /* @__PURE__ */ m(i, {
52
- fileName: h.name,
44
+ fileName: t.name
45
+ }) : /* @__PURE__ */ c(e, {
46
+ fileName: t.name,
53
47
  onDownload: y
54
48
  });
55
49
  };
56
50
  //#endregion
57
- export { h as FileSimplePreviewRender };
51
+ export { g as FileSimplePreviewRender };
58
52
 
59
53
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../../../src/components/file_view/components/file_simple_preview_render/index.tsx"],"sourcesContent":["import { FileAudioPlayer } from \"../audio_player\";\nimport { FileBlobOfficeUnavailable } from \"../blob_office_unavailable\";\nimport { FileDocxPreviewViewer } from \"../docx_preview_viewer\";\nimport { FileImageViewer } from \"../image_viewer\";\nimport { FilePdfViewer } from \"../pdf_viewer\";\nimport { FileSourceFileViewer } from \"../file_source_file_viewer\";\nimport { FileUnknownViewer } from \"../unknown_viewer\";\nimport { FileVideoPlayer } from \"../video_player\";\nimport { FileXlsxPreviewViewer } from \"../xlsx_preview_viewer\";\nimport { downloadFromUrl } from \"../../utilities/download_from_url\";\nimport { effectiveMimeFromFile } from \"../../utilities/effective_mime_from_file\";\nimport { CODE_FILE_EXTENSIONS, CODE_MIME_PREFIXES, DOCX_MIME, OFFICE_MIME_TYPES, XLSX_MIME, XLS_MIME } from \"./constants\";\nimport type { FileViewLoadingChangeHandler } from \"../../types\";\n\nexport interface FileSimplePreviewRenderProps {\n file: File;\n url: string;\n onLoadingChange?: FileViewLoadingChangeHandler;\n}\n\nexport const FileSimplePreviewRender = ({\n file,\n url,\n onLoadingChange,\n}: FileSimplePreviewRenderProps) => {\n const mimeType = effectiveMimeFromFile(file);\n const download = () => downloadFromUrl(url, file.name);\n\n if (mimeType === \"application/pdf\") {\n return (\n <FilePdfViewer\n url={url}\n fileName={file.name}\n onDownload={download}\n onLoadingChange={onLoadingChange}\n />\n );\n }\n\n if (mimeType.startsWith(\"image/\")) {\n return (\n <FileImageViewer\n url={url}\n mimeType={mimeType}\n fileId={url}\n fileName={file.name}\n onDownload={download}\n onLoadingChange={onLoadingChange}\n />\n );\n }\n\n if (mimeType.startsWith(\"video/\")) {\n return (\n <FileVideoPlayer\n url={url}\n fileName={file.name}\n onDownload={download}\n onLoadingChange={onLoadingChange}\n />\n );\n }\n\n if (mimeType.startsWith(\"audio/\")) {\n return (\n <FileAudioPlayer\n url={url}\n fileName={file.name}\n onDownload={download}\n onLoadingChange={onLoadingChange}\n />\n );\n }\n\n const isCode =\n CODE_MIME_PREFIXES.some((prefix) => mimeType.startsWith(prefix)) ||\n CODE_FILE_EXTENSIONS.test(file.name);\n\n if (isCode) {\n return <FileSourceFileViewer file={file} onLoadingChange={onLoadingChange} />;\n }\n\n if (mimeType === DOCX_MIME) {\n return <FileDocxPreviewViewer file={file} onLoadingChange={onLoadingChange} />;\n }\n\n if (mimeType === XLSX_MIME || mimeType === XLS_MIME) {\n return <FileXlsxPreviewViewer file={file} onLoadingChange={onLoadingChange} />;\n }\n\n if ((OFFICE_MIME_TYPES as readonly string[]).includes(mimeType)) {\n return <FileBlobOfficeUnavailable url={url} fileName={file.name} />;\n }\n\n return <FileUnknownViewer fileName={file.name} onDownload={download} />;\n};\n"],"mappings":";;;;;;;;;;;;;;AAoBA,IAAa,KAA2B,EACtC,SACA,QACA,yBACkC;CAClC,IAAM,IAAW,EAAsB,EAAK,EACtC,UAAiB,EAAgB,GAAK,EAAK,KAAK;AAoEtD,QAlEI,MAAa,oBAEb,kBAAC,GAAD;EACO;EACL,UAAU,EAAK;EACf,YAAY;EACK;EACjB,CAAA,GAIF,EAAS,WAAW,SAAS,GAE7B,kBAAC,GAAD;EACO;EACK;EACV,QAAQ;EACR,UAAU,EAAK;EACf,YAAY;EACK;EACjB,CAAA,GAIF,EAAS,WAAW,SAAS,GAE7B,kBAAC,GAAD;EACO;EACL,UAAU,EAAK;EACf,YAAY;EACK;EACjB,CAAA,GAIF,EAAS,WAAW,SAAS,GAE7B,kBAAC,GAAD;EACO;EACL,UAAU,EAAK;EACf,YAAY;EACK;EACjB,CAAA,GAKJ,EAAmB,MAAM,MAAW,EAAS,WAAW,EAAO,CAAC,IAChE,EAAqB,KAAK,EAAK,KAAK,GAG7B,kBAAC,GAAD;EAA4B;EAAuB;EAAmB,CAAA,GAG3E,MAAA,4EACK,kBAAC,GAAD;EAA6B;EAAuB;EAAmB,CAAA,GAG5E,MAAA,uEAA0B,MAAA,6BACrB,kBAAC,GAAD;EAA6B;EAAuB;EAAmB,CAAA,GAG3E,EAAwC,SAAS,EAAS,GACtD,kBAAC,GAAD;EAAgC;EAAK,UAAU,EAAK;EAAQ,CAAA,GAG9D,kBAAC,GAAD;EAAmB,UAAU,EAAK;EAAM,YAAY;EAAY,CAAA"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../../src/components/file_view/components/file_simple_preview_render/index.tsx"],"sourcesContent":["import type { ComponentProps } from \"react\";\nimport { lazyFileViewer } from \"../lazy_viewer\";\nimport { FileBlobOfficeUnavailable } from \"../blob_office_unavailable\";\nimport { FileUnknownViewer } from \"../unknown_viewer\";\nimport { downloadFromUrl } from \"../../utilities/download_from_url\";\nimport { effectiveMimeFromFile } from \"../../utilities/effective_mime_from_file\";\nimport {\n CODE_FILE_EXTENSIONS,\n CODE_MIME_PREFIXES,\n DOCX_MIME,\n OFFICE_MIME_TYPES,\n XLSX_MIME,\n XLS_MIME,\n} from \"./constants\";\nimport type { FileViewLoadingChangeHandler } from \"../../types\";\n\nconst FileAudioPlayer = lazyFileViewer<\n ComponentProps<typeof import(\"../audio_player\").FileAudioPlayer>\n>(() =>\n import(\"../audio_player\").then((module) => ({\n default: module.FileAudioPlayer,\n })),\n);\nconst FileDocxPreviewViewer = lazyFileViewer<\n ComponentProps<typeof import(\"../docx_preview_viewer\").FileDocxPreviewViewer>\n>(() =>\n import(\"../docx_preview_viewer\").then((module) => ({\n default: module.FileDocxPreviewViewer,\n })),\n);\nconst FileImageViewer = lazyFileViewer<\n ComponentProps<typeof import(\"../image_viewer\").FileImageViewer>\n>(() =>\n import(\"../image_viewer\").then((module) => ({\n default: module.FileImageViewer,\n })),\n);\nconst FilePdfViewer = lazyFileViewer<\n ComponentProps<typeof import(\"../pdf_viewer\").FilePdfViewer>\n>(() =>\n import(\"../pdf_viewer\").then((module) => ({ default: module.FilePdfViewer })),\n);\nconst FileSourceFileViewer = lazyFileViewer<\n ComponentProps<\n typeof import(\"../file_source_file_viewer\").FileSourceFileViewer\n >\n>(() =>\n import(\"../file_source_file_viewer\").then((module) => ({\n default: module.FileSourceFileViewer,\n })),\n);\nconst FileVideoPlayer = lazyFileViewer<\n ComponentProps<typeof import(\"../video_player\").FileVideoPlayer>\n>(() =>\n import(\"../video_player\").then((module) => ({\n default: module.FileVideoPlayer,\n })),\n);\nconst FileXlsxPreviewViewer = lazyFileViewer<\n ComponentProps<typeof import(\"../xlsx_preview_viewer\").FileXlsxPreviewViewer>\n>(() =>\n import(\"../xlsx_preview_viewer\").then((module) => ({\n default: module.FileXlsxPreviewViewer,\n })),\n);\n\nexport interface FileSimplePreviewRenderProps {\n file: File;\n url: string;\n onLoadingChange?: FileViewLoadingChangeHandler;\n}\n\nexport const FileSimplePreviewRender = ({\n file,\n url,\n onLoadingChange,\n}: FileSimplePreviewRenderProps) => {\n const mimeType = effectiveMimeFromFile(file);\n const download = () => downloadFromUrl(url, file.name);\n\n if (mimeType === \"application/pdf\") {\n return (\n <FilePdfViewer\n url={url}\n fileName={file.name}\n onDownload={download}\n onLoadingChange={onLoadingChange}\n />\n );\n }\n\n if (mimeType.startsWith(\"image/\")) {\n return (\n <FileImageViewer\n url={url}\n mimeType={mimeType}\n fileId={url}\n fileName={file.name}\n onDownload={download}\n onLoadingChange={onLoadingChange}\n />\n );\n }\n\n if (mimeType.startsWith(\"video/\")) {\n return (\n <FileVideoPlayer\n url={url}\n fileName={file.name}\n onDownload={download}\n onLoadingChange={onLoadingChange}\n />\n );\n }\n\n if (mimeType.startsWith(\"audio/\")) {\n return (\n <FileAudioPlayer\n url={url}\n fileName={file.name}\n onDownload={download}\n onLoadingChange={onLoadingChange}\n />\n );\n }\n\n const isCode =\n CODE_MIME_PREFIXES.some((prefix) => mimeType.startsWith(prefix)) ||\n CODE_FILE_EXTENSIONS.test(file.name);\n\n if (isCode) {\n return (\n <FileSourceFileViewer file={file} onLoadingChange={onLoadingChange} />\n );\n }\n\n if (mimeType === DOCX_MIME) {\n return (\n <FileDocxPreviewViewer file={file} onLoadingChange={onLoadingChange} />\n );\n }\n\n if (mimeType === XLSX_MIME || mimeType === XLS_MIME) {\n return (\n <FileXlsxPreviewViewer file={file} onLoadingChange={onLoadingChange} />\n );\n }\n\n if ((OFFICE_MIME_TYPES as readonly string[]).includes(mimeType)) {\n return <FileBlobOfficeUnavailable url={url} fileName={file.name} />;\n }\n\n return <FileUnknownViewer fileName={file.name} onDownload={download} />;\n};\n"],"mappings":";;;;;;;;AAgBA,IAAM,IAAkB,QAGtB,OAAO,4BAAmB,MAAM,OAAY,EAC1C,SAAS,EAAO,iBACjB,EAAE,CACJ,EACK,IAAwB,QAG5B,OAAO,mCAA0B,MAAM,OAAY,EACjD,SAAS,EAAO,uBACjB,EAAE,CACJ,EACK,IAAkB,QAGtB,OAAO,4BAAmB,MAAM,OAAY,EAC1C,SAAS,EAAO,iBACjB,EAAE,CACJ,EACK,IAAgB,QAGpB,OAAO,0BAAiB,MAAM,OAAY,EAAE,SAAS,EAAO,eAAe,EAAE,CAC9E,EACK,IAAuB,QAK3B,OAAO,uCAA8B,MAAM,OAAY,EACrD,SAAS,EAAO,sBACjB,EAAE,CACJ,EACK,IAAkB,QAGtB,OAAO,4BAAmB,MAAM,OAAY,EAC1C,SAAS,EAAO,iBACjB,EAAE,CACJ,EACK,IAAwB,QAG5B,OAAO,mCAA0B,MAAM,OAAY,EACjD,SAAS,EAAO,uBACjB,EAAE,CACJ,EAQY,KAA2B,EACtC,SACA,QACA,yBACkC;CAClC,IAAM,IAAW,EAAsB,EAAK,EACtC,UAAiB,EAAgB,GAAK,EAAK,KAAK;AA0EtD,QAxEI,MAAa,oBAEb,kBAAC,GAAD;EACO;EACL,UAAU,EAAK;EACf,YAAY;EACK;EACjB,CAAA,GAIF,EAAS,WAAW,SAAS,GAE7B,kBAAC,GAAD;EACO;EACK;EACV,QAAQ;EACR,UAAU,EAAK;EACf,YAAY;EACK;EACjB,CAAA,GAIF,EAAS,WAAW,SAAS,GAE7B,kBAAC,GAAD;EACO;EACL,UAAU,EAAK;EACf,YAAY;EACK;EACjB,CAAA,GAIF,EAAS,WAAW,SAAS,GAE7B,kBAAC,GAAD;EACO;EACL,UAAU,EAAK;EACf,YAAY;EACK;EACjB,CAAA,GAKJ,EAAmB,MAAM,MAAW,EAAS,WAAW,EAAO,CAAC,IAChE,EAAqB,KAAK,EAAK,KAAK,GAIlC,kBAAC,GAAD;EAA4B;EAAuB;EAAmB,CAAA,GAItE,MAAA,4EAEA,kBAAC,GAAD;EAA6B;EAAuB;EAAmB,CAAA,GAIvE,MAAA,uEAA0B,MAAA,6BAE1B,kBAAC,GAAD;EAA6B;EAAuB;EAAmB,CAAA,GAItE,EAAwC,SAAS,EAAS,GACtD,kBAAC,GAAD;EAAgC;EAAK,UAAU,EAAK;EAAQ,CAAA,GAG9D,kBAAC,GAAD;EAAmB,UAAU,EAAK;EAAM,YAAY;EAAY,CAAA"}
@@ -4,7 +4,7 @@ import { useEffect as a, useMemo as o } from "react";
4
4
  import { jsx as s, jsxs as c } from "react/jsx-runtime";
5
5
  //#region src/components/file_view/components/file_simple_preview_sheet/index.tsx
6
6
  var l = ({ open: l, onOpenChange: u, file: d, isLoading: f = !1, loadingOverlay: p, onLoadingChange: m }) => {
7
- let h = o(() => d ? URL.createObjectURL(d) : null, [d]);
7
+ let h = o(() => !l || !d ? null : URL.createObjectURL(d), [d, l]);
8
8
  return a(() => () => {
9
9
  h && URL.revokeObjectURL(h);
10
10
  }, [h]), /* @__PURE__ */ s(e, {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../../../src/components/file_view/components/file_simple_preview_sheet/index.tsx"],"sourcesContent":["import { useEffect, useMemo } from \"react\";\nimport {\n Sheet,\n SheetContent,\n SheetHeader,\n SheetTitle,\n} from \"@/components/sheet\";\nimport { FileSimplePreviewRender } from \"../file_simple_preview_render\";\nimport type { FileViewLoadingChangeHandler } from \"../../types\";\n\nexport interface FileSimplePreviewSheetProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n file: File | null;\n isLoading?: boolean;\n loadingOverlay?: React.ReactNode;\n onLoadingChange?: FileViewLoadingChangeHandler;\n}\n\nexport const FileSimplePreviewSheet = ({\n open,\n onOpenChange,\n file,\n isLoading = false,\n loadingOverlay,\n onLoadingChange,\n}: FileSimplePreviewSheetProps) => {\n const url = useMemo(() => {\n if (!file) return null;\n return URL.createObjectURL(file);\n }, [file]);\n\n useEffect(() => {\n return () => {\n if (url) URL.revokeObjectURL(url);\n };\n }, [url]);\n\n return (\n <Sheet open={open} onOpenChange={onOpenChange}>\n <SheetContent className=\"sm:max-w-[95vw] w-full p-0 flex flex-col gap-0 overflow-hidden\">\n <SheetHeader className=\"px-6 flex flex-row items-center justify-between space-y-0 border-b bg-background relative z-10\">\n <SheetTitle className=\"line-clamp-1 flex-1 mr-4\">\n {file?.name || \"Vista previa del archivo\"}\n </SheetTitle>\n </SheetHeader>\n\n <div className=\"flex-1 relative min-h-0 bg-background\">\n {file && url && (\n <div className=\"absolute inset-0 overflow-hidden min-w-0\">\n <FileSimplePreviewRender\n file={file}\n url={url}\n onLoadingChange={onLoadingChange}\n />\n </div>\n )}\n {isLoading && loadingOverlay ? (\n <div className=\"absolute inset-0 z-50 bg-background\">\n {loadingOverlay}\n </div>\n ) : null}\n </div>\n </SheetContent>\n </Sheet>\n );\n};\n"],"mappings":";;;;;AAmBA,IAAa,KAA0B,EACrC,SACA,iBACA,SACA,eAAY,IACZ,mBACA,yBACiC;CACjC,IAAM,IAAM,QACL,IACE,IAAI,gBAAgB,EAAK,GADd,MAEjB,CAAC,EAAK,CAAC;AAQV,QANA,cACe;AACX,EAAI,KAAK,IAAI,gBAAgB,EAAI;IAElC,CAAC,EAAI,CAAC,EAGP,kBAAC,GAAD;EAAa;EAAoB;YAC/B,kBAAC,GAAD;GAAc,WAAU;aAAxB,CACE,kBAAC,GAAD;IAAa,WAAU;cACrB,kBAAC,GAAD;KAAY,WAAU;eACnB,GAAM,QAAQ;KACJ,CAAA;IACD,CAAA,EAEd,kBAAC,OAAD;IAAK,WAAU;cAAf,CACG,KAAQ,KACP,kBAAC,OAAD;KAAK,WAAU;eACb,kBAAC,GAAD;MACQ;MACD;MACY;MACjB,CAAA;KACE,CAAA,EAEP,KAAa,IACZ,kBAAC,OAAD;KAAK,WAAU;eACZ;KACG,CAAA,GACJ,KACA;MACO;;EACT,CAAA"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../../src/components/file_view/components/file_simple_preview_sheet/index.tsx"],"sourcesContent":["import { useEffect, useMemo } from \"react\";\nimport {\n Sheet,\n SheetContent,\n SheetHeader,\n SheetTitle,\n} from \"@/components/sheet\";\nimport { FileSimplePreviewRender } from \"../file_simple_preview_render\";\nimport type { FileViewLoadingChangeHandler } from \"../../types\";\n\nexport interface FileSimplePreviewSheetProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n file: File | null;\n isLoading?: boolean;\n loadingOverlay?: React.ReactNode;\n onLoadingChange?: FileViewLoadingChangeHandler;\n}\n\nexport const FileSimplePreviewSheet = ({\n open,\n onOpenChange,\n file,\n isLoading = false,\n loadingOverlay,\n onLoadingChange,\n}: FileSimplePreviewSheetProps) => {\n const url = useMemo(() => {\n if (!open || !file) return null;\n return URL.createObjectURL(file);\n }, [file, open]);\n\n useEffect(() => {\n return () => {\n if (url) URL.revokeObjectURL(url);\n };\n }, [url]);\n\n return (\n <Sheet open={open} onOpenChange={onOpenChange}>\n <SheetContent className=\"sm:max-w-[95vw] w-full p-0 flex flex-col gap-0 overflow-hidden\">\n <SheetHeader className=\"px-6 flex flex-row items-center justify-between space-y-0 border-b bg-background relative z-10\">\n <SheetTitle className=\"line-clamp-1 flex-1 mr-4\">\n {file?.name || \"Vista previa del archivo\"}\n </SheetTitle>\n </SheetHeader>\n\n <div className=\"flex-1 relative min-h-0 bg-background\">\n {file && url && (\n <div className=\"absolute inset-0 overflow-hidden min-w-0\">\n <FileSimplePreviewRender\n file={file}\n url={url}\n onLoadingChange={onLoadingChange}\n />\n </div>\n )}\n {isLoading && loadingOverlay ? (\n <div className=\"absolute inset-0 z-50 bg-background\">\n {loadingOverlay}\n </div>\n ) : null}\n </div>\n </SheetContent>\n </Sheet>\n );\n};\n"],"mappings":";;;;;AAmBA,IAAa,KAA0B,EACrC,SACA,iBACA,SACA,eAAY,IACZ,mBACA,yBACiC;CACjC,IAAM,IAAM,QACN,CAAC,KAAQ,CAAC,IAAa,OACpB,IAAI,gBAAgB,EAAK,EAC/B,CAAC,GAAM,EAAK,CAAC;AAQhB,QANA,cACe;AACX,EAAI,KAAK,IAAI,gBAAgB,EAAI;IAElC,CAAC,EAAI,CAAC,EAGP,kBAAC,GAAD;EAAa;EAAoB;YAC/B,kBAAC,GAAD;GAAc,WAAU;aAAxB,CACE,kBAAC,GAAD;IAAa,WAAU;cACrB,kBAAC,GAAD;KAAY,WAAU;eACnB,GAAM,QAAQ;KACJ,CAAA;IACD,CAAA,EAEd,kBAAC,OAAD;IAAK,WAAU;cAAf,CACG,KAAQ,KACP,kBAAC,OAAD;KAAK,WAAU;eACb,kBAAC,GAAD;MACQ;MACD;MACY;MACjB,CAAA;KACE,CAAA,EAEP,KAAa,IACZ,kBAAC,OAAD;KAAK,WAAU;eACZ;KACG,CAAA,GACJ,KACA;MACO;;EACT,CAAA"}
@@ -1,39 +1,37 @@
1
- import { FilePdfViewer as e } from "../pdf_viewer/index.js";
2
- import { FileImageViewer as t } from "../image_viewer/index.js";
3
- import { FileUnknownViewer as n } from "../unknown_viewer/index.js";
4
- import { FileOfficeViewer as r } from "../office_viewer/index.js";
5
- import { inferMimeFromFileName as i } from "../../utilities/infer_mime_from_file_name.js";
6
- import { downloadFromUrl as a } from "../../utilities/download_from_url.js";
7
- import { getExtensionFromUrl as o } from "../../utilities/get_extension_from_url.js";
8
- import { IMAGE_EXTENSIONS as s, OFFICE_EXTENSIONS as c } from "./constants/index.js";
9
- import { jsx as l } from "react/jsx-runtime";
1
+ import { FileUnknownViewer as e } from "../unknown_viewer/index.js";
2
+ import { lazyFileViewer as t } from "../lazy_viewer/index.js";
3
+ import { downloadFromUrl as n } from "../../utilities/download_from_url.js";
4
+ import { inferMimeFromFileName as r } from "../../utilities/infer_mime_from_file_name.js";
5
+ import { getExtensionFromUrl as i } from "../../utilities/get_extension_from_url.js";
6
+ import { IMAGE_EXTENSIONS as a, OFFICE_EXTENSIONS as o } from "./constants/index.js";
7
+ import { jsx as s } from "react/jsx-runtime";
10
8
  //#region src/components/file_view/components/file_url_preview_render/index.tsx
11
- var u = ({ url: u, fileName: d, onLoadingChange: f }) => {
12
- let p = o(u), m = () => a(u, d);
13
- return p === "pdf" ? /* @__PURE__ */ l(e, {
14
- url: u,
9
+ var c = t(() => import("../image_viewer/index.js").then((e) => ({ default: e.FileImageViewer }))), l = t(() => import("../office_viewer/index.js").then((e) => ({ default: e.FileOfficeViewer }))), u = t(() => import("../pdf_viewer/index.js").then((e) => ({ default: e.FilePdfViewer }))), d = ({ url: t, fileName: d, onLoadingChange: f }) => {
10
+ let p = i(t), m = () => n(t, d);
11
+ return p === "pdf" ? /* @__PURE__ */ s(u, {
12
+ url: t,
15
13
  fileName: d,
16
14
  onDownload: m,
17
15
  onLoadingChange: f
18
- }) : s.includes(p) ? /* @__PURE__ */ l(t, {
19
- url: u,
20
- mimeType: i(d) ?? void 0,
16
+ }) : a.includes(p) ? /* @__PURE__ */ s(c, {
17
+ url: t,
18
+ mimeType: r(d) ?? void 0,
21
19
  fileName: d,
22
- fileId: u,
20
+ fileId: t,
23
21
  onDownload: m,
24
22
  onLoadingChange: f
25
- }) : c.includes(p) ? /* @__PURE__ */ l(r, {
26
- url: u,
23
+ }) : o.includes(p) ? /* @__PURE__ */ s(l, {
24
+ url: t,
27
25
  fileName: d,
28
- mimeType: i(d) ?? void 0,
26
+ mimeType: r(d) ?? void 0,
29
27
  onDownload: m,
30
28
  onLoadingChange: f
31
- }) : /* @__PURE__ */ l(n, {
29
+ }) : /* @__PURE__ */ s(e, {
32
30
  fileName: d,
33
31
  onDownload: m
34
32
  });
35
33
  };
36
34
  //#endregion
37
- export { u as FileUrlPreviewRender };
35
+ export { d as FileUrlPreviewRender };
38
36
 
39
37
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../../../src/components/file_view/components/file_url_preview_render/index.tsx"],"sourcesContent":["import { FileImageViewer } from \"../image_viewer\";\nimport { FileOfficeViewer } from \"../office_viewer\";\nimport { FilePdfViewer } from \"../pdf_viewer\";\nimport { FileUnknownViewer } from \"../unknown_viewer\";\nimport { downloadFromUrl } from \"../../utilities/download_from_url\";\nimport { getExtensionFromUrl } from \"../../utilities/get_extension_from_url\";\nimport { inferMimeFromFileName } from \"../../utilities/infer_mime_from_file_name\";\nimport { IMAGE_EXTENSIONS, OFFICE_EXTENSIONS } from \"./constants\";\nimport type { FileViewLoadingChangeHandler } from \"../../types\";\n\nexport interface FileUrlPreviewRenderProps {\n url: string;\n fileName: string;\n onLoadingChange?: FileViewLoadingChangeHandler;\n}\n\nexport const FileUrlPreviewRender = ({\n url,\n fileName,\n onLoadingChange,\n}: FileUrlPreviewRenderProps) => {\n const ext = getExtensionFromUrl(url);\n const download = () => downloadFromUrl(url, fileName);\n\n if (ext === \"pdf\") {\n return (\n <FilePdfViewer\n url={url}\n fileName={fileName}\n onDownload={download}\n onLoadingChange={onLoadingChange}\n />\n );\n }\n\n if (IMAGE_EXTENSIONS.includes(ext)) {\n const mimeType = inferMimeFromFileName(fileName) ?? undefined;\n return (\n <FileImageViewer\n url={url}\n mimeType={mimeType}\n fileName={fileName}\n fileId={url}\n onDownload={download}\n onLoadingChange={onLoadingChange}\n />\n );\n }\n\n if (OFFICE_EXTENSIONS.includes(ext)) {\n return (\n <FileOfficeViewer\n url={url}\n fileName={fileName}\n mimeType={inferMimeFromFileName(fileName) ?? undefined}\n onDownload={download}\n onLoadingChange={onLoadingChange}\n />\n );\n }\n\n return <FileUnknownViewer fileName={fileName} onDownload={download} />;\n};\n"],"mappings":";;;;;;;;;;AAgBA,IAAa,KAAwB,EACnC,QACA,aACA,yBAC+B;CAC/B,IAAM,IAAM,EAAoB,EAAI,EAC9B,UAAiB,EAAgB,GAAK,EAAS;AAuCrD,QArCI,MAAQ,QAER,kBAAC,GAAD;EACO;EACK;EACV,YAAY;EACK;EACjB,CAAA,GAIF,EAAiB,SAAS,EAAI,GAG9B,kBAAC,GAAD;EACO;EACK,UAJG,EAAsB,EAAS,IAAI,KAAA;EAKtC;EACV,QAAQ;EACR,YAAY;EACK;EACjB,CAAA,GAIF,EAAkB,SAAS,EAAI,GAE/B,kBAAC,GAAD;EACO;EACK;EACV,UAAU,EAAsB,EAAS,IAAI,KAAA;EAC7C,YAAY;EACK;EACjB,CAAA,GAIC,kBAAC,GAAD;EAA6B;EAAU,YAAY;EAAY,CAAA"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../../src/components/file_view/components/file_url_preview_render/index.tsx"],"sourcesContent":["import type { ComponentProps } from \"react\";\nimport { lazyFileViewer } from \"../lazy_viewer\";\nimport { FileUnknownViewer } from \"../unknown_viewer\";\nimport { downloadFromUrl } from \"../../utilities/download_from_url\";\nimport { getExtensionFromUrl } from \"../../utilities/get_extension_from_url\";\nimport { inferMimeFromFileName } from \"../../utilities/infer_mime_from_file_name\";\nimport { IMAGE_EXTENSIONS, OFFICE_EXTENSIONS } from \"./constants\";\nimport type { FileViewLoadingChangeHandler } from \"../../types\";\n\nconst FileImageViewer = lazyFileViewer<\n ComponentProps<typeof import(\"../image_viewer\").FileImageViewer>\n>(() =>\n import(\"../image_viewer\").then((module) => ({\n default: module.FileImageViewer,\n })),\n);\nconst FileOfficeViewer = lazyFileViewer<\n ComponentProps<typeof import(\"../office_viewer\").FileOfficeViewer>\n>(() =>\n import(\"../office_viewer\").then((module) => ({\n default: module.FileOfficeViewer,\n })),\n);\nconst FilePdfViewer = lazyFileViewer<\n ComponentProps<typeof import(\"../pdf_viewer\").FilePdfViewer>\n>(() =>\n import(\"../pdf_viewer\").then((module) => ({ default: module.FilePdfViewer })),\n);\n\nexport interface FileUrlPreviewRenderProps {\n url: string;\n fileName: string;\n onLoadingChange?: FileViewLoadingChangeHandler;\n}\n\nexport const FileUrlPreviewRender = ({\n url,\n fileName,\n onLoadingChange,\n}: FileUrlPreviewRenderProps) => {\n const ext = getExtensionFromUrl(url);\n const download = () => downloadFromUrl(url, fileName);\n\n if (ext === \"pdf\") {\n return (\n <FilePdfViewer\n url={url}\n fileName={fileName}\n onDownload={download}\n onLoadingChange={onLoadingChange}\n />\n );\n }\n\n if (IMAGE_EXTENSIONS.includes(ext)) {\n const mimeType = inferMimeFromFileName(fileName) ?? undefined;\n return (\n <FileImageViewer\n url={url}\n mimeType={mimeType}\n fileName={fileName}\n fileId={url}\n onDownload={download}\n onLoadingChange={onLoadingChange}\n />\n );\n }\n\n if (OFFICE_EXTENSIONS.includes(ext)) {\n return (\n <FileOfficeViewer\n url={url}\n fileName={fileName}\n mimeType={inferMimeFromFileName(fileName) ?? undefined}\n onDownload={download}\n onLoadingChange={onLoadingChange}\n />\n );\n }\n\n return <FileUnknownViewer fileName={fileName} onDownload={download} />;\n};\n"],"mappings":";;;;;;;;AASA,IAAM,IAAkB,QAGtB,OAAO,4BAAmB,MAAM,OAAY,EAC1C,SAAS,EAAO,iBACjB,EAAE,CACJ,EACK,IAAmB,QAGvB,OAAO,6BAAoB,MAAM,OAAY,EAC3C,SAAS,EAAO,kBACjB,EAAE,CACJ,EACK,IAAgB,QAGpB,OAAO,0BAAiB,MAAM,OAAY,EAAE,SAAS,EAAO,eAAe,EAAE,CAC9E,EAQY,KAAwB,EACnC,QACA,aACA,yBAC+B;CAC/B,IAAM,IAAM,EAAoB,EAAI,EAC9B,UAAiB,EAAgB,GAAK,EAAS;AAuCrD,QArCI,MAAQ,QAER,kBAAC,GAAD;EACO;EACK;EACV,YAAY;EACK;EACjB,CAAA,GAIF,EAAiB,SAAS,EAAI,GAG9B,kBAAC,GAAD;EACO;EACK,UAJG,EAAsB,EAAS,IAAI,KAAA;EAKtC;EACV,QAAQ;EACR,YAAY;EACK;EACjB,CAAA,GAIF,EAAkB,SAAS,EAAI,GAE/B,kBAAC,GAAD;EACO;EACK;EACV,UAAU,EAAsB,EAAS,IAAI,KAAA;EAC7C,YAAY;EACK;EACjB,CAAA,GAIC,kBAAC,GAAD;EAA6B;EAAU,YAAY;EAAY,CAAA"}
@@ -36,7 +36,7 @@ var d = ({ open: d, onOpenChange: f, url: p, fileName: m, isPending: h = !1, isL
36
36
  icon: u
37
37
  })
38
38
  }),
39
- !h && !_ && p && /* @__PURE__ */ c(s, {
39
+ d && !h && !_ && p && /* @__PURE__ */ c(s, {
40
40
  url: p,
41
41
  fileName: b,
42
42
  onLoadingChange: y
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../../../src/components/file_view/components/file_url_preview_sheet/index.tsx"],"sourcesContent":["import { FileX } from \"lucide-react\";\nimport {\n Sheet,\n SheetContent,\n SheetDescription,\n SheetHeader,\n SheetTitle,\n} from \"@/components/sheet\";\nimport { StatusMessage } from \"@/components/status_message\";\nimport { FileUrlPreviewRender } from \"../file_url_preview_render\";\nimport { getFileNameFromUrl } from \"../../utilities/get_extension_from_url\";\nimport type { FileViewLoadingChangeHandler } from \"../../types\";\n\nexport interface FileUrlPreviewSheetProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n url: string | null;\n fileName?: string;\n isPending?: boolean;\n isLoading?: boolean;\n isError?: boolean;\n loadingOverlay?: React.ReactNode;\n onLoadingChange?: FileViewLoadingChangeHandler;\n}\n\nexport const FileUrlPreviewSheet = ({\n open,\n onOpenChange,\n url,\n fileName,\n isPending = false,\n isLoading = false,\n isError = false,\n loadingOverlay,\n onLoadingChange,\n}: FileUrlPreviewSheetProps) => {\n const displayName =\n fileName ?? (url ? getFileNameFromUrl(url) : \"Vista previa\");\n\n return (\n <Sheet open={open} onOpenChange={onOpenChange}>\n <SheetContent className=\"sm:max-w-[95vw] w-full p-0 flex flex-col gap-0 overflow-hidden\">\n <SheetHeader className=\"px-6 flex flex-row items-center justify-between space-y-0 border-b bg-background relative z-10\">\n <SheetTitle className=\"line-clamp-1 flex-1 mr-4\">\n {displayName}\n </SheetTitle>\n <SheetDescription className=\"sr-only\">\n Vista previa del archivo.\n </SheetDescription>\n </SheetHeader>\n\n <div className=\"flex-1 relative min-h-0 bg-background overflow-hidden\">\n {(isPending || isLoading) && loadingOverlay ? (\n <div className=\"absolute inset-0 z-50 bg-background\">\n {loadingOverlay}\n </div>\n ) : null}\n\n {isError && (\n <div className=\"p-4\">\n <StatusMessage\n title=\"Error al cargar el documento\"\n description=\"Vuelve a intentarlo en unos minutos. Si el error persiste, contacta con soporte.\"\n icon={FileX}\n />\n </div>\n )}\n\n {!isPending && !isError && url && (\n <FileUrlPreviewRender\n url={url}\n fileName={displayName}\n onLoadingChange={onLoadingChange}\n />\n )}\n </div>\n </SheetContent>\n </Sheet>\n );\n};\n"],"mappings":";;;;;;;AAyBA,IAAa,KAAuB,EAClC,SACA,iBACA,QACA,aACA,eAAY,IACZ,eAAY,IACZ,aAAU,IACV,mBACA,yBAC8B;CAC9B,IAAM,IACJ,MAAa,IAAM,EAAmB,EAAI,GAAG;AAE/C,QACE,kBAAC,GAAD;EAAa;EAAoB;YAC/B,kBAAC,GAAD;GAAc,WAAU;aAAxB,CACE,kBAAC,GAAD;IAAa,WAAU;cAAvB,CACE,kBAAC,GAAD;KAAY,WAAU;eACnB;KACU,CAAA,EACb,kBAAC,GAAD;KAAkB,WAAU;eAAU;KAEnB,CAAA,CACP;OAEd,kBAAC,OAAD;IAAK,WAAU;cAAf;MACI,KAAa,MAAc,IAC3B,kBAAC,OAAD;MAAK,WAAU;gBACZ;MACG,CAAA,GACJ;KAEH,KACC,kBAAC,OAAD;MAAK,WAAU;gBACb,kBAAC,GAAD;OACE,OAAM;OACN,aAAY;OACZ,MAAM;OACN,CAAA;MACE,CAAA;KAGP,CAAC,KAAa,CAAC,KAAW,KACzB,kBAAC,GAAD;MACO;MACL,UAAU;MACO;MACjB,CAAA;KAEA;MACO;;EACT,CAAA"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../../src/components/file_view/components/file_url_preview_sheet/index.tsx"],"sourcesContent":["import { FileX } from \"lucide-react\";\nimport {\n Sheet,\n SheetContent,\n SheetDescription,\n SheetHeader,\n SheetTitle,\n} from \"@/components/sheet\";\nimport { StatusMessage } from \"@/components/status_message\";\nimport { FileUrlPreviewRender } from \"../file_url_preview_render\";\nimport { getFileNameFromUrl } from \"../../utilities/get_extension_from_url\";\nimport type { FileViewLoadingChangeHandler } from \"../../types\";\n\nexport interface FileUrlPreviewSheetProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n url: string | null;\n fileName?: string;\n isPending?: boolean;\n isLoading?: boolean;\n isError?: boolean;\n loadingOverlay?: React.ReactNode;\n onLoadingChange?: FileViewLoadingChangeHandler;\n}\n\nexport const FileUrlPreviewSheet = ({\n open,\n onOpenChange,\n url,\n fileName,\n isPending = false,\n isLoading = false,\n isError = false,\n loadingOverlay,\n onLoadingChange,\n}: FileUrlPreviewSheetProps) => {\n const displayName =\n fileName ?? (url ? getFileNameFromUrl(url) : \"Vista previa\");\n\n return (\n <Sheet open={open} onOpenChange={onOpenChange}>\n <SheetContent className=\"sm:max-w-[95vw] w-full p-0 flex flex-col gap-0 overflow-hidden\">\n <SheetHeader className=\"px-6 flex flex-row items-center justify-between space-y-0 border-b bg-background relative z-10\">\n <SheetTitle className=\"line-clamp-1 flex-1 mr-4\">\n {displayName}\n </SheetTitle>\n <SheetDescription className=\"sr-only\">\n Vista previa del archivo.\n </SheetDescription>\n </SheetHeader>\n\n <div className=\"flex-1 relative min-h-0 bg-background overflow-hidden\">\n {(isPending || isLoading) && loadingOverlay ? (\n <div className=\"absolute inset-0 z-50 bg-background\">\n {loadingOverlay}\n </div>\n ) : null}\n\n {isError && (\n <div className=\"p-4\">\n <StatusMessage\n title=\"Error al cargar el documento\"\n description=\"Vuelve a intentarlo en unos minutos. Si el error persiste, contacta con soporte.\"\n icon={FileX}\n />\n </div>\n )}\n\n {open && !isPending && !isError && url && (\n <FileUrlPreviewRender\n url={url}\n fileName={displayName}\n onLoadingChange={onLoadingChange}\n />\n )}\n </div>\n </SheetContent>\n </Sheet>\n );\n};\n"],"mappings":";;;;;;;AAyBA,IAAa,KAAuB,EAClC,SACA,iBACA,QACA,aACA,eAAY,IACZ,eAAY,IACZ,aAAU,IACV,mBACA,yBAC8B;CAC9B,IAAM,IACJ,MAAa,IAAM,EAAmB,EAAI,GAAG;AAE/C,QACE,kBAAC,GAAD;EAAa;EAAoB;YAC/B,kBAAC,GAAD;GAAc,WAAU;aAAxB,CACE,kBAAC,GAAD;IAAa,WAAU;cAAvB,CACE,kBAAC,GAAD;KAAY,WAAU;eACnB;KACU,CAAA,EACb,kBAAC,GAAD;KAAkB,WAAU;eAAU;KAEnB,CAAA,CACP;OAEd,kBAAC,OAAD;IAAK,WAAU;cAAf;MACI,KAAa,MAAc,IAC3B,kBAAC,OAAD;MAAK,WAAU;gBACZ;MACG,CAAA,GACJ;KAEH,KACC,kBAAC,OAAD;MAAK,WAAU;gBACb,kBAAC,GAAD;OACE,OAAM;OACN,aAAY;OACZ,MAAM;OACN,CAAA;MACE,CAAA;KAGP,KAAQ,CAAC,KAAa,CAAC,KAAW,KACjC,kBAAC,GAAD;MACO;MACL,UAAU;MACO;MACjB,CAAA;KAEA;MACO;;EACT,CAAA"}
@@ -1,3 +1,3 @@
1
1
  import { FileViewSheetPanelProps } from '../../types';
2
- declare const FileViewSheetPanelContent: ({ title, isPending, isLoading, loadingOverlay, isError, tabs, defaultTab, showTabs, renderOriginal, renderTranscription, renderSummary, renderTemplate, renderEdit, renderVersions, }: FileViewSheetPanelProps) => import("react/jsx-runtime").JSX.Element;
2
+ declare const FileViewSheetPanelContent: ({ lazyPanels, onActiveTabChange, title, isPending, isLoading, loadingOverlay, isError, tabs, defaultTab, showTabs, renderOriginal, renderTranscription, renderSummary, renderTemplate, renderEdit, renderVersions, }: FileViewSheetPanelProps) => import("react/jsx-runtime").JSX.Element;
3
3
  export { FileViewSheetPanelContent };
@@ -4,83 +4,89 @@ import { SheetContent as n, SheetDescription as r, SheetHeader as i, SheetTitle
4
4
  import { Tabs as o, TabsList as s, TabsTrigger as c } from "../../../../../tabs/index.js";
5
5
  import { FILE_VIEW_SHEET_TAB as l } from "../../../../types/file_view_sheet.js";
6
6
  import { renderPanelContent as u } from "../../utilities/index.js";
7
- import { useState as d } from "react";
8
- import { Fragment as f, jsx as p, jsxs as m } from "react/jsx-runtime";
9
- import { FileX as h } from "lucide-react";
7
+ import { useEffect as d, useState as f } from "react";
8
+ import { Fragment as p, jsx as m, jsxs as h } from "react/jsx-runtime";
9
+ import { FileX as g } from "lucide-react";
10
10
  //#region src/components/file_view/components/file_view_sheet/components/file_view_sheet_panel_content/index.tsx
11
- var g = ({ title: g, isPending: _ = !1, isLoading: v = !1, loadingOverlay: y, isError: b = !1, tabs: x = [], defaultTab: S = l.ORIGINAL, showTabs: C = !1, renderOriginal: w, renderTranscription: T, renderSummary: E, renderTemplate: D, renderEdit: O, renderVersions: k }) => {
12
- let [A, j] = d(S), M = !_ && !b, N = !C, P = C && x.length > 0, F = (t, n = "hidden", r = !1) => e("absolute inset-0 min-w-0 transition-opacity duration-150", n === "auto" ? "overflow-auto" : "overflow-hidden", P && !r && "pt-16", A === t ? "opacity-100 z-10" : "opacity-0 pointer-events-none z-0");
13
- return /* @__PURE__ */ m(n, {
11
+ var _ = ({ lazyPanels: _ = !1, onActiveTabChange: v, title: y, isPending: b = !1, isLoading: x = !1, loadingOverlay: S, isError: C = !1, tabs: w = [], defaultTab: T = l.ORIGINAL, showTabs: E = !1, renderOriginal: D, renderTranscription: O, renderSummary: k, renderTemplate: A, renderEdit: j, renderVersions: M }) => {
12
+ let [N, P] = f(T), [F, I] = f(() => new Set([T])), L = (e) => !_ || F.has(e);
13
+ d(() => {
14
+ v?.(N);
15
+ }, [N, v]);
16
+ let R = !b && !C, z = !E, B = E && w.length > 0, V = (t, n = "hidden", r = !1) => e("absolute inset-0 min-w-0 transition-opacity duration-150", n === "auto" ? "overflow-auto" : "overflow-hidden", B && !r && "pt-16", N === t ? "opacity-100 z-10" : "opacity-0 pointer-events-none z-0");
17
+ return /* @__PURE__ */ h(n, {
14
18
  className: "sm:max-w-[95vw] w-full p-0 flex flex-col gap-0 overflow-hidden",
15
19
  children: [
16
- /* @__PURE__ */ m(i, {
20
+ /* @__PURE__ */ h(i, {
17
21
  className: "px-6 flex flex-row items-center justify-between space-y-0 border-b bg-background relative z-10",
18
- children: [/* @__PURE__ */ p(a, {
22
+ children: [/* @__PURE__ */ m(a, {
19
23
  className: "line-clamp-1 flex-1 mr-4",
20
- children: g
21
- }), /* @__PURE__ */ p(r, {
24
+ children: y
25
+ }), /* @__PURE__ */ m(r, {
22
26
  className: "sr-only",
23
27
  children: "Aquí podrás ver la vista previa del archivo seleccionado."
24
28
  })]
25
29
  }),
26
- b && /* @__PURE__ */ p("div", {
30
+ C && /* @__PURE__ */ m("div", {
27
31
  className: "p-4",
28
- children: /* @__PURE__ */ p(t, {
32
+ children: /* @__PURE__ */ m(t, {
29
33
  title: "Sucedio un error inesperado",
30
34
  description: "Vuelve a intentarlo dentro de unos minutos, si el error persiste, contacta con soporte.",
31
- icon: h
35
+ icon: g
32
36
  })
33
37
  }),
34
- /* @__PURE__ */ m("div", {
38
+ /* @__PURE__ */ h("div", {
35
39
  className: "flex-1 relative min-h-0 bg-background",
36
40
  children: [
37
- (_ || v) && y ? /* @__PURE__ */ p("div", {
41
+ (b || x) && S ? /* @__PURE__ */ m("div", {
38
42
  className: "absolute inset-0 z-50 bg-background",
39
- children: y
43
+ children: S
40
44
  }) : null,
41
- P && /* @__PURE__ */ p("div", {
45
+ B && /* @__PURE__ */ m("div", {
42
46
  className: "pointer-events-none absolute inset-x-0 top-5 z-30 flex justify-center px-4",
43
- children: /* @__PURE__ */ p(o, {
44
- value: A,
47
+ children: /* @__PURE__ */ m(o, {
48
+ value: N,
45
49
  className: "pointer-events-auto max-w-full",
46
- children: /* @__PURE__ */ p(s, {
50
+ children: /* @__PURE__ */ m(s, {
47
51
  className: "border-border bg-card/95 h-auto max-w-full flex-wrap border shadow-lg backdrop-blur-sm",
48
- children: x.map((t) => /* @__PURE__ */ m(c, {
49
- className: e("font-normal", A === t.id && "bg-background"),
52
+ children: w.map((t) => /* @__PURE__ */ h(c, {
53
+ className: e("font-normal", N === t.id && "bg-background"),
50
54
  value: t.id,
51
- onClick: () => j(t.id),
55
+ onClick: () => {
56
+ I((e) => new Set([...e, t.id])), P(t.id);
57
+ },
52
58
  children: [t.icon, t.label]
53
59
  }, t.id))
54
60
  })
55
61
  })
56
62
  }),
57
- M && (N ? /* @__PURE__ */ p("div", {
63
+ R && (z ? /* @__PURE__ */ m("div", {
58
64
  className: "absolute inset-0 overflow-hidden min-w-0 z-10",
59
- children: w
60
- }) : /* @__PURE__ */ m(f, { children: [
61
- /* @__PURE__ */ p("div", {
62
- className: F(l.ORIGINAL, "hidden", !0),
63
- children: w
65
+ children: D
66
+ }) : /* @__PURE__ */ h(p, { children: [
67
+ L(l.ORIGINAL) && /* @__PURE__ */ m("div", {
68
+ className: V(l.ORIGINAL, "hidden", !0),
69
+ children: D
64
70
  }),
65
- T ? /* @__PURE__ */ p("div", {
66
- className: F(l.TRANSCRIPTION),
67
- children: u(T, A === l.TRANSCRIPTION)
71
+ O && L(l.TRANSCRIPTION) ? /* @__PURE__ */ m("div", {
72
+ className: V(l.TRANSCRIPTION),
73
+ children: u(O, N === l.TRANSCRIPTION)
68
74
  }) : null,
69
- E ? /* @__PURE__ */ p("div", {
70
- className: F(l.SUMMARY, "auto"),
71
- children: u(E, A === l.SUMMARY)
75
+ k && L(l.SUMMARY) ? /* @__PURE__ */ m("div", {
76
+ className: V(l.SUMMARY, "auto"),
77
+ children: u(k, N === l.SUMMARY)
72
78
  }) : null,
73
- D ? /* @__PURE__ */ p("div", {
74
- className: F(l.TEMPLATE, "hidden", !0),
75
- children: u(D, A === l.TEMPLATE)
79
+ A && L(l.TEMPLATE) ? /* @__PURE__ */ m("div", {
80
+ className: V(l.TEMPLATE, "hidden", !0),
81
+ children: u(A, N === l.TEMPLATE)
76
82
  }) : null,
77
- O ? /* @__PURE__ */ p("div", {
78
- className: F(l.EDIT, "auto"),
79
- children: u(O, A === l.EDIT)
83
+ j && L(l.EDIT) ? /* @__PURE__ */ m("div", {
84
+ className: V(l.EDIT, "auto"),
85
+ children: u(j, N === l.EDIT)
80
86
  }) : null,
81
- k ? /* @__PURE__ */ p("div", {
82
- className: F(l.VERSIONS, "auto"),
83
- children: u(k, A === l.VERSIONS)
87
+ M && L(l.VERSIONS) ? /* @__PURE__ */ m("div", {
88
+ className: V(l.VERSIONS, "auto"),
89
+ children: u(M, N === l.VERSIONS)
84
90
  }) : null
85
91
  ] }))
86
92
  ]
@@ -89,6 +95,6 @@ var g = ({ title: g, isPending: _ = !1, isLoading: v = !1, loadingOverlay: y, is
89
95
  });
90
96
  };
91
97
  //#endregion
92
- export { g as FileViewSheetPanelContent };
98
+ export { _ as FileViewSheetPanelContent };
93
99
 
94
100
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../../../../../src/components/file_view/components/file_view_sheet/components/file_view_sheet_panel_content/index.tsx"],"sourcesContent":["import { renderPanelContent } from \"../../utilities\";\nimport { useState } from \"react\";\nimport { FileX } from \"lucide-react\";\nimport { cn } from \"@/utilities/class\";\nimport {\n SheetContent,\n SheetDescription,\n SheetHeader,\n SheetTitle\n} from \"@/components/sheet\";\nimport { StatusMessage } from \"@/components/status_message\";\nimport { Tabs, TabsList, TabsTrigger } from \"@/components/tabs\";\nimport {\n FILE_VIEW_SHEET_TAB,\n type FileViewSheetTab\n } from \"../../../../types/file_view_sheet\";\nimport type { FileViewSheetPanelProps } from \"../../types\";\n\nconst FileViewSheetPanelContent = ({\n title,\n isPending = false,\n isLoading = false,\n loadingOverlay,\n isError = false,\n tabs = [],\n defaultTab = FILE_VIEW_SHEET_TAB.ORIGINAL,\n showTabs = false,\n renderOriginal,\n renderTranscription,\n renderSummary,\n renderTemplate,\n renderEdit,\n renderVersions,\n}: FileViewSheetPanelProps) => {\n const [activeTab, setActiveTab] = useState<FileViewSheetTab>(defaultTab);\n const showViewer = !isPending && !isError;\n const simpleViewer = !showTabs;\n const floatingTabs = showTabs && tabs.length > 0;\n\n const panelClass = (\n tab: FileViewSheetTab,\n overflow: \"hidden\" | \"auto\" = \"hidden\",\n tabsOverlay = false,\n ) =>\n cn(\n \"absolute inset-0 min-w-0 transition-opacity duration-150\",\n overflow === \"auto\" ? \"overflow-auto\" : \"overflow-hidden\",\n floatingTabs && !tabsOverlay && \"pt-16\",\n activeTab === tab\n ? \"opacity-100 z-10\"\n : \"opacity-0 pointer-events-none z-0\",\n );\n\n return (\n <SheetContent className=\"sm:max-w-[95vw] w-full p-0 flex flex-col gap-0 overflow-hidden\">\n <SheetHeader className=\"px-6 flex flex-row items-center justify-between space-y-0 border-b bg-background relative z-10\">\n <SheetTitle className=\"line-clamp-1 flex-1 mr-4\">{title}</SheetTitle>\n <SheetDescription className=\"sr-only\">\n Aquí podrás ver la vista previa del archivo seleccionado.\n </SheetDescription>\n </SheetHeader>\n\n {isError && (\n <div className=\"p-4\">\n <StatusMessage\n title=\"Sucedio un error inesperado\"\n description=\"Vuelve a intentarlo dentro de unos minutos, si el error persiste, contacta con soporte.\"\n icon={FileX}\n />\n </div>\n )}\n\n <div className=\"flex-1 relative min-h-0 bg-background\">\n {(isPending || isLoading) && loadingOverlay ? (\n <div className=\"absolute inset-0 z-50 bg-background\">\n {loadingOverlay}\n </div>\n ) : null}\n\n {floatingTabs && (\n <div className=\"pointer-events-none absolute inset-x-0 top-5 z-30 flex justify-center px-4\">\n <Tabs value={activeTab} className=\"pointer-events-auto max-w-full\">\n <TabsList className=\"border-border bg-card/95 h-auto max-w-full flex-wrap border shadow-lg backdrop-blur-sm\">\n {tabs.map((tab) => (\n <TabsTrigger\n key={tab.id}\n className={cn(\"font-normal\", activeTab === tab.id && \"bg-background\")}\n value={tab.id}\n onClick={() => setActiveTab(tab.id)}\n >\n {tab.icon}\n {tab.label}\n </TabsTrigger>\n ))}\n </TabsList>\n </Tabs>\n </div>\n )}\n\n {showViewer &&\n (simpleViewer ? (\n <div className=\"absolute inset-0 overflow-hidden min-w-0 z-10\">\n {renderOriginal}\n </div>\n ) : (\n <>\n <div\n className={panelClass(\n FILE_VIEW_SHEET_TAB.ORIGINAL,\n \"hidden\",\n true,\n )}\n >\n {renderOriginal}\n </div>\n {renderTranscription ? (\n <div className={panelClass(FILE_VIEW_SHEET_TAB.TRANSCRIPTION)}>\n {renderPanelContent(\n renderTranscription,\n activeTab === FILE_VIEW_SHEET_TAB.TRANSCRIPTION,\n )}\n </div>\n ) : null}\n {renderSummary ? (\n <div\n className={panelClass(FILE_VIEW_SHEET_TAB.SUMMARY, \"auto\")}\n >\n {renderPanelContent(\n renderSummary,\n activeTab === FILE_VIEW_SHEET_TAB.SUMMARY,\n )}\n </div>\n ) : null}\n {renderTemplate ? (\n <div\n className={panelClass(\n FILE_VIEW_SHEET_TAB.TEMPLATE,\n \"hidden\",\n true,\n )}\n >\n {renderPanelContent(\n renderTemplate,\n activeTab === FILE_VIEW_SHEET_TAB.TEMPLATE,\n )}\n </div>\n ) : null}\n {renderEdit ? (\n <div className={panelClass(FILE_VIEW_SHEET_TAB.EDIT, \"auto\")}>\n {renderPanelContent(\n renderEdit,\n activeTab === FILE_VIEW_SHEET_TAB.EDIT,\n )}\n </div>\n ) : null}\n {renderVersions ? (\n <div\n className={panelClass(FILE_VIEW_SHEET_TAB.VERSIONS, \"auto\")}\n >\n {renderPanelContent(\n renderVersions,\n activeTab === FILE_VIEW_SHEET_TAB.VERSIONS,\n )}\n </div>\n ) : null}\n </>\n ))}\n </div>\n </SheetContent>\n );\n};\n\nexport { FileViewSheetPanelContent };\n"],"mappings":";;;;;;;;;;AAkBA,IAAM,KAA6B,EACjC,UACA,eAAY,IACZ,eAAY,IACZ,mBACA,aAAU,IACV,UAAO,EAAE,EACT,gBAAa,EAAoB,UACjC,cAAW,IACX,mBACA,wBACA,kBACA,mBACA,eACA,wBAC6B;CAC7B,IAAM,CAAC,GAAW,KAAgB,EAA2B,EAAW,EAClE,IAAa,CAAC,KAAa,CAAC,GAC5B,IAAe,CAAC,GAChB,IAAe,KAAY,EAAK,SAAS,GAEzC,KACJ,GACA,IAA8B,UAC9B,IAAc,OAEd,EACE,4DACA,MAAa,SAAS,kBAAkB,mBACxC,KAAgB,CAAC,KAAe,SAChC,MAAc,IACV,qBACA,oCACL;AAEH,QACE,kBAAC,GAAD;EAAc,WAAU;YAAxB;GACE,kBAAC,GAAD;IAAa,WAAU;cAAvB,CACE,kBAAC,GAAD;KAAY,WAAU;eAA4B;KAAmB,CAAA,EACrE,kBAAC,GAAD;KAAkB,WAAU;eAAU;KAEnB,CAAA,CACP;;GAEb,KACC,kBAAC,OAAD;IAAK,WAAU;cACb,kBAAC,GAAD;KACE,OAAM;KACN,aAAY;KACZ,MAAM;KACN,CAAA;IACE,CAAA;GAGR,kBAAC,OAAD;IAAK,WAAU;cAAf;MACI,KAAa,MAAc,IAC3B,kBAAC,OAAD;MAAK,WAAU;gBACZ;MACG,CAAA,GACJ;KAEH,KACC,kBAAC,OAAD;MAAK,WAAU;gBACb,kBAAC,GAAD;OAAM,OAAO;OAAW,WAAU;iBAChC,kBAAC,GAAD;QAAU,WAAU;kBACjB,EAAK,KAAK,MACT,kBAAC,GAAD;SAEE,WAAW,EAAG,eAAe,MAAc,EAAI,MAAM,gBAAgB;SACrE,OAAO,EAAI;SACX,eAAe,EAAa,EAAI,GAAG;mBAJrC,CAMG,EAAI,MACJ,EAAI,MACO;WAPP,EAAI,GAOG,CACd;QACO,CAAA;OACN,CAAA;MACH,CAAA;KAGP,MACE,IACC,kBAAC,OAAD;MAAK,WAAU;gBACZ;MACG,CAAA,GAEN,kBAAA,GAAA,EAAA,UAAA;MACE,kBAAC,OAAD;OACE,WAAW,EACT,EAAoB,UACpB,UACA,GACD;iBAEA;OACG,CAAA;MACL,IACC,kBAAC,OAAD;OAAK,WAAW,EAAW,EAAoB,cAAc;iBAC1D,EACC,GACA,MAAc,EAAoB,cACnC;OACG,CAAA,GACJ;MACH,IACC,kBAAC,OAAD;OACE,WAAW,EAAW,EAAoB,SAAS,OAAO;iBAEzD,EACC,GACA,MAAc,EAAoB,QACnC;OACG,CAAA,GACJ;MACH,IACC,kBAAC,OAAD;OACE,WAAW,EACT,EAAoB,UACpB,UACA,GACD;iBAEA,EACC,GACA,MAAc,EAAoB,SACnC;OACG,CAAA,GACJ;MACH,IACC,kBAAC,OAAD;OAAK,WAAW,EAAW,EAAoB,MAAM,OAAO;iBACzD,EACC,GACA,MAAc,EAAoB,KACnC;OACG,CAAA,GACJ;MACH,IACC,kBAAC,OAAD;OACE,WAAW,EAAW,EAAoB,UAAU,OAAO;iBAE1D,EACC,GACA,MAAc,EAAoB,SACnC;OACG,CAAA,GACJ;MACH,EAAA,CAAA;KAEH;;GACO"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../../../../src/components/file_view/components/file_view_sheet/components/file_view_sheet_panel_content/index.tsx"],"sourcesContent":["import { renderPanelContent } from \"../../utilities\";\nimport { useEffect, useState } from \"react\";\nimport { FileX } from \"lucide-react\";\nimport { cn } from \"@/utilities/class\";\nimport {\n SheetContent,\n SheetDescription,\n SheetHeader,\n SheetTitle,\n} from \"@/components/sheet\";\nimport { StatusMessage } from \"@/components/status_message\";\nimport { Tabs, TabsList, TabsTrigger } from \"@/components/tabs\";\nimport {\n FILE_VIEW_SHEET_TAB,\n type FileViewSheetTab,\n} from \"../../../../types/file_view_sheet\";\nimport type { FileViewSheetPanelProps } from \"../../types\";\n\nconst FileViewSheetPanelContent = ({\n lazyPanels = false,\n onActiveTabChange,\n title,\n isPending = false,\n isLoading = false,\n loadingOverlay,\n isError = false,\n tabs = [],\n defaultTab = FILE_VIEW_SHEET_TAB.ORIGINAL,\n showTabs = false,\n renderOriginal,\n renderTranscription,\n renderSummary,\n renderTemplate,\n renderEdit,\n renderVersions,\n}: FileViewSheetPanelProps) => {\n const [activeTab, setActiveTab] = useState<FileViewSheetTab>(defaultTab);\n const [visited, setVisited] = useState<Set<FileViewSheetTab>>(\n () => new Set([defaultTab]),\n );\n const shouldMount = (tab: FileViewSheetTab) =>\n !lazyPanels || visited.has(tab);\n useEffect(() => {\n onActiveTabChange?.(activeTab);\n }, [activeTab, onActiveTabChange]);\n const showViewer = !isPending && !isError;\n const simpleViewer = !showTabs;\n const floatingTabs = showTabs && tabs.length > 0;\n\n const panelClass = (\n tab: FileViewSheetTab,\n overflow: \"hidden\" | \"auto\" = \"hidden\",\n tabsOverlay = false,\n ) =>\n cn(\n \"absolute inset-0 min-w-0 transition-opacity duration-150\",\n overflow === \"auto\" ? \"overflow-auto\" : \"overflow-hidden\",\n floatingTabs && !tabsOverlay && \"pt-16\",\n activeTab === tab\n ? \"opacity-100 z-10\"\n : \"opacity-0 pointer-events-none z-0\",\n );\n\n return (\n <SheetContent className=\"sm:max-w-[95vw] w-full p-0 flex flex-col gap-0 overflow-hidden\">\n <SheetHeader className=\"px-6 flex flex-row items-center justify-between space-y-0 border-b bg-background relative z-10\">\n <SheetTitle className=\"line-clamp-1 flex-1 mr-4\">{title}</SheetTitle>\n <SheetDescription className=\"sr-only\">\n Aquí podrás ver la vista previa del archivo seleccionado.\n </SheetDescription>\n </SheetHeader>\n\n {isError && (\n <div className=\"p-4\">\n <StatusMessage\n title=\"Sucedio un error inesperado\"\n description=\"Vuelve a intentarlo dentro de unos minutos, si el error persiste, contacta con soporte.\"\n icon={FileX}\n />\n </div>\n )}\n\n <div className=\"flex-1 relative min-h-0 bg-background\">\n {(isPending || isLoading) && loadingOverlay ? (\n <div className=\"absolute inset-0 z-50 bg-background\">\n {loadingOverlay}\n </div>\n ) : null}\n\n {floatingTabs && (\n <div className=\"pointer-events-none absolute inset-x-0 top-5 z-30 flex justify-center px-4\">\n <Tabs value={activeTab} className=\"pointer-events-auto max-w-full\">\n <TabsList className=\"border-border bg-card/95 h-auto max-w-full flex-wrap border shadow-lg backdrop-blur-sm\">\n {tabs.map((tab) => (\n <TabsTrigger\n key={tab.id}\n className={cn(\n \"font-normal\",\n activeTab === tab.id && \"bg-background\",\n )}\n value={tab.id}\n onClick={() => {\n setVisited((previous) => new Set([...previous, tab.id]));\n setActiveTab(tab.id);\n }}\n >\n {tab.icon}\n {tab.label}\n </TabsTrigger>\n ))}\n </TabsList>\n </Tabs>\n </div>\n )}\n\n {showViewer &&\n (simpleViewer ? (\n <div className=\"absolute inset-0 overflow-hidden min-w-0 z-10\">\n {renderOriginal}\n </div>\n ) : (\n <>\n {shouldMount(FILE_VIEW_SHEET_TAB.ORIGINAL) && (\n <div\n className={panelClass(\n FILE_VIEW_SHEET_TAB.ORIGINAL,\n \"hidden\",\n true,\n )}\n >\n {renderOriginal}\n </div>\n )}\n {renderTranscription &&\n shouldMount(FILE_VIEW_SHEET_TAB.TRANSCRIPTION) ? (\n <div className={panelClass(FILE_VIEW_SHEET_TAB.TRANSCRIPTION)}>\n {renderPanelContent(\n renderTranscription,\n activeTab === FILE_VIEW_SHEET_TAB.TRANSCRIPTION,\n )}\n </div>\n ) : null}\n {renderSummary && shouldMount(FILE_VIEW_SHEET_TAB.SUMMARY) ? (\n <div\n className={panelClass(FILE_VIEW_SHEET_TAB.SUMMARY, \"auto\")}\n >\n {renderPanelContent(\n renderSummary,\n activeTab === FILE_VIEW_SHEET_TAB.SUMMARY,\n )}\n </div>\n ) : null}\n {renderTemplate && shouldMount(FILE_VIEW_SHEET_TAB.TEMPLATE) ? (\n <div\n className={panelClass(\n FILE_VIEW_SHEET_TAB.TEMPLATE,\n \"hidden\",\n true,\n )}\n >\n {renderPanelContent(\n renderTemplate,\n activeTab === FILE_VIEW_SHEET_TAB.TEMPLATE,\n )}\n </div>\n ) : null}\n {renderEdit && shouldMount(FILE_VIEW_SHEET_TAB.EDIT) ? (\n <div className={panelClass(FILE_VIEW_SHEET_TAB.EDIT, \"auto\")}>\n {renderPanelContent(\n renderEdit,\n activeTab === FILE_VIEW_SHEET_TAB.EDIT,\n )}\n </div>\n ) : null}\n {renderVersions && shouldMount(FILE_VIEW_SHEET_TAB.VERSIONS) ? (\n <div\n className={panelClass(FILE_VIEW_SHEET_TAB.VERSIONS, \"auto\")}\n >\n {renderPanelContent(\n renderVersions,\n activeTab === FILE_VIEW_SHEET_TAB.VERSIONS,\n )}\n </div>\n ) : null}\n </>\n ))}\n </div>\n </SheetContent>\n );\n};\n\nexport { FileViewSheetPanelContent };\n"],"mappings":";;;;;;;;;;AAkBA,IAAM,KAA6B,EACjC,gBAAa,IACb,sBACA,UACA,eAAY,IACZ,eAAY,IACZ,mBACA,aAAU,IACV,UAAO,EAAE,EACT,gBAAa,EAAoB,UACjC,cAAW,IACX,mBACA,wBACA,kBACA,mBACA,eACA,wBAC6B;CAC7B,IAAM,CAAC,GAAW,KAAgB,EAA2B,EAAW,EAClE,CAAC,GAAS,KAAc,QACtB,IAAI,IAAI,CAAC,EAAW,CAAC,CAC5B,EACK,KAAe,MACnB,CAAC,KAAc,EAAQ,IAAI,EAAI;AACjC,SAAgB;AACd,MAAoB,EAAU;IAC7B,CAAC,GAAW,EAAkB,CAAC;CAClC,IAAM,IAAa,CAAC,KAAa,CAAC,GAC5B,IAAe,CAAC,GAChB,IAAe,KAAY,EAAK,SAAS,GAEzC,KACJ,GACA,IAA8B,UAC9B,IAAc,OAEd,EACE,4DACA,MAAa,SAAS,kBAAkB,mBACxC,KAAgB,CAAC,KAAe,SAChC,MAAc,IACV,qBACA,oCACL;AAEH,QACE,kBAAC,GAAD;EAAc,WAAU;YAAxB;GACE,kBAAC,GAAD;IAAa,WAAU;cAAvB,CACE,kBAAC,GAAD;KAAY,WAAU;eAA4B;KAAmB,CAAA,EACrE,kBAAC,GAAD;KAAkB,WAAU;eAAU;KAEnB,CAAA,CACP;;GAEb,KACC,kBAAC,OAAD;IAAK,WAAU;cACb,kBAAC,GAAD;KACE,OAAM;KACN,aAAY;KACZ,MAAM;KACN,CAAA;IACE,CAAA;GAGR,kBAAC,OAAD;IAAK,WAAU;cAAf;MACI,KAAa,MAAc,IAC3B,kBAAC,OAAD;MAAK,WAAU;gBACZ;MACG,CAAA,GACJ;KAEH,KACC,kBAAC,OAAD;MAAK,WAAU;gBACb,kBAAC,GAAD;OAAM,OAAO;OAAW,WAAU;iBAChC,kBAAC,GAAD;QAAU,WAAU;kBACjB,EAAK,KAAK,MACT,kBAAC,GAAD;SAEE,WAAW,EACT,eACA,MAAc,EAAI,MAAM,gBACzB;SACD,OAAO,EAAI;SACX,eAAe;AAEb,UADA,GAAY,MAAa,IAAI,IAAI,CAAC,GAAG,GAAU,EAAI,GAAG,CAAC,CAAC,EACxD,EAAa,EAAI,GAAG;;mBATxB,CAYG,EAAI,MACJ,EAAI,MACO;WAbP,EAAI,GAaG,CACd;QACO,CAAA;OACN,CAAA;MACH,CAAA;KAGP,MACE,IACC,kBAAC,OAAD;MAAK,WAAU;gBACZ;MACG,CAAA,GAEN,kBAAA,GAAA,EAAA,UAAA;MACG,EAAY,EAAoB,SAAS,IACxC,kBAAC,OAAD;OACE,WAAW,EACT,EAAoB,UACpB,UACA,GACD;iBAEA;OACG,CAAA;MAEP,KACD,EAAY,EAAoB,cAAc,GAC5C,kBAAC,OAAD;OAAK,WAAW,EAAW,EAAoB,cAAc;iBAC1D,EACC,GACA,MAAc,EAAoB,cACnC;OACG,CAAA,GACJ;MACH,KAAiB,EAAY,EAAoB,QAAQ,GACxD,kBAAC,OAAD;OACE,WAAW,EAAW,EAAoB,SAAS,OAAO;iBAEzD,EACC,GACA,MAAc,EAAoB,QACnC;OACG,CAAA,GACJ;MACH,KAAkB,EAAY,EAAoB,SAAS,GAC1D,kBAAC,OAAD;OACE,WAAW,EACT,EAAoB,UACpB,UACA,GACD;iBAEA,EACC,GACA,MAAc,EAAoB,SACnC;OACG,CAAA,GACJ;MACH,KAAc,EAAY,EAAoB,KAAK,GAClD,kBAAC,OAAD;OAAK,WAAW,EAAW,EAAoB,MAAM,OAAO;iBACzD,EACC,GACA,MAAc,EAAoB,KACnC;OACG,CAAA,GACJ;MACH,KAAkB,EAAY,EAAoB,SAAS,GAC1D,kBAAC,OAAD;OACE,WAAW,EAAW,EAAoB,UAAU,OAAO;iBAE1D,EACC,GACA,MAAc,EAAoB,SACnC;OACG,CAAA,GACJ;MACH,EAAA,CAAA;KAEH;;GACO"}
@@ -1,5 +1,5 @@
1
1
  import { FileViewSheetProps } from './types';
2
2
  import { FILE_VIEW_SHEET_TAB, FileViewSheetTab, FileViewSheetTabItem } from '../../types/file_view_sheet';
3
- export declare const FileViewSheet: ({ open, onOpenChange, fileKey, ...panelProps }: FileViewSheetProps) => import("react/jsx-runtime").JSX.Element;
3
+ export declare const FileViewSheet: ({ open, onOpenChange, fileKey, lazyPanels, ...panelProps }: FileViewSheetProps) => import("react/jsx-runtime").JSX.Element;
4
4
  export { FILE_VIEW_SHEET_TAB };
5
5
  export type { FileViewSheetTab, FileViewSheetTabItem };
@@ -3,10 +3,13 @@ import "../../types/file_view_sheet.js";
3
3
  import { FileViewSheetPanelContent as t } from "./components/file_view_sheet_panel_content/index.js";
4
4
  import { jsx as n } from "react/jsx-runtime";
5
5
  //#region src/components/file_view/components/file_view_sheet/index.tsx
6
- var r = ({ open: r, onOpenChange: i, fileKey: a, ...o }) => /* @__PURE__ */ n(e, {
6
+ var r = ({ open: r, onOpenChange: i, fileKey: a, lazyPanels: o = !1, ...s }) => /* @__PURE__ */ n(e, {
7
7
  open: r,
8
8
  onOpenChange: i,
9
- children: /* @__PURE__ */ n(t, { ...o }, a)
9
+ children: (!o || r) && /* @__PURE__ */ n(t, {
10
+ lazyPanels: o,
11
+ ...s
12
+ }, a)
10
13
  });
11
14
  //#endregion
12
15
  export { r as FileViewSheet };
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../../../src/components/file_view/components/file_view_sheet/index.tsx"],"sourcesContent":["import type { FileViewSheetProps } from \"./types\";\nimport { Sheet } from \"@/components/sheet\";\nimport {\n FILE_VIEW_SHEET_TAB,\n type FileViewSheetTab,\n type FileViewSheetTabItem,\n} from \"../../types/file_view_sheet\";\nimport { FileViewSheetPanelContent } from \"./components/file_view_sheet_panel_content\";\n\nexport const FileViewSheet = ({\n open,\n onOpenChange,\n fileKey,\n ...panelProps\n}: FileViewSheetProps) => (\n <Sheet open={open} onOpenChange={onOpenChange}>\n <FileViewSheetPanelContent key={fileKey} {...panelProps} />\n </Sheet>\n);\n\nexport { FILE_VIEW_SHEET_TAB };\nexport type { FileViewSheetTab, FileViewSheetTabItem };\n"],"mappings":";;;;;AASA,IAAa,KAAiB,EAC5B,SACA,iBACA,YACA,GAAG,QAEH,kBAAC,GAAD;CAAa;CAAoB;WAC/B,kBAAC,GAAD,EAAyC,GAAI,GAAc,EAA3B,EAA2B;CACrD,CAAA"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../../src/components/file_view/components/file_view_sheet/index.tsx"],"sourcesContent":["import type { FileViewSheetProps } from \"./types\";\nimport { Sheet } from \"@/components/sheet\";\nimport {\n FILE_VIEW_SHEET_TAB,\n type FileViewSheetTab,\n type FileViewSheetTabItem,\n} from \"../../types/file_view_sheet\";\nimport { FileViewSheetPanelContent } from \"./components/file_view_sheet_panel_content\";\n\nexport const FileViewSheet = ({\n open,\n onOpenChange,\n fileKey,\n lazyPanels = false,\n ...panelProps\n}: FileViewSheetProps) => (\n <Sheet open={open} onOpenChange={onOpenChange}>\n {(!lazyPanels || open) && (\n <FileViewSheetPanelContent\n key={fileKey}\n lazyPanels={lazyPanels}\n {...panelProps}\n />\n )}\n </Sheet>\n);\n\nexport { FILE_VIEW_SHEET_TAB };\nexport type { FileViewSheetTab, FileViewSheetTabItem };\n"],"mappings":";;;;;AASA,IAAa,KAAiB,EAC5B,SACA,iBACA,YACA,gBAAa,IACb,GAAG,QAEH,kBAAC,GAAD;CAAa;CAAoB;YAC7B,CAAC,KAAc,MACf,kBAAC,GAAD;EAEc;EACZ,GAAI;EACJ,EAHK,EAGL;CAEE,CAAA"}
@@ -1,6 +1,8 @@
1
1
  import { FileViewSheetTab, FileViewSheetTabItem } from '../../../types/file_view_sheet';
2
2
  export type FileViewSheetPanelRender = React.ReactNode | ((isActive: boolean) => React.ReactNode);
3
3
  export interface FileViewSheetPanelProps {
4
+ lazyPanels?: boolean;
5
+ onActiveTabChange?: (tab: FileViewSheetTab) => void;
4
6
  title: string;
5
7
  isPending?: boolean;
6
8
  isLoading?: boolean;
@@ -1,3 +1,3 @@
1
1
  import { FileImageViewerProps } from './types';
2
- export declare const FileImageViewer: ({ url, mimeType, fileId, fileName, isPending, isError, onDownload, }: FileImageViewerProps) => import("react/jsx-runtime").JSX.Element;
2
+ export declare const FileImageViewer: ({ url, mimeType, fileId, fileName, isPending, isError, onDownload, onLoadingChange, }: FileImageViewerProps) => import("react/jsx-runtime").JSX.Element;
3
3
  export type { FileImageViewerProps } from './types';