qcm-font-resizer 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +34 -0
- package/dist/index.d.ts +34 -0
- package/dist/index.js +99 -0
- package/dist/index.mjs +72 -0
- package/package.json +31 -0
package/dist/index.d.mts
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { ReactNode } from 'react';
|
|
3
|
+
|
|
4
|
+
interface FontSizeContextValue {
|
|
5
|
+
level: number;
|
|
6
|
+
isMin: boolean;
|
|
7
|
+
isMax: boolean;
|
|
8
|
+
increment: () => void;
|
|
9
|
+
decrement: () => void;
|
|
10
|
+
reset: () => void;
|
|
11
|
+
setLevel: (level: number) => void;
|
|
12
|
+
}
|
|
13
|
+
declare function FontSizeProvider({ children }: {
|
|
14
|
+
children: ReactNode;
|
|
15
|
+
}): react_jsx_runtime.JSX.Element;
|
|
16
|
+
declare function useFontSize(): FontSizeContextValue;
|
|
17
|
+
|
|
18
|
+
declare const DEFAULT_LEVEL = 2;
|
|
19
|
+
declare const MIN_LEVEL = 1;
|
|
20
|
+
declare const MAX_LEVEL = 5;
|
|
21
|
+
/**
|
|
22
|
+
* Scale multipliers — applied to :root via CSS var --content-text-scale.
|
|
23
|
+
* At level 2 (default), scale = 1.000 → all rem values are their base px value.
|
|
24
|
+
*
|
|
25
|
+
* level 1 → 0.800 → body: 16 * 0.8 = 12.8px
|
|
26
|
+
* level 2 → 1.000 → body: 16 * 1 = 16px (default)
|
|
27
|
+
* level 3 → 1.250 → body: 16 * 1.25 = 20px
|
|
28
|
+
* level 4 → 1.563 → body: 16 * 1.563 = 25px
|
|
29
|
+
* level 5 → 1.953 → body: 16 * 1.953 = 31.25px
|
|
30
|
+
*/
|
|
31
|
+
declare const SCALE_MAP: Record<number, number>;
|
|
32
|
+
declare const CSS_VAR_NAME = "--content-text-scale";
|
|
33
|
+
|
|
34
|
+
export { CSS_VAR_NAME, DEFAULT_LEVEL, FontSizeProvider, MAX_LEVEL, MIN_LEVEL, SCALE_MAP, useFontSize };
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { ReactNode } from 'react';
|
|
3
|
+
|
|
4
|
+
interface FontSizeContextValue {
|
|
5
|
+
level: number;
|
|
6
|
+
isMin: boolean;
|
|
7
|
+
isMax: boolean;
|
|
8
|
+
increment: () => void;
|
|
9
|
+
decrement: () => void;
|
|
10
|
+
reset: () => void;
|
|
11
|
+
setLevel: (level: number) => void;
|
|
12
|
+
}
|
|
13
|
+
declare function FontSizeProvider({ children }: {
|
|
14
|
+
children: ReactNode;
|
|
15
|
+
}): react_jsx_runtime.JSX.Element;
|
|
16
|
+
declare function useFontSize(): FontSizeContextValue;
|
|
17
|
+
|
|
18
|
+
declare const DEFAULT_LEVEL = 2;
|
|
19
|
+
declare const MIN_LEVEL = 1;
|
|
20
|
+
declare const MAX_LEVEL = 5;
|
|
21
|
+
/**
|
|
22
|
+
* Scale multipliers — applied to :root via CSS var --content-text-scale.
|
|
23
|
+
* At level 2 (default), scale = 1.000 → all rem values are their base px value.
|
|
24
|
+
*
|
|
25
|
+
* level 1 → 0.800 → body: 16 * 0.8 = 12.8px
|
|
26
|
+
* level 2 → 1.000 → body: 16 * 1 = 16px (default)
|
|
27
|
+
* level 3 → 1.250 → body: 16 * 1.25 = 20px
|
|
28
|
+
* level 4 → 1.563 → body: 16 * 1.563 = 25px
|
|
29
|
+
* level 5 → 1.953 → body: 16 * 1.953 = 31.25px
|
|
30
|
+
*/
|
|
31
|
+
declare const SCALE_MAP: Record<number, number>;
|
|
32
|
+
declare const CSS_VAR_NAME = "--content-text-scale";
|
|
33
|
+
|
|
34
|
+
export { CSS_VAR_NAME, DEFAULT_LEVEL, FontSizeProvider, MAX_LEVEL, MIN_LEVEL, SCALE_MAP, useFontSize };
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// index.ts
|
|
21
|
+
var index_exports = {};
|
|
22
|
+
__export(index_exports, {
|
|
23
|
+
CSS_VAR_NAME: () => CSS_VAR_NAME,
|
|
24
|
+
DEFAULT_LEVEL: () => DEFAULT_LEVEL,
|
|
25
|
+
FontSizeProvider: () => FontSizeProvider,
|
|
26
|
+
MAX_LEVEL: () => MAX_LEVEL,
|
|
27
|
+
MIN_LEVEL: () => MIN_LEVEL,
|
|
28
|
+
SCALE_MAP: () => SCALE_MAP,
|
|
29
|
+
useFontSize: () => useFontSize
|
|
30
|
+
});
|
|
31
|
+
module.exports = __toCommonJS(index_exports);
|
|
32
|
+
|
|
33
|
+
// FontSizeContext.tsx
|
|
34
|
+
var import_react = require("react");
|
|
35
|
+
|
|
36
|
+
// constants.ts
|
|
37
|
+
var SCALE_RATIO = 1.25;
|
|
38
|
+
var DEFAULT_LEVEL = 2;
|
|
39
|
+
var MIN_LEVEL = 1;
|
|
40
|
+
var MAX_LEVEL = 5;
|
|
41
|
+
var SCALE_MAP = {
|
|
42
|
+
1: parseFloat(Math.pow(SCALE_RATIO, -1).toFixed(3)),
|
|
43
|
+
// 0.800
|
|
44
|
+
2: 1,
|
|
45
|
+
// 1.000
|
|
46
|
+
3: parseFloat(Math.pow(SCALE_RATIO, 1).toFixed(3)),
|
|
47
|
+
// 1.250
|
|
48
|
+
4: parseFloat(Math.pow(SCALE_RATIO, 2).toFixed(3)),
|
|
49
|
+
// 1.563
|
|
50
|
+
5: parseFloat(Math.pow(SCALE_RATIO, 3).toFixed(3))
|
|
51
|
+
// 1.953
|
|
52
|
+
};
|
|
53
|
+
var CSS_VAR_NAME = "--content-text-scale";
|
|
54
|
+
|
|
55
|
+
// FontSizeContext.tsx
|
|
56
|
+
var import_jsx_runtime = require("react/jsx-runtime");
|
|
57
|
+
var FontSizeContext = (0, import_react.createContext)(void 0);
|
|
58
|
+
function clamp(value, min, max) {
|
|
59
|
+
return Math.min(max, Math.max(min, value));
|
|
60
|
+
}
|
|
61
|
+
function FontSizeProvider({ children }) {
|
|
62
|
+
const [level, setLevelState] = (0, import_react.useState)(DEFAULT_LEVEL);
|
|
63
|
+
(0, import_react.useEffect)(() => {
|
|
64
|
+
const scale = SCALE_MAP[level];
|
|
65
|
+
document.documentElement.style.setProperty(CSS_VAR_NAME, String(scale));
|
|
66
|
+
}, [level]);
|
|
67
|
+
const setLevel = (0, import_react.useCallback)((next) => {
|
|
68
|
+
setLevelState(clamp(next, MIN_LEVEL, MAX_LEVEL));
|
|
69
|
+
}, []);
|
|
70
|
+
const increment = (0, import_react.useCallback)(() => setLevel(level + 1), [level, setLevel]);
|
|
71
|
+
const decrement = (0, import_react.useCallback)(() => setLevel(level - 1), [level, setLevel]);
|
|
72
|
+
const reset = (0, import_react.useCallback)(() => setLevel(DEFAULT_LEVEL), [setLevel]);
|
|
73
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(FontSizeContext.Provider, { value: {
|
|
74
|
+
level,
|
|
75
|
+
isMin: level <= MIN_LEVEL,
|
|
76
|
+
isMax: level >= MAX_LEVEL,
|
|
77
|
+
increment,
|
|
78
|
+
decrement,
|
|
79
|
+
reset,
|
|
80
|
+
setLevel
|
|
81
|
+
}, children });
|
|
82
|
+
}
|
|
83
|
+
function useFontSize() {
|
|
84
|
+
const ctx = (0, import_react.useContext)(FontSizeContext);
|
|
85
|
+
if (!ctx) {
|
|
86
|
+
throw new Error("[font-resizer] useFontSize must be used inside <FontSizeProvider>");
|
|
87
|
+
}
|
|
88
|
+
return ctx;
|
|
89
|
+
}
|
|
90
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
91
|
+
0 && (module.exports = {
|
|
92
|
+
CSS_VAR_NAME,
|
|
93
|
+
DEFAULT_LEVEL,
|
|
94
|
+
FontSizeProvider,
|
|
95
|
+
MAX_LEVEL,
|
|
96
|
+
MIN_LEVEL,
|
|
97
|
+
SCALE_MAP,
|
|
98
|
+
useFontSize
|
|
99
|
+
});
|
package/dist/index.mjs
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
// FontSizeContext.tsx
|
|
2
|
+
import {
|
|
3
|
+
createContext,
|
|
4
|
+
useContext,
|
|
5
|
+
useState,
|
|
6
|
+
useCallback,
|
|
7
|
+
useEffect
|
|
8
|
+
} from "react";
|
|
9
|
+
|
|
10
|
+
// constants.ts
|
|
11
|
+
var SCALE_RATIO = 1.25;
|
|
12
|
+
var DEFAULT_LEVEL = 2;
|
|
13
|
+
var MIN_LEVEL = 1;
|
|
14
|
+
var MAX_LEVEL = 5;
|
|
15
|
+
var SCALE_MAP = {
|
|
16
|
+
1: parseFloat(Math.pow(SCALE_RATIO, -1).toFixed(3)),
|
|
17
|
+
// 0.800
|
|
18
|
+
2: 1,
|
|
19
|
+
// 1.000
|
|
20
|
+
3: parseFloat(Math.pow(SCALE_RATIO, 1).toFixed(3)),
|
|
21
|
+
// 1.250
|
|
22
|
+
4: parseFloat(Math.pow(SCALE_RATIO, 2).toFixed(3)),
|
|
23
|
+
// 1.563
|
|
24
|
+
5: parseFloat(Math.pow(SCALE_RATIO, 3).toFixed(3))
|
|
25
|
+
// 1.953
|
|
26
|
+
};
|
|
27
|
+
var CSS_VAR_NAME = "--content-text-scale";
|
|
28
|
+
|
|
29
|
+
// FontSizeContext.tsx
|
|
30
|
+
import { jsx } from "react/jsx-runtime";
|
|
31
|
+
var FontSizeContext = createContext(void 0);
|
|
32
|
+
function clamp(value, min, max) {
|
|
33
|
+
return Math.min(max, Math.max(min, value));
|
|
34
|
+
}
|
|
35
|
+
function FontSizeProvider({ children }) {
|
|
36
|
+
const [level, setLevelState] = useState(DEFAULT_LEVEL);
|
|
37
|
+
useEffect(() => {
|
|
38
|
+
const scale = SCALE_MAP[level];
|
|
39
|
+
document.documentElement.style.setProperty(CSS_VAR_NAME, String(scale));
|
|
40
|
+
}, [level]);
|
|
41
|
+
const setLevel = useCallback((next) => {
|
|
42
|
+
setLevelState(clamp(next, MIN_LEVEL, MAX_LEVEL));
|
|
43
|
+
}, []);
|
|
44
|
+
const increment = useCallback(() => setLevel(level + 1), [level, setLevel]);
|
|
45
|
+
const decrement = useCallback(() => setLevel(level - 1), [level, setLevel]);
|
|
46
|
+
const reset = useCallback(() => setLevel(DEFAULT_LEVEL), [setLevel]);
|
|
47
|
+
return /* @__PURE__ */ jsx(FontSizeContext.Provider, { value: {
|
|
48
|
+
level,
|
|
49
|
+
isMin: level <= MIN_LEVEL,
|
|
50
|
+
isMax: level >= MAX_LEVEL,
|
|
51
|
+
increment,
|
|
52
|
+
decrement,
|
|
53
|
+
reset,
|
|
54
|
+
setLevel
|
|
55
|
+
}, children });
|
|
56
|
+
}
|
|
57
|
+
function useFontSize() {
|
|
58
|
+
const ctx = useContext(FontSizeContext);
|
|
59
|
+
if (!ctx) {
|
|
60
|
+
throw new Error("[font-resizer] useFontSize must be used inside <FontSizeProvider>");
|
|
61
|
+
}
|
|
62
|
+
return ctx;
|
|
63
|
+
}
|
|
64
|
+
export {
|
|
65
|
+
CSS_VAR_NAME,
|
|
66
|
+
DEFAULT_LEVEL,
|
|
67
|
+
FontSizeProvider,
|
|
68
|
+
MAX_LEVEL,
|
|
69
|
+
MIN_LEVEL,
|
|
70
|
+
SCALE_MAP,
|
|
71
|
+
useFontSize
|
|
72
|
+
};
|
package/package.json
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "qcm-font-resizer",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Accessibility font scaling library for React/Next.js WebView",
|
|
5
|
+
"main": "./dist/index.js",
|
|
6
|
+
"module": "./dist/index.mjs",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"import": "./dist/index.mjs",
|
|
12
|
+
"require": "./dist/index.js"
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
"files": ["dist"],
|
|
16
|
+
"scripts": {
|
|
17
|
+
"build": "tsup",
|
|
18
|
+
"dev": "tsup --watch",
|
|
19
|
+
"prepublishOnly": "npm run build"
|
|
20
|
+
},
|
|
21
|
+
"devDependencies": {
|
|
22
|
+
"tsup": "^8.0.0",
|
|
23
|
+
"typescript": "^5.0.0"
|
|
24
|
+
},
|
|
25
|
+
"peerDependencies": {
|
|
26
|
+
"react": ">=18",
|
|
27
|
+
"next": ">=14"
|
|
28
|
+
},
|
|
29
|
+
"keywords": ["accessibility", "font-size", "webview", "react", "nextjs"],
|
|
30
|
+
"license": "MIT"
|
|
31
|
+
}
|