@lokascript/domain-voice 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts","../src/schemas/index.ts","../src/profiles/index.ts","../src/tokenizers/index.ts","../src/generators/voice-generator.ts","../src/generators/voice-renderer.ts","../src/types.ts"],"sourcesContent":["/**\n * @lokascript/domain-voice — Multilingual Voice/Accessibility Commands\n *\n * A domain built on @lokascript/framework providing 14 voice/accessibility\n * commands in 8 languages covering SVO, SOV, and VSO word orders.\n * Commands compile to executable JavaScript for DOM manipulation,\n * navigation, and accessibility actions.\n *\n * @example\n * ```typescript\n * import { createVoiceDSL } from '@lokascript/domain-voice';\n *\n * const voice = createVoiceDSL();\n *\n * // English (SVO)\n * voice.compile('click submit', 'en');\n * // → executable JS that finds and clicks the submit button\n *\n * // Japanese (SOV)\n * voice.compile('送信 を クリック', 'ja');\n *\n * // Arabic (VSO)\n * voice.compile('انقر على إرسال', 'ar');\n *\n * // Navigate\n * voice.compile('navigate to home', 'en');\n *\n * // Scroll\n * voice.compile('scroll down', 'en');\n *\n * // Read aloud\n * voice.compile('read #article', 'en');\n * ```\n */\n\nimport { createMultilingualDSL, type MultilingualDSL } from '@lokascript/framework';\nimport { allSchemas } from './schemas/index';\nimport {\n enProfile,\n esProfile,\n jaProfile,\n arProfile,\n koProfile,\n zhProfile,\n trProfile,\n frProfile,\n} from './profiles/index';\nimport {\n EnglishVoiceTokenizer,\n SpanishVoiceTokenizer,\n JapaneseVoiceTokenizer,\n ArabicVoiceTokenizer,\n KoreanVoiceTokenizer,\n ChineseVoiceTokenizer,\n TurkishVoiceTokenizer,\n FrenchVoiceTokenizer,\n} from './tokenizers/index';\nimport { voiceCodeGenerator } from './generators/voice-generator';\n\n/**\n * Create a multilingual voice/accessibility DSL instance with all 8 supported languages.\n */\nexport function createVoiceDSL(): MultilingualDSL {\n return /*#__PURE__*/ createMultilingualDSL({\n name: 'Voice',\n schemas: allSchemas,\n languages: [\n {\n code: 'en',\n name: 'English',\n nativeName: 'English',\n tokenizer: EnglishVoiceTokenizer,\n patternProfile: enProfile,\n },\n {\n code: 'es',\n name: 'Spanish',\n nativeName: 'Español',\n tokenizer: SpanishVoiceTokenizer,\n patternProfile: esProfile,\n },\n {\n code: 'ja',\n name: 'Japanese',\n nativeName: '日本語',\n tokenizer: JapaneseVoiceTokenizer,\n patternProfile: jaProfile,\n },\n {\n code: 'ar',\n name: 'Arabic',\n nativeName: 'العربية',\n tokenizer: ArabicVoiceTokenizer,\n patternProfile: arProfile,\n },\n {\n code: 'ko',\n name: 'Korean',\n nativeName: '한국어',\n tokenizer: KoreanVoiceTokenizer,\n patternProfile: koProfile,\n },\n {\n code: 'zh',\n name: 'Chinese',\n nativeName: '中文',\n tokenizer: ChineseVoiceTokenizer,\n patternProfile: zhProfile,\n },\n {\n code: 'tr',\n name: 'Turkish',\n nativeName: 'Türkçe',\n tokenizer: TurkishVoiceTokenizer,\n patternProfile: trProfile,\n },\n {\n code: 'fr',\n name: 'French',\n nativeName: 'Français',\n tokenizer: FrenchVoiceTokenizer,\n patternProfile: frProfile,\n },\n ],\n codeGenerator: voiceCodeGenerator,\n });\n}\n\n// Re-export schemas\nexport {\n allSchemas,\n navigateSchema,\n clickSchema,\n typeSchema,\n scrollSchema,\n readSchema,\n zoomSchema,\n selectSchema,\n backSchema,\n forwardSchema,\n focusSchema,\n closeSchema,\n openSchema,\n searchSchema,\n helpSchema,\n} from './schemas/index';\n\n// Re-export profiles\nexport {\n enProfile,\n esProfile,\n jaProfile,\n arProfile,\n koProfile,\n zhProfile,\n trProfile,\n frProfile,\n allProfiles,\n} from './profiles/index';\n\n// Re-export generators\nexport { voiceCodeGenerator } from './generators/voice-generator';\nexport { renderVoice } from './generators/voice-renderer';\n\n// Re-export tokenizers\nexport {\n EnglishVoiceTokenizer,\n SpanishVoiceTokenizer,\n JapaneseVoiceTokenizer,\n ArabicVoiceTokenizer,\n KoreanVoiceTokenizer,\n ChineseVoiceTokenizer,\n TurkishVoiceTokenizer,\n FrenchVoiceTokenizer,\n} from './tokenizers/index';\n\n// Re-export types and converters\nexport type { VoiceActionSpec } from './types';\nexport { toVoiceActionSpec } from './types';\n\n// =============================================================================\n// Domain Scan Config (for AOT / Vite plugin integration)\n// =============================================================================\n\n/** HTML attribute and script-type patterns for AOT scanning */\nexport const voiceScanConfig = {\n attributes: ['data-voice', '_voice'] as const,\n scriptTypes: ['text/voice'] as const,\n defaultLanguage: 'en',\n};\n","import { defineCommand, defineRole } from '@lokascript/framework';\nimport type { CommandSchema } from '@lokascript/framework';\n\n// =============================================================================\n// navigate — Go to URL, page section, or ARIA landmark\n// EN: navigate to home / go to /settings\n// ES: navegar a inicio\n// JA: ホーム に 移動\n// AR: انتقل إلى الرئيسية\n// KO: 홈 으로 이동\n// ZH: 导航 到 首页\n// TR: ana-sayfa ya git\n// FR: naviguer vers accueil\n// =============================================================================\n\nexport const navigateSchema = defineCommand({\n action: 'navigate',\n description: 'Navigate to a URL, page section, or ARIA landmark',\n category: 'navigation',\n primaryRole: 'destination',\n roles: [\n defineRole({\n role: 'destination',\n description: 'URL, page section, or ARIA landmark to navigate to',\n required: true,\n expectedTypes: ['expression'],\n svoPosition: 1,\n sovPosition: 1,\n markerOverride: {\n en: 'to',\n es: 'a',\n ja: 'に',\n ar: 'إلى',\n ko: '로',\n zh: '到',\n tr: 'ya',\n fr: 'vers',\n },\n }),\n ],\n});\n\n// =============================================================================\n// click — Click an element by selector, text content, or ARIA label\n// EN: click the submit button / click #submit\n// ES: clic en enviar\n// JA: 送信ボタン を クリック\n// AR: انقر على إرسال\n// KO: 제출 을 클릭\n// ZH: 点击 提交\n// TR: gönder i tıkla\n// FR: cliquer sur envoyer\n// =============================================================================\n\nexport const clickSchema = defineCommand({\n action: 'click',\n description: 'Click an element identified by selector, text content, or ARIA label',\n category: 'interaction',\n primaryRole: 'patient',\n roles: [\n defineRole({\n role: 'patient',\n description: 'The element to click',\n required: true,\n expectedTypes: ['expression', 'selector'],\n svoPosition: 1,\n sovPosition: 1,\n markerOverride: {\n ja: 'を',\n ko: '을',\n ar: 'على',\n fr: 'sur',\n },\n }),\n ],\n});\n\n// =============================================================================\n// type — Type text into an input field\n// EN: type hello into search / type hello world\n// ES: escribir hola en búsqueda\n// JA: 検索 に こんにちは を 入力\n// AR: اكتب مرحبا في البحث\n// KO: 검색 에 안녕 을 입력\n// ZH: 输入 你好 到 搜索\n// TR: arama ya merhaba yaz\n// FR: taper bonjour dans recherche\n// =============================================================================\n\nexport const typeSchema = defineCommand({\n action: 'type',\n description: 'Type text into an input field',\n category: 'interaction',\n primaryRole: 'patient',\n roles: [\n defineRole({\n role: 'patient',\n description: 'The text to type',\n required: true,\n expectedTypes: ['expression'],\n svoPosition: 2,\n sovPosition: 2,\n markerOverride: { ja: 'を', ko: '을' },\n }),\n defineRole({\n role: 'destination',\n description: 'The input field to type into',\n required: false,\n expectedTypes: ['expression', 'selector'],\n svoPosition: 1,\n sovPosition: 3,\n markerOverride: {\n en: 'into',\n es: 'en',\n ja: 'に',\n ar: 'في',\n ko: '에',\n zh: '到',\n tr: 'ya',\n fr: 'dans',\n },\n }),\n ],\n});\n\n// =============================================================================\n// scroll — Scroll the page or element\n// EN: scroll down / scroll up by 500\n// ES: desplazar abajo\n// JA: 下 に スクロール\n// AR: تمرير لأسفل\n// KO: 아래 로 스크롤\n// ZH: 滚动 下\n// TR: aşağı kaydır\n// FR: défiler bas\n// =============================================================================\n\nexport const scrollSchema = defineCommand({\n action: 'scroll',\n description: 'Scroll the page or a specific element',\n category: 'navigation',\n primaryRole: 'manner',\n roles: [\n defineRole({\n role: 'manner',\n description: 'Direction to scroll (up, down, left, right, top, bottom)',\n required: true,\n expectedTypes: ['expression'],\n svoPosition: 2,\n sovPosition: 2,\n }),\n defineRole({\n role: 'quantity',\n description: 'Amount to scroll (pixels or \"page\")',\n required: false,\n expectedTypes: ['expression'],\n svoPosition: 1,\n sovPosition: 1,\n markerOverride: {\n en: 'by',\n es: 'por',\n ja: 'だけ',\n ar: 'ب',\n ko: '만큼',\n zh: '幅',\n tr: 'kadar',\n fr: 'de',\n },\n }),\n ],\n});\n\n// =============================================================================\n// read — Read element content aloud via TTS\n// EN: read the heading / read #article\n// ES: leer el título\n// JA: 見出し を 読む\n// AR: اقرأ العنوان\n// KO: 제목 을 읽기\n// ZH: 朗读 标题\n// TR: başlık oku\n// FR: lire le titre\n// =============================================================================\n\nexport const readSchema = defineCommand({\n action: 'read',\n description: 'Read element content aloud using text-to-speech',\n category: 'accessibility',\n primaryRole: 'patient',\n roles: [\n defineRole({\n role: 'patient',\n description: 'The element whose content to read aloud',\n required: true,\n expectedTypes: ['expression', 'selector'],\n svoPosition: 1,\n sovPosition: 1,\n markerOverride: { ja: 'を', ko: '을' },\n }),\n ],\n});\n\n// =============================================================================\n// zoom — Zoom the page in or out\n// EN: zoom in / zoom out / zoom reset\n// ES: zoom más / zoom menos\n// JA: ズーム イン / ズーム アウト\n// AR: تكبير / تصغير\n// KO: 확대 / 축소\n// ZH: 缩放 放大 / 缩放 缩小\n// TR: yakınlaş / uzaklaş\n// FR: zoomer / dézoomer\n// =============================================================================\n\nexport const zoomSchema = defineCommand({\n action: 'zoom',\n description: 'Zoom the page in or out',\n category: 'accessibility',\n primaryRole: 'manner',\n roles: [\n defineRole({\n role: 'manner',\n description: 'Zoom direction (in, out, reset)',\n required: true,\n expectedTypes: ['expression'],\n svoPosition: 1,\n sovPosition: 1,\n }),\n ],\n});\n\n// =============================================================================\n// select — Select text or an element\n// EN: select all / select the paragraph\n// ES: seleccionar todo\n// JA: 全て を 選択\n// AR: اختر الكل\n// KO: 전체 를 선택\n// ZH: 选择 全部\n// TR: hepsi seç\n// FR: sélectionner tout\n// =============================================================================\n\nexport const selectSchema = defineCommand({\n action: 'select',\n description: 'Select text content or an element',\n category: 'interaction',\n primaryRole: 'patient',\n roles: [\n defineRole({\n role: 'patient',\n description: 'The element or text to select',\n required: true,\n expectedTypes: ['expression', 'selector'],\n svoPosition: 1,\n sovPosition: 1,\n markerOverride: { ja: 'を', ko: '를' },\n }),\n ],\n});\n\n// =============================================================================\n// back — Navigate back in history\n// EN: back / go back\n// ES: atrás\n// JA: 戻る\n// AR: رجوع\n// KO: 뒤로\n// ZH: 返回\n// TR: geri\n// FR: retour\n// =============================================================================\n\nexport const backSchema = defineCommand({\n action: 'back',\n description: 'Navigate to the previous page in history',\n category: 'navigation',\n primaryRole: 'quantity',\n roles: [\n defineRole({\n role: 'quantity',\n description: 'Number of pages to go back (default: 1)',\n required: false,\n expectedTypes: ['expression'],\n svoPosition: 1,\n sovPosition: 1,\n }),\n ],\n});\n\n// =============================================================================\n// forward — Navigate forward in history\n// EN: forward\n// ES: adelante\n// JA: 進む\n// AR: تقدم\n// KO: 앞으로\n// ZH: 前进\n// TR: ileri\n// FR: avancer\n// =============================================================================\n\nexport const forwardSchema = defineCommand({\n action: 'forward',\n description: 'Navigate to the next page in history',\n category: 'navigation',\n primaryRole: 'quantity',\n roles: [\n defineRole({\n role: 'quantity',\n description: 'Number of pages to go forward (default: 1)',\n required: false,\n expectedTypes: ['expression'],\n svoPosition: 1,\n sovPosition: 1,\n }),\n ],\n});\n\n// =============================================================================\n// focus — Move keyboard focus to an element\n// EN: focus search / focus #email\n// ES: enfocar búsqueda\n// JA: 検索 に フォーカス\n// AR: ركّز على البحث\n// KO: 검색 에 포커스\n// ZH: 聚焦 搜索\n// TR: arama ya odakla\n// FR: focaliser recherche\n// =============================================================================\n\nexport const focusSchema = defineCommand({\n action: 'focus',\n description: 'Move keyboard focus to an element',\n category: 'accessibility',\n primaryRole: 'patient',\n roles: [\n defineRole({\n role: 'patient',\n description: 'The element to focus',\n required: true,\n expectedTypes: ['expression', 'selector'],\n svoPosition: 1,\n sovPosition: 1,\n markerOverride: {\n ja: 'に',\n ko: '에',\n ar: 'على',\n tr: 'ya',\n },\n }),\n ],\n});\n\n// =============================================================================\n// close — Close tab, dialog, or modal\n// EN: close / close dialog / close tab\n// ES: cerrar / cerrar diálogo\n// JA: 閉じる / ダイアログ を 閉じる\n// AR: أغلق / أغلق الحوار\n// KO: 닫기 / 대화상자 를 닫기\n// ZH: 关闭 / 关闭 对话框\n// TR: kapat / diyalog kapat\n// FR: fermer / fermer dialogue\n// =============================================================================\n\nexport const closeSchema = defineCommand({\n action: 'close',\n description: 'Close the current tab, dialog, or modal',\n category: 'interaction',\n primaryRole: 'patient',\n roles: [\n defineRole({\n role: 'patient',\n description: 'What to close (tab, dialog, modal, menu)',\n required: false,\n expectedTypes: ['expression'],\n svoPosition: 1,\n sovPosition: 1,\n markerOverride: { ja: 'を', ko: '를' },\n }),\n ],\n});\n\n// =============================================================================\n// open — Open a link, tab, or menu\n// EN: open settings / open #menu\n// ES: abrir configuración\n// JA: 設定 を 開く\n// AR: افتح الإعدادات\n// KO: 설정 을 열기\n// ZH: 打开 设置\n// TR: ayarlar aç\n// FR: ouvrir paramètres\n// =============================================================================\n\nexport const openSchema = defineCommand({\n action: 'open',\n description: 'Open a link in a new tab, or open a menu/dropdown',\n category: 'interaction',\n primaryRole: 'patient',\n roles: [\n defineRole({\n role: 'patient',\n description: 'What to open (link, tab, menu, URL)',\n required: true,\n expectedTypes: ['expression'],\n svoPosition: 1,\n sovPosition: 1,\n markerOverride: { ja: 'を', ko: '을' },\n }),\n ],\n});\n\n// =============================================================================\n// search — Search on page or via search form\n// EN: search hello / search hello in page\n// ES: buscar hola en página\n// JA: ページ で こんにちは を 検索\n// AR: ابحث عن مرحبا في الصفحة\n// KO: 페이지 에서 안녕 을 검색\n// ZH: 搜索 你好\n// TR: sayfa da merhaba ara\n// FR: chercher bonjour dans page\n// =============================================================================\n\nexport const searchSchema = defineCommand({\n action: 'search',\n description: 'Search for text on the page or via a search form',\n category: 'interaction',\n primaryRole: 'patient',\n roles: [\n defineRole({\n role: 'patient',\n description: 'The search query text',\n required: true,\n expectedTypes: ['expression'],\n svoPosition: 2,\n sovPosition: 2,\n markerOverride: {\n ar: 'عن',\n ja: 'を',\n ko: '을',\n },\n }),\n defineRole({\n role: 'destination',\n description: 'Where to search (page, site, or search field)',\n required: false,\n expectedTypes: ['expression'],\n svoPosition: 1,\n sovPosition: 3,\n markerOverride: {\n en: 'in',\n es: 'en',\n ja: 'で',\n ar: 'في',\n ko: '에서',\n zh: '在',\n tr: 'da',\n fr: 'dans',\n },\n }),\n ],\n});\n\n// =============================================================================\n// help — List available commands or get help\n// EN: help / help navigate\n// ES: ayuda / ayuda navegar\n// JA: ヘルプ / 移動 の ヘルプ\n// AR: مساعدة / مساعدة انتقل\n// KO: 도움말 / 이동 도움말\n// ZH: 帮助 / 导航 帮助\n// TR: yardım / git yardım\n// FR: aide / aide naviguer\n// =============================================================================\n\nexport const helpSchema = defineCommand({\n action: 'help',\n description: 'List available voice commands or get help for a specific command',\n category: 'meta',\n primaryRole: 'patient',\n roles: [\n defineRole({\n role: 'patient',\n description: 'Specific command to get help for (optional)',\n required: false,\n expectedTypes: ['expression'],\n svoPosition: 1,\n sovPosition: 1,\n }),\n ],\n});\n\n// =============================================================================\n// All Schemas\n// =============================================================================\n\nexport const allSchemas: CommandSchema[] = [\n navigateSchema,\n clickSchema,\n typeSchema,\n scrollSchema,\n readSchema,\n zoomSchema,\n selectSchema,\n backSchema,\n forwardSchema,\n focusSchema,\n closeSchema,\n openSchema,\n searchSchema,\n helpSchema,\n];\n","/**\n * Voice/Accessibility Language Profiles\n *\n * Pattern generation profiles for each supported language (8 total).\n * These define keyword translations and word order for pattern generation.\n *\n * Role markers are specified via `markerOverride` on each schema role\n * (in schemas/index.ts). Profile-level roleMarkers are only needed\n * when the default position (SOV=after, else=before) is wrong.\n */\n\nimport type { PatternGenLanguageProfile } from '@lokascript/framework';\n\n// =============================================================================\n// English (SVO)\n// =============================================================================\n\nexport const enProfile: PatternGenLanguageProfile = {\n code: 'en',\n wordOrder: 'SVO',\n keywords: {\n navigate: { primary: 'navigate', alternatives: ['go'] },\n click: { primary: 'click', alternatives: ['press', 'tap'] },\n type: { primary: 'type', alternatives: ['enter'] },\n scroll: { primary: 'scroll' },\n read: { primary: 'read', alternatives: ['say'] },\n zoom: { primary: 'zoom' },\n select: { primary: 'select' },\n back: { primary: 'back' },\n forward: { primary: 'forward' },\n focus: { primary: 'focus' },\n close: { primary: 'close' },\n open: { primary: 'open' },\n search: { primary: 'search', alternatives: ['find'] },\n help: { primary: 'help' },\n },\n roleMarkers: {},\n};\n\n// =============================================================================\n// Spanish (SVO)\n// =============================================================================\n\nexport const esProfile: PatternGenLanguageProfile = {\n code: 'es',\n wordOrder: 'SVO',\n keywords: {\n navigate: { primary: 'navegar', alternatives: ['ir'] },\n click: { primary: 'clic', alternatives: ['pulsar'] },\n type: { primary: 'escribir' },\n scroll: { primary: 'desplazar' },\n read: { primary: 'leer' },\n zoom: { primary: 'zoom' },\n select: { primary: 'seleccionar' },\n back: { primary: 'atrás', alternatives: ['volver'] },\n forward: { primary: 'adelante' },\n focus: { primary: 'enfocar' },\n close: { primary: 'cerrar' },\n open: { primary: 'abrir' },\n search: { primary: 'buscar' },\n help: { primary: 'ayuda' },\n },\n roleMarkers: {},\n};\n\n// =============================================================================\n// Japanese (SOV)\n// =============================================================================\n\nexport const jaProfile: PatternGenLanguageProfile = {\n code: 'ja',\n wordOrder: 'SOV',\n keywords: {\n navigate: { primary: '移動' },\n click: { primary: 'クリック' },\n type: { primary: '入力' },\n scroll: { primary: 'スクロール' },\n read: { primary: '読む' },\n zoom: { primary: 'ズーム' },\n select: { primary: '選択' },\n back: { primary: '戻る' },\n forward: { primary: '進む' },\n focus: { primary: 'フォーカス' },\n close: { primary: '閉じる' },\n open: { primary: '開く' },\n search: { primary: '検索' },\n help: { primary: 'ヘルプ' },\n },\n roleMarkers: {},\n};\n\n// =============================================================================\n// Arabic (VSO)\n// =============================================================================\n\nexport const arProfile: PatternGenLanguageProfile = {\n code: 'ar',\n wordOrder: 'VSO',\n keywords: {\n navigate: { primary: 'انتقل' },\n click: { primary: 'انقر' },\n type: { primary: 'اكتب' },\n scroll: { primary: 'تمرير' },\n read: { primary: 'اقرأ' },\n zoom: { primary: 'تكبير' },\n select: { primary: 'اختر' },\n back: { primary: 'رجوع' },\n forward: { primary: 'تقدم' },\n focus: { primary: 'ركز' },\n close: { primary: 'أغلق' },\n open: { primary: 'افتح' },\n search: { primary: 'ابحث' },\n help: { primary: 'مساعدة' },\n },\n roleMarkers: {},\n};\n\n// =============================================================================\n// Korean (SOV)\n// =============================================================================\n\nexport const koProfile: PatternGenLanguageProfile = {\n code: 'ko',\n wordOrder: 'SOV',\n keywords: {\n navigate: { primary: '이동' },\n click: { primary: '클릭' },\n type: { primary: '입력' },\n scroll: { primary: '스크롤' },\n read: { primary: '읽기' },\n zoom: { primary: '확대' },\n select: { primary: '선택' },\n back: { primary: '뒤로' },\n forward: { primary: '앞으로' },\n focus: { primary: '포커스' },\n close: { primary: '닫기' },\n open: { primary: '열기' },\n search: { primary: '검색' },\n help: { primary: '도움말' },\n },\n roleMarkers: {},\n};\n\n// =============================================================================\n// Chinese (SVO)\n// =============================================================================\n\nexport const zhProfile: PatternGenLanguageProfile = {\n code: 'zh',\n wordOrder: 'SVO',\n keywords: {\n navigate: { primary: '导航' },\n click: { primary: '点击' },\n type: { primary: '输入' },\n scroll: { primary: '滚动' },\n read: { primary: '朗读' },\n zoom: { primary: '缩放' },\n select: { primary: '选择' },\n back: { primary: '返回' },\n forward: { primary: '前进' },\n focus: { primary: '聚焦' },\n close: { primary: '关闭' },\n open: { primary: '打开' },\n search: { primary: '搜索' },\n help: { primary: '帮助' },\n },\n roleMarkers: {},\n};\n\n// =============================================================================\n// Turkish (SOV)\n// =============================================================================\n\nexport const trProfile: PatternGenLanguageProfile = {\n code: 'tr',\n wordOrder: 'SOV',\n keywords: {\n navigate: { primary: 'git' },\n click: { primary: 'tıkla' },\n type: { primary: 'yaz' },\n scroll: { primary: 'kaydır' },\n read: { primary: 'oku' },\n zoom: { primary: 'yakınlaş' },\n select: { primary: 'seç' },\n back: { primary: 'geri' },\n forward: { primary: 'ileri' },\n focus: { primary: 'odakla' },\n close: { primary: 'kapat' },\n open: { primary: 'aç' },\n search: { primary: 'ara' },\n help: { primary: 'yardım' },\n },\n roleMarkers: {},\n};\n\n// =============================================================================\n// French (SVO)\n// =============================================================================\n\nexport const frProfile: PatternGenLanguageProfile = {\n code: 'fr',\n wordOrder: 'SVO',\n keywords: {\n navigate: { primary: 'naviguer', alternatives: ['aller'] },\n click: { primary: 'cliquer' },\n type: { primary: 'taper', alternatives: ['écrire'] },\n scroll: { primary: 'défiler' },\n read: { primary: 'lire' },\n zoom: { primary: 'zoomer' },\n select: { primary: 'sélectionner' },\n back: { primary: 'retour' },\n forward: { primary: 'avancer' },\n focus: { primary: 'focaliser' },\n close: { primary: 'fermer' },\n open: { primary: 'ouvrir' },\n search: { primary: 'chercher', alternatives: ['rechercher'] },\n help: { primary: 'aide' },\n },\n roleMarkers: {},\n};\n\n// =============================================================================\n// All Profiles\n// =============================================================================\n\nexport const allProfiles = [\n enProfile,\n esProfile,\n jaProfile,\n arProfile,\n koProfile,\n zhProfile,\n trProfile,\n frProfile,\n];\n","/**\n * Voice/Accessibility Tokenizers\n *\n * Language-specific tokenizers for voice command input (8 languages).\n * All tokenizers include CSS selector support (#id, .class) since\n * voice commands may reference DOM elements by selector.\n */\n\nimport { createSimpleTokenizer } from '@lokascript/framework';\nimport type { LanguageTokenizer, ValueExtractor, ExtractionResult } from '@lokascript/framework';\n\n// =============================================================================\n// CSS Selector Extractor\n// Handles #id and .class references in voice commands\n// =============================================================================\n\nclass CSSSelectorExtractor implements ValueExtractor {\n readonly name = 'css-selector';\n\n canExtract(input: string, position: number): boolean {\n const ch = input[position];\n return ch === '#' || ch === '.';\n }\n\n extract(input: string, position: number): ExtractionResult | null {\n const prefix = input[position];\n if (prefix !== '#' && prefix !== '.') return null;\n\n let end = position + 1;\n // CSS identifiers: Unicode letters, digits, hyphens, underscores\n while (end < input.length && /[\\p{L}\\p{N}_-]/u.test(input[end])) {\n end++;\n }\n\n if (end === position + 1) return null; // just # or . alone\n return { value: input.slice(position, end), length: end - position };\n }\n}\n\n// =============================================================================\n// Latin Extended Identifier Extractor\n// Handles Latin-script languages with diacritics (French à, é; Turkish ş, ç, ü)\n// =============================================================================\n\nclass LatinExtendedIdentifierExtractor implements ValueExtractor {\n readonly name = 'latin-extended-identifier';\n\n canExtract(input: string, position: number): boolean {\n return /\\p{L}/u.test(input[position]);\n }\n\n extract(input: string, position: number): ExtractionResult | null {\n let end = position;\n while (end < input.length && /[\\p{L}\\p{N}_-]/u.test(input[end])) {\n end++;\n }\n if (end === position) return null;\n return { value: input.slice(position, end), length: end - position };\n }\n}\n\n// Shared CSS selector extractor instance\nconst cssSelectorExtractor = new CSSSelectorExtractor();\n\n// =============================================================================\n// English\n// =============================================================================\n\nexport const EnglishVoiceTokenizer: LanguageTokenizer = createSimpleTokenizer({\n language: 'en',\n direction: 'ltr',\n customExtractors: [cssSelectorExtractor],\n keywords: [\n // commands\n 'navigate',\n 'go',\n 'click',\n 'press',\n 'tap',\n 'type',\n 'enter',\n 'scroll',\n 'read',\n 'say',\n 'zoom',\n 'select',\n 'back',\n 'forward',\n 'focus',\n 'close',\n 'open',\n 'search',\n 'find',\n 'help',\n // markers\n 'to',\n 'into',\n 'by',\n 'in',\n 'on',\n 'the',\n 'a',\n // direction words\n 'up',\n 'down',\n 'left',\n 'right',\n 'top',\n 'bottom',\n // zoom words\n 'in',\n 'out',\n 'reset',\n // targets\n 'tab',\n 'dialog',\n 'modal',\n 'menu',\n 'page',\n 'all',\n ],\n caseInsensitive: true,\n});\n\n// =============================================================================\n// Spanish\n// =============================================================================\n\nexport const SpanishVoiceTokenizer: LanguageTokenizer = createSimpleTokenizer({\n language: 'es',\n direction: 'ltr',\n customExtractors: [cssSelectorExtractor, new LatinExtendedIdentifierExtractor()],\n keywords: [\n 'navegar',\n 'ir',\n 'clic',\n 'pulsar',\n 'escribir',\n 'desplazar',\n 'leer',\n 'zoom',\n 'seleccionar',\n 'atrás',\n 'volver',\n 'adelante',\n 'enfocar',\n 'cerrar',\n 'abrir',\n 'buscar',\n 'ayuda',\n 'a',\n 'en',\n 'por',\n 'el',\n 'la',\n 'de',\n 'sur',\n 'arriba',\n 'abajo',\n 'izquierda',\n 'derecha',\n 'más',\n 'menos',\n 'todo',\n 'página',\n 'diálogo',\n ],\n caseInsensitive: true,\n});\n\n// =============================================================================\n// Japanese\n// =============================================================================\n\nexport const JapaneseVoiceTokenizer: LanguageTokenizer = createSimpleTokenizer({\n language: 'ja',\n direction: 'ltr',\n customExtractors: [cssSelectorExtractor],\n keywords: [\n '移動',\n 'クリック',\n '入力',\n 'スクロール',\n '読む',\n 'ズーム',\n '選択',\n '戻る',\n '進む',\n 'フォーカス',\n '閉じる',\n '開く',\n '検索',\n 'ヘルプ',\n 'を',\n 'に',\n 'で',\n 'の',\n 'だけ',\n '上',\n '下',\n '左',\n '右',\n 'イン',\n 'アウト',\n 'リセット',\n 'タブ',\n 'ダイアログ',\n 'ページ',\n '全て',\n ],\n keywordExtras: [\n { native: '移動', normalized: 'navigate' },\n { native: 'クリック', normalized: 'click' },\n { native: '入力', normalized: 'type' },\n { native: 'スクロール', normalized: 'scroll' },\n { native: '読む', normalized: 'read' },\n { native: 'ズーム', normalized: 'zoom' },\n { native: '選択', normalized: 'select' },\n { native: '戻る', normalized: 'back' },\n { native: '進む', normalized: 'forward' },\n { native: 'フォーカス', normalized: 'focus' },\n { native: '閉じる', normalized: 'close' },\n { native: '開く', normalized: 'open' },\n { native: '検索', normalized: 'search' },\n { native: 'ヘルプ', normalized: 'help' },\n { native: 'を', normalized: 'wo' },\n { native: 'に', normalized: 'ni' },\n { native: 'で', normalized: 'de' },\n ],\n keywordProfile: {\n keywords: {\n navigate: { primary: '移動' },\n click: { primary: 'クリック' },\n type: { primary: '入力' },\n scroll: { primary: 'スクロール' },\n read: { primary: '読む' },\n zoom: { primary: 'ズーム' },\n select: { primary: '選択' },\n back: { primary: '戻る' },\n forward: { primary: '進む' },\n focus: { primary: 'フォーカス' },\n close: { primary: '閉じる' },\n open: { primary: '開く' },\n search: { primary: '検索' },\n help: { primary: 'ヘルプ' },\n },\n },\n caseInsensitive: false,\n});\n\n// =============================================================================\n// Arabic (VSO)\n// =============================================================================\n\nexport const ArabicVoiceTokenizer: LanguageTokenizer = createSimpleTokenizer({\n language: 'ar',\n direction: 'rtl',\n customExtractors: [cssSelectorExtractor],\n keywords: [\n 'انتقل',\n 'انقر',\n 'اكتب',\n 'تمرير',\n 'اقرأ',\n 'تكبير',\n 'اختر',\n 'رجوع',\n 'تقدم',\n 'ركز',\n 'أغلق',\n 'افتح',\n 'ابحث',\n 'مساعدة',\n 'إلى',\n 'على',\n 'في',\n 'عن',\n 'ب',\n 'أعلى',\n 'أسفل',\n 'يسار',\n 'يمين',\n 'الكل',\n 'الصفحة',\n 'الحوار',\n ],\n keywordExtras: [\n { native: 'انتقل', normalized: 'navigate' },\n { native: 'انقر', normalized: 'click' },\n { native: 'اكتب', normalized: 'type' },\n { native: 'تمرير', normalized: 'scroll' },\n { native: 'اقرأ', normalized: 'read' },\n { native: 'تكبير', normalized: 'zoom' },\n { native: 'اختر', normalized: 'select' },\n { native: 'رجوع', normalized: 'back' },\n { native: 'تقدم', normalized: 'forward' },\n { native: 'ركز', normalized: 'focus' },\n { native: 'أغلق', normalized: 'close' },\n { native: 'افتح', normalized: 'open' },\n { native: 'ابحث', normalized: 'search' },\n { native: 'مساعدة', normalized: 'help' },\n { native: 'إلى', normalized: 'to' },\n { native: 'على', normalized: 'on' },\n { native: 'في', normalized: 'in' },\n { native: 'عن', normalized: 'about' },\n ],\n keywordProfile: {\n keywords: {\n navigate: { primary: 'انتقل' },\n click: { primary: 'انقر' },\n type: { primary: 'اكتب' },\n scroll: { primary: 'تمرير' },\n read: { primary: 'اقرأ' },\n zoom: { primary: 'تكبير' },\n select: { primary: 'اختر' },\n back: { primary: 'رجوع' },\n forward: { primary: 'تقدم' },\n focus: { primary: 'ركز' },\n close: { primary: 'أغلق' },\n open: { primary: 'افتح' },\n search: { primary: 'ابحث' },\n help: { primary: 'مساعدة' },\n },\n },\n caseInsensitive: false,\n});\n\n// =============================================================================\n// Korean (SOV)\n// =============================================================================\n\nexport const KoreanVoiceTokenizer: LanguageTokenizer = createSimpleTokenizer({\n language: 'ko',\n direction: 'ltr',\n customExtractors: [cssSelectorExtractor],\n keywords: [\n '이동',\n '클릭',\n '입력',\n '스크롤',\n '읽기',\n '확대',\n '선택',\n '뒤로',\n '앞으로',\n '포커스',\n '닫기',\n '열기',\n '검색',\n '도움말',\n '을',\n '를',\n '에',\n '에서',\n '로',\n '만큼',\n '위',\n '아래',\n '왼쪽',\n '오른쪽',\n '전체',\n '탭',\n '대화상자',\n '페이지',\n ],\n keywordExtras: [\n { native: '이동', normalized: 'navigate' },\n { native: '클릭', normalized: 'click' },\n { native: '입력', normalized: 'type' },\n { native: '스크롤', normalized: 'scroll' },\n { native: '읽기', normalized: 'read' },\n { native: '확대', normalized: 'zoom' },\n { native: '선택', normalized: 'select' },\n { native: '뒤로', normalized: 'back' },\n { native: '앞으로', normalized: 'forward' },\n { native: '포커스', normalized: 'focus' },\n { native: '닫기', normalized: 'close' },\n { native: '열기', normalized: 'open' },\n { native: '검색', normalized: 'search' },\n { native: '도움말', normalized: 'help' },\n { native: '을', normalized: 'eul' },\n { native: '를', normalized: 'reul' },\n { native: '에', normalized: 'e' },\n { native: '에서', normalized: 'eseo' },\n { native: '로', normalized: 'ro' },\n ],\n keywordProfile: {\n keywords: {\n navigate: { primary: '이동' },\n click: { primary: '클릭' },\n type: { primary: '입력' },\n scroll: { primary: '스크롤' },\n read: { primary: '읽기' },\n zoom: { primary: '확대' },\n select: { primary: '선택' },\n back: { primary: '뒤로' },\n forward: { primary: '앞으로' },\n focus: { primary: '포커스' },\n close: { primary: '닫기' },\n open: { primary: '열기' },\n search: { primary: '검색' },\n help: { primary: '도움말' },\n },\n },\n caseInsensitive: false,\n});\n\n// =============================================================================\n// Chinese (SVO)\n// =============================================================================\n\nexport const ChineseVoiceTokenizer: LanguageTokenizer = createSimpleTokenizer({\n language: 'zh',\n direction: 'ltr',\n customExtractors: [cssSelectorExtractor],\n keywords: [\n '导航',\n '点击',\n '输入',\n '滚动',\n '朗读',\n '缩放',\n '选择',\n '返回',\n '前进',\n '聚焦',\n '关闭',\n '打开',\n '搜索',\n '帮助',\n '到',\n '在',\n '幅',\n '上',\n '下',\n '左',\n '右',\n '全部',\n '标签',\n '对话框',\n '页面',\n '放大',\n '缩小',\n '重置',\n ],\n keywordExtras: [\n { native: '导航', normalized: 'navigate' },\n { native: '点击', normalized: 'click' },\n { native: '输入', normalized: 'type' },\n { native: '滚动', normalized: 'scroll' },\n { native: '朗读', normalized: 'read' },\n { native: '缩放', normalized: 'zoom' },\n { native: '选择', normalized: 'select' },\n { native: '返回', normalized: 'back' },\n { native: '前进', normalized: 'forward' },\n { native: '聚焦', normalized: 'focus' },\n { native: '关闭', normalized: 'close' },\n { native: '打开', normalized: 'open' },\n { native: '搜索', normalized: 'search' },\n { native: '帮助', normalized: 'help' },\n { native: '到', normalized: 'to' },\n { native: '在', normalized: 'in' },\n ],\n keywordProfile: {\n keywords: {\n navigate: { primary: '导航' },\n click: { primary: '点击' },\n type: { primary: '输入' },\n scroll: { primary: '滚动' },\n read: { primary: '朗读' },\n zoom: { primary: '缩放' },\n select: { primary: '选择' },\n back: { primary: '返回' },\n forward: { primary: '前进' },\n focus: { primary: '聚焦' },\n close: { primary: '关闭' },\n open: { primary: '打开' },\n search: { primary: '搜索' },\n help: { primary: '帮助' },\n },\n },\n caseInsensitive: false,\n});\n\n// =============================================================================\n// Turkish (SOV)\n// =============================================================================\n\nexport const TurkishVoiceTokenizer: LanguageTokenizer = createSimpleTokenizer({\n language: 'tr',\n direction: 'ltr',\n customExtractors: [cssSelectorExtractor, new LatinExtendedIdentifierExtractor()],\n keywords: [\n 'git',\n 'tıkla',\n 'yaz',\n 'kaydır',\n 'oku',\n 'yakınlaş',\n 'seç',\n 'geri',\n 'ileri',\n 'odakla',\n 'kapat',\n 'aç',\n 'ara',\n 'yardım',\n 'ya',\n 'da',\n 'kadar',\n 'yukarı',\n 'aşağı',\n 'sol',\n 'sağ',\n 'sekme',\n 'diyalog',\n 'sayfa',\n 'hepsi',\n ],\n keywordExtras: [\n { native: 'git', normalized: 'navigate' },\n { native: 'tıkla', normalized: 'click' },\n { native: 'yaz', normalized: 'type' },\n { native: 'kaydır', normalized: 'scroll' },\n { native: 'oku', normalized: 'read' },\n { native: 'yakınlaş', normalized: 'zoom' },\n { native: 'seç', normalized: 'select' },\n { native: 'geri', normalized: 'back' },\n { native: 'ileri', normalized: 'forward' },\n { native: 'odakla', normalized: 'focus' },\n { native: 'kapat', normalized: 'close' },\n { native: 'aç', normalized: 'open' },\n { native: 'ara', normalized: 'search' },\n { native: 'yardım', normalized: 'help' },\n { native: 'ya', normalized: 'to' },\n { native: 'da', normalized: 'in' },\n ],\n keywordProfile: {\n keywords: {\n navigate: { primary: 'git' },\n click: { primary: 'tıkla' },\n type: { primary: 'yaz' },\n scroll: { primary: 'kaydır' },\n read: { primary: 'oku' },\n zoom: { primary: 'yakınlaş' },\n select: { primary: 'seç' },\n back: { primary: 'geri' },\n forward: { primary: 'ileri' },\n focus: { primary: 'odakla' },\n close: { primary: 'kapat' },\n open: { primary: 'aç' },\n search: { primary: 'ara' },\n help: { primary: 'yardım' },\n },\n },\n caseInsensitive: true,\n});\n\n// =============================================================================\n// French (SVO)\n// =============================================================================\n\nexport const FrenchVoiceTokenizer: LanguageTokenizer = createSimpleTokenizer({\n language: 'fr',\n direction: 'ltr',\n customExtractors: [cssSelectorExtractor, new LatinExtendedIdentifierExtractor()],\n keywords: [\n 'naviguer',\n 'aller',\n 'cliquer',\n 'taper',\n 'écrire',\n 'défiler',\n 'lire',\n 'zoomer',\n 'sélectionner',\n 'retour',\n 'avancer',\n 'focaliser',\n 'fermer',\n 'ouvrir',\n 'chercher',\n 'rechercher',\n 'aide',\n 'vers',\n 'dans',\n 'de',\n 'sur',\n 'le',\n 'la',\n 'les',\n 'un',\n 'une',\n 'haut',\n 'bas',\n 'gauche',\n 'droite',\n 'onglet',\n 'dialogue',\n 'page',\n 'tout',\n ],\n keywordExtras: [\n { native: 'naviguer', normalized: 'navigate' },\n { native: 'aller', normalized: 'go' },\n { native: 'cliquer', normalized: 'click' },\n { native: 'taper', normalized: 'type' },\n { native: 'écrire', normalized: 'write' },\n { native: 'défiler', normalized: 'scroll' },\n { native: 'lire', normalized: 'read' },\n { native: 'zoomer', normalized: 'zoom' },\n { native: 'sélectionner', normalized: 'select' },\n { native: 'retour', normalized: 'back' },\n { native: 'avancer', normalized: 'forward' },\n { native: 'focaliser', normalized: 'focus' },\n { native: 'fermer', normalized: 'close' },\n { native: 'ouvrir', normalized: 'open' },\n { native: 'chercher', normalized: 'search' },\n { native: 'rechercher', normalized: 'search' },\n { native: 'aide', normalized: 'help' },\n { native: 'vers', normalized: 'to' },\n { native: 'dans', normalized: 'in' },\n { native: 'sur', normalized: 'on' },\n ],\n keywordProfile: {\n keywords: {\n navigate: { primary: 'naviguer', alternatives: ['aller'] },\n click: { primary: 'cliquer' },\n type: { primary: 'taper', alternatives: ['écrire'] },\n scroll: { primary: 'défiler' },\n read: { primary: 'lire' },\n zoom: { primary: 'zoomer' },\n select: { primary: 'sélectionner' },\n back: { primary: 'retour' },\n forward: { primary: 'avancer' },\n focus: { primary: 'focaliser' },\n close: { primary: 'fermer' },\n open: { primary: 'ouvrir' },\n search: { primary: 'chercher', alternatives: ['rechercher'] },\n help: { primary: 'aide' },\n },\n },\n caseInsensitive: true,\n});\n","/**\n * Voice/Accessibility Code Generator\n *\n * Transforms semantic AST nodes into executable JavaScript snippets\n * for DOM manipulation, navigation, and accessibility actions.\n */\n\nimport type { CodeGenerator, SemanticNode } from '@lokascript/framework';\nimport { extractRoleValue } from '@lokascript/framework';\n\n// =============================================================================\n// String Escaping\n// =============================================================================\n\nfunction esc(s: string): string {\n return s\n .replace(/\\\\/g, '\\\\\\\\')\n .replace(/'/g, \"\\\\'\")\n .replace(/\"/g, '\\\\\"')\n .replace(/`/g, '\\\\`')\n .replace(/\\n/g, '\\\\n')\n .replace(/\\r/g, '\\\\r')\n .replace(/\\$/g, '\\\\$');\n}\n\n// =============================================================================\n// Shared Element-Finding Helper (injected into generated code)\n// Self-initializing guard: safe to include multiple times, defines only once.\n// =============================================================================\n\nconst FIND_EL = [\n `if(!window._findEl){window._findEl=function(q,root){`,\n ` root=root||document;`,\n ` if(q.startsWith('#')||q.startsWith('.')||q.includes('[')){`,\n ` try{return root.querySelector(q)}catch(e){}`,\n ` }`,\n ` var el=root.querySelector('[aria-label=\"'+q+'\"]');`,\n ` if(el)return el;`,\n ` el=root.querySelector('[role=\"'+q+'\"]');`,\n ` if(el)return el;`,\n ` var c=root.querySelectorAll('button,a,input,[role=\"button\"],[tabindex]');`,\n ` var lq=q.toLowerCase();`,\n ` for(var i=0;i<c.length;i++){`,\n ` if((c[i].textContent||'').toLowerCase().includes(lq))return c[i];`,\n ` if((c[i].getAttribute('aria-label')||'').toLowerCase().includes(lq))return c[i];`,\n ` }`,\n ` return null;`,\n `}}`,\n].join('');\n\n// =============================================================================\n// i18n Word Sets (all 8 languages)\n// =============================================================================\n\nconst SELECT_ALL_WORDS = new Set(['all', 'todo', '全て', '全部', 'الكل', '전체', 'hepsi', 'tout']);\nconst TAB_WORDS = new Set(['tab', 'pestaña', 'タブ', '탭', '标签', 'sekme', 'onglet']);\nconst DIALOG_WORDS = new Set([\n 'dialog',\n 'modal',\n 'diálogo',\n 'ダイアログ',\n '대화상자',\n '对话框',\n 'diyalog',\n 'dialogue',\n]);\nconst PAGE_WORDS = new Set(['page', 'página', 'ページ', 'الصفحة', '페이지', '页面', 'sayfa']);\n\n// =============================================================================\n// Per-Command Generators\n// =============================================================================\n\nfunction generateNavigate(node: SemanticNode): string {\n const dest = extractRoleValue(node, 'destination');\n if (!dest) return '// navigate: missing destination';\n if (dest.startsWith('/') || dest.startsWith('http')) {\n return `window.location.href = '${esc(dest)}';`;\n }\n return [\n FIND_EL,\n `var el = _findEl('${esc(dest)}');`,\n `if (el) el.scrollIntoView({ behavior: 'smooth', block: 'start' });`,\n `else window.location.hash = '${esc(dest)}';`,\n ].join('\\n');\n}\n\nfunction generateClick(node: SemanticNode): string {\n const patient = extractRoleValue(node, 'patient');\n if (!patient) return '// click: missing target';\n return [FIND_EL, `var el = _findEl('${esc(patient)}');`, `if (el) el.click();`].join('\\n');\n}\n\nfunction generateType(node: SemanticNode): string {\n const text = extractRoleValue(node, 'patient');\n if (!text) return '// type: missing text';\n const dest = extractRoleValue(node, 'destination');\n const target = dest\n ? `_findEl('${esc(dest)}') || document.activeElement`\n : `document.activeElement`;\n return [\n FIND_EL,\n `var el = ${target};`,\n `if (el && ('value' in el || el.isContentEditable)) {`,\n ` if ('value' in el) { el.value = (el.value || '') + '${esc(text)}'; }`,\n ` else { el.textContent = (el.textContent || '') + '${esc(text)}'; }`,\n ` el.dispatchEvent(new Event('input', { bubbles: true }));`,\n `}`,\n ].join('\\n');\n}\n\nfunction generateScroll(node: SemanticNode): string {\n const manner = (extractRoleValue(node, 'manner') || 'down').toLowerCase();\n const quantity = extractRoleValue(node, 'quantity');\n const px = quantity ? parseInt(quantity, 10) || 300 : 300;\n\n switch (manner) {\n case 'up':\n return `window.scrollBy({ top: -${px}, behavior: 'smooth' });`;\n case 'down':\n return `window.scrollBy({ top: ${px}, behavior: 'smooth' });`;\n case 'left':\n return `window.scrollBy({ left: -${px}, behavior: 'smooth' });`;\n case 'right':\n return `window.scrollBy({ left: ${px}, behavior: 'smooth' });`;\n case 'top':\n return `window.scrollTo({ top: 0, behavior: 'smooth' });`;\n case 'bottom':\n return `window.scrollTo({ top: document.body.scrollHeight, behavior: 'smooth' });`;\n default:\n return `window.scrollBy({ top: ${px}, behavior: 'smooth' });`;\n }\n}\n\nfunction generateRead(node: SemanticNode): string {\n const patient = extractRoleValue(node, 'patient');\n if (!patient) return '// read: missing target';\n return [\n FIND_EL,\n `var el = _findEl('${esc(patient)}');`,\n `if (el && el.textContent) {`,\n ` var utterance = new SpeechSynthesisUtterance(el.textContent);`,\n ` speechSynthesis.speak(utterance);`,\n `}`,\n ].join('\\n');\n}\n\nfunction generateZoom(node: SemanticNode): string {\n const manner = (extractRoleValue(node, 'manner') || 'in').toLowerCase();\n if (manner === 'reset') {\n return [\n `document.documentElement.dataset.zoom = '1';`,\n `document.documentElement.style.transform = '';`,\n ].join('\\n');\n }\n const factor = manner === 'out' ? 0.9 : 1.1;\n return [\n `var s = parseFloat(document.documentElement.dataset.zoom || '1');`,\n `s = Math.round(s * ${factor} * 100) / 100;`,\n `document.documentElement.dataset.zoom = s;`,\n `document.documentElement.style.transform = 'scale(' + s + ')';`,\n `document.documentElement.style.transformOrigin = 'top left';`,\n ].join('\\n');\n}\n\nfunction generateSelect(node: SemanticNode): string {\n const patient = extractRoleValue(node, 'patient');\n if (!patient) return '// select: missing target';\n const target = SELECT_ALL_WORDS.has(patient) ? 'document.body' : `_findEl('${esc(patient)}')`;\n const lines = SELECT_ALL_WORDS.has(patient) ? [] : [FIND_EL];\n lines.push(\n `var el = ${target};`,\n `if (el) {`,\n ` var range = document.createRange();`,\n ` range.selectNodeContents(el);`,\n ` var sel = window.getSelection();`,\n ` sel.removeAllRanges();`,\n ` sel.addRange(range);`,\n `}`\n );\n return lines.join('\\n');\n}\n\nfunction generateBack(node: SemanticNode): string {\n const quantity = extractRoleValue(node, 'quantity');\n const n = quantity ? parseInt(quantity, 10) || 1 : 1;\n return `history.go(-${n});`;\n}\n\nfunction generateForward(node: SemanticNode): string {\n const quantity = extractRoleValue(node, 'quantity');\n const n = quantity ? parseInt(quantity, 10) || 1 : 1;\n return `history.go(${n});`;\n}\n\nfunction generateFocus(node: SemanticNode): string {\n const patient = extractRoleValue(node, 'patient');\n if (!patient) return '// focus: missing target';\n return [FIND_EL, `var el = _findEl('${esc(patient)}');`, `if (el) el.focus();`].join('\\n');\n}\n\nfunction generateClose(node: SemanticNode): string {\n const patient = extractRoleValue(node, 'patient') || '';\n if (TAB_WORDS.has(patient)) {\n return `window.close();`;\n }\n if (DIALOG_WORDS.has(patient)) {\n return `var d = document.querySelector('dialog[open]'); if (d) d.close();`;\n }\n // Default: try to close any open dialog or modal\n return [\n `var d = document.querySelector('dialog[open]');`,\n `if (d) { d.close(); }`,\n `else {`,\n ` var m = document.querySelector('[role=\"dialog\"], .modal.show, .modal.open');`,\n ` if (m) m.remove();`,\n `}`,\n ].join('\\n');\n}\n\nfunction generateOpen(node: SemanticNode): string {\n const patient = extractRoleValue(node, 'patient');\n if (!patient) return '// open: missing target';\n if (patient.startsWith('/') || patient.startsWith('http')) {\n return `window.open('${esc(patient)}', '_blank');`;\n }\n return [FIND_EL, `var el = _findEl('${esc(patient)}');`, `if (el) el.click();`].join('\\n');\n}\n\nfunction generateSearch(node: SemanticNode): string {\n const query = extractRoleValue(node, 'patient');\n if (!query) return '// search: missing query';\n const dest = extractRoleValue(node, 'destination');\n if (dest && PAGE_WORDS.has(dest)) {\n // window.find() is non-standard but no standard alternative exists for \"find in page\"\n return `window.find('${esc(query)}');`;\n }\n const selector = dest\n ? `'${esc(dest)}'`\n : `'input[type=\"search\"], [role=\"searchbox\"], input[name=\"q\"], input[name=\"search\"]'`;\n return [\n `var searchInput = document.querySelector(${selector});`,\n `if (searchInput) {`,\n ` searchInput.value = '${esc(query)}';`,\n ` searchInput.dispatchEvent(new Event('input', { bubbles: true }));`,\n ` if (searchInput.form) searchInput.form.submit();`,\n `}`,\n ].join('\\n');\n}\n\nfunction generateHelp(node: SemanticNode): string {\n const topic = extractRoleValue(node, 'patient');\n const commands = [\n 'navigate',\n 'click',\n 'type',\n 'scroll',\n 'read',\n 'zoom',\n 'select',\n 'back',\n 'forward',\n 'focus',\n 'close',\n 'open',\n 'search',\n 'help',\n ];\n if (topic) {\n return `console.log('Help: ${esc(topic)}');`;\n }\n return `console.log('Available commands: ${commands.join(', ')}');`;\n}\n\n// =============================================================================\n// Public Code Generator\n// =============================================================================\n\nexport const voiceCodeGenerator: CodeGenerator = {\n generate(node: SemanticNode): string {\n switch (node.action) {\n case 'navigate':\n return generateNavigate(node);\n case 'click':\n return generateClick(node);\n case 'type':\n return generateType(node);\n case 'scroll':\n return generateScroll(node);\n case 'read':\n return generateRead(node);\n case 'zoom':\n return generateZoom(node);\n case 'select':\n return generateSelect(node);\n case 'back':\n return generateBack(node);\n case 'forward':\n return generateForward(node);\n case 'focus':\n return generateFocus(node);\n case 'close':\n return generateClose(node);\n case 'open':\n return generateOpen(node);\n case 'search':\n return generateSearch(node);\n case 'help':\n return generateHelp(node);\n default:\n return `// Unknown voice command: ${node.action}`;\n }\n },\n};\n","/**\n * Voice Natural Language Renderer\n *\n * Renders a SemanticNode back into natural-language voice command syntax\n * for a target language. Inverse of the parser.\n *\n * Markers are derived from schemas (single source of truth) rather than\n * maintained as a parallel data structure.\n */\n\nimport type { SemanticNode, CommandSchema } from '@lokascript/framework';\nimport { extractRoleValue } from '@lokascript/framework';\nimport { allSchemas } from '../schemas/index';\n\n// =============================================================================\n// Keyword Tables\n// =============================================================================\n\nconst COMMAND_KEYWORDS: Record<string, Record<string, string>> = {\n navigate: {\n en: 'navigate',\n es: 'navegar',\n ja: '移動',\n ar: 'انتقل',\n ko: '이동',\n zh: '导航',\n tr: 'git',\n fr: 'naviguer',\n },\n click: {\n en: 'click',\n es: 'clic',\n ja: 'クリック',\n ar: 'انقر',\n ko: '클릭',\n zh: '点击',\n tr: 'tıkla',\n fr: 'cliquer',\n },\n type: {\n en: 'type',\n es: 'escribir',\n ja: '入力',\n ar: 'اكتب',\n ko: '입력',\n zh: '输入',\n tr: 'yaz',\n fr: 'taper',\n },\n scroll: {\n en: 'scroll',\n es: 'desplazar',\n ja: 'スクロール',\n ar: 'تمرير',\n ko: '스크롤',\n zh: '滚动',\n tr: 'kaydır',\n fr: 'défiler',\n },\n read: {\n en: 'read',\n es: 'leer',\n ja: '読む',\n ar: 'اقرأ',\n ko: '읽기',\n zh: '朗读',\n tr: 'oku',\n fr: 'lire',\n },\n zoom: {\n en: 'zoom',\n es: 'zoom',\n ja: 'ズーム',\n ar: 'تكبير',\n ko: '확대',\n zh: '缩放',\n tr: 'yakınlaş',\n fr: 'zoomer',\n },\n select: {\n en: 'select',\n es: 'seleccionar',\n ja: '選択',\n ar: 'اختر',\n ko: '선택',\n zh: '选择',\n tr: 'seç',\n fr: 'sélectionner',\n },\n back: {\n en: 'back',\n es: 'atrás',\n ja: '戻る',\n ar: 'رجوع',\n ko: '뒤로',\n zh: '返回',\n tr: 'geri',\n fr: 'retour',\n },\n forward: {\n en: 'forward',\n es: 'adelante',\n ja: '進む',\n ar: 'تقدم',\n ko: '앞으로',\n zh: '前进',\n tr: 'ileri',\n fr: 'avancer',\n },\n focus: {\n en: 'focus',\n es: 'enfocar',\n ja: 'フォーカス',\n ar: 'ركز',\n ko: '포커스',\n zh: '聚焦',\n tr: 'odakla',\n fr: 'focaliser',\n },\n close: {\n en: 'close',\n es: 'cerrar',\n ja: '閉じる',\n ar: 'أغلق',\n ko: '닫기',\n zh: '关闭',\n tr: 'kapat',\n fr: 'fermer',\n },\n open: {\n en: 'open',\n es: 'abrir',\n ja: '開く',\n ar: 'افتح',\n ko: '열기',\n zh: '打开',\n tr: 'aç',\n fr: 'ouvrir',\n },\n search: {\n en: 'search',\n es: 'buscar',\n ja: '検索',\n ar: 'ابحث',\n ko: '검색',\n zh: '搜索',\n tr: 'ara',\n fr: 'chercher',\n },\n help: {\n en: 'help',\n es: 'ayuda',\n ja: 'ヘルプ',\n ar: 'مساعدة',\n ko: '도움말',\n zh: '帮助',\n tr: 'yardım',\n fr: 'aide',\n },\n};\n\n// =============================================================================\n// Schema-Derived Marker Lookup (single source of truth)\n// =============================================================================\n\ntype MarkerLookup = Record<string, Record<string, Record<string, string>>>;\n\nfunction buildMarkerLookup(schemas: CommandSchema[]): MarkerLookup {\n const lookup: MarkerLookup = {};\n for (const schema of schemas) {\n const actionMarkers: Record<string, Record<string, string>> = {};\n for (const role of schema.roles) {\n if (role.markerOverride) {\n actionMarkers[role.role] = role.markerOverride as Record<string, string>;\n }\n }\n lookup[schema.action] = actionMarkers;\n }\n return lookup;\n}\n\nconst SCHEMA_MARKERS = buildMarkerLookup(allSchemas);\n\n/** Get marker for a specific action + role + language from schemas. */\nfunction getMarker(action: string, role: string, lang: string): string {\n return SCHEMA_MARKERS[action]?.[role]?.[lang] ?? '';\n}\n\n// =============================================================================\n// Word Order Helpers\n// =============================================================================\n\nconst SOV_LANGUAGES = new Set(['ja', 'ko', 'tr']);\n\nfunction kw(command: string, lang: string): string {\n return COMMAND_KEYWORDS[command]?.[lang] ?? command;\n}\n\n// =============================================================================\n// Per-Command Renderers\n// =============================================================================\n\nfunction renderSingleRole(node: SemanticNode, lang: string, roleName: string): string {\n const value = extractRoleValue(node, roleName) || '';\n const keyword = kw(node.action, lang);\n\n if (!value) return keyword;\n\n if (SOV_LANGUAGES.has(lang)) {\n const parts = [value];\n const marker = getMarker(node.action, roleName, lang);\n if (marker) parts.push(marker);\n parts.push(keyword);\n return parts.join(' ');\n }\n\n // SVO / VSO: keyword [marker] value\n const marker = getMarker(node.action, roleName, lang);\n if (marker) return `${keyword} ${marker} ${value}`;\n return `${keyword} ${value}`;\n}\n\nfunction renderNavigate(node: SemanticNode, lang: string): string {\n const dest = extractRoleValue(node, 'destination') || '';\n const keyword = kw('navigate', lang);\n\n if (!dest) return keyword;\n\n const marker = getMarker('navigate', 'destination', lang);\n\n if (SOV_LANGUAGES.has(lang)) {\n return marker ? `${dest} ${marker} ${keyword}` : `${dest} ${keyword}`;\n }\n\n return marker ? `${keyword} ${marker} ${dest}` : `${keyword} ${dest}`;\n}\n\nfunction renderClick(node: SemanticNode, lang: string): string {\n return renderSingleRole(node, lang, 'patient');\n}\n\nfunction renderType(node: SemanticNode, lang: string): string {\n const text = extractRoleValue(node, 'patient') || '';\n const dest = extractRoleValue(node, 'destination');\n const keyword = kw('type', lang);\n\n if (!text) return keyword;\n\n if (SOV_LANGUAGES.has(lang)) {\n const parts: string[] = [];\n if (dest) {\n parts.push(dest);\n const destMarker = getMarker('type', 'destination', lang);\n if (destMarker) parts.push(destMarker);\n }\n parts.push(text);\n const patientMarker = getMarker('type', 'patient', lang);\n if (patientMarker) parts.push(patientMarker);\n parts.push(keyword);\n return parts.join(' ');\n }\n\n // SVO: keyword text [into dest]\n const parts = [keyword, text];\n if (dest) {\n const destMarker = getMarker('type', 'destination', lang);\n if (destMarker) parts.push(destMarker);\n parts.push(dest);\n }\n return parts.filter(Boolean).join(' ');\n}\n\nfunction renderScroll(node: SemanticNode, lang: string): string {\n const manner = extractRoleValue(node, 'manner') || '';\n const keyword = kw('scroll', lang);\n\n if (!manner) return keyword;\n\n if (SOV_LANGUAGES.has(lang)) {\n return `${manner} ${keyword}`;\n }\n\n return `${keyword} ${manner}`;\n}\n\nfunction renderRead(node: SemanticNode, lang: string): string {\n return renderSingleRole(node, lang, 'patient');\n}\n\nfunction renderZoom(node: SemanticNode, lang: string): string {\n const manner = extractRoleValue(node, 'manner') || '';\n const keyword = kw('zoom', lang);\n\n if (!manner) return keyword;\n\n if (SOV_LANGUAGES.has(lang)) {\n return `${manner} ${keyword}`;\n }\n\n return `${keyword} ${manner}`;\n}\n\nfunction renderSelect(node: SemanticNode, lang: string): string {\n return renderSingleRole(node, lang, 'patient');\n}\n\nfunction renderBack(node: SemanticNode, lang: string): string {\n const quantity = extractRoleValue(node, 'quantity');\n const keyword = kw('back', lang);\n if (quantity) return `${keyword} ${quantity}`;\n return keyword;\n}\n\nfunction renderForward(node: SemanticNode, lang: string): string {\n const quantity = extractRoleValue(node, 'quantity');\n const keyword = kw('forward', lang);\n if (quantity) return `${keyword} ${quantity}`;\n return keyword;\n}\n\nfunction renderFocus(node: SemanticNode, lang: string): string {\n const patient = extractRoleValue(node, 'patient') || '';\n const keyword = kw('focus', lang);\n\n if (!patient) return keyword;\n\n if (SOV_LANGUAGES.has(lang)) {\n const marker = getMarker('focus', 'patient', lang);\n return marker ? `${patient} ${marker} ${keyword}` : `${patient} ${keyword}`;\n }\n\n return `${keyword} ${patient}`;\n}\n\nfunction renderClose(node: SemanticNode, lang: string): string {\n return renderSingleRole(node, lang, 'patient');\n}\n\nfunction renderOpen(node: SemanticNode, lang: string): string {\n return renderSingleRole(node, lang, 'patient');\n}\n\nfunction renderSearch(node: SemanticNode, lang: string): string {\n const query = extractRoleValue(node, 'patient') || '';\n const dest = extractRoleValue(node, 'destination');\n const keyword = kw('search', lang);\n\n if (!query) return keyword;\n\n if (SOV_LANGUAGES.has(lang)) {\n const parts: string[] = [];\n if (dest) {\n parts.push(dest);\n const destMarker = getMarker('search', 'destination', lang);\n if (destMarker) parts.push(destMarker);\n }\n parts.push(query);\n const patientMarker = getMarker('search', 'patient', lang);\n if (patientMarker) parts.push(patientMarker);\n parts.push(keyword);\n return parts.filter(Boolean).join(' ');\n }\n\n // SVO: keyword query [in dest]\n const parts = [keyword, query];\n if (dest) {\n const destMarker = getMarker('search', 'destination', lang);\n if (destMarker) parts.push(destMarker, dest);\n }\n return parts.join(' ');\n}\n\nfunction renderHelp(node: SemanticNode, lang: string): string {\n const topic = extractRoleValue(node, 'patient');\n const keyword = kw('help', lang);\n if (topic) return `${keyword} ${topic}`;\n return keyword;\n}\n\n// =============================================================================\n// Public API\n// =============================================================================\n\n/**\n * Render a voice SemanticNode to natural-language voice command text in the target language.\n */\nexport function renderVoice(node: SemanticNode, language: string): string {\n switch (node.action) {\n case 'navigate':\n return renderNavigate(node, language);\n case 'click':\n return renderClick(node, language);\n case 'type':\n return renderType(node, language);\n case 'scroll':\n return renderScroll(node, language);\n case 'read':\n return renderRead(node, language);\n case 'zoom':\n return renderZoom(node, language);\n case 'select':\n return renderSelect(node, language);\n case 'back':\n return renderBack(node, language);\n case 'forward':\n return renderForward(node, language);\n case 'focus':\n return renderFocus(node, language);\n case 'close':\n return renderClose(node, language);\n case 'open':\n return renderOpen(node, language);\n case 'search':\n return renderSearch(node, language);\n case 'help':\n return renderHelp(node, language);\n default:\n return `-- Unknown: ${node.action}`;\n }\n}\n","/**\n * Voice/Accessibility Domain Types\n */\n\nimport type { SemanticNode } from '@lokascript/framework';\nimport { extractRoleValue } from '@lokascript/framework';\n\n/**\n * Structured action spec extracted from a parsed voice command.\n * Useful for dispatchers that want typed access to command details\n * without re-parsing the SemanticNode.\n */\nexport interface VoiceActionSpec {\n action: string;\n target?: string;\n value?: string;\n direction?: string;\n amount?: string;\n metadata: {\n sourceLanguage: string;\n };\n}\n\n/**\n * Convert a parsed SemanticNode into a typed VoiceActionSpec.\n */\nexport function toVoiceActionSpec(node: SemanticNode, language: string): VoiceActionSpec {\n return {\n action: node.action,\n target: extractRoleValue(node, 'patient') || extractRoleValue(node, 'destination') || undefined,\n value: extractRoleValue(node, 'patient') || undefined,\n direction: extractRoleValue(node, 'manner') || undefined,\n amount: extractRoleValue(node, 'quantity') || undefined,\n metadata: { sourceLanguage: language },\n };\n}\n"],"mappings":"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","names":["extractRoleValue","extractRoleValue","marker","parts","extractRoleValue"]}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Voice/Accessibility Language Profiles
3
+ *
4
+ * Pattern generation profiles for each supported language (8 total).
5
+ * These define keyword translations and word order for pattern generation.
6
+ *
7
+ * Role markers are specified via `markerOverride` on each schema role
8
+ * (in schemas/index.ts). Profile-level roleMarkers are only needed
9
+ * when the default position (SOV=after, else=before) is wrong.
10
+ */
11
+ import type { PatternGenLanguageProfile } from '@lokascript/framework';
12
+ export declare const enProfile: PatternGenLanguageProfile;
13
+ export declare const esProfile: PatternGenLanguageProfile;
14
+ export declare const jaProfile: PatternGenLanguageProfile;
15
+ export declare const arProfile: PatternGenLanguageProfile;
16
+ export declare const koProfile: PatternGenLanguageProfile;
17
+ export declare const zhProfile: PatternGenLanguageProfile;
18
+ export declare const trProfile: PatternGenLanguageProfile;
19
+ export declare const frProfile: PatternGenLanguageProfile;
20
+ export declare const allProfiles: PatternGenLanguageProfile[];
@@ -0,0 +1,16 @@
1
+ import type { CommandSchema } from '@lokascript/framework';
2
+ export declare const navigateSchema: CommandSchema;
3
+ export declare const clickSchema: CommandSchema;
4
+ export declare const typeSchema: CommandSchema;
5
+ export declare const scrollSchema: CommandSchema;
6
+ export declare const readSchema: CommandSchema;
7
+ export declare const zoomSchema: CommandSchema;
8
+ export declare const selectSchema: CommandSchema;
9
+ export declare const backSchema: CommandSchema;
10
+ export declare const forwardSchema: CommandSchema;
11
+ export declare const focusSchema: CommandSchema;
12
+ export declare const closeSchema: CommandSchema;
13
+ export declare const openSchema: CommandSchema;
14
+ export declare const searchSchema: CommandSchema;
15
+ export declare const helpSchema: CommandSchema;
16
+ export declare const allSchemas: CommandSchema[];
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Voice/Accessibility Tokenizers
3
+ *
4
+ * Language-specific tokenizers for voice command input (8 languages).
5
+ * All tokenizers include CSS selector support (#id, .class) since
6
+ * voice commands may reference DOM elements by selector.
7
+ */
8
+ import type { LanguageTokenizer } from '@lokascript/framework';
9
+ export declare const EnglishVoiceTokenizer: LanguageTokenizer;
10
+ export declare const SpanishVoiceTokenizer: LanguageTokenizer;
11
+ export declare const JapaneseVoiceTokenizer: LanguageTokenizer;
12
+ export declare const ArabicVoiceTokenizer: LanguageTokenizer;
13
+ export declare const KoreanVoiceTokenizer: LanguageTokenizer;
14
+ export declare const ChineseVoiceTokenizer: LanguageTokenizer;
15
+ export declare const TurkishVoiceTokenizer: LanguageTokenizer;
16
+ export declare const FrenchVoiceTokenizer: LanguageTokenizer;
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Voice/Accessibility Domain Types
3
+ */
4
+ import type { SemanticNode } from '@lokascript/framework';
5
+ /**
6
+ * Structured action spec extracted from a parsed voice command.
7
+ * Useful for dispatchers that want typed access to command details
8
+ * without re-parsing the SemanticNode.
9
+ */
10
+ export interface VoiceActionSpec {
11
+ action: string;
12
+ target?: string;
13
+ value?: string;
14
+ direction?: string;
15
+ amount?: string;
16
+ metadata: {
17
+ sourceLanguage: string;
18
+ };
19
+ }
20
+ /**
21
+ * Convert a parsed SemanticNode into a typed VoiceActionSpec.
22
+ */
23
+ export declare function toVoiceActionSpec(node: SemanticNode, language: string): VoiceActionSpec;
package/package.json ADDED
@@ -0,0 +1,48 @@
1
+ {
2
+ "name": "@lokascript/domain-voice",
3
+ "version": "2.1.0",
4
+ "description": "Multilingual voice/accessibility commands — 14 commands in 8 languages for speech-controlled web interaction",
5
+ "type": "module",
6
+ "sideEffects": false,
7
+ "main": "dist/index.cjs",
8
+ "module": "dist/index.js",
9
+ "types": "dist/index.d.ts",
10
+ "exports": {
11
+ ".": {
12
+ "types": "./dist/index.d.ts",
13
+ "import": "./dist/index.js",
14
+ "require": "./dist/index.cjs"
15
+ }
16
+ },
17
+ "scripts": {
18
+ "build": "tsup && npm run build:types",
19
+ "build:types": "tsc --emitDeclarationOnly --outDir dist --noEmit false",
20
+ "test": "vitest",
21
+ "test:run": "vitest run",
22
+ "test:check": "vitest run --reporter=dot 2>&1 | tail -5",
23
+ "typecheck": "tsc --noEmit"
24
+ },
25
+ "dependencies": {
26
+ "@lokascript/framework": "*"
27
+ },
28
+ "devDependencies": {
29
+ "@types/node": "^20.0.0",
30
+ "tsup": "^8.0.0",
31
+ "typescript": "^5.0.0",
32
+ "vitest": "^4.0.0"
33
+ },
34
+ "files": [
35
+ "dist",
36
+ "src",
37
+ "LICENSE"
38
+ ],
39
+ "publishConfig": {
40
+ "access": "public"
41
+ },
42
+ "license": "MIT",
43
+ "repository": {
44
+ "type": "git",
45
+ "url": "git+https://github.com/codetalcott/hyperfixi.git",
46
+ "directory": "packages/domain-voice"
47
+ }
48
+ }