@jacktea/img-viewer 0.1.3

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 (45) hide show
  1. package/LICENSE +25 -0
  2. package/README.md +42 -0
  3. package/THIRD_PARTY_NOTICES.md +44 -0
  4. package/dist/components/file-info.d.ts +28 -0
  5. package/dist/components/file-info.d.ts.map +1 -0
  6. package/dist/components/magnifier.d.ts +31 -0
  7. package/dist/components/magnifier.d.ts.map +1 -0
  8. package/dist/components/toolbar.d.ts +60 -0
  9. package/dist/components/toolbar.d.ts.map +1 -0
  10. package/dist/components/viewer-carousel.d.ts +43 -0
  11. package/dist/components/viewer-carousel.d.ts.map +1 -0
  12. package/dist/components/viewer-gallery.d.ts +27 -0
  13. package/dist/components/viewer-gallery.d.ts.map +1 -0
  14. package/dist/components/viewer-single.d.ts +36 -0
  15. package/dist/components/viewer-single.d.ts.map +1 -0
  16. package/dist/components/viewer-slideshow.d.ts +28 -0
  17. package/dist/components/viewer-slideshow.d.ts.map +1 -0
  18. package/dist/core/format-converter.d.ts +29 -0
  19. package/dist/core/format-converter.d.ts.map +1 -0
  20. package/dist/core/image-loader.d.ts +42 -0
  21. package/dist/core/image-loader.d.ts.map +1 -0
  22. package/dist/core/native-wasm-codecs.d.ts +25 -0
  23. package/dist/core/native-wasm-codecs.d.ts.map +1 -0
  24. package/dist/core/progressive-loader.d.ts +22 -0
  25. package/dist/core/progressive-loader.d.ts.map +1 -0
  26. package/dist/core/transform.d.ts +52 -0
  27. package/dist/core/transform.d.ts.map +1 -0
  28. package/dist/i18n.d.ts +49 -0
  29. package/dist/i18n.d.ts.map +1 -0
  30. package/dist/img-viewer.d.ts +107 -0
  31. package/dist/img-viewer.d.ts.map +1 -0
  32. package/dist/img-viewer.js +1547 -0
  33. package/dist/img-viewer.umd.cjs +40 -0
  34. package/dist/index-CMLQoJq1.js +1733 -0
  35. package/dist/index.d.ts +23 -0
  36. package/dist/index.d.ts.map +1 -0
  37. package/dist/types.d.ts +153 -0
  38. package/dist/types.d.ts.map +1 -0
  39. package/package.json +30 -0
  40. package/third_party/licenses/libde265-LGPL-3.0-or-later.txt +871 -0
  41. package/third_party/licenses/libheif-LGPL-3.0-or-later.txt +871 -0
  42. package/third_party/licenses/libraw-CDDL-1.0.txt +340 -0
  43. package/third_party/licenses/libraw-LGPL-2.1.txt +458 -0
  44. package/third_party/licenses/libtiff-license.txt +23 -0
  45. package/third_party/licenses/zlib-license.txt +22 -0
package/LICENSE ADDED
@@ -0,0 +1,25 @@
1
+ This license applies to original source code in this repository, excluding
2
+ third-party components and generated codec binaries listed in
3
+ `THIRD_PARTY_NOTICES.md`.
4
+
5
+ MIT License
6
+
7
+ Copyright (c) 2026 zhuzhigang
8
+
9
+ Permission is hereby granted, free of charge, to any person obtaining a copy
10
+ of this software and associated documentation files (the "Software"), to deal
11
+ in the Software without restriction, including without limitation the rights
12
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
13
+ copies of the Software, and to permit persons to whom the Software is
14
+ furnished to do so, subject to the following conditions:
15
+
16
+ The above copyright notice and this permission notice shall be included in all
17
+ copies or substantial portions of the Software.
18
+
19
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
22
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
23
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
24
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
25
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,42 @@
1
+ # @jacktea/img-viewer
2
+
3
+ 一款由于 Vue/React 等框架解耦的、无依赖的纯前端图片在线预览器,支持诸如缩放、平移等功能。
4
+
5
+ ## 安装
6
+
7
+ ```bash
8
+ npm install @jacktea/img-viewer
9
+ # 或者
10
+ pnpm add @jacktea/img-viewer
11
+ # 或者
12
+ yarn add @jacktea/img-viewer
13
+ ```
14
+
15
+ ## 使用
16
+
17
+ 这是一个基于 Web Components 构建的原生组件,你可以直接在 HTML 当中使用它。
18
+
19
+ 首先,引入脚本和样式:
20
+
21
+ ```html
22
+ <script type="module">
23
+ import '@jacktea/img-viewer';
24
+ </script>
25
+ <link rel="stylesheet" href="node_modules/@jacktea/img-viewer/dist/style.css">
26
+ ```
27
+
28
+ 然后在你的页面中使用 `img-viewer` 组件:
29
+
30
+ ```html
31
+ <img-viewer src="path/to/your/image.jpg" width="800px" height="600px"></img-viewer>
32
+ ```
33
+
34
+ ### 属性 (Attributes)
35
+
36
+ * `src`: 图片的 URL,支持普通图片,也支持某些特殊格式如并行的 PSD 解析(需要引入对应解析库)。
37
+ * `width`: 预览器容器的宽度。
38
+ * `height`: 预览器容器的高度。
39
+
40
+ ## 许可证
41
+
42
+ MIT
@@ -0,0 +1,44 @@
1
+ ## Third-Party License Notice
2
+
3
+ This repository includes and distributes WebAssembly codec artifacts built from
4
+ third-party libraries. Those components are not covered by the MIT license in
5
+ `LICENSE`.
6
+
7
+ ### Bundled codec components
8
+
9
+ | Component | Version | Used for | Upstream license |
10
+ | --- | --- | --- | --- |
11
+ | libheif | 1.18.2 | HEIF decode (`packages/core/src/wasm/libheif/*`) | LGPL-3.0-or-later |
12
+ | libde265 | 1.0.15 | HEVC decode backend for libheif | LGPL-3.0-or-later |
13
+ | LibRaw | 0.21.3 | RAW decode (`packages/core/src/wasm/libraw/*`) | Dual: LGPL-2.1 or CDDL-1.0 |
14
+ | libtiff | 4.6.0 | TIFF decode (`packages/core/src/wasm/libtiff/*`) | libtiff license (permissive) |
15
+ | zlib | 1.3.1 | Compression dependency for libtiff build | zlib license |
16
+
17
+ Version sources:
18
+ - `wasm/docker/toolchains/versions.env`
19
+ - `wasm/docker/scripts/build-libheif.sh`
20
+ - `wasm/docker/scripts/build-libraw.sh`
21
+ - `wasm/docker/scripts/build-libtiff.sh`
22
+
23
+ ### Included license texts
24
+
25
+ - `third_party/licenses/libheif-LGPL-3.0-or-later.txt`
26
+ - `third_party/licenses/libde265-LGPL-3.0-or-later.txt`
27
+ - `third_party/licenses/libraw-LGPL-2.1.txt`
28
+ - `third_party/licenses/libraw-CDDL-1.0.txt`
29
+ - `third_party/licenses/libtiff-license.txt`
30
+ - `third_party/licenses/zlib-license.txt`
31
+
32
+ ### Distribution compliance notes
33
+
34
+ - Keep this notice file and the above license texts in redistributions.
35
+ - Keep original copyright and license notices for bundled codec outputs.
36
+ - For LGPL-covered components (libheif/libde265, and LibRaw if you choose the
37
+ LGPL option), provide corresponding source and build instructions for the
38
+ shipped binaries and preserve users' rights granted by LGPL.
39
+ - This project already contains build scripts and wrappers under `wasm/docker/`
40
+ to help satisfy source-availability obligations.
41
+
42
+ If you ship binaries to end users, review your exact distribution model
43
+ (including static/dynamic linking behavior and packaging) for LGPL/CDDL
44
+ compliance.
@@ -0,0 +1,28 @@
1
+ /**
2
+ * 文件信息面板 - 显示图片基础信息和 EXIF 元数据
3
+ */
4
+ import { LoadedImage } from '../types';
5
+ import { I18nMessages } from '../i18n';
6
+ /** EXIF 数据 */
7
+ export interface ExifData {
8
+ cameraMake?: string;
9
+ cameraModel?: string;
10
+ dateTime?: string;
11
+ exposureTime?: string;
12
+ fNumber?: string;
13
+ iso?: string;
14
+ focalLength?: string;
15
+ gps?: string;
16
+ }
17
+ export declare class FileInfoPanel {
18
+ private container;
19
+ private overlay;
20
+ private messages;
21
+ constructor(container: HTMLElement, messages: I18nMessages);
22
+ updateMessages(messages: I18nMessages): void;
23
+ show(image: LoadedImage): Promise<void>;
24
+ hide(): void;
25
+ private createRow;
26
+ destroy(): void;
27
+ }
28
+ //# sourceMappingURL=file-info.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-info.d.ts","sourceRoot":"","sources":["../../src/components/file-info.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,cAAc;AACd,MAAM,WAAW,QAAQ;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,SAAS,CAAc;IAC/B,OAAO,CAAC,OAAO,CAA4B;IAC3C,OAAO,CAAC,QAAQ,CAAe;gBAEnB,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY;IAK1D,cAAc,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI;IAItC,IAAI,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IA8F7C,IAAI,IAAI,IAAI;IAWZ,OAAO,CAAC,SAAS;IAUjB,OAAO,IAAI,IAAI;CAGhB"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * 放大镜组件 - 跟随鼠标的圆形放大区域
3
+ */
4
+ export declare class Magnifier {
5
+ private container;
6
+ private lens;
7
+ private canvas;
8
+ private ctx;
9
+ private image;
10
+ private zoom;
11
+ private radius;
12
+ private enabled;
13
+ private boundMouseMove;
14
+ private boundMouseLeave;
15
+ constructor(container: HTMLElement, options?: {
16
+ zoom?: number;
17
+ radius?: number;
18
+ enabled?: boolean;
19
+ });
20
+ setImage(image: HTMLImageElement): void;
21
+ enable(): void;
22
+ disable(): void;
23
+ toggle(): void;
24
+ setZoom(zoom: number): void;
25
+ setRadius(radius: number): void;
26
+ private onMouseMove;
27
+ private onMouseLeave;
28
+ private drawMagnified;
29
+ destroy(): void;
30
+ }
31
+ //# sourceMappingURL=magnifier.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"magnifier.d.ts","sourceRoot":"","sources":["../../src/components/magnifier.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,qBAAa,SAAS;IACpB,OAAO,CAAC,SAAS,CAAc;IAC/B,OAAO,CAAC,IAAI,CAAc;IAC1B,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,GAAG,CAA2B;IACtC,OAAO,CAAC,KAAK,CAAiC;IAC9C,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAkB;IACjC,OAAO,CAAC,cAAc,CAA0B;IAChD,OAAO,CAAC,eAAe,CAAa;gBAGlC,SAAS,EAAE,WAAW,EACtB,OAAO,GAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAO;IA+BrE,QAAQ,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI;IAKvC,MAAM,IAAI,IAAI;IAQd,OAAO,IAAI,IAAI;IAWf,MAAM,IAAI,IAAI;IAQd,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI3B,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAQ/B,OAAO,CAAC,WAAW;IA4BnB,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,aAAa;IAyCrB,OAAO,IAAI,IAAI;CAIhB"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * 工具栏组件 - SVG 图标按钮
3
+ */
4
+ import { ViewMode, ToolbarConfig } from '../types';
5
+ import { I18nMessages } from '../i18n';
6
+ /** 工具栏事件 */
7
+ export interface ToolbarEvents {
8
+ onRotateLeft: () => void;
9
+ onRotateRight: () => void;
10
+ onFlipX: () => void;
11
+ onFlipY: () => void;
12
+ onZoomIn: () => void;
13
+ onZoomOut: () => void;
14
+ onResetZoom: () => void;
15
+ onToggleMagnifier: (enabled: boolean) => void;
16
+ onModeChange: (mode: ViewMode) => void;
17
+ onFullscreen: () => void;
18
+ onDownload: () => void;
19
+ onPrev: () => void;
20
+ onNext: () => void;
21
+ onInfo: () => void;
22
+ }
23
+ export declare class Toolbar {
24
+ private element;
25
+ private events;
26
+ private isReadonly;
27
+ private hasMultiple;
28
+ private currentMode;
29
+ private magnifierEnabled;
30
+ private config;
31
+ private messages;
32
+ constructor(container: HTMLElement, events: Partial<ToolbarEvents>, options?: {
33
+ readonly?: boolean;
34
+ hasMultiple?: boolean;
35
+ currentMode?: ViewMode;
36
+ magnifierEnabled?: boolean;
37
+ toolbar?: ToolbarConfig;
38
+ messages?: I18nMessages;
39
+ });
40
+ private applyToolbarClasses;
41
+ private render;
42
+ private filterItems;
43
+ private renderItem;
44
+ /** 浮动模式:单按钮循环切换模式 */
45
+ private renderCyclicModeButton;
46
+ private renderModeButtons;
47
+ private createGroup;
48
+ private addButton;
49
+ private updateModeButtons;
50
+ update(options: {
51
+ readonly?: boolean;
52
+ hasMultiple?: boolean;
53
+ currentMode?: ViewMode;
54
+ magnifierEnabled?: boolean;
55
+ toolbar?: ToolbarConfig;
56
+ messages?: I18nMessages;
57
+ }): void;
58
+ destroy(): void;
59
+ }
60
+ //# sourceMappingURL=toolbar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toolbar.d.ts","sourceRoot":"","sources":["../../src/components/toolbar.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,aAAa,EAA6D,MAAM,UAAU,CAAC;AAC9G,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,YAAY;AACZ,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,iBAAiB,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAC9C,YAAY,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC;IACvC,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB;AAuBD,qBAAa,OAAO;IAClB,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,MAAM,CAAyB;IACvC,OAAO,CAAC,UAAU,CAAU;IAC5B,OAAO,CAAC,WAAW,CAAU;IAC7B,OAAO,CAAC,WAAW,CAAW;IAC9B,OAAO,CAAC,gBAAgB,CAAU;IAClC,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,QAAQ,CAAe;gBAG7B,SAAS,EAAE,WAAW,EACtB,MAAM,EAAE,OAAO,CAAC,aAAa,CAAC,EAC9B,OAAO,GAAE;QACP,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,WAAW,CAAC,EAAE,OAAO,CAAC;QACtB,WAAW,CAAC,EAAE,QAAQ,CAAC;QACvB,gBAAgB,CAAC,EAAE,OAAO,CAAC;QAC3B,OAAO,CAAC,EAAE,aAAa,CAAC;QACxB,QAAQ,CAAC,EAAE,YAAY,CAAC;KACpB;IA4BR,OAAO,CAAC,mBAAmB;IAQ3B,OAAO,CAAC,MAAM;IA2Bd,OAAO,CAAC,WAAW;IAqBnB,OAAO,CAAC,UAAU;IA4DlB,qBAAqB;IACrB,OAAO,CAAC,sBAAsB;IAuB9B,OAAO,CAAC,iBAAiB;IAyBzB,OAAO,CAAC,WAAW;IAOnB,OAAO,CAAC,SAAS;IAoBjB,OAAO,CAAC,iBAAiB;IAOzB,MAAM,CAAC,OAAO,EAAE;QACd,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,WAAW,CAAC,EAAE,OAAO,CAAC;QACtB,WAAW,CAAC,EAAE,QAAQ,CAAC;QACvB,gBAAgB,CAAC,EAAE,OAAO,CAAC;QAC3B,OAAO,CAAC,EAAE,aAAa,CAAC;QACxB,QAAQ,CAAC,EAAE,YAAY,CAAC;KACzB,GAAG,IAAI;IAWR,OAAO,IAAI,IAAI;CAGhB"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * 轮播图模式 - 水平滑动切换,带指示器
3
+ *
4
+ * 首尾衔接采用"克隆哨兵"方案:
5
+ * Track 布局:
6
+ * [clone-last] [real-0] [real-1] ... [real-n-1] [clone-first]
7
+ * trackPos: 0 1 2 ... n n+1
8
+ */
9
+ import { LoadedImage } from '../types';
10
+ export declare class ViewerCarousel {
11
+ private container;
12
+ private track;
13
+ private indicators;
14
+ private images;
15
+ /** 当前逻辑索引(0-based,对应真实图片) */
16
+ private currentIndex;
17
+ /** 当前 track 中的位置(含哨兵偏移,1-based 为第一张真实图) */
18
+ private trackPos;
19
+ private autoPlayTimer;
20
+ private onChange?;
21
+ constructor(container: HTMLElement, onChange?: (index: number) => void);
22
+ setImages(images: LoadedImage[]): void;
23
+ goTo(index: number): void;
24
+ prev(): void;
25
+ next(): void;
26
+ startAutoPlay(interval?: number): void;
27
+ stopAutoPlay(): void;
28
+ getCurrentIndex(): number;
29
+ /**
30
+ * 如果当前停在哨兵位,立即(无动画)跳转到真实位置。
31
+ * 这样快速点击时,新的动画从正确的位置开始。
32
+ */
33
+ private snapIfNeeded;
34
+ private renderSlides;
35
+ private createSlide;
36
+ private renderIndicators;
37
+ private moveTo;
38
+ private onTransitionEnd;
39
+ private updateIndicators;
40
+ private bindSwipe;
41
+ destroy(): void;
42
+ }
43
+ //# sourceMappingURL=viewer-carousel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"viewer-carousel.d.ts","sourceRoot":"","sources":["../../src/components/viewer-carousel.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAEvC,qBAAa,cAAc;IACzB,OAAO,CAAC,SAAS,CAAc;IAC/B,OAAO,CAAC,KAAK,CAAc;IAC3B,OAAO,CAAC,UAAU,CAAc;IAChC,OAAO,CAAC,MAAM,CAAqB;IACnC,6BAA6B;IAC7B,OAAO,CAAC,YAAY,CAAa;IACjC,2CAA2C;IAC3C,OAAO,CAAC,QAAQ,CAAa;IAC7B,OAAO,CAAC,aAAa,CAA+C;IACpE,OAAO,CAAC,QAAQ,CAAC,CAA0B;gBAE/B,SAAS,EAAE,WAAW,EAAE,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI;IAoCtE,SAAS,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI;IAStC,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IASzB,IAAI,IAAI,IAAI;IASZ,IAAI,IAAI,IAAI;IASZ,aAAa,CAAC,QAAQ,GAAE,MAAa,GAAG,IAAI;IAK5C,YAAY,IAAI,IAAI;IAOpB,eAAe,IAAI,MAAM;IAMzB;;;OAGG;IACH,OAAO,CAAC,YAAY;IAWpB,OAAO,CAAC,YAAY;IAWpB,OAAO,CAAC,WAAW;IAWnB,OAAO,CAAC,gBAAgB;IAUxB,OAAO,CAAC,MAAM;IAcd,OAAO,CAAC,eAAe;IAWvB,OAAO,CAAC,gBAAgB;IAOxB,OAAO,CAAC,SAAS;IAoBjB,OAAO,IAAI,IAAI;CAIhB"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * 相册模式 - 缩略图网格 + 大图查看
3
+ */
4
+ import { LoadedImage } from '../types';
5
+ export declare class ViewerGallery {
6
+ private container;
7
+ private grid;
8
+ private lightbox;
9
+ private lightboxImg;
10
+ private lightboxCounter;
11
+ private images;
12
+ private currentIndex;
13
+ private isLightboxOpen;
14
+ private onChange?;
15
+ constructor(container: HTMLElement, onChange?: (index: number) => void);
16
+ setImages(images: LoadedImage[]): void;
17
+ getCurrentIndex(): number;
18
+ private renderGrid;
19
+ private openLightbox;
20
+ private closeLightbox;
21
+ private updateLightbox;
22
+ private lightboxPrev;
23
+ private lightboxNext;
24
+ private bindLightboxEvents;
25
+ destroy(): void;
26
+ }
27
+ //# sourceMappingURL=viewer-gallery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"viewer-gallery.d.ts","sourceRoot":"","sources":["../../src/components/viewer-gallery.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAEvC,qBAAa,aAAa;IACxB,OAAO,CAAC,SAAS,CAAc;IAC/B,OAAO,CAAC,IAAI,CAAc;IAC1B,OAAO,CAAC,QAAQ,CAAc;IAC9B,OAAO,CAAC,WAAW,CAAmB;IACtC,OAAO,CAAC,eAAe,CAAc;IACrC,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,YAAY,CAAa;IACjC,OAAO,CAAC,cAAc,CAAkB;IACxC,OAAO,CAAC,QAAQ,CAAC,CAA0B;gBAE/B,SAAS,EAAE,WAAW,EAAE,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI;IAoCtE,SAAS,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI;IAKtC,eAAe,IAAI,MAAM;IAIzB,OAAO,CAAC,UAAU;IAwBlB,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,aAAa;IAKrB,OAAO,CAAC,cAAc;IAStB,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,kBAAkB;IAmB1B,OAAO,IAAI,IAAI;CAIhB"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * 单图查看器 - 显示单张图片,支持拖拽平移和滚轮缩放
3
+ */
4
+ import { LoadedImage } from '../types';
5
+ import { TransformManager } from '../core/transform';
6
+ import { Magnifier } from './magnifier';
7
+ export declare class ViewerSingle {
8
+ private container;
9
+ private wrapper;
10
+ private imgElement;
11
+ private transform;
12
+ private magnifier;
13
+ private currentImage;
14
+ private isDragging;
15
+ private dragStartX;
16
+ private dragStartY;
17
+ private lastOffsetX;
18
+ private lastOffsetY;
19
+ constructor(container: HTMLElement, magnifierOptions?: {
20
+ zoom?: number;
21
+ radius?: number;
22
+ enabled?: boolean;
23
+ });
24
+ /**
25
+ * 显示图片
26
+ */
27
+ show(image: LoadedImage): void;
28
+ getTransform(): TransformManager;
29
+ getMagnifier(): Magnifier;
30
+ getImageElement(): HTMLImageElement;
31
+ private applyTransform;
32
+ private bindEvents;
33
+ private getTouchDistance;
34
+ destroy(): void;
35
+ }
36
+ //# sourceMappingURL=viewer-single.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"viewer-single.d.ts","sourceRoot":"","sources":["../../src/components/viewer-single.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAkB,MAAM,UAAU,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,qBAAa,YAAY;IACvB,OAAO,CAAC,SAAS,CAAc;IAC/B,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,UAAU,CAAmB;IACrC,OAAO,CAAC,SAAS,CAAmB;IACpC,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,YAAY,CAA4B;IAGhD,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,WAAW,CAAK;gBAGtB,SAAS,EAAE,WAAW,EACtB,gBAAgB,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE;IA4B1E;;OAEG;IACH,IAAI,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI;IAS9B,YAAY,IAAI,gBAAgB;IAIhC,YAAY,IAAI,SAAS;IAIzB,eAAe,IAAI,gBAAgB;IAInC,OAAO,CAAC,cAAc;IAQtB,OAAO,CAAC,UAAU;IAyGlB,OAAO,CAAC,gBAAgB;IAMxB,OAAO,IAAI,IAAI;CAKhB"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * 幻灯片模式 - 全屏淡入淡出展示
3
+ */
4
+ import { LoadedImage } from '../types';
5
+ export declare class ViewerSlideshow {
6
+ private container;
7
+ private viewport;
8
+ private counter;
9
+ private images;
10
+ private currentIndex;
11
+ private autoPlayTimer;
12
+ private slides;
13
+ private onChange?;
14
+ constructor(container: HTMLElement, onChange?: (index: number) => void);
15
+ setImages(images: LoadedImage[]): void;
16
+ goTo(index: number): void;
17
+ prev(): void;
18
+ next(): void;
19
+ startAutoPlay(interval?: number): void;
20
+ stopAutoPlay(): void;
21
+ getCurrentIndex(): number;
22
+ private renderSlides;
23
+ private updateCounter;
24
+ private bindKeyboard;
25
+ private bindClick;
26
+ destroy(): void;
27
+ }
28
+ //# sourceMappingURL=viewer-slideshow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"viewer-slideshow.d.ts","sourceRoot":"","sources":["../../src/components/viewer-slideshow.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAEvC,qBAAa,eAAe;IAC1B,OAAO,CAAC,SAAS,CAAc;IAC/B,OAAO,CAAC,QAAQ,CAAc;IAC9B,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,YAAY,CAAa;IACjC,OAAO,CAAC,aAAa,CAA+C;IACpE,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,QAAQ,CAAC,CAA0B;gBAE/B,SAAS,EAAE,WAAW,EAAE,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI;IAuBtE,SAAS,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI;IAOtC,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAoBzB,IAAI,IAAI,IAAI;IAIZ,IAAI,IAAI,IAAI;IAIZ,aAAa,CAAC,QAAQ,GAAE,MAAa,GAAG,IAAI;IAK5C,YAAY,IAAI,IAAI;IAOpB,eAAe,IAAI,MAAM;IAIzB,OAAO,CAAC,YAAY;IAmBpB,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,SAAS;IASjB,OAAO,IAAI,IAAI;CAIhB"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * 格式转换器 - 按需转换不支持的图片格式(native wasm only)
3
+ * HEIF/TIFF/RAW: 自编译 wasm
4
+ */
5
+ import { type NativeDecodeMode } from './native-wasm-codecs';
6
+ export interface ConverterDecodeConfig {
7
+ mode: NativeDecodeMode;
8
+ fallbackToRgba8: boolean;
9
+ }
10
+ export declare class FormatConverter {
11
+ private decodeConfig;
12
+ constructor(config?: Partial<ConverterDecodeConfig>);
13
+ setDecodeConfig(config: Partial<ConverterDecodeConfig>): void;
14
+ getDecodeConfig(): ConverterDecodeConfig;
15
+ /**
16
+ * 将不支持的格式转为可显示的 WebP
17
+ */
18
+ convertToDisplayable(blob: Blob, mimeType: string): Promise<Blob>;
19
+ private isHeifMime;
20
+ private isRawMime;
21
+ private isTiffMime;
22
+ private isPsdMime;
23
+ private convertNativeToBlob;
24
+ private rgbaToWebpBlob;
25
+ private imageDataToWebpBlob;
26
+ private convertPsdToBlob;
27
+ isAvailable(): Promise<boolean>;
28
+ }
29
+ //# sourceMappingURL=format-converter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format-converter.d.ts","sourceRoot":"","sources":["../../src/core/format-converter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAGL,KAAK,gBAAgB,EAEtB,MAAM,sBAAsB,CAAC;AA6B9B,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,gBAAgB,CAAC;IACvB,eAAe,EAAE,OAAO,CAAC;CAC1B;AAOD,qBAAa,eAAe;IAC1B,OAAO,CAAC,YAAY,CAAwB;gBAEhC,MAAM,GAAE,OAAO,CAAC,qBAAqB,CAAM;IAOvD,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,qBAAqB,CAAC,GAAG,IAAI;IAO7D,eAAe,IAAI,qBAAqB;IAIxC;;OAEG;IACG,oBAAoB,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAoBvE,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,SAAS;YAQH,mBAAmB;YAoBnB,cAAc;IAU5B,OAAO,CAAC,mBAAmB;YAsBb,gBAAgB;IAmBxB,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;CAGtC"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * 图片加载器 - 支持本地文件和远程 URL
3
+ */
4
+ import { ImageSource, LoadedImage, type DecoderConfig } from '../types';
5
+ export declare class ImageLoader {
6
+ private converter;
7
+ constructor(decoderConfig?: Partial<DecoderConfig>);
8
+ setDecoderConfig(config: Partial<DecoderConfig>): void;
9
+ /**
10
+ * 加载图片
11
+ */
12
+ load(source: ImageSource): Promise<LoadedImage>;
13
+ /**
14
+ * 批量加载图片
15
+ */
16
+ loadAll(sources: ImageSource[], onProgress?: (loaded: number, total: number) => void): Promise<LoadedImage[]>;
17
+ /**
18
+ * 释放已加载图片的资源
19
+ */
20
+ release(image: LoadedImage): void;
21
+ /**
22
+ * 检查 MIME 类型是否原生支持
23
+ */
24
+ private isNativelySupported;
25
+ /**
26
+ * 从 URL 提取文件名
27
+ */
28
+ private getFileNameFromUrl;
29
+ /**
30
+ * 根据文件名推测 MIME 类型
31
+ */
32
+ private guessMimeType;
33
+ /**
34
+ * base64 转 Blob
35
+ */
36
+ private base64ToBlob;
37
+ /**
38
+ * 获取图片尺寸
39
+ */
40
+ private getImageDimensions;
41
+ }
42
+ //# sourceMappingURL=image-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image-loader.d.ts","sourceRoot":"","sources":["../../src/core/image-loader.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,WAAW,EAAE,WAAW,EAAsB,KAAK,aAAa,EAAE,MAAM,UAAU,CAAC;AAG5F,qBAAa,WAAW;IACtB,OAAO,CAAC,SAAS,CAAkB;gBAEvB,aAAa,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC;IAOlD,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,IAAI;IAOtD;;OAEG;IACG,IAAI,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;IA4DrD;;OAEG;IACG,OAAO,CACX,OAAO,EAAE,WAAW,EAAE,EACtB,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,GACnD,OAAO,CAAC,WAAW,EAAE,CAAC;IAczB;;OAEG;IACH,OAAO,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI;IAMjC;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAO3B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAU1B;;OAEG;IACH,OAAO,CAAC,aAAa;IAuCrB;;OAEG;IACH,OAAO,CAAC,YAAY;IAqBpB;;OAEG;IACH,OAAO,CAAC,kBAAkB;CAQ3B"}
@@ -0,0 +1,25 @@
1
+ export type NativeWasmCodec = 'heif' | 'tiff' | 'raw';
2
+ export type NativeDecodeMode = 'auto' | 'rgba8' | 'rgba16';
3
+ export interface NativeWasmOptions {
4
+ enabled: boolean;
5
+ preferNative: boolean;
6
+ baseUrl: string;
7
+ codecs: NativeWasmCodec[];
8
+ }
9
+ export interface NativeDecodeRequest {
10
+ mode?: NativeDecodeMode;
11
+ fallbackToRgba8?: boolean;
12
+ }
13
+ export interface NativeDecodeResult {
14
+ width: number;
15
+ height: number;
16
+ rgba: Uint8ClampedArray;
17
+ backend: string;
18
+ decodeMode: Exclude<NativeDecodeMode, 'auto'>;
19
+ bitDepth: number;
20
+ }
21
+ export declare function configureNativeWasm(options: Partial<NativeWasmOptions>): void;
22
+ export declare function resetNativeWasmOptions(): void;
23
+ export declare function getNativeWasmOptions(): NativeWasmOptions;
24
+ export declare function decodeWithNativeWasm(codec: NativeWasmCodec, blob: Blob, request?: NativeDecodeRequest): Promise<NativeDecodeResult | null>;
25
+ //# sourceMappingURL=native-wasm-codecs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"native-wasm-codecs.d.ts","sourceRoot":"","sources":["../../src/core/native-wasm-codecs.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC;AACtD,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;AAE3D,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,OAAO,CAAC;IAEtB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,eAAe,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,CAAC,EAAE,gBAAgB,CAAC;IAExB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,iBAAiB,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,OAAO,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;IAC9C,QAAQ,EAAE,MAAM,CAAC;CAClB;AAqFD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAO7E;AAED,wBAAgB,sBAAsB,IAAI,IAAI,CAG7C;AAED,wBAAgB,oBAAoB,IAAI,iBAAiB,CAExD;AA4UD,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,eAAe,EACtB,IAAI,EAAE,IAAI,EACV,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAiCpC"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * 渐进式加载 - 大图先显示模糊缩略图,然后逐步加载清晰版本
3
+ */
4
+ export declare class ProgressiveLoader {
5
+ private threshold;
6
+ constructor(threshold?: number);
7
+ /**
8
+ * 判断图片是否需要渐进式加载
9
+ */
10
+ needsProgressiveLoading(size: number): boolean;
11
+ /**
12
+ * 创建模糊缩略图
13
+ */
14
+ createThumbnail(blobUrl: string, maxSize?: number): Promise<string>;
15
+ /**
16
+ * 渐进式加载 URL 图片
17
+ * 通过 fetch + ReadableStream 实现
18
+ */
19
+ loadProgressive(url: string, onProgress?: (loaded: number, total: number) => void): Promise<Blob>;
20
+ private loadImage;
21
+ }
22
+ //# sourceMappingURL=progressive-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progressive-loader.d.ts","sourceRoot":"","sources":["../../src/core/progressive-loader.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,SAAS,CAAS;gBAEd,SAAS,GAAE,MAAoB;IAI3C;;OAEG;IACH,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI9C;;OAEG;IACG,eAAe,CACnB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,MAAW,GACnB,OAAO,CAAC,MAAM,CAAC;IAiBlB;;;OAGG;IACG,eAAe,CACnB,GAAG,EAAE,MAAM,EACX,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,GACnD,OAAO,CAAC,IAAI,CAAC;IAgChB,OAAO,CAAC,SAAS;CAQlB"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * 图片变换管理 - 旋转、翻转、缩放
3
+ */
4
+ import { TransformState } from '../types';
5
+ export declare class TransformManager {
6
+ private state;
7
+ private onChange?;
8
+ constructor(onChange?: (state: TransformState) => void);
9
+ get current(): TransformState;
10
+ /**
11
+ * 旋转(顺时针)
12
+ */
13
+ rotateRight(): void;
14
+ /**
15
+ * 旋转(逆时针)
16
+ */
17
+ rotateLeft(): void;
18
+ /**
19
+ * 水平翻转
20
+ */
21
+ flipHorizontal(): void;
22
+ /**
23
+ * 垂直翻转
24
+ */
25
+ flipVertical(): void;
26
+ /**
27
+ * 设置缩放
28
+ */
29
+ setScale(scale: number): void;
30
+ /**
31
+ * 放大
32
+ */
33
+ zoomIn(step?: number): void;
34
+ /**
35
+ * 缩小
36
+ */
37
+ zoomOut(step?: number): void;
38
+ /**
39
+ * 设置偏移
40
+ */
41
+ setOffset(x: number, y: number): void;
42
+ /**
43
+ * 重置所有变换
44
+ */
45
+ reset(): void;
46
+ /**
47
+ * 生成 CSS transform 字符串
48
+ */
49
+ toCSSTransform(): string;
50
+ private notify;
51
+ }
52
+ //# sourceMappingURL=transform.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transform.d.ts","sourceRoot":"","sources":["../../src/core/transform.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,cAAc,EAAqB,MAAM,UAAU,CAAC;AAE7D,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,KAAK,CAAiB;IAC9B,OAAO,CAAC,QAAQ,CAAC,CAAkC;gBAEvC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI;IAKtD,IAAI,OAAO,IAAI,cAAc,CAE5B;IAED;;OAEG;IACH,WAAW,IAAI,IAAI;IAKnB;;OAEG;IACH,UAAU,IAAI,IAAI;IAKlB;;OAEG;IACH,cAAc,IAAI,IAAI;IAKtB;;OAEG;IACH,YAAY,IAAI,IAAI;IAKpB;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK7B;;OAEG;IACH,MAAM,CAAC,IAAI,GAAE,MAAa,GAAG,IAAI;IAIjC;;OAEG;IACH,OAAO,CAAC,IAAI,GAAE,MAAa,GAAG,IAAI;IAIlC;;OAEG;IACH,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI;IAMrC;;OAEG;IACH,KAAK,IAAI,IAAI;IAKb;;OAEG;IACH,cAAc,IAAI,MAAM;IAexB,OAAO,CAAC,MAAM;CAGf"}
package/dist/i18n.d.ts ADDED
@@ -0,0 +1,49 @@
1
+ /**
2
+ * 国际化支持
3
+ */
4
+ /** 翻译消息接口 */
5
+ export interface I18nMessages {
6
+ rotateLeft: string;
7
+ rotateRight: string;
8
+ flipX: string;
9
+ flipY: string;
10
+ zoomIn: string;
11
+ zoomOut: string;
12
+ reset: string;
13
+ prev: string;
14
+ next: string;
15
+ fullscreen: string;
16
+ download: string;
17
+ magnifier: string;
18
+ info: string;
19
+ modeSingle: string;
20
+ modeCarousel: string;
21
+ modeSlideshow: string;
22
+ modeGallery: string;
23
+ loading: string;
24
+ loadingProgress: string;
25
+ loadError: string;
26
+ fileInfo: string;
27
+ fileName: string;
28
+ fileSize: string;
29
+ imageDimensions: string;
30
+ mimeType: string;
31
+ metadata: string;
32
+ cameraMake: string;
33
+ cameraModel: string;
34
+ dateTime: string;
35
+ exposureTime: string;
36
+ fNumber: string;
37
+ iso: string;
38
+ focalLength: string;
39
+ gps: string;
40
+ close: string;
41
+ dropHint: string;
42
+ }
43
+ /** 获取指定 locale 的消息,不存在则回退到 zh-CN */
44
+ export declare function getMessages(locale: string): I18nMessages;
45
+ /** 支持的语言列表 */
46
+ export type LocaleName = 'zh-CN' | 'en';
47
+ /** 注册自定义语言包 */
48
+ export declare function registerLocale(name: string, messages: I18nMessages): void;
49
+ //# sourceMappingURL=i18n.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../src/i18n.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,aAAa;AACb,MAAM,WAAW,YAAY;IAE3B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IAGb,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IAGpB,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAGlB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IAGd,QAAQ,EAAE,MAAM,CAAC;CAClB;AAgGD,oCAAoC;AACpC,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,CAExD;AAED,cAAc;AACd,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,IAAI,CAAC;AAExC,eAAe;AACf,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,GAAG,IAAI,CAEzE"}