import type Cwa from '#cwa/cwa'; import type { CwaResource } from '#cwa/resources/resource-utils'; import type { FocusedPeer } from '#cwa/admin/presence'; export interface RemoteUser { id: string; name?: string; isSelf: boolean; } export interface RemoteFieldChange { user?: RemoteUser; name: string; value: T; accept: () => void; keep: () => Promise; } export interface ResourceModelField { model: { value: T | null | undefined; }; remoteChange: { readonly value: RemoteFieldChange | undefined; }; focusedBy?: { readonly value: FocusedPeer[]; }; focusListeners?: { onFocusin: () => void; onFocusout: (event: FocusEvent) => void; onPointerdown: (event: PointerEvent) => void; }; } export interface ModelEditor { iri: () => string | undefined; field: () => string; value: (resource: CwaResource) => unknown; hasLocalChange: () => boolean; hasUnsentChange: () => boolean; localPatch: () => unknown; discardLocal: () => void; adopt: (value: unknown) => void; moveTo: (from: string, to: string) => void; submit: () => Promise; conflict: (held?: { iri: string; change: RemoteFieldChange; }) => void; } export declare function registerModelEditor($cwa: Cwa, editor: ModelEditor): () => boolean; export declare function modelEditors($cwa: Cwa): ModelEditor[];