/** * UI State & Presentation Contracts — v60 */ export type KbxFieldState = 'default' | 'changed' | 'warning' | 'ai-suggested' export type KbxAsyncState = 'idle' | 'ready' | 'loading' | 'empty' | 'error' export interface KbxAsyncStateDefinition { state: KbxAsyncState title?: string detail?: string actionLabel?: string } export interface KbxSummaryItem { key: string label: string value: string | number emphasis?: boolean } export interface KbxQuickFilterItem { key: string label: string count: number active?: boolean tone?: 'default' | 'warning' | 'danger' } export type KbxShortcutScope = 'application' | 'page' | 'grid' | 'dialog' | 'editor' export interface KbxShortcutDefinition { key: string scope: KbxShortcutScope priority?: number enabled?: () => boolean execute(): void | Promise } export type KbxTemplateMetricTone = 'default' | 'info' | 'success' | 'warning' | 'danger' export interface KbxTemplateMetric { key: string label: string value: string | number tone?: KbxTemplateMetricTone emphasis?: boolean } export interface KbxTemplateContext { label?: string hint?: string updatedAt?: string metrics?: KbxTemplateMetric[] }