import type { AACStyle, AACTreeMetadata, SnapMetadata, GridSetMetadata, AstericsGridMetadata, TouchChatMetadata, CellScanningOrder, ScanningSelectionMethod, AACWordListItem, AACPageMutation, ProcessorCapabilities } from '../types/aac'; export type { AACStyle, AACTreeMetadata, SnapMetadata, GridSetMetadata, AstericsGridMetadata, TouchChatMetadata, CellScanningOrder, ScanningSelectionMethod, AACWordListItem, AACPageMutation, ProcessorCapabilities, }; export declare enum AACSemanticCategory { COMMUNICATION = "communication",// Speech, text output NAVIGATION = "navigation",// Page/grid navigation TEXT_EDITING = "text_editing",// Text manipulation SYSTEM_CONTROL = "system_control",// Device/app control MEDIA = "media",// Audio/video playback ACCESSIBILITY = "accessibility",// Switch scanning, etc. CUSTOM = "custom" } export declare enum AACSemanticIntent { SPEAK_TEXT = "SPEAK_TEXT", SPEAK_IMMEDIATE = "SPEAK_IMMEDIATE", STOP_SPEECH = "STOP_SPEECH", INSERT_TEXT = "INSERT_TEXT", NAVIGATE_TO = "NAVIGATE_TO", GO_BACK = "GO_BACK", GO_HOME = "GO_HOME", DELETE_WORD = "DELETE_WORD", DELETE_CHARACTER = "DELETE_CHARACTER", CLEAR_TEXT = "CLEAR_TEXT", COPY_TEXT = "COPY_TEXT", PASTE_TEXT = "PASTE_TEXT", SELECT_ALL = "SELECT_ALL", CURSOR_MOVE = "CURSOR_MOVE", UNDO = "UNDO", PRINT = "PRINT", SEND_KEYS = "SEND_KEYS", MOUSE_CLICK = "MOUSE_CLICK", DEVICE_MUTE = "DEVICE_MUTE", TOGGLE_STATE = "TOGGLE_STATE", WEB_NAVIGATE = "WEB_NAVIGATE", WEB_SCROLL = "WEB_SCROLL", WEB_FOCUS_ELEMENT = "WEB_FOCUS_ELEMENT", WEB_ACTIVATE_ELEMENT = "WEB_ACTIVATE_ELEMENT", WEB_EXECUTE_SCRIPT = "WEB_EXECUTE_SCRIPT", PLAY_SOUND = "PLAY_SOUND", PLAY_VIDEO = "PLAY_VIDEO", STOP_MEDIA = "STOP_MEDIA", TAKE_PHOTO = "TAKE_PHOTO", WAIT = "WAIT", REPEAT_COMMANDS = "REPEAT_COMMANDS", SCAN_NEXT = "SCAN_NEXT", SCAN_SELECT = "SCAN_SELECT", PLATFORM_SPECIFIC = "PLATFORM_SPECIFIC" } /** * Scanning types for accessibility */ export declare enum AACScanType { LINEAR = "linear",// Left-to-right, top-to-bottom ROW_COLUMN = "row-column",// Scan rows, then columns COLUMN_ROW = "column-row",// Scan columns, then rows BLOCK_ROW_COLUMN = "block-row-column",// Scan blocks, then rows, then columns BLOCK_COLUMN_ROW = "block-column-row" } /** * Configuration for a scan block */ export interface AACScanBlock { id: number; name?: string; order?: number; scanType?: AACScanType; } export interface AACSemanticAction { category?: AACSemanticCategory; intent: AACSemanticIntent | string; text?: string; targetId?: string; audioData?: Buffer; richText?: { text: string; symbols?: Array<{ text: string; image?: string; }>; grammar?: { partOfSpeech?: string; person?: string; number?: string; verbState?: string; }; }; parameters?: { [key: string]: any; }; platformData?: { grid3?: { commandId: string; parameters: { [key: string]: any; }; }; astericsGrid?: { modelName: string; properties: { [key: string]: any; }; }; touchChat?: { actionCode: number; actionData: string; resourceId?: number; }; snap?: { navigatePageId?: number; elementReferenceId?: number; }; applePanels?: { actionType: string; parameters: { [key: string]: any; }; }; gotalkNow?: { buttonType: string; jumpTo?: number; jumpBook?: string; audioLocation?: string; trimStart?: number; trimEnd?: number; url?: string; openInternally?: boolean; goVisual?: string; goVisualLink?: unknown; }; }; fallback?: { type: 'SPEAK' | 'NAVIGATE' | 'ACTION'; message?: string; targetPageId?: string; temporary_home?: boolean | string | null; add_to_sentence?: boolean; }; } export declare class AACButton { id: string; label: string; message: string; semanticAction?: AACSemanticAction; targetPageId?: string; style?: AACStyle; audioRecording?: { id?: number; data?: Buffer; identifier?: string; metadata?: string; }; contentType?: 'Normal' | 'AutoContent' | 'Workspace' | 'LiveCell' | 'Inflector' | 'Prediction'; contentSubType?: string; image?: string; resolvedImageEntry?: string; symbolLibrary?: string; symbolPath?: string; x?: number; y?: number; columnSpan?: number; rowSpan?: number; /** * @deprecated Use scanBlock instead (singular, not array) */ scanBlocks?: number[]; /** * Scan block number (1-8) for block scanning */ scanBlock?: number; visibility?: 'Visible' | 'Hidden' | 'Disabled' | 'PointerAndTouchOnly' | 'Empty'; directActivate?: boolean; audioDescription?: string; parameters?: { [key: string]: any; }; predictions?: string[]; pos?: string; wordForms?: Array<{ lang?: string; tags: string[]; value: string; pronunciation?: string; base?: string; }>; semantic_id?: string; clone_id?: string; constructor({ id, label, message, targetPageId, semanticAction, audioRecording, style, contentType, contentSubType, image, resolvedImageEntry, symbolLibrary, symbolPath, x, y, columnSpan, rowSpan, scanBlocks, scanBlock, visibility, directActivate, parameters, predictions, pos, wordForms, semantic_id, clone_id, type, action, }: { id: string; label?: string; message?: string; targetPageId?: string; semanticAction?: AACSemanticAction; audioRecording?: { id?: number; data?: Buffer; identifier?: string; metadata?: string; }; style?: AACStyle; contentType?: 'Normal' | 'AutoContent' | 'Workspace' | 'LiveCell' | 'Inflector' | 'Prediction'; contentSubType?: string; image?: string; resolvedImageEntry?: string; symbolLibrary?: string; symbolPath?: string; x?: number; y?: number; columnSpan?: number; rowSpan?: number; scanBlocks?: number[]; scanBlock?: number; visibility?: 'Visible' | 'Hidden' | 'Disabled' | 'PointerAndTouchOnly' | 'Empty'; directActivate?: boolean; parameters?: { [key: string]: any; }; predictions?: string[]; pos?: string; wordForms?: Array<{ lang?: string; tags: string[]; value: string; pronunciation?: string; base?: string; }>; semantic_id?: string; clone_id?: string; type?: 'SPEAK' | 'NAVIGATE' | 'ACTION'; action?: { type: 'SPEAK' | 'NAVIGATE' | 'ACTION'; targetPageId?: string; message?: string; } | null; }); get type(): 'SPEAK' | 'NAVIGATE' | 'ACTION' | undefined; get action(): { type: 'SPEAK' | 'NAVIGATE' | 'ACTION'; targetPageId?: string; message?: string; } | null; } export declare class AACPage { id: string; name: string; grid: Array>; buttons: AACButton[]; parentId: string | null; style?: AACStyle; locale?: string; descriptionHtml?: string; images?: any[]; sounds?: any[]; wordListItems?: import('../types/aac').AACWordListItem[]; semantic_ids?: string[]; clone_ids?: string[]; scanningConfig?: import('../types/aac').ScanningConfig; scanType?: AACScanType; scanBlocksConfig?: AACScanBlock[]; private _pendingMutations; constructor({ id, name, grid, buttons, parentId, style, locale, descriptionHtml, images, sounds, semantic_ids, clone_ids, scanningConfig, scanBlocksConfig, scanType, }: { id: string; name?: string; grid?: Array> | { columns: number; rows: number; }; buttons?: AACButton[]; parentId?: string | null; style?: AACStyle; locale?: string; descriptionHtml?: string; images?: any[]; sounds?: any[]; semantic_ids?: string[]; clone_ids?: string[]; scanningConfig?: import('../types/aac').ScanningConfig; scanBlocksConfig?: AACScanBlock[]; scanType?: AACScanType; }); addButton(button: AACButton): void; /** * Internal load-path button push: adds a button to the page WITHOUT recording a mutation. * Used by processors during loadIntoTree so the loaded baseline isn't treated as user changes. * Not part of the public API — consumers should always use addButton. */ _loadButton(button: AACButton): void; /** * Discard all recorded mutations on this page. * Useful as an escape hatch after loadIntoTree if the consumer wants a clean baseline. */ clearMutations(): void; /** * Get the list of pending mutations for this page (read-only) */ get pendingMutations(): readonly AACPageMutation[]; /** * Remove a button by ID * @param buttonId - The ID of the button to remove */ removeButton(buttonId: string): void; /** * Update a button by merging a patch * @param buttonId - The ID of the button to update * @param patch - Partial button object with fields to update */ updateButton(buttonId: string, patch: Partial): void; /** * Add an item to the page's WordList (for formats with dynamic content cells) * @param item - WordList item to add */ addWordListItem(item: AACWordListItem): void; /** * Remove items from the page's WordList * @param textOrPredicate - Text to match or predicate function to filter items */ removeWordListItem(textOrPredicate: string | ((item: AACWordListItem) => boolean)): void; /** * Clear all items from the page's WordList */ clearWordList(): void; } export declare class AACTree { pages: { [key: string]: AACPage; }; metadata: AACTreeMetadata; get rootId(): string | null; set rootId(id: string | null); get toolbarId(): string | null; set toolbarId(id: string | null); get dashboardId(): string | null; set dashboardId(id: string | null); constructor(); addPage(page: AACPage): void; getPage(id: string): AACPage | undefined; traverse(callback: (page: AACPage) => void): void; }