OVERSCANUI KIT
no button at all a worn bezel with weight channels do not converge zero depth instrumented, full of smoke a field of real characters a camera looking out additive, so no shadow hairlines, no new shader no raster, so no scanlines

ov-wireframe

src/ov-wireframe.js

LIFTED FROM demo/wireframe.html

Attributes

attribute
fov
period
pitch
spin
src
yaw

Properties

propertytypekindacceptsstaleness
figuresStructuredstructurednot on the reading protocolnot applicable
surveyStructuredstructurednot on the reading protocolnot applicable

Events

None.

Using it

import 'overscan'
import 'overscan/overscan.css'

<ov-wireframe
  src="../demo/models/descent.json"
  yaw="-28"
  pitch="34"
  style="--ov-wireframe-height:220px;inline-size:100%"
></ov-wireframe>

The CSS is a separate import in every framework. A single element can be imported on its own instead of the whole kit: import 'overscan/src/ov-chart.js'

A reading is set as a PROPERTY, never an attribute. An attribute is a string, so an array cannot survive one and a null arrives as the word "null", which the protocol would read as a value rather than a dropout.

Every ov: event is bound with addEventListener. The colon has no declarative spelling in Svelte 5, where the on: directive is gone and "onov:commit" is not an identifier, nor in JSX. Vue can bind it.

The wrapper applies attributes ITSELF and hands the framework nothing but a ref. All three frameworks set a prop as a property when the name exists on the element, and this kit has 72 getter-only properties across 39 elements. Assigning one throws, and in React it does not degrade: the whole tree fails to render. 13 elements have a getter-only name that is also a real attribute (at, bearing, digits, duration, floor, fov, fresh, hold, lat, lon, period, pitch, range, ring, rings, span, step, sweep, sweeps, traces, value), which are the ones a reader would naturally pass in markup.