@readium/navigator 1.3.3 → 2.0.0-beta.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 (55) hide show
  1. package/dist/index.js +3744 -2819
  2. package/dist/index.umd.cjs +16 -16
  3. package/package.json +9 -9
  4. package/src/epub/EpubNavigator.ts +184 -7
  5. package/src/epub/css/Properties.ts +376 -0
  6. package/src/epub/css/ReadiumCSS.ts +348 -0
  7. package/src/epub/css/index.ts +2 -0
  8. package/src/epub/frame/FrameBlobBuilder.ts +59 -9
  9. package/src/epub/frame/FrameManager.ts +25 -6
  10. package/src/epub/frame/FramePoolManager.ts +61 -2
  11. package/src/epub/fxl/FXLFramePoolManager.ts +3 -15
  12. package/src/epub/index.ts +3 -1
  13. package/src/epub/preferences/EpubDefaults.ts +154 -0
  14. package/src/epub/preferences/EpubPreferences.ts +183 -0
  15. package/src/epub/preferences/EpubPreferencesEditor.ts +501 -0
  16. package/src/epub/preferences/EpubSettings.ts +212 -0
  17. package/src/epub/preferences/guards.ts +86 -0
  18. package/src/epub/preferences/index.ts +4 -0
  19. package/src/helpers/dimensions.ts +13 -0
  20. package/src/helpers/index.ts +1 -0
  21. package/src/helpers/lineLength.ts +293 -0
  22. package/src/helpers/sML.ts +18 -1
  23. package/src/index.ts +2 -1
  24. package/src/preferences/Configurable.ts +16 -0
  25. package/src/preferences/Preference.ts +272 -0
  26. package/src/preferences/PreferencesEditor.ts +6 -0
  27. package/src/preferences/Types.ts +39 -0
  28. package/src/preferences/index.ts +4 -0
  29. package/types/src/epub/EpubNavigator.d.ts +27 -3
  30. package/types/src/epub/css/Properties.d.ts +177 -0
  31. package/types/src/epub/css/ReadiumCSS.d.ts +32 -0
  32. package/types/src/epub/css/index.d.ts +2 -0
  33. package/types/src/epub/frame/FrameBlobBuilder.d.ts +5 -1
  34. package/types/src/epub/frame/FrameManager.d.ts +5 -0
  35. package/types/src/epub/frame/FramePoolManager.d.ts +8 -1
  36. package/types/src/epub/fxl/FXLFramePoolManager.d.ts +1 -3
  37. package/types/src/epub/index.d.ts +2 -0
  38. package/types/src/epub/preferences/EpubDefaults.d.ts +82 -0
  39. package/types/src/epub/preferences/EpubPreferences.d.ts +86 -0
  40. package/types/src/epub/preferences/EpubPreferencesEditor.d.ts +53 -0
  41. package/types/src/epub/preferences/EpubSettings.d.ts +85 -0
  42. package/types/src/epub/preferences/guards.d.ts +9 -0
  43. package/types/src/epub/preferences/index.d.ts +4 -0
  44. package/types/src/helpers/dimensions.d.ts +7 -0
  45. package/types/src/helpers/index.d.ts +1 -0
  46. package/types/src/helpers/lineLength.d.ts +68 -0
  47. package/types/src/helpers/sML.d.ts +6 -1
  48. package/types/src/index.d.ts +1 -0
  49. package/types/src/preferences/Configurable.d.ts +13 -0
  50. package/types/src/preferences/Preference.d.ts +117 -0
  51. package/types/src/preferences/PreferencesEditor.d.ts +5 -0
  52. package/types/src/preferences/PreferencesSerializer.d.ts +5 -0
  53. package/types/src/preferences/Types.d.ts +24 -0
  54. package/types/src/preferences/index.d.ts +4 -0
  55. package/LICENSE +0 -28
@@ -0,0 +1,82 @@
1
+ import { LayoutStrategy, TextAlignment, Theme } from "../../preferences/Types";
2
+ export interface IEpubDefaults {
3
+ backgroundColor?: string | null;
4
+ blendFilter?: boolean | null;
5
+ columnCount?: number | null;
6
+ constraint?: number | null;
7
+ darkenFilter?: boolean | number | null;
8
+ deprecatedFontSize?: boolean | null;
9
+ fontFamily?: string | null;
10
+ fontSize?: number | null;
11
+ fontSizeNormalize?: boolean | null;
12
+ fontOpticalSizing?: boolean | null;
13
+ fontWeight?: number | null;
14
+ fontWidth?: number | null;
15
+ hyphens?: boolean | null;
16
+ invertFilter?: boolean | number | null;
17
+ invertGaijiFilter?: boolean | number | null;
18
+ iPadOSPatch?: boolean | null;
19
+ layoutStrategy?: LayoutStrategy | null;
20
+ letterSpacing?: number | null;
21
+ ligatures?: boolean | null;
22
+ lineHeight?: number | null;
23
+ lineLength?: number | null;
24
+ linkColor?: string | null;
25
+ maximalLineLength?: number | null;
26
+ minimalLineLength?: number | null;
27
+ noRuby?: boolean | null;
28
+ optimalLineLength?: number | null;
29
+ pageGutter?: number | null;
30
+ paragraphIndent?: number | null;
31
+ paragraphSpacing?: number | null;
32
+ scroll?: boolean | null;
33
+ selectionBackgroundColor?: string | null;
34
+ selectionTextColor?: string | null;
35
+ textAlign?: TextAlignment | null;
36
+ textColor?: string | null;
37
+ textNormalization?: boolean | null;
38
+ theme?: Theme | null;
39
+ visitedColor?: string | null;
40
+ wordSpacing?: number | null;
41
+ }
42
+ export declare class EpubDefaults {
43
+ backgroundColor: string | null;
44
+ blendFilter: boolean | null;
45
+ columnCount: number | null;
46
+ constraint: number;
47
+ darkenFilter: boolean | number | null;
48
+ deprecatedFontSize?: boolean | null;
49
+ fontFamily: string | null;
50
+ fontSize: number | null;
51
+ fontSizeNormalize: boolean | null;
52
+ fontOpticalSizing: boolean | null;
53
+ fontWeight: number | null;
54
+ fontWidth: number | null;
55
+ hyphens: boolean | null;
56
+ invertFilter: boolean | number | null;
57
+ invertGaijiFilter: boolean | number | null;
58
+ iPadOSPatch: boolean;
59
+ layoutStrategy: LayoutStrategy | null;
60
+ letterSpacing: number | null;
61
+ ligatures: boolean | null;
62
+ lineHeight: number | null;
63
+ lineLength: number | null;
64
+ linkColor: string | null;
65
+ maximalLineLength: number | null;
66
+ minimalLineLength: number | null;
67
+ noRuby: boolean | null;
68
+ optimalLineLength: number;
69
+ pageGutter: number | null;
70
+ paragraphIndent: number | null;
71
+ paragraphSpacing: number | null;
72
+ scroll: boolean | null;
73
+ selectionBackgroundColor: string | null;
74
+ selectionTextColor: string | null;
75
+ textAlign: TextAlignment | null;
76
+ textColor: string | null;
77
+ textNormalization: boolean | null;
78
+ theme: Theme | null;
79
+ visitedColor: string | null;
80
+ wordSpacing: number | null;
81
+ constructor(defaults: IEpubDefaults);
82
+ }
@@ -0,0 +1,86 @@
1
+ import { ConfigurablePreferences } from "../../preferences/Configurable";
2
+ import { LayoutStrategy, TextAlignment, Theme } from "../../preferences/Types";
3
+ export interface IEpubPreferences {
4
+ backgroundColor?: string | null;
5
+ blendFilter?: boolean | null;
6
+ columnCount?: number | null;
7
+ constraint?: number | null;
8
+ darkenFilter?: boolean | number | null;
9
+ deprecatedFontSize?: boolean | null;
10
+ fontFamily?: string | null;
11
+ fontSize?: number | null;
12
+ fontSizeNormalize?: boolean | null;
13
+ fontOpticalSizing?: boolean | null;
14
+ fontWeight?: number | null;
15
+ fontWidth?: number | null;
16
+ hyphens?: boolean | null;
17
+ invertFilter?: boolean | number | null;
18
+ invertGaijiFilter?: boolean | number | null;
19
+ iPadOSPatch?: boolean | null;
20
+ layoutStrategy?: LayoutStrategy | null;
21
+ letterSpacing?: number | null;
22
+ ligatures?: boolean | null;
23
+ lineHeight?: number | null;
24
+ lineLength?: number | null;
25
+ linkColor?: string | null;
26
+ maximalLineLength?: number | null;
27
+ minimalLineLength?: number | null;
28
+ noRuby?: boolean | null;
29
+ optimalLineLength?: number | null;
30
+ pageGutter?: number | null;
31
+ paragraphIndent?: number | null;
32
+ paragraphSpacing?: number | null;
33
+ scroll?: boolean | null;
34
+ selectionBackgroundColor?: string | null;
35
+ selectionTextColor?: string | null;
36
+ textAlign?: TextAlignment | null;
37
+ textColor?: string | null;
38
+ textNormalization?: boolean | null;
39
+ theme?: Theme | null;
40
+ visitedColor?: string | null;
41
+ wordSpacing?: number | null;
42
+ }
43
+ export declare class EpubPreferences implements ConfigurablePreferences {
44
+ backgroundColor?: string | null;
45
+ blendFilter?: boolean | null;
46
+ constraint?: number | null;
47
+ columnCount?: number | null;
48
+ darkenFilter?: boolean | number | null;
49
+ deprecatedFontSize?: boolean | null;
50
+ fontFamily?: string | null;
51
+ fontSize?: number | null;
52
+ fontSizeNormalize?: boolean | null;
53
+ fontOpticalSizing?: boolean | null;
54
+ fontWeight?: number | null;
55
+ fontWidth?: number | null;
56
+ hyphens?: boolean | null;
57
+ invertFilter?: boolean | number | null;
58
+ invertGaijiFilter?: boolean | number | null;
59
+ iPadOSPatch?: boolean | null;
60
+ layoutStrategy?: LayoutStrategy | null;
61
+ letterSpacing?: number | null;
62
+ ligatures?: boolean | null;
63
+ lineHeight?: number | null;
64
+ lineLength?: number | null;
65
+ linkColor?: string | null;
66
+ maximalLineLength?: number | null;
67
+ minimalLineLength?: number | null;
68
+ noRuby?: boolean | null;
69
+ optimalLineLength?: number | null;
70
+ pageGutter?: number | null;
71
+ paragraphIndent?: number | null;
72
+ paragraphSpacing?: number | null;
73
+ scroll?: boolean | null;
74
+ selectionBackgroundColor?: string | null;
75
+ selectionTextColor?: string | null;
76
+ textAlign?: TextAlignment | null;
77
+ textColor?: string | null;
78
+ textNormalization?: boolean | null;
79
+ theme?: Theme | null;
80
+ visitedColor?: string | null;
81
+ wordSpacing?: number | null;
82
+ constructor(preferences?: IEpubPreferences);
83
+ static serialize(preferences: EpubPreferences): string;
84
+ static deserialize(preferences: string): EpubPreferences | null;
85
+ merging(other: ConfigurablePreferences): ConfigurablePreferences;
86
+ }
@@ -0,0 +1,53 @@
1
+ import { Metadata } from "@readium/shared";
2
+ import { IPreferencesEditor } from "../../preferences/PreferencesEditor";
3
+ import { EpubPreferences } from "./EpubPreferences";
4
+ import { EpubSettings } from "./EpubSettings";
5
+ import { BooleanPreference, EnumPreference, Preference, RangePreference } from "../../preferences/Preference";
6
+ import { LayoutStrategy, TextAlignment, Theme } from "../../preferences/Types";
7
+ export declare class EpubPreferencesEditor implements IPreferencesEditor {
8
+ preferences: EpubPreferences;
9
+ private settings;
10
+ private metadata;
11
+ private layout;
12
+ constructor(initialPreferences: EpubPreferences, settings: EpubSettings, metadata: Metadata);
13
+ clear(): void;
14
+ private updatePreference;
15
+ get backgroundColor(): Preference<string>;
16
+ get blendFilter(): BooleanPreference;
17
+ get columnCount(): Preference<number>;
18
+ get constraint(): Preference<number>;
19
+ get darkenFilter(): RangePreference<number>;
20
+ get deprecatedFontSize(): BooleanPreference;
21
+ get fontFamily(): Preference<string>;
22
+ get fontSize(): RangePreference<number>;
23
+ get fontSizeNormalize(): BooleanPreference;
24
+ get fontOpticalSizing(): BooleanPreference;
25
+ get fontWeight(): RangePreference<number>;
26
+ get fontWidth(): RangePreference<number>;
27
+ get hyphens(): BooleanPreference;
28
+ get invertFilter(): RangePreference<number>;
29
+ get invertGaijiFilter(): RangePreference<number>;
30
+ get iPadOSPatch(): BooleanPreference;
31
+ get layoutStrategy(): EnumPreference<LayoutStrategy>;
32
+ get letterSpacing(): RangePreference<number>;
33
+ get ligatures(): BooleanPreference;
34
+ get lineHeight(): RangePreference<number>;
35
+ get lineLength(): RangePreference<number>;
36
+ get linkColor(): Preference<string>;
37
+ get maximalLineLength(): RangePreference<number>;
38
+ get minimalLineLength(): RangePreference<number>;
39
+ get noRuby(): BooleanPreference;
40
+ get optimalLineLength(): RangePreference<number>;
41
+ get pageGutter(): Preference<number>;
42
+ get paragraphIndent(): RangePreference<number>;
43
+ get paragraphSpacing(): RangePreference<number>;
44
+ get scroll(): BooleanPreference;
45
+ get selectionBackgroundColor(): Preference<string>;
46
+ get selectionTextColor(): Preference<string>;
47
+ get textAlign(): EnumPreference<TextAlignment>;
48
+ get textColor(): Preference<string>;
49
+ get textNormalization(): BooleanPreference;
50
+ get theme(): EnumPreference<Theme>;
51
+ get visitedColor(): Preference<string>;
52
+ get wordSpacing(): RangePreference<number>;
53
+ }
@@ -0,0 +1,85 @@
1
+ import { ConfigurableSettings } from "../../preferences/Configurable";
2
+ import { LayoutStrategy, TextAlignment, Theme } from "../../preferences/Types";
3
+ import { EpubDefaults } from "./EpubDefaults";
4
+ import { EpubPreferences } from "./EpubPreferences";
5
+ export interface IEpubSettings {
6
+ backgroundColor?: string | null;
7
+ blendFilter?: boolean | null;
8
+ columnCount?: number | null;
9
+ constraint?: number | null;
10
+ darkenFilter?: boolean | number | null;
11
+ deprecatedFontSize?: boolean | null;
12
+ fontFamily?: string | null;
13
+ fontSize?: number | null;
14
+ fontSizeNormalize?: boolean | null;
15
+ fontOpticalSizing?: boolean | null;
16
+ fontWeight?: number | null;
17
+ fontWidth?: number | null;
18
+ hyphens?: boolean | null;
19
+ invertFilter?: boolean | number | null;
20
+ invertGaijiFilter: boolean | number | null;
21
+ iPadOSPatch?: boolean | null;
22
+ layoutStrategy?: LayoutStrategy | null;
23
+ letterSpacing?: number | null;
24
+ ligatures?: boolean | null;
25
+ lineHeight?: number | null;
26
+ lineLength?: number | null;
27
+ linkColor?: string | null;
28
+ maximalLineLength?: number | null;
29
+ minimalLineLength?: number | null;
30
+ noRuby?: boolean | null;
31
+ optimalLineLength?: number | null;
32
+ pageGutter?: number | null;
33
+ paragraphIndent?: number | null;
34
+ paragraphSpacing?: number | null;
35
+ scroll?: boolean | null;
36
+ selectionBackgroundColor?: string | null;
37
+ selectionTextColor?: string | null;
38
+ textAlign?: TextAlignment | null;
39
+ textColor?: string | null;
40
+ textNormalization?: boolean | null;
41
+ theme?: Theme | null;
42
+ visitedColor?: string | null;
43
+ wordSpacing?: number | null;
44
+ }
45
+ export declare class EpubSettings implements ConfigurableSettings {
46
+ backgroundColor: string | null;
47
+ blendFilter: boolean | null;
48
+ columnCount: number | null;
49
+ constraint: number;
50
+ darkenFilter: boolean | number | null;
51
+ deprecatedFontSize: boolean | null;
52
+ fontFamily: string | null;
53
+ fontSize: number | null;
54
+ fontSizeNormalize: boolean | null;
55
+ fontOpticalSizing: boolean | null;
56
+ fontWeight: number | null;
57
+ fontWidth: number | null;
58
+ hyphens: boolean | null;
59
+ invertFilter: boolean | number | null;
60
+ invertGaijiFilter: boolean | number | null;
61
+ iPadOSPatch: boolean;
62
+ layoutStrategy: LayoutStrategy | null;
63
+ letterSpacing: number | null;
64
+ ligatures: boolean | null;
65
+ lineHeight: number | null;
66
+ lineLength: number | null;
67
+ linkColor: string | null;
68
+ maximalLineLength: number | null;
69
+ minimalLineLength: number | null;
70
+ noRuby: boolean | null;
71
+ optimalLineLength: number;
72
+ pageGutter: number | null;
73
+ paragraphIndent: number | null;
74
+ paragraphSpacing: number | null;
75
+ scroll: boolean | null;
76
+ selectionBackgroundColor: string | null;
77
+ selectionTextColor: string | null;
78
+ textAlign: TextAlignment | null;
79
+ textColor: string | null;
80
+ textNormalization: boolean | null;
81
+ theme: Theme | null;
82
+ visitedColor: string | null;
83
+ wordSpacing: number | null;
84
+ constructor(preferences: EpubPreferences, defaults: EpubDefaults);
85
+ }
@@ -0,0 +1,9 @@
1
+ export declare function ensureLessThanOrEqual<T extends number | null | undefined>(value: T, compareTo: T): T | undefined;
2
+ export declare function ensureMoreThanOrEqual<T extends number | null | undefined>(value: T, compareTo: T): T | undefined;
3
+ export declare function ensureString(value: string | null | undefined): string | null | undefined;
4
+ export declare function ensureBoolean(value: boolean | null | undefined): boolean | null | undefined;
5
+ export declare function ensureEnumValue<T extends string>(value: T | null | undefined, enumType: Record<T, string>): T | null | undefined;
6
+ export declare function ensureFilter(filter: boolean | number | null | undefined): boolean | number | null | undefined;
7
+ export declare function ensureNonNegative(value: number | null | undefined): number | null | undefined;
8
+ export declare function ensureValueInRange(value: number | null | undefined, range: [number, number]): number | null | undefined;
9
+ export declare function withFallback<T>(value: T | null | undefined, defaultValue: T | null): T | null;
@@ -0,0 +1,4 @@
1
+ export * from "./EpubDefaults";
2
+ export * from "./EpubPreferencesEditor";
3
+ export * from "./EpubPreferences";
4
+ export * from "./EpubSettings";
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Returns the "content width" of an element, which is its clientWidth
3
+ * minus any horizontal padding.
4
+ *
5
+ * @param el - The element to measure.
6
+ */
7
+ export declare function getContentWidth(el: Element): number;
@@ -1 +1,2 @@
1
+ export * from "./lineLength";
1
2
  export * from './sML';
@@ -0,0 +1,68 @@
1
+ export interface ICustomFontFace {
2
+ name: string;
3
+ url: string;
4
+ }
5
+ export interface ILineLengthsConfig {
6
+ optimalChars: number;
7
+ minChars?: number | null;
8
+ maxChars?: number | null;
9
+ userChars?: number | null;
10
+ baseFontSize?: number | null;
11
+ sample?: string | null;
12
+ pageGutter?: number | null;
13
+ fontFace?: string | ICustomFontFace | null;
14
+ letterSpacing?: number | null;
15
+ wordSpacing?: number | null;
16
+ isCJK?: boolean | null;
17
+ getRelative?: boolean | null;
18
+ }
19
+ export interface ILineLengths {
20
+ min: number | null;
21
+ user: number | null;
22
+ max: number | null;
23
+ optimal: number;
24
+ baseFontSize: number;
25
+ }
26
+ export declare class LineLengths {
27
+ private _canvas;
28
+ private _optimalChars;
29
+ private _minChars?;
30
+ private _maxChars?;
31
+ private _userChars;
32
+ private _baseFontSize;
33
+ private _fontFace;
34
+ private _sample;
35
+ private _pageGutter;
36
+ private _letterSpacing;
37
+ private _wordSpacing;
38
+ private _isCJK;
39
+ private _getRelative;
40
+ private _padding;
41
+ private _minDivider;
42
+ private _userMultiplier;
43
+ private _maxMultiplier;
44
+ private _approximatedWordSpaces;
45
+ private _optimalLineLength;
46
+ constructor(config: ILineLengthsConfig);
47
+ set minChars(n: number | null);
48
+ set optimalChars(n: number);
49
+ set maxChars(n: number | null);
50
+ set userChars(n: number | null);
51
+ set letterSpacing(n: number);
52
+ set wordSpacing(n: number);
53
+ set baseFontSize(n: number);
54
+ set fontFace(f: string | ICustomFontFace | null);
55
+ set sample(s: string);
56
+ set pageGutter(n: number);
57
+ set relativeGetters(b: boolean);
58
+ get baseFontSize(): number;
59
+ get minimalLineLength(): number | null;
60
+ get userLineLength(): number | null;
61
+ get maximalLineLength(): number | null;
62
+ get optimalLineLength(): number;
63
+ get all(): ILineLengths;
64
+ private static approximateWordSpaces;
65
+ private getLineLengthFallback;
66
+ private getOptimalLineLength;
67
+ private measureText;
68
+ }
@@ -41,11 +41,16 @@ declare interface UAFlags {
41
41
  Facebook: number[];
42
42
  LINE: number[];
43
43
  }
44
+ declare type iOSRequest = "mobile" | "desktop" | undefined;
44
45
  declare class sMLFactory {
45
46
  OS: OSFlags;
46
47
  UA: UAFlags;
47
48
  Env: string[];
48
49
  constructor();
49
50
  }
51
+ declare class sMLFactoryWithRequest extends sMLFactory {
52
+ get iOSRequest(): iOSRequest;
53
+ }
50
54
  declare const sML: sMLFactory;
51
- export { sML };
55
+ declare const sMLWithRequest: sMLFactoryWithRequest;
56
+ export { sML, sMLWithRequest };
@@ -2,3 +2,4 @@ export * from './Navigator';
2
2
  export * from './epub';
3
3
  export * from './audio';
4
4
  export * from './helpers';
5
+ export * from './preferences';
@@ -0,0 +1,13 @@
1
+ import { IPreferencesEditor } from "./PreferencesEditor";
2
+ export interface ConfigurableSettings {
3
+ [key: string]: any;
4
+ }
5
+ export interface ConfigurablePreferences {
6
+ [key: string]: any;
7
+ merging(other: ConfigurablePreferences): ConfigurablePreferences;
8
+ }
9
+ export interface Configurable<ConfigurableSettings, ConfigurablePreferences> {
10
+ settings: ConfigurableSettings;
11
+ submitPreferences(preferences: ConfigurablePreferences): void;
12
+ preferencesEditor: IPreferencesEditor;
13
+ }
@@ -0,0 +1,117 @@
1
+ export interface IPreference<T> {
2
+ /**
3
+ * The current value of the preference.
4
+ */
5
+ value: T | null | undefined;
6
+ /**
7
+ * The value that will be effectively used by the Configurable object if preferences are submitted as they are.
8
+ */
9
+ effectiveValue: T | null | undefined;
10
+ /**
11
+ * Indicates if this preference will be effectively used by the Configurable object if preferences are submitted as they are.
12
+ */
13
+ isEffective: boolean;
14
+ /**
15
+ * Unset the preference.
16
+ * Equivalent to set(null).
17
+ */
18
+ clear(): void;
19
+ }
20
+ export interface IBooleanPreference extends IPreference<boolean> {
21
+ /**
22
+ * Toggle the preference to its opposite value.
23
+ */
24
+ toggle(): void;
25
+ }
26
+ export interface IEnumPreference<T> extends IPreference<T> {
27
+ /**
28
+ * The possible values for this preference.
29
+ */
30
+ supportedValues: T[];
31
+ }
32
+ export interface IRangePreference<T> extends IPreference<T> {
33
+ /**
34
+ * The supported range [min, max] for this preference.
35
+ */
36
+ supportedRange: [T, T];
37
+ /**
38
+ * The step value for the incrementing/decrementing into the range.
39
+ */
40
+ step: number;
41
+ /**
42
+ * Increase the preference value.
43
+ */
44
+ increment(): void;
45
+ /**
46
+ * Decrease the preference value.
47
+ */
48
+ decrement(): void;
49
+ /**
50
+ * Format the preference value as a string.
51
+ */
52
+ format(value: T): string;
53
+ }
54
+ export declare class Preference<T> implements Preference<T> {
55
+ protected _value?: T | null;
56
+ protected readonly _effectiveValue?: T | null;
57
+ protected readonly _isEffective: boolean;
58
+ protected _onChange: (newValue: T | null | undefined) => void;
59
+ constructor({ initialValue, effectiveValue, isEffective, onChange }: {
60
+ initialValue?: T | null;
61
+ effectiveValue?: T | null;
62
+ isEffective: boolean;
63
+ onChange: (newValue: T | null | undefined) => void;
64
+ });
65
+ set value(value: T | null | undefined);
66
+ get value(): T | null | undefined;
67
+ get effectiveValue(): T | null | undefined;
68
+ get isEffective(): boolean;
69
+ clear(): void;
70
+ }
71
+ export declare class BooleanPreference extends Preference<boolean> implements IBooleanPreference {
72
+ set value(value: boolean | null | undefined);
73
+ get value(): boolean | null | undefined;
74
+ get effectiveValue(): boolean | null | undefined;
75
+ get isEffective(): boolean;
76
+ clear(): void;
77
+ toggle(): void;
78
+ }
79
+ export declare class EnumPreference<T extends string | number | symbol> extends Preference<T> implements IEnumPreference<T> {
80
+ private readonly _supportedValues;
81
+ constructor({ initialValue, effectiveValue, isEffective, onChange, supportedValues }: {
82
+ initialValue?: T | null;
83
+ effectiveValue?: T | null;
84
+ isEffective: boolean;
85
+ onChange: (newValue: T | null | undefined) => void;
86
+ supportedValues: T[];
87
+ });
88
+ set value(value: T | null | undefined);
89
+ get value(): T | null | undefined;
90
+ get effectiveValue(): T | null | undefined;
91
+ get isEffective(): boolean;
92
+ get supportedValues(): T[];
93
+ clear(): void;
94
+ }
95
+ export declare class RangePreference<T extends number> extends Preference<T> implements IRangePreference<T> {
96
+ private readonly _supportedRange;
97
+ private readonly _step;
98
+ private readonly _decimals;
99
+ constructor({ initialValue, effectiveValue, isEffective, onChange, supportedRange, step }: {
100
+ initialValue?: T | null;
101
+ effectiveValue?: T | null;
102
+ isEffective: boolean;
103
+ onChange: (newValue: T | null | undefined) => void;
104
+ supportedRange: [T, T];
105
+ step: number;
106
+ });
107
+ set value(value: T | null | undefined);
108
+ get value(): T | null | undefined;
109
+ get effectiveValue(): T | null | undefined;
110
+ get isEffective(): boolean;
111
+ get supportedRange(): [T, T];
112
+ get step(): number;
113
+ increment(): void;
114
+ decrement(): void;
115
+ format(value: T): string;
116
+ clear(): void;
117
+ }
@@ -0,0 +1,5 @@
1
+ import { ConfigurablePreferences } from "./Configurable";
2
+ export interface IPreferencesEditor {
3
+ preferences: ConfigurablePreferences;
4
+ clear(): void;
5
+ }
@@ -0,0 +1,5 @@
1
+ import { ConfigurablePreferences } from "./Configurable";
2
+ export declare class PreferencesSerializer {
3
+ static serialize(preferences: ConfigurablePreferences): string;
4
+ static deserialize(preferences: ConfigurablePreferences): ConfigurablePreferences | null;
5
+ }
@@ -0,0 +1,24 @@
1
+ export declare enum TextAlignment {
2
+ start = "start",
3
+ left = "left",
4
+ right = "right",
5
+ justify = "justify"
6
+ }
7
+ export declare enum Theme {
8
+ day = "day",
9
+ sepia = "sepia",
10
+ night = "night",
11
+ custom = "custom"
12
+ }
13
+ export declare enum LayoutStrategy {
14
+ margin = "margin",
15
+ lineLength = "lineLength",
16
+ columns = "columns"
17
+ }
18
+ export type RangeConfig = {
19
+ range: [number, number];
20
+ step: number;
21
+ };
22
+ export declare const fontSizeRangeConfig: RangeConfig;
23
+ export declare const fontWeightRangeConfig: RangeConfig;
24
+ export declare const fontWidthRangeConfig: RangeConfig;
@@ -0,0 +1,4 @@
1
+ export * from "./Configurable";
2
+ export * from "./Preference";
3
+ export * from "./PreferencesEditor";
4
+ export * from "./Types";
package/LICENSE DELETED
@@ -1,28 +0,0 @@
1
- BSD 3-Clause License
2
-
3
- Copyright (c) 2022, Readium Foundation
4
-
5
- Redistribution and use in source and binary forms, with or without
6
- modification, are permitted provided that the following conditions are met:
7
-
8
- 1. Redistributions of source code must retain the above copyright notice, this
9
- list of conditions and the following disclaimer.
10
-
11
- 2. Redistributions in binary form must reproduce the above copyright notice,
12
- this list of conditions and the following disclaimer in the documentation
13
- and/or other materials provided with the distribution.
14
-
15
- 3. Neither the name of the copyright holder nor the names of its
16
- contributors may be used to endorse or promote products derived from
17
- this software without specific prior written permission.
18
-
19
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22
- DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
23
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
25
- SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
26
- CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
27
- OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.