/** * Pure helpers shared by the catalog node dispatchers (`A2UINode`, * `urbicon/UrbiconA2UINode`). No Svelte — just the payload-shaping logic both * renderers need identically. The reactive plumbing (the `$derived`/`$state` * two-way-binding wiring) is deliberately NOT extracted: it is duplicated per * dispatcher so each stays a self-contained, readable component. * * `dedupeOptions` is load-bearing for the "never throw" contract: EVERY * payload-driven keyed `{#each}` over option values must dedupe first, or two * equal keys throw Svelte's `each_key_duplicate` — a hard render crash on an * untrusted payload. The validator only WARNS on duplicates; the renderer must * drop them. */ /** * Coerce an unknown resolved value to display text: strings pass through, finite * numbers stringify, everything else (null/undefined/object/NaN) becomes `''`. */ export declare function coerceText(value: unknown): string; /** * Normalise a raw options array into a deduped `{ value, label }` list (first * occurrence of each value wins). `resolveLabel` turns a raw label value (a * literal or a `{ path }` binding) into display text — the caller injects its * data-binding resolver. Malformed options (non-object, non-string value) are * skipped. Dedup is mandatory: the rendered list is keyed on `value`. */ export declare function dedupeOptions(rawOptions: unknown, resolveLabel: (rawLabel: unknown) => string): Array<{ value: string; label: string; }>; /** Keep only the leading `HH:MM(:SS)?` of a time string; `''` if there is none. */ export declare function normalizeTimePart(value: string): string; /** * Split one ISO 8601 date/time literal into its date and time parts, timezone- * naively (a trailing offset/`Z` is dropped, never re-attached — timezone * semantics belong to the agent, not a UI renderer without timezone context). */ export declare function splitDateTime(value: string): { date: string; time: string; };