@contractspec/lib.accessibility 1.57.0 → 1.58.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.
@@ -0,0 +1 @@
1
+ // @bun
@@ -1,7 +1,2 @@
1
- import * as react_jsx_runtime0 from "react/jsx-runtime";
2
-
3
- //#region src/next-route-announcer.d.ts
4
- declare function NextRouteAnnouncer(): react_jsx_runtime0.JSX.Element;
5
- //#endregion
6
- export { NextRouteAnnouncer };
1
+ export declare function NextRouteAnnouncer(): import("react/jsx-runtime").JSX.Element;
7
2
  //# sourceMappingURL=next-route-announcer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"next-route-announcer.d.ts","names":[],"sources":["../src/next-route-announcer.tsx"],"mappings":";;;iBAIgB,kBAAA,CAAA,GAAkB,kBAAA,CAAA,GAAA,CAAA,OAAA"}
1
+ {"version":3,"file":"next-route-announcer.d.ts","sourceRoot":"","sources":["../src/next-route-announcer.tsx"],"names":[],"mappings":"AAIA,wBAAgB,kBAAkB,4CAgBjC"}
@@ -1,24 +1,24 @@
1
- 'use client';
2
-
3
- import * as React$1 from "react";
4
- import { jsx } from "react/jsx-runtime";
1
+ // @bun
2
+ // src/next-route-announcer.tsx
3
+ import * as React from "react";
5
4
  import { usePathname } from "next/navigation";
6
-
7
- //#region src/next-route-announcer.tsx
5
+ import { jsxDEV } from "react/jsx-dev-runtime";
6
+ "use client";
8
7
  function NextRouteAnnouncer() {
9
- const pathname = usePathname();
10
- const [message, setMessage] = React$1.useState("");
11
- React$1.useEffect(() => {
12
- if (typeof document !== "undefined") setMessage(document.title || pathname || "");
13
- }, [pathname]);
14
- return /* @__PURE__ */ jsx("div", {
15
- "aria-live": "polite",
16
- "aria-atomic": "true",
17
- className: "sr-only",
18
- children: message
19
- });
8
+ const pathname = usePathname();
9
+ const [message, setMessage] = React.useState("");
10
+ React.useEffect(() => {
11
+ if (typeof document !== "undefined") {
12
+ setMessage(document.title || pathname || "");
13
+ }
14
+ }, [pathname]);
15
+ return /* @__PURE__ */ jsxDEV("div", {
16
+ "aria-live": "polite",
17
+ "aria-atomic": "true",
18
+ className: "sr-only",
19
+ children: message
20
+ }, undefined, false, undefined, this);
20
21
  }
21
-
22
- //#endregion
23
- export { NextRouteAnnouncer };
24
- //# sourceMappingURL=next-route-announcer.js.map
22
+ export {
23
+ NextRouteAnnouncer
24
+ };
@@ -1,36 +1,30 @@
1
- import React from "react";
2
- import * as react_jsx_runtime0 from "react/jsx-runtime";
3
-
4
- //#region src/preferences.d.ts
5
- type TextSize = 's' | 'm' | 'l' | 'xl';
6
- type TextSpacing = 'normal' | 'increased';
7
- type LineHeight = 'normal' | 'increased';
8
- type UnderlineLinks = boolean;
9
- type FocusRing = 'normal' | 'thick';
10
- type ReduceMotion = 'system' | 'reduce' | 'no-preference';
11
- type HighContrast = boolean;
12
- type DyslexiaFont = boolean;
13
- interface AccessibilityPreferences {
14
- textSize: TextSize;
15
- textSpacing: TextSpacing;
16
- lineHeight: LineHeight;
17
- underlineLinks: UnderlineLinks;
18
- focusRing: FocusRing;
19
- reduceMotion: ReduceMotion;
20
- highContrast: HighContrast;
21
- dyslexiaFont: DyslexiaFont;
1
+ import React from 'react';
2
+ export type TextSize = 's' | 'm' | 'l' | 'xl';
3
+ export type TextSpacing = 'normal' | 'increased';
4
+ export type LineHeight = 'normal' | 'increased';
5
+ export type UnderlineLinks = boolean;
6
+ export type FocusRing = 'normal' | 'thick';
7
+ export type ReduceMotion = 'system' | 'reduce' | 'no-preference';
8
+ export type HighContrast = boolean;
9
+ export type DyslexiaFont = boolean;
10
+ export interface AccessibilityPreferences {
11
+ textSize: TextSize;
12
+ textSpacing: TextSpacing;
13
+ lineHeight: LineHeight;
14
+ underlineLinks: UnderlineLinks;
15
+ focusRing: FocusRing;
16
+ reduceMotion: ReduceMotion;
17
+ highContrast: HighContrast;
18
+ dyslexiaFont: DyslexiaFont;
22
19
  }
23
20
  interface PreferencesContextValue {
24
- preferences: AccessibilityPreferences;
25
- setPreferences: (updater: Partial<AccessibilityPreferences> | ((p: AccessibilityPreferences) => AccessibilityPreferences)) => void;
21
+ preferences: AccessibilityPreferences;
22
+ setPreferences: (updater: Partial<AccessibilityPreferences> | ((p: AccessibilityPreferences) => AccessibilityPreferences)) => void;
26
23
  }
27
- declare function useA11YPreferences(): PreferencesContextValue;
28
- declare function A11YPreferencesProvider({
29
- children
30
- }: {
31
- children: React.ReactNode;
32
- }): react_jsx_runtime0.JSX.Element;
33
- declare function a11yRootClassName(): string;
34
- //#endregion
35
- export { A11YPreferencesProvider, AccessibilityPreferences, DyslexiaFont, FocusRing, HighContrast, LineHeight, ReduceMotion, TextSize, TextSpacing, UnderlineLinks, a11yRootClassName, useA11YPreferences };
24
+ export declare function useA11YPreferences(): PreferencesContextValue;
25
+ export declare function A11YPreferencesProvider({ children, }: {
26
+ children: React.ReactNode;
27
+ }): import("react/jsx-runtime").JSX.Element;
28
+ export declare function a11yRootClassName(): string;
29
+ export {};
36
30
  //# sourceMappingURL=preferences.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"preferences.d.ts","names":[],"sources":["../src/preferences.tsx"],"mappings":";;;;KAIY,QAAA;AAAA,KACA,WAAA;AAAA,KACA,UAAA;AAAA,KACA,cAAA;AAAA,KACA,SAAA;AAAA,KACA,YAAA;AAAA,KACA,YAAA;AAAA,KACA,YAAA;AAAA,UAEK,wBAAA;EACf,QAAA,EAAU,QAAA;EACV,WAAA,EAAa,WAAA;EACb,UAAA,EAAY,UAAA;EACZ,cAAA,EAAgB,cAAA;EAChB,SAAA,EAAW,SAAA;EACX,YAAA,EAAc,YAAA;EACd,YAAA,EAAc,YAAA;EACd,YAAA,EAAc,YAAA;AAAA;AAAA,UAuHN,uBAAA;EACR,WAAA,EAAa,wBAAA;EACb,cAAA,GACE,OAAA,EACI,OAAA,CAAQ,wBAAA,MACN,CAAA,EAAG,wBAAA,KAA6B,wBAAA;AAAA;AAAA,iBAQ1B,kBAAA,CAAA,GAAkB,uBAAA;AAAA,iBASlB,uBAAA,CAAA;EACd;AAAA;EAEA,QAAA,EAAU,KAAA,CAAM,SAAA;AAAA,IACjB,kBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,iBA+De,iBAAA,CAAA"}
1
+ {"version":3,"file":"preferences.d.ts","sourceRoot":"","sources":["../src/preferences.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,MAAM,QAAQ,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC;AAC9C,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,WAAW,CAAC;AACjD,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,WAAW,CAAC;AAChD,MAAM,MAAM,cAAc,GAAG,OAAO,CAAC;AACrC,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAC;AAC3C,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,QAAQ,GAAG,eAAe,CAAC;AACjE,MAAM,MAAM,YAAY,GAAG,OAAO,CAAC;AACnC,MAAM,MAAM,YAAY,GAAG,OAAO,CAAC;AAEnC,MAAM,WAAW,wBAAwB;IACvC,QAAQ,EAAE,QAAQ,CAAC;IACnB,WAAW,EAAE,WAAW,CAAC;IACzB,UAAU,EAAE,UAAU,CAAC;IACvB,cAAc,EAAE,cAAc,CAAC;IAC/B,SAAS,EAAE,SAAS,CAAC;IACrB,YAAY,EAAE,YAAY,CAAC;IAC3B,YAAY,EAAE,YAAY,CAAC;IAC3B,YAAY,EAAE,YAAY,CAAC;CAC5B;AAsHD,UAAU,uBAAuB;IAC/B,WAAW,EAAE,wBAAwB,CAAC;IACtC,cAAc,EAAE,CACd,OAAO,EACH,OAAO,CAAC,wBAAwB,CAAC,GACjC,CAAC,CAAC,CAAC,EAAE,wBAAwB,KAAK,wBAAwB,CAAC,KAC5D,IAAI,CAAC;CACX;AAMD,wBAAgB,kBAAkB,4BAOjC;AAED,wBAAgB,uBAAuB,CAAC,EACtC,QAAQ,GACT,EAAE;IACD,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B,2CA4DA;AAGD,wBAAgB,iBAAiB,WAEhC"}
@@ -1,120 +1,133 @@
1
- 'use client';
2
-
1
+ // @bun
2
+ // src/preferences.tsx
3
3
  import React from "react";
4
- import { jsxs } from "react/jsx-runtime";
5
-
6
- //#region src/preferences.tsx
7
- const DEFAULT_PREFERENCES = {
8
- textSize: "m",
9
- textSpacing: "normal",
10
- lineHeight: "normal",
11
- underlineLinks: false,
12
- focusRing: "normal",
13
- reduceMotion: "system",
14
- highContrast: false,
15
- dyslexiaFont: false
4
+ import { jsxDEV } from "react/jsx-dev-runtime";
5
+ "use client";
6
+ var DEFAULT_PREFERENCES = {
7
+ textSize: "m",
8
+ textSpacing: "normal",
9
+ lineHeight: "normal",
10
+ underlineLinks: false,
11
+ focusRing: "normal",
12
+ reduceMotion: "system",
13
+ highContrast: false,
14
+ dyslexiaFont: false
16
15
  };
17
- const STORAGE_KEY = "a11y:preferences:v1";
16
+ var STORAGE_KEY = "a11y:preferences:v1";
18
17
  function getStoredPreferences() {
19
- try {
20
- const raw = typeof window !== "undefined" ? window.localStorage.getItem(STORAGE_KEY) : null;
21
- if (!raw) return null;
22
- const parsed = JSON.parse(raw);
23
- return {
24
- ...DEFAULT_PREFERENCES,
25
- ...parsed
26
- };
27
- } catch {
28
- return null;
29
- }
18
+ try {
19
+ const raw = typeof window !== "undefined" ? window.localStorage.getItem(STORAGE_KEY) : null;
20
+ if (!raw)
21
+ return null;
22
+ const parsed = JSON.parse(raw);
23
+ return { ...DEFAULT_PREFERENCES, ...parsed };
24
+ } catch {
25
+ return null;
26
+ }
30
27
  }
31
28
  function savePreferences(prefs) {
32
- try {
33
- if (typeof window !== "undefined") window.localStorage.setItem(STORAGE_KEY, JSON.stringify(prefs));
34
- } catch {}
29
+ try {
30
+ if (typeof window !== "undefined") {
31
+ window.localStorage.setItem(STORAGE_KEY, JSON.stringify(prefs));
32
+ }
33
+ } catch {}
35
34
  }
36
35
  function applyCssVariables(prefs) {
37
- if (typeof document === "undefined") return;
38
- const root = document.documentElement;
39
- const body = document.body;
40
- root.style.setProperty("--a11y-text-scale", {
41
- s: "0.95",
42
- m: "1",
43
- l: "1.1",
44
- xl: "1.25"
45
- }[prefs.textSize]);
46
- const targetMin = prefs.textSize === "l" || prefs.textSize === "xl" ? "44px" : "0px";
47
- root.style.setProperty("--a11y-target-min", targetMin);
48
- root.style.setProperty("--a11y-letter-spacing", prefs.textSpacing === "increased" ? "0.12em" : "normal");
49
- root.style.setProperty("--a11y-word-spacing", prefs.textSpacing === "increased" ? "0.16em" : "normal");
50
- root.style.setProperty("--a11y-line-height", prefs.lineHeight === "increased" ? "1.6" : "1.5");
51
- root.style.setProperty("--a11y-underline-links", prefs.underlineLinks ? "underline" : "revert");
52
- root.style.setProperty("--a11y-focus-ring-width", prefs.focusRing === "thick" ? "4px" : "2px");
53
- root.style.setProperty("--a11y-reduce-motion", prefs.reduceMotion);
54
- root.style.setProperty("--a11y-contrast-mode", prefs.highContrast ? "high" : "normal");
55
- if (prefs.highContrast) root.setAttribute("data-contrast", "high");
56
- else root.removeAttribute("data-contrast");
57
- root.style.setProperty("--a11y-font-family-alt-enabled", prefs.dyslexiaFont ? "1" : "0");
58
- if (body) {
59
- if (prefs.textSpacing === "increased") {
60
- body.style.letterSpacing = "0.12em";
61
- body.style.wordSpacing = "0.16em";
62
- } else {
63
- body.style.letterSpacing = "";
64
- body.style.wordSpacing = "";
65
- }
66
- body.style.lineHeight = prefs.lineHeight === "increased" ? "1.6" : "";
67
- }
36
+ if (typeof document === "undefined")
37
+ return;
38
+ const root = document.documentElement;
39
+ const body = document.body;
40
+ const sizeMap = {
41
+ s: "0.95",
42
+ m: "1",
43
+ l: "1.1",
44
+ xl: "1.25"
45
+ };
46
+ root.style.setProperty("--a11y-text-scale", sizeMap[prefs.textSize]);
47
+ const targetMin = prefs.textSize === "l" || prefs.textSize === "xl" ? "44px" : "0px";
48
+ root.style.setProperty("--a11y-target-min", targetMin);
49
+ root.style.setProperty("--a11y-letter-spacing", prefs.textSpacing === "increased" ? "0.12em" : "normal");
50
+ root.style.setProperty("--a11y-word-spacing", prefs.textSpacing === "increased" ? "0.16em" : "normal");
51
+ root.style.setProperty("--a11y-line-height", prefs.lineHeight === "increased" ? "1.6" : "1.5");
52
+ root.style.setProperty("--a11y-underline-links", prefs.underlineLinks ? "underline" : "revert");
53
+ root.style.setProperty("--a11y-focus-ring-width", prefs.focusRing === "thick" ? "4px" : "2px");
54
+ root.style.setProperty("--a11y-reduce-motion", prefs.reduceMotion);
55
+ root.style.setProperty("--a11y-contrast-mode", prefs.highContrast ? "high" : "normal");
56
+ if (prefs.highContrast) {
57
+ root.setAttribute("data-contrast", "high");
58
+ } else {
59
+ root.removeAttribute("data-contrast");
60
+ }
61
+ root.style.setProperty("--a11y-font-family-alt-enabled", prefs.dyslexiaFont ? "1" : "0");
62
+ if (body) {
63
+ if (prefs.textSpacing === "increased") {
64
+ body.style.letterSpacing = "0.12em";
65
+ body.style.wordSpacing = "0.16em";
66
+ } else {
67
+ body.style.letterSpacing = "";
68
+ body.style.wordSpacing = "";
69
+ }
70
+ body.style.lineHeight = prefs.lineHeight === "increased" ? "1.6" : "";
71
+ }
68
72
  }
69
- const PreferencesContext = React.createContext(null);
73
+ var PreferencesContext = React.createContext(null);
70
74
  function useA11YPreferences() {
71
- const ctx = React.useContext(PreferencesContext);
72
- if (!ctx) throw new Error("useA11YPreferences must be used within A11YPreferencesProvider");
73
- return ctx;
75
+ const ctx = React.useContext(PreferencesContext);
76
+ if (!ctx)
77
+ throw new Error("useA11YPreferences must be used within A11YPreferencesProvider");
78
+ return ctx;
74
79
  }
75
- function A11YPreferencesProvider({ children }) {
76
- const [preferences, setPreferencesState] = React.useState(DEFAULT_PREFERENCES);
77
- const [hydrated, setHydrated] = React.useState(false);
78
- React.useEffect(() => {
79
- const next = getStoredPreferences() ?? DEFAULT_PREFERENCES;
80
- setPreferencesState(next);
81
- setHydrated(true);
82
- applyCssVariables(next);
83
- }, []);
84
- const setPreferences = React.useCallback((updater) => {
85
- setPreferencesState((prev) => {
86
- const next = typeof updater === "function" ? updater(prev) : {
87
- ...prev,
88
- ...updater
89
- };
90
- savePreferences(next);
91
- applyCssVariables(next);
92
- try {
93
- if (typeof window !== "undefined") {
94
- const changed = {};
95
- for (const key of Object.keys(next)) if (next[key] !== prev[key]) changed[key] = next[key];
96
- window.dispatchEvent(new CustomEvent("a11y:pref_changed", { detail: {
97
- previous: prev,
98
- current: next,
99
- changed
100
- } }));
101
- }
102
- } catch {}
103
- return next;
104
- });
105
- }, []);
106
- return /* @__PURE__ */ jsxs(PreferencesContext, {
107
- value: React.useMemo(() => ({
108
- preferences,
109
- setPreferences
110
- }), [preferences, setPreferences]),
111
- children: [children, !hydrated ? null : null]
112
- });
80
+ function A11YPreferencesProvider({
81
+ children
82
+ }) {
83
+ const [preferences, setPreferencesState] = React.useState(DEFAULT_PREFERENCES);
84
+ const [hydrated, setHydrated] = React.useState(false);
85
+ React.useEffect(() => {
86
+ const stored = getStoredPreferences();
87
+ const next = stored ?? DEFAULT_PREFERENCES;
88
+ setPreferencesState(next);
89
+ setHydrated(true);
90
+ applyCssVariables(next);
91
+ }, []);
92
+ const setPreferences = React.useCallback((updater) => {
93
+ setPreferencesState((prev) => {
94
+ const next = typeof updater === "function" ? updater(prev) : { ...prev, ...updater };
95
+ savePreferences(next);
96
+ applyCssVariables(next);
97
+ try {
98
+ if (typeof window !== "undefined") {
99
+ const changed = {};
100
+ for (const key of Object.keys(next)) {
101
+ if (next[key] !== prev[key]) {
102
+ changed[key] = next[key];
103
+ }
104
+ }
105
+ window.dispatchEvent(new CustomEvent("a11y:pref_changed", {
106
+ detail: {
107
+ previous: prev,
108
+ current: next,
109
+ changed
110
+ }
111
+ }));
112
+ }
113
+ } catch {}
114
+ return next;
115
+ });
116
+ }, []);
117
+ const value = React.useMemo(() => ({ preferences, setPreferences }), [preferences, setPreferences]);
118
+ return /* @__PURE__ */ jsxDEV(PreferencesContext, {
119
+ value,
120
+ children: [
121
+ children,
122
+ !hydrated ? null : null
123
+ ]
124
+ }, undefined, true, undefined, this);
113
125
  }
114
126
  function a11yRootClassName() {
115
- return "a11y-root";
127
+ return "a11y-root";
116
128
  }
117
-
118
- //#endregion
119
- export { A11YPreferencesProvider, a11yRootClassName, useA11YPreferences };
120
- //# sourceMappingURL=preferences.js.map
129
+ export {
130
+ useA11YPreferences,
131
+ a11yRootClassName,
132
+ A11YPreferencesProvider
133
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@contractspec/lib.accessibility",
3
- "version": "1.57.0",
3
+ "version": "1.58.0",
4
4
  "description": "WCAG compliance utilities and validators",
5
5
  "keywords": [
6
6
  "contractspec",
@@ -13,26 +13,27 @@
13
13
  "scripts": {
14
14
  "publish:pkg": "bun publish --tolerate-republish --ignore-scripts --verbose",
15
15
  "publish:pkg:canary": "bun publish:pkg --tag canary",
16
- "build": "bun build:types && bun build:bundle",
17
- "build:bundle": "tsdown",
18
- "build:types": "tsc --noEmit",
19
- "dev": "bun build:bundle --watch",
16
+ "build": "bun run prebuild && bun run build:bundle && bun run build:types",
17
+ "build:bundle": "contractspec-bun-build transpile",
18
+ "build:types": "contractspec-bun-build types",
19
+ "dev": "contractspec-bun-build dev",
20
20
  "clean": "rimraf dist .turbo",
21
21
  "lint": "bun lint:fix",
22
22
  "lint:fix": "eslint src --fix",
23
- "lint:check": "eslint src"
23
+ "lint:check": "eslint src",
24
+ "prebuild": "contractspec-bun-build prebuild",
25
+ "typecheck": "tsc --noEmit"
24
26
  },
25
27
  "dependencies": {
26
- "@contractspec/lib.design-system": "1.57.0",
27
- "@contractspec/lib.ui-kit": "1.57.0",
28
- "@contractspec/lib.ui-kit-web": "1.57.0"
28
+ "@contractspec/lib.design-system": "1.58.0",
29
+ "@contractspec/lib.ui-kit": "1.58.0",
30
+ "@contractspec/lib.ui-kit-web": "1.58.0"
29
31
  },
30
32
  "devDependencies": {
31
- "@contractspec/tool.tsdown": "1.57.0",
32
- "@contractspec/tool.typescript": "1.57.0",
33
+ "@contractspec/tool.typescript": "1.58.0",
33
34
  "react-native-css": "^3.0.0",
34
- "tsdown": "^0.20.3",
35
- "typescript": "^5.9.3"
35
+ "typescript": "^5.9.3",
36
+ "@contractspec/tool.bun": "1.57.0"
36
37
  },
37
38
  "peerDependencies": {
38
39
  "react": "19.2.4",
@@ -45,12 +46,12 @@
45
46
  "./dist/*.css"
46
47
  ],
47
48
  "exports": {
48
- ".": "./dist/index.js",
49
- "./AccessibilityPanel": "./dist/AccessibilityPanel.js",
50
- "./AccessibilityProvider": "./dist/AccessibilityProvider.js",
51
- "./next-route-announcer": "./dist/next-route-announcer.js",
52
- "./preferences": "./dist/preferences.js",
53
- "./*": "./*"
49
+ ".": "./src/index.ts",
50
+ "./AccessibilityPanel": "./src/AccessibilityPanel.tsx",
51
+ "./AccessibilityProvider": "./src/AccessibilityProvider.tsx",
52
+ "./nativewind-env.d": "./src/nativewind-env.d.ts",
53
+ "./next-route-announcer": "./src/next-route-announcer.tsx",
54
+ "./preferences": "./src/preferences.tsx"
54
55
  },
55
56
  "files": [
56
57
  "dist",
@@ -59,12 +60,42 @@
59
60
  "publishConfig": {
60
61
  "access": "public",
61
62
  "exports": {
62
- ".": "./dist/index.js",
63
- "./AccessibilityPanel": "./dist/AccessibilityPanel.js",
64
- "./AccessibilityProvider": "./dist/AccessibilityProvider.js",
65
- "./next-route-announcer": "./dist/next-route-announcer.js",
66
- "./preferences": "./dist/preferences.js",
67
- "./*": "./*"
63
+ ".": {
64
+ "types": "./dist/index.d.ts",
65
+ "bun": "./dist/index.js",
66
+ "browser": "./dist/browser/index.js",
67
+ "default": "./dist/index.js"
68
+ },
69
+ "./AccessibilityPanel": {
70
+ "types": "./dist/AccessibilityPanel.d.ts",
71
+ "bun": "./dist/AccessibilityPanel.js",
72
+ "browser": "./dist/browser/AccessibilityPanel.js",
73
+ "default": "./dist/AccessibilityPanel.js"
74
+ },
75
+ "./AccessibilityProvider": {
76
+ "types": "./dist/AccessibilityProvider.d.ts",
77
+ "bun": "./dist/AccessibilityProvider.js",
78
+ "browser": "./dist/browser/AccessibilityProvider.js",
79
+ "default": "./dist/AccessibilityProvider.js"
80
+ },
81
+ "./nativewind-env.d": {
82
+ "types": "./dist/nativewind-env.d.d.ts",
83
+ "bun": "./dist/nativewind-env.d.js",
84
+ "browser": "./dist/browser/nativewind-env.d.js",
85
+ "default": "./dist/nativewind-env.d.js"
86
+ },
87
+ "./next-route-announcer": {
88
+ "types": "./dist/next-route-announcer.d.ts",
89
+ "bun": "./dist/next-route-announcer.js",
90
+ "browser": "./dist/browser/next-route-announcer.js",
91
+ "default": "./dist/next-route-announcer.js"
92
+ },
93
+ "./preferences": {
94
+ "types": "./dist/preferences.d.ts",
95
+ "bun": "./dist/preferences.js",
96
+ "browser": "./dist/browser/preferences.js",
97
+ "default": "./dist/preferences.js"
98
+ }
68
99
  },
69
100
  "registry": "https://registry.npmjs.org/"
70
101
  },
@@ -1 +0,0 @@
1
- {"version":3,"file":"AccessibilityPanel.js","names":[],"sources":["../src/AccessibilityPanel.tsx"],"sourcesContent":["'use client';\n\nimport React from 'react';\nimport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n} from '@contractspec/lib.ui-kit-web/ui/dialog';\nimport { Button } from '@contractspec/lib.design-system';\nimport { Switch } from '@contractspec/lib.ui-kit-web/ui/switch';\nimport { Label } from '@contractspec/lib.ui-kit-web/ui/label';\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@contractspec/lib.ui-kit-web/ui/select';\nimport {\n type ReduceMotion,\n type TextSize,\n useA11YPreferences,\n} from './preferences';\nimport { cn } from '@contractspec/lib.ui-kit-web/ui/utils';\n\nexport function AccessibilityPanel({ className }: { className?: string }) {\n const { preferences, setPreferences } = useA11YPreferences();\n\n return (\n <Dialog>\n <DialogTrigger asChild>\n <Button variant=\"outline\" aria-haspopup=\"dialog\">\n Accessibility\n </Button>\n </DialogTrigger>\n <DialogPortal>\n <DialogOverlay className=\"fixed inset-0 z-50 bg-black/40\" />\n <DialogContent\n className={cn(\n // 'fixed right-0 top-0 z-50 h-full w-full max-w-md bg-background p-6 shadow-lg outline-hidden focus-visible:ring-2 focus-visible:ring-ring',\n 'bg-background focus-visible:ring-ring max-w-md p-6 shadow-lg outline-hidden focus-visible:ring-2',\n className\n )}\n aria-describedby=\"a11y-panel-desc\"\n >\n <DialogTitle className=\"text-lg font-semibold\">\n Accessibility settings\n </DialogTitle>\n <p id=\"a11y-panel-desc\" className=\"text-muted-foreground text-sm\">\n Adjust text size, spacing, focus and motion to suit your needs.\n </p>\n\n <div className=\"mt-6 space-y-6\">\n <div className=\"space-y-2\">\n <Label>Text size</Label>\n <Select\n value={preferences.textSize}\n onValueChange={(v) =>\n setPreferences({ textSize: v as TextSize })\n }\n >\n <SelectTrigger aria-label=\"Text size\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"s\">Small</SelectItem>\n <SelectItem value=\"m\">Medium</SelectItem>\n <SelectItem value=\"l\">Large</SelectItem>\n <SelectItem value=\"xl\">Extra Large</SelectItem>\n </SelectContent>\n </Select>\n </div>\n\n <div className=\"flex items-center justify-between\">\n <Label htmlFor=\"text-spacing\">\n Increase text spacing (WCAG 1.4.12)\n </Label>\n <Switch\n id=\"text-spacing\"\n checked={preferences.textSpacing === 'increased'}\n onCheckedChange={(c) =>\n setPreferences({ textSpacing: c ? 'increased' : 'normal' })\n }\n />\n </div>\n\n <div className=\"flex items-center justify-between\">\n <Label htmlFor=\"line-height\">Increase line height</Label>\n <Switch\n id=\"line-height\"\n checked={preferences.lineHeight === 'increased'}\n onCheckedChange={(c) =>\n setPreferences({ lineHeight: c ? 'increased' : 'normal' })\n }\n />\n </div>\n\n <div className=\"flex items-center justify-between\">\n <Label htmlFor=\"underline-links\">Always underline links</Label>\n <Switch\n id=\"underline-links\"\n checked={preferences.underlineLinks}\n onCheckedChange={(c) => setPreferences({ underlineLinks: c })}\n />\n </div>\n\n <div className=\"flex items-center justify-between\">\n <Label htmlFor=\"focus-ring\">Thick focus ring</Label>\n <Switch\n id=\"focus-ring\"\n checked={preferences.focusRing === 'thick'}\n onCheckedChange={(c) =>\n setPreferences({ focusRing: c ? 'thick' : 'normal' })\n }\n />\n </div>\n\n <div className=\"space-y-2\">\n <Label>Motion</Label>\n <Select\n value={preferences.reduceMotion}\n onValueChange={(v) =>\n setPreferences({ reduceMotion: v as ReduceMotion })\n }\n >\n <SelectTrigger aria-label=\"Motion preferences\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"system\">Follow system</SelectItem>\n <SelectItem value=\"reduce\">Reduce motion</SelectItem>\n <SelectItem value=\"no-preference\">Allow motion</SelectItem>\n </SelectContent>\n </Select>\n </div>\n\n <div className=\"flex items-center justify-between\">\n <Label htmlFor=\"contrast\">High contrast</Label>\n <Switch\n id=\"contrast\"\n checked={preferences.highContrast}\n onCheckedChange={(c) => setPreferences({ highContrast: c })}\n />\n </div>\n\n <div className=\"flex items-center justify-between\">\n <Label htmlFor=\"dyslexia-font\">Dyslexia-friendly font</Label>\n <Switch\n id=\"dyslexia-font\"\n checked={preferences.dyslexiaFont}\n onCheckedChange={(c) => setPreferences({ dyslexiaFont: c })}\n />\n </div>\n </div>\n\n <div className=\"mt-8 flex justify-end gap-2\">\n <DialogClose asChild>\n <Button variant=\"secondary\">Close</Button>\n </DialogClose>\n </div>\n </DialogContent>\n </DialogPortal>\n </Dialog>\n );\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"AccessibilityProvider.js","names":[],"sources":["../src/AccessibilityProvider.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { A11YPreferencesProvider } from './preferences';\nimport { SRLiveRegionProvider } from '@contractspec/lib.ui-kit-web/ui/live-region';\nimport { NextRouteAnnouncer } from './next-route-announcer';\nimport { SkipLink } from '@contractspec/lib.ui-kit-web/ui/skip-link';\n\nexport function AccessibilityProvider({\n children,\n skipTargetId = 'main',\n}: {\n children: React.ReactNode;\n skipTargetId?: string;\n}) {\n return (\n <A11YPreferencesProvider>\n <SRLiveRegionProvider>\n <SkipLink targetId={skipTargetId} />\n <NextRouteAnnouncer />\n {children}\n </SRLiveRegionProvider>\n </A11YPreferencesProvider>\n );\n}\n"],"mappings":";;;;;;;;;;AAQA,SAAgB,sBAAsB,EACpC,UACA,eAAe,UAId;AACD,QACE,oBAAC,qCACC,qBAAC;EACC,oBAAC,YAAS,UAAU,eAAgB;EACpC,oBAAC,uBAAqB;EACrB;KACoB,GACC"}
@@ -1 +0,0 @@
1
- export { };
@@ -1 +0,0 @@
1
- {"version":3,"file":"next-route-announcer.js","names":["React"],"sources":["../src/next-route-announcer.tsx"],"sourcesContent":["'use client';\nimport * as React from 'react';\nimport { usePathname } from 'next/navigation';\n\nexport function NextRouteAnnouncer() {\n const pathname = usePathname();\n const [message, setMessage] = React.useState('');\n\n React.useEffect(() => {\n // announce current document title whenever pathname changes\n if (typeof document !== 'undefined') {\n setMessage(document.title || pathname || '');\n }\n }, [pathname]);\n\n return (\n <div aria-live=\"polite\" aria-atomic=\"true\" className=\"sr-only\">\n {message}\n </div>\n );\n}\n"],"mappings":";;;;;;;AAIA,SAAgB,qBAAqB;CACnC,MAAM,WAAW,aAAa;CAC9B,MAAM,CAAC,SAAS,cAAcA,QAAM,SAAS,GAAG;AAEhD,SAAM,gBAAgB;AAEpB,MAAI,OAAO,aAAa,YACtB,YAAW,SAAS,SAAS,YAAY,GAAG;IAE7C,CAAC,SAAS,CAAC;AAEd,QACE,oBAAC;EAAI,aAAU;EAAS,eAAY;EAAO,WAAU;YAClD;GACG"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"preferences.js","names":[],"sources":["../src/preferences.tsx"],"sourcesContent":["'use client';\n\nimport React from 'react';\n\nexport type TextSize = 's' | 'm' | 'l' | 'xl';\nexport type TextSpacing = 'normal' | 'increased';\nexport type LineHeight = 'normal' | 'increased';\nexport type UnderlineLinks = boolean;\nexport type FocusRing = 'normal' | 'thick';\nexport type ReduceMotion = 'system' | 'reduce' | 'no-preference';\nexport type HighContrast = boolean;\nexport type DyslexiaFont = boolean;\n\nexport interface AccessibilityPreferences {\n textSize: TextSize;\n textSpacing: TextSpacing;\n lineHeight: LineHeight;\n underlineLinks: UnderlineLinks;\n focusRing: FocusRing;\n reduceMotion: ReduceMotion;\n highContrast: HighContrast;\n dyslexiaFont: DyslexiaFont;\n}\n\nconst DEFAULT_PREFERENCES: AccessibilityPreferences = {\n textSize: 'm',\n textSpacing: 'normal',\n lineHeight: 'normal',\n underlineLinks: false,\n focusRing: 'normal',\n reduceMotion: 'system',\n highContrast: false,\n dyslexiaFont: false,\n};\n\nconst STORAGE_KEY = 'a11y:preferences:v1';\n\nfunction getStoredPreferences(): AccessibilityPreferences | null {\n try {\n const raw =\n typeof window !== 'undefined'\n ? window.localStorage.getItem(STORAGE_KEY)\n : null;\n if (!raw) return null;\n const parsed = JSON.parse(raw);\n return { ...DEFAULT_PREFERENCES, ...parsed } as AccessibilityPreferences;\n } catch {\n return null;\n }\n}\n\nfunction savePreferences(prefs: AccessibilityPreferences) {\n try {\n if (typeof window !== 'undefined') {\n window.localStorage.setItem(STORAGE_KEY, JSON.stringify(prefs));\n }\n } catch {\n // ignore\n }\n}\n\nfunction applyCssVariables(prefs: AccessibilityPreferences) {\n if (typeof document === 'undefined') return;\n const root = document.documentElement;\n const body = document.body;\n // Type scale (base multiplier)\n const sizeMap: Record<TextSize, string> = {\n s: '0.95',\n m: '1',\n l: '1.1',\n xl: '1.25',\n };\n root.style.setProperty('--a11y-text-scale', sizeMap[prefs.textSize]);\n // Target size: increase on larger text choices\n const targetMin =\n prefs.textSize === 'l' || prefs.textSize === 'xl' ? '44px' : '0px';\n root.style.setProperty('--a11y-target-min', targetMin);\n\n // Spacing per WCAG 1.4.12\n root.style.setProperty(\n '--a11y-letter-spacing',\n prefs.textSpacing === 'increased' ? '0.12em' : 'normal'\n );\n root.style.setProperty(\n '--a11y-word-spacing',\n prefs.textSpacing === 'increased' ? '0.16em' : 'normal'\n );\n root.style.setProperty(\n '--a11y-line-height',\n prefs.lineHeight === 'increased' ? '1.6' : '1.5'\n );\n\n // Links\n root.style.setProperty(\n '--a11y-underline-links',\n // Use 'revert' so we don't override the site's default when disabled\n prefs.underlineLinks ? 'underline' : 'revert'\n );\n\n // Focus ring\n root.style.setProperty(\n '--a11y-focus-ring-width',\n prefs.focusRing === 'thick' ? '4px' : '2px'\n );\n\n // Reduce motion\n root.style.setProperty('--a11y-reduce-motion', prefs.reduceMotion);\n\n // Contrast\n root.style.setProperty(\n '--a11y-contrast-mode',\n prefs.highContrast ? 'high' : 'normal'\n );\n if (prefs.highContrast) {\n root.setAttribute('data-contrast', 'high');\n } else {\n root.removeAttribute('data-contrast');\n }\n\n // Dyslexia-friendly font (consumer should map to an available font family)\n root.style.setProperty(\n '--a11y-font-family-alt-enabled',\n prefs.dyslexiaFont ? '1' : '0'\n );\n\n // Inline fallbacks in case global CSS variables are not wired/included by the app bundler.\n // These properties are inheritable, so setting them on <body> yields broad coverage.\n if (body) {\n if (prefs.textSpacing === 'increased') {\n body.style.letterSpacing = '0.12em';\n body.style.wordSpacing = '0.16em';\n } else {\n body.style.letterSpacing = '';\n body.style.wordSpacing = '';\n }\n\n body.style.lineHeight = prefs.lineHeight === 'increased' ? '1.6' : '';\n }\n}\n\ninterface PreferencesContextValue {\n preferences: AccessibilityPreferences;\n setPreferences: (\n updater:\n | Partial<AccessibilityPreferences>\n | ((p: AccessibilityPreferences) => AccessibilityPreferences)\n ) => void;\n}\n\nconst PreferencesContext = React.createContext<PreferencesContextValue | null>(\n null\n);\n\nexport function useA11YPreferences() {\n const ctx = React.useContext(PreferencesContext);\n if (!ctx)\n throw new Error(\n 'useA11YPreferences must be used within A11YPreferencesProvider'\n );\n return ctx;\n}\n\nexport function A11YPreferencesProvider({\n children,\n}: {\n children: React.ReactNode;\n}) {\n const [preferences, setPreferencesState] =\n React.useState<AccessibilityPreferences>(DEFAULT_PREFERENCES);\n const [hydrated, setHydrated] = React.useState(false);\n\n React.useEffect(() => {\n const stored = getStoredPreferences();\n const next = stored ?? DEFAULT_PREFERENCES;\n setPreferencesState(next);\n setHydrated(true);\n applyCssVariables(next);\n }, []);\n\n const setPreferences = React.useCallback<\n PreferencesContextValue['setPreferences']\n >((updater) => {\n setPreferencesState((prev) => {\n const next =\n typeof updater === 'function' ? updater(prev) : { ...prev, ...updater };\n savePreferences(next);\n applyCssVariables(next);\n try {\n if (typeof window !== 'undefined') {\n const changed: Partial<AccessibilityPreferences> = {};\n for (const key of Object.keys(\n next\n ) as (keyof AccessibilityPreferences)[]) {\n if (next[key] !== prev[key]) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n changed[key] = next[key] as any;\n }\n }\n window.dispatchEvent(\n new CustomEvent('a11y:pref_changed', {\n detail: {\n previous: prev,\n current: next,\n changed,\n },\n })\n );\n }\n } catch {\n /* noop */\n }\n return next;\n });\n }, []);\n\n const value = React.useMemo(\n () => ({ preferences, setPreferences }),\n [preferences, setPreferences]\n );\n\n return (\n <PreferencesContext value={value}>\n {children}\n {!hydrated ? null : null}\n </PreferencesContext>\n );\n}\n\n// Helper to compute className additions that respect tokens (optional)\nexport function a11yRootClassName() {\n return 'a11y-root';\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"styles-C5GUMPoX.css","names":[],"sources":["../src/styles.css"],"sourcesContent":[":root {\n --a11y-text-scale: 1;\n --a11y-letter-spacing: normal;\n --a11y-word-spacing: normal;\n --a11y-line-height: 1.5;\n --a11y-underline-links: auto;\n --a11y-focus-ring-width: 2px;\n --a11y-reduce-motion: system;\n --a11y-contrast-mode: normal;\n --a11y-font-family-alt-enabled: 0;\n}\n\nhtml,\nbody {\n font-size: calc(16px * var(--a11y-text-scale));\n}\n\nbody,\np,\nli {\n letter-spacing: var(--a11y-letter-spacing);\n word-spacing: var(--a11y-word-spacing);\n line-height: var(--a11y-line-height);\n}\n\na {\n text-decoration: var(--a11y-underline-links);\n}\n\n:where(button, [role='button'], a, input, select, textarea) {\n outline-offset: 2px;\n min-height: var(--a11y-target-min, 0);\n min-width: var(--a11y-target-min, 0);\n}\n\n:where(:focus-visible) {\n outline: var(--a11y-focus-ring-width) solid currentColor;\n}\n\n/* High contrast mode surface example tokens (apps should map their colors) */\n:root[data-contrast='high'],\n:root[style*='--a11y-contrast-mode: high'] {\n /* Apps can read this signal to swap theme */\n}\n\n/* Dyslexia-friendly font: consumers should apply a font-family when enabled */\n:root[style*='--a11y-font-family-alt-enabled: 1'] body {\n font-family: var(--font-dyslexia, system-ui, sans-serif);\n}\n\n/* Respect reduced motion preference and explicit override */\n@media (prefers-reduced-motion: reduce) {\n :root[style*='--a11y-reduce-motion: system'] * {\n animation: none !important;\n transition: none !important;\n scroll-behavior: auto !important;\n }\n}\n:root[style*='--a11y-reduce-motion: reduce'] * {\n animation: none !important;\n transition: none !important;\n scroll-behavior: auto !important;\n}\n\n/* Explicit fallbacks for environments not honoring custom properties thoroughly */\nbody {\n /* If variables are missing, ensure readable defaults */\n letter-spacing: var(--a11y-letter-spacing, normal);\n word-spacing: var(--a11y-word-spacing, normal);\n line-height: var(--a11y-line-height, 1.5);\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA"}
File without changes