Video note
canonA round 200 px video without a bubble, with a 3 px accent progress ring, duration and a Přepis link.
acrm !4918 (DS) + !4935 (Komunikace) + !4956 (44 px tap target), prototype proto/chat-hlasove-zpravy@6ed969dc9 (owner approved 8 Oct 2026). Family split from discussion/voice-message on 11 Oct 2026 (owner R43 a). Not on dev with data (stories only). Canon 14 Oct 2026: dev check after !4957 + !4982 — 390 px 64 bars × 3.7 px, gap 0; time without tabular-nums (StableTime). Signed off by AD. Own stories + light/dark baseline: acrm !5079 (Default · In-out · States; fixed wrapping of „Přepis se nepodařil · Zkusit znovu“ under the 200 px circle).
Used in no file in the app (main)
Default
export const Default = () => {
const src = useWav(24);
return <VideoNote src={src} durationSec={24} time="10:21" transcript={SK} />;
};Variants
Příchozí
Odchozí, přečteno
export const InOut = () => {
const src = useWav(24);
return (
<div style={grid}>
<Labeled label="Příchozí">
<VideoNote src={src} durationSec={24} time="10:21" transcript={SK} />
</Labeled>
<Labeled label="Odchozí, přečteno">
<VideoNote src={src} durationSec={24} time="10:22" out state="read" transcript={SK} />
</Labeled>
</div>
);
};States
Přepis (sbalený)
Skrýt přepis (rozbalený)
Přepisuji…
Bez řeči
Přepis se nepodařil · Zkusit znovu
Přepis vypnutý (bez odkazu)
export const States = () => {
const src = useWav(24);
const rows: Array<[string, VoiceTranscript | null, boolean?]> = [
['Přepis (sbalený)', SK],
['Skrýt přepis (rozbalený)', SK, true],
['Přepisuji…', { status: 'processing' }],
['Bez řeči', { status: 'empty' }],
['Přepis se nepodařil · Zkusit znovu', { status: 'error' }],
['Přepis vypnutý (bez odkazu)', null],
];
return (
<div style={grid}>
{rows.map(([label, transcript, open]) => (
<Labeled key={label} label={label}>
<VideoNote
src={src}
durationSec={24}
time="10:21"
transcript={transcript}
defaultTranscriptOpen={open}
onRetry={() => {}}
/>
</Labeled>
))}
</div>
);
};