@fdls/file-viewer 0.2.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.
@@ -0,0 +1,309 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { CSSProperties, ReactNode, ReactElement } from 'react';
3
+
4
+ type SlotStyle = CSSProperties;
5
+ type FileViewerDialogClassNames = {
6
+ backdrop?: string;
7
+ content?: string;
8
+ panel?: string;
9
+ };
10
+ type FileViewerDialogStyles = {
11
+ backdrop?: SlotStyle;
12
+ content?: SlotStyle;
13
+ panel?: SlotStyle;
14
+ };
15
+ type FileViewerClassNames = {
16
+ root?: string;
17
+ header?: string;
18
+ headerTitle?: string;
19
+ headerActions?: string;
20
+ closeButton?: string;
21
+ printButton?: string;
22
+ openInModalButton?: string;
23
+ downloadButton?: string;
24
+ viewer?: string;
25
+ loader?: string;
26
+ unsupported?: string;
27
+ };
28
+ type FileViewerStyles = {
29
+ root?: SlotStyle;
30
+ header?: SlotStyle;
31
+ headerTitle?: SlotStyle;
32
+ headerActions?: SlotStyle;
33
+ closeButton?: SlotStyle;
34
+ printButton?: SlotStyle;
35
+ openInModalButton?: SlotStyle;
36
+ downloadButton?: SlotStyle;
37
+ viewer?: SlotStyle;
38
+ loader?: SlotStyle;
39
+ unsupported?: SlotStyle;
40
+ };
41
+ type PdfViewerClassNames = {
42
+ root?: string;
43
+ scrollArea?: string;
44
+ scrollViewport?: string;
45
+ scrollbar?: string;
46
+ scrollbarThumb?: string;
47
+ page?: string;
48
+ pageInner?: string;
49
+ pageInput?: string;
50
+ pagination?: string;
51
+ };
52
+ type PdfViewerStyles = {
53
+ root?: SlotStyle;
54
+ scrollArea?: SlotStyle;
55
+ scrollViewport?: SlotStyle;
56
+ scrollbar?: SlotStyle;
57
+ scrollbarThumb?: SlotStyle;
58
+ page?: SlotStyle;
59
+ pageInner?: SlotStyle;
60
+ pageInput?: SlotStyle;
61
+ pagination?: SlotStyle;
62
+ };
63
+ type ImageViewerClassNames = {
64
+ root?: string;
65
+ loader?: string;
66
+ image?: string;
67
+ toolbar?: string;
68
+ };
69
+ type ImageViewerStyles = {
70
+ root?: SlotStyle;
71
+ loader?: SlotStyle;
72
+ image?: SlotStyle;
73
+ toolbar?: SlotStyle;
74
+ };
75
+ type ViewerToolbarClassNames = {
76
+ toolbar?: string;
77
+ divider?: string;
78
+ iconButton?: string;
79
+ };
80
+ type ViewerToolbarStyles = {
81
+ toolbar?: SlotStyle;
82
+ divider?: SlotStyle;
83
+ iconButton?: SlotStyle;
84
+ };
85
+ type FileViewerTooltipClassNames = {
86
+ content?: string;
87
+ };
88
+ type FileViewerTooltipStyles = {
89
+ content?: SlotStyle;
90
+ };
91
+
92
+ /** Plain string, or a function that receives structured values for formatting. */
93
+ type FormattableMessage<P extends Record<string, unknown>> = string | ((params: P) => string);
94
+ type UnsupportedFileTypeParams = {
95
+ extension: string;
96
+ };
97
+ type PdfPageInputAriaLabelParams = {
98
+ value: string;
99
+ };
100
+ type ViewerLanguage = 'english' | 'portuguese';
101
+ interface FileViewerShellTranslations {
102
+ closeAriaLabel: string;
103
+ printAriaLabel: string;
104
+ printTooltip: string;
105
+ downloadAriaLabel: string;
106
+ downloadTooltip: string;
107
+ downloadInProgressAriaLabel: string;
108
+ downloadInProgressTooltip: string;
109
+ openInModalAriaLabel: string;
110
+ openInModalTooltip: string;
111
+ unsupportedFileType: FormattableMessage<UnsupportedFileTypeParams>;
112
+ }
113
+ interface ImageViewerTranslations {
114
+ zoomOutAriaLabel: string;
115
+ fitScreenAriaLabel: string;
116
+ zoomInAriaLabel: string;
117
+ zoomOutTooltip: string;
118
+ fitScreenTooltip: string;
119
+ zoomInTooltip: string;
120
+ }
121
+ interface PdfViewerTranslations {
122
+ pageLabel: string;
123
+ pageInputAriaLabel: FormattableMessage<PdfPageInputAriaLabelParams>;
124
+ previousPageAriaLabel: string;
125
+ nextPageAriaLabel: string;
126
+ previousPageTooltip: string;
127
+ nextPageTooltip: string;
128
+ zoomOutAriaLabel: string;
129
+ fitWidthAriaLabel: string;
130
+ zoomInAriaLabel: string;
131
+ zoomOutTooltip: string;
132
+ fitWidthTooltip: string;
133
+ zoomInTooltip: string;
134
+ }
135
+ interface FileViewerTranslations {
136
+ fileViewer: FileViewerShellTranslations;
137
+ imageViewer: ImageViewerTranslations;
138
+ pdfViewer: PdfViewerTranslations;
139
+ }
140
+ declare const fileViewerTranslationsByLanguage: Record<ViewerLanguage, FileViewerTranslations>;
141
+ /** English defaults (same object as `fileViewerTranslationsByLanguage.english`). */
142
+ declare const defaultFileViewerTranslations: FileViewerTranslations;
143
+ declare function getFileViewerTranslations(language: ViewerLanguage): FileViewerTranslations;
144
+ declare function resolveFormattedMessage<P extends Record<string, unknown>>(message: FormattableMessage<P>, params: P): string;
145
+
146
+ type PdfViewMode = 'single' | 'continuous';
147
+ interface PaginationRenderProps {
148
+ pageNumber: number;
149
+ numPages: number;
150
+ previousPage: () => void;
151
+ nextPage: () => void;
152
+ goToPage: (page: number) => void;
153
+ isFirstPage: boolean;
154
+ isLastPage: boolean;
155
+ viewMode: PdfViewMode;
156
+ }
157
+ interface PdfViewerProps {
158
+ url: string;
159
+ viewMode?: PdfViewMode;
160
+ debounceDelay?: number;
161
+ /** Debounce before re-rendering canvas at new resolution after zoom (default: 500ms). */
162
+ zoomDebounceDelay?: number;
163
+ renderTextLayer?: boolean;
164
+ renderAnnotationLayer?: boolean;
165
+ renderLoading?: ReactNode;
166
+ preloadAhead?: number;
167
+ onLoadSuccess?: (numPages: number) => void;
168
+ onLoadError?: (error: Error) => void;
169
+ onPageChange?: (page: number) => void;
170
+ defaultPage?: number;
171
+ renderPagination?: ((props: PaginationRenderProps) => ReactNode) | null;
172
+ paginationClassName?: string;
173
+ language?: ViewerLanguage;
174
+ className?: string;
175
+ pageClassName?: string;
176
+ classNames?: PdfViewerClassNames;
177
+ styles?: PdfViewerStyles;
178
+ }
179
+ declare function PdfViewer(props: PdfViewerProps): react_jsx_runtime.JSX.Element;
180
+
181
+ interface FileViewerProps {
182
+ /**
183
+ * The display mode for the file viewer.
184
+ * - `inline`: fits to its parent container (default)
185
+ * - `modal`: renders as a full-screen fixed dialog overlay
186
+ */
187
+ mode?: 'modal' | 'inline';
188
+ open: boolean;
189
+ onOpenChange: (open: boolean) => void;
190
+ name: string;
191
+ extension: string;
192
+ url?: string;
193
+ isLoading?: boolean;
194
+ /** Optional; defaults to built-in download of `url` as `name`. */
195
+ onDownload?: () => void;
196
+ pdfViewerProps?: Omit<PdfViewerProps, 'url' | 'language'>;
197
+ renderUnsupported?: ReactNode;
198
+ language?: ViewerLanguage;
199
+ /**
200
+ * When omitted: hidden in `inline` mode, visible in `modal` mode.
201
+ * Instance prop overrides global defaults from `setFileViewerDefaults`.
202
+ */
203
+ hideCloseButton?: boolean;
204
+ /**
205
+ * In `inline` mode, shows a control to open the same file in a full-screen modal.
206
+ * Defaults to `true`. Set to `false` to hide the button.
207
+ */
208
+ showOpenInModalButton?: boolean;
209
+ /** When set, called instead of the built-in modal preview. */
210
+ onOpenInModal?: () => void;
211
+ classNames?: FileViewerClassNames;
212
+ styles?: FileViewerStyles;
213
+ /** Extra classes per layer; appended to package defaults (use `!` utilities to override when needed). */
214
+ dialogClassNames?: FileViewerDialogClassNames;
215
+ dialogStyles?: FileViewerDialogStyles;
216
+ }
217
+ declare function FileViewer({ mode: modeProp, open, onOpenChange, name, extension, url, isLoading, onDownload, pdfViewerProps, renderUnsupported, language: languageProp, hideCloseButton: hideCloseButtonProp, showOpenInModalButton: showOpenInModalButtonProp, onOpenInModal, classNames, styles, dialogClassNames, dialogStyles, }: FileViewerProps): react_jsx_runtime.JSX.Element | null;
218
+
219
+ interface ImageViewerProps {
220
+ url: string;
221
+ name: string;
222
+ language?: ViewerLanguage;
223
+ classNames?: ImageViewerClassNames;
224
+ styles?: ImageViewerStyles;
225
+ }
226
+ declare function ImageViewer({ url, name, language: languageProp, classNames: classNamesProp, styles: stylesProp, }: ImageViewerProps): react_jsx_runtime.JSX.Element;
227
+
228
+ declare function FileViewerTooltipProvider({ children, }: {
229
+ children: ReactNode;
230
+ }): react_jsx_runtime.JSX.Element;
231
+ declare function FileViewerTooltip({ content, children, disabled, classNames, styles, }: {
232
+ content: string;
233
+ children: ReactElement;
234
+ disabled?: boolean;
235
+ classNames?: FileViewerTooltipClassNames;
236
+ styles?: FileViewerTooltipStyles;
237
+ }): react_jsx_runtime.JSX.Element;
238
+
239
+ type ConfigureFileViewerPdfWorkerOptions = {
240
+ /**
241
+ * URL to `pdf.worker.min.mjs`.
242
+ *
243
+ * Prefer `getFileViewerPdfWorkerSrc()` (same version as react-pdf’s API).
244
+ *
245
+ * If you use `new URL('pdfjs-dist/build/pdf.worker.min.mjs', import.meta.url)`,
246
+ * pin `pdfjs-dist` to the same version as react-pdf (see `pdfjs.version`), or
247
+ * npm may hoist a newer `pdfjs-dist` and the worker will not match the API.
248
+ */
249
+ workerSrc?: string;
250
+ };
251
+ /**
252
+ * Worker URL for the **same** pdfjs version react-pdf uses (`pdfjs.version`).
253
+ * Use this as `workerSrc` to avoid API/worker mismatches (e.g. 4.8.69 vs 4.10.x).
254
+ */
255
+ declare function getFileViewerPdfWorkerSrc(): string;
256
+ /** @deprecated Use `getFileViewerPdfWorkerSrc` */
257
+ declare const getFileViewerPdfWorkerCdnUrl: typeof getFileViewerPdfWorkerSrc;
258
+ /** Whether `configureFileViewerPdfWorker` has been called. */
259
+ declare function isFileViewerPdfWorkerConfigured(): boolean;
260
+ /**
261
+ * Configures the PDF.js worker used by `FileViewer` / `PdfViewer`.
262
+ *
263
+ * Call once in your app entry **before** rendering PDFs.
264
+ *
265
+ * Default (`workerSrc` omitted): `getFileViewerPdfWorkerSrc()` (unpkg, needs network).
266
+ */
267
+ declare function configureFileViewerPdfWorker(options?: ConfigureFileViewerPdfWorkerOptions): void;
268
+
269
+ type DeepPartial<T> = T extends (...args: never[]) => unknown ? T : T extends object ? {
270
+ [K in keyof T]?: DeepPartial<T[K]>;
271
+ } : T;
272
+
273
+ interface FileViewerDefaults {
274
+ language?: ViewerLanguage;
275
+ fileViewer?: {
276
+ mode?: 'modal' | 'inline';
277
+ hideCloseButton?: boolean;
278
+ showOpenInModalButton?: boolean;
279
+ dialogClassNames?: FileViewerDialogClassNames;
280
+ dialogStyles?: FileViewerDialogStyles;
281
+ classNames?: FileViewerClassNames;
282
+ styles?: FileViewerStyles;
283
+ pdfViewerProps?: Omit<PdfViewerProps, 'url' | 'language'>;
284
+ };
285
+ pdfViewer?: Omit<PdfViewerProps, 'url' | 'language'>;
286
+ imageViewer?: Omit<ImageViewerProps, 'url' | 'name' | 'language'>;
287
+ toolbar?: {
288
+ classNames?: ViewerToolbarClassNames;
289
+ styles?: ViewerToolbarStyles;
290
+ };
291
+ tooltip?: {
292
+ delayDuration?: number;
293
+ skipDelayDuration?: number;
294
+ classNames?: FileViewerTooltipClassNames;
295
+ styles?: FileViewerTooltipStyles;
296
+ };
297
+ autoHide?: {
298
+ proximityThreshold?: number;
299
+ timeout?: number;
300
+ };
301
+ translations?: DeepPartial<Record<ViewerLanguage, FileViewerTranslations>>;
302
+ }
303
+ declare function setFileViewerDefaults(partial: DeepPartial<FileViewerDefaults>): void;
304
+ declare function getFileViewerDefaults(): Readonly<FileViewerDefaults>;
305
+ declare function resetFileViewerDefaults(): void;
306
+ declare function resolvePdfViewerProps(instance?: Omit<PdfViewerProps, 'url' | 'language'>): Omit<PdfViewerProps, 'url' | 'language'>;
307
+ declare function resolveImageViewerProps(instance?: Omit<ImageViewerProps, 'url' | 'name' | 'language'>): Omit<ImageViewerProps, 'url' | 'name' | 'language'>;
308
+
309
+ export { type ConfigureFileViewerPdfWorkerOptions, type DeepPartial, FileViewer, type FileViewerClassNames, type FileViewerDefaults, type FileViewerDialogClassNames, type FileViewerDialogStyles, type FileViewerProps, type FileViewerShellTranslations, type FileViewerStyles, FileViewerTooltip, type FileViewerTooltipClassNames, FileViewerTooltipProvider, type FileViewerTooltipStyles, type FileViewerTranslations, type FormattableMessage, ImageViewer, type ImageViewerClassNames, type ImageViewerProps, type ImageViewerStyles, type ImageViewerTranslations, type PaginationRenderProps, type PdfPageInputAriaLabelParams, type PdfViewMode, PdfViewer, type PdfViewerClassNames, type PdfViewerProps, type PdfViewerStyles, type PdfViewerTranslations, type SlotStyle, type UnsupportedFileTypeParams, type ViewerLanguage, type ViewerToolbarClassNames, type ViewerToolbarStyles, configureFileViewerPdfWorker, defaultFileViewerTranslations, fileViewerTranslationsByLanguage, getFileViewerDefaults, getFileViewerPdfWorkerCdnUrl, getFileViewerPdfWorkerSrc, getFileViewerTranslations, isFileViewerPdfWorkerConfigured, resetFileViewerDefaults, resolveFormattedMessage, resolveImageViewerProps, resolvePdfViewerProps, setFileViewerDefaults };