/** * dsh-widgets — the `clock` rich block (the 时钟 card's dial). * * WHAT IT DRAWS. Two faces, one contract (see `ClockRich`): an ANALOG dial — the * owner's reference: 12 numerals, hairline minute ticks over heavier hour ticks, * hour / minute / second hands from a common centre, and an optional zone caption * in a pill under the centre — or the same reading as DIGITAL text. Both occupy * the SAME footprint, so switching the face cannot resize the card. * * WHY IT TICKS ITSELF. A widget render is a pure data description and the rail * re-renders a card only when its data changes — measured: the collector's idle * tick is 30s (see data/collector.tsx). A dial wired to that tick would stand * still for half a minute at a time, which is exactly what a clock must not do. * So the LIVE reading is owned HERE: a 1s interval while seconds are drawn (and a * minute-bucketed one when they are not — the state is replaced only when the * printed value changes, so a minute-precision card re-renders once a minute, not * 60 times). The widget still ships a PINNED instant for the offline surfaces, * because a screenshot of a live dial could never be compared to a baseline. * * The interval belongs to THIS component, rendered by `CardBody` as a real element * (`createElement`) — never called as a plain function. Called inline its effect * would land on `CardBody`'s fibre, and the skeleton → loaded swap (which returns * before the rich block on the skeleton pass) would then render a different number * of hooks per pass, which React rejects with #310 (the same trap the chart * registry documents). */ import * as React from 'react'; import type { ClockRich } from '../../lib/contract/types'; /** * The clock rich block. * * @param clock - the widget's payload (see `ClockRich`); `at` absent = live. * @param scale - `unit / BASE_SIDE`, the card's own scale factor. */ export declare function ClockFace({ clock, scale }: { clock: ClockRich; scale: number; }): React.ReactElement;