@yui540/comimi 0.1.1 → 0.2.1

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 (59) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +3 -1
  3. package/dist/components/controls-dock.d.ts +10 -2
  4. package/dist/components/controls-dock.d.ts.map +1 -1
  5. package/dist/components/controls-dock.styles.d.ts +1 -1
  6. package/dist/components/controls-dock.styles.d.ts.map +1 -1
  7. package/dist/components/inputs.styles.d.ts +1 -1
  8. package/dist/components/inputs.styles.d.ts.map +1 -1
  9. package/dist/components/menu-panel.d.ts +6 -2
  10. package/dist/components/menu-panel.d.ts.map +1 -1
  11. package/dist/components/menu-panel.styles.d.ts +1 -1
  12. package/dist/components/menu-panel.styles.d.ts.map +1 -1
  13. package/dist/components/page-layout.d.ts +1 -0
  14. package/dist/components/page-layout.d.ts.map +1 -1
  15. package/dist/components/page-stage.d.ts +2 -1
  16. package/dist/components/page-stage.d.ts.map +1 -1
  17. package/dist/components/page-stage.styles.d.ts +1 -1
  18. package/dist/components/page-stage.styles.d.ts.map +1 -1
  19. package/dist/components/rabbit-mascot.d.ts +2 -1
  20. package/dist/components/rabbit-mascot.d.ts.map +1 -1
  21. package/dist/components/rabbit-mascot.styles.d.ts +1 -1
  22. package/dist/components/rabbit-mascot.styles.d.ts.map +1 -1
  23. package/dist/components/scroll-fade.d.ts +2 -0
  24. package/dist/components/scroll-fade.d.ts.map +1 -0
  25. package/dist/components/scroll-fade.styles.d.ts +2 -0
  26. package/dist/components/scroll-fade.styles.d.ts.map +1 -0
  27. package/dist/components/settings-panel.d.ts +2 -0
  28. package/dist/components/settings-panel.d.ts.map +1 -1
  29. package/dist/components/settings-panel.styles.d.ts +1 -1
  30. package/dist/components/settings-panel.styles.d.ts.map +1 -1
  31. package/dist/components/splash-screen.d.ts +2 -1
  32. package/dist/components/splash-screen.d.ts.map +1 -1
  33. package/dist/components/splash-screen.styles.d.ts +1 -1
  34. package/dist/components/splash-screen.styles.d.ts.map +1 -1
  35. package/dist/components/viewer-root.styles.d.ts +1 -1
  36. package/dist/components/viewer-root.styles.d.ts.map +1 -1
  37. package/dist/core/manga-viewer-core.d.ts +2 -1
  38. package/dist/core/manga-viewer-core.d.ts.map +1 -1
  39. package/dist/defaults.d.ts.map +1 -1
  40. package/dist/i18n/i18n.d.ts.map +1 -1
  41. package/dist/index.d.ts +1 -1
  42. package/dist/index.d.ts.map +1 -1
  43. package/dist/index.js +653 -317
  44. package/dist/manga-viewer.global.js +225 -47
  45. package/dist/renderer/renderer-callbacks.d.ts +1 -1
  46. package/dist/renderer/renderer-callbacks.d.ts.map +1 -1
  47. package/dist/renderer/viewer-renderer.d.ts +4 -2
  48. package/dist/renderer/viewer-renderer.d.ts.map +1 -1
  49. package/dist/styles/style-registry.d.ts.map +1 -1
  50. package/dist/types.d.ts +20 -3
  51. package/dist/types.d.ts.map +1 -1
  52. package/docs/USAGE.md +169 -12
  53. package/locales/en.json +6 -1
  54. package/locales/id.json +42 -0
  55. package/locales/ja.json +6 -1
  56. package/locales/ko.json +42 -0
  57. package/locales/th.json +42 -0
  58. package/locales/zh-CN.json +42 -0
  59. package/package.json +1 -1
@@ -9,7 +9,7 @@ export interface RendererCallbacks {
9
9
  toggleAutoPageTurn(): void;
10
10
  updateSettings(settings: Partial<ViewerSettings>): void;
11
11
  setLayoutMode(layoutMode: LayoutMode): void;
12
- setTheaterHeight(heightPx: number): void;
12
+ setWideHeight(heightPx: number): void;
13
13
  setPanel(panel: ViewerState["panel"]): void;
14
14
  setZoom(scale: number, panX?: number, panY?: number): void;
15
15
  setPan(panX: number, panY: number): void;
@@ -1 +1 @@
1
- {"version":3,"file":"renderer-callbacks.d.ts","sourceRoot":"","sources":["../../src/renderer/renderer-callbacks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAExE,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,QAAQ,IAAI,IAAI,CAAC;IACjB,YAAY,IAAI,IAAI,CAAC;IACrB,cAAc,IAAI,IAAI,CAAC;IACvB,kBAAkB,IAAI,IAAI,CAAC;IAC3B,aAAa,CAAC,KAAK,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IACrC,kBAAkB,IAAI,IAAI,CAAC;IAC3B,cAAc,CAAC,QAAQ,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC;IACxD,aAAa,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;IAC5C,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;IAC5C,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3D,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,SAAS,IAAI,IAAI,CAAC;CACnB"}
1
+ {"version":3,"file":"renderer-callbacks.d.ts","sourceRoot":"","sources":["../../src/renderer/renderer-callbacks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAExE,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,QAAQ,IAAI,IAAI,CAAC;IACjB,YAAY,IAAI,IAAI,CAAC;IACrB,cAAc,IAAI,IAAI,CAAC;IACvB,kBAAkB,IAAI,IAAI,CAAC;IAC3B,aAAa,CAAC,KAAK,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IACrC,kBAAkB,IAAI,IAAI,CAAC;IAC3B,cAAc,CAAC,QAAQ,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC;IACxD,aAAa,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;IAC5C,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;IAC5C,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3D,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,SAAS,IAAI,IAAI,CAAC;CACnB"}
@@ -1,12 +1,14 @@
1
1
  import { AssetLoader } from "../core/asset-loader";
2
2
  import { I18n } from "../i18n/i18n";
3
- import type { ViewerState } from "../types";
3
+ import type { MascotOption, PageSrcResolver, ViewerState } from "../types";
4
4
  import type { RendererCallbacks } from "./renderer-callbacks";
5
5
  export declare class ViewerRenderer {
6
6
  private container;
7
7
  private callbacks;
8
8
  private assetLoader;
9
9
  private i18n;
10
+ private lockLayoutMode;
11
+ private mascot?;
10
12
  private root;
11
13
  private cleanup;
12
14
  private mouseStart?;
@@ -25,7 +27,7 @@ export declare class ViewerRenderer {
25
27
  private controlsDock?;
26
28
  private resizeHandle?;
27
29
  private viewSizeObserver?;
28
- constructor(container: HTMLElement, callbacks: RendererCallbacks, assetLoader: AssetLoader, i18n: I18n, className?: string);
30
+ constructor(container: HTMLElement, callbacks: RendererCallbacks, assetLoader: AssetLoader, i18n: I18n, className?: string, resolvePageSrc?: PageSrcResolver, lockLayoutMode?: boolean, mascot?: MascotOption | undefined);
29
31
  private observeViewSize;
30
32
  update(state: ViewerState): void;
31
33
  private applyOverlayVisibility;
@@ -1 +1 @@
1
- {"version":3,"file":"viewer-renderer.d.ts","sourceRoot":"","sources":["../../src/renderer/viewer-renderer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAgBnD,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEpC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAY9D,qBAAa,cAAc;IAqBvB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,IAAI;IAvBd,OAAO,CAAC,IAAI,CAAiB;IAC7B,OAAO,CAAC,OAAO,CAAyB;IACxC,OAAO,CAAC,UAAU,CAAC,CAAY;IAC/B,OAAO,CAAC,UAAU,CAAC,CAAY;IAC/B,OAAO,CAAC,UAAU,CAAC,CAAsC;IACzD,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,aAAa,CAAC,CAAS;IAC/B,OAAO,CAAC,iBAAiB,CAAC,CAAS;IACnC,OAAO,CAAC,MAAM,CAAC,CAAc;IAC7B,OAAO,CAAC,mBAAmB,CAAS;IACpC,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,kBAAkB,CAAS;IACnC,OAAO,CAAC,eAAe,CAAC,CAAS;IACjC,OAAO,CAAC,SAAS,CAAC,CAAY;IAC9B,OAAO,CAAC,gBAAgB,CAAC,CAAmB;IAC5C,OAAO,CAAC,YAAY,CAAC,CAAe;IACpC,OAAO,CAAC,YAAY,CAAC,CAAiB;IACtC,OAAO,CAAC,gBAAgB,CAAC,CAAiB;gBAGhC,SAAS,EAAE,WAAW,EACtB,SAAS,EAAE,iBAAiB,EAC5B,WAAW,EAAE,WAAW,EACxB,IAAI,EAAE,IAAI,EAClB,SAAS,CAAC,EAAE,MAAM;IAapB,OAAO,CAAC,eAAe;IAqBvB,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI;IAyGhC,OAAO,CAAC,sBAAsB;IAW9B,UAAU,IAAI,IAAI;IAalB,OAAO,IAAI,IAAI;IAgBf,UAAU,IAAI,WAAW;IAIzB,mBAAmB,IAAI,OAAO;IAI9B,eAAe,CACb,KAAK,EAAE,WAAW,EAClB,SAAS,EAAE,UAAU,GAAG,MAAM,EAC9B,UAAU,EAAE,MAAM,IAAI,GACrB,OAAO;IAsBV,gBAAgB,IAAI,OAAO;IAI3B,OAAO,CAAC,QAAQ;IAwBhB,OAAO,CAAC,WAAW;IAOnB,OAAO,CAAC,gBAAgB;IAaxB,OAAO,CAAC,kBAAkB;IAmC1B,OAAO,CAAC,YAAY;IA8NpB,OAAO,CAAC,cAAc;IAoCtB,OAAO,CAAC,eAAe;IAWvB,OAAO,CAAC,mBAAmB;IAyB3B,OAAO,CAAC,mBAAmB;IAU3B,OAAO,CAAC,kBAAkB;IAI1B,OAAO,CAAC,uBAAuB;IAQ/B,OAAO,CAAC,mBAAmB;CAuB5B"}
1
+ {"version":3,"file":"viewer-renderer.d.ts","sourceRoot":"","sources":["../../src/renderer/viewer-renderer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAgBnD,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEpC,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC3E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAY9D,qBAAa,cAAc;IAqBvB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,IAAI;IAGZ,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,MAAM,CAAC;IA3BjB,OAAO,CAAC,IAAI,CAAiB;IAC7B,OAAO,CAAC,OAAO,CAAyB;IACxC,OAAO,CAAC,UAAU,CAAC,CAAY;IAC/B,OAAO,CAAC,UAAU,CAAC,CAAY;IAC/B,OAAO,CAAC,UAAU,CAAC,CAAsC;IACzD,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,aAAa,CAAC,CAAS;IAC/B,OAAO,CAAC,iBAAiB,CAAC,CAAS;IACnC,OAAO,CAAC,MAAM,CAAC,CAAc;IAC7B,OAAO,CAAC,mBAAmB,CAAS;IACpC,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,kBAAkB,CAAS;IACnC,OAAO,CAAC,eAAe,CAAC,CAAS;IACjC,OAAO,CAAC,SAAS,CAAC,CAAY;IAC9B,OAAO,CAAC,gBAAgB,CAAC,CAAmB;IAC5C,OAAO,CAAC,YAAY,CAAC,CAAe;IACpC,OAAO,CAAC,YAAY,CAAC,CAAiB;IACtC,OAAO,CAAC,gBAAgB,CAAC,CAAiB;gBAGhC,SAAS,EAAE,WAAW,EACtB,SAAS,EAAE,iBAAiB,EAC5B,WAAW,EAAE,WAAW,EACxB,IAAI,EAAE,IAAI,EAClB,SAAS,CAAC,EAAE,MAAM,EAClB,cAAc,CAAC,EAAE,eAAe,EACxB,cAAc,UAAQ,EACtB,MAAM,CAAC,EAAE,YAAY,YAAA;IAc/B,OAAO,CAAC,eAAe;IAqBvB,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI;IA6GhC,OAAO,CAAC,sBAAsB;IAW9B,UAAU,IAAI,IAAI;IAalB,OAAO,IAAI,IAAI;IAgBf,UAAU,IAAI,WAAW;IAIzB,mBAAmB,IAAI,OAAO;IAI9B,eAAe,CACb,KAAK,EAAE,WAAW,EAClB,SAAS,EAAE,UAAU,GAAG,MAAM,EAC9B,UAAU,EAAE,MAAM,IAAI,GACrB,OAAO;IAsBV,gBAAgB,IAAI,OAAO;IAI3B,OAAO,CAAC,QAAQ;IAwBhB,OAAO,CAAC,WAAW;IAOnB,OAAO,CAAC,gBAAgB;IAaxB,OAAO,CAAC,kBAAkB;IAmC1B,OAAO,CAAC,YAAY;IAoOpB,OAAO,CAAC,cAAc;IAoCtB,OAAO,CAAC,eAAe;IAWvB,OAAO,CAAC,mBAAmB;IAyB3B,OAAO,CAAC,mBAAmB;IAU3B,OAAO,CAAC,kBAAkB;IAI1B,OAAO,CAAC,uBAAuB;IAQ/B,OAAO,CAAC,mBAAmB;CAuB5B"}
@@ -1 +1 @@
1
- {"version":3,"file":"style-registry.d.ts","sourceRoot":"","sources":["../../src/styles/style-registry.ts"],"names":[],"mappings":"AAsCA,wBAAgB,kBAAkB,IAAI,IAAI,CAUzC"}
1
+ {"version":3,"file":"style-registry.d.ts","sourceRoot":"","sources":["../../src/styles/style-registry.ts"],"names":[],"mappings":"AAwCA,wBAAgB,kBAAkB,IAAI,IAAI,CAUzC"}
package/dist/types.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  export type ReadingDirection = "rtl" | "ltr";
2
2
  export type PageTurnMode = "single" | "spread";
3
- export type LayoutMode = "inline" | "theater" | "browserFullscreen" | "nativeFullscreen";
3
+ export type BackgroundColor = "white" | "black";
4
+ export type LayoutMode = "inline" | "wide" | "browserFullscreen" | "nativeFullscreen";
4
5
  export interface Manga {
5
6
  id: string;
6
7
  title: string;
@@ -35,6 +36,7 @@ export interface ViewerSettings {
35
36
  layoutMode: LayoutMode;
36
37
  autoPageTurnIntervalMs: number;
37
38
  pageTurnAnimation: boolean;
39
+ backgroundColor: BackgroundColor;
38
40
  zoom: {
39
41
  min: number;
40
42
  max: number;
@@ -59,7 +61,7 @@ export interface ViewerState {
59
61
  settings: ViewerSettings;
60
62
  layout: {
61
63
  mode: LayoutMode;
62
- theaterHeightPx?: number;
64
+ wideHeightPx?: number;
63
65
  };
64
66
  notifications: ViewerNotification[];
65
67
  panel: "none" | "settings" | "menu" | "pages" | "shortcuts";
@@ -77,7 +79,22 @@ export interface MangaViewerOptions {
77
79
  };
78
80
  className?: string;
79
81
  events?: Partial<ViewerEventHandlersMap>;
82
+ resolvePageSrc?: PageSrcResolver;
83
+ lockLayoutMode?: boolean;
84
+ mascot?: MascotOption;
80
85
  }
86
+ export type MascotOption = {
87
+ src: string;
88
+ alt?: string;
89
+ } | {
90
+ render: () => HTMLElement;
91
+ } | false;
92
+ export interface PageSrcContext {
93
+ page: ImagePage;
94
+ pageIndex: number;
95
+ isSpread: boolean;
96
+ }
97
+ export type PageSrcResolver = (context: PageSrcContext) => string | Promise<string>;
81
98
  export interface MangaViewerInstance {
82
99
  destroy(): void;
83
100
  setManga(manga: Manga): Promise<void>;
@@ -136,7 +153,7 @@ export type ViewerAction = {
136
153
  type: "setLayoutMode";
137
154
  layoutMode: LayoutMode;
138
155
  } | {
139
- type: "setTheaterHeight";
156
+ type: "setWideHeight";
140
157
  heightPx: number;
141
158
  } | {
142
159
  type: "setZoom";
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,gBAAgB,GAAG,KAAK,GAAG,KAAK,CAAC;AAC7C,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAC/C,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,OAAO,CAAC;AAChD,MAAM,MAAM,UAAU,GAClB,QAAQ,GACR,MAAM,GACN,mBAAmB,GACnB,kBAAkB,CAAC;AAEvB,MAAM,WAAW,KAAK;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;AAE7C,UAAU,QAAQ;IAChB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,SAAU,SAAQ,QAAQ;IACzC,IAAI,EAAE,OAAO,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,QAAS,SAAQ,QAAQ;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;IAClB,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,YAAY,EAAE,YAAY,CAAC;IAC3B,UAAU,EAAE,UAAU,CAAC;IACvB,sBAAsB,EAAE,MAAM,CAAC;IAC/B,iBAAiB,EAAE,OAAO,CAAC;IAC3B,eAAe,EAAE,eAAe,CAAC;IACjC,IAAI,EAAE;QACJ,GAAG,EAAE,MAAM,CAAC;QACZ,GAAG,EAAE,MAAM,CAAC;QACZ,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;CACH;AAED,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;CACrC;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,KAAK,CAAC;IACb,gBAAgB,EAAE,MAAM,CAAC;IACzB,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,cAAc,EAAE,OAAO,CAAC;IACxB,mBAAmB,EAAE,OAAO,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,cAAc,CAAC;IACzB,MAAM,EAAE;QACN,IAAI,EAAE,UAAU,CAAC;QACjB,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,aAAa,EAAE,kBAAkB,EAAE,CAAC;IACpC,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,MAAM,GAAG,OAAO,GAAG,WAAW,CAAC;CAC7D;AAED,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAEpD,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,KAAK,CAAC;IACb,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,cAAc,CAAC;IAC9B,QAAQ,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;IACnC,OAAO,CAAC,EAAE;QACR,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC,sBAAsB,CAAC,CAAC;IACzC,cAAc,CAAC,EAAE,eAAe,CAAC;IACjC,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,MAAM,CAAC,EAAE,YAAY,CAAC;CACvB;AAED,MAAM,MAAM,YAAY,GACpB;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GAC7B;IAAE,MAAM,EAAE,MAAM,WAAW,CAAA;CAAE,GAC7B,KAAK,CAAC;AAEV,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,SAAS,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,MAAM,eAAe,GAAG,CAC5B,OAAO,EAAE,cAAc,KACpB,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;AAE9B,MAAM,WAAW,mBAAmB;IAClC,OAAO,IAAI,IAAI,CAAC;IAChB,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,QAAQ,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5C,QAAQ,IAAI,QAAQ,CAAC,WAAW,CAAC,CAAC;IAClC,cAAc,CAAC,QAAQ,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjE,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,QAAQ,IAAI,IAAI,CAAC;IACjB,YAAY,IAAI,IAAI,CAAC;IACrB,aAAa,CAAC,KAAK,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IACrC,kBAAkB,IAAI,IAAI,CAAC;IAC3B,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAClC,EAAE,CAAC,CAAC,SAAS,eAAe,EAC1B,SAAS,EAAE,CAAC,EACZ,OAAO,EAAE,kBAAkB,CAAC,CAAC,CAAC,GAC7B,MAAM,IAAI,CAAC;CACf;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE;QAAE,KAAK,EAAE,KAAK,CAAA;KAAE,CAAC;IACxB,UAAU,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,SAAS,CAAA;KAAE,CAAC;IACnD,cAAc,EAAE;QAAE,QAAQ,EAAE,cAAc,CAAA;KAAE,CAAC;IAC7C,YAAY,EAAE;QAAE,UAAU,EAAE,UAAU,CAAA;KAAE,CAAC;IACzC,OAAO,EAAE,IAAI,CAAC;CACf;AAED,MAAM,MAAM,eAAe,GAAG,MAAM,cAAc,CAAC;AACnD,MAAM,MAAM,kBAAkB,CAAC,CAAC,SAAS,eAAe,IAAI,CAC1D,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC,KACvB,IAAI,CAAC;AACV,MAAM,MAAM,sBAAsB,GAAG;KAClC,CAAC,IAAI,eAAe,GAAG,kBAAkB,CAAC,CAAC,CAAC;CAC9C,CAAC;AAEF,MAAM,MAAM,YAAY,GACpB;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,KAAK,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GACtD;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GACvC;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,GACpB;IAAE,IAAI,EAAE,cAAc,CAAA;CAAE,GACxB;IAAE,IAAI,EAAE,mBAAmB,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,GAC/C;IAAE,IAAI,EAAE,oBAAoB,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAC,cAAc,CAAC,CAAA;CAAE,GAC7D;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,UAAU,EAAE,UAAU,CAAA;CAAE,GACjD;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAC3C;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAChE;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC9C;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE,GACrB;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,WAAW,CAAC,OAAO,CAAC,CAAA;CAAE,GACjD;IAAE,IAAI,EAAE,kBAAkB,CAAC;IAAC,YAAY,EAAE,kBAAkB,CAAA;CAAE,GAC9D;IAAE,IAAI,EAAE,oBAAoB,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC"}
package/docs/USAGE.md CHANGED
@@ -78,7 +78,7 @@ interface MangaViewerInstance {
78
78
  interface MangaViewerOptions {
79
79
  manga: Manga;
80
80
  initialPageIndex?: number;
81
- locale?: string; // "ja" | "en"、または独自キー(translations と併用)
81
+ locale?: string; // "ja" | "en" | "zh-CN" | "ko" | "th" | "id"、または独自キー
82
82
  translations?: TranslationMap;
83
83
  settings?: Partial<ViewerSettings>;
84
84
  storage?: { enabled?: boolean; databaseName?: string };
@@ -90,6 +90,16 @@ interface MangaViewerOptions {
90
90
  layoutChange: (e: { layoutMode: LayoutMode }) => void;
91
91
  destroy: () => void;
92
92
  }>;
93
+ resolvePageSrc?: (ctx: {
94
+ page: ImagePage;
95
+ pageIndex: number;
96
+ isSpread: boolean;
97
+ }) => string | Promise<string>;
98
+ lockLayoutMode?: boolean;
99
+ mascot?:
100
+ | { src: string; alt?: string }
101
+ | { render: () => HTMLElement }
102
+ | false;
93
103
  }
94
104
  ```
95
105
 
@@ -129,9 +139,10 @@ interface HtmlPage {
129
139
  | `hasCover` | `true` | 表紙ありモード(見開き時、1ページ目を単独表示) |
130
140
  | `readingDirection` | `"rtl"` | `"rtl"`(右→左、日本語漫画)/ `"ltr"` |
131
141
  | `pageTurnMode` | `"single"` | `"single"` / `"spread"`(2ページ見開き) |
132
- | `layoutMode` | `"inline"` | `"inline"`, `"theater"`, `"browserFullscreen"`, `"nativeFullscreen"` |
142
+ | `layoutMode` | `"inline"` | `"inline"`, `"wide"`, `"browserFullscreen"`, `"nativeFullscreen"` |
133
143
  | `autoPageTurnIntervalMs` | `5000` | 自動再生の間隔 (ms) |
134
144
  | `pageTurnAnimation` | `true` | ページめくり時のスライドアニメ |
145
+ | `backgroundColor` | `"white"` | `"white"` / `"black"`(ビューワー本体の背景色) |
135
146
  | `zoom.min` / `.max` / `.step` | `1` / `4` / `0.25` | ズームの範囲とステップ |
136
147
 
137
148
  ## レイアウトモード
@@ -139,10 +150,30 @@ interface HtmlPage {
139
150
  | モード | 挙動 |
140
151
  |---|---|
141
152
  | `inline` | 親要素内に収まる(デスクトップ max 900px / モバイル max 500px)。アスペクト比固定・角丸・薄影あり |
142
- | `theater` | 横幅100%、下のハンドルをドラッグして高さ可変 |
153
+ | `wide` | 横幅100%、下のハンドルをドラッグして高さ可変 |
143
154
  | `browserFullscreen` | `position: fixed; inset: 0` — Fullscreen API を使わずブラウザいっぱいに表示 |
144
155
  | `nativeFullscreen` | Fullscreen API を使用。失敗時は `browserFullscreen` にフォールバック |
145
156
 
157
+ ### レイアウトモードを固定する
158
+
159
+ `lockLayoutMode: true` を渡すと、`settings.layoutMode` で指定したモードに固定されます。
160
+
161
+ - 表示モード切替の UI(コントロールドックの switcher)を非表示
162
+ - メニュー > キーボードショートカット一覧から「表示モード」セクションを非表示
163
+ - キーボードの `N` / `W` / `F` / `Esc` のレイアウト変更系を無効化
164
+ - `viewer.toggleFullscreen()` / `updateSettings({ layoutMode })` も noop
165
+ - IndexedDB に保存された前回の `layoutMode` も無視され、必ず `settings.layoutMode` が適用される
166
+
167
+ 例: 全画面で固定(DRM ビューワー組み込みや単機能ページ向け)
168
+
169
+ ```ts
170
+ createMangaViewer(container, {
171
+ manga,
172
+ settings: { layoutMode: "browserFullscreen" },
173
+ lockLayoutMode: true
174
+ });
175
+ ```
176
+
146
177
  ## キーボードショートカット
147
178
 
148
179
  ビューワーのルート要素にフォーカスがある時のみ有効です。
@@ -152,36 +183,35 @@ interface HtmlPage {
152
183
  | `←` / `Space` | 左に移動(`readingDirection` に応じて前/次ページ) |
153
184
  | `→` / `Shift+Space` | 右に移動 |
154
185
  | `A` | 自動再生のトグル |
155
- | `N` | レイアウト: 標準 (inline) |
156
- | `W` | レイアウト: ワイド (theater) |
186
+ | `N` / `Esc` | レイアウト: 標準 (inline) |
187
+ | `W` | レイアウト: ワイド (wide) |
157
188
  | `F` | レイアウト: 全画面 (browserFullscreen) |
158
189
  | `P` | 1ページ ↔ 見開きの切替 |
159
190
  | `M` | メニューパネルのトグル |
191
+ | `O` | オーバーレイ表示のトグル |
160
192
  | `S` | 設定パネルのトグル |
161
- | `Escape` | 開いているパネルを閉じる / フルスクリーンを解除 |
162
193
 
163
194
  ## ジェスチャー
164
195
 
165
- - 背景クリック / タップ: オーバーレイの表示切替
166
- - 左右端のクリック: 前 / 次ページ(`readingDirection` に応じて向きが変わる)
167
- - スワイプ: ページ移動。端では弾性的に抵抗あり
196
+ - 中央 60% のクリック / タップ: オーバーレイの表示切替
197
+ - 20% / 右 20% のクリック / タップ(オーバーレイ閉時のみ): 前 / 次ページ(`readingDirection` に応じて向きが変わる)
198
+ - スワイプ: ページ移動(しきい値 40px、横方向優先)
168
199
  - ピンチ: ズーム(`zoom.min`〜`zoom.max` でクランプ)
169
200
  - ズーム中のドラッグ: パン(ページの範囲内にクランプ)
170
- - ダブルクリック / ダブルタップ: 1x ↔ 2x の切替
171
201
 
172
202
  ## 永続化 (IndexedDB)
173
203
 
174
204
  `storage.enabled` を `false` にしない限り、`indexedDB` が利用可能な環境では以下を自動で保存します。
175
205
 
176
206
  - 全体設定(locale, readingDirection, hasCover, pageTurnMode, animation, autoPageTurnIntervalMs)
177
- - 現在のレイアウトモードと theater の高さ
207
+ - 現在のレイアウトモードと wide の高さ
178
208
  - 漫画ごとの現在ページ(`manga.id` をキーに保存)
179
209
 
180
210
  データベース名は既定で `manga-viewer`。`storage.databaseName` で上書きできます。
181
211
 
182
212
  ## i18n
183
213
 
184
- ビルトインのロケールは `ja` `en` です。`translations` オプションでキーを上書き/追加できます。
214
+ ビルトインのロケールは `ja` / `en` / `zh-CN` / `ko` / `th` / `id` です。`translations` オプションでキーを上書き/追加できます。
185
215
 
186
216
  ```ts
187
217
  createMangaViewer(container, {
@@ -197,6 +227,133 @@ createMangaViewer(container, {
197
227
 
198
228
  全キーは `locales/ja.json` を参照してください。未定義キーは `ja` → キー文字列自体、の順でフォールバックします。
199
229
 
230
+ ## ページソースの解決(DRM / 認証付き取得)
231
+
232
+ `resolvePageSrc` オプションを渡すと、各ページ画像の `src` を確定する直前にあなたの関数が呼ばれ、戻り値の文字列が `<img>` の `src` に使われます。Data URL / Blob URL / 通常 URL のいずれも返せます。
233
+
234
+ ```ts
235
+ type PageSrcResolver = (ctx: {
236
+ page: ImagePage;
237
+ pageIndex: number;
238
+ isSpread: boolean;
239
+ }) => string | Promise<string>;
240
+ ```
241
+
242
+ - 未指定: 既存どおりそのまま `page.src` を使用(パフォーマンス影響なし)
243
+ - 指定: 解決完了までローディングアイコン表示、reject 時は error-icon
244
+ - 解決済みの結果は `page.id` 単位でキャッシュされ、同じページの再表示で再呼び出しは走りません
245
+
246
+ ### 例: 暗号化バイナリの復号 → Blob URL
247
+
248
+ ```ts
249
+ const blobUrls = new Map<string, string>();
250
+
251
+ createMangaViewer(container, {
252
+ manga,
253
+ resolvePageSrc: async ({ page }) => {
254
+ if (blobUrls.has(page.id)) return blobUrls.get(page.id)!;
255
+
256
+ const res = await fetch(page.src, { credentials: "include" });
257
+ const encrypted = await res.arrayBuffer();
258
+ const decrypted = await decrypt(encrypted); // 利用者独自
259
+ const blob = new Blob([decrypted], { type: "image/webp" });
260
+ const url = URL.createObjectURL(blob);
261
+ blobUrls.set(page.id, url);
262
+ return url;
263
+ }
264
+ });
265
+
266
+ // 不要になったら自前で revoke
267
+ window.addEventListener("beforeunload", () => {
268
+ for (const url of blobUrls.values()) URL.revokeObjectURL(url);
269
+ });
270
+ ```
271
+
272
+ ### 例: 認証トークン付き fetch → Data URL
273
+
274
+ ```ts
275
+ createMangaViewer(container, {
276
+ manga,
277
+ resolvePageSrc: async ({ page }) => {
278
+ const res = await fetch(page.src, {
279
+ headers: { Authorization: `Bearer ${getToken()}` }
280
+ });
281
+ const blob = await res.blob();
282
+ return await new Promise<string>((resolve, reject) => {
283
+ const reader = new FileReader();
284
+ reader.onload = () => resolve(reader.result as string);
285
+ reader.onerror = () => reject(reader.error);
286
+ reader.readAsDataURL(blob);
287
+ });
288
+ }
289
+ });
290
+ ```
291
+
292
+ ### 注意点
293
+
294
+ - **Blob URL の revoke はライブラリ側で行いません。** 利用側で自前管理してください
295
+ - 解決結果は `manga.id + page.id` 単位でキャッシュされるので、`isSpread` が後から変わっても再解決は走りません。レイアウトに応じて解像度を変えたい場合は、利用側で別キーで管理してください
296
+ - CORS: 通常 URL を返す場合は元の `<img>` 経路と同じ制約
297
+
298
+ ## マスコット画像の差し替え
299
+
300
+ `mascot` オプションで、コントロールドック・メニュー・スプラッシュ画面のうさぎイラストを任意の画像に置き換えられます。
301
+
302
+ ```ts
303
+ type MascotOption =
304
+ | { src: string; alt?: string } // 画像 URL で差し替え
305
+ | { render: () => HTMLElement } // 完全カスタム
306
+ | false; // 非表示
307
+ ```
308
+
309
+ - 未指定 → デフォルトのうさぎ SVG
310
+ - `{ src }` → `<img>` に変換して表示
311
+ - `{ render }` → 関数が返す `HTMLElement` を表示(毎回呼ばれるので、コントロールドック / メニュー / スプラッシュで別インスタンス)
312
+ - `false` → マスコットおよびスプラッシュのロゴ部分を非表示
313
+
314
+ スプラッシュ画面では、`mascot` が指定されているとデフォルトの「うさぎロゴ + comimi タイポ」が消え、120×120 のカスタムアイコンのみが表示されます。
315
+
316
+ ### 例: 画像 URL で差し替え
317
+
318
+ ```ts
319
+ createMangaViewer(container, {
320
+ manga,
321
+ mascot: { src: "/assets/my-mascot.png", alt: "Site mascot" }
322
+ });
323
+ ```
324
+
325
+ ### 例: SVG を直接埋め込み
326
+
327
+ ```ts
328
+ const ICON_SVG = `<svg viewBox="0 0 50 50" ...>...</svg>`;
329
+
330
+ createMangaViewer(container, {
331
+ manga,
332
+ mascot: {
333
+ render: () => {
334
+ const wrap = document.createElement("div");
335
+ wrap.innerHTML = ICON_SVG;
336
+ return wrap.firstElementChild as HTMLElement;
337
+ }
338
+ }
339
+ });
340
+ ```
341
+
342
+ ### 例: マスコットを非表示にする
343
+
344
+ ```ts
345
+ createMangaViewer(container, {
346
+ manga,
347
+ mascot: false
348
+ });
349
+ ```
350
+
351
+ ### 配置とサイズ
352
+
353
+ - コントロールドック / メニューパネル内のマスコット枠は `50×50`(`aspect-ratio: 1/1`)
354
+ - スプラッシュ画面のロゴ差し替え枠は `120×120`
355
+ - 中身は `width:100% / height:100% / object-fit: contain` で枠にフィット
356
+
200
357
  ## イベント
201
358
 
202
359
  ```ts
package/locales/en.json CHANGED
@@ -11,11 +11,14 @@
11
11
  "pageMode.single": "Single",
12
12
  "pageMode.spread": "Spread",
13
13
  "layout.inline": "Standard",
14
- "layout.theater": "Wide",
14
+ "layout.wide": "Wide",
15
15
  "layout.browserFullscreen": "Fullscreen",
16
16
  "settings.title": "Settings",
17
17
  "settings.cover": "Has cover",
18
18
  "settings.direction": "Page turn direction",
19
+ "settings.backgroundColor": "Background color",
20
+ "settings.backgroundColor.white": "White",
21
+ "settings.backgroundColor.black": "Black",
19
22
  "settings.interval": "Auto play interval",
20
23
  "settings.interval.unit": "s",
21
24
  "settings.animation": "Page turn animation",
@@ -24,6 +27,7 @@
24
27
  "menu.openShortcuts": "Keyboard shortcuts",
25
28
  "menu.openPages": "Page list",
26
29
  "menu.back": "Back",
30
+ "pageList.htmlContent": "HTML content",
27
31
  "shortcut.section.page": "Page navigation",
28
32
  "shortcut.section.viewMode": "View mode",
29
33
  "shortcut.section.general": "General",
@@ -31,6 +35,7 @@
31
35
  "shortcut.moveRight": "Move right",
32
36
  "shortcut.autoPageTurnLabel": "Auto play",
33
37
  "shortcut.pageModeToggle": "Toggle spread",
38
+ "shortcut.overlayToggle": "Toggle overlay",
34
39
  "seek.previewAlt": "Preview of page {{page}}",
35
40
  "loading": "Loading",
36
41
  "error.pageRequestFailed": "Request failed for page {{page}}"
@@ -0,0 +1,42 @@
1
+ {
2
+ "overlay.autoPageTurn": "Putar otomatis",
3
+ "overlay.layout": "Mode tampilan",
4
+ "overlay.settings": "Pengaturan",
5
+ "overlay.menu": "Menu",
6
+ "overlay.centerHint.desktop": "Klik bagian tengah untuk menutup",
7
+ "overlay.centerHint.mobile": "Ketuk bagian tengah untuk menutup",
8
+ "splash.loading": "Memulai viewer",
9
+ "autoplay.start": "Putar otomatis dimulai",
10
+ "autoplay.stop": "Putar otomatis dihentikan",
11
+ "pageMode.single": "Satu halaman",
12
+ "pageMode.spread": "Dua halaman",
13
+ "layout.inline": "Standar",
14
+ "layout.wide": "Lebar",
15
+ "layout.browserFullscreen": "Layar penuh",
16
+ "settings.title": "Pengaturan",
17
+ "settings.cover": "Ada sampul",
18
+ "settings.direction": "Arah balik halaman",
19
+ "settings.backgroundColor": "Warna latar",
20
+ "settings.backgroundColor.white": "Putih",
21
+ "settings.backgroundColor.black": "Hitam",
22
+ "settings.interval": "Interval putar otomatis",
23
+ "settings.interval.unit": "dtk",
24
+ "settings.animation": "Animasi balik halaman",
25
+ "settings.direction.rtl": "Kanan",
26
+ "settings.direction.ltr": "Kiri",
27
+ "menu.openShortcuts": "Pintasan keyboard",
28
+ "menu.openPages": "Daftar halaman",
29
+ "menu.back": "Kembali",
30
+ "pageList.htmlContent": "Konten HTML",
31
+ "shortcut.section.page": "Navigasi halaman",
32
+ "shortcut.section.viewMode": "Mode tampilan",
33
+ "shortcut.section.general": "Umum",
34
+ "shortcut.moveLeft": "Geser kiri",
35
+ "shortcut.moveRight": "Geser kanan",
36
+ "shortcut.autoPageTurnLabel": "Putar otomatis",
37
+ "shortcut.pageModeToggle": "Alih dua halaman",
38
+ "shortcut.overlayToggle": "Alih overlay",
39
+ "seek.previewAlt": "Pratinjau halaman {{page}}",
40
+ "loading": "Memuat",
41
+ "error.pageRequestFailed": "Permintaan halaman {{page}} gagal"
42
+ }
package/locales/ja.json CHANGED
@@ -11,11 +11,14 @@
11
11
  "pageMode.single": "1ページ",
12
12
  "pageMode.spread": "見開き",
13
13
  "layout.inline": "標準",
14
- "layout.theater": "ワイド",
14
+ "layout.wide": "ワイド",
15
15
  "layout.browserFullscreen": "全画面",
16
16
  "settings.title": "設定",
17
17
  "settings.cover": "表紙あり",
18
18
  "settings.direction": "ページ移動方向",
19
+ "settings.backgroundColor": "背景色",
20
+ "settings.backgroundColor.white": "白",
21
+ "settings.backgroundColor.black": "黒",
19
22
  "settings.interval": "自動再生の秒数",
20
23
  "settings.interval.unit": "秒",
21
24
  "settings.animation": "ページ移動アニメーション",
@@ -24,6 +27,7 @@
24
27
  "menu.openShortcuts": "キーボードショートカット",
25
28
  "menu.openPages": "ページ一覧",
26
29
  "menu.back": "もどる",
30
+ "pageList.htmlContent": "HTMLコンテンツ",
27
31
  "shortcut.section.page": "ページ移動",
28
32
  "shortcut.section.viewMode": "表示モード",
29
33
  "shortcut.section.general": "全般",
@@ -31,6 +35,7 @@
31
35
  "shortcut.moveRight": "右に移動",
32
36
  "shortcut.autoPageTurnLabel": "自動再生",
33
37
  "shortcut.pageModeToggle": "見開き切り替え",
38
+ "shortcut.overlayToggle": "オーバーレイ切り替え",
34
39
  "seek.previewAlt": "{{page}}ページのプレビュー",
35
40
  "loading": "読み込み中",
36
41
  "error.pageRequestFailed": "{{page}}ページのリクエストに失敗しました"
@@ -0,0 +1,42 @@
1
+ {
2
+ "overlay.autoPageTurn": "자동 재생",
3
+ "overlay.layout": "표시 모드",
4
+ "overlay.settings": "설정",
5
+ "overlay.menu": "메뉴",
6
+ "overlay.centerHint.desktop": "화면 중앙을 클릭하여 닫기",
7
+ "overlay.centerHint.mobile": "화면 중앙을 탭하여 닫기",
8
+ "splash.loading": "뷰어를 시작 중",
9
+ "autoplay.start": "자동 재생 시작",
10
+ "autoplay.stop": "자동 재생 정지",
11
+ "pageMode.single": "한 페이지",
12
+ "pageMode.spread": "양면 보기",
13
+ "layout.inline": "표준",
14
+ "layout.wide": "와이드",
15
+ "layout.browserFullscreen": "전체 화면",
16
+ "settings.title": "설정",
17
+ "settings.cover": "표지 있음",
18
+ "settings.direction": "페이지 이동 방향",
19
+ "settings.backgroundColor": "배경색",
20
+ "settings.backgroundColor.white": "흰색",
21
+ "settings.backgroundColor.black": "검정",
22
+ "settings.interval": "자동 재생 간격",
23
+ "settings.interval.unit": "초",
24
+ "settings.animation": "페이지 넘김 애니메이션",
25
+ "settings.direction.rtl": "오른쪽",
26
+ "settings.direction.ltr": "왼쪽",
27
+ "menu.openShortcuts": "키보드 단축키",
28
+ "menu.openPages": "페이지 목록",
29
+ "menu.back": "뒤로",
30
+ "pageList.htmlContent": "HTML 콘텐츠",
31
+ "shortcut.section.page": "페이지 이동",
32
+ "shortcut.section.viewMode": "표시 모드",
33
+ "shortcut.section.general": "일반",
34
+ "shortcut.moveLeft": "왼쪽으로 이동",
35
+ "shortcut.moveRight": "오른쪽으로 이동",
36
+ "shortcut.autoPageTurnLabel": "자동 재생",
37
+ "shortcut.pageModeToggle": "양면 보기 전환",
38
+ "shortcut.overlayToggle": "오버레이 전환",
39
+ "seek.previewAlt": "{{page}}페이지 미리보기",
40
+ "loading": "로딩 중",
41
+ "error.pageRequestFailed": "{{page}}페이지 요청 실패"
42
+ }
@@ -0,0 +1,42 @@
1
+ {
2
+ "overlay.autoPageTurn": "เล่นอัตโนมัติ",
3
+ "overlay.layout": "โหมดการแสดงผล",
4
+ "overlay.settings": "ตั้งค่า",
5
+ "overlay.menu": "เมนู",
6
+ "overlay.centerHint.desktop": "คลิกตรงกลางเพื่อปิด",
7
+ "overlay.centerHint.mobile": "แตะตรงกลางเพื่อปิด",
8
+ "splash.loading": "กำลังเปิดโปรแกรมอ่าน",
9
+ "autoplay.start": "เริ่มเล่นอัตโนมัติแล้ว",
10
+ "autoplay.stop": "หยุดเล่นอัตโนมัติแล้ว",
11
+ "pageMode.single": "หน้าเดียว",
12
+ "pageMode.spread": "สองหน้า",
13
+ "layout.inline": "มาตรฐาน",
14
+ "layout.wide": "กว้าง",
15
+ "layout.browserFullscreen": "เต็มจอ",
16
+ "settings.title": "ตั้งค่า",
17
+ "settings.cover": "มีหน้าปก",
18
+ "settings.direction": "ทิศทางการพลิกหน้า",
19
+ "settings.backgroundColor": "สีพื้นหลัง",
20
+ "settings.backgroundColor.white": "ขาว",
21
+ "settings.backgroundColor.black": "ดำ",
22
+ "settings.interval": "ระยะเวลาเล่นอัตโนมัติ",
23
+ "settings.interval.unit": "วินาที",
24
+ "settings.animation": "อนิเมชันการพลิกหน้า",
25
+ "settings.direction.rtl": "ขวา",
26
+ "settings.direction.ltr": "ซ้าย",
27
+ "menu.openShortcuts": "คีย์ลัด",
28
+ "menu.openPages": "รายการหน้า",
29
+ "menu.back": "ย้อนกลับ",
30
+ "pageList.htmlContent": "เนื้อหา HTML",
31
+ "shortcut.section.page": "การเลื่อนหน้า",
32
+ "shortcut.section.viewMode": "โหมดการแสดงผล",
33
+ "shortcut.section.general": "ทั่วไป",
34
+ "shortcut.moveLeft": "เลื่อนซ้าย",
35
+ "shortcut.moveRight": "เลื่อนขวา",
36
+ "shortcut.autoPageTurnLabel": "เล่นอัตโนมัติ",
37
+ "shortcut.pageModeToggle": "สลับสองหน้า",
38
+ "shortcut.overlayToggle": "สลับโอเวอร์เลย์",
39
+ "seek.previewAlt": "ตัวอย่างหน้า {{page}}",
40
+ "loading": "กำลังโหลด",
41
+ "error.pageRequestFailed": "ขอหน้า {{page}} ไม่สำเร็จ"
42
+ }
@@ -0,0 +1,42 @@
1
+ {
2
+ "overlay.autoPageTurn": "自动播放",
3
+ "overlay.layout": "显示模式",
4
+ "overlay.settings": "设置",
5
+ "overlay.menu": "菜单",
6
+ "overlay.centerHint.desktop": "点击中央以关闭",
7
+ "overlay.centerHint.mobile": "点按中央以关闭",
8
+ "splash.loading": "正在启动阅读器",
9
+ "autoplay.start": "已开始自动播放",
10
+ "autoplay.stop": "已停止自动播放",
11
+ "pageMode.single": "单页",
12
+ "pageMode.spread": "跨页",
13
+ "layout.inline": "标准",
14
+ "layout.wide": "宽屏",
15
+ "layout.browserFullscreen": "全屏",
16
+ "settings.title": "设置",
17
+ "settings.cover": "有封面",
18
+ "settings.direction": "翻页方向",
19
+ "settings.backgroundColor": "背景颜色",
20
+ "settings.backgroundColor.white": "白色",
21
+ "settings.backgroundColor.black": "黑色",
22
+ "settings.interval": "自动播放间隔",
23
+ "settings.interval.unit": "秒",
24
+ "settings.animation": "翻页动画",
25
+ "settings.direction.rtl": "向右",
26
+ "settings.direction.ltr": "向左",
27
+ "menu.openShortcuts": "键盘快捷键",
28
+ "menu.openPages": "页面列表",
29
+ "menu.back": "返回",
30
+ "pageList.htmlContent": "HTML 内容",
31
+ "shortcut.section.page": "翻页",
32
+ "shortcut.section.viewMode": "显示模式",
33
+ "shortcut.section.general": "通用",
34
+ "shortcut.moveLeft": "向左移动",
35
+ "shortcut.moveRight": "向右移动",
36
+ "shortcut.autoPageTurnLabel": "自动播放",
37
+ "shortcut.pageModeToggle": "切换跨页",
38
+ "shortcut.overlayToggle": "切换控制层",
39
+ "seek.previewAlt": "第 {{page}} 页预览",
40
+ "loading": "加载中",
41
+ "error.pageRequestFailed": "第 {{page}} 页请求失败"
42
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yui540/comimi",
3
- "version": "0.1.1",
3
+ "version": "0.2.1",
4
4
  "description": "Open-source comic reader library for JS/TS",
5
5
  "keywords": [
6
6
  "manga",