cbrowser 18.40.0 → 18.41.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/visual/cognitive-models.d.ts +265 -0
- package/dist/visual/cognitive-models.d.ts.map +1 -0
- package/dist/visual/cognitive-models.js +447 -0
- package/dist/visual/cognitive-models.js.map +1 -0
- package/dist/visual/cognitive-transport-chain.d.ts +143 -0
- package/dist/visual/cognitive-transport-chain.d.ts.map +1 -0
- package/dist/visual/cognitive-transport-chain.js +440 -0
- package/dist/visual/cognitive-transport-chain.js.map +1 -0
- package/dist/visual/index.d.ts +2 -0
- package/dist/visual/index.d.ts.map +1 -1
- package/dist/visual/index.js +2 -0
- package/dist/visual/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cognitive Models — Formal implementations from cognitive science
|
|
3
|
+
*
|
|
4
|
+
* Layer 4: Grossman & Balakrishnan (2005) probabilistic pointing model
|
|
5
|
+
* Layer 6: Perry, Zorzi & Ziegler (2019) multi-deficit reading model
|
|
6
|
+
*
|
|
7
|
+
* These replace the heuristic multipliers in cognitive-transport.ts
|
|
8
|
+
* with empirically grounded computational models.
|
|
9
|
+
*
|
|
10
|
+
* @see Grossman & Balakrishnan (2005) ACM TOCHI — probabilistic 2D pointing
|
|
11
|
+
* @see Perry, Zorzi & Ziegler (2019) Psychological Science — personalized dyslexia models
|
|
12
|
+
* @since v18.39.0
|
|
13
|
+
*/
|
|
14
|
+
/**
|
|
15
|
+
* Standard normal CDF (cumulative distribution function).
|
|
16
|
+
* Abramowitz and Stegun approximation (7.1.26), error < 7.5e-8.
|
|
17
|
+
*/
|
|
18
|
+
declare function normalCDF(x: number): number;
|
|
19
|
+
/**
|
|
20
|
+
* Standard normal PDF (probability density function).
|
|
21
|
+
*/
|
|
22
|
+
declare function normalPDF(x: number): number;
|
|
23
|
+
export interface PointingProfile {
|
|
24
|
+
/** Endpoint dispersion SD in pixels (x-axis) */
|
|
25
|
+
sigmaX: number;
|
|
26
|
+
/** Endpoint dispersion SD in pixels (y-axis) */
|
|
27
|
+
sigmaY: number;
|
|
28
|
+
/** Correlation between x and y endpoint distributions */
|
|
29
|
+
rho: number;
|
|
30
|
+
/** Fitts' throughput (bits/s) */
|
|
31
|
+
throughput: number;
|
|
32
|
+
}
|
|
33
|
+
export interface TargetElement {
|
|
34
|
+
/** CSS selector or description */
|
|
35
|
+
selector: string;
|
|
36
|
+
/** Target width in pixels */
|
|
37
|
+
width: number;
|
|
38
|
+
/** Target height in pixels */
|
|
39
|
+
height: number;
|
|
40
|
+
/** Distance from likely cursor position (center of viewport) in pixels */
|
|
41
|
+
distance: number;
|
|
42
|
+
}
|
|
43
|
+
export interface MotorAccessibilityResult {
|
|
44
|
+
/** Per-element hit probability (0-1) */
|
|
45
|
+
elements: Array<{
|
|
46
|
+
selector: string;
|
|
47
|
+
hitProbability: number;
|
|
48
|
+
movementTime: number;
|
|
49
|
+
isBarrier: boolean;
|
|
50
|
+
}>;
|
|
51
|
+
/** Overall motor accessibility score (0-1, higher = more accessible) */
|
|
52
|
+
score: number;
|
|
53
|
+
/** Number of motor barriers found */
|
|
54
|
+
barrierCount: number;
|
|
55
|
+
/** Transport cost for this layer */
|
|
56
|
+
transportCost: number;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Known pointing profiles from the empirical literature.
|
|
60
|
+
*
|
|
61
|
+
* - Neurotypical baseline: MacKenzie (1992), Soukoreff & MacKenzie (2004)
|
|
62
|
+
* - Motor tremor: Hwang et al. (2004) ACM ASSETS
|
|
63
|
+
* - Elderly 65+: Chaparro et al. (1999), Ketcham et al. (2002)
|
|
64
|
+
* - ADHD: Flapper et al. (2006) — impulsive timing, near-normal precision
|
|
65
|
+
*/
|
|
66
|
+
declare const KNOWN_POINTING_PROFILES: Record<string, PointingProfile>;
|
|
67
|
+
/**
|
|
68
|
+
* Derive a pointing profile from persona traits.
|
|
69
|
+
*
|
|
70
|
+
* Maps cognitive trait values to motor parameters by interpolating
|
|
71
|
+
* between known empirical profiles. Uses `motorPrecision` (derived from
|
|
72
|
+
* proceduralFluency and patience) as the primary interpolation axis.
|
|
73
|
+
*
|
|
74
|
+
* @param persona - Persona traits object with cognitive dimensions
|
|
75
|
+
* @returns Empirically calibrated pointing profile
|
|
76
|
+
*/
|
|
77
|
+
export declare function getPointingProfile(persona: {
|
|
78
|
+
traits?: Record<string, number>;
|
|
79
|
+
accessibilityTraits?: Record<string, boolean>;
|
|
80
|
+
name?: string;
|
|
81
|
+
}): PointingProfile;
|
|
82
|
+
/**
|
|
83
|
+
* Compute the probability that a user hits a rectangular target.
|
|
84
|
+
*
|
|
85
|
+
* Grossman & Balakrishnan (2005) bivariate normal integral over target rectangle.
|
|
86
|
+
* For independent axes (rho=0): P(hit) = Phi(W/(2*sigmaX)) * Phi(H/(2*sigmaY))
|
|
87
|
+
* For correlated axes (rho!=0): applies the Plackett (1954) correction term.
|
|
88
|
+
*
|
|
89
|
+
* Assumes the user aims at the target center (optimal aiming point).
|
|
90
|
+
*
|
|
91
|
+
* @param target - Target element dimensions
|
|
92
|
+
* @param profile - User's pointing profile
|
|
93
|
+
* @returns Hit probability in [0, 1]
|
|
94
|
+
*/
|
|
95
|
+
export declare function computeHitProbability(target: TargetElement, profile: PointingProfile): number;
|
|
96
|
+
/**
|
|
97
|
+
* Compute Fitts' Law movement time for reaching a target.
|
|
98
|
+
*
|
|
99
|
+
* Uses the Shannon formulation (MacKenzie 1992, ISO 9241-9):
|
|
100
|
+
* MT = (1/throughput) * log2(D/W + 1)
|
|
101
|
+
*
|
|
102
|
+
* @param distance - Distance to target center in pixels
|
|
103
|
+
* @param width - Effective target width in the movement direction (pixels)
|
|
104
|
+
* @param throughput - User's Fitts' throughput in bits/s
|
|
105
|
+
* @returns Movement time in milliseconds
|
|
106
|
+
*/
|
|
107
|
+
export declare function computeFittsTime(distance: number, width: number, throughput: number): number;
|
|
108
|
+
/**
|
|
109
|
+
* Compute motor accessibility for a set of target elements.
|
|
110
|
+
*
|
|
111
|
+
* For each element, computes hit probability and movement time using the
|
|
112
|
+
* Grossman & Balakrishnan pointing model and Fitts' Law. Identifies
|
|
113
|
+
* motor barriers: elements where P(hit) falls below a persona-adjusted threshold.
|
|
114
|
+
*
|
|
115
|
+
* Barrier thresholds (from WCAG 2.5 / AAA guidance):
|
|
116
|
+
* - Neurotypical (throughput >= 4.0): P(hit) < 0.85 is a barrier
|
|
117
|
+
* - Impaired (throughput < 4.0): P(hit) < 0.70 is a barrier (relaxed standard)
|
|
118
|
+
*
|
|
119
|
+
* @param targets - Interactive elements on the page
|
|
120
|
+
* @param persona - Persona to evaluate for
|
|
121
|
+
* @returns Motor accessibility result with per-element breakdown
|
|
122
|
+
*/
|
|
123
|
+
export declare function motorAccessibility(targets: TargetElement[], persona: {
|
|
124
|
+
traits?: Record<string, number>;
|
|
125
|
+
accessibilityTraits?: Record<string, boolean>;
|
|
126
|
+
name?: string;
|
|
127
|
+
}): MotorAccessibilityResult;
|
|
128
|
+
export interface ReadingProfile {
|
|
129
|
+
/** Orthographic processing speed (0-1, 1=fluent) */
|
|
130
|
+
orthographic: number;
|
|
131
|
+
/** Phonological decoding ability (0-1) */
|
|
132
|
+
phonological: number;
|
|
133
|
+
/** Visual span (number of characters processed per fixation) */
|
|
134
|
+
visualSpan: number;
|
|
135
|
+
/** Vocabulary breadth (0-1) */
|
|
136
|
+
vocabulary: number;
|
|
137
|
+
/** Crowding sensitivity (0-1, higher = more affected by crowding) */
|
|
138
|
+
crowding: number;
|
|
139
|
+
}
|
|
140
|
+
export interface TextBlock {
|
|
141
|
+
/** Text content */
|
|
142
|
+
text: string;
|
|
143
|
+
/** Font size in pixels */
|
|
144
|
+
fontSize: number;
|
|
145
|
+
/** Line height ratio (e.g., 1.5) */
|
|
146
|
+
lineHeight: number;
|
|
147
|
+
/** Font family */
|
|
148
|
+
fontFamily: string;
|
|
149
|
+
/** Whether font is serif or sans-serif */
|
|
150
|
+
isSerif: boolean;
|
|
151
|
+
/** Contrast ratio (foreground vs background) */
|
|
152
|
+
contrastRatio: number;
|
|
153
|
+
}
|
|
154
|
+
export interface ReadabilityResult {
|
|
155
|
+
/** Per-text-block reading difficulty */
|
|
156
|
+
blocks: Array<{
|
|
157
|
+
text: string;
|
|
158
|
+
difficulty: number;
|
|
159
|
+
fixationDuration: number;
|
|
160
|
+
wordsPerMinute: number;
|
|
161
|
+
penalties: string[];
|
|
162
|
+
}>;
|
|
163
|
+
/** Overall readability score (0-1, higher = more readable) */
|
|
164
|
+
score: number;
|
|
165
|
+
/** Transport cost for this layer */
|
|
166
|
+
transportCost: number;
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Known reading profiles from the empirical literature.
|
|
170
|
+
*
|
|
171
|
+
* - Neurotypical: Rayner (2009) — typical college reader
|
|
172
|
+
* - Dyslexic: Perry, Zorzi & Ziegler (2019) Psychological Science
|
|
173
|
+
* - Low vision: Legge et al. (2007) — central scotoma and crowding
|
|
174
|
+
* - ADHD: Dhar et al. (2010) — intact decoding, reduced sustained attention
|
|
175
|
+
* - Elderly: Rayner et al. (2006) — aging effects on eye movements
|
|
176
|
+
*/
|
|
177
|
+
declare const KNOWN_READING_PROFILES: Record<string, ReadingProfile>;
|
|
178
|
+
/**
|
|
179
|
+
* Derive a reading profile from persona traits.
|
|
180
|
+
*
|
|
181
|
+
* Maps cognitive trait values to reading parameters by selecting the
|
|
182
|
+
* closest known profile and interpolating with the neurotypical baseline.
|
|
183
|
+
*
|
|
184
|
+
* @param persona - Persona traits object
|
|
185
|
+
* @returns Empirically calibrated reading profile
|
|
186
|
+
*/
|
|
187
|
+
export declare function getReadingProfile(persona: {
|
|
188
|
+
traits?: Record<string, number>;
|
|
189
|
+
name?: string;
|
|
190
|
+
}): ReadingProfile;
|
|
191
|
+
/**
|
|
192
|
+
* Estimate the proportion of irregular words in a text passage.
|
|
193
|
+
*
|
|
194
|
+
* Returns the fraction of words that contain irregular grapheme-phoneme
|
|
195
|
+
* correspondences. This determines the orthographic processing demand:
|
|
196
|
+
* higher irregularity = more reliance on whole-word recognition.
|
|
197
|
+
*
|
|
198
|
+
* @param text - Text passage to analyze
|
|
199
|
+
* @returns Proportion of irregular words (0-1)
|
|
200
|
+
*/
|
|
201
|
+
export declare function estimateIrregularity(text: string): number;
|
|
202
|
+
/**
|
|
203
|
+
* Compute reading difficulty for a text block using the multi-deficit model.
|
|
204
|
+
*
|
|
205
|
+
* The Perry, Zorzi & Ziegler (2019) framework models dyslexia as the
|
|
206
|
+
* intersection of multiple independent deficits. Each deficit independently
|
|
207
|
+
* increases fixation duration. The total penalty is additive (not multiplicative)
|
|
208
|
+
* because deficits affect different processing stages in the reading pipeline:
|
|
209
|
+
*
|
|
210
|
+
* Visual input -> Visual span (crowding) -> Orthographic processing ->
|
|
211
|
+
* Phonological decoding -> Lexical access (vocabulary) -> Comprehension
|
|
212
|
+
*
|
|
213
|
+
* Additional penalties from Rello & Baeza-Yates (2016) for font effects
|
|
214
|
+
* and WCAG 2.1 contrast requirements.
|
|
215
|
+
*
|
|
216
|
+
* @param text - Text content to analyze
|
|
217
|
+
* @param profile - Reader's deficit profile
|
|
218
|
+
* @param textBlock - Typographic properties of the text
|
|
219
|
+
* @returns Reading difficulty (0-1) and fixation duration
|
|
220
|
+
*/
|
|
221
|
+
export declare function computeReadingDifficulty(text: string, profile: ReadingProfile, textBlock: TextBlock): {
|
|
222
|
+
difficulty: number;
|
|
223
|
+
fixationDuration: number;
|
|
224
|
+
wordsPerMinute: number;
|
|
225
|
+
penalties: string[];
|
|
226
|
+
};
|
|
227
|
+
/**
|
|
228
|
+
* Compute readability for multiple text blocks using the multi-deficit model.
|
|
229
|
+
*
|
|
230
|
+
* Evaluates each text block independently, then computes an aggregate
|
|
231
|
+
* readability score weighted by text length (longer blocks matter more).
|
|
232
|
+
*
|
|
233
|
+
* @param blocks - Array of text blocks with typographic properties
|
|
234
|
+
* @param persona - Persona to evaluate for
|
|
235
|
+
* @returns Readability result with per-block breakdown and aggregate score
|
|
236
|
+
*/
|
|
237
|
+
export declare function readability(blocks: TextBlock[], persona: {
|
|
238
|
+
traits?: Record<string, number>;
|
|
239
|
+
name?: string;
|
|
240
|
+
}): ReadabilityResult;
|
|
241
|
+
/**
|
|
242
|
+
* Compute both motor and reading accessibility for a persona.
|
|
243
|
+
*
|
|
244
|
+
* Combines Layer 4 (pointing model) and Layer 6 (reading model) into
|
|
245
|
+
* a single assessment. Each layer contributes independently to the
|
|
246
|
+
* total transport cost.
|
|
247
|
+
*
|
|
248
|
+
* @param targets - Interactive elements for motor assessment
|
|
249
|
+
* @param textBlocks - Text blocks for reading assessment
|
|
250
|
+
* @param persona - Persona to evaluate
|
|
251
|
+
* @returns Combined accessibility result
|
|
252
|
+
*/
|
|
253
|
+
export declare function cognitiveAccessibility(targets: TargetElement[], textBlocks: TextBlock[], persona: {
|
|
254
|
+
traits?: Record<string, number>;
|
|
255
|
+
accessibilityTraits?: Record<string, boolean>;
|
|
256
|
+
name?: string;
|
|
257
|
+
}): {
|
|
258
|
+
motor: MotorAccessibilityResult;
|
|
259
|
+
reading: ReadabilityResult;
|
|
260
|
+
combinedScore: number;
|
|
261
|
+
combinedTransportCost: number;
|
|
262
|
+
};
|
|
263
|
+
export { normalCDF as _normalCDF, normalPDF as _normalPDF };
|
|
264
|
+
export { KNOWN_POINTING_PROFILES, KNOWN_READING_PROFILES };
|
|
265
|
+
//# sourceMappingURL=cognitive-models.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cognitive-models.d.ts","sourceRoot":"","sources":["../../src/visual/cognitive-models.ts"],"names":[],"mappings":"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"}
|