@caipira/vue-reader 0.0.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 (64) hide show
  1. package/README.md +153 -0
  2. package/dist/composables/useEpubReaderStrategy.d.ts +19 -0
  3. package/dist/composables/useEpubReaderStrategy.js +1 -0
  4. package/dist/composables/useEpubReaderWasm.d.ts +2 -0
  5. package/dist/composables/useEpubReaderWasm.js +131 -0
  6. package/dist/composables/useEpubReaderZipFetcher.d.ts +2 -0
  7. package/dist/composables/useEpubReaderZipFetcher.js +29 -0
  8. package/dist/services/browser/epub.d.ts +4 -0
  9. package/dist/services/browser/epub.js +22 -0
  10. package/dist/services/browser/manifest.d.ts +7 -0
  11. package/dist/services/browser/manifest.js +224 -0
  12. package/dist/services/browser/url-rewrite.d.ts +5 -0
  13. package/dist/services/browser/url-rewrite.js +183 -0
  14. package/dist/services/browser/url.d.ts +11 -0
  15. package/dist/services/browser/url.js +82 -0
  16. package/dist/services/browser/zip-fetcher.d.ts +12 -0
  17. package/dist/services/browser/zip-fetcher.js +123 -0
  18. package/dist/services/common/progression.d.ts +32 -0
  19. package/dist/services/common/progression.js +169 -0
  20. package/dist/services/common/title.d.ts +11 -0
  21. package/dist/services/common/title.js +40 -0
  22. package/dist/services/common/word-decorations.d.ts +4 -0
  23. package/dist/services/common/word-decorations.js +316 -0
  24. package/dist/services/common/word-lookup.d.ts +4 -0
  25. package/dist/services/common/word-lookup.js +154 -0
  26. package/dist/services/wasm/frame-document-bridge.d.ts +1 -0
  27. package/dist/services/wasm/frame-document-bridge.js +84 -0
  28. package/dist/services/wasm/wasm-streamer.d.ts +35 -0
  29. package/dist/services/wasm/wasm-streamer.js +157 -0
  30. package/dist/src/composables/useEpubReader.d.ts +27788 -0
  31. package/dist/src/composables/useEpubReader.js +8 -0
  32. package/dist/src/composables/useEpubReaderController.d.ts +27787 -0
  33. package/dist/src/composables/useEpubReaderController.js +23 -0
  34. package/dist/src/composables/useEpubReaderNavigation.d.ts +6 -0
  35. package/dist/src/composables/useEpubReaderNavigation.js +26 -0
  36. package/dist/src/composables/useEpubReaderSettings.d.ts +15 -0
  37. package/dist/src/composables/useEpubReaderSettings.js +8 -0
  38. package/dist/src/composables/useEpubReaderState.d.ts +22 -0
  39. package/dist/src/composables/useEpubReaderState.js +29 -0
  40. package/dist/src/composables/useReaderDictionary.d.ts +8 -0
  41. package/dist/src/composables/useReaderDictionary.js +13 -0
  42. package/dist/src/composables/useReaderSettings.d.ts +25 -0
  43. package/dist/src/composables/useReaderSettings.js +42 -0
  44. package/dist/src/composables/utils.d.ts +2 -0
  45. package/dist/src/composables/utils.js +1 -0
  46. package/dist/src/core/controller.d.ts +27789 -0
  47. package/dist/src/core/controller.js +262 -0
  48. package/dist/src/core/fonts.d.ts +1 -0
  49. package/dist/src/core/fonts.js +55 -0
  50. package/dist/src/core/settings-store.d.ts +16 -0
  51. package/dist/src/core/settings-store.js +58 -0
  52. package/dist/src/core/storage.d.ts +2 -0
  53. package/dist/src/core/storage.js +38 -0
  54. package/dist/src/index.d.ts +13 -0
  55. package/dist/src/index.js +11 -0
  56. package/dist/src/settings/options.d.ts +20 -0
  57. package/dist/src/settings/options.js +27 -0
  58. package/dist/src/types.d.ts +40 -0
  59. package/dist/src/types.js +1 -0
  60. package/dist/types/browser.d.ts +1 -0
  61. package/dist/types/browser.js +1 -0
  62. package/dist/types/common.d.ts +55 -0
  63. package/dist/types/common.js +1 -0
  64. package/package.json +46 -0
@@ -0,0 +1,23 @@
1
+ import { computed, onBeforeUnmount, onMounted, toValue, watch } from 'vue';
2
+ import { createEpubReaderController } from '../../src/core/controller';
3
+ export const useEpubReaderController = (src, containerRef, options) => {
4
+ const sourceRef = computed(() => toValue(src));
5
+ const controller = createEpubReaderController(sourceRef, containerRef, options);
6
+ onMounted(async () => {
7
+ if (!sourceRef.value) {
8
+ controller.state.error.value = 'No source URL provided';
9
+ return;
10
+ }
11
+ await controller.actions.init();
12
+ });
13
+ onBeforeUnmount(() => {
14
+ controller.actions.destroy();
15
+ });
16
+ watch(() => sourceRef.value, async (next, prev) => {
17
+ if (!next || next === prev) {
18
+ return;
19
+ }
20
+ await controller.actions.reload();
21
+ });
22
+ return controller;
23
+ };
@@ -0,0 +1,6 @@
1
+ import type { ReturnTypeCreateController } from '../../src/composables/utils';
2
+ export declare const useEpubReaderNavigation: (controller?: ReturnTypeCreateController) => {
3
+ goForward: () => void;
4
+ goBackward: () => void;
5
+ goToLink: (link: import("..").TocEntry["link"]) => void;
6
+ };
@@ -0,0 +1,26 @@
1
+ import { useEpubReaderControllerRef } from '../../src/composables/useEpubReaderState';
2
+ export const useEpubReaderNavigation = (controller) => {
3
+ if (controller) {
4
+ const { goForward, goBackward, goToLink } = controller.actions;
5
+ return {
6
+ goForward,
7
+ goBackward,
8
+ goToLink,
9
+ };
10
+ }
11
+ const activeEpubReader = useEpubReaderControllerRef();
12
+ const goForward = () => {
13
+ activeEpubReader.value?.actions?.goForward?.();
14
+ };
15
+ const goBackward = () => {
16
+ activeEpubReader.value?.actions?.goBackward?.();
17
+ };
18
+ const goToLink = (...args) => {
19
+ activeEpubReader.value?.actions?.goToLink?.(...args);
20
+ };
21
+ return {
22
+ goForward,
23
+ goBackward,
24
+ goToLink,
25
+ };
26
+ };
@@ -0,0 +1,15 @@
1
+ import type { ReturnTypeCreateController } from '../../src/composables/utils';
2
+ export declare const useEpubReaderSettings: (controller: ReturnTypeCreateController) => {
3
+ settings: {
4
+ backgroundColor: string | null;
5
+ columnCount: number | null;
6
+ fontFamily: string | null;
7
+ fontSize: number | null;
8
+ isFullscreen: boolean;
9
+ lineHeight: number | null;
10
+ scroll: boolean | null;
11
+ textAlign: import("@readium/navigator").TextAlignment | null;
12
+ textColor: string | null;
13
+ };
14
+ toggleFullscreen: () => void;
15
+ };
@@ -0,0 +1,8 @@
1
+ export const useEpubReaderSettings = (controller) => {
2
+ const { settings } = controller.state;
3
+ const { toggleFullscreen } = controller.actions;
4
+ return {
5
+ settings,
6
+ toggleFullscreen,
7
+ };
8
+ };
@@ -0,0 +1,22 @@
1
+ import type { ShallowRef } from 'vue';
2
+ import { computed } from 'vue';
3
+ import type { ReturnTypeCreateController } from '../../src/composables/utils';
4
+ type ControllerState = ReturnTypeCreateController['state'];
5
+ type ActiveState = {
6
+ error: ReturnType<typeof computed<string | null | undefined>>;
7
+ loading: ReturnType<typeof computed<boolean | undefined>>;
8
+ tocLinks: ReturnType<typeof computed<ControllerState['tocLinks']['value'] | undefined>>;
9
+ navigator: ReturnType<typeof computed<ControllerState['navigator']['value'] | undefined>>;
10
+ publication: ReturnType<typeof computed<ControllerState['publication']['value'] | undefined>>;
11
+ containerRef: ReturnType<typeof computed<HTMLDivElement | null | undefined>>;
12
+ totalPositions: ReturnType<typeof computed<number | undefined>>;
13
+ currentPosition: ReturnType<typeof computed<number | undefined>>;
14
+ progressPercent: ReturnType<typeof computed<number | undefined>>;
15
+ currentChapterTitle: ReturnType<typeof computed<string | undefined>>;
16
+ settings: ReturnType<typeof computed<ControllerState['settings'] | undefined>>;
17
+ };
18
+ export declare const setEpubReaderController: (reader: ReturnTypeCreateController | null) => void;
19
+ export declare const useEpubReaderControllerRef: () => ShallowRef<ReturnTypeCreateController | null>;
20
+ export declare function useEpubReaderState(controller: ReturnTypeCreateController): ReturnTypeCreateController['state'];
21
+ export declare function useEpubReaderState(controller?: undefined, container?: Readonly<ShallowRef<HTMLDivElement | null>>): ActiveState;
22
+ export {};
@@ -0,0 +1,29 @@
1
+ import { computed, ref, shallowRef } from 'vue';
2
+ const containerRef = ref();
3
+ const epubReaderController = shallowRef(null);
4
+ export const setEpubReaderController = (reader) => {
5
+ epubReaderController.value = reader;
6
+ };
7
+ export const useEpubReaderControllerRef = () => epubReaderController;
8
+ export function useEpubReaderState(controller, container) {
9
+ if (container) {
10
+ containerRef.value = container;
11
+ }
12
+ if (controller) {
13
+ return controller.state;
14
+ }
15
+ const activeState = computed(() => epubReaderController.value?.state);
16
+ return {
17
+ error: computed(() => activeState.value?.error?.value),
18
+ loading: computed(() => activeState.value?.loading?.value),
19
+ tocLinks: computed(() => activeState.value?.tocLinks?.value),
20
+ navigator: computed(() => activeState.value?.navigator?.value),
21
+ publication: computed(() => activeState.value?.publication?.value),
22
+ containerRef: computed(() => containerRef.value?.value),
23
+ totalPositions: computed(() => activeState.value?.totalPositions?.value),
24
+ currentPosition: computed(() => activeState.value?.currentPosition?.value),
25
+ progressPercent: computed(() => activeState.value?.progressPercent?.value),
26
+ currentChapterTitle: computed(() => activeState.value?.currentChapterTitle?.value),
27
+ settings: computed(() => activeState.value?.settings),
28
+ };
29
+ }
@@ -0,0 +1,8 @@
1
+ export type ReaderDictionaryWordStatus = 'known' | 'unknown';
2
+ export type ReaderDictionaryApi = {
3
+ classifyWords: (language: string, lemmas: string[], contextKey: string) => Promise<Map<string, ReaderDictionaryWordStatus>>;
4
+ clear: () => void;
5
+ };
6
+ export declare const setReaderDictionary: (dictionary: ReaderDictionaryApi) => void;
7
+ export declare const hasReaderDictionary: () => boolean;
8
+ export declare const useReaderDictionary: () => ReaderDictionaryApi;
@@ -0,0 +1,13 @@
1
+ let readerDictionary = null;
2
+ export const setReaderDictionary = (dictionary) => {
3
+ readerDictionary = dictionary;
4
+ };
5
+ export const hasReaderDictionary = () => {
6
+ return readerDictionary !== null;
7
+ };
8
+ export const useReaderDictionary = () => {
9
+ if (!readerDictionary) {
10
+ throw new Error('Reader dictionary is not configured. Call setReaderDictionary() before enabling word highlighting.');
11
+ }
12
+ return readerDictionary;
13
+ };
@@ -0,0 +1,25 @@
1
+ import type { ReturnTypeCreateController } from '../../src/composables/utils';
2
+ export type ReaderColors = {
3
+ text: string | null;
4
+ background: string | null;
5
+ highlight: string | null;
6
+ };
7
+ type ReaderColorsListener = (colors: Readonly<ReaderColors>) => void;
8
+ export declare const setReaderColors: (colors: Partial<ReaderColors>) => void;
9
+ export declare const getReaderColors: () => ReaderColors;
10
+ export declare const onReaderColorsChange: (handler: ReaderColorsListener) => () => void;
11
+ export declare const useReaderSettings: (controller: ReturnTypeCreateController) => {
12
+ settings: {
13
+ backgroundColor: string | null;
14
+ columnCount: number | null;
15
+ fontFamily: string | null;
16
+ fontSize: number | null;
17
+ isFullscreen: boolean;
18
+ lineHeight: number | null;
19
+ scroll: boolean | null;
20
+ textAlign: import("@readium/navigator").TextAlignment | null;
21
+ textColor: string | null;
22
+ };
23
+ toggleFullscreen: () => void;
24
+ };
25
+ export {};
@@ -0,0 +1,42 @@
1
+ import { useEpubReaderSettings } from '../../src/composables/useEpubReaderSettings';
2
+ const readerColors = {
3
+ text: null,
4
+ background: null,
5
+ highlight: null,
6
+ };
7
+ let readerColorsListener = null;
8
+ const notifyReaderColorsListeners = () => {
9
+ const snapshot = {
10
+ text: readerColors.text,
11
+ background: readerColors.background,
12
+ highlight: readerColors.highlight,
13
+ };
14
+ readerColorsListener?.(snapshot);
15
+ };
16
+ export const setReaderColors = (colors) => {
17
+ if (colors.text !== undefined) {
18
+ readerColors.text = colors.text;
19
+ }
20
+ if (colors.background !== undefined) {
21
+ readerColors.background = colors.background;
22
+ }
23
+ if (colors.highlight !== undefined) {
24
+ readerColors.highlight = colors.highlight;
25
+ }
26
+ notifyReaderColorsListeners();
27
+ };
28
+ export const getReaderColors = () => {
29
+ return readerColors;
30
+ };
31
+ export const onReaderColorsChange = (handler) => {
32
+ readerColorsListener = handler;
33
+ handler(getReaderColors());
34
+ return () => {
35
+ if (readerColorsListener === handler) {
36
+ readerColorsListener = null;
37
+ }
38
+ };
39
+ };
40
+ export const useReaderSettings = (controller) => {
41
+ return useEpubReaderSettings(controller);
42
+ };
@@ -0,0 +1,2 @@
1
+ import type { createEpubReaderController } from '../../src/core/controller';
2
+ export type ReturnTypeCreateController = ReturnType<typeof createEpubReaderController>;
@@ -0,0 +1 @@
1
+ export {};