Text metrics
fonts.text-metrics
Ready · No signal has been run.
Results
Research focus
Selected evidence from this run. Cross-run stability and comparison verdicts require a session comparison.
Full evidence
| Property | Value |
|---|---|
| No results yet. No signal has been run. | |
JSON
Selected signal results for external comparison. Field statuses, controls and exact values are retained.
No run export is available.
Source
Source is not connected yet.
// Test source pending.Reference
Reference is not connected yet.
Definition
Exact Canvas text metric vectors and actual font settings across scripts and generic font families.
Find it in the repository
- Collector source
core/signals/fonts/text-metrics.ts- Export
measurementModule· Signal object- Field definitions
core/definitions/fonts/text-metrics.ts- Capture membership
- Product capture ·
common/capture/product.ts - Page registration
app/signals/registry.ts- Field projection
core/results/measurement.ts
Execution contract
- Signal
fonts.text-metrics- Collector
fonts.text-metrics- API / surface
- core/signals/fonts/text-metrics.ts
- Timeout
- 750 ms
- Companion signals
- None
- Fixture inputs
- Declared requests (listed below)
Exact request inputs
[
{
"key": "fonts.text-metrics.serif",
"inputs": {
"serif-0": {
"text": "Aa ffi",
"font": "24px serif",
"direction": "ltr",
"baseline": "alphabetic"
},
"serif-1": {
"text": "Áé",
"font": "24px serif",
"direction": "ltr",
"baseline": "alphabetic"
},
"serif-10": {
"text": "😀🏳️🌈",
"font": "24px serif",
"direction": "ltr",
"baseline": "alphabetic"
},
"serif-11": {
"text": "👩💻👨👩👧👦",
"font": "24px serif",
"direction": "ltr",
"baseline": "alphabetic"
},
"serif-2": {
"text": "Ελληνικά",
"font": "24px serif",
"direction": "ltr",
"baseline": "alphabetic"
},
"serif-3": {
"text": "Кириллица",
"font": "24px serif",
"direction": "ltr",
"baseline": "alphabetic"
},
"serif-4": {
"text": "العربية",
"font": "24px serif",
"direction": "ltr",
"baseline": "alphabetic"
},
"serif-5": {
"text": "עברית",
"font": "24px serif",
"direction": "ltr",
"baseline": "alphabetic"
},
"serif-6": {
"text": "हिन्दी",
"font": "24px serif",
"direction": "ltr",
"baseline": "alphabetic"
},
"serif-7": {
"text": "ภาษาไทย",
"font": "24px serif",
"direction": "ltr",
"baseline": "alphabetic"
},
"serif-8": {
"text": "中文日本語",
"font": "24px serif",
"direction": "ltr",
"baseline": "alphabetic"
},
"serif-9": {
"text": "한글",
"font": "24px serif",
"direction": "ltr",
"baseline": "alphabetic"
}
},
"controls": {}
},
{
"key": "fonts.text-metrics.sans-serif",
"inputs": {
"sans-serif-0": {
"text": "Aa ffi",
"font": "24px sans-serif",
"direction": "ltr",
"baseline": "alphabetic"
},
"sans-serif-1": {
"text": "Áé",
"font": "24px sans-serif",
"direction": "ltr",
"baseline": "alphabetic"
},
"sans-serif-10": {
"text": "😀🏳️🌈",
"font": "24px sans-serif",
"direction": "ltr",
"baseline": "alphabetic"
},
"sans-serif-11": {
"text": "👩💻👨👩👧👦",
"font": "24px sans-serif",
"direction": "ltr",
"baseline": "alphabetic"
},
"sans-serif-2": {
"text": "Ελληνικά",
"font": "24px sans-serif",
"direction": "ltr",
"baseline": "alphabetic"
},
"sans-serif-3": {
"text": "Кириллица",
"font": "24px sans-serif",
"direction": "ltr",
"baseline": "alphabetic"
},
"sans-serif-4": {
"text": "العربية",
"font": "24px sans-serif",
"direction": "ltr",
"baseline": "alphabetic"
},
"sans-serif-5": {
"text": "עברית",
"font": "24px sans-serif",
"direction": "ltr",
"baseline": "alphabetic"
},
"sans-serif-6": {
"text": "हिन्दी",
"font": "24px sans-serif",
"direction": "ltr",
"baseline": "alphabetic"
},
"sans-serif-7": {
"text": "ภาษาไทย",
"font": "24px sans-serif",
"direction": "ltr",
"baseline": "alphabetic"
},
"sans-serif-8": {
"text": "中文日本語",
"font": "24px sans-serif",
"direction": "ltr",
"baseline": "alphabetic"
},
"sans-serif-9": {
"text": "한글",
"font": "24px sans-serif",
"direction": "ltr",
"baseline": "alphabetic"
}
},
"controls": {}
},
{
"key": "fonts.text-metrics.monospace",
"inputs": {
"monospace-0": {
"text": "Aa ffi",
"font": "24px monospace",
"direction": "ltr",
"baseline": "alphabetic"
},
"monospace-1": {
"text": "Áé",
"font": "24px monospace",
"direction": "ltr",
"baseline": "alphabetic"
},
"monospace-10": {
"text": "😀🏳️🌈",
"font": "24px monospace",
"direction": "ltr",
"baseline": "alphabetic"
},
"monospace-11": {
"text": "👩💻👨👩👧👦",
"font": "24px monospace",
"direction": "ltr",
"baseline": "alphabetic"
},
"monospace-2": {
"text": "Ελληνικά",
"font": "24px monospace",
"direction": "ltr",
"baseline": "alphabetic"
},
"monospace-3": {
"text": "Кириллица",
"font": "24px monospace",
"direction": "ltr",
"baseline": "alphabetic"
},
"monospace-4": {
"text": "العربية",
"font": "24px monospace",
"direction": "ltr",
"baseline": "alphabetic"
},
"monospace-5": {
"text": "עברית",
"font": "24px monospace",
"direction": "ltr",
"baseline": "alphabetic"
},
"monospace-6": {
"text": "हिन्दी",
"font": "24px monospace",
"direction": "ltr",
"baseline": "alphabetic"
},
"monospace-7": {
"text": "ภาษาไทย",
"font": "24px monospace",
"direction": "ltr",
"baseline": "alphabetic"
},
"monospace-8": {
"text": "中文日本語",
"font": "24px monospace",
"direction": "ltr",
"baseline": "alphabetic"
},
"monospace-9": {
"text": "한글",
"font": "24px monospace",
"direction": "ltr",
"baseline": "alphabetic"
}
},
"controls": {}
}
]One collector runs per invocation. Results and JSON select this signal’s fields; any companions execute in the same collector.
Generated source manifest lists runtime files, fixture URLs and content digests for this build. The Source tab provides a copyable console sample.
Run and edit locally
From the repository root, start the Astro app, then open /signals/fonts.text-metrics. Edit the collector source and reload the page to load its new build.
pnpm run dev:webIn a browser module served by this repository’s Vite graph:
import { createCollector } from "/core/collect"
import { measurementModule } from "/core/signals/fonts/text-metrics"
const signal = measurementModule
const collector = createCollector()
const suite = { signals: [signal] }
const result = await collector.collect(suite)Reuse the collector owner for repeated calls so collection can enforce cleanup. This returns the collector’s raw result; app/signals/projection.ts selects the retained fields shown on this page.
rg -n 'measurementModule' core app tests
pnpm run check
pnpm run test tests/unit/app/focused-projection.test.ts| Property | Value |
|---|