The cheapest instrument class there is, held to the same
protocol as the drawn ones. Every mark below is a character in the
element's own resolved face. Nothing is drawn, nothing is a canvas, and the
whole thing costs about what a span costs — which is the point, because
the cost of a screen was measured as living entirely in its instruments.
There is one rule these have that the drawn instruments do not: the glyph
ladder is itself an instrument, so it is measured before it is trusted. A
face without U+2581..U+2588 substitutes, and a substituted glyph
reads as a level it is not.
import 'overscan'
import 'overscan/overscan.css'
<ov-spark
min="0"
max="100"
cells="40"
></ov-spark>
const values = await fetch('./data/ascii-0-values.json').then(r => r.json())
document.querySelector('ov-spark').values = valuesimport { OvSpark } from 'overscan/react'
const values = await fetch('./data/ascii-0-values.json').then(r => r.json())
<OvSpark
values={values}
min="0"
max="100"
cells="40"
/>import { OvSpark } from 'overscan/vue'
const values = await fetch('./data/ascii-0-values.json').then(r => r.json())
<OvSpark
:values="values"
min="0"
max="100"
cells="40"
/>import OvSpark from 'overscan/svelte/OvSpark.svelte'
const values = await fetch('./data/ascii-0-values.json').then(r => r.json())
<OvSpark
values={values}
min="0"
max="100"
cells="40"
/>import 'overscan'
import 'overscan/overscan.css'
<ov-spark
min="0"
max="100"
cells="40"
></ov-spark>
const values = await fetch('./data/ascii-1-values.json').then(r => r.json())
document.querySelector('ov-spark').values = valuesimport { OvSpark } from 'overscan/react'
const values = await fetch('./data/ascii-1-values.json').then(r => r.json())
<OvSpark
values={values}
min="0"
max="100"
cells="40"
/>import { OvSpark } from 'overscan/vue'
const values = await fetch('./data/ascii-1-values.json').then(r => r.json())
<OvSpark
:values="values"
min="0"
max="100"
cells="40"
/>import OvSpark from 'overscan/svelte/OvSpark.svelte'
const values = await fetch('./data/ascii-1-values.json').then(r => r.json())
<OvSpark
values={values}
min="0"
max="100"
cells="40"
/>import 'overscan'
import 'overscan/overscan.css'
<ov-spark
min="0"
max="100"
cells="40"
></ov-spark>
const values = await fetch('./data/ascii-2-values.json').then(r => r.json())
document.querySelector('ov-spark').values = valuesimport { OvSpark } from 'overscan/react'
const values = await fetch('./data/ascii-2-values.json').then(r => r.json())
<OvSpark
values={values}
min="0"
max="100"
cells="40"
/>import { OvSpark } from 'overscan/vue'
const values = await fetch('./data/ascii-2-values.json').then(r => r.json())
<OvSpark
:values="values"
min="0"
max="100"
cells="40"
/>import OvSpark from 'overscan/svelte/OvSpark.svelte'
const values = await fetch('./data/ascii-2-values.json').then(r => r.json())
<OvSpark
values={values}
min="0"
max="100"
cells="40"
/>import 'overscan'
import 'overscan/overscan.css'
<ov-spark
min="0"
max="100"
cells="40"
></ov-spark>
const values = await fetch('./data/ascii-3-values.json').then(r => r.json())
document.querySelector('ov-spark').values = valuesimport { OvSpark } from 'overscan/react'
const values = await fetch('./data/ascii-3-values.json').then(r => r.json())
<OvSpark
values={values}
min="0"
max="100"
cells="40"
/>import { OvSpark } from 'overscan/vue'
const values = await fetch('./data/ascii-3-values.json').then(r => r.json())
<OvSpark
:values="values"
min="0"
max="100"
cells="40"
/>import OvSpark from 'overscan/svelte/OvSpark.svelte'
const values = await fetch('./data/ascii-3-values.json').then(r => r.json())
<OvSpark
values={values}
min="0"
max="100"
cells="40"
/>| bus | last 48 | now | load |
|---|